文章目錄
- 一、題目解析
-
二、代碼模塊化分析
- 1.分頻模塊(divider_module)
- 2.計數(shù)器模塊(實現(xiàn)毫秒,秒,分鐘的計數(shù)實現(xiàn))
- 3.動態(tài)數(shù)碼管顯示模塊(數(shù)碼管段選和位選)
- 三、總結(jié)
一、題目解析
?題目要求使用VerilogHDL設(shè)計一個數(shù)字跑表,需要具有CLR,PAUSE以及六位數(shù)碼管的計時跑表,并編寫測試代碼實現(xiàn)其仿真驗證。
二、代碼模塊化分析
? ? ? ?從題目的任務(wù)分析我們可以看出:首先我們需要一個百分秒時鐘,以實現(xiàn)最低位的時鐘需求;其次需要計數(shù)器模塊,將百分秒的計數(shù)輸出信號轉(zhuǎn)化給秒,分鐘;然后需要將百分秒,秒,分鐘的數(shù)據(jù)結(jié)果顯示到動態(tài)數(shù)碼管中,因此需要設(shè)計一個動態(tài)數(shù)碼管顯示以及數(shù)據(jù)轉(zhuǎn)化的模塊;最后利用top層將各模塊相連接,實現(xiàn)題目要求。
1.分頻模塊:
通過公式計算出10ms對應(yīng)的計數(shù)值,在always語句中設(shè)置計數(shù)累加,判斷值達到后計數(shù)count清零,CLK取高電平,實現(xiàn)每10ms一次上升沿信號的分頻模塊。(注:一般的FPGA板內(nèi)部晶振時鐘為50MHz)
2.計數(shù)器模塊
代碼如下:
將分頻模塊中的輸出時鐘(即10ms時鐘)作為計數(shù)模塊的輸入,在百分秒計數(shù)滿100后,實現(xiàn)百分秒的清零,并給出一個高電平信號(即cn1==1),達到第二個always語句的觸發(fā)條件,在接收60次cn1的觸發(fā)之后(即秒位計數(shù)60秒),實現(xiàn)秒位的清零,并同理給出cn2==1的觸發(fā)信號,實現(xiàn)分鐘位的計數(shù)。?
3.動態(tài)數(shù)碼管顯示模塊
在實現(xiàn)動態(tài)數(shù)碼管顯示模塊之前,我們需要了解的是,動態(tài)數(shù)碼管是通過段選和位選實現(xiàn),因此每次只能顯示一個數(shù)碼管上的值,但是在較快的刷新頻率下使肉眼不能產(chǎn)生余暉效應(yīng),無法捕捉到數(shù)碼管的變化(即用較快的速度騙過人們的眼睛),即可實現(xiàn)幾位數(shù)碼管同時顯示的效果。
由于實驗板的數(shù)碼管是共陰,因此在位選信號時應(yīng)該給予低信號驅(qū)動,段選時則應(yīng)該使用高電平信號。
代碼如下:
代碼中的function用于實現(xiàn)計數(shù)器模塊輸出的sum值轉(zhuǎn)化為數(shù)碼管的段選值;選擇合適的刷新頻率完成簡易的分頻,實現(xiàn)位選信號的循環(huán)(即第一個always語句塊);最后將所有的6位位選信號和8位段選信號統(tǒng)一賦值給DATA1,實現(xiàn)此模塊的功能。
三、總結(jié)
我將最終整合的top層代碼放到了總結(jié)處:文章來源:http://www.zghlxwxcb.cn/news/detail-432477.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-432477.html
到了這里,關(guān)于基于VerilogHDL的數(shù)字跑表詳細(西科大)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!