如何在Verilog中指定弱反馈逆变器

时间:2013-09-22 18:32:10

标签: verilog feedback

我有一个正常的逆变器IV1(.in(a),. out(b))由受控逆变器IV0(.c(ctrl),...(d),... out(a))驱动。对于IV0,当ctrl为1时,输出被驱动。否则,它会浮动。

同时,存在弱反馈逆变器IVW(.in(b),. out(a))。

当ctrl为1时,节点a的值由IV0驱动。当ctrl为0时,节点a由弱反馈逆变器驱动。

当IV0驱动节点a时,弱反馈逆变器IVW也驱动节点a。如果他们将节点a驱动到不同的值,则verilog将生成X.

我怎样才能在verilog中写这个?


原始答案

module buf(input d,ctrl, output b);
  reg a,b;
  always @ (d or ctrl) begin
    if(ctrl==1) begin
      a=~d;
      b=~a;
    end
    else begin
      a=~b;
      b=~a;
    end
  end
endmodule

摩根评论

  

在合成之后,这与当前的RTL不同   模拟。你真的需要使用always @ *来确保RTL和门   等级将匹配。


1 个答案:

答案 0 :(得分:2)

指定弱逆变器:

not (weak1,weak0) u0 (out0,in1);

For more info

IV0(.c(ctrl), .in(d), .out(a)); //out is z when crtl==0
IV1(          .in(a), .out(b));     
IVW(          .in(b), .out(a)); //out has weak drive

当ctrl为1时,我们才真正有这个:

IV1(          .in(a), .out(b));     
IVW(          .in(b), .out(a));

这是一个定时循环,可能导致振荡器不稳定。