我是靠谱客的博主 默默大碗,这篇文章主要介绍实验四 计数器,现在分享给大家,希望可以做个参考。

五、实验步骤与实验结果

1、用Verilog VHDL设计D触发器。打开QuarterII新建一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:dianluecp1文件夹中,新建一个Verilog HDL文件,将附件一代码写入,运行无错误,查看My74161计数器的逻辑图(图1-1),重新运行,无误后,进行“Creat symbol files for current file”操作,将My74161.bsf和My74161.v文件复制到ecp2文件夹中。

图1-1 My74161计数器的逻辑图

对My74161计数器进行仿真。仿真图如图1-2 My74161触发器的仿真图。可知功能表4-1与仿真图一致。

图1-2 My74161计数器的仿真图

2、用My74161计数器组成24进制计数器。再创建一个一个基于ALTERA的Cyclone系列FPGA芯片EP1C3T144C8N的项目保存在D:dianluecp3文件夹中,通过自己设计的74161计数器进行24进制原理图设计,设计图如图2-1,连接完毕后进行引脚锁定,如图2-2。注意:24进制的进位应该从23开始,23的二进制0001_0111,

图2-1 24进制计数器

图2-2 24进制计数器引脚锁定

3、将24进制计数器进行仿真。仿真图如图3-2,仿真图解读:从0到23一直循环执行下去。

图3-2 仿真图

4、将三位缓冲寄存器下载到FPGA开发板上进行测试,开发板验证结果可以对比仿真图的测试结果,判断逻辑功能是否正确。结果如图4-1,注意:LED灯是是输出为0时才亮

表4-1

脉冲个数

输出结果(Q7Q6Q5 Q4Q3Q2 Q1Q0)

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

0000_0000

0000_0001

0000_0010

0000_0011

0000_0100

0000_0101

0000_0110

0000_0111

0000_1000

0000_1001

0000_1010

0000_1011

0000_1100

0000_1101

0000_1110

0000_1111

0001_0000

0001_0001

0001_0010

0001_0011

0001_0100

0001_0101

0001_0010

0001_0011

0000_0000

5、将输出的结果显示到数码位上而不是单纯的看led的亮与不亮,实现的思路,通过原理图的方式,将输出的Q连接到总线上,然后再连接到我自定义的7段码译码器上。

7段码译码器的实现见附件二,24进制的输出结果用7段码显示见5-1用7段码译码器实现24进制的原理图。

图5-1 用7段码译码器实现24进制的原理图

六、实验讨论与总结

1.准备工作,Quattus创建一个D触发器和一个基本RS触发器,前者为了设计三位缓冲寄存器和四位左移移位寄存器,写verilog代码的时候一定要注意是上升沿触发还是下降沿触发。

2.注意本实验是同步时序电路,千万不要连接成异步的时序电路,同步异步的区别在于clk是不是连接在同一个脉冲上

3.一个74161最大可以构成2^4进制计数器,而两个就可以构成最大2^16进制计数器,所以构造一个24进制计数器用两个74161就可以

4.构成N进制计数器可以通过反馈清零法和同步置数法进行清零,前者不如后者

5.实现了输出结果用7段码的显示

附件一:My74161触发器代码

复制代码
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
module My74161(clk, ldn,rdn,ep,et,d3,d2,d1,d0,q3,q2,q1,q0,co); input clk, ldn,rdn,ep,et,d3,d2,d1,d0; output q3,q2,q1,q0, co; reg[3:0] Q; reg q3,q2,q1,q0,co; always @(posedge clk or negedge rdn) begin if(!rdn) Q <= 4'b0000; else if(!ldn) begin Q[3] <= d3;Q[2] <= d2;Q[1] <= d1;Q[0] <= d0; end else if((ep == 1'b1) && (et == 1'b1)) Q <= Q + 4'b0001; end always @(Q,et) begin co <= Q[3] && Q[2] && Q[1] && Q[0] && et; q3 <= Q[3];q2 <=Q[2]; q1 <=Q[1];q0 <= Q[0]; end endmodule

附件二:7段码显示的代码

复制代码
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
module my7(clk,RN,Q,seg_out,dig_sel_n); input clk,RN; reg clk10ms; input [4:0]Q; reg [17:0] cnt2; //10ms----20MHZ入100HZ输出 //fiv_clock_10ms: 10ms----20MHZ入100HZ输出 always @(posedge clk or negedge RN) begin if(!RN) cnt2 <=0; else begin if(cnt2 == 199_999) cnt2 <=0; else cnt2 <= cnt2 + 1; if (cnt2 <100_000) clk10ms <= 1'b1; else clk10ms <= 1'b0; end end //zhe shi er xuan yi reg cnt22; always @(posedge clk10ms) begin if(!RN) cnt22 <= 0; else begin if(cnt22 == 1) cnt22 <=0; else cnt22 <= cnt22 + 1; end end //zhe shi 7 duan ma shu chu output reg[7:0] seg_out; output reg [7:0] dig_sel_n; function [7:0] seg7; input [3:0] data; begin case(data) 0: seg7= 8'b11000000; 1: seg7= 8'b11111001; 2: seg7= 8'b10100100; 3: seg7= 8'b10110000; 4: seg7= 8'b10011001; 5: seg7= 8'b10010010; 6: seg7= 8'b10000010; 7: seg7= 8'b11111000; 8: seg7= 8'b10000000; 9: seg7= 8'b10010000; default: seg7= 8'b11111111; endcase end endfunction always @(cnt22 ,Q,RN) begin if(!RN) begin dig_sel_n <= 8'b11111111; seg_out <=8'b11111111; end else case(cnt22) 0: begin dig_sel_n <= 8'b11111110; seg_out <= seg7(Q%10); end 1: begin dig_sel_n <= 8'b11111101; seg_out <= seg7(Q/10);end default: begin dig_sel_n <= 8'b11111111; seg_out <= 8'b11111111;end endcase end endmodule

最后

以上就是默默大碗最近收集整理的关于实验四 计数器的全部内容,更多相关实验四内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部