Verilog 具有四个与非门的时钟SR锁存器的输出是意外的
这是我的密码:Verilog 具有四个与非门的时钟SR锁存器的输出是意外的,verilog,Verilog,这是我的密码: `timescale 1ns/1ns module sr_latch (input s,r,clk ,output q,q_bar,w,w_bar); wire i,j; assign w=q; assign w_bar=q_bar; nand#7(i , r , clk); nand#7(j , s , clk); nand#7(q_bar,q,i); nand#7(q , q_bar , j); endmodule m
`timescale 1ns/1ns
module sr_latch (input s,r,clk ,output q,q_bar,w,w_bar);
wire i,j;
assign w=q;
assign w_bar=q_bar;
nand#7(i , r , clk);
nand#7(j , s , clk);
nand#7(q_bar,q,i);
nand#7(q , q_bar , j);
endmodule
module tb_sr_latch();
reg s,r,clk;
wire q,q_bar,w,w_bar;
sr_latch op( s , r , clk , q , q_bar ,w,w_bar);
initial begin
clk=1; s=0 ; r=1;
#50 r=0;
#50 s=1;
#50 r=1;
end
endmodule
我不知道为什么
s=1
和r=1
的输出是1。如果我使用另一个测试台(例如在开始时添加q=0
),它会产生很多“X”值。我不相信R=S=1是(选通)SR锁存器的有效输入。在这种状态下,任何输出都将无效。SR闩锁的真值表:
另请参见:当
s
和r
输入均为1时,q
和q\u条
输出均为1,因为nand
门是如何建模的。参考IEEE标准1800-2017第28.4节和,nand、nor、or、xor和xnor门。如果到与非门的两个输入均为1,则输出为0。如果任一输入为0,则输出为1
我添加了实例名称以澄清我的解释:
nand #7 n1 (i , r , clk);
nand #7 n2 (j , s , clk);
nand #7 n3 (q_bar , q , i);
nand #7 n4 (q , q_bar , j);
由于clk=1,当r=1时,n1
nand
门强制i=0
类似地,当s=1时,n2
与非门强制j=0
当i=0时,n3
与非门将q\u条
强制为1,与q
无关
类似地,当j=0时,n4
nand
门强制q
为1,而不考虑q\u条
如果这不是您想要的行为,那么您需要更改您的Verilog代码以获得您想要的任何东西;您没有描述在这种情况下需要什么。我知道这不是有效的输入,但我的verilog代码没有显示这一点!我不知道为什么。它无效的原因是输出无效。这并不意味着输出将产生一个未知的(X),但是输出不能也不应该被使用,因为结果是不可预测的。这并不能解释为什么Verilog模拟将输出设置为1。