2

BUF というトライステート バッファがあります。このバッファがどのように実装されているかはわかりませんが、2 つの入力 (I と T) と 1 つの出力 (O) と 1 つの双方向ポート (IO) があることはわかっています。これらのポートはすべてシングル ビットであることはわかっています。

これで、レジスタ配列 (data) と方向レジスタ (dir) ができました。このコードは有効ですか:

reg [15:0] data;
reg dir;
wire [15:0] output;

//more code here

BUF my_buf
(
.I(data),
.T(dir),
.O(output),
.IO(to_phys_pin) //to_phys_pin is a 16bit long array going to the physical pins
)

具体的には、このコードは 16 個のバッファーのインスタンスを作成し、それらすべてが T パラメーターと同じ "dir" レジスターを共有しますか? または、「生成」を使用して 15 個のインスタンスを生成する必要がありますか?

ありがとう、

4

2 に答える 2

2

コンパイル時に実行される生成ブロックを使用します (IEEE 1364-2001 以降が必要です)。

genvar i;
generate
for(i=0;i<16;i=i+1) begin : genblk
    BUF my_buf( .I(data[i]), .T(dir), .O(output[i]), .IO(to_phys_pin[i]) );
end
endgenerate

もう 1 つのオプションは、インスタンスの配列を作成することです (IEEE 1364-1995 以降)。

BUF my_buf[15:0]( .I(data[15:0]), .T({16{dir}}), .O(output[15:0]), .IO(to_phys_pin[15:0]) );

2 つのスタイルの違いの 1 つは、階層パス名です。http://www.edaplayground.com/s/6/94

于 2013-08-21T00:38:19.187 に答える
1

生成を使用する必要があります。

  genvar i;
  generate
    for (i=0; i <= 15; i=i+1) begin
      BUF BUF(data[i], dir, out[i],
        to_phys_pin[i]);
    end
  endgenerate

EDA Playground での完全なコード、テスト、およびシミュレーションの結果: http://www.edaplayground.com/s/4/93

于 2013-08-21T00:33:26.103 に答える