十进制可逆计数器

十进制可逆计数器

简介

这次试验要做的是,通过在试验箱中选取$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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module gal_3035_3(ld,clk,d,ud,clr,Q,co); 
input ld,ud,clr,clk;
input [3:0]d;
output reg [3:0]Q;
output reg co;

always@(posedge clk)
begin
if(!clr) // clr为0时,不进行清零操作
begin
if(ld) // ld为1时,进行置数操作
begin
Q[3]=d[3];
Q[2]=d[2];
Q[1]=d[1];
Q[0]=d[0];
end
else
begin
if(ud) //ud是1时,倒序置数
begin
if(Q==4'b0000)
begin
Q<=4'b1001;
co<=1;
end
else
begin
Q<=Q-1;
co<=0;
end
end
else // ud是0时,顺序置数
begin
if(Q==4'b1001)
begin
Q<=4'b0000;
co<=1;
end
else
begin
Q<=Q+1;
co<=0;
end
end
end
end
else
begin
Q<=4'b0000;
end
end
endmodule

波形仿真

引脚分配

$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
文章作者: FcAYH
文章链接: http://www.fcayh.cn/2021/01/19/tencounter/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Forever丶CIL