Приветствую!
Цитата(nice_vladi @ Feb 6 2018, 09:58)

...
Есть несколько шин, допустим, по N бит. Их количество пусть задается параметром pNUM. Эти шины нужно объединить в одну, разрядностью, соответственно pNUM*N бит (конкатенировать).
Какой конструкцией SystemVerilog это можно описать? С условием "написать и забыть", не правя вручную каждый раз, при изменении значений N и pNUM.
Все зависить от того как заданны входные шины.
Если шина задана как упакованный массив : wire|reg [pNUM-1:0][N-1:0]; bus_in то делать ничего не нужно.
Если шины задана как неупакованный массив : wire|reg [N-1:0] bus_in [0:pNUM-1]; то объединяем в for цикле
Код
generate
for (genvar gi=0; gi<pNUM; ++gi) begin
assign bus_ou_w[gi*N +: N] = bus_in[gi];
end
endgenerate
always_ff @(posedge clk) begin
for (int ii=0; ii<pNUM; ++ii) begin
bus_ou_r[ii*(N+1)-1 : ii*N] <= bus_in[ii];
end
end
А вот если входные шины заданны индивидуально - wire|reg [N-1:0] bus0_in, bus1_in, bus_in_A, bus_in_B, ... то тут универсального решения нет. В некоторых случаях можно выкрутится с помощью макросов c постановками и условием по pNUM.
Удачи! Rob.