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
的代码有误。
您错过了将 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
这是我对 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
的代码有误。
您错过了将 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