1

制御されたインバーター IV0(.c(ctrl),.in(d),.out(a)) によって駆動される通常のインバーター IV1(.in(a), .out(b)) があります。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 シミュレーションと同じようには機能しません。RTL とゲート レベルが確実に一致するようにするには、常に @* を使用する必要があります。


4

1 に答える 1