Merge pull request #263 from antmicro/pcza/ql-qlf-k6n10f-tdp-inference
ql-qlf: qlf_k6n10f: add TDP_BRAM36 inference
diff --git a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
index 262d753..240dbe8 100644
--- a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
+++ b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
@@ -1260,11 +1260,11 @@
(* blackbox *)
module QL_DSP2 ( // TODO: Name subject to change
- input [NBITS_A-1:0] a,
- input [NBITS_B-1:0] b,
- input [NBITS_AF-1:0] acc_fir,
- output [NBITS_Z-1:0] z,
- output [NBITS_B-1:0] dly_b,
+ input [19:0] a,
+ input [17:0] b,
+ input [3:0] acc_fir,
+ output [37:0] z,
+ output [17:0] dly_b,
(* clkbuf_sink *)
input clk,
@@ -1284,10 +1284,10 @@
input register_inputs
);
- parameter [NBITS_COEF-1:0] COEFF_0 = 20'd0;
- parameter [NBITS_COEF-1:0] COEFF_1 = 20'd0;
- parameter [NBITS_COEF-1:0] COEFF_2 = 20'd0;
- parameter [NBITS_COEF-1:0] COEFF_3 = 20'd0;
+ 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;
localparam NBITS_ACC = 64;
localparam NBITS_A = 20;
@@ -1427,7 +1427,7 @@
input [NBITS_A-1:0] a_i,
input [NBITS_B-1:0] b_i,
output [NBITS_Z-1:0] z_o,
- output [NBITS_B-1:0] dly_b_o,
+ output reg [NBITS_B-1:0] dly_b_o,
input [NBITS_AF-1:0] acc_fir_i,
input [2:0] feedback_i,
@@ -1471,6 +1471,7 @@
reg r_subtract;
reg r_sat;
reg r_rnd;
+ reg [NBITS_ACC-1:0] acc;
always @(posedge clock_i or negedge reset_n_i) begin
if (~reset_n_i) begin
@@ -1524,11 +1525,6 @@
// Shift right control
wire [5:0] shift_d1 = register_inputs_i ? r_shift_d1 : shift_right_i;
wire [5:0] shift_d2 = output_select_i[1] ? shift_d1 : r_shift_d2;
- //localparam SHIFT_SEL = {register_inputs_i, output_select_i[1]};
- //wire [5:0] shift_right = (SHIFT_SEL == 2'b00) ? shift_right_i :
- //(SHIFT_SEL == 2'b01) ? r_shift_d1 :
- //(SHIFT_SEL == 2'b10) ? r_shift_d1 :
- //[>(SHIFT_SEL == 2'b11) ?<] r_shift_d2;
// Multiplier
wire unsigned_mode = unsigned_a & unsigned_b;
@@ -1571,8 +1567,7 @@
wire [NBITS_ACC-1:0] add_o = add_a + add_b;
- // Accumulator
- reg [NBITS_ACC-1:0] acc;
+ // Accumulator
always @(posedge clock_i or negedge reset_n_i)
if (~reset_n_i) acc <= 'h0;
else begin
@@ -1627,8 +1622,6 @@
z1; // if output_select_i == 3'h7
// B input delayed passthrough
- reg [NBITS_B-1:0] dly_b_o;
-
always @(posedge clock_i or negedge reset_n_i)
if (!reset_n_i)
dly_b_o <= 0;
diff --git a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
index b8423e5..0ae6f3b 100644
--- a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
+++ b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
@@ -109,7 +109,7 @@
) _TECHMAP_REPLACE_ (
.a ({10'd0, a_i}),
.b ({ 9'd0, b_i}),
- .acc_fir (acc_fir_i),
+ .acc_fir ({ 2'd0, acc_fir_i}),
.z (z),
.dly_b (dly_b),
diff --git a/ql-qlf-plugin/qlf_k6n10f/dsp_map.v b/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
index e10df2a..9606c4f 100644
--- a/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
+++ b/ql-qlf-plugin/qlf_k6n10f/dsp_map.v
@@ -70,10 +70,10 @@
dsp_t1_10x9x32 _TECHMAP_REPLACE_ (
.a_i (a),
.b_i (b),
- .acc_fir_i (3'd0),
+ .acc_fir_i (2'd0),
.z_o (z),
- .feedback_i (2'd0),
+ .feedback_i (3'd0),
.load_acc_i (1'b0),
.unsigned_a_i (!A_SIGNED),
.unsigned_b_i (!B_SIGNED),