SystemVerilog: SR Latch не работает правильно
Вот мое описание шлюза 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, R, Q);
nand #8 n4(Q, S, QB);
endmodule
и вот испытательный стенд для этой защелки SR:
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, но все равно не работает.
Так что вы можете сказать, в чем проблема с этим кодом?
2 ответа
Решение
Проблема в вашем тестовом стенде. Если оба значения r и s имеют активный низкий уровень, убедитесь, что на вашем тестовом стенде тестируется только один из них с низким активным уровнем.
Код SR_Latch_Nand
неправильно. Вы пропустили использовать s1
а также r1
для выходных NAND ворот 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