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
Другие вопросы по тегам