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

Subversion Repositories t6507lp

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

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
        // SBC
106
        alu_opcode = SBC_IMM;
107
        for (i = 0; i < 1000; i = i + 1)
108
        begin
109 140 gabrielosh
                @(negedge clk);
110 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
111
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
112
                //$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);
113
                {alu_status_expected[C], alu_result_expected} = alu_result_expected - alu_a - ~alu_status_expected[C];
114
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
115
                alu_status_expected[N] = alu_result_expected[7];
116
                alu_status_expected[V] = ((alu_a[7] == DUT.A[7]) && (alu_a[7] != alu_result_expected[7]));
117
                check();
118
        end
119
 
120
        // LDA
121
        alu_opcode = LDA_IMM;
122
        for (i = 0; i < 1000; i = i + 1)
123
        begin
124
                alu_a = i;
125 140 gabrielosh
                @(negedge clk);
126 127 gabrielosh
                alu_result_expected = i;
127
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
128
                alu_status_expected[N] = alu_result_expected[7];
129
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
130
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
131
                //$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);
132
                check();
133
        end
134
 
135
        // LDX
136
        alu_opcode = LDX_IMM;
137
        for (i = 0; i < 1000; i = i + 1)
138
        begin
139
                alu_a = i;
140 140 gabrielosh
                @(negedge clk);
141 127 gabrielosh
                alu_x_expected = i;
142
                //alu_result_expected = i;
143
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
144
                alu_status_expected[N] = alu_x_expected[7];
145
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
146
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
147
                //$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);
148
                check();
149
        end
150
 
151
        // LDY
152
        alu_opcode = LDY_IMM;
153
        for (i = 0; i < 1001; i = i + 1)
154
        begin
155
                alu_a = i;
156 140 gabrielosh
                @(negedge clk);
157 127 gabrielosh
                alu_y_expected = i;
158
                //alu_result_expected = i;
159
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
160
                alu_status_expected[N] = alu_y_expected[7];
161
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
162
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
163
                //$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);
164
                check();
165
        end
166
 
167
        // STA
168
        alu_opcode = STA_ABS;
169
        for (i = 0; i < 1000; i = i + 1)
170
        begin
171
                alu_a = i;
172 140 gabrielosh
                @(negedge clk);
173 127 gabrielosh
                //$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
        // STX
180
        alu_opcode = STX_ABS;
181
        for (i = 0; i < 1000; i = i + 1)
182
        begin
183
                alu_a = i;
184 140 gabrielosh
                @(negedge clk);
185 127 gabrielosh
                //alu_result_expected = i;
186
                //alu_x_expected = i;
187
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
188
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
189
                //$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);
190
                check();
191
        end
192
 
193
        // STY
194
        alu_opcode = STY_ABS;
195
        for (i = 0; i < 1000; i = i + 1)
196
        begin
197
                alu_a = i;
198 140 gabrielosh
                @(negedge clk);
199 127 gabrielosh
                //alu_result_expected = i;
200
                //alu_y_expected = i;
201
                //$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
        // CMP
208
        alu_opcode = CMP_IMM;
209
        for (i = 0; i < 1000; i = i + 1)
210
        begin
211
                alu_a = i;
212 140 gabrielosh
                @(negedge clk);
213 127 gabrielosh
                temp = alu_result_expected - alu_a;
214
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
215
                alu_status_expected[N] = temp[7];
216
                alu_status_expected[C] = (alu_result_expected >= alu_a) ? 1 : 0;
217
                //alu_result_expected = i;
218
                //alu_y_expected = i;
219
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
220
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
221
                //$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);
222
                check();
223
        end
224
 
225
        // CPX
226
        alu_opcode = CPX_IMM;
227
        for (i = 0; i < 1000; i = i + 1)
228
        begin
229
                alu_a = i;
230 140 gabrielosh
                @(negedge clk);
231 127 gabrielosh
                temp = alu_x_expected - alu_a;
232
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
233
                alu_status_expected[N] = temp[7];
234
                alu_status_expected[C] = (alu_x_expected >= alu_a) ? 1 : 0;
235
                //alu_result_expected = i;
236
                //alu_y_expected = i;
237
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
238
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
239
                //$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);
240
                check();
241
        end
242
 
243
        // CPY
244
        alu_opcode = CPY_IMM;
245
        for (i = 0; i < 1000; i = i + 1)
246
        begin
247
                alu_a = i;
248 140 gabrielosh
                @(negedge clk);
249 127 gabrielosh
                temp = alu_y_expected - alu_a;
250
                alu_status_expected[Z] = (temp == 0) ? 1 : 0;
251
                alu_status_expected[N] = temp[7];
252
                alu_status_expected[C] = (alu_y_expected >= alu_a) ? 1 : 0;
253
                //alu_result_expected = i;
254
                //alu_y_expected = i;
255
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
256
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
257
                //$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);
258
                check();
259
        end
260
 
261
 
262
        // AND
263
        alu_opcode = AND_IMM;
264
        for (i = 0; i < 1000; i = i + 1)
265
        begin
266
                alu_a = i;
267 140 gabrielosh
                @(negedge clk);
268 127 gabrielosh
                alu_result_expected = i & alu_result_expected;
269
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
270
                alu_status_expected[N] = alu_result_expected[7];
271
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
272
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
273
                //$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);
274
                check();
275
        end
276
 
277
        // ASL
278
        alu_opcode = ASL_ACC;
279
        for (i = 0; i < 1000; i = i + 1)
280
        begin
281
                alu_a = i;
282 140 gabrielosh
                @(negedge clk);
283 127 gabrielosh
                alu_status_expected[C] = alu_result_expected[7];
284
                alu_result_expected[7:0] = alu_result_expected << 1;
285
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
286
                alu_status_expected[N] = alu_result_expected[7];
287
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
288
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
289
                //$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);
290
                check();
291
        end
292
 
293
        // INC
294
        alu_opcode = INC_ZPG;
295
        for (i = 0; i < 1000; i = i + 1)
296
        begin
297
                alu_a = i;
298 140 gabrielosh
                @(negedge clk);
299 127 gabrielosh
                //$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
                alu_result_expected = alu_a + 1;
303
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
304
                alu_status_expected[N] = alu_result_expected[7];
305
                check();
306
        end
307
 
308
        // INX
309
        alu_opcode = INX_IMP;
310
        for (i = 0; i < 1000; i = i + 1)
311
        begin
312
                alu_a = i;
313 140 gabrielosh
                @(negedge clk);
314 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
315
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
316
                //$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);
317
                alu_x_expected = alu_x_expected + 1;
318
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
319
                alu_status_expected[N] = alu_x_expected[7];
320
                check();
321
        end
322
 
323
        // INY
324
        alu_opcode = INY_IMP;
325
        for (i = 0; i < 1000; i = i + 1)
326
        begin
327
                alu_a = i;
328 140 gabrielosh
                @(negedge clk);
329 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
330
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
331
                //$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);
332
                alu_y_expected = alu_y_expected + 1;
333
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
334
                alu_status_expected[N] = alu_y_expected[7];
335
                check();
336
        end
337
 
338
        // DEC
339
        alu_opcode = DEC_ZPG;
340
        for (i = 0; i < 1000; i = i + 1)
341
        begin
342
                alu_a = i;
343 140 gabrielosh
                @(negedge clk);
344 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
345
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
346
                //$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);
347
                alu_result_expected = alu_a - 1;
348
                alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
349
                alu_status_expected[N] = alu_result_expected[7];
350
                check();
351
        end
352
 
353
        // DEX
354
        alu_opcode = DEX_IMP;
355
        for (i = 0; i < 1000; i = i + 1)
356
        begin
357
                alu_a = i;
358 140 gabrielosh
                @(negedge clk);
359 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
360
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
361
                //$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);
362
                alu_x_expected = alu_x_expected - 1;
363
                alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
364
                alu_status_expected[N] = alu_x_expected[7];
365
                check();
366
        end
367
 
368
        // DEY
369
        alu_opcode = DEY_IMP;
370
        for (i = 0; i < 1000; i = i + 1)
371
        begin
372
                alu_a = i;
373 140 gabrielosh
                @(negedge clk);
374 127 gabrielosh
                //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
375
                //$display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
376
                //$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);
377
                alu_y_expected = alu_y_expected - 1;
378
                alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
379
                alu_status_expected[N] = alu_y_expected[7];
380
                check();
381
        end
382
 
383
 
384
        // LDA
385
        alu_a = 0;
386
        alu_opcode = LDA_IMM;
387
        //$display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
388
        //$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);
389 140 gabrielosh
        @(negedge clk);
390 127 gabrielosh
        alu_result_expected = 8'h00;
391
        //                       NV1BDIZC
392
        alu_status_expected = 8'b00100010;
393
        check();
394
 
395
        // BIT
396
        alu_opcode = BIT_ZPG;
397
        for (i = 0; i < 1000; i = i + 1)
398
        begin
399
                alu_a = i;
400 140 gabrielosh
                @(negedge clk);
401 127 gabrielosh
                $display("i = %d alu_opcode = %h alu_enable = %d", i, alu_opcode, alu_enable);
402
                $display("DUT.A = %h DUT.X = %h DUT.Y = %h", DUT.A, DUT.X, DUT.Y);
403
                $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);
404
                alu_status_expected[Z] = ((alu_a & alu_result_expected) == 0) ? 1 : 0;
405
                alu_status_expected[V] = alu_a[6];
406
                alu_status_expected[N] = alu_a[7];
407
                check();
408
        end
409
 
410
        // SEC
411
        alu_opcode = SEC_IMP;
412 140 gabrielosh
        @(negedge clk);
413 127 gabrielosh
        alu_status_expected[C] = 1;
414
        check();
415
 
416
        // SED
417
        alu_opcode = SED_IMP;
418 140 gabrielosh
        @(negedge clk);
419 127 gabrielosh
        alu_status_expected[D] = 1;
420
        check();
421
 
422
        // SEI
423
        alu_opcode = SEI_IMP;
424 140 gabrielosh
        @(negedge clk);
425 127 gabrielosh
        alu_status_expected[I] = 1;
426
        check();
427
 
428
        // CLC
429
        alu_opcode = CLC_IMP;
430 140 gabrielosh
        @(negedge clk);
431 127 gabrielosh
        alu_status_expected[C] = 0;
432
        check();
433
 
434
        // CLD
435
        alu_opcode = CLD_IMP;
436 140 gabrielosh
        @(negedge clk);
437 127 gabrielosh
        alu_status_expected[D] = 0;
438
        check();
439
 
440
        // CLI
441
        alu_opcode = CLI_IMP;
442 140 gabrielosh
        @(negedge clk);
443 127 gabrielosh
        alu_status_expected[I] = 0;
444
        check();
445
 
446
        // CLV
447
        alu_opcode = CLV_IMP;
448 140 gabrielosh
        @(negedge clk);
449 127 gabrielosh
        alu_status_expected[V] = 0;
450
        check();
451
 
452
        // LDA
453
        alu_opcode = LDA_IMM;
454
        alu_a = 8'h76;
455 140 gabrielosh
        @(negedge clk);
456 127 gabrielosh
        alu_result_expected = alu_a;
457
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
458
        alu_status_expected[N] = alu_result_expected[7];
459
        check();
460
 
461
        // TAX
462
        alu_opcode = TAX_IMP;
463 140 gabrielosh
        @(negedge clk);
464 127 gabrielosh
        alu_x_expected = alu_result_expected;
465
        alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
466
        alu_status_expected[N] = alu_x_expected[7];
467
        check();
468
 
469
        // TAY
470
        alu_opcode = TAY_IMP;
471 140 gabrielosh
        @(negedge clk);
472 127 gabrielosh
        alu_y_expected = alu_result_expected;
473
        alu_status_expected[Z] = (alu_y_expected == 0) ? 1 : 0;
474
        alu_status_expected[N] = alu_y_expected[7];
475
        check();
476
 
477
        // TSX
478
        alu_opcode = TSX_IMP;
479 140 gabrielosh
        @(negedge clk);
480 127 gabrielosh
        alu_x_expected = alu_a;
481
        //alu_result_expected = alu_a;
482
        alu_status_expected[Z] = (alu_x_expected == 0) ? 1 : 0;
483
        alu_status_expected[N] = alu_x_expected[7];
484
        check();
485
 
486
        // TXA
487
        alu_opcode = TXA_IMP;
488 140 gabrielosh
        @(negedge clk);
489 127 gabrielosh
        alu_result_expected = alu_x_expected;
490
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
491
        alu_status_expected[N] = alu_result_expected[7];
492
        check();
493
 
494
        // TXS
495
        alu_opcode = TXS_IMP;
496 140 gabrielosh
        @(negedge clk);
497 127 gabrielosh
        alu_result_expected = alu_x_expected;
498
        check();
499
 
500
        // TYA
501
        alu_opcode = TYA_IMP;
502 140 gabrielosh
        @(negedge clk);
503 127 gabrielosh
        alu_result_expected = alu_y_expected;
504
        alu_status_expected[Z] = (alu_result_expected == 0) ? 1 : 0;
505
        alu_status_expected[N] = alu_result_expected[7];
506
        check();
507
 
508
        // Nothing should happen
509
        // BCC
510
        alu_opcode = BCC_REL;
511 140 gabrielosh
        @(negedge clk);
512 127 gabrielosh
        check();
513
 
514
        // BCS
515
        alu_opcode = BCS_REL;
516 140 gabrielosh
        @(negedge clk);
517 127 gabrielosh
        check();
518
 
519
        // BEQ
520
        alu_opcode = BEQ_REL;
521 140 gabrielosh
        @(negedge clk);
522 127 gabrielosh
        check();
523
 
524
        // BMI
525
        alu_opcode = BMI_REL;
526 140 gabrielosh
        @(negedge clk);
527 127 gabrielosh
        check();
528
 
529
        // BNE
530
        alu_opcode = BNE_REL;
531 140 gabrielosh
        @(negedge clk);
532 127 gabrielosh
        check();
533
 
534
        // BPL
535
        alu_opcode = BPL_REL;
536 140 gabrielosh
        @(negedge clk);
537 127 gabrielosh
        check();
538
 
539
        // BVC
540
        alu_opcode = BVC_REL;
541 140 gabrielosh
        @(negedge clk);
542 127 gabrielosh
        check();
543
 
544
        // BVS
545
        alu_opcode = BVS_REL;
546 140 gabrielosh
        @(negedge clk);
547 127 gabrielosh
        check();
548
 
549
        // JMP
550
        alu_opcode = JMP_ABS;
551 140 gabrielosh
        @(negedge clk);
552 127 gabrielosh
        check();
553
 
554
        // JMP
555
        alu_opcode = JMP_IND;
556 140 gabrielosh
        @(negedge clk);
557 127 gabrielosh
        check();
558
 
559
        // JSR
560
        alu_opcode = JSR_ABS;
561 140 gabrielosh
        @(negedge clk);
562 127 gabrielosh
        check();
563
 
564
        // NOP
565
        alu_opcode = NOP_IMP;
566 140 gabrielosh
        @(negedge clk);
567 127 gabrielosh
        check();
568
 
569
        // RTS
570
        alu_opcode = RTS_IMP;
571 140 gabrielosh
        @(negedge clk);
572 127 gabrielosh
        check();
573
 
574
        $display("TEST PASSED");
575
        $finish;
576
end
577
 
578
endmodule
579
 

powered by: WebSVN 2.1.0

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