HDLbits 刷題答案 3.2.2 Counters
3.2.2 Counters
3.2.2.1 Count15
創(chuàng)建一個(gè)計(jì)數(shù)器,當(dāng)同步復(fù)位信號(hào)reset置1時(shí),清零

3.2.2.2 Decade counter
模10計(jì)數(shù)器

3.2.2.3 Decade counter again
從1-10計(jì)數(shù)

3.2.2.3 Slow decade counter
帶使能端和復(fù)位端的模10計(jì)數(shù)器

3.2.2.4 Counter1-12
根據(jù)以下輸入輸出信號(hào)設(shè)計(jì)一個(gè)計(jì)算1~12的計(jì)數(shù)器
Reset:同步復(fù)位信號(hào),高復(fù)位,將計(jì)數(shù)器復(fù)位為1.
Enable:使能信號(hào)高有效
Clk:時(shí)鐘上升沿觸發(fā)計(jì)數(shù)器工作
Q[3:0]:計(jì)數(shù)器輸出
c_enable, c_load, c_d[3:0]:題目中給我們提供了一個(gè)4-bit的計(jì)數(shù)器,這三個(gè)信號(hào)是用于該4-bit計(jì)數(shù)器的控制信號(hào)。
題目提供給我們4-bit計(jì)數(shù)器
有enable信號(hào),帶復(fù)位和置位的計(jì)數(shù)器,將該計(jì)數(shù)器例化至我們的代碼中。
再用一些其他的邏輯門來完成本題

這個(gè)我沒看懂,從網(wǎng)上找的代碼
3.2.2.5 Counter1000
用4bit的BCD碼實(shí)現(xiàn)個(gè)、十、百的計(jì)數(shù),當(dāng)計(jì)數(shù)1000次后,OneHertz輸出為1
通過例化如下`module`實(shí)現(xiàn)該功能

當(dāng)個(gè)位計(jì)數(shù)10次,十位計(jì)數(shù)1次
當(dāng)十位計(jì)數(shù)10次,百位計(jì)數(shù)1次
3.2.2.6 4-digital decimal counter
同步復(fù)位信號(hào)ena[3:0]
代表進(jìn)位輸出信號(hào)q
為16-bi
t
數(shù)據(jù)輸出,用BCD的形式表示

總的來說,就是設(shè)計(jì)一個(gè)從0能計(jì)數(shù)到9999的計(jì)數(shù)器,從代碼中可以看出,我用來4個(gè)`always`塊來計(jì)數(shù),分別代表個(gè)位、十位、百位和千位,在`one`的`always`塊中,當(dāng)`one`計(jì)數(shù)到`9`,就將`one`清零,在`ten`的 `always`塊中,當(dāng)`one`和`ten`都計(jì)數(shù)到`9`時(shí),將其清零;在`one`計(jì)數(shù)到`9`時(shí),`ten`才計(jì)數(shù)一次,同理,`hundred` 和`thousand`都是如此計(jì)數(shù)的,最后,將千位、百位、十位和個(gè)位,用連續(xù)賦值語(yǔ)句`assign`傳遞給`q`,對(duì)于進(jìn)位輸出信號(hào)`ena`,我也用連續(xù)賦值語(yǔ)句`assign`進(jìn)行賦值,當(dāng)`one`為`9`的時(shí)候,`ena[1]`條件為真,輸出為`1`,同理,`ena[2]` 和`ena[3]`處理方法類似
3.2.2.7 12-hour clock
創(chuàng)建一個(gè)帶PM和AM的12小時(shí)制的時(shí)鐘,要求
reset時(shí),時(shí)間為12:00:00 AM
ena有效時(shí)候,開始計(jì)時(shí)
pm=0是AM,pm=1是PM
若11:59:59是AM,下一時(shí)刻12:00:00為PM