十进制可逆计数器
简介
这次试验要做的是,通过在试验箱中选取$4$个$LED$灯,亮则为$1$,灭则为$0$,拼成一个4位二进制数。并且要实现从$0\ -\ 9$的顺序变换,即从$0000$到$1001$。
不过老师的要求还要多一点,要支持清零,置数,倒转三个功能。清零即当清零按键按下时,$LED$灯的状态变为$0000$。置数即还需额外选择$4$个按键,闭合为$1$,断开为$0$,当置数按键按下时,将$LED$灯的状态变为$4$个按键组成的状态。倒转即当倒转按键按下时,状态从$0000$到$1001$,而断开时为$1001$到$0000$。
还有一点,当从$1001$跳变到$0000$时要输出借位信号为$1$。
过程
其实和上一个实验是类似的,定义一个$4$位二进制数$Q$,通过试验箱上的$CLK$器件产生时间脉冲,每当接受到一次脉冲$Q=Q+1$,当$Q$为$1001$时,就要变成$0000$。
而清零,置数,倒转,均通过$if/else$语句实现,写法较为简单,可以直接看代码。
代码
1 | module gal_3035_3(ld,clk,d,ud,clr,Q,co); |
波形仿真
引脚分配
$Family:Cyclone\ IV\ E\ \ \ \ \ \ \ \ Device:EP4CE22E22C8$
信号名 | 主板器件 | PIN |
---|---|---|
Q[3] | LED3 | 54 |
Q[2] | LED2 | 52 |
Q[1] | LED1 | 50 |
Q[0] | LED0 | 46 |
clr | KEY1 | 31 |
co | LED4 | 58 |
clk | CLK0 | 88 |
d[3] | KEY5 | 42 |
d[2] | KEY4 | 32 |
d[1] | KEY3 | 33 |
d[0] | KEY2 | 30 |
ld | KEY6 | 39 |
ud | KEY7 | 44 |