【Verilog】有限状态机
生活随笔
收集整理的這篇文章主要介紹了
【Verilog】有限状态机
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
功能:
?
設計思路:
? 首先對100M頻率分頻至1hz,然后對1hz信號的上升沿數(shù)量從0開始計數(shù),保存在count中,那么count的值就是當前的總時間(單位為秒)。通過數(shù)學計算算出count對應的時分秒各自十位和個位的值,這是程序的第一部分。
? 然后是顯示時間,以1khz頻率對六個數(shù)碼管輪流顯示,顯示值為該位上當前時刻對應的數(shù)值(時分秒的十位、個位),具體輸出給顯示管的是七段譯碼器的輸出值。
? 其次是設計校時功能,h為小時校時輸入,當h有效時,由1hz信號上升沿為觸發(fā),對count加3600(1h),同理,min為分鐘校時輸入,當min有效時,由1hz信號上升沿為觸發(fā),對count加60(1min)。
?
Verilog代碼:
`timescale 1ns / 1psmodule Statu(y, en, m, clk_100M);input m, en, clk_100M;output[2:0] y;reg[2:0] y;reg[15:0] count1;reg[8:0] count2;reg clk_1khz, clk_1hz;//變量說明://y為狀態(tài)值,en為高有效使能,m為輸入,clk_100M為100M的時鐘信號//count1和count2是分頻器計的數(shù)變量,clk_1khz和clk_1hz是分頻器的輸出//中間變量必須初始化initial beginy = 3'b111;clk_1khz = 0;clk_1hz = 0;count1 = 0;count2 = 0;end//100M 100000分頻得到1khzalways@(posedge clk_100M)beginif(count1 == 16'd49999)beginclk_1khz <= ~clk_1khz;count1 <= 0;endelse count1 <= count1 + 1;end//1khz 1000分頻得到1hzalways@(posedge clk_1khz)beginif(count2 == 9'd499)beginclk_1hz <= ~clk_1hz;count2 <= 0;endelse count2 <= count2 + 1;end//狀態(tài)機always@(posedge clk_1hz)beginif(en == 1)case(y)3'b111: y <= 3'b000;3'b000: y <= 3'b110;3'b110: y <= m==1? 3'b100 : 3'b010;3'b100: y <= m==1? 3'b101 : 3'b110;3'b101: y <= m==1? 3'b001 : 3'b100;3'b001: y <= m==1? 3'b011 : 3'b101;3'b011: y <= m==1? 3'b010 : 3'b001;3'b010: y <= m==1? 3'b110 : 3'b011;endcaseelse y <= 0;endendmodule?
測試代碼:
`timescale 1ns / 1psmodule test;// Inputsreg en;reg m;reg clk_100M;reg count1, count2, clk_1khz, clk_1hz;// Outputswire [2:0] y;Statu uut (.y(y), .en(en), .m(m), .clk_100M(clk_100M));//初始化initialbeginen = 1;m = 0;clk_100M = 0;count1 = 0;count2 = 0;clk_1khz = 0;clk_1hz = 0;end//100M時鐘信號always #50 clk_100M = ~clk_100M;always #850 m = 1;endmodule?
效果演示:
總結(jié)
以上是生活随笔為你收集整理的【Verilog】有限状态机的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Verilog】基于Nexys4DDR
- 下一篇: 【移动通信】移动通信基础