Skip to content

Commit 93f2450

Browse files
committed
ql-qlf: k6n10f: DSP: adjust techmaps
Signed-off-by: Pawel Czarnecki <[email protected]>
1 parent a1df203 commit 93f2450

File tree

2 files changed

+209
-39
lines changed

2 files changed

+209
-39
lines changed

ql-qlf-plugin/qlf_k6n10f/dsp_final_map.v

Lines changed: 129 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
//
1515
// SPDX-License-Identifier: Apache-2.0
1616

17-
module dsp_t1_20x18x64 (
17+
module dsp_t1_20x18x64_cfg_ports (
1818
input [19:0] a_i,
1919
input [17:0] b_i,
2020
input [ 5:0] acc_fir_i,
@@ -70,7 +70,7 @@ module dsp_t1_20x18x64 (
7070

7171
endmodule
7272

73-
module dsp_t1_10x9x32 (
73+
module dsp_t1_10x9x32_cfg_ports (
7474
input [ 9:0] a_i,
7575
input [ 8:0] b_i,
7676
input [ 5:0] acc_fir_i,
@@ -136,3 +136,130 @@ module dsp_t1_10x9x32 (
136136

137137
endmodule
138138

139+
module dsp_t1_20x18x64_cfg_params (
140+
input [19:0] a_i,
141+
input [17:0] b_i,
142+
input [ 5:0] acc_fir_i,
143+
output [37:0] z_o,
144+
output [17:0] dly_b_o,
145+
146+
input clock_i,
147+
input reset_i,
148+
149+
input [2:0] feedback_i,
150+
input load_acc_i,
151+
input unsigned_a_i,
152+
input unsigned_b_i,
153+
input subtract_i
154+
);
155+
156+
parameter [19:0] COEFF_0 = 20'd0;
157+
parameter [19:0] COEFF_1 = 20'd0;
158+
parameter [19:0] COEFF_2 = 20'd0;
159+
parameter [19:0] COEFF_3 = 20'd0;
160+
161+
parameter [2:0] OUTPUT_SELECT = 3'd0;
162+
parameter [0:0] SATURATE_ENABLE = 1'd0;
163+
parameter [5:0] SHIFT_RIGHT = 6'd0;
164+
parameter [0:0] ROUND = 1'd0;
165+
parameter [0:0] REGISTER_INPUTS = 1'd0;
166+
167+
QL_DSP3 # (
168+
.MODE_BITS ({
169+
REGISTER_INPUTS,
170+
ROUND,
171+
SHIFT_RIGHT,
172+
SATURATE_ENABLE,
173+
OUTPUT_SELECT,
174+
1'b0, // Not fractured
175+
COEFF_3,
176+
COEFF_2,
177+
COEFF_1,
178+
COEFF_0
179+
})
180+
) _TECHMAP_REPLACE_ (
181+
.a (a_i),
182+
.b (b_i),
183+
.acc_fir (acc_fir_i),
184+
.z (z_o),
185+
.dly_b (dly_b_o),
186+
187+
.clk (clock_i),
188+
.reset (reset_i),
189+
190+
.feedback (feedback_i),
191+
.load_acc (load_acc_i),
192+
.unsigned_a (unsigned_a_i),
193+
.unsigned_b (unsigned_b_i),
194+
.subtract (subtract_i)
195+
);
196+
197+
endmodule
198+
199+
module dsp_t1_10x9x32_cfg_params (
200+
input [ 9:0] a_i,
201+
input [ 8:0] b_i,
202+
input [ 5:0] acc_fir_i,
203+
output [18:0] z_o,
204+
output [ 8:0] dly_b_o,
205+
206+
(* clkbuf_sink *)
207+
input clock_i,
208+
input reset_i,
209+
210+
input [2:0] feedback_i,
211+
input load_acc_i,
212+
input unsigned_a_i,
213+
input unsigned_b_i,
214+
input subtract_i
215+
);
216+
217+
parameter [9:0] COEFF_0 = 10'd0;
218+
parameter [9:0] COEFF_1 = 10'd0;
219+
parameter [9:0] COEFF_2 = 10'd0;
220+
parameter [9:0] COEFF_3 = 10'd0;
221+
222+
parameter [2:0] OUTPUT_SELECT = 3'd0;
223+
parameter [0:0] SATURATE_ENABLE = 1'd0;
224+
parameter [5:0] SHIFT_RIGHT = 6'd0;
225+
parameter [0:0] ROUND = 1'd0;
226+
parameter [0:0] REGISTER_INPUTS = 1'd0;
227+
228+
wire [37:0] z;
229+
wire [17:0] dly_b;
230+
231+
QL_DSP3 # (
232+
.MODE_BITS ({
233+
REGISTER_INPUTS,
234+
ROUND,
235+
SHIFT_RIGHT,
236+
SATURATE_ENABLE,
237+
OUTPUT_SELECT,
238+
1'b1, // Fractured
239+
10'd0, COEFF_3,
240+
10'd0, COEFF_2,
241+
10'd0, COEFF_1,
242+
10'd0, COEFF_0
243+
})
244+
) _TECHMAP_REPLACE_ (
245+
.a ({10'd0, a_i}),
246+
.b ({ 9'd0, b_i}),
247+
.acc_fir (acc_fir_i),
248+
.z (z),
249+
.dly_b (dly_b),
250+
251+
.clk (clock_i),
252+
.reset (reset_i),
253+
254+
.feedback (feedback_i),
255+
.load_acc (load_acc_i),
256+
.unsigned_a (unsigned_a_i),
257+
.unsigned_b (unsigned_b_i),
258+
.subtract (subtract_i)
259+
);
260+
261+
assign z_o = z[18:0];
262+
assign dly_b_o = dly_b_o[8:0];
263+
264+
endmodule
265+

ql-qlf-plugin/qlf_k6n10f/dsp_map.v

Lines changed: 80 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -33,24 +33,46 @@ module \$__QL_MUL20X18 (input [19:0] A, input [17:0] B, output [37:0] Y);
3333
(B_SIGNED) ? {{(18 - B_WIDTH){B[B_WIDTH-1]}}, B} :
3434
{{(18 - B_WIDTH){1'b0}}, B};
3535

36-
dsp_t1_20x18x64 _TECHMAP_REPLACE_ (
37-
.a_i (a),
38-
.b_i (b),
39-
.acc_fir_i (6'd0),
40-
.z_o (z),
41-
42-
.feedback_i (3'd0),
43-
.load_acc_i (1'b0),
44-
.unsigned_a_i (!A_SIGNED),
45-
.unsigned_b_i (!B_SIGNED),
46-
47-
.output_select_i (3'd0),
48-
.saturate_enable_i (1'b0),
49-
.shift_right_i (6'd0),
50-
.round_i (1'b0),
51-
.subtract_i (1'b0),
52-
.register_inputs_i (1'b0)
53-
);
36+
generate if (`USE_DSP_CFG_PARAMS == 0) begin
37+
dsp_t1_20x18x64_cfg_ports _TECHMAP_REPLACE_ (
38+
.a_i (a),
39+
.b_i (b),
40+
.acc_fir_i (6'd0),
41+
.z_o (z),
42+
43+
.feedback_i (3'd0),
44+
.load_acc_i (1'b0),
45+
.unsigned_a_i (!A_SIGNED),
46+
.unsigned_b_i (!B_SIGNED),
47+
48+
.output_select_i (3'd0),
49+
.saturate_enable_i (1'b0),
50+
.shift_right_i (6'd0),
51+
.round_i (1'b0),
52+
.subtract_i (1'b0),
53+
.register_inputs_i (1'b0)
54+
);
55+
end else begin
56+
dsp_t1_20x18x64_cfg_params #(
57+
.OUTPUT_SELECT (3'd0),
58+
.SATURATE_ENABLE (1'b0),
59+
.SHIFT_RIGHT (6'd0),
60+
.ROUND (1'b0),
61+
.REGISTER_INPUTS (1'b0)
62+
) TECHMAP_REPLACE_ (
63+
.a_i (a),
64+
.b_i (b),
65+
.acc_fir_i (6'd0),
66+
.z_o (z),
67+
68+
.feedback_i (3'd0),
69+
.load_acc_i (1'b0),
70+
.unsigned_a_i (!A_SIGNED),
71+
.unsigned_b_i (!B_SIGNED),
72+
73+
.subtract_i (1'b0)
74+
);
75+
end endgenerate
5476

5577
assign Y = z;
5678

@@ -75,26 +97,47 @@ module \$__QL_MUL10X9 (input [9:0] A, input [8:0] B, output [18:0] Y);
7597
(B_SIGNED) ? {{( 9 - B_WIDTH){B[B_WIDTH-1]}}, B} :
7698
{{( 9 - B_WIDTH){1'b0}}, B};
7799

78-
dsp_t1_10x9x32 _TECHMAP_REPLACE_ (
79-
.a_i (a),
80-
.b_i (b),
81-
.acc_fir_i (6'd0),
82-
.z_o (z),
83-
84-
.feedback_i (3'd0),
85-
.load_acc_i (1'b0),
86-
.unsigned_a_i (!A_SIGNED),
87-
.unsigned_b_i (!B_SIGNED),
88-
89-
.output_select_i (3'd0),
90-
.saturate_enable_i (1'b0),
91-
.shift_right_i (6'd0),
92-
.round_i (1'b0),
93-
.subtract_i (1'b0),
94-
.register_inputs_i (1'b0)
95-
);
100+
generate if (`USE_DSP_CFG_PARAMS == 0) begin
101+
dsp_t1_10x9x32_cfg_ports _TECHMAP_REPLACE_ (
102+
.a_i (a),
103+
.b_i (b),
104+
.acc_fir_i (6'd0),
105+
.z_o (z),
106+
107+
.feedback_i (3'd0),
108+
.load_acc_i (1'b0),
109+
.unsigned_a_i (!A_SIGNED),
110+
.unsigned_b_i (!B_SIGNED),
111+
112+
.output_select_i (3'd0),
113+
.saturate_enable_i (1'b0),
114+
.shift_right_i (6'd0),
115+
.round_i (1'b0),
116+
.subtract_i (1'b0),
117+
.register_inputs_i (1'b0)
118+
);
119+
end else begin
120+
dsp_t1_10x9x32_cfg_params #(
121+
.OUTPUT_SELECT (3'd0),
122+
.SATURATE_ENABLE (1'b0),
123+
.SHIFT_RIGHT (6'd0),
124+
.ROUND (1'b0),
125+
.REGISTER_INPUTS (1'b0)
126+
) TECHMAP_REPLACE_ (
127+
.a_i (a),
128+
.b_i (b),
129+
.acc_fir_i (6'd0),
130+
.z_o (z),
131+
132+
.feedback_i (3'd0),
133+
.load_acc_i (1'b0),
134+
.unsigned_a_i (!A_SIGNED),
135+
.unsigned_b_i (!B_SIGNED),
136+
137+
.subtract_i (1'b0)
138+
);
139+
end endgenerate
96140

97141
assign Y = z;
98142

99143
endmodule
100-

0 commit comments

Comments
 (0)