-1

複数の出力を同時に更新するVerilogモジュールを作成することに興味があります。次のコードのように、同時に3つの操作を実行します(clk 10)。

module mymodule (a,b,c,d,e);
input a;
input b;
output c;
output d;
output e;

wire b;
wire a;
wire c;
wire d;

reg e;

initial begin
c <=  #10  (a+b);
d <=  #10  a;
e  <= #10  b;
end

endmodule

そのコードは合法ですか?

4

1 に答える 1

3

10時間単位またはクロック後に変数の1回限りの割り当てを行う方法:

テストベンチレベルの構成として:

reg c,d,e;
initial begin
  #10;
  c = a+b;
  d = a;
  e = b;
end

RTL(合成)の場合、最初に時計付きのテストベンチが必要です。
私は私のテストハーネスでこのような時計を生成します:

reg clk ; //Rising edge every 10 timesteps
initial begin
  clk = 0;
  #5; 
  forever begin
    #5 ;
    clk = ~clk;
  end
end

10までカウントするカウンターを作成し、10に達すると、フリップフロップが新しい値をロードできるようにします。

wire enable = (counter == 4'b10);
always @(posedge clk or negedge rst_n) begin
  if (~rst_n) begin
    c <= 1'b0;
    d <= 1'b0;
    e <= 1'b0;
  end
  else if (enable) begin
    c <=  (a+b);
    d <=   a;
    e <=   b;
    end
  end
endmodule

追加のVerilogのヒント
出力は暗黙的にワイヤであり、再定義する必要はありません。

ノンブロッキング割り当ては、フリップフロップを推測するときに<=常に使用するためのものです。@(posedge clk)

regsまたはタイプは、またはブロックlogic内に割り当てることができます。sは、ポート間の接続とともに、またはポート間の接続に使用されます。alwaysinitialwireassign

于 2013-03-13T10:52:42.843 に答える