Ругается на строку:
assign PO[16*(j+1)-1:16*j] = temp[j];
Error (10673): SystemVerilog error at getADC_N.v(144): assignments to unpacked arrays must be aggregate expressions
Сейчас заработало так:
module shift (C, SI, PO);
parameter n = 8;
input C;
input [n-1:0] SI;
output [15:0] PO[n-1:0];
integer i;
always @(posedge C) begin
for(i = 0; i < n; i = i + 1) begin
PO[i] <= {PO[i][14:0], SI[i]}; // в этой строке заменил
// PO[14:0][i] на PO[i][14:0] по сравнению с предыдущим вариантом
end
end
endmodule
Вроде даже скомпилировалось, но смущает что в rtl схеме с выходов регистров на вход идёт шина шириной 16 бит хотя по идее ширина должна быть на 1 бит меньше.
И вообще что-то не могу въехать в концепцию как на нём описывать схему. С чего начинать. То есть сами модули описать понятно, а вот как их связывать между собой не доходит.
На языке программирования по событию вызываеш функцию и обрабатываеш его, а тут по событию модуль не вызовеш. Как то не пойму сам подход с чего начинать проектировать схему?