这是我的代码:
`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"。值。
当s
和r
输入均为1时,q
和q_bar
输出均为1,因为nand
门的建模方式。请参阅IEEE STD 1800-2017,第28.4 和Nand,Nor,or,of of Xor和Xnor Gates 的第28.4节。如果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
gate力i = 0。
同样,当s = 1时, n2
nand
栅极力j = 0。
当i = 0时, n3
nand
栅极力 q_bar
to 1,无论 q
。
同样,当j = 0时, n4
nand
栅极力 q
至1,无论 q_bar
。
如果这不是您想要的行为,则需要更改Verilog代码才能获得所需的一切;在这种情况下,您没有描述您想要的。
我不相信r = s = 1是(门控)sr闩锁的有效输入。在该状态下,任何输出都是无效的。SR闩锁的真相表:https://electronics.stackexchange.com/questions/163164/sr-flip-fllop-flop-nor-or-nand
另请参阅:https://electronics.stackexchange.com/questions/62501/why-is-s-s-1-s-s-s-nate-forbidden-forbidend-in-rs-in-rs-flip-flop?rq = rq = 1<>