Aggregated all QL_DSP2 parameters into a single one named MODE_BITS Signed-off-by: Maciej Kurc <mkurc@antmicro.com>
diff --git a/ql-qlf-plugin/ql-dsp-simd.cc b/ql-qlf-plugin/ql-dsp-simd.cc index ba40c07..edf432a 100644 --- a/ql-qlf-plugin/ql-dsp-simd.cc +++ b/ql-qlf-plugin/ql-dsp-simd.cc
@@ -87,7 +87,7 @@ }; // DSP parameters - const std::vector<std::string> m_DspParams = {"COEFF_0", "COEFF_1", "COEFF_2", "COEFF_3"}; + const std::vector<std::string> m_DspParams = {"COEFF_3", "COEFF_2", "COEFF_1", "COEFF_0"}; // Source DSP cell type (SISD) const std::string m_SisdDspType = "dsp_t1_10x9x32"; @@ -206,16 +206,18 @@ simd->setPort(dport, sigspec); } - // Set parameters + // Concatenate FIR coefficient parameters into the single + // MODE_BITS parameter + std::vector<RTLIL::State> mode_bits; for (const auto &it : m_DspParams) { auto val_a = dsp_a->getParam(RTLIL::escape_id(it)); auto val_b = dsp_b->getParam(RTLIL::escape_id(it)); - std::vector<RTLIL::State> bits; - bits.insert(bits.end(), val_a.begin(), val_a.end()); - bits.insert(bits.end(), val_b.begin(), val_b.end()); - simd->setParam(RTLIL::escape_id(it), RTLIL::Const(bits)); + mode_bits.insert(mode_bits.end(), val_a.begin(), val_a.end()); + mode_bits.insert(mode_bits.end(), val_b.begin(), val_b.end()); } + simd->setParam(RTLIL::escape_id("MODE_BITS"), RTLIL::Const(mode_bits)); + log_assert(mode_bits.size() == 80); // Enable the fractured mode by connecting the control // port.
diff --git a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v index dff4af3..c669166 100644 --- a/ql-qlf-plugin/qlf_k6n10f/cells_sim.v +++ b/ql-qlf-plugin/qlf_k6n10f/cells_sim.v
@@ -1291,10 +1291,12 @@ input register_inputs ); - 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 [79:0] MODE_BITS = 80'd0; + + localparam [19:0] COEFF_0 = MODE_BITS[19:0]; + localparam [19:0] COEFF_1 = MODE_BITS[39:20]; + localparam [19:0] COEFF_2 = MODE_BITS[59:40]; + localparam [19:0] COEFF_3 = MODE_BITS[79:60]; localparam NBITS_ACC = 64; localparam NBITS_A = 20; @@ -1689,10 +1691,7 @@ parameter [19:0] COEFF_3 = 20'd0; QL_DSP2 #( - .COEFF_0(COEFF_0), - .COEFF_1(COEFF_1), - .COEFF_2(COEFF_2), - .COEFF_3(COEFF_3) + .MODE_BITS({COEFF_3, COEFF_2, COEFF_1, COEFF_0}) ) dsp ( .a(a_i), .b(b_i), @@ -1753,10 +1752,10 @@ wire [8:0] dly_b_rem; QL_DSP2 #( - .COEFF_0({10'd0, COEFF_0}), - .COEFF_1({10'd0, COEFF_1}), - .COEFF_2({10'd0, COEFF_2}), - .COEFF_3({10'd0, COEFF_3}) + .MODE_BITS({10'd0, COEFF_3, + 10'd0, COEFF_2, + 10'd0, COEFF_1, + 10'd0, COEFF_0}) ) dsp ( .a({10'd0, a_i}), .b({9'd0, b_i}),
diff --git a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v index 6967a44..1c56eed 100644 --- a/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v +++ b/ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v
@@ -43,10 +43,7 @@ parameter [19:0] COEFF_3 = 20'd0; QL_DSP2 # ( - .COEFF_0 (COEFF_0), - .COEFF_1 (COEFF_1), - .COEFF_2 (COEFF_2), - .COEFF_3 (COEFF_3) + .MODE_BITS ({COEFF_3, COEFF_2, COEFF_1, COEFF_0}) ) _TECHMAP_REPLACE_ ( .a (a_i), .b (b_i), @@ -94,11 +91,7 @@ input [5:0] shift_right_i, input round_i, input subtract_i, - input register_inputs_i, - input [ 9:0] coeff_0_i, - input [ 9:0] coeff_1_i, - input [ 9:0] coeff_2_i, - input [ 9:0] coeff_3_i + input register_inputs_i ); parameter [9:0] COEFF_0 = 10'd0; @@ -110,10 +103,10 @@ wire [17:0] dly_b; QL_DSP2 # ( - .COEFF_0 ({10'd0, COEFF_0}), - .COEFF_1 ({10'd0, COEFF_1}), - .COEFF_2 ({10'd0, COEFF_2}), - .COEFF_3 ({10'd0, COEFF_3}) + .MODE_BITS ({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}),