//generate DSP chain
generate
for (i=0; i<NUM_DSP_BLOCKS; i=i+1) begin : GEN_DSP_0
dsp_fixed U_DSP (
.ay ($unsigned(ay_r)), // input, width = 18, ay.ay
.by ($unsigned(by_r)), // input, width = 18, by.by
.ax ($unsigned(ax_r)), // input, width = 18, ax.ax
.bx ($unsigned(bx_r)), // input, width = 18, bx.bx
.resulta (result0_a[i]), // output, width = 37, result0_a.result0_a
.resultb (result0_b[i]), // output, width = 37, result1.result1
.clk0 (clk_i), // input, width = 1, clk0.clk
.clk1 (), // input, width = 1, clk1.clk not used
.clk2 (), // input, width = 1, clk2.clk not used
.ena (ena_r) // input, width = 3, ena.ena
);
assign output0[i] = result0_a[i][0];
end
endgenerate
generate
for (i=0; i<NUM_DSP_BLOCKS; i=i+1) begin : GEN_DSP_1
dsp_fixed U_DSP (
.ay (result0_a[i][17:0]), // input, width = 18, ay.ay
.by (result0_b[i][17:0]), // input, width = 18, by.by
.ax (result0_a[i][17:0]), // input, width = 18, ax.ax
.bx (result0_b[i][17:0]), // input, width = 18, bx.bx
.resulta (result1_a[i]), // output, width = 37, result0_a.result0_a
.resultb (result1_b[i]), // output, width = 37, result1.result1
.clk0 (clk_i), // input, width = 1, clk0.clk
.clk1 (), // input, width = 1, clk1.clk not used
.clk2 (), // input, width = 1, clk2.clk not used
.ena (ena_r) // input, width = 3, ena.ena
);
assign output1[i] = result1_a[i][0];
end
endgenerate
generate
for (i=0; i<NUM_DSP_BLOCKS; i=i+1) begin : GEN_DSP_2
dsp_fixed U_DSP (
.ay (result1_a[i][17:0]), // input, width = 18, ay.ay
.by (result1_a[i][17:0]), // input, width = 18, by.by
.ax (result1_b[i][17:0]), // input, width = 18, ax.ax
.bx (result1_b[i][17:0]), // input, width = 18, bx.bx
.resulta (result2_a[i]), // output, width = 37, result0_a.result0_a
.resultb (result2_b[i]), // output, width = 37, result1.result1
.clk0 (clk_i), // input, width = 1, clk0.clk
.clk1 (), // input, width = 1, clk1.clk not used
.clk2 (), // input, width = 1, clk2.clk not used
.ena (ena_r) // input, width = 3, ena.ena
);
assign output2[i] = result2_a[i][0];
end
endgenerate