2

私はザイリンクス経由で Verilog を書いている初心者です。

ポート宣言は以下のようでなければならないことを学びました

module mealy(
  nReset,
  clk,
  in,
  out
);

  input  nReset;
  input  clk;
  input  in;
  output out;
endmodule

ザイリンクスを使用すると、変数を設定するデフォルト オプションがあり、次のように表示されます。

module mealy(
  input  nReset,
  input  clk,
  input  in,
  output out
);

endmodule

2 番目の方法を使用すると、エラーが発生することがあります。2 つのスタイルの違いは何ですか?


出力を s として宣言するとreg、最初のスタイルが正しく機能するという二次的な問題。

module mealy(
  in,
  out
 );

  output out;
  input  in;
  reg    out;
endmodule

2 番目のスタイルを使用すると、2 回宣言できないというエラーが生成されます。

module mealy(
  input  in,
  output out
);
  reg out;
endmodule

何か問題でもありますか?私は初心者で、なぜ「reg」を宣言しなければならないのか正確にはわかりません。

4

1 に答える 1

3

多くの場合、Verilog-95 (IEEE 1364-1995) と呼ばれる Verilog 1995 では、ポート宣言が指示から分離され、reg タイプから再び分離されていました。

Verilog 2001 (IEEE 1364-2001) 以降、よりコンパクトなバージョンを使用できます。

ツールが 95 標準にしか準拠していない場合、2001 年以降を対象としたコードでエラーが発生します。

方向を含む新しいポート宣言を使用する場合、ワイヤでない場合はタイプも宣言する必要があります。

module mealy(
  input  in,              // Inputs are implicitly wires (reg would not make sense)
  output     [1:0] out_x, // 2 bit wire type as output
  output reg [1:0] out_y  // 2 Bit reg  type as output
);
endmodule

reg とワイヤ タイプの違いを調べる必要があります。基本的にはシミュレーションの最適化です。logicSystemVerilog を使用している場合は、どちらもタイプに置き換えることができます。

Wires は、ポートまたは割り当てステートメントによって駆動されます。s はorブロックreg内に割り当てられます。フリップフロップを意味するものではありません。alwaysinitialreg

于 2013-09-29T15:34:52.687 に答える