2次元配列を用意して、その配列を引数にして、インスタンスを生成します。
配列を引数に持つ複数生成される回路
複数生成される回路は、配列を入力します。回路では入力されたデータを全部加算します。
module array(
input clock,
input reset,
input [7:0] data[8],
output [7:0] out_data
);
回路を複数生成するgenerate文
generateを使ってインスタンスを複数生成します。これでarrayのモジュールが8個生成されます。
genvar i;
generate
for(i=0;i<8;i=i+1) begin
array array_inst(
.clock(CLOCK),
.reset(RESET),
.data(DATA[i]),
.out_data(OUT_DATA[i])
);
end
endgenerate
複数回路を生成するので、このモジュールの入力は、2次元配列で持ちます。
2次元配列を引数に持つ
odule parent_array(
input CLOCK,
input RESET,
input [7:0] DATA[8][8],
output [7:0] OUT_DATA[8]
);
テスト関数
テスト関数では、2次元配列を引数に持つ関数をコールするため、2次元配列を用意する。
logic [7:0] DATA[8][8];
2次元配列をパラメータとして渡す。
parent_array parent_array_inst(
.CLOCK(CLOCK),
.RESET(RESET),
.DATA(DATA),
.OUT_DATA(OUT_DATA)
);
テストとしては、入力値に適当な値を入れる。
initial begin
int i,j;
for(i=0;i<8;i++) begin
for(j=0;j<8;j++) begin
DATA[i][j] <= i*8 + j;
end
end
テストが終了したら出力値を表示する
RESET = 1'b1;
#STEP;
RESET = 1'b0;
#TEST_TIME;
for(i=0;i<8;i++) begin
$display (OUT_DATA[i]);
end
シュミレーションの結果、出力値は、桁溢れしているが、想定通りに動作している。
使用したコードと環境はここにおいてある