Я пытаюсь сделать кумулятивную сумму с серией вложенных циклов, и мне не повезло. Я думаю, мне нужно лучше понять, как Verilog разворачивает циклы for, прежде чем я смогу реально представить, как решить мою проблему.Как Verilog разворачивается в петлях?
По существу, у меня есть серия выходов крана (tap_output_i и tap_output_q), которые являются 3D-массивами (src, dst, tap). Я хочу суммировать весь источник и краны, идущие в конкретное место назначения на каждый такт.
Вот что я, что не работает (out_sig 0 каждый раз):
//NODES = 2
wire signed [DAC_BUS_WIDTH-1:0] out_sig_i [NODES-1:0];
wire signed [DAC_BUS_WIDTH-1:0] out_sig_q [NODES-1:0];
reg signed [DAC_BUS_WIDTH-1:0] out_sig_i_reg[NODES-1:0];
reg signed [DAC_BUS_WIDTH-1:0] out_sig_q_reg[NODES-1:0];
integer dstVal,srcVal, tapVal;
//generate
always @(posedge clk) begin: AlwaysSummingForLoop
for (dstVal=0; dstVal<2; dstVal=dstVal+1) begin:SummingForLoop
out_sig_i_reg[dstVal] <= 0;
out_sig_q_reg[dstVal] <= 0;
for (srcVal=0; srcVal<2; srcVal=srcVal+1) begin:SrcForLoop
if(srcVal != dstVal) begin:innerIf
for (tapVal=0; tapVal<8; tapVal=tapVal+1) begin:tapSum
out_sig_i_reg[dstVal] <= out_sig_i_reg[dstVal] + tap_output_i[srcVal][dstVal][tapVal];
out_sig_q_reg[dstVal] <= out_sig_q_reg[dstVal] + tap_output_q[srcVal][dstVal][tapVal];
end
end
end
end
end
//endgenerate
assign out_sig_i[0] = out_sig_i_reg[0];
assign out_sig_q[0] = out_sig_q_reg[0];
assign out_sig_i[1] = out_sig_i_reg[1];
assign out_sig_q[1] = out_sig_q_reg[1];
Где я бегу в проблемы сбрасывает кумулятивный (out_sig_i_reg
и out_sig_q_reg
) сумма каждый отсчет ...
Да, я использую out_sig_i_reg и out_sig_q_reg как свою суммирующую сумму. То, что я не могу понять, состоит в том, как заставить его суммировать сумму и сбрасывать до нуля каждый раз до суммирования ... – toozie21