HDLbits 刷题答案 3.2.2 Counters
3.2.2 Counters
3.2.2.1 Count15
创建一个计数器,当同步复位信号reset置1时,清零

3.2.2.2 Decade counter
模10计数器

3.2.2.3 Decade counter again
从1-10计数

3.2.2.3 Slow decade counter
带使能端和复位端的模10计数器

3.2.2.4 Counter1-12
根据以下输入输出信号设计一个计算1~12的计数器
Reset:同步复位信号,高复位,将计数器复位为1.
Enable:使能信号高有效
Clk:时钟上升沿触发计数器工作
Q[3:0]:计数器输出
c_enable, c_load, c_d[3:0]:题目中给我们提供了一个4-bit的计数器,这三个信号是用于该4-bit计数器的控制信号。
题目提供给我们4-bit计数器
有enable信号,带复位和置位的计数器,将该计数器例化至我们的代码中。
再用一些其他的逻辑门来完成本题

这个我没看懂,从网上找的代码
3.2.2.5 Counter1000
用4bit的BCD码实现个、十、百的计数,当计数1000次后,OneHertz输出为1
通过例化如下`module`实现该功能

当个位计数10次,十位计数1次
当十位计数10次,百位计数1次
3.2.2.6 4-digital decimal counter
同步复位信号ena[3:0]
代表进位输出信号q
为16-bi
t
数据输出,用BCD的形式表示

总的来说,就是设计一个从0能计数到9999的计数器,从代码中可以看出,我用来4个`always`块来计数,分别代表个位、十位、百位和千位,在`one`的`always`块中,当`one`计数到`9`,就将`one`清零,在`ten`的 `always`块中,当`one`和`ten`都计数到`9`时,将其清零;在`one`计数到`9`时,`ten`才计数一次,同理,`hundred` 和`thousand`都是如此计数的,最后,将千位、百位、十位和个位,用连续赋值语句`assign`传递给`q`,对于进位输出信号`ena`,我也用连续赋值语句`assign`进行赋值,当`one`为`9`的时候,`ena[1]`条件为真,输出为`1`,同理,`ena[2]` 和`ena[3]`处理方法类似
3.2.2.7 12-hour clock
创建一个带PM和AM的12小时制的时钟,要求
reset时,时间为12:00:00 AM
ena有效时候,开始计时
pm=0是AM,pm=1是PM
若11:59:59是AM,下一时刻12:00:00为PM