首页 > 解决方案 > 为什么 SR 锁存器输出总是 X?

问题描述

我正在使用 Verilog 实现没有时钟信号的 SR 锁存器。我正在尝试使用下面给出的代码,但我得到了QbX 的值。请帮助我。

// design.v file
module sr_latch(q,qb,s,r);// module declaration
  input s,r; 
  output q,qb;
  assign qb=~q;
  nand (q,s,qb);
  nand (qb,r,q);
endmodule

// testbench.v file
module stimulus;
  reg set,reset;
  wire Q,Qb;
  sr_latch mylatch(Q,Qb,set,rest);
  initial
    begin
      $dumpfile("dump.vcd");
      $dumpvars;
      $monitor($time,"set=%b,reset=%b,Q=%b,Qb=%b\n",set,reset,Q,Qb);
         set=0; reset=0;
      #5 set=0; reset=1;
      #5 set=1; reset=0;
      #5 set=1; reset=1;
    end
endmodule

结果:

               0set=0,reset=0,Q=1,Qb=x

               5set=0,reset=1,Q=1,Qb=x

              10set=1,reset=0,Q=x,Qb=x

              15set=1,reset=1,Q=x,Qb=x

标签: verilog

解决方案


您的代码中有 2 个错误。

在您的设计文件中,您有 2 个qb信号驱动程序,但您应该只有 1 个。您应该删除以下行:

  assign qb=~q;

您在测试台中有错字;我在 edaplayground 上的一个模拟器中收到了一个编译警告。你拼错resetrest。改变:

sr_latch mylatch(Q,Qb,set,rest);

至:

sr_latch mylatch(Q,Qb,set,reset);

结果:

               0set=0,reset=0,Q=1,Qb=1

               5set=0,reset=1,Q=1,Qb=0

              10set=1,reset=0,Q=0,Qb=1

              15set=1,reset=1,Q=0,Qb=1

推荐阅读