3
3
4
4
// DELAY = $clog2(N)
5
5
(* multstyle = " dsp" * ) module adder_tree # (parameter
6
- N = 32 , DATA_WIDTH = 33 , RESULT_WIDTH = ((N - 1 ) < 2 ** $clog2(N )) ? DATA_WIDTH + $clog2(N ) : DATA_WIDTH + $clog2(N ) + 1
6
+ N = 32 , DATA_WIDTH = ( 33 * N ) , RESULT_WIDTH = ((N - 1 ) < 2 ** $clog2(N )) ? DATA_WIDTH + $clog2(N ) : DATA_WIDTH + $clog2(N ) + 1
7
7
)(
8
8
input clock, clock_ena,
9
- input signed [DATA_WIDTH - 1 : 0 ] data[ N - 1 : 0 ] ,
9
+ input signed [DATA_WIDTH - 1 : 0 ] data,
10
10
output signed [RESULT_WIDTH - 1 : 0 ] result
11
11
);
12
12
generate
18
18
localparam RES_WIDTH = (RESULT_WIDTH > DATA_WIDTH + 1 ) ? DATA_WIDTH + 1 : RESULT_WIDTH ;
19
19
localparam RESULTS = (N % 2 == 0 ) ? N / 2 : N / 2 + 1 ;
20
20
21
- wire signed [RES_WIDTH - 1 : 0 ] res[ RESULTS - 1 : 0 ] ;
21
+ wire signed [RES_WIDTH - 1 : 0 ] res;
22
22
23
23
add_pairs # (.N (N ), .DATA_WIDTH (DATA_WIDTH ), .RESULT_WIDTH (RES_WIDTH ))
24
24
add_pairs_inst (.clock (clock), .clock_ena (clock_ena), .data (data), .result (res));
@@ -35,8 +35,8 @@ module add_pairs #(parameter
35
35
N = 32 , DATA_WIDTH = 18 , RESULT_WIDTH = DATA_WIDTH + 1 , RESULTS = (N % 2 == 0 ) ? N / 2 : N / 2 + 1
36
36
)(
37
37
input clock, clock_ena,
38
- input signed [DATA_WIDTH - 1 : 0 ] data[ N - 1 : 0 ] ,
39
- output signed [RESULT_WIDTH - 1 : 0 ] result[ RESULTS - 1 : 0 ]
38
+ input signed [DATA_WIDTH - 1 : 0 ] data,
39
+ output signed [RESULT_WIDTH - 1 : 0 ] result
40
40
);
41
41
genvar i;
42
42
@@ -67,7 +67,7 @@ module add #(parameter
67
67
input clock, clock_ena,
68
68
input signed [DATAA_WIDTH - 1 : 0 ] dataa,
69
69
input signed [DATAB_WIDTH - 1 : 0 ] datab,
70
- output reg signed [RESULT_WIDTH - 1 : 0 ] result
70
+ output reg signed [RESULT_WIDTH - 1 : 0 ] result = 0
71
71
);
72
72
always_ff @ (posedge clock)
73
73
if (clock_ena)
0 commit comments