x393  1.0
FPGAcodeforElphelNC393camera
dct1d_chen.v
Go to the documentation of this file.
1 
39 `timescale 1ns/1ps
40 
41 module dct1d_chen#(
42  parameter WIDTH = 24,
43  parameter OUT_WIDTH = 16,
44  parameter B_WIDTH = 18,
45  parameter A_WIDTH = 25,
46  parameter P_WIDTH = 48,
47 // parameter M_WIDTH = 43, // actual multiplier width (== (A_WIDTH +B_WIDTH)
48  parameter ROUND_OUT = 8, // cut these number of LSBs on the output, round result (in addition to COSINE_SHIFT)
49  parameter COSINE_SHIFT= 17,
50 
51  parameter COS_1_16 = 128553, // (1<<17) * cos(1*pi/16)
52  parameter COS_2_16 = 121095, // (2<<17) * cos(1*pi/16)
53  parameter COS_3_16 = 108982, // (3<<17) * cos(1*pi/16)
54  parameter COS_4_16 = 92682, // (4<<17) * cos(1*pi/16)
55  parameter COS_5_16 = 72820, // (5<<17) * cos(1*pi/16)
56  parameter COS_6_16 = 50159, // (6<<17) * cos(1*pi/16)
57  parameter COS_7_16 = 25570 // (7<<17) * cos(1*pi/16)
58 )(
59  input clk,
60  input rst,
61  input en,
62  input [2 * WIDTH -1:0] d10_32_76_54, // Concatenated input data {x[1],x[0]}/{x[3],x[2]}/ {x[7],x[6]}/{x[5],x[4]}
63  input start, // {x[1],x[0]} available next after start, {x[3],x[2]} - second next, then {x[7],x[6]} and {x[5],x[4]}
64  output [OUT_WIDTH -1:0] dout,
65  output reg pre2_start_out, // 2 clock cycle before F4 output, full dout sequence
66  // start_out-X-F4-X-F2-X-F6-F5-F0-F3-X-F1-X-F7
67  output reg en_out // valid at the same time slot as pre2_start_out (goes active with pre2_start_out)
68 );
71  reg signed [B_WIDTH-1:0] dsp_ma_bin;
72  wire dsp_ma_ceb1_1; // load b1 register
73  wire dsp_ma_ceb2_1; // load b2 register
74  wire dsp_ma_selb_1; // 0 - select b1, 1 - select b2
75  wire signed [A_WIDTH-1:0] dsp_ma_ain_1;
78  wire signed [A_WIDTH-1:0] dsp_ma_din_1;
81  wire dsp_ma_en_a_1; // 0: +/- D, 1: A or A +/- D
82  wire dsp_ma_en_d_1; // 0: A, 1: D or A +/- D
83  wire dsp_ma_sub_a_1; //
84  wire dsp_ma_neg_m_1; // 1 - negate multiplier result
85  wire dsp_ma_accum_1; // 0 - use multiplier result, 1 add to accumulator
86  wire signed [P_WIDTH-1:0] dsp_ma_p_1;
87 
88  wire dsp_ma_ceb1_2; // load b1 register
89  wire dsp_ma_ceb2_2; // load b2 register
90  wire dsp_ma_selb_2; // 0 - select b1, 1 - select b2
91  wire signed [A_WIDTH-1:0] dsp_ma_ain_2;
94  wire signed [A_WIDTH-1:0] dsp_ma_din_2;
96  wire dsp_ma_sela_2; // 0 - select a1, 1 - select a2
97  wire dsp_ma_seld_2; // 0 - select a1/a2, 1 - select d
98  wire dsp_ma_neg_m_2; // 1 - negate multiplier result
99  wire dsp_ma_accum_2; // 0 - use multiplier result, 1 add to accumulator
100  wire signed [P_WIDTH-1:0] dsp_ma_p_2;
101  wire signed [P_WIDTH-1:0] dsp_ma_p_mux;
102 
103  // Multipler A/D inputs before shift
104  wire signed [WIDTH-1:0] dsp_ma_ain24_1;
105  wire signed [WIDTH-1:0] dsp_ma_din24_1;
106  wire signed [WIDTH-1:0] dsp_ma_ain24_2;
107  wire signed [WIDTH-1:0] dsp_ma_din24_2;
108 
109 
110 
111 
112  wire signed [WIDTH-1:0] simd_a0;
113  wire signed [WIDTH-1:0] simd_a1;
114  wire signed [WIDTH-1:0] simd_a2;
115  wire signed [WIDTH-1:0] simd_a3;
116  wire signed [WIDTH-1:0] simd_a4;
117  wire signed [WIDTH-1:0] simd_a5;
118 
119  wire signed [WIDTH-1:0] simd_b0;
120  wire signed [WIDTH-1:0] simd_b1;
121  wire signed [WIDTH-1:0] simd_b2;
122  wire signed [WIDTH-1:0] simd_b3;
123  wire signed [WIDTH-1:0] simd_b4;
124  wire signed [WIDTH-1:0] simd_b5;
125 
126  wire signed [WIDTH-1:0] simd_p0;
127  wire signed [WIDTH-1:0] simd_p1;
128  wire signed [WIDTH-1:0] simd_p2;
129  wire signed [WIDTH-1:0] simd_p3;
130  wire signed [WIDTH-1:0] simd_p4;
131  wire signed [WIDTH-1:0] simd_p5;
132 
135  wire simd_cea45; // first stage A registers CE
136 // wire simd_ceas45; // second stage A registers CE
139  wire simd_ceb45; // B registers CE
146 
147  reg [7:0] phase;
148  reg [2:0] phase_cnt;
149  reg [OUT_WIDTH -1:0] dout_r;
150 // wire [OUT_WIDTH -1:0] dout1_w;
151 // wire [OUT_WIDTH -1:0] dout2_w;
153  wire[BEFORE_SAT_WIDTH -1:0] dout_round_w; // after rounding, before (optional) saturation
154  reg [BEFORE_SAT_WIDTH -1:0] dout_round_r; // after rounding, before (optional) saturation
155  wire [OUT_WIDTH -1:0] dout_sat_w;
156  wire[BEFORE_SAT_WIDTH -1:0] dout_round; // after rounding, before (optional) saturation
157 
158  reg [2:0] per_type; // idle/last:0, first cycle - 1, 2-nd - 2, other - 3,... ~en->6 ->7 -> 0 (to generate pre2_start_out)
159 
160 
161  // Temporarily adding 1 extra latency cycle for rounding/saturation. TODO: Remove when moved to DSP itself
162  reg pre3_start_out; // 3 clock cycle before F4 output, full dout sequence
163  // start_out-X-F4-X-F2-X-F6-F5-F0-F3-X-F1-X-F7
164  reg pre_en_out; // valid at the same time slot as pre2_start_out (goes active with pre2_start_out)
165 
166 
167 
168 
169 // .ain ({simd_a1,simd_a0}), // input[47:0]
170 // .bin ({simd_b1,simd_b0}), // input[47:0]
171  // dsp_addsub_simd1_i input connections
172  assign simd_a0 = phase[0]? d10_32_76_54[0 * WIDTH +: WIDTH] : simd_p0; // only phase[0] & phase[4], other phases - don't care
173  assign simd_a1 = phase[0]? d10_32_76_54[1 * WIDTH +: WIDTH] : simd_p1; // only phase[0] & phase[4], other phases - don't care
174 
175  assign simd_b0 = phase[2]? d10_32_76_54[0 * WIDTH +: WIDTH] : simd_p3; // only phase[2] & phase[5], other phases - don't care
176  assign simd_b1 = phase[2]? d10_32_76_54[1 * WIDTH +: WIDTH] : simd_p2; // only phase[2] & phase[5], other phases - don't care
177 
178  assign simd_cea01 = phase[0] | phase[4];
179  assign simd_ceb01 = phase[2] | phase[5];
180 
181  assign simd_sub01 = phase[3] | phase[6];
182 // assign simd_cep01 = phase[2] | phase[3] | phase[5] | phase[6];
183  assign simd_cep01 = phase[3] | phase[4] | phase[6] | phase[7];
184 
185  // dsp_addsub_simd2_i input connections
186  assign simd_a2 = phase[1]? d10_32_76_54[0 * WIDTH +: WIDTH] : simd_p0; // only phase[1] & phase[7], other phases - don't care
187  assign simd_a3 = d10_32_76_54[1 * WIDTH +: WIDTH]; // only phase[1], other phases - don't care
188 
189  assign simd_b2 = phase[3]? d10_32_76_54[0 * WIDTH +: WIDTH] : simd_p1; // only phase[3] & phase[7], other phases - don't care
190  assign simd_b3 = d10_32_76_54[1 * WIDTH +: WIDTH]; // only phase[3], other phases - don't care
191 
192  assign simd_cea23 = phase[1] | phase[7];
193  assign simd_ceb23 = phase[3] | phase[7];
194 
195  assign simd_sub23 = phase[4] | phase[7];
196 // assign simd_cep23 = phase[0] | phase[3] | phase[4] | phase[7];
197  assign simd_cep23 = phase[0] | phase[1] | phase[4] | phase[5];
198 
199  assign simd_a4 = simd_p3; // only at phase[6], other phases - don't care
200  assign simd_a5 = simd_p0; // only at phase[6], other phases - don't care
201 
202  // dsp_addsub_reg2_simd_i input connections
203 // assign simd_b4 = dsp_ma_p_1[M_WIDTH-1 -: WIDTH]; // only at phase[6], other phases - don't care. TODO: add symmetric rounding here?
204 // assign simd_b5 = dsp_ma_p_1[M_WIDTH-1 -: WIDTH]; // only at phase[2], other phases - don't care. TODO: add symmetric rounding here?
205 
206  assign simd_b4 = dsp_ma_p_1[COSINE_SHIFT +: WIDTH]; // only at phase[6], other phases - don't care. TODO: add symmetric rounding here?
207  assign simd_b5 = dsp_ma_p_1[COSINE_SHIFT +: WIDTH]; // only at phase[2], other phases - don't care. TODO: add symmetric rounding here?
208 
209 
210 
211 
212 //COSINE_SHIFT
213 
214  assign simd_cea45 = phase[6];
215 // assign simd_ceas45 = phase[2];
216  assign simd_ceb45 = phase[2] | phase[4];
217 
218  assign simd_sub45 = phase[2] | phase[4];
219 // assign simd_cep45 = phase[2] | phase[3] | phase[4] | phase[5];
220  assign simd_cep45 = phase[3] | phase[4] | phase[5] | phase[6];
221 
222  // dsp_ma1_i control connections
223  assign dsp_ma_ceb1_1 = phase[4] | phase[7];
224  assign dsp_ma_ceb2_1 = phase[1];
225  assign dsp_ma_selb_1 = phase[3] | phase[6];
226  assign dsp_ma_cea1_1 = phase[2] | phase[6];
227  assign dsp_ma_cea2_1 = phase[1] | phase[3];
228  assign dsp_ma_ced_1 = phase[2] | phase[6];
229  assign dsp_ma_sela_1 = phase[1] | phase[7];
230  assign dsp_ma_en_a_1 = !(phase[2] | phase[4]);
231  assign dsp_ma_en_d_1 = phase[0] | phase[2] | phase[4] | phase[6];
232  assign dsp_ma_sub_a_1 = phase[0];
233  assign dsp_ma_neg_m_1 = phase[6];
234  assign dsp_ma_accum_1 = phase[5] | phase[7];
235  // dsp_ma1_i data input connections
236 /* assign dsp_ma_ain24_1 = ({WIDTH{phase[6]}} & simd_p1) |
237  ({WIDTH{phase[1]}} & simd_p2) |
238  ({WIDTH{phase[2]}} & simd_p0) |
239  ({WIDTH{phase[3]}} & simd_p2) ; // Other - don't care **/
240  // Swapping A and d for pre-added (it is D-A, not A-D)
241 // assign dsp_ma_ain24_1 = phase[6] ? simd_p1 : (phase[2] ? simd_p0 : simd_p2);
242 // assign dsp_ma_din24_1 = phase[6] ? simd_p2 : simd_p1;
243  assign dsp_ma_ain24_1 = phase[6] ? simd_p2 : (phase[2] ? simd_p0 : simd_p2);
244 // assign dsp_ma_din24_1 = phase[6] ? simd_p1 : simd_p1;
245  assign dsp_ma_din24_1 = simd_p1;
246 
247  // dsp_ma2_i control connections
248  assign dsp_ma_ceb1_2 = phase[3] | phase[6];
249  assign dsp_ma_ceb2_2 = phase[2] | phase[5];
250  assign dsp_ma_selb_2 = phase[0] | phase[2] | phase[4] | phase[6];
251  assign dsp_ma_cea1_2 = phase[5];
252  assign dsp_ma_cea2_2 = phase[4];
253  assign dsp_ma_ced_2 = phase[1] | phase[6];
254  assign dsp_ma_sela_2 = phase[1] | phase[6];
255  assign dsp_ma_seld_2 = phase[0] | phase[2] | phase[5] | phase[7];
256  assign dsp_ma_neg_m_2 = phase[1] | phase[6];
257  assign dsp_ma_accum_2 = phase[0] | phase[2] | phase[4] | phase[6];
258  // dsp_ma2_i data input connections
259  assign dsp_ma_ain24_2 = simd_p5;
260  assign dsp_ma_din24_2 = simd_p4;
261 
262 // Shift adder outputs to the MSB of the multiplier inputs
263 // assign dsp_ma_ain_1 = {dsp_ma_ain24_1, {A_WIDTH-WIDTH{1'b0}}};
264 // assign dsp_ma_din_1 = {dsp_ma_din24_1, {A_WIDTH-WIDTH{1'b0}}};
265 // assign dsp_ma_ain_2 = {dsp_ma_ain24_2, {A_WIDTH-WIDTH{1'b0}}};
266 // assign dsp_ma_din_2 = {dsp_ma_din24_2, {A_WIDTH-WIDTH{1'b0}}};
267 // Extend sign for A and D of the multiplier inputs (24bits->25 bits)
272 
273 // Shift DSP outputs to match output results
274 // Leave unshifted?
275 
276 // assign dout1_w = dsp_ma_p_1[M_WIDTH -: WIDTH]; // adding one bit for adder (two MPY outputs are added)
277 // assign dout2_w = dsp_ma_p_2[M_WIDTH -: WIDTH]; // adding one bit for adder (two MPY outputs are added)
279 
280 // assign dout1_w = dsp_ma_p_1[COSINE_SHIFT +: OUT_WIDTH]; // adding one bit for adder (two MPY outputs are added)
281 // assign dout2_w = dsp_ma_p_2[COSINE_SHIFT +: OUT_WIDTH]; // adding one bit for adder (two MPY outputs are added)
282 
285 // Saturation (only if BEFORE_SAT_WIDTH > OUT_WIDTH)
287  generate
288  if (TRIM_MSB < 0) begin // should never happen
290  end else if (TRIM_MSB == 0) begin
291  assign dout_sat_w = dout_round[0 +: OUT_WIDTH];
292  end else begin //! saturate. TODO: Maybe (and also symmetric rounding) can be done in DSP itself using masks?
294  dout_round[0 +: OUT_WIDTH]:
296  end
297  endgenerate
298 
299  // to possibly remove registers with generate
300  assign dout_round= dout_round_r;
301 
302 //BEFORE_SAT_WIDTH
303 
304 // wire dout_round_c;
305 // wire [OUT_WIDTH -1:0] dout_round_w;
306 
307 //ROUND_OUT
308 //phase_cnt[0] ? dout1_w : dout2_w;
309  assign dout = dout_r;
310 
311  always @ (posedge clk) begin
312  if (rst) per_type <= 0;
313  else if (start) per_type <= 3'h1;
314  else if (phase[7]) begin
315  if (!per_type[2] && !en) per_type <= 3'h6;
316  else if ((per_type != 0) && (per_type != 3)) per_type <= per_type + 1;
317  end
318  phase <= {phase[6:0], start | (phase[7] & (|per_type) )};
319 
320  if (rst || start || phase[7]) phase_cnt <= 0;
321  else if (|phase[6:0]) phase_cnt <= phase_cnt + 1;
322 
323  // Cosine table, defined to fit into 17 bits for 18-bit signed DSP B-operand
324  case (phase_cnt)
325  3'h0: dsp_ma_bin <= COS_6_16;
326  3'h1: dsp_ma_bin <= COS_7_16;
327  3'h2: dsp_ma_bin <= COS_1_16;
328  3'h3: dsp_ma_bin <= COS_2_16;
329  3'h4: dsp_ma_bin <= COS_5_16;
330  3'h5: dsp_ma_bin <= COS_3_16;
331  3'h6: dsp_ma_bin <= COS_4_16;
332  3'h7: dsp_ma_bin <= COS_6_16;
333  endcase
334 // dout_r <= phase_cnt[0] ? dout1_w : dout2_w;
336  dout_r <= dout_sat_w;
337 
338  if (rst) pre3_start_out <= 0;
339  else pre3_start_out <= (per_type == 2) && phase[3];
340 
342 
343 
344  if (rst || !(en || (|phase))) pre_en_out <= 0;
345  else if (phase[3]) begin
346  if (per_type == 2) pre_en_out <= 1;
347  else if (per_type[2]) pre_en_out <= 0;
348  end
349 
350  en_out <= pre_en_out;
351 
352  end
353 
355  .NUM_DATA (2),
356  .WIDTH (WIDTH)
357  ) dsp_addsub_simd1_i (
358  .clk (clk), // input
359  .rst (rst), // input
360  .ain ({simd_a1,simd_a0}), // input[47:0]
361  .bin ({simd_b1,simd_b0}), // input[47:0]
362  .cea (simd_cea01), // input
363  .ceb (simd_ceb01), // input
364  .subtract (simd_sub01), // input
365  .cep (simd_cep01), // input
366  .pout ({simd_p1,simd_p0}) // output[47:0]
367  );
368 
370  .NUM_DATA (2),
371  .WIDTH (WIDTH)
372  ) dsp_addsub_simd2_i (
373  .clk (clk), // input
374  .rst (rst), // input
375  .ain ({simd_a3,simd_a2}), // input[47:0]
376  .bin ({simd_b3,simd_b2}), // input[47:0]
377  .cea (simd_cea23), // input
378  .ceb (simd_ceb23), // input
379  .subtract (simd_sub23), // input
380  .cep (simd_cep23), // input
381  .pout ({simd_p3,simd_p2}) // output[47:0]
382  );
383 /*
384  dsp_addsub_reg2_simd #(
385  .NUM_DATA(2),
386  .WIDTH(24)
387  ) dsp_addsub_reg2_simd_i (
388  .clk (clk), // input
389  .rst (rst), // input
390  .ain ({simd_a5,simd_a4}), // input[47:0]
391  .bin ({simd_b5,simd_b4}), // input[47:0]
392  .cea1 (simd_ceaf45), // input
393  .cea2 (simd_ceas45), // input
394  .ceb (simd_ceb45), // input
395  .subtract (simd_sub45), // input
396  .cep (simd_cep45), // input
397  .pout ({simd_p5,simd_p4}) // output[47:0]
398  );
399 */
401  .NUM_DATA (2),
402  .WIDTH (WIDTH)
403  ) dsp_addsub_simd3_i (
404  .clk (clk), // input
405  .rst (rst), // input
406  .ain ({simd_a5,simd_a4}), // input[47:0]
407  .bin ({simd_b5,simd_b4}), // input[47:0]
408  .cea (simd_cea45), // input
409  .ceb (simd_ceb45), // input
410  .subtract (simd_sub45), // input
411  .cep (simd_cep45), // input
412  .pout ({simd_p5,simd_p4}) // output[47:0]
413  );
414 
416  .B_WIDTH(18),
417  .A_WIDTH(25),
418  .P_WIDTH(48)
419  ) dsp_ma1_i (
420  .clk (clk), // input
421  .rst (rst), // input
422  .bin (dsp_ma_bin), // input[17:0] signed
423  .ceb1 (dsp_ma_ceb1_1), // input
424  .ceb2 (dsp_ma_ceb2_1), // input
425  .selb (dsp_ma_selb_1), // input
426  .ain (dsp_ma_ain_1), // input[24:0] signed
427  .cea1 (dsp_ma_cea1_1), // input
428  .cea2 (dsp_ma_cea2_1), // input
429  .din (dsp_ma_din_1), // input[24:0] signed
430  .ced (dsp_ma_ced_1), // input
431  .cead (1'b1), // input
432  .sela (dsp_ma_sela_1), // input
433  .en_a (dsp_ma_en_a_1), // input
434  .en_d (dsp_ma_en_d_1), // input
435  .sub_a (dsp_ma_sub_a_1), // input
436  .neg_m (dsp_ma_neg_m_1), // input
437  .accum (dsp_ma_accum_1), // input
438  .pout (dsp_ma_p_1) // output[47:0] signed
439  );
440 
441 
443  .B_WIDTH(B_WIDTH),
444  .A_WIDTH(A_WIDTH),
445  .P_WIDTH(P_WIDTH)
446  ) dsp_ma2_i (
447  .clk (clk), // input
448  .rst (rst), // input
449  .bin (dsp_ma_bin), // input[17:0] signed
450  .ceb1 (dsp_ma_ceb1_2), // input
451  .ceb2 (dsp_ma_ceb2_2), // input
452  .selb (dsp_ma_selb_2), // input
453  .ain (dsp_ma_ain_2), // input[24:0] signed
454  .cea1 (dsp_ma_cea1_2), // input
455  .cea2 (dsp_ma_cea2_2), // input
456  .din (dsp_ma_din_2), // input[24:0] signed
457  .ced (dsp_ma_ced_2), // input
458  .sela (dsp_ma_sela_2), // input
459  .seld (dsp_ma_seld_2), // input
460  .neg_m (dsp_ma_neg_m_2), // input
461  .accum (dsp_ma_accum_2), // input
462  .pout (dsp_ma_p_2) // output[47:0] signed
463  );
464 /*
465  dly01_16 dly01_16_i (
466  .clk (clk), // input
467  .rst (rst), // input
468  .dly (4'h4), // input[3:0]
469  .din (phase[7]), // input
470  .dout (pre2_start_out) // output
471  );
472 */
473 
474 endmodule
475 
3169dsp_ma_sela_2wire
Definition: dct1d_chen.v:96
3125P_WIDTH48
Definition: dct1d_chen.v:46
3211dout_rreg[OUT_WIDTH-1:0]
Definition: dct1d_chen.v:149
3175dsp_ma_ain24_1wire[WIDTH-1:0]
Definition: dct1d_chen.v:104
3131COS_4_1692682
Definition: dct1d_chen.v:54
3185simd_b0wire[WIDTH-1:0]
Definition: dct1d_chen.v:119
3128COS_1_16128553
Definition: dct1d_chen.v:51
3133COS_6_1650159
Definition: dct1d_chen.v:56
signed [B_WIDTH-1:0] 3383bin
Definition: dsp_ma_preadd.v:48
3362ceb1
Definition: dsp_ma.v:49
[2 * WIDTH -1:0] 3138d10_32_76_54
Definition: dct1d_chen.v:62
3189simd_b4wire[WIDTH-1:0]
Definition: dct1d_chen.v:123
3160dsp_ma_p_1wire[P_WIDTH-1:0]
Definition: dct1d_chen.v:86
3372neg_m
Definition: dsp_ma.v:59
signed [A_WIDTH-1:0] 3390din
Definition: dsp_ma_preadd.v:55
signed [A_WIDTH-1:0] 3368din
Definition: dsp_ma.v:55
3366cea1
Definition: dsp_ma.v:53
3153dsp_ma_ced_1wire
Definition: dct1d_chen.v:79
[OUT_WIDTH -1:0] 3140dout
Definition: dct1d_chen.v:64
3178dsp_ma_din24_2wire[WIDTH-1:0]
Definition: dct1d_chen.v:107
3367cea2
Definition: dsp_ma.v:54
dsp_addsub_simd3_i dsp_addsub_simd
Definition: dct1d_chen.v:400
3130COS_3_16108982
Definition: dct1d_chen.v:53
3144BEFORE_SAT_WIDTHP_WIDTH - TOTAL_RSHIFT
Definition: dct1d_chen.v:70
[NUM_DATA * WIDTH -1:0] 3352pout
3206simd_cep01wire
Definition: dct1d_chen.v:143
3166dsp_ma_cea2_2wire
Definition: dct1d_chen.v:93
3164dsp_ma_ain_2wire[A_WIDTH-1:0]
Definition: dct1d_chen.v:91
3150dsp_ma_cea1_1wire
Definition: dct1d_chen.v:76
signed [P_WIDTH-1:0] 3399pout
Definition: dsp_ma_preadd.v:64
3195simd_p4wire[WIDTH-1:0]
Definition: dct1d_chen.v:130
3181simd_a2wire[WIDTH-1:0]
Definition: dct1d_chen.v:114
3194simd_p3wire[WIDTH-1:0]
Definition: dct1d_chen.v:129
3198simd_cea23wire
Definition: dct1d_chen.v:134
3190simd_b5wire[WIDTH-1:0]
Definition: dct1d_chen.v:124
3360rst
Definition: dsp_ma.v:47
3162dsp_ma_ceb2_2wire
Definition: dct1d_chen.v:89
3165dsp_ma_cea1_2wire
Definition: dct1d_chen.v:92
3146dsp_ma_ceb1_1wire
Definition: dct1d_chen.v:72
dsp_ma2_i dsp_ma
Definition: dct1d_chen.v:442
3122OUT_WIDTH16
Definition: dct1d_chen.v:43
3196simd_p5wire[WIDTH-1:0]
Definition: dct1d_chen.v:131
3187simd_b2wire[WIDTH-1:0]
Definition: dct1d_chen.v:121
3215dout_sat_wwire[OUT_WIDTH-1:0]
Definition: dct1d_chen.v:155
dsp_ma1_i dsp_ma_preadd
Definition: dct1d_chen.v:415
3174dsp_ma_p_muxwire[P_WIDTH-1:0]
Definition: dct1d_chen.v:101
3216dout_roundwire[BEFORE_SAT_WIDTH-1:0]
Definition: dct1d_chen.v:156
3123B_WIDTH18
Definition: dct1d_chen.v:44
3180simd_a1wire[WIDTH-1:0]
Definition: dct1d_chen.v:113
3207simd_cep23wire
Definition: dct1d_chen.v:144
3148dsp_ma_selb_1wire
Definition: dct1d_chen.v:74
3171dsp_ma_neg_m_2wire
Definition: dct1d_chen.v:98
3370sela
Definition: dsp_ma.v:57
3147dsp_ma_ceb2_1wire
Definition: dct1d_chen.v:73
3204simd_sub23wire
Definition: dct1d_chen.v:141
signed [A_WIDTH-1:0] 3387ain
Definition: dsp_ma_preadd.v:52
3203simd_sub01wire
Definition: dct1d_chen.v:140
signed [B_WIDTH-1:0] 3361bin
Definition: dsp_ma.v:48
3202simd_ceb45wire
Definition: dct1d_chen.v:139
3182simd_a3wire[WIDTH-1:0]
Definition: dct1d_chen.v:115
[NUM_DATA * WIDTH -1:0] 3346ain
3127COSINE_SHIFT17
Definition: dct1d_chen.v:49
signed [A_WIDTH-1:0] 3365ain
Definition: dsp_ma.v:52
3218pre3_start_outreg
Definition: dct1d_chen.v:162
3152dsp_ma_din_1wire[A_WIDTH-1:0]
Definition: dct1d_chen.v:78
3129COS_2_16121095
Definition: dct1d_chen.v:52
3168dsp_ma_ced_2wire
Definition: dct1d_chen.v:95
3159dsp_ma_accum_1wire
Definition: dct1d_chen.v:85
3155dsp_ma_en_a_1wire
Definition: dct1d_chen.v:81
3199simd_cea45wire
Definition: dct1d_chen.v:135
3167dsp_ma_din_2wire[A_WIDTH-1:0]
Definition: dct1d_chen.v:94
[NUM_DATA * WIDTH -1:0] 3347bin
3176dsp_ma_din24_1wire[WIDTH-1:0]
Definition: dct1d_chen.v:105
3197simd_cea01wire
Definition: dct1d_chen.v:133
3188simd_b3wire[WIDTH-1:0]
Definition: dct1d_chen.v:122
3359clk
Definition: dsp_ma.v:46
3219pre_en_outreg
Definition: dct1d_chen.v:164
3210phase_cntreg[2:0]
Definition: dct1d_chen.v:148
3192simd_p1wire[WIDTH-1:0]
Definition: dct1d_chen.v:127
3157dsp_ma_sub_a_1wire
Definition: dct1d_chen.v:83
3220TRIM_MSBBEFORE_SAT_WIDTH - OUT_WIDTH
Definition: dct1d_chen.v:286
3212dout_round_cwire
Definition: dct1d_chen.v:152
3145dsp_ma_binreg[B_WIDTH-1:0]
Definition: dct1d_chen.v:71
3371seld
Definition: dsp_ma.v:58
3209phasereg[7:0]
Definition: dct1d_chen.v:147
3208simd_cep45wire
Definition: dct1d_chen.v:145
3151dsp_ma_cea2_1wire
Definition: dct1d_chen.v:77
3156dsp_ma_en_d_1wire
Definition: dct1d_chen.v:82
3149dsp_ma_ain_1wire[A_WIDTH-1:0]
Definition: dct1d_chen.v:75
3170dsp_ma_seld_2wire
Definition: dct1d_chen.v:97
3158dsp_ma_neg_m_1wire
Definition: dct1d_chen.v:84
3214dout_round_rreg[BEFORE_SAT_WIDTH-1:0]
Definition: dct1d_chen.v:154
3364selb
Definition: dsp_ma.v:51
3217per_typereg[2:0]
Definition: dct1d_chen.v:158
reg 3142en_out
Definition: dct1d_chen.v:67
3186simd_b1wire[WIDTH-1:0]
Definition: dct1d_chen.v:120
3173dsp_ma_p_2wire[P_WIDTH-1:0]
Definition: dct1d_chen.v:100
3124A_WIDTH25
Definition: dct1d_chen.v:45
3191simd_p0wire[WIDTH-1:0]
Definition: dct1d_chen.v:126
signed [P_WIDTH-1:0] 3374pout
Definition: dsp_ma.v:61
3172dsp_ma_accum_2wire
Definition: dct1d_chen.v:99
3201simd_ceb23wire
Definition: dct1d_chen.v:138
3154dsp_ma_sela_1wire
Definition: dct1d_chen.v:80
3143TOTAL_RSHIFTCOSINE_SHIFT + ROUND_OUT
Definition: dct1d_chen.v:69
3161dsp_ma_ceb1_2wire
Definition: dct1d_chen.v:88
3200simd_ceb01wire
Definition: dct1d_chen.v:137
3193simd_p2wire[WIDTH-1:0]
Definition: dct1d_chen.v:128
reg 3141pre2_start_out
Definition: dct1d_chen.v:65
3179simd_a0wire[WIDTH-1:0]
Definition: dct1d_chen.v:112
3184simd_a5wire[WIDTH-1:0]
Definition: dct1d_chen.v:117
3132COS_5_1672820
Definition: dct1d_chen.v:55
3205simd_sub45wire
Definition: dct1d_chen.v:142
3363ceb2
Definition: dsp_ma.v:50
3183simd_a4wire[WIDTH-1:0]
Definition: dct1d_chen.v:116
3126ROUND_OUT8
Definition: dct1d_chen.v:48
3369ced
Definition: dsp_ma.v:56
3163dsp_ma_selb_2wire
Definition: dct1d_chen.v:90
3373accum
Definition: dsp_ma.v:60
3213dout_round_wwire[BEFORE_SAT_WIDTH-1:0]
Definition: dct1d_chen.v:153
3177dsp_ma_ain24_2wire[WIDTH-1:0]
Definition: dct1d_chen.v:106
3134COS_7_1625570
Definition: dct1d_chen.v:57