Verilog Generates предназначены для решения этой проблемы. Было бы проще, если бы вы могли использовать распакованные массивы для портов.
заявление должно содержаться в initial
или always
, подразумевает выход является использованием always @(posedge clk)
триггера для использования комбинаторной схемы always @*
.
module example (
parameter N = 10
)(
input clk,
input [31:0] a [0:N],
input [31:0] b [0:N],
output reg [31:0] c [0:N]
);
genvar i;
generate
for(i=0; i<=N; i++) begin
always @(posedge clk) begin
c[i] <= a[i] + b[i];
end
end
endgenerate
endmodule
Генерации хороши, когда вам нужно параметризовать экземпляр модуля, приведенное выше можно переписать с помощью простого цикла.
integer i;
always @(posedge clk) begin
for(i=0; i<=N; i++) begin
c[i] <= a[i] + b[i];
end
end
Для синтезируемого кода цикл for должен быть подвержен статической развертке.
Как насчет использования массивов и их сглаживания? http://stackoverflow.com/questions/16369698/how-to-pass-array-structure-between-two-verilog-modules –