4

なぜ出力の同じ変数名を取り、値を取得するために配線する必要があるのですか?例えば:

 module TEST(INP1,INP2,CIN,COUT,SUM);
 input [31:0] INP1;
 input [31:0] INP2;
 output [31:0] SUM;
 input CIN;
 output COUT;

 wire [31:0] SUM;// Again redefined 
 wire COUT; // Again Redefined
 assign {COUT,SUM} = INP1 + INP2 + CIN ;

キャリーアウトと2つの数値の合計、およびキャリーインを入力として取得する例。

4

3 に答える 3

4

Verilog 1995では、ポートの方向を後にリストする必要がありました。出力ワイヤタイプは暗黙的であり、regは方向に沿って宣言できます。

module TEST(A,B,C,D);
  input  [31:0] A;
  input  [31:0] B;
  output [31:0] C;
  output        D;

  reg D;

次のように書くことができます:

module TEST(A,B,C,D);
  input      [31:0] A;
  input      [31:0] B;
  output     [31:0] C;
  output reg        D; //Only declared twice

Verilog 2001以降、追加の定義は不要になり、インラインで宣言できます(ANSIスタイル)。

module TEST(
  input      [31:0] A,
  input      [31:0] B,
  output     [31:0] C,
  output reg        D  // Declared Once
);

SystemVerilog (2009)から、ロジックタイプがあり、regタイプとwireタイプを切り替える必要がなくなりました。唯一の要件は、トライステートが必要な場合は、ワイヤーまたはトライを使用することです。

module TEST(
  input        [31:0] A,
  input        [31:0] B,
  output logic [31:0] C,
  output logic        D
);

regとwireタイプを持つための元々の要件についての私の理解は、シミュレーション速度またはシミュレーター設計の容易さでした。ワイヤの値はシミュレーションのデルタサイクルごとに評価されますが、regは感度リストによってトリガーされた場合にのみ評価されます。

于 2012-09-03T23:18:34.180 に答える
4

outputまた、として宣言する必要はありませんwire。さらに、ANSI-stlyeポート宣言を使用すると、ポートリストの重複を回避できます。

module TEST (
    input [31:0] INP1,
    input [31:0] INP2,
    output [31:0] SUM,
    input CIN,
    output COUT
);

    assign {COUT,SUM} = INP1 + INP2 + CIN ;
endmodule

あなたの例では、出力をとして宣言する必要はありませんreg。ただし、別の回路が必要な場合は、次のように同じ行で型を宣言できます。

output reg [31:0] Q;
于 2012-09-02T02:03:37.817 に答える
-1

ネットを宣言するだけでは、タイプなのかタイプなのかoutputがわからないからです。regwire

出力は、ワイヤーまたはレジスターのいずれかで駆動できます。ドライバーがどのタイプになるかを指定する必要があります。

于 2012-09-01T20:45:50.403 に答える