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
-