SystemVerilog: защелка S-R работает неправильно

Вот мое описание защелки 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

а вот тестовый стенд для этой защелки 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, но это все еще не работает.

Итак, вы можете сказать, в чем проблема с этим кодом?


person Ju Bc    schedule 02.05.2017    source источник


Ответы (2)


Проблема в вашем тестовом стенде. Если и r, и s имеют активный низкий уровень, убедитесь, что ваш тестовый стенд протестировал только один из них с активным низким уровнем.

person dave_59    schedule 02.05.2017

Код 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
person Kiran    schedule 04.05.2017