这是我对S-R锁存器的门级描述:
module SR_Latch_Nand(input S, R, C, output Q, QB);
wire s1, r1;
nand #8 n1(r1, R, C);
nand #8 n2(s1, S, C);
nand #8 n3(QB, R, Q);
nand #8 n4(Q, S, QB);
endmodule
这里是这个S-R锁存器的测试平台:
module SR_Latch_Nand_TB();
logic s, r, clk;
wire q, qb;
SR_Latch_Nand sr(s, r, clk, q, qb);
initial begin
s = 0; r = 0; clk = 0;
#100 s = 1;
#100 clk = 1;
#100 clk = 0;
#100 clk = 1;
#100 s = 0;
#100;
end
endmodule
当我检查waverform时,Q的值在大多数情况下都是X.其他时候,它大多是不正确的。我试图预设Q,QB的值,但它似乎仍然不起作用。
那你能说出这段代码的问题是什么吗?
答案 0 :(得分:1)
SR_Latch_Nand
的代码错了。
您错过了使用s1
和r1
作为输出与非门n3
和n4
。
修正后的SR锁存模块应为:
module SR_Latch_Nand(input S, R, C, output Q, QB);
wire s1, r1;
nand #8 n1(r1, R, C);
nand #8 n2(s1, S, C);
nand #8 n3(QB, s1, Q);
nand #8 n4(Q, r1, QB);
endmodule
答案 1 :(得分:0)
问题在于您的测试平台。如果r和s都是低电平有效,请确保您的测试台仅测试其中一个低电平有效。