如何在Verilog中指定弱反馈反相器

如何在Verilog中指定弱反馈反相器,verilog,feedback,Verilog,Feedback,我有一个正常的逆变器IV1(.in(a),.out(b))由受控逆变器IV0(.c(ctrl),.in(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写这个 原始

我有一个正常的逆变器IV1(.in(a),.out(b))由受控逆变器IV0(.c(ctrl),.in(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和gate 级别将匹配


要指定弱逆变器,请执行以下操作:

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

当ctrl为1时,我们实际上只有这一点:

IV1(          .in(a), .out(b));     
IVW(          .in(b), .out(a));
这是一个可能导致振荡器不稳定的定时环路

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