Написание кода Verilog в течение нескольких дней, и у меня есть один вопрос: «Можем ли мы написать блок генерации внутри блока генерации»? Я пишу RTL примерно так:
Where 'n' is a parameter.
reg [DATA_WIDTH:0] flops [n-1:0];
generate
if (n > 0) begin
always @(posedge clk) begin
if (en) begin
flops[0] <= mem[addr];
end
end
generate
genvar i;
for (i = 1; i <= n ; i = i + 1) begin
always @(posedge clk) begin
flops[i] <= flops[i-1];
end
end
endgenerate
always @(flops[n - 1])
douta = flops[n - 1];
else
always @(posedge clk) begin
if (en) begin
primary_output = mem[addr];
end
end
end
endgenerate
При компиляции приведенного выше кода я получаю:
ERROR: syntax error near generate (VERI-1137)
Не уверен, почему. Целью этого RTL является создание конвейера из n отказов на выходе проекта.
Допустим, n равно 2, тогда схема должна стать:
flop1-> flop2-> primary output of design
flop1 и flop2 — вновь созданные флопы.