SystemVerilog:S-R 锁存器无法正常工作

SystemVerilog: S-R Latch doesn't work correctly

这是我对 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  

当我检查波形时,大多数时候Q的值都是X。其他时候它大多是不正确的。我试过预设Q,QB的值,但是好像还是不行

那么你能说出这段代码有什么问题吗?

问题出在你的测试台上。如果 r 和 s 均为低电平有效,请确保您的测试台只测试其中一个低电平有效。

SR_Latch_Nand的代码有误。 您错过了将 s1r1 用于输出与非门 n3n4。 更正后的 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