Я очень новичок в Verilog и реализации цифрового оборудования.
Я хочу создать несколько экземпляров аппаратного блока, разместить их рядом, а затем соединить их вместе (т. Е. Выход одного блока является входом следующего блока). Что усложняет, так это то, что я хочу создать двухмерный массив, похожий на массив этих аппаратных экземпляров. Таким образом, каждый экземпляр будет распространять сигнал своему нижнему и правому аналогу.
Этот блок создается один раз ниже:
alg_unit alg_unit_inst (
.clk(clk),
.rst(rst),
.init(init_temp),
.in_a(in_a_temp),
.in_b(in_b_temp),
.valid_D_in(valid_D_in_temp),
);
Чтобы создать несколько экземпляров, я использую 2 цикла создания.
generate
for (i=0; i<N; i=i+1) begin : alg_unit_generate_i
for (j=0; j<N; j=j+1) begin : alg_unit_generate_j
wire init_temp;
wire in_a_temp;
wire in_b_temp;
wire valid_D_in_temp;
assign in_a_temp = A[0];
// other assign statements here ...
alg_unit alg_unit_inst (
.clk(clk),
.rst(rst),
.init(init_temp),
.in_a(in_a_temp),
.in_b(in_b_temp),
.valid_D_in(valid_D_in_temp),
);
end
end
endgenerate
Мне нужен способ ссылки на ранее созданные экземпляры блоков alg_unit. Таким образом, я могу подключить входные сигналы блоков alg_unit, сгенерированных «позже», к выходным сигналам блоков alg_unit, сгенерированных «ранее».
Должен ли я назначать / хранить выходные сигналы из ранее сгенерированных блоков alg_unit для промежуточных «проводов»? Альтернативно, есть ли способ обратиться к ранее созданным экземплярам блоков alg_unit?
Т.е.)
// alg_unit_inst[0] was a previously-instantiated block
// I feel like using the approach below may require hard-coding some instantiations ???
alg_unit alg_unit_inst[1] (
.in_a(alg_unit_inst[0].out_a),
.in_b(alg_unit_inst[0].out_b),
);
Заранее спасибо.
in_a
?