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

Subversion Repositories t6507lp

[/] [t6507lp/] [trunk/] [rtl/] [verilog/] [t6507lp_alu_tb.v] - Blame information for rev 145

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 127 gabrielosh
`include "timescale.v"
2 136 gabrielosh
module t6507lp_alu_tb;
3 127 gabrielosh
 
4 136 gabrielosh
`include  "t6507lp_package.v"
5 127 gabrielosh
 
6 136 gabrielosh
reg         clk;
7 140 gabrielosh
reg         reset_n;
8 136 gabrielosh
reg         alu_enable;
9
wire [7:0]  alu_result;
10
wire [7:0]  alu_status;
11
reg  [7:0]  alu_opcode;
12
reg  [7:0]  alu_a;
13
wire [7:0]  alu_x;
14
wire [7:0]  alu_y;
15
reg  [31:0] i;
16 127 gabrielosh
 
17
reg [7:0] alu_result_expected;
18
reg [7:0] alu_status_expected;
19
reg [7:0] alu_x_expected;
20
reg [7:0] alu_y_expected;
21
 
22
reg c_aux;
23
reg [7:0] temp;
24
 
25 136 gabrielosh
t6507lp_alu DUT (
26
                        .clk            (clk),
27
                        .reset_n        (reset_n),
28 127 gabrielosh
                        .alu_enable     (alu_enable),
29
                        .alu_result     (alu_result),
30
                        .alu_status     (alu_status),
31
                        .alu_opcode     (alu_opcode),
32
                        .alu_a          (alu_a),
33
                        .alu_x          (alu_x),
34
                        .alu_y          (alu_y)
35
                );
36
 
37
 
38
localparam period = 10;
39
 
40
task check;
41
        begin
42
                $display("               RESULTS       EXPECTED");
43
                $display("alu_result       %h             %h   ", alu_result, alu_result_expected);
44
                $display("alu_status    %b       %b   ", alu_status, alu_status_expected);
45
                $display("alu_x            %h             %h   ", alu_x,      alu_x_expected     );
46
                $display("alu_y            %h             %h   ", alu_y,      alu_y_expected     );
47
                if ((alu_result_expected != alu_result) || (alu_status_expected != alu_status) || (alu_x_expected != alu_x) || (alu_y_expected != alu_y))
48
                begin
49
                        $display("ERROR at instruction %h",alu_opcode);
50
                        $finish;
51
                end
52
                else
53
                begin
54
                        $display("Instruction %h... OK!", alu_opcode);
55
                end
56
        end
57
endtask
58
 
59
 
60
always begin
61 136 gabrielosh
        #(period/2) clk = ~clk;
62 127 gabrielosh
end
63
 
64
initial
65
begin
66
        // Reset
67 136 gabrielosh
        clk = 0;
68
        reset_n = 0;
69 140 gabrielosh
        @(negedge clk);
70
        @(negedge clk);
71 143 creep
        //reset_n = 1;
72 127 gabrielosh
        alu_enable = 1;
73
        alu_result_expected = 8'h00;
74
        alu_status_expected = 8'b00100010;
75
        alu_x_expected = 8'h00;
76
        alu_y_expected = 8'h00;
77
 
78
        // LDA
79
        alu_a = 0;
80
        alu_opcode = LDA_IMM;
81
        //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
82
        //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
83 140 gabrielosh
        @(negedge clk);
84 127 gabrielosh
        alu_result_expected = 8'h00;
85
        //                       NV1BDIZC
86
        alu_status_expected = 8'b00100010;
87
        check();
88
 
89
        // ADC
90
        alu_opcode = ADC_IMM;
91
        alu_a = 1;
92
        for (i = 0; i < 1000; i = i + 1)
93
        begin
94 140 gabrielosh
                @(negedge clk);
95 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
96
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
97
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
98
                {alu_status_expected[C], alu_result_expected} = alu_a + alu_result_expected + alu_status_expected[C];
99
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
100
                alu_status_expected[N] = alu_result_expected[7];
101
                alu_status_expected[V] = ((alu_a[7] == DUT.A[7]) && (alu_a[7] != alu_result_expected[7]));
102
                check();
103
        end
104
 
105 145 gabrielosh
        // ADC
106
        alu_opcode = ASL_ABS;
107
        for (i = 0; i < 1000; i = i + 1)
108
        begin
109
                alu_a = i;
110
                @(negedge clk);
111
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
112
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
113
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
114
                {alu_status_expected[C], alu_result_expected} = {alu_a,1'b0};
115
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
116
                alu_status_expected[N] = alu_result_expected[7];
117
                check();
118
        end
119
 
120
        // LDA
121
        alu_a = 0;
122
        alu_opcode = LDA_IMM;
123
    //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
124
        //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
125
        @(negedge clk);
126
        alu_result_expected = 8'h00;
127
        //                       NV1BDIZC
128
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
129
        alu_status_expected[N] = alu_result_expected[7];
130
        check();
131
 
132 127 gabrielosh
        // SBC
133
        alu_opcode = SBC_IMM;
134
        for (i = 0; i < 1000; i = i + 1)
135
        begin
136 145 gabrielosh
                alu_a = 1;
137 140 gabrielosh
                @(negedge clk);
138 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
139
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
140
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
141
                {alu_status_expected[C], alu_result_expected} = alu_result_expected - alu_a - ~alu_status_expected[C];
142
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
143
                alu_status_expected[N] = alu_result_expected[7];
144
                alu_status_expected[V] = ((alu_a[7] == DUT.A[7]) && (alu_a[7] != alu_result_expected[7]));
145
                check();
146
        end
147
 
148
        // LDA
149
        alu_opcode = LDA_IMM;
150
        for (i = 0; i < 1000; i = i + 1)
151
        begin
152
                alu_a = i;
153 140 gabrielosh
                @(negedge clk);
154 127 gabrielosh
                alu_result_expected = i;
155
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
156
                alu_status_expected[N] = alu_result_expected[7];
157
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
158
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
159
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
160
                check();
161
        end
162
 
163
        // LDX
164
        alu_opcode = LDX_IMM;
165
        for (i = 0; i < 1000; i = i + 1)
166
        begin
167
                alu_a = i;
168 140 gabrielosh
                @(negedge clk);
169 127 gabrielosh
                alu_x_expected = i;
170
                //alu_result_expected = i;
171
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
172
                alu_status_expected[N] = alu_x_expected[7];
173
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
174
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
175
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
176
                check();
177
        end
178
 
179
        // LDY
180
        alu_opcode = LDY_IMM;
181
        for (i = 0; i < 1001; i = i + 1)
182
        begin
183
                alu_a = i;
184 140 gabrielosh
                @(negedge clk);
185 127 gabrielosh
                alu_y_expected = i;
186
                //alu_result_expected = i;
187
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
188
                alu_status_expected[N] = alu_y_expected[7];
189
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
190
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
191
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
192
                check();
193
        end
194
 
195
        // STA
196
        alu_opcode = STA_ABS;
197
        for (i = 0; i < 1000; i = i + 1)
198
        begin
199
                alu_a = i;
200 140 gabrielosh
                @(negedge clk);
201 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
202
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
203
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
204
                check();
205
        end
206
 
207
        // STX
208
        alu_opcode = STX_ABS;
209
        for (i = 0; i < 1000; i = i + 1)
210
        begin
211
                alu_a = i;
212 140 gabrielosh
                @(negedge clk);
213 127 gabrielosh
                //alu_result_expected = i;
214
                //alu_x_expected = i;
215
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
216
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
217
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
218
                check();
219
        end
220
 
221
        // STY
222
        alu_opcode = STY_ABS;
223
        for (i = 0; i < 1000; i = i + 1)
224
        begin
225
                alu_a = i;
226 140 gabrielosh
                @(negedge clk);
227 127 gabrielosh
                //alu_result_expected = i;
228
                //alu_y_expected = i;
229
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
230
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
231
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
232
                check();
233
        end
234
 
235
        // CMP
236
        alu_opcode = CMP_IMM;
237
        for (i = 0; i < 1000; i = i + 1)
238
        begin
239
                alu_a = i;
240 140 gabrielosh
                @(negedge clk);
241 127 gabrielosh
                temp = alu_result_expected - alu_a;
242
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
243
                alu_status_expected[N] = temp[7];
244
                alu_status_expected[C] = (alu_result_expected >= alu_a) ? 1 : 0;
245
                //alu_result_expected = i;
246
                //alu_y_expected = i;
247
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
248
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
249
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
250
                check();
251
        end
252
 
253
        // CPX
254
        alu_opcode = CPX_IMM;
255
        for (i = 0; i < 1000; i = i + 1)
256
        begin
257
                alu_a = i;
258 140 gabrielosh
                @(negedge clk);
259 127 gabrielosh
                temp = alu_x_expected - alu_a;
260
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
261
                alu_status_expected[N] = temp[7];
262
                alu_status_expected[C] = (alu_x_expected >= alu_a) ? 1 : 0;
263
                //alu_result_expected = i;
264
                //alu_y_expected = i;
265
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
266
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
267
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
268
                check();
269
        end
270
 
271
        // CPY
272
        alu_opcode = CPY_IMM;
273
        for (i = 0; i < 1000; i = i + 1)
274
        begin
275
                alu_a = i;
276 140 gabrielosh
                @(negedge clk);
277 127 gabrielosh
                temp = alu_y_expected - alu_a;
278
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
279
                alu_status_expected[N] = temp[7];
280
                alu_status_expected[C] = (alu_y_expected >= alu_a) ? 1 : 0;
281
                //alu_result_expected = i;
282
                //alu_y_expected = i;
283
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
284
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
285
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
286
                check();
287
        end
288
 
289
 
290
        // AND
291
        alu_opcode = AND_IMM;
292
        for (i = 0; i < 1000; i = i + 1)
293
        begin
294
                alu_a = i;
295 140 gabrielosh
                @(negedge clk);
296 127 gabrielosh
                alu_result_expected = i & alu_result_expected;
297
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
298
                alu_status_expected[N] = alu_result_expected[7];
299
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
300
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
301
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
302
                check();
303
        end
304
 
305
        // ASL
306
        alu_opcode = ASL_ACC;
307
        for (i = 0; i < 1000; i = i + 1)
308
        begin
309
                alu_a = i;
310 140 gabrielosh
                @(negedge clk);
311 127 gabrielosh
                alu_status_expected[C] = alu_result_expected[7];
312
                alu_result_expected[7:0] = alu_result_expected << 1;
313
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
314
                alu_status_expected[N] = alu_result_expected[7];
315
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
316
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
317
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
318
                check();
319
        end
320
 
321
        // INC
322
        alu_opcode = INC_ZPG;
323
        for (i = 0; i < 1000; i = i + 1)
324
        begin
325
                alu_a = i;
326 140 gabrielosh
                @(negedge clk);
327 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
328
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
329
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
330
                alu_result_expected = alu_a + 1;
331
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
332
                alu_status_expected[N] = alu_result_expected[7];
333
                check();
334
        end
335
 
336
        // INX
337
        alu_opcode = INX_IMP;
338
        for (i = 0; i < 1000; i = i + 1)
339
        begin
340
                alu_a = i;
341 140 gabrielosh
                @(negedge clk);
342 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
343
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
344
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
345
                alu_x_expected = alu_x_expected + 1;
346
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
347
                alu_status_expected[N] = alu_x_expected[7];
348
                check();
349
        end
350
 
351
        // INY
352
        alu_opcode = INY_IMP;
353
        for (i = 0; i < 1000; i = i + 1)
354
        begin
355
                alu_a = i;
356 140 gabrielosh
                @(negedge clk);
357 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
358
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
359
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
360
                alu_y_expected = alu_y_expected + 1;
361
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
362
                alu_status_expected[N] = alu_y_expected[7];
363
                check();
364
        end
365
 
366
        // DEC
367
        alu_opcode = DEC_ZPG;
368
        for (i = 0; i < 1000; i = i + 1)
369
        begin
370
                alu_a = i;
371 140 gabrielosh
                @(negedge clk);
372 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
373
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
374
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
375
                alu_result_expected = alu_a - 1;
376
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
377
                alu_status_expected[N] = alu_result_expected[7];
378
                check();
379
        end
380
 
381
        // DEX
382
        alu_opcode = DEX_IMP;
383
        for (i = 0; i < 1000; i = i + 1)
384
        begin
385
                alu_a = i;
386 140 gabrielosh
                @(negedge clk);
387 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
388
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
389
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
390
                alu_x_expected = alu_x_expected - 1;
391
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
392
                alu_status_expected[N] = alu_x_expected[7];
393
                check();
394
        end
395
 
396
        // DEY
397
        alu_opcode = DEY_IMP;
398
        for (i = 0; i < 1000; i = i + 1)
399
        begin
400
                alu_a = i;
401 140 gabrielosh
                @(negedge clk);
402 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
403
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
404
                //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
405
                alu_y_expected = alu_y_expected - 1;
406
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
407
                alu_status_expected[N] = alu_y_expected[7];
408
                check();
409
        end
410
 
411
 
412
        // LDA
413
        alu_a = 0;
414
        alu_opcode = LDA_IMM;
415
        //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
416
        //$display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
417 140 gabrielosh
        @(negedge clk);
418 127 gabrielosh
        alu_result_expected = 8'h00;
419
        //                       NV1BDIZC
420
        alu_status_expected = 8'b00100010;
421
        check();
422
 
423
        // BIT
424
        alu_opcode = BIT_ZPG;
425
        for (i = 0; i < 1000; i = i + 1)
426
        begin
427
                alu_a = i;
428 140 gabrielosh
                @(negedge clk);
429 127 gabrielosh
                $display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
430
                $display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
431
                $display("op1 = %d op2 = %d  c = %d d = %d n = %d v = %d result = %d", alu_a, DUT.A, alu_status[C], alu_status[D], alu_status[N], alu_status[V], alu_result);
432
                alu_status_expected[Z] = ((alu_a & alu_result_expected) == 0) ? 1 : 0;
433
                alu_status_expected[V] = alu_a[6];
434
                alu_status_expected[N] = alu_a[7];
435
                check();
436
        end
437
 
438
        // SEC
439
        alu_opcode = SEC_IMP;
440 140 gabrielosh
        @(negedge clk);
441 127 gabrielosh
        alu_status_expected[C] = 1;
442
        check();
443
 
444
        // SED
445
        alu_opcode = SED_IMP;
446 140 gabrielosh
        @(negedge clk);
447 127 gabrielosh
        alu_status_expected[D] = 1;
448
        check();
449
 
450
        // SEI
451
        alu_opcode = SEI_IMP;
452 140 gabrielosh
        @(negedge clk);
453 127 gabrielosh
        alu_status_expected[I] = 1;
454
        check();
455
 
456
        // CLC
457
        alu_opcode = CLC_IMP;
458 140 gabrielosh
        @(negedge clk);
459 127 gabrielosh
        alu_status_expected[C] = 0;
460
        check();
461
 
462
        // CLD
463
        alu_opcode = CLD_IMP;
464 140 gabrielosh
        @(negedge clk);
465 127 gabrielosh
        alu_status_expected[D] = 0;
466
        check();
467
 
468
        // CLI
469
        alu_opcode = CLI_IMP;
470 140 gabrielosh
        @(negedge clk);
471 127 gabrielosh
        alu_status_expected[I] = 0;
472
        check();
473
 
474
        // CLV
475
        alu_opcode = CLV_IMP;
476 140 gabrielosh
        @(negedge clk);
477 127 gabrielosh
        alu_status_expected[V] = 0;
478
        check();
479
 
480
        // LDA
481
        alu_opcode = LDA_IMM;
482
        alu_a = 8'h76;
483 140 gabrielosh
        @(negedge clk);
484 127 gabrielosh
        alu_result_expected = alu_a;
485
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
486
        alu_status_expected[N] = alu_result_expected[7];
487
        check();
488
 
489
        // TAX
490
        alu_opcode = TAX_IMP;
491 140 gabrielosh
        @(negedge clk);
492 127 gabrielosh
        alu_x_expected = alu_result_expected;
493
        alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
494
        alu_status_expected[N] = alu_x_expected[7];
495
        check();
496
 
497
        // TAY
498
        alu_opcode = TAY_IMP;
499 140 gabrielosh
        @(negedge clk);
500 127 gabrielosh
        alu_y_expected = alu_result_expected;
501
        alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
502
        alu_status_expected[N] = alu_y_expected[7];
503
        check();
504
 
505
        // TSX
506
        alu_opcode = TSX_IMP;
507 140 gabrielosh
        @(negedge clk);
508 127 gabrielosh
        alu_x_expected = alu_a;
509
        //alu_result_expected = alu_a;
510
        alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
511
        alu_status_expected[N] = alu_x_expected[7];
512
        check();
513
 
514
        // TXA
515
        alu_opcode = TXA_IMP;
516 140 gabrielosh
        @(negedge clk);
517 127 gabrielosh
        alu_result_expected = alu_x_expected;
518
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
519
        alu_status_expected[N] = alu_result_expected[7];
520
        check();
521
 
522
        // TXS
523
        alu_opcode = TXS_IMP;
524 140 gabrielosh
        @(negedge clk);
525 127 gabrielosh
        alu_result_expected = alu_x_expected;
526
        check();
527
 
528
        // TYA
529
        alu_opcode = TYA_IMP;
530 140 gabrielosh
        @(negedge clk);
531 127 gabrielosh
        alu_result_expected = alu_y_expected;
532
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
533
        alu_status_expected[N] = alu_result_expected[7];
534
        check();
535
 
536
        // Nothing should happen
537
        // BCC
538
        alu_opcode = BCC_REL;
539 140 gabrielosh
        @(negedge clk);
540 127 gabrielosh
        check();
541
 
542
        // BCS
543
        alu_opcode = BCS_REL;
544 140 gabrielosh
        @(negedge clk);
545 127 gabrielosh
        check();
546
 
547
        // BEQ
548
        alu_opcode = BEQ_REL;
549 140 gabrielosh
        @(negedge clk);
550 127 gabrielosh
        check();
551
 
552
        // BMI
553
        alu_opcode = BMI_REL;
554 140 gabrielosh
        @(negedge clk);
555 127 gabrielosh
        check();
556
 
557
        // BNE
558
        alu_opcode = BNE_REL;
559 140 gabrielosh
        @(negedge clk);
560 127 gabrielosh
        check();
561
 
562
        // BPL
563
        alu_opcode = BPL_REL;
564 140 gabrielosh
        @(negedge clk);
565 127 gabrielosh
        check();
566
 
567
        // BVC
568
        alu_opcode = BVC_REL;
569 140 gabrielosh
        @(negedge clk);
570 127 gabrielosh
        check();
571
 
572
        // BVS
573
        alu_opcode = BVS_REL;
574 140 gabrielosh
        @(negedge clk);
575 127 gabrielosh
        check();
576
 
577
        // JMP
578
        alu_opcode = JMP_ABS;
579 140 gabrielosh
        @(negedge clk);
580 127 gabrielosh
        check();
581
 
582
        // JMP
583
        alu_opcode = JMP_IND;
584 140 gabrielosh
        @(negedge clk);
585 127 gabrielosh
        check();
586
 
587
        // JSR
588
        alu_opcode = JSR_ABS;
589 140 gabrielosh
        @(negedge clk);
590 127 gabrielosh
        check();
591
 
592
        // NOP
593
        alu_opcode = NOP_IMP;
594 140 gabrielosh
        @(negedge clk);
595 127 gabrielosh
        check();
596
 
597
        // RTS
598
        alu_opcode = RTS_IMP;
599 140 gabrielosh
        @(negedge clk);
600 127 gabrielosh
        check();
601
 
602
        $display("TEST PASSED");
603
        $finish;
604
end
605
 
606
endmodule
607
 

powered by: WebSVN 2.1.0

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