OpenCores
URL https://opencores.org/ocsvn/adder_tree/adder_tree/trunk

Subversion Repositories adder_tree

[/] [adder_tree/] [adder_tree_tb.sv] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 Papayaved
timeunit 1ns;
2
timeprecision 1ps;
3
 
4
module adder_tree_tb;
5
 
6
localparam N = 10;
7
localparam DATA_WIDTH = 12;
8
localparam RESULT_WIDTH = ((N-1) < 2**$clog2(N)) ? DATA_WIDTH + $clog2(N) : DATA_WIDTH + $clog2(N) + 1;
9
 
10
bit clock = 0, clock_ena = 1;
11
 
12
logic signed [DATA_WIDTH-1:0] data[N-1:0];
13
wire signed [DATA_WIDTH-1:0] data_in[N-1:0]; // alias for wave form
14
 
15
wire signed [RESULT_WIDTH-1:0] result;
16
bit signed [RESULT_WIDTH-1:0] sum = 0;
17
 
18
always #10ns clock++;
19
 
20
initial begin
21
        static bit sign = 0, error = 0;
22
 
23
        repeat(10) @(posedge clock);
24
 
25
        // Test 1
26
        for (int i = 0; i < N; i++)
27
                begin
28
                        data[i] = i + 1;
29
                        if (sign++) data[i] = -data[i];
30
                end
31
 
32
        sum = 0;
33
        for (int i = 0; i < N; i++)
34
                sum += data[i];
35
 
36
        repeat(100) @(posedge clock);
37
        assert (sum == result) else error |= 1;
38
 
39
        // Test 2
40
        for (int i = 0; i < N; i++)
41
                data[i] = data[i]*(i+1);
42
 
43
        sum = 0;
44
        for (int i = 0; i < N; i++)
45
                sum += data[i];
46
 
47
        repeat(100) @(posedge clock);
48
        assert (sum == result) else error |= 1;
49
 
50
        // Test 3
51
        for (int i = 0; i < N; i++)
52
                data[i] = $signed( {1'b0, {(DATA_WIDTH-1){1'b1}}} ); // max value
53
 
54
        sum = 0;
55
        for (int i = 0; i < N; i++)
56
                sum += data[i];
57
 
58
        repeat(100) @(posedge clock);
59
        assert (sum == result) else error |= 1;
60
 
61
        if (error)
62
                $display("ERROR");
63
        else
64
                $display("Test OK!");
65
 
66
        $stop(2);
67
end
68
 
69
adder_tree #(.N(N), .DATA_WIDTH(DATA_WIDTH)) dut(.*);
70
 
71
genvar j;
72
 
73
generate for (j = 0; j < N; j++)
74
        begin :gen
75
                assign data_in[j] = data[j];
76
        end
77
endgenerate
78
 
79
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.