名稱:數(shù)字秒表設(shè)計(jì)正計(jì)、倒計(jì)數(shù)跑表(代碼在文末付費(fèi)下載)
軟件:Quartus,ModelSim
語言:Verilog HDL
代碼功能:
《數(shù)字秒表設(shè)計(jì)》項(xiàng)目要求
(1)計(jì)時(shí)精度 1ms,計(jì)時(shí)范圍 00:00.000~99:59.999,對(duì)應(yīng)分:秒:毫秒,對(duì)應(yīng)的液晶屏能完整顯示。
(2)設(shè)置 S3 為復(fù)位鍵,S0 為啟動(dòng)/暫停鍵,控制秒表復(fù)位、啟動(dòng)/暫停;設(shè)置 S2 為功能選擇鍵,可在正計(jì)數(shù)模式、倒計(jì)數(shù)設(shè)置模式、倒計(jì)數(shù)工作模式、計(jì)數(shù)值回看模式之間輪流切換。切換任意模式后,原來的計(jì)數(shù)值不會(huì)消失。
(3)正計(jì)數(shù)模式時(shí),總是從 00:00.000 開始,設(shè)置 S3 為復(fù)位鍵,S0 為啟動(dòng)/暫停鍵,控制秒表復(fù)位、啟動(dòng)、暫停。每暫停一次,就計(jì)數(shù)一次,若計(jì)數(shù)次數(shù)已經(jīng)滿 10 次,則后一次的計(jì)數(shù)值依次覆蓋前一次的計(jì)數(shù)值。
(4)倒計(jì)數(shù)設(shè)置模式時(shí),S3/S0 鍵選擇調(diào)整位置;S4/S1 鍵進(jìn)行±調(diào)整,在合法值域內(nèi)變動(dòng)。每按一次 S0,跳動(dòng)(待修改)的位就向左移動(dòng)一位,每按一次 S3,跳動(dòng)(待修改)的位就向右移動(dòng)一位,每按一次 S1,對(duì)應(yīng)位的數(shù)字減少 1 ,每按一次 S4 ,對(duì)應(yīng)位的數(shù)字增加 1;
(5)倒計(jì)數(shù)工作模式時(shí),設(shè)置 S3 為復(fù)位鍵,S0 為啟動(dòng)/暫停鍵,控制秒表復(fù)位、啟動(dòng)、暫停。每暫停一次,就計(jì)數(shù)一次,若計(jì)數(shù)次數(shù)已經(jīng)滿 10 次,則后一次的計(jì)數(shù)值依次覆蓋前一次的計(jì)數(shù)值。
(6)計(jì)數(shù)值回看模式時(shí),S3/S0 鍵進(jìn)行前/后翻操作,查看每次的計(jì)數(shù)值,最多能記錄 10 次計(jì)數(shù)值。
需要的內(nèi)容
需要仿真:所提及的按鍵、開關(guān)均通過自定激勵(lì)文件進(jìn)行模擬;提及的顯示均通過輸出信號(hào)表達(dá),對(duì)顯示的數(shù)字除非特別說明,均為十進(jìn)制數(shù)字;提及的指示燈亮滅均通過輸出信號(hào)的高低電平對(duì)應(yīng) 。
演示視頻:
FPGA代碼資源下載網(wǎng):hdlcode.com
部分代碼展示
module?top( input?clk_1KHz,//1ms input?S0,S1,S2,S3,S4, output??[7:0]?HEX0,//數(shù)碼管-低亮 output??[7:0]?HEX1,//數(shù)碼管-低亮 output??[7:0]?HEX2,//數(shù)碼管-低亮 output??[7:0]?HEX3,//數(shù)碼管-低亮 output??[7:0]?HEX4,//數(shù)碼管-低亮 output??[7:0]?HEX5,//數(shù)碼管-低亮 output??[7:0]?HEX6?//數(shù)碼管-低亮 ); wire?store_en_1;//存儲(chǔ)信號(hào) wire?store_en_2;//存儲(chǔ)信號(hào) wire?[1:0]?mode; wire?[9:0]?Millisecond;//毫秒 wire?[7:0]?second;//秒 wire?[7:0]?minute;?//分 wire?[9:0]?Millisecond_set;//毫秒 wire?[7:0]?second_set;//秒 wire?[7:0]?minute_set;//分 wire?[9:0]?down_Millisecond;//毫秒 wire?[7:0]?down_second;//秒 wire?[7:0]?down_minute;?//分 wire?[9:0]?call_Millisecond;//回看毫秒 wire?[7:0]?call_second;//回看秒 wire?[7:0]?call_minute;?//回看分 //跑表模塊 //正計(jì)數(shù)模式時(shí),總是從?00:00.000?開始,設(shè)置?S3?為復(fù)位鍵,S0?為啟動(dòng)/暫停鍵,控制秒表復(fù)位、啟動(dòng) //、暫停。每暫停一次,就計(jì)數(shù)一次,若計(jì)數(shù)次數(shù)已經(jīng)滿?10?次,則后一次的計(jì)數(shù)值依次覆蓋前一次的計(jì)數(shù)值。 stopwatch?i_stopwatch( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?start_key(S0),//啟動(dòng)/暫停--S0 .?reset_key(S3),//復(fù)位--S3 .?store_en(store_en_1),//存儲(chǔ)信號(hào) .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute)?//分 ); //倒計(jì)數(shù)設(shè)置模式時(shí) //S3/S0?鍵選擇調(diào)整位置;S4/S1?鍵進(jìn)行±調(diào)整,在合法值域內(nèi)變動(dòng)。 //每按一次?S0,跳動(dòng)(待修改)的位就向左移動(dòng)一位,每按一次?S3, //跳動(dòng)(待修改)的位就向右移動(dòng)一位,每按一次?S1,對(duì)應(yīng)位的數(shù)字減少?1?, //每按一次?S4?,對(duì)應(yīng)位的數(shù)字增加?1; set_time?i_set_time( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?S0(S0),//左移動(dòng)一位 .?S1(S1),//數(shù)字減少?1 .?S3(S3),//右移動(dòng)一位 .?S4(S4),//數(shù)字增加?1 //倒計(jì)時(shí)起始時(shí)間 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set)?//分 ); //倒計(jì)數(shù)工作模式時(shí) //倒計(jì)數(shù)工作模式時(shí),設(shè)置?S3?為復(fù)位鍵,S0?為啟動(dòng)/暫停鍵,控制秒表復(fù)位、啟動(dòng)、暫停。 //每暫停一次,就計(jì)數(shù)一次,若計(jì)數(shù)次數(shù)已經(jīng)滿?10?次,則后一次的計(jì)數(shù)值依次覆蓋前一次的計(jì)數(shù)值。 downtime?i_downtime( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?start_key(S0),//啟動(dòng)/暫停--S0 .?reset_key(S3),//復(fù)位--S3 //倒計(jì)時(shí)起始時(shí)間 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set),//分 .?store_en(store_en_2),//存儲(chǔ)信號(hào) .?Millisecond(down_Millisecond),//毫秒 .?second(down_second),//秒 .?minute(down_minute)?//分 ); //回看模式 //計(jì)數(shù)值回看模式時(shí),S3/S0?鍵進(jìn)行前/后翻操作,查看每次的計(jì)數(shù)值,最多能記錄?10?次計(jì)數(shù)值。 call_back?i_call_back( .?clk_1KHz(clk_1KHz),//1ms .?mode(mode), .?call_before(S3),//S3-前翻操作 .?call_later(S0),//S0--后翻操作 .?store_en(store_en_1?||?store_en_2),//存儲(chǔ)信號(hào) .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute),//分 .?down_Millisecond(down_Millisecond),//毫秒 .?down_second(down_second),//秒 .?down_minute(down_minute),//分 .?call_Millisecond(call_Millisecond),//回看毫秒 .?call_second(call_second),//回看秒 .?call_minute(call_minute)?//回看分 ); //顯示模式 display?i_display( .?clk(clk_1KHz), .?S2(S2),//模式切換,在正計(jì)數(shù)模式、倒計(jì)數(shù)設(shè)置模式、倒計(jì)數(shù)工作模式、計(jì)數(shù)值回看模式之間輪流切換 .?mode(mode), ????//正計(jì)時(shí) .?Millisecond(Millisecond),//毫秒 .?second(second),//秒 .?minute(minute),//分 ????//倒計(jì)時(shí) .?down_Millisecond(down_Millisecond),//毫秒 .?down_second(down_second),//秒 .?down_minute(down_minute),//分 ???? ????//倒計(jì)時(shí)起始時(shí)間 .?Millisecond_set(Millisecond_set),//毫秒 .?second_set(second_set),//秒 .?minute_set(minute_set),//分 ???? ????//回看時(shí)間 .?call_Millisecond(call_Millisecond),//回看毫秒 .?call_second(call_second),//回看秒 .?call_minute(call_minute),//回看分 .?HEX0(HEX0),//數(shù)碼管-低亮 .?HEX1(HEX1),//數(shù)碼管-低亮 .?HEX2(HEX2),//數(shù)碼管-低亮 .?HEX3(HEX3),//數(shù)碼管-低亮 .?HEX4(HEX4),//數(shù)碼管-低亮 .?HEX5(HEX5),//數(shù)碼管-低亮 .?HEX6(HEX6)?//數(shù)碼管-低亮 ); endmodule
設(shè)計(jì)文檔:
1. 工程文件
2. 程序文件
3. 程序編譯
4. RTL圖
5. Testbench
6. 仿真圖
整體仿真圖
正計(jì)時(shí)模塊
倒計(jì)時(shí)設(shè)置
倒計(jì)時(shí)計(jì)時(shí)
回看模塊
顯示模塊
點(diǎn)擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=198