我正试图做一系列嵌套循环的累计和,我没有运气。我想我需要更好地理解Verilog如何展开for循环,然后才能真正想象如何解决我的问题。Verilog如何展开嵌套for循环?
本质上,我有一系列抽头输出(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作为我cummultive总和。我无法弄清楚的是如何在求和之前每次累计求和并重置为零... – toozie21 2015-02-05 13:59:41