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

Subversion Repositories nanoblaze

[/] [nanoblaze/] [trunk/] [Tools/] [nanoTest.asm] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 fcorthay
                ;===============================================================
2
                ; nanoTest.asm
3
                ;   Used for checking the NanoBlaze instruction set
4
                ;===============================================================
5
                ; 1) Test logical operations with direct values
6
                ;---------------------------------------------------------------
7
                                                                LOAD      s7, 01
8
                CONSTANT  testPattern, 0F
9
                ;---------------------------------------------------------------
10
                ; Test "LOAD", "AND"
11
                ;---------------------------------------------------------------
12
                                                                LOAD      s0, testPattern
13
                                                                AND       s0, 33
14
                                                                COMPARE   s0, 03
15
                                                                JUMP      NZ, error
16
                ;---------------------------------------------------------------
17
                ; Test "OR"
18
                ;---------------------------------------------------------------
19
                                                                LOAD      s1, testPattern
20
                                                                OR        s1, 33
21
                                                                COMPARE   s1, 3F
22
                                                                JUMP      NZ, error
23
                ;---------------------------------------------------------------
24
                ; Test "XOR"
25
                ;---------------------------------------------------------------
26
                                                                LOAD      s2, testPattern
27
                                                                XOR       s2, 33
28
                                                                COMPARE   s2, 3C
29
                                                                JUMP      NZ, error
30
                ;===============================================================
31
                ; 2) Test logical operations with registers
32
                ;---------------------------------------------------------------
33
                                                                ADD       s7, 01
34
                ;---------------------------------------------------------------
35
                ; Test "LOAD"
36
                ;---------------------------------------------------------------
37
                LOAD      s0, 33
38
                LOAD      s3, s0
39
                COMPARE   s3, 33
40
                JUMP      NZ, error
41
                ;---------------------------------------------------------------
42
                ; Test "AND"
43
                ;---------------------------------------------------------------
44
                LOAD      s0, 0F
45
                AND       s0, s3
46
                COMPARE   s0, 03
47
                JUMP      NZ, error
48
                ;---------------------------------------------------------------
49
                ; Test "OR"
50
                ;---------------------------------------------------------------
51
                LOAD      s1, 0F
52
                OR        s1, s3
53
                COMPARE   s1, 3F
54
                JUMP      NZ, error
55
                ;---------------------------------------------------------------
56
                ; Test "XOR"
57
                ;---------------------------------------------------------------
58
                LOAD      s2, 0F
59
                XOR       s2, s3
60
                COMPARE   s2, 3C
61
                JUMP      NZ, error
62
                ;===============================================================
63
                ; 3) Test arithmetic operations with constants
64
                ;---------------------------------------------------------------
65
                                                                ADD       s7, 01
66
                ;---------------------------------------------------------------
67
                ; Test "ADD" and "ADDCY"
68
                ;---------------------------------------------------------------
69
                LOAD      s0, 0F
70
                ADD       s0, 31        ;  40
71
                ADDCY     s0, F0        ; 130
72
                ADDCY     s0, F0        ; 121
73
                ADD       s0, 0F        ;  30
74
                COMPARE   s0, 30
75
                JUMP      NZ, error
76
                ;---------------------------------------------------------------
77
                ; Test "SUB" and "SUBCY"
78
                ;---------------------------------------------------------------
79
                LOAD      s1, 0F
80
                SUB       s1, 0C        ;  03
81
                SUBCY     s1, F0        ; 113
82
                SUBCY     s1, F0        ;  22
83
                SUB       s1, 01        ;  21
84
                COMPARE   s1, 21
85
                JUMP      NZ, error
86
                ;===============================================================
87
                ; 4) Test arithmetic operations with registers
88
                ;---------------------------------------------------------------
89
                                                                ADD       s7, 01
90
                ;---------------------------------------------------------------
91
                ; Test "ADD" and "ADDCY"
92
                ;---------------------------------------------------------------
93
                LOAD      s0, 0F
94
                LOAD      s1, 31
95
                LOAD      s2, F0
96
                LOAD      s3, 0F
97
                ADD       s0, s1        ;  40
98
                ADDCY     s0, s2        ; 130
99
                ADDCY     s0, s2        ; 121
100
                ADD       s0, s3        ;  30
101
                COMPARE   s0, 30
102
                JUMP      NZ, error
103
                ;---------------------------------------------------------------
104
                ; Test "SUB" and "SUBCY"
105
                ;---------------------------------------------------------------
106
                LOAD      s1, 0F
107
                LOAD      s0, 0C
108
                LOAD      s2, F0
109
                LOAD      s3, 01
110
                SUB       s1, s0        ;  03
111
                SUBCY     s1, s2        ; 113
112
                SUBCY     s1, s2        ;  22
113
                SUB       s1, s3        ;  21
114
                COMPARE   s1, 21
115
                JUMP      NZ, error
116
                ;===============================================================
117
                ; 5) Test shifts
118
                ;---------------------------------------------------------------
119
                                                                ADD       s7, 01
120
                ;---------------------------------------------------------------
121
                ; Test shift right
122
                ;---------------------------------------------------------------
123
                LOAD      s0, 0F        ; 0F
124
                SR0       s0            ; 07
125
                SRX       s0            ; 03
126
                SR1       s0            ; 81
127
                SRX       s0            ; C0, C=1
128
                SRA       s0            ; E0, C=0
129
                SRA       s0            ; 70
130
                COMPARE   s0, 70
131
                JUMP      NZ, error
132
                ;---------------------------------------------------------------
133
                ; Test shift left
134
                ;---------------------------------------------------------------
135
                LOAD      s1, F0        ; FO
136
                SL0       s1            ; E0
137
                SLX       s1            ; C0
138
                SL1       s1            ; 81
139
                SLX       s1            ; 03, C=1
140
                SLA       s1            ; 07, C=0
141
                SLA       s1            ; 0E
142
                COMPARE   s1, 0E
143
                JUMP      NZ, error
144
                ;===============================================================
145
                ; 6) Test comparison operators
146
                ;---------------------------------------------------------------
147
                                                                ADD       s7, 01
148
                ;---------------------------------------------------------------
149
                ; Test "COMPARE"
150
                ;---------------------------------------------------------------
151
                LOAD      s0, 0F
152
                COMPARE   s0, F0        ; A < B => C=1
153
                JUMP      NC, error
154
                COMPARE   s0, F0        ; A < B => Z=0
155
                JUMP      Z, error
156
                COMPARE   s0, s0        ; A = B => Z=1
157
                JUMP      NZ, error
158
                COMPARE   s0, 08        ; A > B => C=0
159
                JUMP      C, error
160
                COMPARE   s0, 08        ; A > B => Z=0
161
                JUMP      Z, error
162
                ;---------------------------------------------------------------
163
                ; Test "TEST"
164
                ;---------------------------------------------------------------
165
                LOAD      s0, 0F
166
                TEST      s0, F0        ; AND is 00 => Z=1
167
                JUMP      NZ, error
168
                TEST      s0, FF        ; AND is 0F => Z=0
169
                JUMP      Z, error
170
                ;===============================================================
171
                ; 7) Test INPUT and OUTPUT operators
172
                ;---------------------------------------------------------------
173
                                                                ADD       s7, 01
174
                ;---------------------------------------------------------------
175
                ; Test "INPUT" and "OUTPUT" direct
176
                ;
177
                ; The testbench should invert the word written at address FC.
178
                ;---------------------------------------------------------------
179
                LOAD      s0, AA
180
                OUTPUT    s0, FC
181
                INPUT     s1, FC
182
                COMPARE   s1, 55
183
                JUMP      NZ, error
184
                ;---------------------------------------------------------------
185
                ; Test "INPUT" and "OUTPUT" indexed
186
                ;---------------------------------------------------------------
187
                LOAD      s0, CC
188
                LOAD      s2, FC
189
                OUTPUT    s0, (s2)
190
                INPUT     s1, (s2)
191
                COMPARE   s1, 33
192
                JUMP      NZ, error
193
                ;===============================================================
194
                ; 8) Test STORE and FETCH operators
195
                ;---------------------------------------------------------------
196
                                                                ADD       s7, 01
197
                ;---------------------------------------------------------------
198
                ; Test "STORE" and "FETCH" direct
199
                ;---------------------------------------------------------------
200
                LOAD      s0, 0F
201
                STORE     s0, 03
202
                FETCH     s1, 03
203
                COMPARE   s1, 0F
204
                JUMP      NZ, error
205
                ;---------------------------------------------------------------
206
                ; Test "STORE" and "FETCH" indexed
207
                ;---------------------------------------------------------------
208
                LOAD      s0, F0
209
                LOAD      s2, 04
210
                STORE     s0, (s2)
211
                FETCH     s1, (s2)
212
                COMPARE   s1, F0
213
                JUMP      NZ, error
214
                ;===============================================================
215
                ; 9) Test JUMP instructions
216
                ;---------------------------------------------------------------
217
                                                                ADD       s7, 01
218
                ;---------------------------------------------------------------
219
                ; Test "JUMP NC"
220
                ;---------------------------------------------------------------
221
                LOAD      s0, F0
222
                ADD       s0, 00        ; s0=F0, C=0, Z=0
223
                JUMP      NC, continue1
224
                JUMP      error
225
                ;---------------------------------------------------------------
226
                ; Test "JUMP NZ"
227
                ;---------------------------------------------------------------
228
     continue1: ADD       s0, 00        ; s0=F0, C=0, Z=0
229
                JUMP      NZ, continue2
230
                JUMP      error
231
                ;---------------------------------------------------------------
232
                ; Test "JUMP C"
233
                ;---------------------------------------------------------------
234
     continue2: ADD       s0, F0        ; s0=E0, C=1, Z=0
235
                JUMP      C, continue3
236
                JUMP      error
237
                ;---------------------------------------------------------------
238
                ; Test "JUMP Z"
239
                ;---------------------------------------------------------------
240
     continue3: SUB       s0, E0        ; s0=00, C=0, Z=1
241
                JUMP      Z, continue4
242
                JUMP      error
243
     continue4: NOP
244
                ;===============================================================
245
                ; 10) Test call instructions
246
                ;---------------------------------------------------------------
247
                                                                ADD       s7, 01
248
                ;---------------------------------------------------------------
249
                ; define subroutine
250
                ;---------------------------------------------------------------
251
                JUMP      continue5
252
      subRetDo: ADD       s0, 01
253
                RETURN
254
                JUMP      error
255
                ;---------------------------------------------------------------
256
                ; Test "CALL"
257
                ;---------------------------------------------------------------
258
     continue5: LOAD      s0, 00
259
                LOAD      s1, F0
260
                CALL      subRetDo      ; s0=01
261
                ;---------------------------------------------------------------
262
                ; Test "CALL NC"
263
                ;---------------------------------------------------------------
264
                ADD       s1, 00        ; s1=F0, C=0, Z=0
265
                CALL      NC, subRetDo  ; s0=02
266
                ;---------------------------------------------------------------
267
                ; Test "CALL NZ"
268
                ;---------------------------------------------------------------
269
                ADD       s1, 00        ; s1=F0, C=0, Z=0
270
                CALL      NZ, subRetDo  ; s0=03
271
                ;---------------------------------------------------------------
272
                ; Test "CALL C"
273
                ;---------------------------------------------------------------
274
                ADD       s1, F0        ; s0=E0, C=1, Z=0
275
                CALL      C, subRetDo   ; s0=04
276
                ;---------------------------------------------------------------
277
                ; Test "CALL Z"
278
                ;---------------------------------------------------------------
279
                SUB       s1, E0        ; s0=00, C=0, Z=1
280
                CALL      Z, subRetDo   ; s0=05
281
                COMPARE   s0, 05
282
                jump      nz, error
283
                ;===============================================================
284
                ; 11) Test call return instructions
285
                ;---------------------------------------------------------------
286
                                                                ADD       s7, 01
287
                ;---------------------------------------------------------------
288
                ; define subroutines
289
                ;---------------------------------------------------------------
290
                JUMP      continue6
291
      subRetNC: ADD       s0, 01
292
                RETURN    NC
293
                JUMP      error
294
      subRetNZ: ADD       s0, 01
295
                RETURN    NZ
296
                JUMP      error
297
       subRetC: ADD       s0, 01
298
                RETURN    C
299
                JUMP      error
300
       subRetZ: ADD       s0, 01
301
                RETURN    Z
302
                JUMP      error
303
                ;---------------------------------------------------------------
304
                ; Test "RETURN NC"
305
                ;---------------------------------------------------------------
306
     continue6: LOAD      s0, 00        ; increment will give C=0, Z=0
307
                CALL      NC, subRetNC
308
                ;---------------------------------------------------------------
309
                ; Test "RETURN NZ"
310
                ;---------------------------------------------------------------
311
                LOAD      s0, 00        ; increment will give C=0, Z=0
312
                CALL      NZ, subRetNZ
313
                ;---------------------------------------------------------------
314
                ; Test "RETURN C"
315
                ;---------------------------------------------------------------
316
                LOAD      s0, FF        ; increment will give C=1, Z=1
317
                CALL      C, subRetC
318
                ;---------------------------------------------------------------
319
                ; Test "RETURN Z"
320
                ;---------------------------------------------------------------
321
                LOAD      s0, FF        ; increment will give C=1, Z=1
322
                CALL      Z, subRetZ
323
                ;===============================================================
324
                ; End of tests
325
                ;
326
                ; The testbench should react if value 1 is written to address 00.
327
                ;---------------------------------------------------------------
328
                LOAD      s0, 01
329
                OUTPUT    s0, 00
330
                JUMP      endOfMemory
331
                ;===============================================================
332
                ; Assert error
333
                ;
334
                ; The testbench should react if value 0 is written to address 00.
335
                ;---------------------------------------------------------------
336
ADDRESS 3FD
337
         error: LOAD      s0, 00
338
                OUTPUT    s0, 00
339
                ;===============================================================
340
                ; End of instruction memory
341
                ;---------------------------------------------------------------
342
   endOfMemory: JUMP      endOfMemory

powered by: WebSVN 2.1.0

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