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/] [directed_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 - DIRECTED TEST
44
 
45
module proj_directed_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
DUT dut(.dut_clk(CLK), .dut_res(RES), .dut_stb(STB),
59
                .dut_sel(SEL),
60
                .dut_data_in_0(DATA_IN_0), .dut_data_in_1(DATA_IN_1), .dut_data_in_2(DATA_IN_2),
61
                .dut_data_valid_in(DATA_VALID_IN),
62
                .dut_valid_0(VALID_0), .dut_valid_1(VALID_1),
63
                .dut_out_0(OUT_0), .dut_out_1(OUT_1),
64
                .dut_parity_0(PARITY_0), .dut_parity_1(PARITY_1));
65
 
66
initial
67
begin
68
        CLK = 0;
69
        forever #5 CLK = ~CLK;
70
end
71
 
72
initial
73
begin
74
        RES = 0; STB = 0;
75
        DATA_VALID_IN = 0;
76
        DATA_IN_0 = 10'b0; DATA_IN_1 = 10'b0; DATA_IN_2 = 10'b0;
77
end
78
 
79
initial
80
begin
81
        $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",
82
                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);
83
 
84
 
85
        #20 RES = 1;
86
        #20 RES = 0;
87
 
88
        //1st transaction
89
        #20 STB = 1;
90
        SEL = 2'b01;
91
        DATA_VALID_IN = 1;
92
        $display("\n-------------1st transaction-------------");
93
        $display("-------------SEL = Ch 1, OPERATOR_TYPE = Arithmetic, OPERATOR_SYMBOL = Multiply, OUTPUT_CHANNEL = Ch 0-------------\n");
94
        OPERATOR_TYPE = 4'd0;
95
        OPERATOR_SYMBOL = 3'd0;
96
        OUTPUT_CHANNEL = 1'd0;
97
        DATA_IN_1 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
98
        #10 STB = 0;
99
        DATA_IN_1 = 8'd2;
100
        #10 DATA_IN_1 = 8'd4;
101
        #10 DATA_VALID_IN = 0;
102
 
103
        //2nd transaction
104
        #32 STB = 1;
105
        DATA_VALID_IN = 1;
106
        $display("-------------2nd transaction-------------");
107
        $display("-------------SEL = Ch 1, OPERATOR_TYPE = Arithmetic, OPERATOR_SYMBOL = Divide, OUTPUT_CHANNEL = Ch 1-------------\n");
108
        OPERATOR_TYPE = 4'd0;
109
        OPERATOR_SYMBOL = 3'd1;
110
        OUTPUT_CHANNEL = 1'd1;
111
        DATA_IN_1 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
112
        #10 STB = 0;
113
        DATA_IN_1 = 8'd18;
114
        #10 DATA_IN_1 = 8'd9;
115
        #10 DATA_VALID_IN = 0;
116
 
117
        //3rd transaction
118
        #30 STB = 1;
119
        SEL = 2'd0;
120
        DATA_VALID_IN = 1;
121
        $display("-------------3rd transaction-------------");
122
        $display("-------------SEL = Ch 0, OPERATOR_TYPE = Arithmetic, OPERATOR_SYMBOL = Add, OUTPUT_CHANNEL = Ch 0-------------\n");
123
        OPERATOR_TYPE = 4'd0;
124
        OPERATOR_SYMBOL = 3'd2;
125
        OUTPUT_CHANNEL = 1'd0;
126
        DATA_IN_0 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
127
        #10 STB = 0;
128
        DATA_IN_0 = 8'd15;
129
        #10 DATA_IN_0 = 8'd10;
130
        #10 DATA_VALID_IN = 0;
131
 
132
        //4th transaction
133
        #40 STB = 1;
134
        SEL = 2'd2;
135
        DATA_VALID_IN = 1;
136
        $display("-------------4th transaction-------------");
137
        $display("-------------SEL = Ch 2, OPERATOR_TYPE = Logical, OPERATOR_SYMBOL = Logical negation, OUTPUT_CHANNEL = Ch 1-------------\n");
138
        OPERATOR_TYPE = 4'd1;
139
        OPERATOR_SYMBOL = 3'd0;
140
        OUTPUT_CHANNEL = 1'd1;
141
        DATA_IN_2 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
142
        #10 STB = 0;
143
        DATA_IN_2 = 8'd35;
144
        #10 DATA_VALID_IN = 0;
145
 
146
        //5th transaction
147
        #30 STB = 1;
148
        SEL = 2'd2;
149
        DATA_VALID_IN = 1;
150
        $display("-------------5th transaction-------------");
151
        $display("-------------SEL = Ch 2, OPERATOR_TYPE = Bitwise, OPERATOR_SYMBOL = Bitwise negation, OUTPUT_CHANNEL = Ch 1-------------\n");
152
        OPERATOR_TYPE = 4'd4;
153
        OPERATOR_SYMBOL = 3'd0;
154
        OUTPUT_CHANNEL = 1'd1;
155
        DATA_IN_2 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
156
        #10 STB = 0;
157
        DATA_IN_2 = 8'd21;
158
        #10 DATA_VALID_IN = 0;
159
 
160
        //6th transaction
161
        #30 STB = 1;
162
        SEL = 2'd0;
163
        DATA_VALID_IN = 1;
164
        $display("-------------6th transaction-------------");
165
        $display("-------------SEL = Ch 0, OPERATOR_TYPE = Shift, OPERATOR_SYMBOL = Right shift, OUTPUT_CHANNEL = Ch 0-------------\n");
166
        OPERATOR_TYPE = 4'd6;
167
        OPERATOR_SYMBOL = 3'd0;
168
        OUTPUT_CHANNEL = 1'd0;
169
        DATA_IN_0 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
170
        #10 STB = 0;
171
        DATA_IN_0 = 8'd16;
172
        #10 DATA_IN_0 = 8'd2;
173
        #10 DATA_VALID_IN = 0;
174
 
175
        //7th transaction
176
        #50 STB = 1;
177
        SEL = 2'd2;
178
        DATA_VALID_IN = 1;
179
        $display("-------------7th transaction-------------");
180
        $display("-------------SEL = Ch 2, OPERATOR_TYPE = Concatenation, OPERATOR_SYMBOL = Concatenation, OUTPUT_CHANNEL = Ch 1-------------\n");
181
        OPERATOR_TYPE = 4'd7;
182
        OPERATOR_SYMBOL = 3'd0;
183
        OUTPUT_CHANNEL = 1'd1;
184
        DATA_IN_2 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
185
        #10 STB = 0;
186
        DATA_IN_2 = 8'd1;
187
        #10 DATA_IN_2 = 8'd3;
188
        #10 DATA_VALID_IN = 0;
189
 
190
        //8th transaction
191
        #30 STB = 1;
192
        SEL = 2'd1;
193
        DATA_VALID_IN = 1;
194
        $display("-------------8th transaction-------------");
195
        $display("-------------SEL = Ch 1, OPERATOR_TYPE = Replication, OPERATOR_SYMBOL = Replication, OUTPUT_CHANNEL = Ch 0-------------\n");
196
        OPERATOR_TYPE = 4'd8;
197
        OPERATOR_SYMBOL = 3'd0;
198
        OUTPUT_CHANNEL = 1'd0;
199
        DATA_IN_1 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
200
        #10 STB = 0;
201
        DATA_IN_1 = 8'd14;
202
        #10 DATA_VALID_IN = 0;
203
 
204
        //9th transaction
205
        #30 STB = 1;
206
        SEL = 2'd0;
207
        DATA_VALID_IN = 1;
208
        $display("-------------9th transaction-------------");
209
        $display("-------------SEL = Ch 0, OPERATOR_TYPE = Conditional, OPERATOR_SYMBOL = Conditional, OUTPUT_CHANNEL = Ch 0-------------\n");
210
        OPERATOR_TYPE = 4'd9;
211
        OPERATOR_SYMBOL = 3'd0;
212
        OUTPUT_CHANNEL = 1'd0;
213
        DATA_IN_0 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
214
        #10 STB = 0;
215
        DATA_IN_0 = 8'd0;
216
        #10 DATA_IN_0 = 8'd2;
217
        #10 DATA_IN_0 = 8'd3;
218
        #10 DATA_VALID_IN = 0;
219
 
220
        /*
221
        //10th transaction - reserved values: circuit behaviour is impredictible, reserved values must not be used
222
        #40 STB = 1;
223
        SEL = 2'd3;
224
        DATA_VALID_IN = 1;
225
        $display("\n-------------10th transaction - reserved values for SEL -------------");
226
        $display("-------------SEL = Reserved ('d4), OPERATOR_TYPE = Reserved('d10), OPERATOR_SYMBOL = Reserved ('d0), OUTPUT_CHANNEL = Ch 0-------------\n");
227
        OPERATOR_TYPE = 4'd10;
228
        OPERATOR_SYMBOL = 3'd0;
229
        OUTPUT_CHANNEL = 1'd0;
230
        DATA_IN_0 = {OPERATOR_TYPE, OPERATOR_SYMBOL, OUTPUT_CHANNEL};
231
        #10 STB = 0;
232
        DATA_IN_0 = 8'hCC;
233
        DATA_IN_1 = 8'hCC;
234
        DATA_IN_2 = 8'hCC;
235
        #10 DATA_VALID_IN = 0;
236
        */
237
        #50 $finish;
238
end
239
 
240
initial
241
begin
242
 
243
        $shm_open("../run/waves/waves_directed_test");  // Open database named "waves"
244
        $shm_probe(proj_directed_test, "AS"); // Record tb scope and all sub hierarchy
245
        //<or> $shm_probe(proj_directed_test.top, "A"); // Record only those signals at proj1_test.top scope
246
 
247
        /*
248
        After your simulation run, you would invoke the waveform viewer with "simwave waves" or "simvision waves"
249
        and all the signals you asked to be recorded should be present. You don't need the NC gui at all.
250
        */
251
end
252
 
253
/*
254
//for waveform viewing - ICARUS VERILOG and GTKWave
255
initial
256
begin
257
        $dumpfile ("proj_directed_test.dump") ;
258
        $dumpvars;
259
        $dumpon;
260
        //$dumpall;
261
end
262
*/
263
 
264
endmodule

powered by: WebSVN 2.1.0

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