Skip to content

Commit 87a6423

Browse files
Update QL_DSP3 logic accordingly to QL_DSP2
Signed-off-by: Robert Szczepanski <[email protected]>
1 parent 6dc6e2c commit 87a6423

File tree

1 file changed

+33
-25
lines changed

1 file changed

+33
-25
lines changed

ql-qlf-plugin/qlf_k6n10f/dsp_sim.v

Lines changed: 33 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2326,8 +2326,14 @@ module dsp_t1_sim_cfg_params # (
23262326
wire [2:0] feedback = REGISTER_INPUTS ? r_feedback : feedback_i;
23272327
wire load_acc = REGISTER_INPUTS ? r_load_acc : load_acc_i;
23282328
wire subtract = REGISTER_INPUTS ? r_subtract : subtract_i;
2329-
wire sat = REGISTER_INPUTS ? r_sat : SATURATE_ENABLE;
2330-
wire rnd = REGISTER_INPUTS ? r_rnd : ROUND;
2329+
wire sat = REGISTER_INPUTS ? r_sat : SATURATE_ENABLE;
2330+
wire rnd = REGISTER_INPUTS ? r_rnd : ROUND;
2331+
2332+
wire sat_d1 = REGISTER_INPUTS ? r_sat_d1 : SATURATE_ENABLE;
2333+
wire sat_d2 = OUTPUT_SELECT[1] ? r_sat_d1 : r_sat_d2;
2334+
2335+
wire rnd_d1 = REGISTER_INPUTS ? r_rnd_d1 : ROUND;
2336+
wire rnd_d2 = OUTPUT_SELECT[1] ? rnd_d1 : r_rnd_d2;
23312337

23322338
// Shift right control
23332339
wire [5:0] shift_d1 = REGISTER_INPUTS ? r_shift_d1 : SHIFT_RIGHT;
@@ -2364,12 +2370,14 @@ module dsp_t1_sim_cfg_params # (
23642370
{{(NBITS_ACC-NBITS_A-NBITS_B){mult[NBITS_A+NBITS_B-1]}}, mult[NBITS_A+NBITS_B-1:0]};
23652371

23662372
// Adder
2367-
wire [NBITS_ACC-1:0] acc_fir_int = unsigned_a ? {{(NBITS_ACC-NBITS_A){1'b0}}, a} :
2373+
wire [NBITS_ACC-1:0] acc_fir_int = unsigned_a ? {{(NBITS_ACC-NBITS_A){1'b0}}, a} :
23682374
{{(NBITS_ACC-NBITS_A){a[NBITS_A-1]}}, a} ;
23692375

23702376
wire [NBITS_ACC-1:0] add_a = (subtract) ? (~mult_xtnd + 1) : mult_xtnd;
2371-
wire [NBITS_ACC-1:0] add_b = (feedback_i == 3'h0) ? acc :
2372-
(feedback_i == 3'h1) ? {{NBITS_ACC}{1'b0}} : (acc_fir_int << acc_fir);
2377+
wire [NBITS_ACC-1:0] add_b = (feedback == 3'h0) ? acc :
2378+
(feedback == 3'h1) ? {{NBITS_ACC}{1'b0}} :
2379+
(acc_fir < 6'd44 ? acc_fir_int << acc_fir :
2380+
acc_fir_int << 6'd44);
23732381

23742382
wire [NBITS_ACC-1:0] add_o = add_a + add_b;
23752383

@@ -2389,47 +2397,47 @@ module dsp_t1_sim_cfg_params # (
23892397
wire [NBITS_ACC-1:0] acc_out = (OUTPUT_SELECT[1]) ? add_o : acc;
23902398

23912399
// Round, shift, saturate
2392-
wire [NBITS_ACC-1:0] acc_rnd = (rnd && (SHIFT_RIGHT != 0)) ? (acc_out + ({{(NBITS_ACC-1){1'b0}}, 1'b1} << (SHIFT_RIGHT - 1))) :
2400+
wire [NBITS_ACC-1:0] acc_rnd = (rnd_d2 && (shift_d2 != 0)) ? (acc_out + ({{(NBITS_ACC-1){1'b0}}, 1'b1} << (shift_d2 - 1))) :
23932401
acc_out;
23942402

2395-
wire [NBITS_ACC-1:0] acc_shr = (unsigned_mode) ? (acc_rnd >> SHIFT_RIGHT) :
2396-
(acc_rnd >>> SHIFT_RIGHT);
2403+
wire [NBITS_ACC-1:0] acc_shr = acc_rnd >>> shift_d2;
23972404

2398-
wire [NBITS_ACC-1:0] acc_sat_u = (acc_shr[NBITS_ACC-1:NBITS_Z] != 0) ? {{(NBITS_ACC-NBITS_Z){1'b0}},{NBITS_Z{1'b1}}} :
2399-
{{(NBITS_ACC-NBITS_Z){1'b0}},{acc_shr[NBITS_Z-1:0]}};
2405+
wire [NBITS_ACC-1:0] acc_sat_u = (&acc_shr[NBITS_ACC-1:NBITS_Z-1] == 1'b1) ? {NBITS_ACC{1'b0}} :
2406+
(|acc_shr[NBITS_ACC-1:NBITS_Z-1] == 1'b0 ? {{(NBITS_ACC-NBITS_Z){1'b0}},{acc_shr[NBITS_Z-1:0]}}:
2407+
{{(NBITS_ACC-NBITS_Z){1'b0}},{NBITS_Z{1'b1}}});
24002408

24012409
wire [NBITS_ACC-1:0] acc_sat_s = ((|acc_shr[NBITS_ACC-1:NBITS_Z-1] == 1'b0) ||
24022410
(&acc_shr[NBITS_ACC-1:NBITS_Z-1] == 1'b1)) ? {{(NBITS_ACC-NBITS_Z){1'b0}},{acc_shr[NBITS_Z-1:0]}} :
24032411
{{(NBITS_ACC-NBITS_Z){1'b0}},{acc_shr[NBITS_ACC-1],{NBITS_Z-1{~acc_shr[NBITS_ACC-1]}}}};
24042412

2405-
wire [NBITS_ACC-1:0] acc_sat = (sat) ? ((unsigned_mode) ? acc_sat_u : acc_sat_s) : acc_shr;
2413+
wire [NBITS_ACC-1:0] acc_sat = sat_d2 ? (unsigned_mode ? acc_sat_u : acc_sat_s) : acc_shr;
24062414

24072415
// Output signals
2408-
wire [NBITS_Z-1:0] z0;
2409-
reg [NBITS_Z-1:0] z1;
2410-
wire [NBITS_Z-1:0] z2;
2416+
wire [NBITS_ACC-1:0] z0;
2417+
reg [NBITS_ACC-1:0] z1;
2418+
wire [NBITS_ACC-1:0] z2;
24112419

2412-
assign z0 = mult_xtnd[NBITS_Z-1:0];
2413-
assign z2 = acc_sat[NBITS_Z-1:0];
2420+
assign z0 = unsigned_mode ? mult_xtnd >> shift_d2 : mult_xtnd >>> shift_d2;
2421+
assign z2 = acc_sat;
24142422

24152423
initial z1 <= 0;
24162424

24172425
always @(posedge clock_i or posedge s_reset)
24182426
if (s_reset)
24192427
z1 <= 0;
24202428
else begin
2421-
z1 <= (OUTPUT_SELECT == 3'b100) ? z0 : z2;
2429+
z1 <= (OUTPUT_SELECT == 3'b100) ? mult_xtnd : z2;
24222430
end
24232431

24242432
// Output mux
2425-
assign z_o = (OUTPUT_SELECT == 3'h0) ? z0 :
2426-
(OUTPUT_SELECT == 3'h1) ? z2 :
2427-
(OUTPUT_SELECT == 3'h2) ? z2 :
2428-
(OUTPUT_SELECT == 3'h3) ? z2 :
2429-
(OUTPUT_SELECT == 3'h4) ? z1 :
2430-
(OUTPUT_SELECT == 3'h5) ? z1 :
2431-
(OUTPUT_SELECT == 3'h6) ? z1 :
2432-
z1; // if OUTPUT_SELECT == 3'h7
2433+
assign z_o = (OUTPUT_SELECT == 3'h0) ? mult_xtnd[NBITS_Z-1:0] :
2434+
(OUTPUT_SELECT == 3'h1) ? z2[NBITS_Z-1:0] :
2435+
(OUTPUT_SELECT == 3'h2) ? z2[NBITS_Z-1:0] :
2436+
(OUTPUT_SELECT == 3'h3) ? z2[NBITS_Z-1:0] :
2437+
(OUTPUT_SELECT == 3'h4) ? z1[NBITS_Z-1:0] :
2438+
(OUTPUT_SELECT == 3'h5) ? z1[NBITS_Z-1:0] :
2439+
(OUTPUT_SELECT == 3'h6) ? z1[NBITS_Z-1:0] :
2440+
z1[NBITS_Z-1:0]; // if OUTPUT_SELECT == 3'h7
24332441

24342442
// B input delayed passthrough
24352443
initial dly_b_o <= 0;

0 commit comments

Comments
 (0)