实验五 触发器 5.1 使用门级结构描述D触发器

*一、实验设计目标*

(1)在FPGA中使用门级结构描述D触发器。

(3)通过此实验学习门级结构建模的基本方法。

*二、实验设计思路*

一个逻辑电路是由许多逻辑门和开关组成的,因此用基本逻辑门的模型来描述逻辑电路结构是最直观的。本实验设计使用结构描述语句实现D触发器功能,采用带

异步置位和清零端的正边沿触发方式,输入信号包含时钟信号CLK、置位端Setn、清零端Clrn和一个数据输入D,输出信号包含数据输出Q和~Q。当Setn为低电平时输出Q恒为1;当Setn为高电平且Clrn为低电平时输出恒为0;当Setn和 Clrn都为高电平时,输出Q在时钟信号CLK的上升沿处被赋予输入D的值。

图5.1是带异步置位和清零端的正边沿触发的D触发器的电路结构图,该逻辑电路的行为分析如下:

img

5.1 带异步置位和清零端的正边沿触发的D触发器

当Setn和Clrn都为1时,可不考虑Setn和Clrn引脚,此时与非门1和与非门2构成一个SR锁存器。当S和R(即图5.1中的反馈信号f4和f5)都为1时,该锁存器处于存储状态。假设,时钟信号CLK为0,D为1,则信号f4和f5都为1,SR锁存器进入存储状态。同时,信号f6将变为0,f3将为1。假设CLK变为1,这将使f4变为0,输出Q被置为1。如果现在输入D变为0,时钟信号CLK仍为1,则f6将变为1,只要时钟信号CLK保持为1,f3也将保持为1。则f4仍为0,输出Q保持为1不变。而当时钟信号变为0时,f4和f5都将变为1,SR锁存器再次处于存储状态,输出Q保持为不变。也就是说输出Q只在时钟信号CLK的上升沿被置为输入D的值。其他情况也可类似讨论。

当置位信号Setn(清零信号Clrn)为0时,输出Q立即变为1(0),而不用等到下一个时钟上升沿的到来,此即为异步置位和清零的特点。并且对于输出Q来说,Setn的优先级高于Clrn。

*三、功能模块图与输入输出引脚说明*

该工程包含顶层模块triggerD1与底层模块trigger_module,图5.2是整个工程的模块功能图。本实验仅验证了输出Q而未验证输出~Q,下面介绍一下顶层模块各引脚的功能:

img

5.3 D触发器模块功能图

(1)CLK:50MHz的时钟信号输入。用CLK的上升沿作为D触发器的触发信号。

(2)Setn:置位输入信号,与SW1相连。当Setn为低电平时输出Q恒为1。

(3)Clrn:清零输入信号,与SW0相连。当Setn为高电平且Clrn为低电平时输出Q恒为0。对输出Q来说,Setn信号的优先级高于Clrn信号。

(4)SW_In:拨动开关输入,与SW2相连。SW_In直接连接“D触发器”的输入“D”,用于模拟输入信号。

(5)LED_Out:输出到LED0。LED_Out直接连接“D触发器”的输出“Q”,通过LED灯的亮灭情况来显示触发器的输出Q。

*四、程序设计*

​ 图5.3是截取自底层模块trigger_module的部分代码:

img

5.3 D触发器实验核心代码

5-9:输入输出信号声明。

​ 11-21:使用门级结构描述D触发器的电路结构图(图5.1)。门声明语句的格式为:

<门的类型>[<驱动能力><延时>]<门实例1>[,<门实例2>,…,<门实例n>];

​ 门的类型是门声明语句必须的;驱动能力和延时是可选项;门实例1是在本模块中所引用的第一个这种类型的门,而门实例n是引用的第n个这种类型的门,且在结束时使用逗号,最后才用分号。

​ 在本例中,代码第11行使用了一个名为U1的与非门,对应图5.1中的与非

门1,输入为Setn、f4和f2,输出为f1。输出与输入无延时。

*五、FPGA管脚配置*

以下是Anlogic FPGA的IO Constraint,CLK时钟输入信号与Anlogic_FPGA开发板上的50MHz的晶振时钟相连;置位输入信号Setn与开发板上的SW1相连;清零输入信号Clrn与开发板上的SW0相连;LED_Out输出信号与LED0相连;SW_In输入信号与开发板上的SW2相连。

set_pin_assignment { CLK } { LOCATION = R7; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Clrn } { LOCATION = A9; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Setn } { LOCATION = A10; IOSTANDARD = LVCMOS33; }

set_pin_assignment { Sw_In } { LOCATION = B10; IOSTANDARD = LVCMOS33; }

*六、实验结果*

当开关SW1拨向下(Setn = 0)时,LED0点亮;当开关SW1拨向上(Setn = 1),SW0拨向下(Clrn = 0)时, LED0熄灭;当开关SW1,SW0均拨向上(Setn = 1,Clrn = 1)时,在每个时钟的上升沿,LED0输出SW2的状态。因篇幅有限,置位与清零功能请自行验证。

*七、思考与拓展*

(1)本实验仅验证了输出Q而未验证输出Q。对于输出Q来说,Setn信号的优先级高于Clrn信号,那么对于输出Q又是怎样的呢?请适当修改程序同时观察输出Q和~Q,并结合图5.1解释实验现象。

*八、实验小结*

Verilog既可以是一种行为描述的语言也可以是一种结构描述的语言。Verilog模型可以是实际电路的不同级别的抽象,这些抽象的级别包括:系统级、算法级、RTL(Register Transfer Level)级、门级和开关级。前三种都属于行为描述,后两种属于结构描述,RTL级是描述数据在寄存器之前流动和如何处理、控制这些数据流动的模型,门级是描述逻辑门及逻辑门之间的连接的模型。本实验使用门级结构描述D触发器,通过此实验可以学习门级结构建模的基本方法,在下一节实验中将使用行为描述语句实现8D触发器功能。