这是我的代码:
`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"值!
答案 0 :(得分:0)
我不相信R = S = 1是(门控)SR锁存器的有效输入。在该状态下,任何输出都将无效。 SR锁存器的真值表:https://electronics.stackexchange.com/questions/163164/sr-flip-flop-nor-or-nand
答案 1 :(得分:0)
由于q
门的建模方式,当q_bar
和s
的输入均为1时,r
和nand
的输出均为1。请参阅IEEE Std 1800-2017第28.4节以及,nand,nor,或,xor和xnor门。如果nand
门的两个输入均为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
nand
门力j = 0。
当i = 0时,n3
门nand
将力q_bar
设为1,与q
无关。
同样,当j = 0时,n4
nand
门将q
设为1,而与q_bar
无关。
如果这不是您想要的行为,则需要更改您的Verilog代码以获取所需的内容。在这种情况下,您没有描述您想要的东西。