原创DE2 实验练习解答—lab 3:锁存器触发器和寄存器(digital Logic)(DE2)(quartus II)

Posted mb62bc064f8f791

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创DE2 实验练习解答—lab 3:锁存器触发器和寄存器(digital Logic)(DE2)(quartus II)相关的知识,希望对你有一定的参考价值。

本练习的目的是研究锁存器、触发器和寄存器。

 

Part I RS锁存器

 

Altera的FPGA含有可供用户使用的触发器电路。在Part IV演示如何使用它。这里探讨如何不使用专用触发器来创建存储单元。

图1描述了门控锁存器电路。可用门级电路或表达式来描述。

【原创】DE2

part1.v //rs锁存器门级描述

 

1 //part 1:rs_ff

2 module rs_ff(q,r,s,clk);

3 input clk,r,s;

4 output q;

5

6 wire r_g,s_g,qa,qb/*synthesis keep*/;

7

8 and(r_g,r,clk);

9 and(s_g,s,clk);

10 nor(qa,r_g,qb);

11 nor(qb,s_g,qa);

12

13 assign q=qa;

14

15 endmodule

16


 

 

其中/*synthesis keep*/是编译指令,用来指定每个信号用一个单独的逻辑单元实现。RTL Viewer查看结果如下:

 

【原创】DE2

图2 未加编译指令的RTL图

【原创】DE2

图3 图2的内部结构

 

 

【原创】DE2

图5 图4的内部结构

【原创】DE2

图4 加上编译指令的RTL图

 

【原创】DE2

图6 RS锁存器功能仿真结果

 

【原创】DE2

图7 RS锁存器时序仿真结果

 

Part II 门控D锁存器

如图8所示:

【原创】DE2

图8 门控D锁存器

 

  1. 新建一个工程。为门控D锁存器创建类似Part I中的代码,分析。

part2.v 门控锁存器

 

1 //part2 top_level file

2  module top_level(SW,LEDR0);

3 input [1:0]SW; //clk & d

4  output LEDR0; //q

5  

6 gated_d_latch(LEDR0,SW[0],SW[1]);

7

8  endmodule

9

10  


 

1 //part2.v gated d_latch

2  module gated_d_latch(q,d,clk);

3 input d,clk;

4 output q;

5

6 wire r,s_g,r_g,qa,qb/*synthesis keep*/;

7

8 nand(s_g,d,clk);

9 nand(r_g,r,clk);

10 not(r,d);

11 nand(qa,s_g,qb);

12 nand(qb,r_g,qa);

13

14 assign q=qa;

15

16  endmodule


 

 

逻辑单元映射结果:

【原创】DE2

图9 Technology Map Viewer结果

 

仿真:

【原创】DE2

图10 功能仿真结果

 

【原创】DE2

图11 时序仿真结果

 

2. 另建一个工程,新建一个顶层文件,定义相应的输入/出引脚,使用D锁存器,在DE2上验证。

指定引脚:

SW0


SW1

clk

LEDR0


 

 

小结:锁存器是电平敏感型电路,D锁存器的优点在于不可能出现S=R=1这个麻烦状态。

 

 

Part III 主从D触发器

 

【原创】DE2

图12 主从D触发器

 

part3.v 主从D触发器

 

1 //part3.v master_slave dff

2  module ms_dff(SW,LEDR0);//Qm);

3  input [1:0]SW;

4 output LEDR0;

5 //output Qm;

6  

7 wire qm,qs;

8

9 gated_d_latch um(qm,SW[0],SW[1]);

10 gated_d_latch us(qs,qm,~SW[1]);

11

12 assign LEDR0=qs;

13 //assign Qm=qm;

14  

15  endmodule


 

 

【原创】DE2

仿真:

【原创】DE2

图13 主从D触发器功能仿真结果

 

 

 

Part IV 三种存储单元

 

电平敏感存储元件与跳变沿触发的存储元件之间的比较。

【原创】DE2

图14 三种存储元件

 

part4.v 代码

 

1 //part4 top_level file

2  module su_3(d,clk,qa,qb,qc);

3 input d,clk;

4 output qa,qb,qc;

5

6 d_latch ul(d,clk,qa);

7 dff_p udp(d,clk,qb);

8 dff_n udn(d,clk,qc);

9

10 endmodule

11

12 //dff_p

13 module dff_p(d,clk,q);

14 input d,clk;

15 output q;

16

17 wire qm,qs;

18

19 d_latch um(d,~clk,qm);

20 d_latch us(qm,clk,qs);

21

22 assign q=qs;

23

24 endmodule

25

26 //dff_n

27 module dff_n(d,clk,q);

28 input d,clk;

29 output q;

30

31 wire qm,qs;

32

33 d_latch um(d,clk,qm);

34 d_latch us(qm,~clk,qs);

35

36 assign q=qs;

37

38 endmodule

39

40 //D latch

41 module d_latch(d,clk,q);

42 input d,clk;

43 outputreg q;

44

45 always @(d,clk)

46 if(clk)

47 q=d;

48

49 endmodule

50


 

 

 

【原创】DE2

图15 在fpga内实现的电路

 

【原创】DE2

【原创】DE2

图16 功能仿真结果

Part V D触发器的应用

 

在DE2上显示两个16位的16进制数A和B,A在HEX7-4上显示,B在HEX3-0上显示。用SW15-0输入A,然后输入B,即要求数A存储在电路中。指定KEY1为clock,KEY0为Reset。

part5.v 代码:

 

1 //dff_R with asynchronous reset

2 module dff_R(d,clk,rst_n,q);

3 input d,clk,rst_n;

4 outputreg q;

5

6 always @(negedge rst_n,posedge clk)

7 if(!rst_n)

8 q<=0;

9 else

10 q<=d;

11

12 endmodule

13

14 //top-level file

15 module part5(SW,KEY,HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,

16 HEX1,HEX0);

17 input [15:0]SW;

18 input [1:0]KEY;

19 output [6:0] HEX7,HEX6,HEX5,HEX4,HEX3,HEX2,

20 HEX1,HEX0;

21

22 wire [15:0]q;

23

24 dff_R u0(SW[0],KEY[1],KEY[0],q[0]);

25 dff_R u1(SW[1],KEY[1],KEY[0],q[1]);

26 dff_R u2(SW[2],KEY[1],KEY[0],q[2]);

27 dff_R u3(SW[3],KEY[1],KEY[0],q[3]);

28 dff_R u4(SW[4],KEY[1],KEY[0],q[4]);

29 dff_R u5(SW[5],KEY[1],KEY[0],q[5]);

30 dff_R u6(SW[6],KEY[1],KEY[0],q[6]);

31 dff_R u7(SW[7],KEY[1],KEY[0],q[7]);

32 dff_R u8(SW[8],KEY[1],KEY[0],q[8]);

33 dff_R u9(SW[9],KEY[1],KEY[0],q[9]);

34 dff_R u10(SW[10],KEY[1],KEY[0],q[10]);

35 dff_R u11(SW[11],KEY[1],KEY[0],q[11]);

36 dff_R u12(SW[12],KEY[1],KEY[0],q[12]);

37 dff_R u13(SW[13],KEY[1],KEY[0],q[13]);

38 dff_R u14(SW[14],KEY[1],KEY[0],q[14]);

39 dff_R u15(SW[15],KEY[1],KEY[0],q[15]);

40

41 //number B

42 seg7_lut uh0(q[3:0],HEX0);

43 seg7_lut uh1(q[7:4],HEX1);

44 seg7_lut uh2(q[11:8],HEX2);

45 seg7_lut uh3(q[15:12],HEX3);

46 //number A

47 seg7_lut uh4(q[3:0],HEX4);

48 seg7_lut uh5(q[7:4],HEX5);

49 seg7_lut uh6(q[11:8],HEX6);

50 seg7_lut uh7(q[15:12],HEX7);

51

52 endmodule


 

 

Conclusion

 

本实验是目前为止(altera DE2 数字逻辑)最容易的一个,所花时间较少即可完成。主要从门级到类似C语言的行为描述来构建存储单元。区分电平敏感和边沿触发。

 

Reference

1. Altera 数字逻辑设计实验练习3 (DE2光盘)

2. 《数字逻辑基础与verilog设计》 ch7.  Stephen Brown …

ps: 这个实验要么是Stephen本人设计的,要么设计者看了他的这本书。完全一样。:)

以上是关于原创DE2 实验练习解答—lab 3:锁存器触发器和寄存器(digital Logic)(DE2)(quartus II)的主要内容,如果未能解决你的问题,请参考以下文章

ucore lab2

OS-lab4实验报告

清华大学OS操作系统实验lab1练习知识点汇总

Lab_1:练习3——分析bootloader进入保护模式的过程

ucore lab8

Quartus II 软件和 DE2-115 开发板使用入门