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

Subversion Repositories alu_with_selectable_inputs_and_outputs

[/] [alu_with_selectable_inputs_and_outputs/] [trunk/] [tests/] [random_test.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dragos_don
/////////////////////////////////////////////////////////////////////
2
////                                                             ////
3
////      This project has been provided to you on behalf of:    ////
4
////                                                             ////
5
////            S.C. ASICArt S.R.L.                              ////
6
////                            www.asicart.com                  ////
7
////                            eli_f@asicart.com                ////
8
////                                                             ////
9
////        Author: Dragos Constantin Doncean                    ////
10
////        Email: doncean@asicart.com                           ////
11
////        Mobile: +40-740-936997                               ////
12
////                                                             ////
13
////      Downloaded from: http://www.opencores.org/             ////
14
////                                                             ////
15
/////////////////////////////////////////////////////////////////////
16
////                                                             ////
17
//// Copyright (C) 2007 Dragos Constantin Doncean                ////
18
////                         www.asicart.com                     ////
19
////                         doncean@asicart.com                 ////
20
////                                                             ////
21
//// This source file may be used and distributed without        ////
22
//// restriction provided that this copyright statement is not   ////
23
//// removed from the file and that any derivative work contains ////
24
//// the original copyright notice and the associated disclaimer.////
25
////                                                             ////
26
////     THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY     ////
27
//// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED   ////
28
//// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS   ////
29
//// FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL THE AUTHOR      ////
30
//// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,         ////
31
//// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES    ////
32
//// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE   ////
33
//// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR        ////
34
//// BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF  ////
35
//// LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT  ////
36
//// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT  ////
37
//// OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE         ////
38
//// POSSIBILITY OF SUCH DAMAGE.                                 ////
39
////                                                             ////
40
/////////////////////////////////////////////////////////////////////
41
 
42
 
43
//TEST MODULE - RANDOM TEST
44
 
45
module proj_random_test;
46
reg CLK, RES, STB;
47
reg [1:0] SEL;
48
reg[7:0] DATA_IN_0, DATA_IN_1, DATA_IN_2;
49
reg [3:0] OPERATOR_TYPE;
50
reg [2:0] OPERATOR_SYMBOL;
51
reg OUTPUT_CHANNEL;
52
reg DATA_VALID_IN;
53
 
54
wire VALID_0, VALID_1;
55
wire [15:0] OUT_0, OUT_1;
56
wire PARITY_0, PARITY_1;
57
 
58
parameter NO_OF_TRANSACTIONS = 10;
59
integer i;
60
 
61
DUT dut(.dut_clk(CLK), .dut_res(RES), .dut_stb(STB),
62
                .dut_sel(SEL),
63
                .dut_data_in_0(DATA_IN_0), .dut_data_in_1(DATA_IN_1), .dut_data_in_2(DATA_IN_2),
64
                .dut_data_valid_in(DATA_VALID_IN),
65
                .dut_valid_0(VALID_0), .dut_valid_1(VALID_1),
66
                .dut_out_0(OUT_0), .dut_out_1(OUT_1),
67
                .dut_parity_0(PARITY_0), .dut_parity_1(PARITY_1));
68
 
69
initial
70
begin
71
        CLK = 0;
72
        forever #5 CLK = ~CLK;
73
end
74
 
75
initial
76
begin
77
        RES = 0; STB = 0;
78
        SEL = 2'b00;
79
        DATA_VALID_IN = 0;
80
        DATA_IN_0 = 10'b0; DATA_IN_1 = 10'b0; DATA_IN_2 = 10'b0;
81
end
82
 
83
initial
84
begin
85
        $monitor($time, " CLK = %b, RES = %b, STB = %b, SEL = %b, DATA_IN_0 = %b, DATA_IN_1 = %b, DATA_IN_2 = %b, VALID_0 = %b, VALID_1 = %b, OUT_0 = %b, OUT_1 = %b, PARITY_0 = %b, PARITY_1 = %b",
86
                CLK, RES, STB, SEL, DATA_IN_0, DATA_IN_1, DATA_IN_2, VALID_0, VALID_1, OUT_0, OUT_1, PARITY_0, PARITY_1);
87
 
88
 
89
        #20 RES = 1;
90
        #20 RES = 0;
91
 
92
        for(i = 0; i < NO_OF_TRANSACTIONS; i = i + 1)
93
        begin
94
 
95
                #30 STB = 1;
96
                $display("Transaction no: %0d", i);
97
                DATA_VALID_IN = 1;
98
                SEL = {$random} % 3;
99
                OPERATOR_TYPE = {$random} % 10;
100
                case(OPERATOR_TYPE)
101
                'd0: //Arithmetic
102
                        OPERATOR_SYMBOL = {$random} % 5;
103
                'd1: //Logical
104
                        OPERATOR_SYMBOL = {$random} % 3;
105
                'd2: //Relational
106
                        OPERATOR_SYMBOL = {$random} % 4;
107
                'd3: //Equality
108
                        OPERATOR_SYMBOL = {$random} % 4;
109
                'd4: //Bitwise
110
                        OPERATOR_SYMBOL = {$random} % 6;
111
                'd5: //Reduction
112
                        OPERATOR_SYMBOL = {$random} % 7;
113
                'd6: //Shift
114
                        OPERATOR_SYMBOL = {$random} % 2;
115
                'd7: //Concatenation
116
                        OPERATOR_SYMBOL = {$random} % 1; //or OPERATOR_SYMBOL = 0;
117
                'd8: //Replication
118
                        OPERATOR_SYMBOL = {$random} % 1; //or OPERATOR_SYMBOL = 0;
119
                'd9: //Conditional
120
                        OPERATOR_SYMBOL = {$random} % 1; //or OPERATOR_SYMBOL = 0;
121
                endcase
122
                OUTPUT_CHANNEL = {$random} % 2;
123
 
124
                case(SEL[1:0])
125
                                2'b00: DATA_IN_0 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
126
                                2'b01: DATA_IN_1 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
127
                                2'b10: DATA_IN_2 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
128
                endcase
129
 
130
                #10 STB = 0;
131
 
132
                //if at least only one operand is required - there always exists at least one operand
133
                case(SEL[1:0])
134
                                2'b00: DATA_IN_0 = $random;
135
                                2'b01: DATA_IN_1 = $random;
136
                                2'b10: DATA_IN_2 = $random;
137
                endcase
138
 
139
                //if at least two operands are required
140
                if((OPERATOR_TYPE === 'd0) || //Arithmetic
141
                                        ((OPERATOR_TYPE === 'd1) && (OPERATOR_SYMBOL >=  'd1) && (OPERATOR_SYMBOL <=  'd2)) || //Logical
142
                                        (OPERATOR_TYPE === 'd2) || //Relational
143
                                        (OPERATOR_TYPE === 'd3) || //Equality
144
                                        ((OPERATOR_TYPE === 'd4) && (OPERATOR_SYMBOL >=  'd1) && (OPERATOR_SYMBOL <=  'd5)) || //Bitwise
145
                                        (OPERATOR_TYPE === 'd6) || //Shift
146
                                        (OPERATOR_TYPE === 'd7) || //Concatenation
147
                                        (OPERATOR_TYPE === 'd9))   //Conditional
148
                begin
149
                        #10
150
                        case(SEL[1:0])
151
                                2'b00: DATA_IN_0 = $random;
152
                                2'b01: DATA_IN_1 = $random;
153
                                2'b10: DATA_IN_2 = $random;
154
                        endcase
155
                end
156
 
157
                //if three operands are required
158
                if(OPERATOR_TYPE === 'd9) //Conditional
159
                begin
160
                        #10
161
                        case(SEL[1:0])
162
                                2'b00: DATA_IN_0 = $random;
163
                                2'b01: DATA_IN_1 = $random;
164
                                2'b10: DATA_IN_2 = $random;
165
                        endcase
166
                end
167
 
168
                #10 DATA_VALID_IN = 0;
169
 
170
        end
171
 
172
        #50 $finish;
173
end
174
 
175
initial
176
begin
177
 
178
        $shm_open("../run/waves/waves_random_test");  // Open database named "waves"
179
        $shm_probe(proj_random_test, "AS"); // Record tb scope and all sub hierarchy
180
        //<or> $shm_probe(proj_random_test.top, "A"); // Record only those signals at proj_random_test.top scope
181
 
182
        /*
183
        After your simulation run, you would invoke the waveform viewer with "simwave waves" or "simvision waves"
184
        and all the signals you asked to be recorded should be present. You don't need the NC gui at all.
185
        */
186
end
187
 
188
/*
189
//for waveform viewing with GTKWave
190
initial
191
begin
192
        $dumpfile ("proj_random_test.dump") ;
193
        $dumpvars;
194
        $dumpon;
195
        //$dumpall;
196
end
197
*/
198
 
199
endmodule

powered by: WebSVN 2.1.0

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