APP下载

同步JK触发器门级建模仿真讨论1

2022-11-07于红旗李清江罗笑冰杜湘瑜黄春琳

电气电子教学学报 2022年5期
关键词:触发器延时波形

于红旗 李清江 罗笑冰 杜湘瑜 黄春琳

(国防科技大学 电子科学学院, 长沙 410073)

同步JK触发器一般认为其名称来源于其发明者Jack Kilby。同步JK触发器是一种较为通用的寄存器,同步D触发器、同步T触发器都可以看作是其特例,而且该触发器还避免了同步RS触发器的输入端不能同时为1的约束条件,是“数字电路与逻辑设计”课程中一个重要的触发器,也有较多的论文对这一部分的教学进行了阐述[1]。文献[2]对触发器部分的教学内容提出了一些建议,提出了总分式教学,循序渐进、由浅入深,通过对比,抓住内在联系,把握重点等方法进行这一章节教学。文献[3]对同步JK触发器进行了分析,并在Altera的QuartusII6.0环境中,通过原理图的方式建立了同步JK触发器的模型,并经过综合、映射、布局布线后,进行了时序仿真,实验结果表明,在CLK为1期间,J=K=1时,Q和Q—没有出现不断翻转的现象,给出结论:同步JK触发器不具备翻转功能,也指出了部分教科书中存在的错误。但该文章仿真模型是FPGA中设计实现布局布线以后的模块,而采用FPGA内部资源实现了设计后,与初始的门级电路模型有些不一样了,这是由于FPGA内部的资源上电后会有一个确切的电平状态,不会出现门级电路仿真中出现的初始值问题,且FPGA实现后,各与非门之间的延时应该是一致的,无法进行各个门延时参数的任意设置,从而不能更完整地评估同步JK触发器。此外,该文献对同步JK触发器的几种工作状态进行了分析,特别是对第四种翻转状态进行了讨论,给出了分析结果图,同时得出结论:当J=K=1时,CLK为1时,触发器不断翻转,直至CLK变为低,但CLK变低时,触发器的状态则是无法预料的[3]。文献[4]中依靠分析给出了波形图,但未能给出仿真结果。也对同步JK触发器的翻转功能进行了分析,并采用集成电路搭建了实际硬件,得出结论:同步JK触发器的翻转功能是无法实现的。

互联网上的资料和教辅材料经常对同步JK触发器采用行为级建模,并对其进行了仿真。也有一些采用门级电路对同步JK进行建模,这种建模方式直接采用了JK触发器分析的功能结论,如果结论分析有误,则建模与真正的JK触发器一定会有不一致。对于门级建模方式,并没有找到相应的仿真文献资料,采用门级建模仿真时,如果不设置触发器的初始状态,仿真结果中,状态会一直为不确定状态,从而不能正确仿真出JK触发器。在网上中英文互联网的帖子里面也经常有人提出此问题并寻求答案,但并没能获得最终的解决方案。

采用Verilog HDL语言,对同步JK触发器进行了门级电路建模,并针对触发器初始状态不易设置这一问题,结合带有异步置位和异步清零功能的同步JK触发器内部结构,对同步JK触发器的门级电路进行了改进,添加了Reset信号,连接到输出为Q的与非门上,解决了同步JK触发器不易设置状态初值的问题。同时,针对连接Q和Q—的与非门的不同延时情况,进行仿真,给出了不同条件下同步JK触发器的仿真波形,并进行了分析。

1 同步JK触发器的基本结构及门级建模

同步JK触发器的基本结构如图1所示[5]。

图1 同步JK触发器基本结构图

可以采用Verilog HDL语言对其建模如下:

module jkff_gate(q,qbar,CLK,j,k);

input j,k,CLK;

output q,qbar;

wire nand1_out;

wire nand2_out;

nand(nand1_out, j,CLK,qbar);

nand(nand2_out, k,CLK,q);

nand(q,qbar,nand1_out);

nand(qbar,q,nand2_out);

endmodule

这里直接使用了Verilog语言自带的与非门nand,其第一个参数为输出,后续参数为输入。

对其编写仿真激励文件如下:

module jkff_test;

reg J,K, CLK;

wire Q, QBAR;

jkff_gatedut(.q(Q), .qbar(QBAR), .j(J), .k(K), .CLK(CLK));

initial begin

CLK=0;

forever #10 CLK = ~CLK;

end

initial begin

J= 1; K= 0;

#10;

#95; J= 0; K= 1;

#90; J= 0; K= 0;

#95; J= 1; K=1;

end

endmodule

对其采用Vivado2020.2进行仿真,得到如图2所示的仿真波形图,从图中可以看出,Q和Q—输出一直为不确定状态,虽然激励是想让其输出确定的值,但由于触发器的初始状态并没给定,故输出一直处于不确定的状态。

图2 同步JK触发器门级模型仿真结果图

2 改进的同步JK触发器门级模块

在图1所示的结构图中,可以为G1和G4的输入端添加一个PRESET信号,为G2和G3添加一个CLEAR信号,就构成了带有异步置位和异步清零的同步JK触发器,该触发器可以在仿真时方便地将状态置为确定态。

据此思路,可以对触发器的门级电路模型进行改进,添加一个Reset信号,该信号连接在G1的输入端,当Reset信号为0时,Q输出为1,为确定状态。对刚刚建立的模型进行改进,添加Reset为输入信号端口,并将其连接到G1的输入端,即nand(q,qbar,nand1_out,Reset)。在仿真激励中,设定Reset信号前10 ns为低电平。对其仿真,仿真波形如图3所示。在其中,可以看到J=1,K=0时,完成了置1功能;J=0,K=1完成了置0功能;J=0,K=0完成保持功能。而第四种情况:J=1,K=1则较为复杂,出现了Q波形与时钟相同,而Q—输出一直为1的情况。其原因可通过代入这些当前状态和输入信号到图1分析得到。但这里使用的与非门nand并没有延时信息。

图3 改进的门级电路模型仿真图

接下来,着重分析一下第四种状态。

在仿真中,假设图1中G1、G2不一致,分几种情况讨论:

2.1 与门G1门延迟大于G2

这里新建一个nand的模型,并加入延时信息。代码如下

module yunand3(a,b,c,d);

input b,c,d;

output a;

assign #3 a = ~(b & c & d);

endmodule

可以通过修改assign语句里面的值来设置与非门的不同延时参数。

假设G1门延时为3 ns,G2门延时为4 ns。针对J=1,K=1的情况进行仿真,如图4、5所示。结合图1和门延迟,不难分析出,Q在JK变高4 ns后,一直为高,不会再变低。而Q—与CLK波形一致,只是比CLK延时3 ns。

图4 G1门延时为3 ns,G2门延时为4 ns时候的波形

图5 G1门延时为3 ns,G2门延时为4 ns,CLK脉冲内JK变化时候的波形

2.2 与门G1门延迟小于G2

G1延时为3 ns,G2延时为 4 ns,仿真波形如图6所示。Q—在J=0,K=1之后的4 ns被置1,后面一直为1。而Q在J=1,K=1后波形与CLK相同,但比CLK延迟3 ns。

图6 G1门延时为4 ns,G2门延时为3 ns的仿真波形

2.3 与门G1、G2门延迟相等

假设G1、G2门延时都为3 ns。仿真波形如图7所示。

图7 G1、G2门延迟相同时的仿真图

从图7可以看出,在CLK为0的时候,Q和Q—都输出脉冲,脉冲的高电平和低电平时间都为3 ns。这与文献[3]中的仿真结果不太一样,从分析可知,只有在CLK为0时候,G3、G4输出为1,从而导致G1、G2输出产生振荡,因此文献[3]的分析结果有待商榷。

3 结语

如果仅仅采用教科书上对同步JK触发器总结的功能而采用行为建模,则容易忽略真实结构对应的翻转问题。通过Verilog HDL硬件描述语言来对同步JK触发器进行了门级建模,通过添加Reset信号,解决了门级建模的初始状态问题,而且更容易发现其中的翻转状态问题。对两个与门在不同延时情况下的状态进行了仿真分析,仿真表明,同步JK触发器的翻转振荡状态是值得商榷的,教科书也应据此做出修改。

猜你喜欢

触发器延时波形
对《压力容器波形膨胀节》2018版新标准的理解及分析
基于级联步进延时的顺序等效采样方法及实现
基于LFM波形的灵巧干扰效能分析
主从JK触发器逻辑功能分析
使用触发器,强化安全性
基于ARM的任意波形电源设计
大连台使用CTS-1记录波形特点
Two-dimensional Eulerian-Lagrangian Modeling of Shocks on an Electronic Package Embedded in a Projectile with Ultra-high Acceleration
桑塔纳车发动机延时熄火
光控触摸延时开关设计