ql-qlf: k6n10f: DSP: adjust techmaps
Signed-off-by: Pawel Czarnecki <pczarnecki@antmicro.com>
diff --git a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
index e2ab7a7..9eae617 100644
--- a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
+++ b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
@@ -14,7 +14,7 @@
//
// SPDX-License-Identifier: Apache-2.0
-module dsp_t1_20x18x64 (
+module dsp_t1_20x18x64_cfg_ports (
input [19:0] a_i,
input [17:0] b_i,
input [ 5:0] acc_fir_i,
@@ -70,7 +70,7 @@
endmodule
-module dsp_t1_10x9x32 (
+module dsp_t1_10x9x32_cfg_ports (
input [ 9:0] a_i,
input [ 8:0] b_i,
input [ 5:0] acc_fir_i,
@@ -136,3 +136,130 @@
endmodule
+module dsp_t1_20x18x64_cfg_params (
+ input [19:0] a_i,
+ input [17:0] b_i,
+ input [ 5:0] acc_fir_i,
+ output [37:0] z_o,
+ output [17:0] dly_b_o,
+
+ input clock_i,
+ input reset_i,
+
+ input [2:0] feedback_i,
+ input load_acc_i,
+ input unsigned_a_i,
+ input unsigned_b_i,
+ input subtract_i
+);
+
+ parameter [19:0] COEFF_0 = 20'd0;
+ parameter [19:0] COEFF_1 = 20'd0;
+ parameter [19:0] COEFF_2 = 20'd0;
+ parameter [19:0] COEFF_3 = 20'd0;
+
+ parameter [2:0] OUTPUT_SELECT = 3'd0;
+ parameter [0:0] SATURATE_ENABLE = 1'd0;
+ parameter [5:0] SHIFT_RIGHT = 6'd0;
+ parameter [0:0] ROUND = 1'd0;
+ parameter [0:0] REGISTER_INPUTS = 1'd0;
+
+ QL_DSP3 # (
+ .MODE_BITS ({
+ REGISTER_INPUTS,
+ ROUND,
+ SHIFT_RIGHT,
+ SATURATE_ENABLE,
+ OUTPUT_SELECT,
+ 1'b0, // Not fractured
+ COEFF_3,
+ COEFF_2,
+ COEFF_1,
+ COEFF_0
+ })
+ ) _TECHMAP_REPLACE_ (
+ .a (a_i),
+ .b (b_i),
+ .acc_fir (acc_fir_i),
+ .z (z_o),
+ .dly_b (dly_b_o),
+
+ .clk (clock_i),
+ .reset (reset_i),
+
+ .feedback (feedback_i),
+ .load_acc (load_acc_i),
+ .unsigned_a (unsigned_a_i),
+ .unsigned_b (unsigned_b_i),
+ .subtract (subtract_i)
+ );
+
+endmodule
+
+module dsp_t1_10x9x32_cfg_params (
+ input [ 9:0] a_i,
+ input [ 8:0] b_i,
+ input [ 5:0] acc_fir_i,
+ output [18:0] z_o,
+ output [ 8:0] dly_b_o,
+
+ (* clkbuf_sink *)
+ input clock_i,
+ input reset_i,
+
+ input [2:0] feedback_i,
+ input load_acc_i,
+ input unsigned_a_i,
+ input unsigned_b_i,
+ input subtract_i
+);
+
+ parameter [9:0] COEFF_0 = 10'd0;
+ parameter [9:0] COEFF_1 = 10'd0;
+ parameter [9:0] COEFF_2 = 10'd0;
+ parameter [9:0] COEFF_3 = 10'd0;
+
+ parameter [2:0] OUTPUT_SELECT = 3'd0;
+ parameter [0:0] SATURATE_ENABLE = 1'd0;
+ parameter [5:0] SHIFT_RIGHT = 6'd0;
+ parameter [0:0] ROUND = 1'd0;
+ parameter [0:0] REGISTER_INPUTS = 1'd0;
+
+ wire [37:0] z;
+ wire [17:0] dly_b;
+
+ QL_DSP3 # (
+ .MODE_BITS ({
+ REGISTER_INPUTS,
+ ROUND,
+ SHIFT_RIGHT,
+ SATURATE_ENABLE,
+ OUTPUT_SELECT,
+ 1'b1, // Fractured
+ 10'd0, COEFF_3,
+ 10'd0, COEFF_2,
+ 10'd0, COEFF_1,
+ 10'd0, COEFF_0
+ })
+ ) _TECHMAP_REPLACE_ (
+ .a ({10'd0, a_i}),
+ .b ({ 9'd0, b_i}),
+ .acc_fir (acc_fir_i),
+ .z (z),
+ .dly_b (dly_b),
+
+ .clk (clock_i),
+ .reset (reset_i),
+
+ .feedback (feedback_i),
+ .load_acc (load_acc_i),
+ .unsigned_a (unsigned_a_i),
+ .unsigned_b (unsigned_b_i),
+ .subtract (subtract_i)
+ );
+
+ assign z_o = z[18:0];
+ assign dly_b_o = dly_b_o[8:0];
+
+endmodule
+
diff --git a/ql-qlf-plugin/qlf_k6n10f/dsp_map.v b/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
index 3c16b60..bbfc494 100644
--- a/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
+++ b/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
@@ -33,24 +33,46 @@
(B_SIGNED) ? {{(18 - B_WIDTH){B[B_WIDTH-1]}}, B} :
{{(18 - B_WIDTH){1'b0}}, B};
- dsp_t1_20x18x64 _TECHMAP_REPLACE_ (
- .a_i (a),
- .b_i (b),
- .acc_fir_i (6'd0),
- .z_o (z),
+ generate if (`USE_DSP_CFG_PARAMS == 0) begin
+ dsp_t1_20x18x64_cfg_ports _TECHMAP_REPLACE_ (
+ .a_i (a),
+ .b_i (b),
+ .acc_fir_i (6'd0),
+ .z_o (z),
- .feedback_i (3'd0),
- .load_acc_i (1'b0),
- .unsigned_a_i (!A_SIGNED),
- .unsigned_b_i (!B_SIGNED),
+ .feedback_i (3'd0),
+ .load_acc_i (1'b0),
+ .unsigned_a_i (!A_SIGNED),
+ .unsigned_b_i (!B_SIGNED),
- .output_select_i (3'd0),
- .saturate_enable_i (1'b0),
- .shift_right_i (6'd0),
- .round_i (1'b0),
- .subtract_i (1'b0),
- .register_inputs_i (1'b0)
- );
+ .output_select_i (3'd0),
+ .saturate_enable_i (1'b0),
+ .shift_right_i (6'd0),
+ .round_i (1'b0),
+ .subtract_i (1'b0),
+ .register_inputs_i (1'b0)
+ );
+ end else begin
+ dsp_t1_20x18x64_cfg_params #(
+ .OUTPUT_SELECT (3'd0),
+ .SATURATE_ENABLE (1'b0),
+ .SHIFT_RIGHT (6'd0),
+ .ROUND (1'b0),
+ .REGISTER_INPUTS (1'b0)
+ ) TECHMAP_REPLACE_ (
+ .a_i (a),
+ .b_i (b),
+ .acc_fir_i (6'd0),
+ .z_o (z),
+
+ .feedback_i (3'd0),
+ .load_acc_i (1'b0),
+ .unsigned_a_i (!A_SIGNED),
+ .unsigned_b_i (!B_SIGNED),
+
+ .subtract_i (1'b0)
+ );
+ end endgenerate
assign Y = z;
@@ -75,26 +97,47 @@
(B_SIGNED) ? {{( 9 - B_WIDTH){B[B_WIDTH-1]}}, B} :
{{( 9 - B_WIDTH){1'b0}}, B};
- dsp_t1_10x9x32 _TECHMAP_REPLACE_ (
- .a_i (a),
- .b_i (b),
- .acc_fir_i (6'd0),
- .z_o (z),
+ generate if (`USE_DSP_CFG_PARAMS == 0) begin
+ dsp_t1_10x9x32_cfg_ports _TECHMAP_REPLACE_ (
+ .a_i (a),
+ .b_i (b),
+ .acc_fir_i (6'd0),
+ .z_o (z),
- .feedback_i (3'd0),
- .load_acc_i (1'b0),
- .unsigned_a_i (!A_SIGNED),
- .unsigned_b_i (!B_SIGNED),
+ .feedback_i (3'd0),
+ .load_acc_i (1'b0),
+ .unsigned_a_i (!A_SIGNED),
+ .unsigned_b_i (!B_SIGNED),
- .output_select_i (3'd0),
- .saturate_enable_i (1'b0),
- .shift_right_i (6'd0),
- .round_i (1'b0),
- .subtract_i (1'b0),
- .register_inputs_i (1'b0)
- );
+ .output_select_i (3'd0),
+ .saturate_enable_i (1'b0),
+ .shift_right_i (6'd0),
+ .round_i (1'b0),
+ .subtract_i (1'b0),
+ .register_inputs_i (1'b0)
+ );
+ end else begin
+ dsp_t1_10x9x32_cfg_params #(
+ .OUTPUT_SELECT (3'd0),
+ .SATURATE_ENABLE (1'b0),
+ .SHIFT_RIGHT (6'd0),
+ .ROUND (1'b0),
+ .REGISTER_INPUTS (1'b0)
+ ) TECHMAP_REPLACE_ (
+ .a_i (a),
+ .b_i (b),
+ .acc_fir_i (6'd0),
+ .z_o (z),
+
+ .feedback_i (3'd0),
+ .load_acc_i (1'b0),
+ .unsigned_a_i (!A_SIGNED),
+ .unsigned_b_i (!B_SIGNED),
+
+ .subtract_i (1'b0)
+ );
+ end endgenerate
assign Y = z;
endmodule
-