DE2 实验练习解答lab 3锁存器触发器和寄存器digital LogicDE2quartus II.docx
《DE2 实验练习解答lab 3锁存器触发器和寄存器digital LogicDE2quartus II.docx》由会员分享,可在线阅读,更多相关《DE2 实验练习解答lab 3锁存器触发器和寄存器digital LogicDE2quartus II.docx(14页珍藏版)》请在冰豆网上搜索。
DE2实验练习解答lab3锁存器触发器和寄存器digitalLogicDE2quartusII
本练习的目的是研究锁存器、触发器和寄存器。
PartIRS锁存器
Altera的FPGA含有可供用户使用的触发器电路。
在PartIV演示如何使用它。
这里探讨如何不使用专用触发器来创建存储单元。
图1描述了门控锁存器电路。
可用门级电路或表达式来描述。
part1.v//rs锁存器门级描述
1//part1:
rs_ff
2modulers_ff(q,r,s,clk);
3inputclk,r,s;
4outputq;
5
6wirer_g,s_g,qa,qb/*synthesiskeep*/;
7
8and(r_g,r,clk);
9and(s_g,s,clk);
10nor(qa,r_g,qb);
11nor(qb,s_g,qa);
12
13assignq=qa;
14
15endmodule
16
其中/*synthesiskeep*/是编译指令,用来指定每个信号用一个单独的逻辑单元实现。
RTLViewer查看结果如下:
图2未加编译指令的RTL图
图3图2的内部结构
图5图4的内部结构
图4加上编译指令的RTL图
图6RS锁存器功能仿真结果
图7RS锁存器时序仿真结果
PartII门控D锁存器
如图8所示:
图8门控D锁存器
1.新建一个工程。
为门控D锁存器创建类似PartI中的代码,分析。
part2.v门控锁存器
1//part2top_levelfile
2moduletop_level(SW,LEDR0);
3input[1:
0]SW;//clk&d
4outputLEDR0;//q
5
6gated_d_latch(LEDR0,SW[0],SW[1]);
7
8endmodule
9
10
1//part2.vgatedd_latch
2modulegated_d_latch(q,d,clk);
3inputd,clk;
4outputq;
5
6wirer,s_g,r_g,qa,qb/*synthesiskeep*/;
7
8nand(s_g,d,clk);
9nand(r_g,r,clk);
10not(r,d);
11nand(qa,s_g,qb);
12nand(qb,r_g,qa);
13
14assignq=qa;
15
16endmodule
逻辑单元映射结果:
图9TechnologyMapViewer结果
仿真:
图10功能仿真结果
图11时序仿真结果
2.另建一个工程,新建一个顶层文件,定义相应的输入/出引脚,使用D锁存器,在DE2上验证。
指定引脚:
SW0
d
SW1
clk
LEDR0
q
小结:
锁存器是电平敏感型电路,D锁存器的优点在于不可能出现S=R=1这个麻烦状态。
Part III 主从D触发器
图12 主从D触发器
part3.v 主从D触发器
1//part3.vmaster_slavedff
2modulems_dff(SW,LEDR0);//Qm);
3input[1:
0]SW;
4outputLEDR0;
5//outputQm;
6
7wireqm,qs;
8
9gated_d_latchum(qm,SW[0],SW[1]);
10gated_d_latchus(qs,qm,~SW[1]);
11
12assignLEDR0=qs;
13//assignQm=qm;
14
15endmodule
仿真:
图13 主从D触发器功能仿真结果
Part IV 三种存储单元
电平敏感存储元件与跳变沿触发的存储元件之间的比较。
图14 三种存储元件
part4.v 代码
1//part4top_levelfile
2modulesu_3(d,clk,qa,qb,qc);
3inputd,clk;
4outputqa,qb,qc;
5
6d_latchul(d,clk,qa);
7dff_pudp(d,clk,qb);
8dff_nudn(d,clk,qc);
9
10endmodule
11
12//dff_p
13moduledff_p(d,clk,q);
14inputd,clk;
15outputq;
16
17wireqm,qs;
18
19d_latchum(d,~clk,qm);
20d_latchus(qm,clk,qs);
21
22assignq=qs;
23
24endmodule
25
26//dff_n
27moduledff_n(d,clk,q);
28inputd,clk;
29outputq;
30
31wireqm,qs;
32
33d_latchum(d,clk,qm);
34d_latchus(qm,~clk,qs);
35
36assignq=qs;
37
38endmodule
39
40//Dlatch
41moduled_latch(d,clk,q);
42inputd,clk;
43outputregq;
44
45always@(d,clk)
46if(clk)
47q=d;
48
49endmodule
50
图15 在fpga内实现的电路
图16 功能仿真结果
PartVD触发器的应用
在DE2上显示两个16位的16进制数A和B,A在HEX7-4上显示,B在HEX3-0上显示。
用SW15-0输入A,然后输入B,即要求数A存储在电路中。
指定KEY1为clock,KEY0为Reset。
part5.v代码:
1//dff_Rwithasynchronousreset
2moduledff_R(d,clk,rst_n,q);
3inputd,clk,rst_n;
4outputregq;
5
6always@(negedgerst_n,posedgeclk)
7if(!
rst_n)
8q<=0;
9else
10q<=d;
11
12endmodule
13
14//top-levelfile
15modulepart5(SW,KEY,HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,
16HEX1,HEX0);
17input[15:
0]SW;
18input[1:
0]KEY;
19output[6:
0]HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,
20HEX1,HEX0;
21
22wire[15:
0]q;
23
24dff_Ru0(SW[0],KEY[1],KEY[0],q[0]);
25dff_Ru1(SW[1],KEY[1],KEY[0],q[1]);
26dff_Ru2(SW[2],KEY[1],KEY[0],q[2]);
27dff_Ru3(SW[3],KEY[1],KEY[0],q[3]);
28dff_Ru4(SW[4],KEY[1],KEY[0],q[4]);
29dff_Ru5(SW[5],KEY[1],KEY[0],q[5]);
30dff_Ru6(SW[6],KEY[1],KEY[0],q[6]);
31dff_Ru7(SW[7],KEY[1],KEY[0],q[7]);
32dff_Ru8(SW[8],KEY[1],KEY[0],q[8]);
33dff_Ru9(SW[9],KEY[1],KEY[0],q[9]);
34dff_Ru10(SW[10],KEY[1],KEY[0],q[10]);
35dff_Ru11(SW[11],KEY[1],KEY[0],q[11]);
36dff_Ru12(SW[12],KEY[1],KEY[0],q[12]);
37dff_Ru13(SW[13],KEY[1],KEY[0],q[13]);
38dff_Ru14(SW[14],KEY[1],KEY[0],q[14]);
39dff_Ru15(SW[15],KEY[1],KEY[0],q[15]);
40
41//numberB
42seg7_lutuh0(q[3:
0],HEX0);
43seg7_lutuh1(q[7:
4],HEX1);
44seg7_lutuh2(q[11:
8],HEX2);
45seg7_lutuh3(q[15:
12],HEX3);
46//numberA
47seg7_lutuh4(q[3:
0],HEX4);
48seg7_lutuh5(q[7:
4],HEX5);
49seg7_lutuh6(q[11:
8],HEX6);
50seg7_lutuh7(q[15:
12],HEX7);
51
52endmodule
Conclusion
本实验是目前为止(alteraDE2数字逻辑)最容易的一个,所花时间较少即可完成。
主要从门级到类似C语言的行为描述来构建存储单元。
区分电平敏感和边沿触发。
Reference
1.Altera数字逻辑设计实验练习3(DE2光盘)
2.《数字逻辑基础与verilog设计》ch7.StephenBrown…
ps:
这个实验要么是Stephen本人设计的,要么设计者看了他的这本书。
完全一样。
:
)