我为SR Latch、SR Flip Flop(通过实例化SR Latch模块)和JK Flip Flop(通过实例化SR Latch模块)编写了verilog模块。我使用Xilinx Vivado 2019版进行仿真和查看输出波形。SR Latch和SR Flip flop模块工作得很好,我也得到了正确的输出波形。我试着通过实例化SR Latch模块来创建一个JK翻转模块。但我就是没有得到输出波形。我不知道是哪里出了问题。我也检查了布尔表达式。一切似乎都没有问题。谁能指出错误的地方?
下面是代码。
SR锁存模块
module sr_latch(s, r, q, qbar);
input s, r;
output q, qbar;
nand(q, s, qbar);
nand(qbar, r, q);
endmodule
使用SR闩锁的SR翻转模块
module sr_ff(s, r, clk, q, qbar);
input s, r, clk;
output q, qbar;
reg t1, t2;
always @(posedge clk)
begin
t1 <= !(clk & s);
t2 <= !(clk & r);
end
sr_latch SRL(t1, t2, q, qbar);
endmodule
使用SR锁存器的JK翻转开关
module jk_ff(j, k, clk, q, qbar);
input j, k, clk;
output q, qbar;
reg t1, t2;
always @(posedge clk)
begin
t1 <= !(clk & qbar & j);
t2 <= !(clk & q & k);
end
sr_latch SRL(t2, t1, q, qbar);
endmodule
JK Flip Flop Testbench
module jk_ff_tb();
wire q, qbar;
reg j, k, clk=1;
integer i;
jk_ff JKFF(j, k, clk, q, qbar);
always #25 clk = !clk;
initial
begin
for(i=0; i<4; i=i+1)
begin
{j, k} <= i; #50;
end
$stop;
end
endmodule
你的输出未知(X
)因为你的 jk_ff
模型不允许对SR锁存器进行适当的初始化。
基于这个简单的原理图,你只需要在SR锁存器的输入端实现2个NAND门。
这是一种方法,使用连续赋值。
module jk_ff (j, k, clk, q, qbar);
input j, k, clk;
output q, qbar;
wire sn = clk & qbar & j;
wire rn = clk & q & k;
sr_latch SRL (sn, rn, q, qbar);
endmodule
这样可以让输出成为已知的
另一种方法是在SR锁存器的输入端增加2个NAND门:这是一种方法,使用连续赋值:这样可以使输出成为已知。nand
基元。
请注意,JK 触发器可以从一个 SR 锁定,而不是SR 人字拖.