aboutsummaryrefslogtreecommitdiffstats
path: root/2-a.v
blob: 2013a6f4dfc807636dca277b25b036d6d12a1ebd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
module tree_adder(data_in, data_out);
	parameter WIDTH=8, SIZE=4;
	input wire [WIDTH*SIZE-1:0] data_in;
	output wire [WIDTH-1:0] data_out;
	if (SIZE == 2) begin
		assign data_out = data_in[WIDTH-1:0] + data_in[2 * WIDTH-1:WIDTH];
	end else begin
		wire [WIDTH-1:0]intmd[0:1];
		tree_adder#(WIDTH, SIZE/2) m1(data_in[SIZE/2*WIDTH-1:0], intmd[0]);
		tree_adder#(WIDTH, SIZE/2) m2(data_in[SIZE*WIDTH-1:SIZE/2*WIDTH], intmd[1]);
		assign data_out = intmd[0] + intmd[1];
	end
endmodule

/*
module test;
	reg [63:0]vals;
	wire [7:0] out;
	tree_adder#(8, 8) adder(vals, out);
	initial begin
		$monitor(out);
		vals[7:0] = 1;
		vals[15:8] = 2;
		vals[23:16] = 1;
		vals[31:24] = 2;
		vals[39:32] = 1;
		vals[47:40] = 1;
		vals[55:48] = 1;
		vals[63:56] = 1;
		#1;
	end
endmodule
*/