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

Subversion Repositories ahbmaster

[/] [ahbmaster/] [trunk/] [test79_AHBmaster/] [component/] [Actel/] [DirectCore/] [CoreAHBLite/] [5.3.101/] [rtl/] [vhdl/] [amba_bfm/] [bfm_main.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 uson
-- Actel Corporation Proprietary and Confidential
2
-- Copyright 2008 Actel Corporation.  All rights reserved.
3
-- ANY USE OR REDISTRIBUTION IN PART OR IN WHOLE MUST BE HANDLED IN 
4
-- ACCORDANCE WITH THE ACTEL LICENSE AGREEMENT AND MUST BE APPROVED 
5
-- IN ADVANCE IN WRITING.  
6
-- Revision Information:
7
-- SVN Revision Information:
8
-- SVN $Revision: 22340 $
9
-- SVN $Date: 2014-04-11 21:59:35 +0530 (Fri, 11 Apr 2014) $
10
use sTD.TEXtio.all;
11
library ieee;
12
use IEee.Std_lOGIc_1164.all;
13
use IEee.NUMeric_Std.all;
14
use WORk.BFM_teXTIo.all;
15
use worK.BFm_mISC.all;
16
use work.bfm_PACkage.all;
17
use Std.TExtio.all;
18
entity bFM_maiN is
19
generic (OPMode: INTeger range 0 to 2 := 0;
20
VECtfilE: sTRIng := "test.vec";
21
maX_InstRUCtioNS: INtegER := 16384;
22
max_Stack: InteGER := 1024;
23
max_MEMtesT: INtegeR := 65536;
24
Tpd: INTeger range 0 to 1000 := 1;
25
dEBUglevEL: InteGER range -1 to 5 := -1;
26
con_SPulsE: iNTEger range 0 to 1 := 0;
27
ArgvALUE0: inTEGer := 0;
28
argVALUE1: INTeger := 0;
29
ArgvALUe2: iNTEGer := 0;
30
ArgvaLUE3: inteGER := 0;
31
argvALUe4: inTEGEr := 0;
32
ARGvaluE5: INtegeR := 0;
33
ARGvaluE6: INTeger := 0;
34
argVALue7: intEGEr := 0;
35
ARGvalUE8: InteGER := 0;
36
ARGvaluE9: intEGEr := 0;
37
arGVAlue10: IntegER := 0;
38
arGVAlue11: inteGER := 0;
39
arGVAlue12: INtegeR := 0;
40
ARgvalUE13: intEGEr := 0;
41
ArgvALUE14: inteGER := 0;
42
aRGValue15: INtegeR := 0;
43
ARgvalUE16: INTeger := 0;
44
arGVAlue17: inTEGer := 0;
45
ArgvaLUE18: iNTEger := 0;
46
argVALue19: iNTEger := 0;
47
ArgvaLUE20: IntegER := 0;
48
argVALue21: INTEger := 0;
49
ARGvaluE22: INTeger := 0;
50
arGVAlue23: inTEGer := 0;
51
arGVALue24: inTEGer := 0;
52
argVALue25: inteGER := 0;
53
ArgvaLUE26: inTEGer := 0;
54
ArgvALUe27: iNTEger := 0;
55
argvALUe28: inTEGer := 0;
56
argVALue29: intEGEr := 0;
57
arGVAlue30: inTEGer := 0;
58
ArgvaLUE31: INTeger := 0;
59
ArgvALUe32: INTegeR := 0;
60
ARgvalUE33: INTeger := 0;
61
aRGValuE34: inteGER := 0;
62
ARGvalUE35: inteGER := 0;
63
ARgvalUE36: INtegER := 0;
64
ARGValuE37: IntegER := 0;
65
ArgvALUe38: IntegeR := 0;
66
arGVAlue39: intEGEr := 0;
67
ArgvALUE40: IntegER := 0;
68
aRGValuE41: iNTEger := 0;
69
ARGvaluE42: inTEGEr := 0;
70
ARGvaluE43: inteGER := 0;
71
arGVAlue44: inTEGer := 0;
72
argvALUe45: inteGER := 0;
73
arGVAlue46: INTEger := 0;
74
ArgvALUe47: inteGER := 0;
75
ARgvalUE48: INTEger := 0;
76
ARgvalUE49: INTegeR := 0;
77
aRGValuE50: inTEGer := 0;
78
ARgvalUE51: inteGER := 0;
79
ArgvaLUE52: IntegER := 0;
80
ARGvaluE53: INtegER := 0;
81
ArgvALUE54: INtegeR := 0;
82
aRGValuE55: INTeger := 0;
83
aRGVAlue56: inTEGEr := 0;
84
arGVAlue57: INtegeR := 0;
85
ARGvaluE58: intEGEr := 0;
86
aRGValuE59: IntegER := 0;
87
aRGValue60: INTeger := 0;
88
ArgvALUe61: inTEGer := 0;
89
argvALUe62: INtegER := 0;
90
aRGValue63: iNTEger := 0;
91
ArgvALUE64: INTeger := 0;
92
ARgvaLUE65: IntegER := 0;
93
ArgvaLUE66: intEGEr := 0;
94
aRGValue67: INtegeR := 0;
95
arGVAlue68: inTEGer := 0;
96
ARGValuE69: inteGER := 0;
97
ARgvalUE70: InteGER := 0;
98
argVALue71: INtegER := 0;
99
argVALue72: IntegER := 0;
100
ARGvalUE73: INTeger := 0;
101
argvALUe74: intEGEr := 0;
102
ArgvaLUE75: inteGER := 0;
103
ARgvalUE76: IntegER := 0;
104
ARgvalUE77: InteGER := 0;
105
arGVAlue78: intEGEr := 0;
106
ARgvalUE79: INtegeR := 0;
107
arGVAlue80: InteGER := 0;
108
arGVAlue81: IntegER := 0;
109
ARGvalUE82: iNTEger := 0;
110
ARgvalUE83: iNTEger := 0;
111
arGVAlue84: iNTEger := 0;
112
arGVAlue85: iNTEger := 0;
113
ArgvALUE86: intEGEr := 0;
114
ArgvaLUE87: intEGEr := 0;
115
ARGvaluE88: inTEGEr := 0;
116
ArgvaLUE89: INtegeR := 0;
117
argVALue90: iNTEger := 0;
118
argvALUe91: intEGEr := 0;
119
aRGVAlue92: INTeger := 0;
120
argvALUe93: iNTEger := 0;
121
argvALUe94: InteGER := 0;
122
aRGValue95: IntegER := 0;
123
aRGValue96: intEGEr := 0;
124
argvALUe97: INtegeR := 0;
125
ARgvalUE98: iNTEger := 0;
126
ARgvalUE99: inTEGer := 0); port (syscLK: in sTD_logIC;
127
sysRSTn: in Std_lOGIc;
128
pclk: out STD_logIC;
129
hclK: out stD_LogiC;
130
HResetN: out STd_lOGIC;
131
hADDR: out sTD_logIC_vecTOR(31 downto 0);
132
HBUrst: out stD_logiC_VectOR(2 downto 0);
133
HMastlOCK: out std_LOGic;
134
hproT: out Std_lOGIc_vECTor(3 downto 0);
135
HSIze: out stD_logiC_VectOR(2 downto 0);
136
hTRANs: out std_LOGic_vECTor(1 downto 0);
137
hWRIte: out stD_LogiC;
138
hwdATA: out std_LOGic_VECtor(31 downto 0);
139
hrDATa: in stD_logiC_VectOR(31 downto 0);
140
hreADY: in STd_loGIC;
141
hrESP: in std_LOGic;
142
hSEL: out std_Logic_VEctoR(15 downto 0);
143
InterRUPt: in STD_logIC_veCTOr(255 downto 0);
144
gP_Out: out std_LOGIc_vECTor(31 downto 0);
145
GP_in: in stD_logiC_VectOR(31 downto 0);
146
ext_WR: out Std_lOGIc;
147
exT_Rd: out std_LOGic;
148
ext_ADdr: out STd_loGIC_vecTOr(31 downto 0);
149
EXt_daTA: inout Std_lOGIc_veCTor(31 downto 0);
150
exT_wait: in Std_lOGIc;
151
cON_addr: in std_LOGic_VECtor(15 downto 0);
152
CON_daTA: inout sTD_logIC_vecTOR(31 downto 0);
153
coN_Rd: in std_LOgic;
154
CON_wr: in std_LOGic;
155
coN_Busy: out sTD_logIC;
156
INstr_OUT: out std_LOGic_VECtor(31 downto 0);
157
insTR_in: in stD_logiC_VectOR(31 downto 0);
158
finISHed: out sTD_logIC;
159
failED: out sTD_logIC);
160
end bfm_MAin;
161
 
162
architecture BFMA1i10I of bfM_Main is
163
 
164
constant BFMA1oo1i: strING(1 to 3) := "2.1";
165
 
166
constant BFMA1lo1I: stRING(1 to 7) := "22Dec08";
167
 
168
signal BFMA1io1i: STd_loGIC;
169
 
170
signal BFMA1ol1I: STD_logIC;
171
 
172
signal BFMA1LL1i: STd_loGIC_veCTOr(2 downto 0);
173
 
174
signal BFMA1il1I: STD_logIC;
175
 
176
signal BFMA1OI1i: stD_logiC_VectOR(3 downto 0);
177
 
178
signal BFMA1Li1i: std_LOGic_VECtor(1 downto 0);
179
 
180
signal BFMA1iI1I: std_Logic;
181
 
182
signal BFMA1o01I: STD_logIC_vecTOr(31 downto 0);
183
 
184
signal BFMA1l01I: Std_lOGIc_veCTor(31 downto 0) := ( others => '0');
185
 
186
signal BFMA1I01i: std_LOGic_vECTor(31 downto 0) := ( others => '0');
187
 
188
signal BFMA1o11I: Std_lOGIc_vECTor(2 downto 0);
189
 
190
signal BFMA1l11I: STd_loGIC_veCTOr(2 downto 0);
191
 
192
signal BFMA1i11I: STD_loGIC_vecTOr(15 downto 0);
193
 
194
signal BFMA1OOO0: stD_LogiC;
195
 
196
signal BFMA1lOO0: Std_LOGic;
197
 
198
signal BFMA1iOO0: stD_LogiC;
199
 
200
signal BFMA1olo0: STD_logIC;
201
 
202
signal BFMA1LLO0: STd_loGIC;
203
 
204
signal BFMA1ILo0: STD_loGIC;
205
 
206
signal BFMA1oio0: std_LOgic;
207
 
208
signal BFMA1lIO0: std_Logic;
209
 
210
signal BFMA1iiO0: std_LOgic_VEctoR(31 downto 0);
211
 
212
signal BFMA1o0O0: STD_logIC_vecTOR(31 downto 0);
213
 
214
signal BFMA1l0o0: STD_loGIC_veCTOr(31 downto 0);
215
 
216
signal BFMA1I0O0: sTD_logIC_vecTOR(31 downto 0);
217
 
218
signal BFMA1O1o0: Std_loGIC_veCTOr(31 downto 0);
219
 
220
signal BFMA1L1o0: std_LOgic_VEctoR(31 downto 0);
221
 
222
signal BFMA1I1o0: sTD_logiC_vecTOR(31 downto 0);
223
 
224
signal BFMA1Ool0: stD_LogiC_VectOR(31 downto 0);
225
 
226
signal BFMA1lol0: INTeger;
227
 
228
signal BFMA1iOL0: std_LOGic;
229
 
230
signal BFMA1OLl0: stD_logiC;
231
 
232
signal BFMA1LLL0: STD_loGIC_vecTOr(31 downto 0);
233
 
234
signal BFMA1ILl0: stD_LogiC_VectOR(31 downto 0);
235
 
236
signal BFMA1oil0: INtegeR;
237
 
238
signal BFMA1lil0: Std_lOGIc;
239
 
240
signal BFMA1iIL0: std_LOGic;
241
 
242
signal BFMA1O0L0: std_LOGic;
243
 
244
signal BFMA1L0l0: std_LOgic;
245
 
246
signal BFMA1I0L0: std_Logic;
247
 
248
signal BFMA1O1L0: Std_LOGIc_vECTor(31 downto 0);
249
 
250
signal BFMA1L1l0: std_LOGic_vECtor(31 downto 0);
251
 
252
signal BFMA1I1l0: STD_logIC_vecTOR(31 downto 0);
253
 
254
signal BFMA1Ooi0: Std_lOGIc_veCTor(31 downto 0);
255
 
256
signal BFMA1LOi0: Std_lOGIc_vECTor(31 downto 0);
257
 
258
signal BFMA1IOI0: STD_logIC_vecTOr(31 downto 0);
259
 
260
signal BFMA1olI0: std_LOGic;
261
 
262
signal BFMA1Lli0: stD_logiC;
263
 
264
signal DebuG: INTeger;
265
 
266
signal BFMA1ili0: INTeger;
267
 
268
signal BFMA1oii0: INTeger;
269
 
270
signal BFMA1LII0: stD_logiC := '0';
271
 
272
signal BFMA1iiI0: std_Logic_VectoR(31 downto 0);
273
 
274
signal BFMA1o0I0: stRINg(1 to 80);
275
 
276
signal BFMA1l0i0: std_LOGic;
277
 
278
signal BFMA1i0i0: sTD_logIC;
279
 
280
signal BFMA1O1i0: BOoleaN;
281
 
282
signal BFMA1L1I0: BOOleaN;
283
 
284
signal BFMA1i1I0: bOOLean;
285
 
286
signal BFMA1oo00: bOOLean;
287
 
288
constant BFMA1Lo00: Std_LOGIc_vECTor(31 downto 0) := ( others => '0');
289
 
290
constant BFMA1iO00: STD_logIC_vecTOr(255 downto 0) := ( others => '0');
291
 
292
constant BFMA1ol00: tIME := tpd*1 Ns;
293
 
294
begin
295
BFMA1io1I <= SYsclk;
296
BFMA1i10I:
297
process (BFMA1iO1I,sySRSTn)
298
file BFMA1ll00: teXT;
299
file BFMA1IL00: texT;
300
subtype BFMA1oi00 is sTRIng(1 to 256);
301
type BFMA1LI00 is (BFMA1II00,BFMA1o000);
302
type BFMA1l000 is array (intEGEr range <> ) of BFMA1oi00;
303
variable L: liNE;
304
variable BFMA1i000: File_OPen_STAtus;
305
variable BFMA1O100: boolEAN;
306
variable BFMA1OLli: inteGER_arRAY(0 to mAX_instRUCtioNS-1);
307
variable BFMA1L100: BFMA1O11l(0 to max_INStruCTIons-1);
308
variable BFMA1ioLI: InteGER_arRAY(0 to Max_iNSTrucTIOns-1) := ( others => 0);
309
variable BFMA1I100: iNTEger_ARRay(0 to MAX_staCK-1);
310
variable BFMA1oo10: inteGER_arRAY(0 to 4);
311
variable BFMA1lO10: INtegeR;
312
variable BFMA1loLI: inTEGer;
313
variable BFMA1io10: IntegER;
314
variable BFMA1ol10: intEGEr;
315
variable BFMA1ll10: INtegeR;
316
variable BFMA1IL10: InteGER;
317
variable BFMA1Oi10: std_LOgic_VEctoR(31 downto 0);
318
variable BFMA1li10: inteGER range 0 to 3;
319
variable BFMA1II10: INtegeR;
320
variable BFMA1O010: InteGER;
321
variable BFMA1l010: INtegeR;
322
variable BFMA1i010: INtegeR;
323
variable BFMA1O110: inTEGer;
324
variable BFMA1l110: INtegER;
325
variable BFMA1i110: std_LOGic_VECtor(2 downto 0);
326
variable BFMA1OOO1: STD_logIC_veCTOr(31 downto 0);
327
variable BFMA1lOO1: STD_logIC_veCTOr(31 downto 0);
328
variable BFMA1ioo1: std_LOgic_VEctoR(31 downto 0);
329
variable BFMA1Olo1: booLEAn;
330
variable BFMA1llo1: bOOLean;
331
variable BFMA1ilO1: BOoleaN;
332
variable BFMA1oio1: bOOLean;
333
variable BFMA1lIO1: BOoleaN;
334
variable BFMA1IIo1: BOoleAN;
335
variable BFMA1o0O1: boOLEan;
336
variable BFMA1l0o1: BOoleAN;
337
variable BFMA1I0o1: booLEAn;
338
variable BFMA1o1o1: BoolEAN;
339
variable BFMA1l1o1: boolEAN;
340
variable BFMA1I1o1: inTEGEr;
341
variable BFMA1Ool1: inteGER;
342
variable BFMA1lOL1: inTEGer;
343
variable BFMA1oo0I: IntegER;
344
variable BFMA1I0ii: iNTEGer;
345
variable BFMA1lL0I: IntegER;
346
variable X: intEGEr;
347
variable Y: inTEGer;
348
variable V: inteGER;
349
variable BFMA1iO0I: STrinG(1 to 256);
350
variable BFMA1iol1: StrinG(1 to 256);
351
variable BFMA1olL1: STring(1 to 256);
352
variable BFMA1Lll1: inTEGer;
353
variable BFMA1ILl1: inTEGEr;
354
variable BFMA1oiL1: INtegeR;
355
variable BFMA1LIL1: intEGEr;
356
variable BFMA1IIL1: INtegER_arrAY(0 to 8191);
357
variable BFMA1o0l1: stRINg(1 to 8);
358
variable BFMA1L0l1: BOOlean;
359
variable BFMA1i0L1: boOLEan;
360
variable BFMA1o1L1: CharACTEr;
361
variable BFMA1L1L1: inTEGer;
362
variable BFMA1i1L1: IntegER;
363
variable BFMA1OOI1: inteGEr;
364
variable BFMA1lOI1: INtegeR;
365
variable BFMA1IOi1: intEGEr;
366
variable BFMA1oLI1: INtegeR;
367
variable BFMA1Lli1: INTegeR;
368
variable BFMA1l1II: inTEGer;
369
variable BFMA1ili1: INtegER;
370
variable BFMA1oii1: INTEger;
371
variable BFMA1liI1: INTeger;
372
variable BFMA1Iii1: IntegER;
373
variable BFMA1o0i1: intEGEr := 0;
374
variable BFMA1l0I1: INtegeR := 0;
375
variable BFMA1i0i1: INtegER;
376
variable BFMA1O1i1: IntegER;
377
variable exP: STD_loGIC_vecTOr(31 downto 0);
378
variable BFMA1L1I1: STd_loGIC_vecTOr(31 downto 0);
379
variable BFMA1i1I1: bOOLean;
380
variable BFMA1oo01: BOOlean;
381
variable BFMA1LO01: boolEAN;
382
variable BFMA1IO01: BOoleaN;
383
variable BFMA1ol01: BFMA1LI00;
384
variable BFMA1lL01: iNTEger := 0;
385
variable BFMA1iL01: sTRIng(1 to 10);
386
variable BFMA1OI01: std_LOgic;
387
variable BFMA1LI01: Std_lOGIc_vECTor(3 downto 0);
388
variable BFMA1iI01: STD_logIC_vecTOr(2 downto 0);
389
variable BFMA1o001: iNTEger;
390
variable BFMA1l001: BOOLean;
391
variable BFMA1i001: booLEAn;
392
variable BFMA1o101: BFMA1L000(0 to 100);
393
variable BFMA1L101: INtegeR := 0;
394
variable BFMA1i101: intEGEr := 65536;
395
variable BFMA1oO11: INTeger range 0 to 3;
396
variable BFMA1Lo11: intEGEr range 0 to 32;
397
variable BFMA1IO11: intEGEr range 0 to 65536;
398
variable BFMA1oL11: BOOlean;
399
variable BFMA1LL11: INTegeR;
400
variable BFMA1il11: InteGER;
401
variable BFMA1oi11: booLEAn;
402
variable BFMA1LI11: booleAN;
403
variable BFMA1II11: BOoleAN;
404
variable BFMA1o011: InteGER;
405
variable BFMA1l011: BOOlean;
406
variable BFMA1i011: BOoleaN;
407
variable BFMA1O111: boolEAN;
408
variable BFMA1L111: BOoleaN;
409
variable BFMA1i111: BooleAN;
410
variable BFMA1oOOOl: iNTEger;
411
variable BFMA1lOOOl: IntegER;
412
variable BFMA1Ioool: intEGEr;
413
variable BFMA1OLool: INTeger;
414
variable BFMA1LLool: INTEger;
415
variable BFMA1iloOL: inTEGer;
416
variable BFMA1OIool: INTegeR := 0;
417
variable BFMA1LIOol: std_LOGic;
418
variable BFMA1IIOol: Std_lOGIc_vECTor(1 downto 0);
419
variable BFMA1o0oOL: STD_logIC_vecTOR(2 downto 0);
420
variable BFMA1l0OOl: STD_loGIC;
421
variable BFMA1i0ooL: STD_logIC_veCTOr(3 downto 0);
422
variable BFMA1O1Ool: INTeger := 0;
423
variable BFMA1l1oOL: iNTEger := 0;
424
variable BFMA1i1oOL: inteGER_arrAY(0 to 15);
425
variable BFMA1oolOL: intEGEr;
426
variable BFMA1LOLol: intEGEr_arRAY(0 to 255);
427
variable BFMA1iOLOl: INTegeR range 0 to 256;
428
variable BFMA1olLOL: inteGER range 0 to 256;
429
variable BFMA1llLOL: bOOLean_ARRay(1 to 255);
430
variable BFMA1ilLOL: InteGER range 0 to 256;
431
variable BFMA1oilOL: inTEGer;
432
type BFMA1liLOL is (BFMA1iILOl,BFMA1O0lol,ActiVE,BFMA1l0LOl,BFMA1i0LOl,BFMA1O1Lol);
433
variable BFMA1l1loL: INTegeR;
434
variable BFMA1i1LOL: inteGER;
435
variable BFMA1ooiOL: inteGER;
436
variable BFMA1Loiol: INtegeR;
437
variable BFMA1ioioL: intEGEr;
438
variable BFMA1OLIol: BFMA1LIlol;
439
variable BFMA1llIOL: InteGER_arrAY(0 to Max_MEMTest-1);
440
variable BFMA1ilIOL: intEGEr;
441
variable BFMA1oIIOl: iNTEger;
442
variable BFMA1Liiol: inTEGer;
443
variable BFMA1iiIOL: inteGER;
444
variable BFMA1O0iol: boOLEan;
445
variable BFMA1l0iOL: intEGEr;
446
variable BFMA1i0iOL: inTEGer;
447
variable BFMA1O1Iol: IntegER;
448
variable BFMA1l1IOL: boOLEan;
449
variable BFMA1i1ioL: booLEAn;
450
variable BFMA1OO0ol: BOoleAN;
451
variable BFMA1LO0ol: BoolEAN;
452
variable BFMA1iO0Ol: BOoleaN;
453
variable BFMA1ol0oL: iNTEger;
454
variable BFMA1lL0Ol: INtegER;
455
impure function BFMA1iL0Ol(BFMA1oi0OL: BooleAN;
456
X: inTEGer)
457
return iNTEger is
458
variable Y: inteGER;
459
variable BFMA1li0oL: iNTEger;
460
variable BFMA1II0ol: iNTEGer;
461
variable BFMA1O00ol: intEGEr;
462
variable BFMA1L00ol: INtegeR;
463
variable BFMA1i00oL: INTegeR;
464
variable BFMA1lIOI: sTD_logiC_VectOR(31 downto 0);
465
variable BFMA1O10ol: inTEGer;
466
begin
467
if BFMA1oI0Ol then
468
BFMA1liOI := TO_slv32(X);
469
BFMA1LI0ol := to_iNT_unsIGned(BFMA1liOI(30 downto 16));
470
BFMA1ii0oL := to_INT_unsIGned(BFMA1LIoi(14 downto 13));
471
BFMA1o00ol := To_inT_UnsiGNEd(BFMA1lioi(12 downto 0));
472
BFMA1l00OL := to_iNT_unsIGNed(BFMA1LIoi(12 downto 8));
473
BFMA1I00ol := to_INT_unsIGned(BFMA1lioI(7 downto 0));
474
BFMA1O10oL := 0;
475
if BFMA1LIOi(15) = '1' then
476
BFMA1O10oL := BFMA1iL0Ol(trUE,
477
BFMA1li0oL);
478
end if;
479
case BFMA1ii0OL is
480
when 3 =>
481
case BFMA1l00OL is
482
when BFMA1OL0l =>
483
case BFMA1I00oL is
484
when BFMA1O00l =>
485
y := BFMA1OLI1;
486
when BFMA1L00l =>
487
y := (now/1 NS);
488
when BFMA1I00l =>
489
Y := DEBug;
490
when BFMA1O10l =>
491
Y := BFMA1o110;
492
when BFMA1L10l =>
493
y := BFMA1LL01;
494
when BFMA1I10l =>
495
Y := BFMA1oiLOL-1;
496
when BFMA1Oo1l =>
497
Y := BFMA1o1OOl;
498
when BFMA1LO1l =>
499
y := BFMA1L1Ool;
500
when others =>
501
assert FAlse report "Illegal Parameter P0" severity faiLURe;
502
end case;
503
when BFMA1LL0l =>
504
case BFMA1i00OL is
505
when 0 =>
506
Y := argVALue0;
507
when 1 =>
508
y := argVALue1;
509
when 2 =>
510
y := ArgvaLUE2;
511
when 3 =>
512
Y := aRGValuE3;
513
when 4 =>
514
y := argvALUe4;
515
when 5 =>
516
Y := arGVAlue5;
517
when 6 =>
518
y := arGVAlue6;
519
when 7 =>
520
Y := aRGValue7;
521
when 8 =>
522
Y := ArgvaLUE8;
523
when 9 =>
524
y := argvALUe9;
525
when 10 =>
526
Y := argvALUe10;
527
when 11 =>
528
Y := ARGValuE11;
529
when 12 =>
530
y := ARgvalUE12;
531
when 13 =>
532
y := ARgvalUE13;
533
when 14 =>
534
y := arGVAlue14;
535
when 15 =>
536
Y := argVALue15;
537
when 16 =>
538
Y := ARGvalUE16;
539
when 17 =>
540
Y := ARgvalUE17;
541
when 18 =>
542
y := ARGvalUE18;
543
when 19 =>
544
Y := ARgvalUE19;
545
when 20 =>
546
y := aRGValuE20;
547
when 21 =>
548
Y := argVALue21;
549
when 22 =>
550
y := argvALUe22;
551
when 23 =>
552
Y := aRGVAlue23;
553
when 24 =>
554
y := ArgvALUe24;
555
when 25 =>
556
Y := ArgvaLUE25;
557
when 26 =>
558
Y := ArgvaLUE26;
559
when 27 =>
560
Y := arGVAlue27;
561
when 28 =>
562
y := argVALue28;
563
when 29 =>
564
y := arGVAlue29;
565
when 30 =>
566
y := argvALUe30;
567
when 31 =>
568
Y := ArgvaLUE31;
569
when 32 =>
570
y := ARGvaluE32;
571
when 33 =>
572
Y := ArgvaLUE33;
573
when 34 =>
574
Y := arGVALue34;
575
when 35 =>
576
y := argVALue35;
577
when 36 =>
578
y := argVALue36;
579
when 37 =>
580
y := arGVAlue37;
581
when 38 =>
582
y := argVALue38;
583
when 39 =>
584
Y := argVALue39;
585
when 40 =>
586
y := ArgvALUe40;
587
when 41 =>
588
Y := argvALUe41;
589
when 42 =>
590
Y := argvALUe42;
591
when 43 =>
592
y := argvALUe43;
593
when 44 =>
594
y := aRGValue44;
595
when 45 =>
596
Y := ARGvaluE45;
597
when 46 =>
598
y := argvALUe46;
599
when 47 =>
600
y := argvaLUe47;
601
when 48 =>
602
Y := ARGvalUE48;
603
when 49 =>
604
Y := ARGvaluE49;
605
when 50 =>
606
y := argvALUe50;
607
when 51 =>
608
Y := ARGvaluE51;
609
when 52 =>
610
y := arGVAlue52;
611
when 53 =>
612
y := ArgvaLUE53;
613
when 54 =>
614
Y := ArgvALUE54;
615
when 55 =>
616
y := ArgvaLUE55;
617
when 56 =>
618
Y := ArgvALUE56;
619
when 57 =>
620
Y := ArgvaLUE57;
621
when 58 =>
622
Y := argVALue58;
623
when 59 =>
624
Y := arGVAlue59;
625
when 60 =>
626
y := argvALUe60;
627
when 61 =>
628
Y := aRGValue61;
629
when 62 =>
630
Y := arGVAlue62;
631
when 63 =>
632
y := ArgvaLUE63;
633
when 64 =>
634
Y := argVALue64;
635
when 65 =>
636
y := aRGValuE65;
637
when 66 =>
638
Y := ARGvalUE66;
639
when 67 =>
640
y := arGVAlue67;
641
when 68 =>
642
Y := aRGValue68;
643
when 69 =>
644
Y := ArgvALUe69;
645
when 70 =>
646
y := ARgvalUE70;
647
when 71 =>
648
Y := ArgvaLUE71;
649
when 72 =>
650
y := argVALue72;
651
when 73 =>
652
y := ArgvALUE73;
653
when 74 =>
654
Y := ArgvALUe74;
655
when 75 =>
656
y := ARGvaluE75;
657
when 76 =>
658
y := ARGvaluE76;
659
when 77 =>
660
Y := argVALUe77;
661
when 78 =>
662
y := argVALue78;
663
when 79 =>
664
y := ARGvalUE79;
665
when 80 =>
666
y := ARGvaluE80;
667
when 81 =>
668
Y := ARgvaLUE81;
669
when 82 =>
670
y := argvALUe82;
671
when 83 =>
672
Y := ArgvALUe83;
673
when 84 =>
674
y := aRGValue84;
675
when 85 =>
676
y := argVALue85;
677
when 86 =>
678
y := arGVALue86;
679
when 87 =>
680
Y := argvALUe87;
681
when 88 =>
682
Y := ArgvALUE88;
683
when 89 =>
684
Y := argvALUe89;
685
when 90 =>
686
Y := arGVAlue90;
687
when 91 =>
688
y := aRGValue91;
689
when 92 =>
690
y := arGVAlue92;
691
when 93 =>
692
Y := argVALue93;
693
when 94 =>
694
Y := ArgvalUE94;
695
when 95 =>
696
y := argVALue95;
697
when 96 =>
698
Y := arGVAlue96;
699
when 97 =>
700
Y := ArgvALUe97;
701
when 98 =>
702
Y := ARgvalUE98;
703
when 99 =>
704
y := argVALue99;
705
when others =>
706
assert FAlse report "Illegal Parameter P1" severity fAILure;
707
end case;
708
when BFMA1iL0L =>
709
BFMA1LLool := BFMA1O0Li(BFMA1llOOL);
710
Y := BFMA1l0li(BFMA1llOOL,
711
BFMA1i00oL);
712
when BFMA1oI0L =>
713
BFMA1ILool := BFMA1lloOL;
714
BFMA1llOOL := BFMA1O0Li(BFMA1LLOol);
715
y := BFMA1l0lI(BFMA1LLool,
716
BFMA1i00OL);
717
when BFMA1lI0L =>
718
BFMA1llooL := BFMA1ILool;
719
BFMA1llOOL := BFMA1o0li(BFMA1Llool);
720
y := BFMA1L0li(BFMA1llooL,
721
BFMA1i00oL);
722
when others =>
723
assert FalsE report "Illegal Parameter P2" severity fAILure;
724
end case;
725
when 2 =>
726
y := BFMA1i100(BFMA1lL10-BFMA1o00Ol+BFMA1o10oL);
727
when 1 =>
728
y := BFMA1i100(BFMA1o00OL+BFMA1O10ol);
729
when 0 =>
730
Y := BFMA1o00OL;
731
when others =>
732
assert falSE report "Illegal Parameter P3" severity fAILure;
733
end case;
734
else
735
y := x;
736
end if;
737
return (Y);
738
end BFMA1iL0Ol;
739
impure function BFMA1l10oL(X: inTEGer)
740
return INTegeR is
741
variable BFMA1I10ol: iNTEger;
742
variable BFMA1LI0ol: inTEGer;
743
variable BFMA1II0ol: inTEGer;
744
variable BFMA1O00ol: inTEGer;
745
variable BFMA1l00OL: INTeger;
746
variable BFMA1I00ol: INTeger;
747
variable BFMA1LIoi: std_LOGic_vECtor(31 downto 0);
748
variable BFMA1O10ol: IntegER;
749
begin
750
BFMA1LIoi := To_sLV32(x);
751
BFMA1lI0Ol := tO_Int_UNSigneD(BFMA1LIoi(30 downto 16));
752
BFMA1iI0ol := TO_int_UNsigNED(BFMA1lIOI(14 downto 13));
753
BFMA1O00ol := to_INt_uNSIgneD(BFMA1liOI(12 downto 0));
754
BFMA1l00ol := TO_int_UNsigNED(BFMA1Lioi(12 downto 8));
755
BFMA1i00OL := TO_int_UnsigNEd(BFMA1liOI(7 downto 0));
756
BFMA1O10ol := 0;
757
if BFMA1LIOi(15) = '1' then
758
BFMA1O10ol := BFMA1IL0ol(True,
759
BFMA1li0OL);
760
end if;
761
case BFMA1iI0Ol is
762
when 3 =>
763
assert FalsE report "$Variables not allowed" severity failURE;
764
when 2 =>
765
BFMA1i10Ol := BFMA1LL10-BFMA1O00ol+BFMA1o10OL;
766
when 1 =>
767
BFMA1i10OL := BFMA1O00ol+BFMA1O10ol;
768
when 0 =>
769
assert FAlse report "Immediate data not allowed" severity fAILure;
770
when others =>
771
assert falsE report "Illegal Parameter P3" severity failURE;
772
end case;
773
return (BFMA1i10OL);
774
end BFMA1L10ol;
775
begin
776
if sysRSTn = '0' then
777
BFMA1LII0 <= '0';
778
debUG <= deBUGleveL;
779
BFMA1l01I <= ( others => '0');
780
BFMA1LL1i <= ( others => '0');
781
BFMA1il1I <= '0';
782
BFMA1OI1i <= ( others => '0');
783
BFMA1O11i <= ( others => '0');
784
BFMA1LI1i <= ( others => '0');
785
BFMA1II1i <= '0';
786
BFMA1iiI0 <= ( others => '0');
787
Instr_OUt <= ( others => '0');
788
BFMA1lOO0 <= '0';
789
BFMA1iOO0 <= '0';
790
BFMA1IIO0 <= ( others => '0');
791
BFMA1o0o0 <= ( others => '0');
792
BFMA1l0o0 <= ( others => '0');
793
BFMA1l0l0 <= '0';
794
BFMA1lil0 <= '0';
795
BFMA1iil0 <= '0';
796
BFMA1i1l0 <= ( others => '0');
797
BFMA1l1L0 <= ( others => '0');
798
BFMA1l0i0 <= '0';
799
BFMA1o0i0(1 to 8) <= "UNKNOWN"&NUL;
800
BFMA1oLO0 <= '0';
801
BFMA1i0O0 <= ( others => '0');
802
BFMA1o1o0 <= ( others => '0');
803
BFMA1oii0 <= 0;
804
BFMA1I01i <= ( others => '0');
805
BFMA1oll0 <= '0';
806
BFMA1llL0 <= ( others => '0');
807
BFMA1Ill0 <= ( others => '0');
808
BFMA1oIL0 <= 0;
809
BFMA1I0I0 <= '0';
810
BFMA1OL1i <= '0';
811
CON_busY <= '0';
812
BFMA1oII0 <= 0;
813
BFMA1Llo0 <= '0';
814
BFMA1iLO0 <= '0';
815
BFMA1O1I0 <= falsE;
816
BFMA1L1i0 <= FAlse;
817
BFMA1i1I0 <= FAlse;
818
BFMA1Oo00 <= FAlse;
819
BFMA1OL01 := BFMA1II00;
820
BFMA1O100 := falSE;
821
BFMA1lOLI := 0;
822
BFMA1O1O1 := FALse;
823
BFMA1iiI1 := 0;
824
BFMA1olO1 := fALSe;
825
BFMA1O0o1 := falsE;
826
BFMA1lio1 := falsE;
827
BFMA1llo1 := faLSE;
828
BFMA1ILo1 := FALse;
829
BFMA1oiO1 := falSE;
830
BFMA1IIO1 := FAlse;
831
BFMA1l0O1 := falSE;
832
BFMA1Ll10 := 0;
833
BFMA1lII1 := 0;
834
BFMA1L110 := 512;
835
BFMA1L001 := FAlse;
836
BFMA1ll01 := 0;
837
BFMA1io01 := FALse;
838
BFMA1OI01 := '0';
839
BFMA1li01 := "0011";
840
BFMA1ii01 := "001";
841
BFMA1l0L1 := falsE;
842
BFMA1OO11 := 2;
843
BFMA1lo11 := 4;
844
BFMA1io11 := 0;
845
BFMA1OL11 := False;
846
BFMA1iL11 := 0;
847
BFMA1lL0Ol := 0;
848
BFMA1OLI1 := 0;
849
BFMA1oi11 := falsE;
850
BFMA1o011 := 0;
851
BFMA1i011 := FALse;
852
BFMA1o111 := False;
853
BFMA1L111 := FALse;
854
BFMA1i111 := fALSE;
855
BFMA1Oll1(1) := Nul;
856
BFMA1L011 := falSE;
857
BFMA1olooL := 0;
858
BFMA1ILool := 1;
859
BFMA1lloOL := 1;
860
BFMA1OIOol := 0;
861
BFMA1ooLOL := 0;
862
BFMA1ioloL := 0;
863
BFMA1olLOL := 0;
864
BFMA1illoL := 0;
865
BFMA1LL11 := 0;
866
BFMA1oiloL := 0;
867
elsif BFMA1io1I = '1' and BFMA1Io1i'EVENt then
868
BFMA1olI0 <= CON_rd;
869
BFMA1Lli0 <= CON_wr;
870
BFMA1LIL0 <= '0';
871
BFMA1IIL0 <= '0';
872
BFMA1L0l0 <= '0';
873
BFMA1i0l0 <= '0';
874
BFMA1i0O1 := falsE;
875
if not BFMA1o100 then
876
PRIntf(" ");
877
PrinTF("###########################################################################");
878
pRINtf("AMBA BFM Model");
879
PRIntf("Version %s  %s",
880
Fmt(BFMA1Oo1i)&fmT(BFMA1lo1I));
881
PrintF(" ");
882
PrintF("Opening BFM Script file %s",
883
FMT(VectFILe));
884
if not BFMA1o100 and opmODE /= 2 then
885
File_OPen(BFMA1I000,
886
BFMA1ll00,
887
vECTfile);
888
if not (BFMA1i000 = OPEn_ok) then
889
assert False report "FAILED to load script file "&vecTFIle severity faILUre;
890
else
891
V := 0;
892
BFMA1I0l1 := falsE;
893
while not BFMA1I0l1
894
loop
895
REAdlinE(BFMA1LL00,
896
l);
897
for BFMA1Ll0i in 1 to 8
898
loop
899
rEAD(l,
900
BFMA1O1L1);
901
BFMA1o0L1(BFMA1lL0I) := BFMA1O1L1;
902
end loop;
903
BFMA1IOli(v) := tO_InteGER(TO_dwoRD_sigNED(BFMA1O0L1));
904
V := V+1;
905
BFMA1i0l1 := enDFILe(BFMA1Ll00);
906
end loop;
907
fILE_cloSE(BFMA1LL00);
908
end if;
909
BFMA1o100 := tRUE;
910
BFMA1LO10 := v;
911
BFMA1ooooL := BFMA1IOli(0) mod 65536;
912
BFMA1ioOOL := BFMA1iolI(0)/65536;
913
priNTF("Read %d Vectors - Compiler Version %d.%d",
914
fmT(BFMA1LO10)&fmt(BFMA1ioOOL)&fmt(BFMA1ooooL));
915
if BFMA1ioOOL /= BFMA1o then
916
assert FAlse report "Incorrect vectors file format for this BFM"&vectFILe severity FAilurE;
917
end if;
918
BFMA1Loli := BFMA1IOli(1);
919
BFMA1ol10 := BFMA1IOli(2);
920
BFMA1Ll10 := BFMA1IOLi(3);
921
BFMA1i100(BFMA1LL10) := 0;
922
BFMA1Ll10 := BFMA1LL10+1;
923
if BFMA1LOli = 0 then
924
assert FAlse report "BFM Compiler reported errors" severity FailuRE;
925
end if;
926
PrinTF("BFM:Filenames includes in Vectors");
927
BFMA1OI10 := TO_slv32(BFMA1IOLi(BFMA1oL10));
928
BFMA1ii10 := BFMA1ioLI(BFMA1oL10) rem 256;
929
while BFMA1iI10 = BFMA1L00
930
loop
931
BFMA1i010 := BFMA1Llli(BFMA1Ioli(BFMA1ol10+1));
932
BFMA1olLI := ( others => 0);
933
BFMA1iO0I := BFMA1OOLi(BFMA1OL10,
934
BFMA1IOLI(BFMA1oL10 to BFMA1ol10+BFMA1I010-1),
935
BFMA1OLLi);
936
pRINtf("  %s",
937
FMT(BFMA1IO0i));
938
for BFMA1i0II in 1 to 256
939
loop
940
BFMA1o101(BFMA1l101)(BFMA1i0ii) := BFMA1iO0I(BFMA1i0ii);
941
end loop;
942
BFMA1L101 := BFMA1l101+1;
943
BFMA1Ol10 := BFMA1OL10+BFMA1I010;
944
BFMA1oi10 := TO_slv32(BFMA1IOLi(BFMA1oL10));
945
BFMA1Ii10 := BFMA1IOLi(BFMA1OL10) rem 256;
946
end loop;
947
BFMA1i101 := 65536;
948
if BFMA1l101 > 1 then
949
BFMA1I101 := 32768;
950
end if;
951
if BFMA1l101 > 2 then
952
BFMA1i101 := 16384;
953
end if;
954
if BFMA1L101 > 4 then
955
BFMA1I101 := 8912;
956
end if;
957
if BFMA1l101 > 8 then
958
BFMA1I101 := 4096;
959
end if;
960
if BFMA1L101 > 16 then
961
BFMA1i101 := 2048;
962
end if;
963
if BFMA1L101 > 32 then
964
BFMA1I101 := 1024;
965
end if;
966
BFMA1oI11 := (opMODe = 0);
967
end if;
968
end if;
969
if OPmodE = 2 and not BFMA1o100 then
970
BFMA1I101 := 65536;
971
BFMA1O100 := truE;
972
BFMA1oi11 := FALse;
973
BFMA1LL10 := 0;
974
BFMA1I100(BFMA1ll10) := 0;
975
BFMA1LL10 := BFMA1LL10+1;
976
end if;
977
if BFMA1Oiool <= 1 then
978
BFMA1ol1I <= '1';
979
else
980
BFMA1OIool := BFMA1oioOL-1;
981
end if;
982
case BFMA1OL01 is
983
when BFMA1II00 =>
984
if HresP = '1' and hrEADY = '1' then
985
assert fALSe report "BFM: HRESP Signaling Protocol Error T2" severity ERror;
986
BFMA1LL01 := BFMA1Ll01+1;
987
end if;
988
if hreSP = '1' and HreaDY = '0' then
989
BFMA1ol01 := BFMA1O000;
990
end if;
991
when BFMA1o000 =>
992
if HResp = '0' or HreadY = '0' then
993
assert faLSE report "BFM: HRESP Signaling Protocol Error T3" severity ERRor;
994
BFMA1lL01 := BFMA1ll01+1;
995
end if;
996
if HresP = '1' and HReadY = '1' then
997
BFMA1Ol01 := BFMA1Ii00;
998
end if;
999
case BFMA1Lii1 is
1000
when 0 =>
1001
assert FALse report "BFM: Unexpected HRESP Signaling Occured" severity errOR;
1002
BFMA1Ll01 := BFMA1LL01+1;
1003
when 1 =>
1004
BFMA1IO01 := truE;
1005
when others =>
1006
assert False report "BFM: HRESP mode is not correctly set" severity ERror;
1007
BFMA1ll01 := BFMA1ll01+1;
1008
end case;
1009
end case;
1010
if opMODe > 0 then
1011
if COn_wr = '1' and (BFMA1LLI0 = '0' or con_SPulsE = 1) then
1012
BFMA1oo0i := BFMA1OIoi(CON_addR);
1013
case BFMA1oo0i is
1014
when 0 =>
1015
BFMA1OI11 := (BFMA1loi0(0) = '1');
1016
BFMA1Li11 := (BFMA1LOI0(1) = '1');
1017
BFMA1l0l1 := False;
1018
if BFMA1oi11 and not BFMA1Li11 then
1019
BFMA1I100(BFMA1ll10) := 0;
1020
BFMA1ll10 := BFMA1lL10+1;
1021
end if;
1022
if deBUG >= 2 and BFMA1oI11
1023
and not BFMA1Li11 then
1024
prINTf("BFM: Starting script at %08x (%d parameters)",
1025
fmT(BFMA1loLI)&FMt(BFMA1ooloL));
1026
end if;
1027
if Debug >= 2 and BFMA1oi11
1028
and BFMA1li11 then
1029
prINTf("BFM: Starting instruction at %08x",
1030
fmt(BFMA1lOLI));
1031
end if;
1032
if BFMA1Oi11 then
1033
if BFMA1ooLOL > 0 then
1034
for BFMA1i0II in 0 to BFMA1OOlol-1
1035
loop
1036
BFMA1I100(BFMA1ll10) := BFMA1i1oOL(BFMA1I0ii);
1037
BFMA1lL10 := BFMA1lL10+1;
1038
end loop;
1039
BFMA1oolOL := 0;
1040
end if;
1041
BFMA1iolOL := 0;
1042
BFMA1olloL := 0;
1043
end if;
1044
when 1 =>
1045
BFMA1LOLi := TO_int_UNsigNED(BFMA1LOI0);
1046
when 2 =>
1047
BFMA1I1Ool(BFMA1oOLOl) := to_iNT_sigNED(BFMA1lOI0);
1048
BFMA1OOlol := BFMA1OOlol+1;
1049
when others =>
1050
BFMA1ioLI(BFMA1oo0I) := to_INT_sigNED(BFMA1LOi0);
1051
end case;
1052
end if;
1053
if CON_rd = '1' and (BFMA1OLI0 = '0' or con_SpulsE = 1) then
1054
BFMA1oo0I := BFMA1OIOi(COn_adDR);
1055
case BFMA1OO0i is
1056
when 0 =>
1057
BFMA1iOI0 <= ( others => '0');
1058
BFMA1ioI0(2) <= tO_std_LOGic(BFMA1OI11);
1059
BFMA1IOI0(3) <= to_STd_lOGIc(BFMA1LL01 > 0);
1060
when 1 =>
1061
BFMA1ioi0 <= TO_std_LOgic(to_UNsignED(BFMA1LOli,
1062
32));
1063
when 2 =>
1064
BFMA1ioI0 <= to_STD_logIC(to_UNsigNED(BFMA1olI1,
1065
32));
1066
BFMA1OOLol := 0;
1067
when 3 =>
1068
if BFMA1ioLOL > BFMA1OLLol then
1069
BFMA1ioi0 <= to_STD_logIC(to_UNSIgneD(BFMA1Lolol(BFMA1OLLol),
1070
32));
1071
BFMA1Ollol := BFMA1olloL+1;
1072
else
1073
PrinTF("BFM: Overread Control return stack");
1074
BFMA1IOI0 <= ( others => '0');
1075
end if;
1076
when others =>
1077
BFMA1ioi0 <= to_Std_lOGIc(tO_unsiGNEd(BFMA1IOli(BFMA1oo0I),
1078
32));
1079
end case;
1080
end if;
1081
end if;
1082
BFMA1o0i1 := BFMA1o0i1+1;
1083
BFMA1oiloL := BFMA1oiloL+1;
1084
BFMA1L1iol := TRue;
1085
while BFMA1l1IOl
1086
loop
1087
BFMA1l1IOl := falSE;
1088
if not BFMA1O1O1 and BFMA1oi11 then
1089
BFMA1OI10 := to_SLV32(BFMA1IOLi(BFMA1loLI));
1090
BFMA1lI10 := TO_int_UNSignED(BFMA1OI10(1 downto 0));
1091
BFMA1Ii10 := to_Int_uNSIgneD(BFMA1oi10(7 downto 0));
1092
BFMA1L010 := To_iNT_unsIGNed(BFMA1OI10(15 downto 8));
1093
BFMA1o110 := tO_Int_UNSignED(BFMA1OI10(31 downto 16));
1094
BFMA1LOL1 := BFMA1L110;
1095
BFMA1L0I1 := BFMA1l0I1+1;
1096
BFMA1I010 := 1;
1097
BFMA1o001 := -1;
1098
BFMA1o011 := 0;
1099
ifprINTf((debuG >= 5),
1100
"BFM: Instruction %d Line Number %d Command %d",
1101
fmt(BFMA1loLI)&Fmt(BFMA1O110)&FMt(BFMA1II10));
1102
if BFMA1i111 then
1103
SPRintF(BFMA1IOl1,
1104
"%05t BF %4d %4d %3d",
1105
fmt(BFMA1LOli)&FMt(BFMA1O110)&fmt(BFMA1II10));
1106
WRIte(L,
1107
BFMA1IOL1);
1108
WriteLINe(BFMA1IL00,
1109
L);
1110
end if;
1111
if BFMA1Ii10 >= 100 then
1112
BFMA1O010 := BFMA1II10;
1113
else
1114
BFMA1o010 := 4*(BFMA1Ii10/4);
1115
end if;
1116
if BFMA1II10 /= BFMA1il1 then
1117
BFMA1o0i1 := 0;
1118
end if;
1119
case BFMA1o010 is
1120
when BFMA1iI0
1121
| BFMA1o00
1122
| BFMA1L00
1123
| BFMA1illL =>
1124
BFMA1Oo0i := 8;
1125
when BFMA1o0
1126
| BFMA1L1 =>
1127
BFMA1oo0I := 4+BFMA1IOli(BFMA1LOli+1);
1128
when BFMA1l1i =>
1129
BFMA1oo0I := 3+BFMA1ioLI(BFMA1loLI+2);
1130
when BFMA1o1i =>
1131
BFMA1Oo0i := 3;
1132
when BFMA1oi0 =>
1133
BFMA1OO0i := 2+BFMA1IOli(BFMA1LOLi+1);
1134
when BFMA1oooL =>
1135
BFMA1oO0I := 3+BFMA1IOLi(BFMA1LOli+2);
1136
when BFMA1IIll =>
1137
BFMA1OO0i := 2+BFMA1Ioli(BFMA1loLI+1);
1138
when BFMA1lii =>
1139
BFMA1oO0I := 3+BFMA1ioLI(BFMA1lOLI+1);
1140
when others =>
1141
BFMA1oo0I := 8;
1142
end case;
1143
if BFMA1oO0I > 0 then
1144
for BFMA1I0ii in 0 to BFMA1OO0i-1
1145
loop
1146
if (BFMA1I0Ii >= 1 and BFMA1I0ii <= 8) then
1147
BFMA1OLli(BFMA1i0II) := BFMA1iL0Ol((BFMA1oi10(7+BFMA1i0II) = '1'),
1148
BFMA1IOli(BFMA1loLI+BFMA1I0Ii));
1149
else
1150
BFMA1olli(BFMA1I0ii) := BFMA1Ioli(BFMA1LOli+BFMA1I0Ii);
1151
end if;
1152
BFMA1L100(BFMA1I0Ii) := to_SLV32(BFMA1OLLi(BFMA1i0II));
1153
end loop;
1154
end if;
1155
case BFMA1o010 is
1156
when BFMA1O0ll =>
1157
assert falSE report "BFM Compiler reported an error" severity FailURE;
1158
BFMA1lL01 := BFMA1LL01+1;
1159
when BFMA1L01 =>
1160
BFMA1i010 := 2;
1161
BFMA1l1iOL := True;
1162
BFMA1lOLOl(BFMA1Iolol) := BFMA1OLli(1);
1163
BFMA1ioloL := BFMA1IOlol+1;
1164
IfpriNTF((DEBug >= 2),
1165
"BFM:%d:conifpush %d ",
1166
fmt(BFMA1O110)&fMT(BFMA1Olli(1)));
1167
when BFMA1IOol =>
1168
BFMA1i010 := 2;
1169
BFMA1OL1i <= '0';
1170
BFMA1OIOOl := BFMA1ollI(1);
1171
iFPRintf((debuG >= 2),
1172
"BFM:%d:RESET %d",
1173
fMT(BFMA1o110)&fmt(BFMA1Olli(1)));
1174
when BFMA1OLol =>
1175
BFMA1I010 := 2;
1176
BFMA1liI0 <= BFMA1L100(1)(0);
1177
iFPRintf((dEBUG >= 2),
1178
"BFM:%d:STOPCLK %d ",
1179
fmT(BFMA1o110)&fMT(BFMA1L100(1)(0)));
1180
when BFMA1L10 =>
1181
BFMA1i010 := 2;
1182
BFMA1iII1 := BFMA1OLli(1);
1183
ifPRIntf((Debug >= 2),
1184
"BFM:%d:mode %d (No effect in this version)",
1185
Fmt(BFMA1O110)&FMt(BFMA1Iii1));
1186
when BFMA1I10 =>
1187
BFMA1L1Iol := truE;
1188
BFMA1i010 := 4;
1189
BFMA1Oo0i := BFMA1olLI(1);
1190
x := BFMA1OLLi(2);
1191
y := BFMA1olLI(3);
1192
IFprinTF((DebuG >= 2),
1193
"BFM:%d:setup %d %d %d ",
1194
FMt(BFMA1O110)&fmt(BFMA1oo0I)&FMT(x)&FMT(Y));
1195
case BFMA1OO0i is
1196
when 1 =>
1197
BFMA1i010 := 4;
1198
BFMA1OO11 := X;
1199
BFMA1LO11 := y;
1200
IFprinTF((deBUG >= 2),
1201
"BFM:%d:Setup- Memory Cycle Transfer Size %s %d",
1202
FMT(BFMA1O110)&Fmt(BFMA1ILOi(BFMA1oo11))&fMT(BFMA1lo11));
1203
when 2 =>
1204
BFMA1i010 := 3;
1205
BFMA1OL11 := to_BOOlean(x);
1206
IfpriNTF((DEbug >= 2),
1207
"BFM:%d:Setup- Automatic Flush %d",
1208
FMt(BFMA1O110)&FMT(BFMA1ol11));
1209
when 3 =>
1210
BFMA1I010 := 3;
1211
BFMA1IO11 := X;
1212
IfpriNTF((DebuG >= 2),
1213
"BFM:%d:Setup- XRATE %d",
1214
Fmt(BFMA1o110)&FMT(BFMA1iO11));
1215
when 4 =>
1216
BFMA1I010 := 3;
1217
BFMA1LL11 := X;
1218
ifPRINtf((DEbug >= 2),
1219
"BFM:%d:Setup- Burst Disable %d",
1220
fmt(BFMA1o110)&FMT(BFMA1ll11));
1221
when 5 =>
1222
BFMA1i010 := 3;
1223
BFMA1iL11 := X;
1224
IfprINTf((debUG >= 2),
1225
"BFM:%d:Setup- Alignment %d",
1226
Fmt(BFMA1o110)&fmt(BFMA1IL11));
1227
if BFMA1IL11 = 1 or BFMA1Il11 = 2 then
1228
assert FALse report "BFM: Untested 8 or 16 Bit alignment selected" severity wARNing;
1229
end if;
1230
when 6 =>
1231
BFMA1i010 := 3;
1232
BFMA1Ll0oL := X;
1233
ifPRIntf((Debug >= 2),
1234
"BFM:%d:Setup- End Sim Action %0d",
1235
FMT(BFMA1o110)&FMT(BFMA1ll0OL));
1236
if (BFMA1LL0ol > 4) then
1237
PRintf("BFM: Unexpected End Simulation value (WARNING)");
1238
end if;
1239
when 7 =>
1240
BFMA1i010 := 3;
1241
when others =>
1242
assert faLSE report "BFM Unknown Setup Command" severity fAILure;
1243
end case;
1244
when BFMA1OLll =>
1245
BFMA1l1iOL := truE;
1246
BFMA1I010 := 2;
1247
BFMA1i1I0 <= (BFMA1L100(1)(0) = '1');
1248
BFMA1oO00 <= (BFMA1L100(1)(1) = '1');
1249
BFMA1l1I0 <= (BFMA1l100(1)(2) = '1');
1250
BFMA1O1i0 <= (BFMA1L100(1)(3) = '1');
1251
IfprINTf((dEBUg >= 2),
1252
"BFM:%d:drivex %d ",
1253
fmt(BFMA1O110)&fmt(BFMA1OLli(1)));
1254
when BFMA1ol1 =>
1255
BFMA1l1IOL := TRUe;
1256
BFMA1I010 := 3;
1257
ifpriNTF((debuG >= 2),
1258
"BFM:%d:error %d %d (No effect in this version)",
1259
fMT(BFMA1O110)&FMt(BFMA1OLli(1))&fMT(BFMA1olLI(2)));
1260
when BFMA1LO1 =>
1261
BFMA1l1IOl := true;
1262
BFMA1i010 := 2;
1263
BFMA1LI01 := BFMA1L100(1)(3 downto 0);
1264
ifpRINtf((dEBUg >= 2),
1265
"BFM:%d:prot %d ",
1266
FMT(BFMA1o110)&fMT(BFMA1li01));
1267
when BFMA1IO1 =>
1268
BFMA1l1IOL := true;
1269
BFMA1i010 := 2;
1270
BFMA1oI01 := BFMA1L100(1)(0);
1271
IfprINTf((DebuG >= 2),
1272
"BFM:%d:lock %d ",
1273
fMT(BFMA1O110)&fMT(BFMA1OI01));
1274
when BFMA1LL1 =>
1275
BFMA1L1ioL := trUE;
1276
BFMA1i010 := 2;
1277
BFMA1II01 := BFMA1L100(1)(2 downto 0);
1278
IFPrintF((deBUG >= 2),
1279
"BFM:%d:burst %d ",
1280
fMT(BFMA1O110)&Fmt(BFMA1II01));
1281
when BFMA1Io0 =>
1282
BFMA1I010 := 2;
1283
BFMA1I1o1 := BFMA1OLli(1);
1284
IFprinTF((DEbug >= 2),
1285
"BFM:%d:wait %d  starting at %t ns",
1286
Fmt(BFMA1O110)&fmt(BFMA1i1O1));
1287
BFMA1OLO1 := TRue;
1288
when BFMA1ioll =>
1289
BFMA1i010 := 2;
1290
BFMA1olooL := BFMA1olli(1)*1000+(NOW/1 ns);
1291
ifpRINtf((Debug >= 2),
1292
"BFM:%d:waitus %d  starting at %t ns",
1293
Fmt(BFMA1o110)&fMT(BFMA1Olli(1)));
1294
BFMA1Olo1 := tRUE;
1295
when BFMA1LOLl =>
1296
BFMA1I010 := 2;
1297
BFMA1olooL := BFMA1ollI(1)*1+(Now/1 NS);
1298
IFPrintF((Debug >= 2),
1299
"BFM:%d:waitns %d  starting at %t ns",
1300
fmt(BFMA1o110)&fMT(BFMA1oLLI(1)));
1301
BFMA1OLo1 := true;
1302
when BFMA1IL1 =>
1303
BFMA1I010 := 3;
1304
IFprinTF((deBUG >= 2),
1305
"BFM:%d:checktime %d %d at %t ns ",
1306
fmT(BFMA1o110)&Fmt(BFMA1OLli(1))&fMT(BFMA1oLLI(2)));
1307
BFMA1OLo1 := tRUE;
1308
when BFMA1li1 =>
1309
BFMA1L1Iol := TRue;
1310
BFMA1i010 := 1;
1311
BFMA1oilOL := 1;
1312
ifpRINtf(DEBug >= 2,
1313
"BFM:%d:starttimer at %t ns",
1314
FMt(BFMA1o110));
1315
when BFMA1Ii1 =>
1316
BFMA1I010 := 3;
1317
IFprinTF((debuG >= 2),
1318
"BFM:%d:checktimer %d %d at %t ns ",
1319
fmt(BFMA1O110)&fmt(BFMA1olli(1))&FMt(BFMA1OLLi(2)));
1320
BFMA1OLO1 := tRUE;
1321
when BFMA1i =>
1322
BFMA1I010 := 4;
1323
BFMA1I110 := BFMA1L0Oi(BFMA1li10,
1324
BFMA1OO11);
1325
BFMA1oOO1 := TO_slv32(BFMA1OLli(1)+BFMA1olLI(2));
1326
BFMA1lOO1 := BFMA1l100(3);
1327
IFPrinTF((debuG >= 2),
1328
"BFM:%d:write %c %08x %08x at %t ns",
1329
Fmt(BFMA1o110)&fmt(BFMA1iLOI(BFMA1li10))&fmT(BFMA1Ooo1)&fmT(BFMA1loO1));
1330
BFMA1Lio1 := tRUE;
1331
when BFMA1LLL =>
1332
BFMA1I010 := 5;
1333
BFMA1i110 := BFMA1l0OI(BFMA1LI10,
1334
BFMA1oO11);
1335
BFMA1OOO1 := tO_Slv32(BFMA1olLI(1)+BFMA1oLLI(2));
1336
BFMA1loO1 := BFMA1L100(3);
1337
BFMA1lIOOl := BFMA1L100(4)(0);
1338
BFMA1IIOol := BFMA1L100(4)(5 downto 4);
1339
BFMA1o0oOL := BFMA1L100(4)(10 downto 8);
1340
BFMA1l0oOL := BFMA1l100(4)(12);
1341
BFMA1I0Ool := BFMA1L100(4)(19 downto 16);
1342
ifPRIntf((debUG >= 2),
1343
"BFM:%d:ahbcycle %c %08x %08x %08x at %t ns",
1344
fMT(BFMA1O110)&fmt(BFMA1iLOI(BFMA1li10))&Fmt(BFMA1ooO1)&fmT(BFMA1loO1)&fmt(BFMA1l100(4)));
1345
BFMA1l0O1 := True;
1346
when BFMA1ol =>
1347
BFMA1I010 := 3;
1348
BFMA1i110 := BFMA1l0oI(BFMA1LI10,
1349
BFMA1OO11);
1350
BFMA1Ooo1 := tO_slv32(BFMA1OLLi(1)+BFMA1olli(2));
1351
BFMA1loo1 := ( others => '0');
1352
BFMA1IOo1 := ( others => '0');
1353
ifPRIntf((debuG >= 2),
1354
"BFM:%d:read %c %08x  at %t ns",
1355
FMT(BFMA1O110)&fMT(BFMA1ILoi(BFMA1LI10))&fmt(BFMA1OOo1));
1356
BFMA1Llo1 := True;
1357
when BFMA1olL =>
1358
BFMA1i010 := 4;
1359
BFMA1i110 := BFMA1L0oi(BFMA1LI10,
1360
BFMA1oO11);
1361
BFMA1ooo1 := TO_slv32(BFMA1olli(1)+BFMA1olli(2));
1362
BFMA1loO1 := ( others => '0');
1363
BFMA1IOo1 := ( others => '0');
1364
BFMA1O001 := BFMA1L10ol(BFMA1IOLi(BFMA1loli+3));
1365
ifprINTf((Debug >= 2),
1366
"BFM:%d:readstore %c %08x @%d at %t ns ",
1367
FMt(BFMA1o110)&Fmt(BFMA1iloi(BFMA1li10))&fmT(BFMA1oOO1)&fMT(BFMA1o001));
1368
BFMA1llO1 := tRUE;
1369
BFMA1o0o1 := TRUe;
1370
when BFMA1LL =>
1371
BFMA1I010 := 4;
1372
BFMA1i110 := BFMA1L0oi(BFMA1LI10,
1373
BFMA1OO11);
1374
BFMA1ooo1 := to_SLV32(BFMA1ollI(1)+BFMA1OLli(2));
1375
BFMA1LOo1 := BFMA1L100(3);
1376
BFMA1Ioo1 := ( others => '1');
1377
IFPrintF((deBUG >= 2),
1378
"BFM:%d:readcheck %c %08x %08x at %t ns",
1379
FMT(BFMA1o110)&fmt(BFMA1Iloi(BFMA1LI10))&fMT(BFMA1ooo1)&FMt(BFMA1Loo1));
1380
BFMA1llO1 := TRUe;
1381
when BFMA1il =>
1382
BFMA1I010 := 5;
1383
BFMA1i110 := BFMA1L0oi(BFMA1lI10,
1384
BFMA1OO11);
1385
BFMA1OOo1 := TO_slv32(BFMA1OLLi(1)+BFMA1OLli(2));
1386
BFMA1loO1 := BFMA1l100(3);
1387
BFMA1iOO1 := BFMA1l100(4);
1388
IFPrintF((debUG >= 2),
1389
"BFM:%d:readmask %c %08x %08x %08x at %t ns",
1390
fmt(BFMA1O110)&fmt(BFMA1ILoi(BFMA1li10))&Fmt(BFMA1oOO1)&fMT(BFMA1LOO1)&fmt(BFMA1iOO1));
1391
BFMA1llo1 := trUE;
1392
when BFMA1oi =>
1393
BFMA1I010 := 4;
1394
BFMA1I110 := BFMA1L0oi(BFMA1LI10,
1395
BFMA1OO11);
1396
BFMA1ooO1 := to_Slv32(BFMA1ollI(1)+BFMA1oLLI(2));
1397
BFMA1loo1 := BFMA1l100(3);
1398
BFMA1ioo1 := ( others => '1');
1399
IfprINTf((Debug >= 2),
1400
"BFM:%d:poll %c %08x %08x at %t ns",
1401
Fmt(BFMA1O110)&fmt(BFMA1iloi(BFMA1Li10))&Fmt(BFMA1OOo1)&FMT(BFMA1LOO1));
1402
BFMA1O1o1 := trUE;
1403
BFMA1IIO1 := TRUE;
1404
BFMA1IIo1 := trUE;
1405
when BFMA1LI =>
1406
BFMA1i010 := 5;
1407
BFMA1i110 := BFMA1L0Oi(BFMA1lI10,
1408
BFMA1oo11);
1409
BFMA1OOO1 := to_SLv32(BFMA1olLI(1)+BFMA1oLLI(2));
1410
BFMA1LOo1 := BFMA1L100(3);
1411
BFMA1ioO1 := BFMA1l100(4);
1412
IFprinTF((Debug >= 2),
1413
"BFM:%d:pollmask %c %08x %08x %08x at %t ns",
1414
fmt(BFMA1o110)&fmt(BFMA1iloI(BFMA1LI10))&Fmt(BFMA1ooo1)&FMt(BFMA1loO1)&fMT(BFMA1Ioo1));
1415
BFMA1IIO1 := true;
1416
when BFMA1II =>
1417
BFMA1i010 := 5;
1418
BFMA1I110 := BFMA1L0Oi(BFMA1LI10,
1419
BFMA1oo11);
1420
BFMA1oOO1 := to_SLV32(BFMA1ollI(1)+BFMA1OLLi(2));
1421
BFMA1LOo1 := ( others => '0');
1422
BFMA1Ioo1 := ( others => '0');
1423
BFMA1OOl1 := BFMA1olli(3);
1424
BFMA1ioO1(BFMA1Ool1) := '1';
1425
BFMA1Loo1(BFMA1OOl1) := BFMA1l100(4)(0);
1426
IFpriNTF((DEbug >= 2),
1427
"BFM:%d:pollbit %c %08x %d %d at %t ns",
1428
FMT(BFMA1O110)&fMT(BFMA1ilOI(BFMA1lI10))&FMt(BFMA1ooo1)&FMT(BFMA1ool1)&fmt(BFMA1loO1(BFMA1ooL1)));
1429
BFMA1IIo1 := True;
1430
when BFMA1O0 =>
1431
BFMA1ill1 := BFMA1ollI(1);
1432
BFMA1I010 := 4+BFMA1ill1;
1433
BFMA1I110 := BFMA1L0Oi(BFMA1li10,
1434
BFMA1oo11);
1435
BFMA1ooo1 := to_sLV32(BFMA1oLLI(2)+BFMA1oLLI(3));
1436
BFMA1OIL1 := 0;
1437
BFMA1LIl1 := BFMA1IIOi(BFMA1lI10,
1438
BFMA1LO11);
1439
for BFMA1i0II in 0 to BFMA1ILl1-1
1440
loop
1441
BFMA1iIL1(BFMA1I0Ii) := BFMA1olLI(BFMA1I0ii+4);
1442
end loop;
1443
ifPRIntf((dEBUg >= 2),
1444
"BFM:%d:writemultiple %c %08x %08x ... at %t ns",
1445
fmt(BFMA1O110)&FMT(BFMA1ILoi(BFMA1lI10))&FMT(BFMA1ooo1)&Fmt(BFMA1Iil1(0)));
1446
BFMA1Ilo1 := tRUE;
1447
when BFMA1L0 =>
1448
BFMA1ilL1 := BFMA1oLLI(3);
1449
BFMA1i010 := 6;
1450
BFMA1I110 := BFMA1l0OI(BFMA1li10,
1451
BFMA1Oo11);
1452
BFMA1Ooo1 := TO_slV32(BFMA1Olli(1)+BFMA1oLLI(2));
1453
BFMA1oiL1 := 0;
1454
BFMA1lil1 := BFMA1Iioi(BFMA1li10,
1455
BFMA1LO11);
1456
BFMA1ILi1 := BFMA1oLLI(4);
1457
BFMA1OIi1 := BFMA1OLli(5);
1458
for BFMA1i0iI in 0 to BFMA1ill1-1
1459
loop
1460
BFMA1iIL1(BFMA1I0ii) := BFMA1ILi1;
1461
BFMA1ilI1 := BFMA1Ili1+BFMA1OII1;
1462
end loop;
1463
IFPrintF((dEBUg >= 2),
1464
"BFM:%d:fill %c %08x %d %d %d at %t ns",
1465
fmT(BFMA1O110)&FMt(BFMA1iLOI(BFMA1li10))&Fmt(BFMA1OOO1)&Fmt(BFMA1Ill1)&Fmt(BFMA1oLLI(4))&fmT(BFMA1olLI(4)));
1466
BFMA1ILO1 := tRUE;
1467
when BFMA1I0 =>
1468
BFMA1ILl1 := BFMA1Olli(4);
1469
BFMA1I010 := 5;
1470
BFMA1i110 := BFMA1L0Oi(BFMA1lI10,
1471
BFMA1oo11);
1472
BFMA1OOO1 := to_Slv32(BFMA1OLli(1)+BFMA1OLLi(2));
1473
BFMA1Oil1 := 0;
1474
BFMA1lil1 := BFMA1iIOI(BFMA1li10,
1475
BFMA1LO11);
1476
BFMA1L1l1 := BFMA1oLLI(3);
1477
for BFMA1I0ii in 0 to BFMA1ILl1-1
1478
loop
1479
BFMA1IIL1(BFMA1i0II) := BFMA1ioLI(2+BFMA1l1L1+BFMA1I0ii);
1480
end loop;
1481
ifprINTf((deBUG >= 2),
1482
"BFM:%d:writetable %c %08x %d %d at %t ns ",
1483
Fmt(BFMA1O110)&Fmt(BFMA1ilOI(BFMA1Li10))&Fmt(BFMA1ooo1)&Fmt(BFMA1l1L1)&fmT(BFMA1ILL1));
1484
BFMA1ilO1 := trUE;
1485
when BFMA1ill =>
1486
BFMA1ILL1 := BFMA1OLli(4);
1487
BFMA1I010 := 5;
1488
BFMA1I110 := BFMA1L0Oi(BFMA1li10,
1489
BFMA1OO11);
1490
BFMA1ooo1 := tO_slv32(BFMA1ollI(1)+BFMA1olLI(2));
1491
BFMA1OIl1 := 0;
1492
BFMA1LIl1 := BFMA1iioI(BFMA1lI10,
1493
BFMA1LO11);
1494
BFMA1I0i1 := BFMA1L10ol(BFMA1iOLI(BFMA1LOli+3));
1495
for BFMA1I0ii in 0 to BFMA1ilL1-1
1496
loop
1497
BFMA1Iil1(BFMA1I0Ii) := BFMA1i100(BFMA1I0i1+BFMA1I0Ii);
1498
end loop;
1499
ifPRIntf((Debug >= 2),
1500
"BFM:%d:writearray %c %08x %d %d at %t ns ",
1501
fmt(BFMA1o110)&FMt(BFMA1iLOI(BFMA1lI10))&Fmt(BFMA1ooo1)&fmt(BFMA1i0i1)&FMt(BFMA1ILL1));
1502
BFMA1iLO1 := true;
1503
when BFMA1o1 =>
1504
BFMA1ILl1 := BFMA1OLLi(3);
1505
BFMA1i010 := 4;
1506
BFMA1i110 := BFMA1L0Oi(BFMA1LI10,
1507
BFMA1OO11);
1508
BFMA1oOO1 := to_SLv32(BFMA1OLLi(1)+BFMA1ollI(2));
1509
BFMA1ioo1 := ( others => '0');
1510
BFMA1Oil1 := 0;
1511
BFMA1LIl1 := BFMA1IIOi(BFMA1LI10,
1512
BFMA1lo11);
1513
BFMA1IOO1 := ( others => '0');
1514
IFpriNTF((deBUG >= 2),
1515
"BFM:%d:readmult %c %08x %d at %t ns",
1516
Fmt(BFMA1O110)&FMt(BFMA1iloI(BFMA1LI10))&Fmt(BFMA1ooo1)&FMT(BFMA1iLL1));
1517
BFMA1OIo1 := tRUE;
1518
when BFMA1l1 =>
1519
BFMA1Ill1 := BFMA1ollI(1);
1520
BFMA1I010 := 4+BFMA1ILL1;
1521
BFMA1i110 := BFMA1l0OI(BFMA1LI10,
1522
BFMA1OO11);
1523
BFMA1OOo1 := To_slV32(BFMA1OLli(2)+BFMA1olli(3));
1524
BFMA1iOO1 := ( others => '1');
1525
BFMA1OIL1 := 0;
1526
BFMA1lIL1 := BFMA1IIOi(BFMA1lI10,
1527
BFMA1lo11);
1528
BFMA1IOO1 := ( others => '1');
1529
for BFMA1i0II in 0 to BFMA1Ill1-1
1530
loop
1531
BFMA1IIL1(BFMA1I0ii) := BFMA1oLLI(BFMA1I0Ii+4);
1532
end loop;
1533
ifpRINtf((debUG >= 2),
1534
"BFM:%d:readmultchk %c %08x %08x ... at %t ns",
1535
fMT(BFMA1o110)&fmT(BFMA1ILOi(BFMA1LI10))&fmt(BFMA1oOO1)&Fmt(BFMA1iiL1(0)));
1536
BFMA1oIO1 := True;
1537
when BFMA1i1 =>
1538
BFMA1iLL1 := BFMA1OLli(3);
1539
BFMA1i010 := 6;
1540
BFMA1i110 := BFMA1l0OI(BFMA1LI10,
1541
BFMA1oO11);
1542
BFMA1ooo1 := to_SLv32(BFMA1olLI(1)+BFMA1Olli(2));
1543
BFMA1iOO1 := ( others => '1');
1544
BFMA1oil1 := 0;
1545
BFMA1lil1 := BFMA1Iioi(BFMA1li10,
1546
BFMA1lo11);
1547
BFMA1ili1 := BFMA1OLli(4);
1548
BFMA1oii1 := BFMA1Olli(5);
1549
for BFMA1I0ii in 0 to BFMA1ill1-1
1550
loop
1551
BFMA1IIl1(BFMA1i0iI) := BFMA1iLI1;
1552
BFMA1ilI1 := BFMA1iLI1+BFMA1OII1;
1553
end loop;
1554
IFpriNTF((debuG >= 2),
1555
"BFM:%d:fillcheck %c %08x %d %d %d at %t ns",
1556
FMT(BFMA1o110)&Fmt(BFMA1ILoi(BFMA1li10))&FMt(BFMA1Ooo1)&fmt(BFMA1ILL1)&fmt(BFMA1OLLi(4))&fmT(BFMA1Olli(5)));
1557
BFMA1OIo1 := True;
1558
when BFMA1Oil =>
1559
BFMA1Ill1 := BFMA1OLli(4);
1560
BFMA1I010 := 5;
1561
BFMA1i110 := BFMA1l0oI(BFMA1li10,
1562
BFMA1OO11);
1563
BFMA1ooo1 := tO_slv32(BFMA1olLI(1)+BFMA1OLLi(2));
1564
BFMA1ioo1 := ( others => '1');
1565
BFMA1oil1 := 0;
1566
BFMA1liL1 := BFMA1IIoi(BFMA1lI10,
1567
BFMA1lO11);
1568
BFMA1I0I1 := BFMA1L10ol(BFMA1Ioli(BFMA1LOLi+3));
1569
for BFMA1i0ii in 0 to BFMA1ILL1-1
1570
loop
1571
BFMA1iil1(BFMA1I0ii) := BFMA1I100(BFMA1I0I1+BFMA1i0II);
1572
end loop;
1573
ifPRIntf((debuG >= 2),
1574
"BFM:%d:readarray %c %08x %d %d at %t ns",
1575
Fmt(BFMA1O110)&fmT(BFMA1iLOI(BFMA1Li10))&FMT(BFMA1ooo1)&FMT(BFMA1i0I1)&FMt(BFMA1Ill1));
1576
BFMA1oio1 := True;
1577
when BFMA1oOL =>
1578
BFMA1ill1 := BFMA1olLI(4);
1579
BFMA1i010 := 5;
1580
BFMA1i110 := BFMA1L0oi(BFMA1LI10,
1581
BFMA1OO11);
1582
BFMA1ooO1 := TO_slv32(BFMA1oLLI(1)+BFMA1oLLI(2));
1583
BFMA1iOO1 := ( others => '1');
1584
BFMA1oil1 := 0;
1585
BFMA1lIL1 := BFMA1iiOI(BFMA1lI10,
1586
BFMA1lO11);
1587
BFMA1L1l1 := BFMA1olLI(3);
1588
for BFMA1i0II in 0 to BFMA1Ill1-1
1589
loop
1590
BFMA1IIl1(BFMA1I0Ii) := BFMA1ioLI(BFMA1L1l1+2+BFMA1I0Ii);
1591
end loop;
1592
ifprINTf((DEbug >= 2),
1593
"BFM:%d:readtable %c %08x %d %d at %t ns",
1594
FMT(BFMA1O110)&fmt(BFMA1Iloi(BFMA1lI10))&FMt(BFMA1Ooo1)&Fmt(BFMA1L1l1)&fmt(BFMA1ILl1));
1595
BFMA1oio1 := tRUE;
1596
when BFMA1I00 =>
1597
BFMA1i010 := 7;
1598
BFMA1OLO1 := truE;
1599
BFMA1OLIol := BFMA1o0LOl;
1600
when BFMA1O10 =>
1601
BFMA1i010 := 7;
1602
BFMA1olo1 := true;
1603
BFMA1oLIOl := BFMA1o0LOl;
1604
when BFMA1i1l =>
1605
BFMA1I010 := 1;
1606
BFMA1oOI1 := 0;
1607
iFPRintf((dEBUg >= 2),
1608
"BFM:%d:waitfiq at %t ns ",
1609
fmt(BFMA1O110));
1610
BFMA1oLO1 := truE;
1611
when BFMA1ooi =>
1612
BFMA1i010 := 1;
1613
BFMA1ooi1 := 1;
1614
IFPrintF((dEBUg >= 2),
1615
"BFM:%d:waitirq at %t ns ",
1616
fmt(BFMA1O110));
1617
BFMA1oLO1 := True;
1618
when BFMA1L1L =>
1619
BFMA1i010 := 2;
1620
BFMA1ooI1 := BFMA1oLLI(1);
1621
IfpriNTF((Debug >= 2),
1622
"BFM:%d:waitint %d  at %t ns",
1623
Fmt(BFMA1o110)&FMt(BFMA1Ooi1));
1624
BFMA1olo1 := TRUe;
1625
when BFMA1Lil =>
1626
BFMA1I010 := 2;
1627
BFMA1Loo1 := BFMA1l100(1);
1628
BFMA1iiI0 <= BFMA1LOo1;
1629
BFMA1I0L0 <= '1';
1630
IFprinTF((DEBug >= 2),
1631
"BFM:%d:iowrite %08x  at %t ns ",
1632
Fmt(BFMA1O110)&Fmt(BFMA1LOo1));
1633
when BFMA1Iil =>
1634
BFMA1i010 := 2;
1635
BFMA1LOO1 := ( others => '0');
1636
BFMA1iOO1 := ( others => '0');
1637
BFMA1O001 := BFMA1l10OL(BFMA1IOLi(BFMA1LOli+1));
1638
IfprINTf((Debug >= 2),
1639
"BFM:%d:ioread @%d at %t ns",
1640
FMt(BFMA1O110)&fmT(BFMA1o001));
1641
BFMA1L0l0 <= '1';
1642
BFMA1olo1 := trUE;
1643
BFMA1O0o1 := truE;
1644
BFMA1i0o1 := tRUE;
1645
when BFMA1o0l =>
1646
BFMA1I010 := 2;
1647
BFMA1loo1 := BFMA1l100(1);
1648
BFMA1ioo1 := ( others => '1');
1649
BFMA1l0L0 <= '1';
1650
ifpRINtf((Debug >= 2),
1651
"BFM:%d:iocheck %08x  at %t ns ",
1652
fMT(BFMA1O110)&FMT(BFMA1loo1));
1653
BFMA1Olo1 := TRUe;
1654
when BFMA1l0L =>
1655
BFMA1I010 := 3;
1656
BFMA1Loo1 := BFMA1L100(1);
1657
BFMA1IOo1 := BFMA1l100(2);
1658
iFPRintf((DEBug >= 2),
1659
"BFM:%d:iomask %08x %08x  at %t ns",
1660
Fmt(BFMA1o110)&fmt(BFMA1LOO1)&FMT(BFMA1ioo1));
1661
BFMA1L0l0 <= '1';
1662
BFMA1OLO1 := trUE;
1663
when BFMA1LOL =>
1664
BFMA1I010 := 2;
1665
BFMA1Loo1 := ( others => '0');
1666
BFMA1IOO1 := ( others => '0');
1667
BFMA1OOL1 := BFMA1ollI(1);
1668
BFMA1Loo1(BFMA1OOl1) := BFMA1oi10(0);
1669
BFMA1ioO1(BFMA1ool1) := '1';
1670
BFMA1l0l0 <= '1';
1671
ifprINTf((debuG >= 2),
1672
"BFM:%d:iotest %d %d  at %t ns",
1673
fmT(BFMA1O110)&FMt(BFMA1oOL1)&Fmt(BFMA1OI10(0)));
1674
BFMA1OLo1 := True;
1675
when BFMA1I0l =>
1676
BFMA1i010 := 2;
1677
BFMA1OOL1 := BFMA1OLLi(1);
1678
BFMA1iii0(BFMA1OOL1) <= '1';
1679
BFMA1i0L0 <= '1';
1680
iFPRintf((DebuG >= 2),
1681
"BFM:%d:ioset %d at %t ns",
1682
fmt(BFMA1o110)&fMT(BFMA1OOl1));
1683
when BFMA1O1l =>
1684
BFMA1i010 := 2;
1685
BFMA1OOL1 := BFMA1olLI(1);
1686
BFMA1iii0(BFMA1ool1) <= '0';
1687
BFMA1i0l0 <= '1';
1688
IfpriNTF((DEBug >= 2),
1689
"BFM:%d:ioclr %d at %t ns",
1690
FMT(BFMA1o110)&fMT(BFMA1OOL1));
1691
when BFMA1Iol =>
1692
BFMA1I010 := 2;
1693
BFMA1LOo1 := ( others => '0');
1694
BFMA1ioO1 := ( others => '0');
1695
BFMA1ool1 := BFMA1OLli(1);
1696
BFMA1loo1(BFMA1ool1) := BFMA1OI10(0);
1697
BFMA1ioO1(BFMA1Ool1) := '1';
1698
IFPrintF((debUG >= 2),
1699
"BFM:%d:iowait %d %d at %t ns ",
1700
FMT(BFMA1o110)&fmt(BFMA1Ool1)&fmt(BFMA1oI10(0)));
1701
BFMA1L0L0 <= '1';
1702
BFMA1OLO1 := trUE;
1703
when BFMA1IOI =>
1704
BFMA1I010 := 3;
1705
BFMA1oOO1 := BFMA1l100(1);
1706
BFMA1Loo1 := BFMA1L100(2);
1707
IfpriNTF(DEBug >= 2,
1708
"BFM:%d:extwrite %08x %08x at %t ns",
1709
FMT(BFMA1O110)&FMT(BFMA1ooO1)&fMT(BFMA1loO1));
1710
BFMA1OLO1 := TRUe;
1711
when BFMA1lII =>
1712
BFMA1ilL1 := BFMA1ollI(1);
1713
BFMA1LLL1 := BFMA1Olli(2);
1714
BFMA1I010 := BFMA1ill1+3;
1715
for BFMA1i0iI in 0 to BFMA1ilL1-1
1716
loop
1717
BFMA1IIL1(BFMA1I0Ii) := BFMA1ollI(BFMA1I0ii+3);
1718
end loop;
1719
ifpRINtf(debuG >= 2,
1720
"BFM:%d:extwrite %08x %0d Words at %t ns",
1721
FMt(BFMA1o110)&fmt(BFMA1ooo1)&Fmt(BFMA1ill1));
1722
BFMA1OIl1 := 0;
1723
BFMA1olo1 := TRUe;
1724
when BFMA1OLi =>
1725
BFMA1i010 := 3;
1726
BFMA1OOO1 := BFMA1L100(1);
1727
BFMA1LOo1 := ( others => '0');
1728
BFMA1Ioo1 := ( others => '0');
1729
BFMA1O001 := BFMA1l10oL(BFMA1IOLi(BFMA1LOli+2));
1730
BFMA1iil0 <= '1';
1731
IFPrintF(DEbug >= 2,
1732
"BFM:%d:extread @%d %08x at %t ns ",
1733
fmt(BFMA1O110)&FMT(BFMA1o001)&FMt(BFMA1OOO1));
1734
BFMA1oLO1 := TRUe;
1735
BFMA1o0O1 := true;
1736
BFMA1i0o1 := truE;
1737
when BFMA1llI =>
1738
BFMA1I010 := 3;
1739
BFMA1OOo1 := BFMA1L100(1);
1740
BFMA1Loo1 := BFMA1l100(2);
1741
BFMA1Ioo1 := ( others => '1');
1742
BFMA1o1O1 := True;
1743
BFMA1Iil0 <= '1';
1744
ifPRIntf(debuG >= 2,
1745
"BFM:%d:extcheck %08x %08x at %t ns",
1746
FMt(BFMA1O110)&fmt(BFMA1ooO1)&FMt(BFMA1lOO1));
1747
BFMA1OLo1 := TRUe;
1748
when BFMA1ILI =>
1749
BFMA1I010 := 4;
1750
BFMA1Ooo1 := BFMA1l100(1);
1751
BFMA1Loo1 := BFMA1l100(2);
1752
BFMA1iOO1 := BFMA1l100(3);
1753
BFMA1iiL0 <= '1';
1754
IFprinTF(DEBug >= 2,
1755
"BFM:%d:extmask %08x %08x %08x at %t ns",
1756
FMt(BFMA1o110)&fmt(BFMA1ooO1)&FMt(BFMA1loo1)&fmt(BFMA1Ioo1));
1757
BFMA1Olo1 := truE;
1758
when BFMA1oII =>
1759
BFMA1I010 := 1;
1760
BFMA1i1o1 := 1;
1761
BFMA1o1O1 := truE;
1762
IfpriNTF(DEbug >= 2,
1763
"BFM:%d:extwait ",
1764
fMT(BFMA1O110));
1765
BFMA1olO1 := TRue;
1766
when BFMA1IIi =>
1767
assert falsE report "LABEL instructions not allowed in vector files" severity FailURE;
1768
when BFMA1OI0 =>
1769
BFMA1L1iol := truE;
1770
BFMA1i010 := 2+BFMA1olLI(1);
1771
ifprINTf((dEBUg >= 2),
1772
"BFM:%d:table %08x ... (length=%d)",
1773
fMT(BFMA1o110)&fmt(BFMA1oLLI(2))&fmT(BFMA1i010-2));
1774
when BFMA1o0I =>
1775
BFMA1L1iol := trUE;
1776
BFMA1I010 := 2;
1777
BFMA1LLI1 := BFMA1oLLI(1);
1778
BFMA1I010 := BFMA1llI1-BFMA1lOLI;
1779
IFprinTF((DEbug >= 2),
1780
"BFM:%d:jump",
1781
FMT(BFMA1o110));
1782
when BFMA1L0i =>
1783
BFMA1l1iOL := trUE;
1784
BFMA1I010 := 3;
1785
BFMA1LLI1 := BFMA1oLLI(1);
1786
if BFMA1olLI(2) = 0 then
1787
BFMA1I010 := BFMA1LLI1-BFMA1lOLI;
1788
end if;
1789
IfpriNTF((DEBug >= 2),
1790
"BFM:%d:jumpz  %08x",
1791
fmT(BFMA1o110)&fmT(BFMA1olLI(2)));
1792
when BFMA1Llol =>
1793
BFMA1l1ioL := TRUe;
1794
BFMA1i010 := 5;
1795
BFMA1Lli1 := BFMA1ollI(1);
1796
BFMA1o1i1 := BFMA1o1OI(BFMA1olLI(3),
1797
BFMA1olLI(2),
1798
BFMA1ollI(4),
1799
Debug);
1800
if BFMA1O1I1 = 0 then
1801
BFMA1I010 := BFMA1LLI1+2-BFMA1lolI;
1802
end if;
1803
IFPrintF((DEbug >= 2),
1804
"BFM:%d:if %08x func %08x",
1805
Fmt(BFMA1o110)&Fmt(BFMA1OLli(2))&FMT(BFMA1olLI(4)));
1806
when BFMA1iLOL =>
1807
BFMA1L1Iol := trUE;
1808
BFMA1I010 := 5;
1809
BFMA1lLI1 := BFMA1oLLI(1);
1810
BFMA1o1i1 := BFMA1o1oi(BFMA1Olli(3),
1811
BFMA1Olli(2),
1812
BFMA1OLLI(4),
1813
dEBUg);
1814
if BFMA1O1i1 /= 0 then
1815
BFMA1I010 := BFMA1Lli1+2-BFMA1Loli;
1816
end if;
1817
IFprinTF((Debug >= 2),
1818
"BFM:%d:ifnot %08x func %08x",
1819
fMT(BFMA1o110)&fMT(BFMA1oLLI(2))&Fmt(BFMA1Olli(4)));
1820
when BFMA1LIol =>
1821
BFMA1L1iol := True;
1822
BFMA1i010 := 2;
1823
BFMA1lli1 := BFMA1olLI(1);
1824
BFMA1i010 := BFMA1lLI1+2-BFMA1Loli;
1825
ifpRINtf((Debug >= 2),
1826
"BFM:%d:else ",
1827
FMt(BFMA1O110));
1828
when BFMA1IIOl =>
1829
BFMA1l1IOL := True;
1830
BFMA1i010 := 2;
1831
iFPRintf((DEbug >= 2),
1832
"BFM:%d:endif ",
1833
fmT(BFMA1O110));
1834
when BFMA1Oiol =>
1835
BFMA1l1ioL := True;
1836
BFMA1I010 := 5;
1837
BFMA1LLI1 := BFMA1olLI(1)+2;
1838
BFMA1O1I1 := BFMA1O1oi(BFMA1olLI(3),
1839
BFMA1OLli(2),
1840
BFMA1Olli(4),
1841
Debug);
1842
if BFMA1O1i1 = 0 then
1843
BFMA1i010 := BFMA1llI1-BFMA1Loli;
1844
end if;
1845
ifPRIntf((DEbug >= 2),
1846
"BFM:%d:while %08x func %08x",
1847
fmT(BFMA1O110)&Fmt(BFMA1oLLI(2))&fMT(BFMA1olLI(4)));
1848
when BFMA1o0oL =>
1849
BFMA1L1iol := TRue;
1850
BFMA1i010 := 2;
1851
BFMA1llI1 := BFMA1oLLI(1);
1852
BFMA1i010 := BFMA1lli1-BFMA1Loli;
1853
IfpriNTF((debUG >= 2),
1854
"BFM:%d:endwhile",
1855
fMT(BFMA1O110));
1856
when BFMA1I0ol =>
1857
BFMA1L1Iol := trUE;
1858
BFMA1I010 := 4;
1859
BFMA1lLI1 := BFMA1olLI(3);
1860
if BFMA1ollI(1) /= BFMA1Olli(2) then
1861
BFMA1I010 := BFMA1llI1-BFMA1loLI;
1862
else
1863
BFMA1lLLOl(BFMA1ILLol) := TRue;
1864
end if;
1865
iFPRintf((Debug >= 2),
1866
"BFM:%d:when %08x=%08x %08x",
1867
fMT(BFMA1O110)&Fmt(BFMA1olLI(1))&fmT(BFMA1OLli(2))&fmt(BFMA1oLLI(3)));
1868
when BFMA1L1ol =>
1869
BFMA1l1IOL := tRUE;
1870
BFMA1I010 := 4;
1871
BFMA1lli1 := BFMA1Olli(3);
1872
if BFMA1lLLOl(BFMA1ILLol) then
1873
BFMA1I010 := BFMA1LLi1-BFMA1lOLI;
1874
else
1875
BFMA1LLLol(BFMA1illOL) := falsE;
1876
end if;
1877
ifpRINtf((debuG >= 2),
1878
"BFM:%d:default %08x=%08x %08x",
1879
fMT(BFMA1o110)&FMt(BFMA1oLLI(1))&Fmt(BFMA1OLli(2))&fmt(BFMA1ollI(3)));
1880
when BFMA1l0oL =>
1881
BFMA1L1iol := True;
1882
BFMA1i010 := 1;
1883
BFMA1iLLOl := BFMA1ilLOL+1;
1884
BFMA1lLLOl(BFMA1ILlol) := falSE;
1885
ifprINTf((dEBUg >= 2),
1886
"BFM:%d:case",
1887
fmT(BFMA1o110));
1888
when BFMA1o1OL =>
1889
BFMA1l1ioL := TRue;
1890
BFMA1I010 := 1;
1891
BFMA1ilLOL := BFMA1iLLOl-1;
1892
ifprINTf((DEbug >= 2),
1893
"BFM:%d:endcase",
1894
Fmt(BFMA1o110));
1895
when BFMA1i0I =>
1896
BFMA1L1iol := tRUE;
1897
BFMA1i010 := 3;
1898
BFMA1LLi1 := BFMA1oLLI(1);
1899
if BFMA1ollI(2) /= 0 then
1900
BFMA1I010 := BFMA1lLI1-BFMA1loli;
1901
end if;
1902
ifpRINtf((DEbug >= 2),
1903
"BFM:%d:jumpnz  %08x",
1904
Fmt(BFMA1o110)&fmT(BFMA1OLli(2)));
1905
when BFMA1lool =>
1906
BFMA1L1Iol := TRue;
1907
BFMA1i010 := 4;
1908
BFMA1LOO1 := BFMA1l100(2);
1909
BFMA1iOO1 := BFMA1l100(3);
1910
BFMA1lOOOl := BFMA1OIOi((BFMA1L100(1) xor BFMA1LOO1) and BFMA1IOo1);
1911
iFPRintF(dEBUg >= 2,
1912
"BFM:%d:compare  %08x==%08x Mask=%08x (RES=%08x) at %t ns",
1913
fmT(BFMA1o110)&Fmt(BFMA1olLI(1))&Fmt(BFMA1loO1)&FMT(BFMA1IOO1)&FMt(BFMA1Loool));
1914
if BFMA1LOool /= 0 then
1915
BFMA1lL01 := BFMA1ll01+1;
1916
prINTf("ERROR:  compare failed %08x==%08x Mask=%08x (RES=%08x) ",
1917
FMt(BFMA1ollI(1))&fmt(BFMA1loO1)&FMt(BFMA1iOO1)&fmT(BFMA1looOL));
1918
prINTf("       Stimulus file %s  Line No %d",
1919
FMt(BFMA1o101(BFMA1oiLI(BFMA1o110,
1920
BFMA1i101)))&FMt(BFMA1Iili(BFMA1O110,
1921
BFMA1I101)));
1922
assert FALse report "BFM Data Compare Error" severity ERRor;
1923
end if;
1924
when BFMA1i1OL =>
1925
BFMA1l1IOL := truE;
1926
BFMA1I010 := 4;
1927
BFMA1loo1 := BFMA1L100(2);
1928
BFMA1IOo1 := BFMA1L100(3);
1929
if BFMA1ollI(1) >= BFMA1olli(2) and BFMA1OLLi(1) <= BFMA1Olli(3) then
1930
BFMA1loooL := 1;
1931
else
1932
BFMA1lOOOl := 0;
1933
end if;
1934
IFprinTF(DEBug >= 2,
1935
"BFM:%d:cmprange %d in %d to %d at %t ns",
1936
FMt(BFMA1o110)&FMT(BFMA1OLli(1))&fMT(BFMA1Olli(2))&FMT(BFMA1olLI(3)));
1937
if BFMA1LOOol = 0 then
1938
BFMA1LL01 := BFMA1LL01+1;
1939
PRIntf("ERROR: cmprange failed %d in %d to %d",
1940
FMt(BFMA1Olli(1))&fmt(BFMA1OLli(2))&fMT(BFMA1OLLi(3)));
1941
PrintF("       Stimulus file %s  Line No %d",
1942
FMT(BFMA1o101(BFMA1OIli(BFMA1O110,
1943
BFMA1i101)))&FMT(BFMA1IILi(BFMA1o110,
1944
BFMA1I101)));
1945
assert falsE report "BFM Data Compare Error" severity ERRor;
1946
end if;
1947
when BFMA1i11 =>
1948
BFMA1L1iol := TRue;
1949
BFMA1I010 := 2;
1950
BFMA1L1Ii := BFMA1OLLi(1);
1951
BFMA1lL10 := BFMA1ll10+BFMA1L1Ii;
1952
BFMA1i100(BFMA1LL10) := 0;
1953
ifPRIntf((dEBUg >= 2),
1954
"BFM:%d:int %d",
1955
Fmt(BFMA1o110)&fmt(BFMA1ollI(1)));
1956
when BFMA1o1i
1957
| BFMA1l1I =>
1958
BFMA1L1iol := tRUE;
1959
if BFMA1iI10 = BFMA1o1I then
1960
BFMA1I010 := 2;
1961
BFMA1l1ii := 0;
1962
else
1963
BFMA1L1ii := BFMA1OLLi(2);
1964
BFMA1i010 := 3+BFMA1L1ii;
1965
end if;
1966
BFMA1LOi1 := BFMA1ollI(1);
1967
BFMA1IOi1 := BFMA1loLI+BFMA1I010;
1968
BFMA1I010 := BFMA1LOI1-BFMA1lOLI;
1969
BFMA1I100(BFMA1ll10) := BFMA1iOI1;
1970
BFMA1LL10 := BFMA1LL10+1;
1971
if BFMA1l1ii > 0 then
1972
for BFMA1i0iI in 0 to BFMA1l1iI-1
1973
loop
1974
BFMA1i100(BFMA1ll10) := BFMA1Olli(3+BFMA1i0iI);
1975
BFMA1lL10 := BFMA1lL10+1;
1976
end loop;
1977
end if;
1978
IFprinTF((deBUG >= 2 and BFMA1Ii10 = BFMA1o1i),
1979
"BFM:%d:call %d",
1980
FMt(BFMA1O110)&fmt(BFMA1loI1));
1981
iFPRintf((Debug >= 2 and BFMA1II10 = BFMA1l1i),
1982
"BFM:%d:call %d %08x ... ",
1983
fMT(BFMA1O110)&fMT(BFMA1loi1)&Fmt(BFMA1OLLi(3)));
1984
when BFMA1i1I =>
1985
BFMA1L1iol := true;
1986
BFMA1I010 := 2;
1987
BFMA1LL10 := BFMA1LL10-BFMA1OLLI(1);
1988
BFMA1IOI1 := 0;
1989
if BFMA1lL10 > 0 then
1990
BFMA1LL10 := BFMA1ll10-1;
1991
BFMA1ioi1 := BFMA1i100(BFMA1LL10);
1992
end if;
1993
if BFMA1IOi1 = 0 then
1994
BFMA1L0L1 := TRue;
1995
BFMA1O0o1 := True;
1996
BFMA1l1ioL := faLSE;
1997
else
1998
BFMA1i010 := BFMA1Ioi1-BFMA1Loli;
1999
end if;
2000
IfpriNTF((dEBUg >= 2),
2001
"BFM:%d:return",
2002
fMT(BFMA1O110));
2003
when BFMA1ooLL =>
2004
BFMA1l1IOL := true;
2005
BFMA1i010 := 3;
2006
BFMA1Ll10 := BFMA1Ll10-BFMA1OLli(1);
2007
BFMA1IOi1 := 0;
2008
if BFMA1ll10 > 0 then
2009
BFMA1ll10 := BFMA1Ll10-1;
2010
BFMA1IOi1 := BFMA1I100(BFMA1ll10);
2011
end if;
2012
BFMA1Oli1 := BFMA1OLli(2);
2013
if BFMA1ioi1 = 0 then
2014
BFMA1L0l1 := trUE;
2015
BFMA1O0o1 := true;
2016
BFMA1l1IOL := FAlse;
2017
else
2018
BFMA1i010 := BFMA1ioi1-BFMA1lolI;
2019
end if;
2020
iFPRintF((debuG >= 2),
2021
"BFM:%d:return %08x",
2022
fmt(BFMA1o110)&FMt(BFMA1OLi1));
2023
when BFMA1oo0 =>
2024
BFMA1l1ioL := TRUe;
2025
BFMA1I010 := 5;
2026
BFMA1i0I1 := BFMA1l10Ol(BFMA1IOLi(BFMA1LOLi+1));
2027
BFMA1o1I1 := BFMA1OLli(2);
2028
BFMA1I100(BFMA1i0i1) := BFMA1O1I1;
2029
ifpRINtf(Debug >= 2,
2030
"BFM:%d:loop %d %d %d %d ",
2031
Fmt(BFMA1o110)&FMt(BFMA1I0i1)&Fmt(BFMA1OLLi(2))&FMT(BFMA1OLli(3))&FMt(BFMA1OLli(4)));
2032
when BFMA1lo0 =>
2033
BFMA1l1ioL := trUE;
2034
BFMA1I010 := 2;
2035
BFMA1IO10 := BFMA1Olli(1);
2036
for BFMA1I0ii in 2 to 4
2037
loop
2038
BFMA1oo10(BFMA1i0iI) := BFMA1il0OL((To_sLV32(BFMA1IOli(BFMA1IO10))(7+BFMA1I0Ii) = '1'),
2039
BFMA1ioLI(BFMA1IO10+BFMA1I0Ii));
2040
end loop;
2041
BFMA1I0i1 := BFMA1l10ol(BFMA1Ioli(BFMA1Io10+1));
2042
BFMA1OO0i := BFMA1oo10(4);
2043
BFMA1ll0I := BFMA1OO10(3);
2044
BFMA1Il10 := BFMA1I100(BFMA1i0I1);
2045
BFMA1il10 := BFMA1il10+BFMA1oO0I;
2046
BFMA1i100(BFMA1I0i1) := BFMA1Il10;
2047
BFMA1lLI1 := BFMA1IO10+5;
2048
if ((BFMA1OO0i >= 0 and BFMA1IL10 <= BFMA1LL0i) or (BFMA1oO0I < 0 and BFMA1il10 >= BFMA1LL0i)) then
2049
BFMA1i010 := BFMA1lLI1-BFMA1LOLi;
2050
IFPrintF(DEbug >= 2,
2051
"BFM:%d:endloop (Next Loop=%d)",
2052
fmt(BFMA1o110)&fmt(BFMA1iL10));
2053
else
2054
iFPRintF(Debug >= 2,
2055
"BFM:%d:endloop (Finished)",
2056
fmT(BFMA1o110));
2057
end if;
2058
when BFMA1il0 =>
2059
BFMA1L1ioL := tRUE;
2060
BFMA1I010 := 2;
2061
BFMA1L110 := BFMA1OLLi(1);
2062
iFPRintF(debuG >= 2,
2063
"BFM:%d:timeout %d",
2064
FMt(BFMA1O110)&fmt(BFMA1L110));
2065
when BFMA1O01 =>
2066
BFMA1L1Iol := tRUE;
2067
BFMA1i010 := 2;
2068
BFMA1LLOol := BFMA1OLli(1);
2069
IFprinTF(debuG >= 2,
2070
"BFM:%d:rand %d",
2071
Fmt(BFMA1o110)&fmt(BFMA1LLOol));
2072
when BFMA1ii0 =>
2073
BFMA1l1IOL := TRUe;
2074
BFMA1I010 := BFMA1LLLi(BFMA1ollI(1));
2075
BFMA1Io0i := BFMA1oOLI(BFMA1loli,
2076
BFMA1ioli(BFMA1Loli to BFMA1Loli+BFMA1I010-1),
2077
BFMA1OLLi);
2078
priNTF("BFM:%s",
2079
FMT(BFMA1iO0I));
2080
when BFMA1o00 =>
2081
BFMA1L1Iol := trUE;
2082
BFMA1i010 := BFMA1lLLI(BFMA1olLI(1));
2083
BFMA1Io0i := BFMA1OOLi(BFMA1LOLi,
2084
BFMA1ioli(BFMA1LOLi to BFMA1LOli+BFMA1i010-1),
2085
BFMA1olli);
2086
PRintf("################################################################");
2087
PRintf("BFM:%s",
2088
fmT(BFMA1IO0i));
2089
when BFMA1l =>
2090
BFMA1I010 := 1;
2091
ifPRIntf((DEBug >= 2),
2092
"BFM:%d:nop",
2093
Fmt(BFMA1o110));
2094
when BFMA1L00 =>
2095
BFMA1l1ioL := trUE;
2096
BFMA1I010 := BFMA1lLLI(BFMA1OLLi(1));
2097
when BFMA1OO1 =>
2098
BFMA1L1Iol := True;
2099
BFMA1I010 := 2;
2100
if debuGLEvel >= 0 and deBUGlevEL <= 5 then
2101
prinTF("BFM:%d: DEBUG - ignored due to DEBUGLEVEL generic setting",
2102
fMT(BFMA1o110));
2103
else
2104
Debug <= BFMA1ollI(1);
2105
PRintf("BFM:%d: DEBUG %d",
2106
fmt(BFMA1O110)&fmt(BFMA1OLli(1)));
2107
end if;
2108
when BFMA1lOI =>
2109
BFMA1l1iOL := FAlse;
2110
BFMA1i010 := 2;
2111
BFMA1LIi1 := BFMA1olLI(1);
2112
BFMA1iL01(1) := NUL;
2113
if BFMA1liI1 = 2 then
2114
if BFMA1IO01 then
2115
BFMA1iL01(1 to 9) := "OCCURRED"&Nul;
2116
else
2117
assert fALSe report "BFM: HRESP Did Not Occur When Expected" severity errOR;
2118
BFMA1LL01 := BFMA1ll01+1;
2119
end if;
2120
BFMA1LII1 := 0;
2121
end if;
2122
BFMA1iO01 := FALse;
2123
IfprINTF(DebuG >= 2,
2124
"BFM:%d:hresp %d %s",
2125
fmt(BFMA1O110)&fmt(BFMA1LIi1)&FMt(BFMA1il01));
2126
when BFMA1OL0 =>
2127
BFMA1L1Iol := True;
2128
BFMA1I010 := 2;
2129
IfpriNTF(debUG >= 2,
2130
"BFM:%d:stop %d",
2131
fmt(BFMA1O110)&fmt(BFMA1Olli(1)));
2132
PRIntf("       Stimulus file %s  Line No %d",
2133
fMT(BFMA1o101(BFMA1oili(BFMA1O110,
2134
BFMA1i101)))&fmT(BFMA1iiLI(BFMA1o110,
2135
BFMA1I101)));
2136
case BFMA1OLli(1) is
2137
when 0 =>
2138
assert FAlse report "BFM Script Stop Command" severity note;
2139
when 1 =>
2140
assert faLSE report "BFM Script Stop Command" severity WarnING;
2141
when 3 =>
2142
assert FAlse report "BFM Script Stop Command" severity FailuRE;
2143
when others =>
2144
assert FalsE report "BFM Script Stop Command" severity erroR;
2145
end case;
2146
when BFMA1lL0 =>
2147
BFMA1L0l1 := true;
2148
when BFMA1iiLL =>
2149
BFMA1L1iol := True;
2150
ifpRINtf(deBUG >= 1,
2151
"BFM:%d:echo at %t ns",
2152
Fmt(BFMA1o110));
2153
BFMA1i010 := 2+BFMA1OLli(1);
2154
prinTF("BFM Parameter values are");
2155
for BFMA1i0ii in 0 to BFMA1I010-3
2156
loop
2157
PRintf(" Para %d=0x%08x (%d)",
2158
fmt(BFMA1I0ii+1)&fmt(BFMA1L100(2+BFMA1I0ii))&FMt(BFMA1olLI(2+BFMA1I0Ii)));
2159
end loop;
2160
when BFMA1li0 =>
2161
BFMA1i010 := 2;
2162
BFMA1I1o1 := BFMA1OLLi(1);
2163
IFprinTF(DEBug >= 2,
2164
"BFM:%d:flush %d at %t ns",
2165
fMT(BFMA1O110)&fmT(BFMA1i1O1));
2166
BFMA1O0o1 := true;
2167
BFMA1OLo1 := true;
2168
when BFMA1OI1 =>
2169
BFMA1l1IOL := TRUe;
2170
BFMA1LL01 := BFMA1Ll01+1;
2171
IFpriNTF(debUG >= 2,
2172
"BFM:%d:setfail",
2173
FMT(BFMA1O110));
2174
assert False report "BFM: User Script detected ERROR" severity erROR;
2175
when BFMA1o11 =>
2176
BFMA1l1IOL := truE;
2177
BFMA1I010 := 3;
2178
BFMA1I0i1 := BFMA1l10OL(BFMA1iOLI(BFMA1Loli+1));
2179
BFMA1O1I1 := BFMA1OLLi(2);
2180
BFMA1i100(BFMA1I0i1) := BFMA1O1i1;
2181
ifPRIntf(debuG >= 2,
2182
"BFM:%d:set %d= 0x%08x (%d)",
2183
FMt(BFMA1o110)&fMT(BFMA1i0I1)&fMT(BFMA1O1I1)&fmT(BFMA1o1I1));
2184
when BFMA1OOOl =>
2185
BFMA1L1iol := tRUE;
2186
BFMA1I010 := BFMA1OLLi(2)+3;
2187
BFMA1I0i1 := BFMA1l10OL(BFMA1IOli(BFMA1Loli+1));
2188
BFMA1O1I1 := BFMA1o1oI(BFMA1oLLI(4),
2189
BFMA1OLLi(3),
2190
BFMA1ollI(5),
2191
DEbug);
2192
BFMA1I0Ii := 6;
2193
while (BFMA1I0Ii < BFMA1i010)
2194
loop
2195
BFMA1O1i1 := BFMA1O1oi(BFMA1OLLi(BFMA1I0ii),
2196
BFMA1O1I1,
2197
BFMA1oLLI(BFMA1i0iI+1),
2198
DEbug);
2199
BFMA1i0II := BFMA1i0II+2;
2200
end loop;
2201
BFMA1I100(BFMA1I0i1) := BFMA1o1I1;
2202
ifprINTf(DebuG >= 2,
2203
"BFM:%d:set %d= 0x%08x (%d)",
2204
FMT(BFMA1o110)&Fmt(BFMA1I0I1)&fmT(BFMA1O1I1)&FMt(BFMA1o1i1));
2205
when BFMA1ILll =>
2206
BFMA1L1Iol := TRUe;
2207
BFMA1I1L1 := BFMA1l010;
2208
BFMA1I010 := BFMA1lllI(BFMA1oLLI(1));
2209
if BFMA1OLl1(1) /= Nul then
2210
FILe_cLOSe(BFMA1il00);
2211
end if;
2212
BFMA1Oll1 := BFMA1oolI(BFMA1lOLI,
2213
BFMA1ioLI(BFMA1lolI to BFMA1lolI+BFMA1I010-1),
2214
BFMA1ollI);
2215
prINTf("BFM:%d:LOGFILE %s",
2216
fmt(BFMA1O110)&FMt(BFMA1oLL1));
2217
if BFMA1OLL1(1) /= nul then
2218
File_OPEn(BFMA1I000,
2219
BFMA1IL00,
2220
BFMA1OLL1,
2221
wriTE_modE);
2222
if BFMA1I000 = oPEN_ok then
2223
else
2224
assert FALse report "Logfile open FAILED" severity faiLURe;
2225
end if;
2226
end if;
2227
when BFMA1oilL =>
2228
BFMA1L1iol := True;
2229
BFMA1i010 := 2;
2230
PrintF("BFM:%d:LOGSTART %d",
2231
FMt(BFMA1o110)&FMt(BFMA1OLLi(1)));
2232
if BFMA1oll1(1) = nul then
2233
assert FAlse report "Logfile not defined, ignoring command" severity eRROr;
2234
else
2235
BFMA1I011 := (BFMA1l100(1)(0) = '1');
2236
BFMA1o111 := (BFMA1L100(1)(1) = '1');
2237
BFMA1L111 := (BFMA1l100(1)(2) = '1');
2238
BFMA1I111 := (BFMA1L100(1)(3) = '1');
2239
end if;
2240
when BFMA1lill =>
2241
BFMA1l1IOl := true;
2242
BFMA1I010 := 1;
2243
priNTF("BFM:%d:LOGSTOP",
2244
fmt(BFMA1O110));
2245
BFMA1I011 := FAlse;
2246
BFMA1O111 := FALse;
2247
BFMA1L111 := FALSe;
2248
BFMA1I111 := falSE;
2249
when BFMA1llLL =>
2250
BFMA1l1IOL := TRUe;
2251
BFMA1i010 := 1;
2252
PRintf("BFM:%d:VERSION",
2253
Fmt(BFMA1O110));
2254
PrintF("  BFM VHDL Version %s",
2255
FMT(BFMA1oo1I));
2256
priNTF("  BFM Date %s",
2257
fMT(BFMA1lo1I));
2258
prinTF("  SVN Revision $Revision: 22340 $");
2259
PRIntf("  SVN Date $Date: 2014-04-11 21:59:35 +0530 (Fri, 11 Apr 2014) $");
2260
PRintf("  Compiler Version %d",
2261
Fmt(BFMA1oOOOl));
2262
PRINtf("  Vectors Version %d",
2263
fmt(BFMA1IOool));
2264
pRINtf("  No of Vectors %d",
2265
Fmt(BFMA1LO10));
2266
if BFMA1oll1(1) /= Nul then
2267
sPRIntf(BFMA1ioL1,
2268
"%05t VR %s %s %d %d %d",
2269
Fmt(BFMA1oO1I)&fmT(BFMA1LO1i)&fMT(BFMA1OOOol)&FMt(BFMA1ioooL)&fMT(BFMA1lO10));
2270
wrITE(L,
2271
BFMA1iOL1);
2272
WRitelINE(BFMA1IL00,
2273
L);
2274
end if;
2275
when others =>
2276
pRINtf("BFM: Instruction %d Line Number %d Command %d",
2277
Fmt(BFMA1loLI)&Fmt(BFMA1o110)&FMt(BFMA1II10));
2278
prinTF("       Stimulus file %s  Line No %d",
2279
fmt(BFMA1O101(BFMA1OILi(BFMA1O110,
2280
BFMA1I101)))&Fmt(BFMA1IIli(BFMA1o110,
2281
BFMA1i101)));
2282
assert FALse report "Instruction not yet implemented" severity ERror;
2283
end case;
2284
end if;
2285
if BFMA1l1IOl then
2286
BFMA1O1O1 := falsE;
2287
BFMA1LOLi := BFMA1lolI+BFMA1i010;
2288
BFMA1I010 := 0;
2289
end if;
2290
end loop;
2291
BFMA1i1I1 := fALSe;
2292
BFMA1oo01 := FALse;
2293
BFMA1LO01 := fALSe;
2294
if BFMA1oLO0 = '1' then
2295
EXp := BFMA1I0o0 and BFMA1O1o0;
2296
BFMA1l1i1 := HrdatA and BFMA1O1o0;
2297
BFMA1I1I1 := (eXP = BFMA1L1i1);
2298
end if;
2299
if BFMA1o0L0 = '1' then
2300
Exp := BFMA1lll0 and BFMA1iLL0;
2301
BFMA1L1I1 := BFMA1O1L0 and BFMA1ILL0;
2302
BFMA1OO01 := (exp = BFMA1l1i1);
2303
end if;
2304
if BFMA1L0l0 = '1' then
2305
eXP := BFMA1I1o0 and BFMA1OOl0;
2306
BFMA1L1I1 := GP_in and BFMA1ool0;
2307
BFMA1LO01 := (exp = BFMA1l1i1);
2308
end if;
2309
BFMA1L001 := BFMA1lLO1 or BFMA1liO1
2310
or BFMA1ilo1
2311
or BFMA1oIO1
2312
or BFMA1iIO1
2313
or BFMA1l0O1
2314
or BFMA1i0o1
2315
or To_boOLEan(BFMA1OLO0 or BFMA1IOo0
2316
or BFMA1lOO0
2317
or BFMA1ooo0
2318
or BFMA1Iil0
2319
or BFMA1o0L0
2320
or BFMA1l0L0);
2321
if BFMA1OLO1 then
2322
case BFMA1o010 is
2323
when BFMA1LI0 =>
2324
if not BFMA1l001 then
2325
if BFMA1I1o1 <= 1 then
2326
BFMA1OLo1 := FALse;
2327
else
2328
BFMA1i1o1 := BFMA1i1o1-1;
2329
end if;
2330
end if;
2331
when BFMA1IO0 =>
2332
if BFMA1I1O1 <= 1 then
2333
BFMA1Olo1 := faLSE;
2334
else
2335
BFMA1i1O1 := BFMA1I1o1-1;
2336
end if;
2337
when BFMA1lOLL
2338
| BFMA1Ioll =>
2339
if (nOW/1 NS) >= BFMA1oloOL then
2340
BFMA1olO1 := fALSe;
2341
end if;
2342
when BFMA1ooi
2343
| BFMA1i1l
2344
| BFMA1l1l =>
2345
if BFMA1Ooi1 = 256 then
2346
BFMA1Ii11 := (InterRUPT /= BFMA1iO00);
2347
else
2348
BFMA1ii11 := (intERRupt(BFMA1OOI1) = '1');
2349
end if;
2350
if BFMA1Ii11 then
2351
ifPRIntf((Debug >= 2),
2352
"BFM:Interrupt Wait Time %d cycles",
2353
FMT(BFMA1o0I1));
2354
BFMA1oLO1 := fALSe;
2355
end if;
2356
when BFMA1ioi =>
2357
BFMA1I1l0 <= BFMA1OOO1;
2358
BFMA1L1L0 <= BFMA1Loo1;
2359
BFMA1lil0 <= '1';
2360
BFMA1oLO1 := faLSE;
2361
when BFMA1LII =>
2362
BFMA1I1L0 <= to_sLV32(BFMA1lLL1+BFMA1Oil1);
2363
BFMA1l1l0 <= TO_slv32(BFMA1IIl1(BFMA1OIL1));
2364
BFMA1liL0 <= '1';
2365
BFMA1OIL1 := BFMA1oIL1+1;
2366
if BFMA1oil1 >= BFMA1ilL1 then
2367
BFMA1OLo1 := FAlse;
2368
end if;
2369
when BFMA1olI
2370
| BFMA1Lli
2371
| BFMA1ILi =>
2372
BFMA1I1l0 <= BFMA1OOO1;
2373
BFMA1i1O0 <= BFMA1loO1;
2374
BFMA1ool0 <= BFMA1IOo1;
2375
BFMA1loL0 <= BFMA1o110;
2376
BFMA1iol0 <= '1';
2377
if BFMA1o0L0 = '1' then
2378
BFMA1olO1 := fALSe;
2379
end if;
2380
when BFMA1oiI =>
2381
if EXT_waIT = '0' and BFMA1I1o1 = 0 then
2382
IfpriNTF((DEbug >= 2),
2383
"BFM:Exteral Wait Time %d cycles",
2384
FMt(BFMA1O0i1));
2385
BFMA1oLO1 := falsE;
2386
end if;
2387
if BFMA1i1O1 >= 1 then
2388
BFMA1I1o1 := BFMA1I1O1-1;
2389
end if;
2390
when BFMA1O0l
2391
| BFMA1L0L
2392
| BFMA1LOl
2393
| BFMA1IIL =>
2394
BFMA1IOl0 <= '1';
2395
BFMA1i1o0 <= BFMA1loo1;
2396
BFMA1OOl0 <= BFMA1iOO1;
2397
BFMA1Lol0 <= BFMA1o110;
2398
BFMA1OLo1 := falSE;
2399
when BFMA1IOL =>
2400
BFMA1i1O0 <= BFMA1loo1;
2401
BFMA1ool0 <= BFMA1Ioo1;
2402
BFMA1lol0 <= BFMA1o110;
2403
BFMA1l0L0 <= '1';
2404
BFMA1IOL0 <= '0';
2405
if BFMA1L0l0 = '1' and BFMA1LO01 then
2406
BFMA1L0l0 <= '0';
2407
BFMA1oLO1 := False;
2408
ifprINTf((deBUG >= 2),
2409
"BFM:GP IO Wait Time %d cycles",
2410
fmt(BFMA1O0i1));
2411
end if;
2412
when BFMA1I00
2413
| BFMA1o10 =>
2414
case BFMA1olIOL is
2415
when BFMA1iiLOL =>
2416
BFMA1OLO1 := faLSE;
2417
when BFMA1o0LOL =>
2418
BFMA1liIOL := BFMA1olLI(1)+BFMA1OLLi(2);
2419
BFMA1iiIOL := 0;
2420
BFMA1i1LOL := BFMA1oLLI(3);
2421
BFMA1Ooiol := BFMA1OLLI(4) mod 65536;
2422
BFMA1oO0Ol := (BFMA1L100(4)(16) = '1');
2423
BFMA1lo0OL := (BFMA1l100(4)(17) = '1');
2424
BFMA1io0OL := (BFMA1L100(4)(18) = '1');
2425
BFMA1loIOL := BFMA1olli(5);
2426
BFMA1Ioiol := BFMA1Olli(6);
2427
if not BFMA1IO0ol then
2428
BFMA1LlioL := ( others => 0);
2429
end if;
2430
BFMA1l0iOL := 0;
2431
BFMA1I0iol := 0;
2432
BFMA1o1IOl := 0;
2433
BFMA1ol0OL := 0;
2434
BFMA1I1Iol := faLSE;
2435
if BFMA1o010 = BFMA1o10 then
2436
BFMA1lIIOl := BFMA1oLLI(1);
2437
BFMA1IIiol := BFMA1olLI(2)-BFMA1I1Lol;
2438
BFMA1i1Lol := 2*BFMA1I1lol;
2439
BFMA1i1IOL := TRUe;
2440
end if;
2441
if not BFMA1I1iol then
2442
PRIntf("BFM:%d: memtest Started at %t ns",
2443
FMT(BFMA1O110));
2444
PRintf("BFM:  Address %08x Size %d Cycles %5d",
2445
FMT(BFMA1LIiol)&fmt(BFMA1i1LOL)&Fmt(BFMA1loIOL));
2446
else
2447
PRintf("BFM:%d: dual memtest Started at %t ns",
2448
FMt(BFMA1o110));
2449
PrintF("BFM:  Address %08x & %08x Size %d Cycles %5d",
2450
fmt(BFMA1LIIol)&FMt(BFMA1iiiOL+BFMA1I1lol/2)&Fmt(BFMA1I1lol/2)&fmt(BFMA1LOIol));
2451
end if;
2452
case BFMA1OOIol is
2453
when 0 =>
2454
when 1 =>
2455
prinTF("BFM: Transfers are APB Byte aligned");
2456
when 2 =>
2457
prinTF("BFM: Transfers are APB Half Word aligned");
2458
when 3 =>
2459
priNTF("BFM: Transfers are APB Word aligned");
2460
when 4 =>
2461
pRINtf("BFM: Byte Writes Suppressed");
2462
when others =>
2463
assert FalsE report "Illegal Align on memtest" severity FAilurE;
2464
end case;
2465
if BFMA1IO0ol then
2466
priNTF("BFM: memtest restarted");
2467
end if;
2468
if BFMA1oo0OL then
2469
prinTF("BFM: Memtest Filling Memory");
2470
BFMA1OLiol := BFMA1I0lol;
2471
elsif BFMA1loiOL > 0 then
2472
prINTf("BFM: Memtest Random Read Writes");
2473
BFMA1oliOL := actIVE;
2474
elsif BFMA1LO0ol then
2475
pRINtf("BFM: Memtest Verifying Memory Content");
2476
BFMA1OlioL := BFMA1O1lol;
2477
else
2478
BFMA1OLIol := BFMA1L0Lol;
2479
end if;
2480
when aCTIve
2481
| BFMA1i0LOL
2482
| BFMA1o1loL =>
2483
if not (BFMA1LIo1 or BFMA1Llo1) then
2484
case BFMA1OlioL is
2485
when ACtivE =>
2486
BFMA1IOiol := BFMA1o0LI(BFMA1IOiol);
2487
BFMA1IlioL := BFMA1I0li(BFMA1IoioL,
2488
BFMA1I1lol);
2489
BFMA1IOiol := BFMA1o0li(BFMA1iOIOl);
2490
BFMA1OIIol := BFMA1I0Li(BFMA1Ioiol,
2491
8);
2492
when BFMA1I0lol =>
2493
BFMA1ilIOL := BFMA1oL0Ol;
2494
BFMA1OIiol := 6;
2495
when BFMA1o1LOl =>
2496
BFMA1iLIOl := BFMA1Ol0ol;
2497
BFMA1oiIOL := 2;
2498
when others =>
2499
end case;
2500
case BFMA1oOIOl is
2501
when 0 =>
2502
when 1 =>
2503
BFMA1iliOL := 4*(BFMA1ilioL/4);
2504
case BFMA1OIIol is
2505
when 0
2506
| 4 =>
2507
BFMA1OIiol := BFMA1oiiOL;
2508
when 1
2509
| 5 =>
2510
BFMA1oiioL := BFMA1OIIOl-1;
2511
when 2
2512
| 6 =>
2513
BFMA1OIIol := BFMA1OIIol-2;
2514
when others =>
2515
end case;
2516
when 2 =>
2517
BFMA1IlioL := 4*(BFMA1ILIol/4);
2518
case BFMA1OIiol is
2519
when 0
2520
| 4 =>
2521
BFMA1OIIol := BFMA1oIIOl+1;
2522
when 1
2523
| 5 =>
2524
BFMA1OIiol := BFMA1OIIol;
2525
when 2
2526
| 6 =>
2527
BFMA1OIIol := BFMA1OIIol-1;
2528
when others =>
2529
end case;
2530
when 3 =>
2531
BFMA1iliOL := 4*(BFMA1ILIol/4);
2532
case BFMA1Oiiol is
2533
when 0
2534
| 4 =>
2535
BFMA1OIIol := BFMA1OIiol+2;
2536
when 1
2537
| 5 =>
2538
BFMA1oIIOl := BFMA1oiioL+1;
2539
when 2
2540
| 6 =>
2541
BFMA1oIIOl := BFMA1oIIOl;
2542
when others =>
2543
end case;
2544
when 4 =>
2545
case BFMA1OIIol is
2546
when 4 =>
2547
BFMA1iLIOl := 2*(BFMA1iLIOl/2);
2548
BFMA1oiIOL := 5;
2549
when others =>
2550
end case;
2551
when others =>
2552
end case;
2553
if BFMA1Oiiol >= 0 and BFMA1OIiol <= 2 then
2554
case BFMA1oiioL is
2555
when 0 =>
2556
BFMA1I110 := "000";
2557
BFMA1ILiol := BFMA1iliOL;
2558
BFMA1O0Iol := (BFMA1LLiol(BFMA1iLIOl+0) >= 256);
2559
when 1 =>
2560
BFMA1I110 := "001";
2561
BFMA1ilIOL := 2*(BFMA1ILIOl/2);
2562
BFMA1o0IOl := ((BFMA1lliOL(BFMA1ILIol+0) >= 256) and (BFMA1LlioL(BFMA1ILIol+1) >= 256));
2563
when 2 =>
2564
BFMA1I110 := "010";
2565
BFMA1ILiol := 4*(BFMA1IlioL/4);
2566
BFMA1O0iol := ((BFMA1lLIOl(BFMA1iliOL+0) >= 256) and (BFMA1lLIOl(BFMA1iliOL+1) >= 256)
2567
and (BFMA1lliOL(BFMA1ILiol+2) >= 256)
2568
and (BFMA1lLIOL(BFMA1ILiol+3) >= 256));
2569
when others =>
2570
end case;
2571
if BFMA1O0iol then
2572
BFMA1llO1 := trUE;
2573
BFMA1l0IOL := BFMA1L0Iol+1;
2574
if BFMA1I1Iol and BFMA1iliOL >= BFMA1I1lol/2 then
2575
BFMA1OOO1 := To_slV32(BFMA1iiioL+BFMA1iliOL);
2576
else
2577
BFMA1oOO1 := TO_slv32(BFMA1Liiol+BFMA1ILIOl);
2578
end if;
2579
case BFMA1oiIOL is
2580
when 0 =>
2581
BFMA1LOO1 := BFMA1lO00(31 downto 8)&to_SLV32(BFMA1LLIol(BFMA1iLIOl+0))(7 downto 0);
2582
when 1 =>
2583
BFMA1Loo1 := BFMA1lO00(31 downto 16)&TO_slv32(BFMA1llioL(BFMA1iLIOl+1))(7 downto 0)&to_SLV32(BFMA1llIOL(BFMA1iliOL+0))(7 downto 0);
2584
when 2 =>
2585
BFMA1loo1 := to_sLV32(BFMA1llioL(BFMA1ILIol+3))(7 downto 0)&tO_slv32(BFMA1LLIol(BFMA1iLIOl+2))(7 downto 0)&TO_slv32(BFMA1lliOL(BFMA1ILiol+1))(7 downto 0)&To_slV32(BFMA1lliOL(BFMA1ILiol+0))(7 downto 0);
2586
when others =>
2587
BFMA1Loo1 := BFMA1LO00(31 downto 0);
2588
end case;
2589
BFMA1ioO1 := ( others => '1');
2590
else
2591
BFMA1OIIol := BFMA1OIIol+4;
2592
if BFMA1oiIOL = 4 and BFMA1ooIOL = 4 then
2593
BFMA1oIIOl := 5;
2594
end if;
2595
end if;
2596
end if;
2597
if BFMA1oIIOl >= 4 and BFMA1oiIOL <= 6 then
2598
BFMA1LIO1 := TRUe;
2599
BFMA1i0iOL := BFMA1I0Iol+1;
2600
BFMA1iOIOl := BFMA1O0li(BFMA1IOIol);
2601
BFMA1loO1 := to_SLv32(BFMA1ioiOL);
2602
case BFMA1OIIOl is
2603
when 4 =>
2604
BFMA1i110 := "000";
2605
BFMA1Iliol := BFMA1ilIOL;
2606
BFMA1llIOL(BFMA1IlioL+0) := 256+tO_Int_UNSignED(BFMA1LOo1(7 downto 0));
2607
when 5 =>
2608
BFMA1I110 := "001";
2609
BFMA1ILiol := 2*(BFMA1ILIol/2);
2610
BFMA1llioL(BFMA1iliOL+0) := 256+To_iNT_unsIGNed(BFMA1loo1(7 downto 0));
2611
BFMA1LLiol(BFMA1ILIol+1) := 256+To_inT_UnsiGNEd(BFMA1LOo1(15 downto 8));
2612
when 6 =>
2613
BFMA1I110 := "010";
2614
BFMA1Iliol := 4*(BFMA1Iliol/4);
2615
BFMA1LLIol(BFMA1ilIOL+0) := 256+TO_int_UnsigNEd(BFMA1LOO1(7 downto 0));
2616
BFMA1llIOL(BFMA1ILIOl+1) := 256+TO_int_UNsigNED(BFMA1Loo1(15 downto 8));
2617
BFMA1LLIol(BFMA1ilIOL+2) := 256+To_iNT_unsIGNed(BFMA1loo1(23 downto 16));
2618
BFMA1LLIol(BFMA1ilIOL+3) := 256+TO_int_UNsigNED(BFMA1LOO1(31 downto 24));
2619
when others =>
2620
end case;
2621
if BFMA1I1Iol and BFMA1ILiol >= BFMA1I1Lol/2 then
2622
BFMA1OOO1 := TO_slv32(BFMA1IiioL+BFMA1iLIOl);
2623
else
2624
BFMA1OOO1 := To_slV32(BFMA1LIIol+BFMA1ILiol);
2625
end if;
2626
end if;
2627
if BFMA1Oiiol = 3 or BFMA1OIiol = 7 then
2628
BFMA1o1IOL := BFMA1O1Iol+1;
2629
end if;
2630
BFMA1OL0ol := BFMA1OL0ol+4;
2631
case BFMA1olIOL is
2632
when acTIVe =>
2633
if BFMA1lOIOl > 0 then
2634
BFMA1LOIol := BFMA1LOIol-1;
2635
elsif BFMA1LO0ol then
2636
BFMA1ol0OL := 0;
2637
BFMA1oLIOL := BFMA1O1Lol;
2638
priNTF("BFM: Memtest Verifying Memory Content");
2639
else
2640
BFMA1OLIol := BFMA1L0Lol;
2641
end if;
2642
when BFMA1I0lol =>
2643
if BFMA1ol0OL >= BFMA1i1LOL then
2644
if BFMA1LOiol = 0 then
2645
if BFMA1Lo0ol then
2646
BFMA1OL0ol := 0;
2647
BFMA1oLIOl := BFMA1o1LOl;
2648
priNTF("BFM: Memtest Verifying Memory Content");
2649
else
2650
BFMA1oLIOl := BFMA1L0lol;
2651
end if;
2652
else
2653
BFMA1OLIOl := actiVE;
2654
prinTF("BFM: Memtest Random Read Writes");
2655
end if;
2656
end if;
2657
when BFMA1O1lol =>
2658
if BFMA1Ol0ol >= BFMA1i1LOL then
2659
BFMA1olioL := BFMA1L0lol;
2660
end if;
2661
when others =>
2662
end case;
2663
BFMA1lOL1 := BFMA1L110;
2664
end if;
2665
when BFMA1L0Lol =>
2666
if not BFMA1l001 then
2667
BFMA1OLIOl := BFMA1iILOl;
2668
PRIntf("BFM: bfmtest complete  Writes %d  Reads %d  Nops %d",
2669
Fmt(BFMA1I0iol)&fmt(BFMA1L0Iol)&fMT(BFMA1O1iol));
2670
end if;
2671
end case;
2672
when others =>
2673
end case;
2674
end if;
2675
if BFMA1o011 = 0 then
2676
BFMA1l011 := FAlse;
2677
BFMA1o011 := BFMA1Io11;
2678
else
2679
BFMA1O011 := BFMA1o011-1;
2680
BFMA1l011 := truE;
2681
end if;
2682
if HReady = '1' then
2683
BFMA1LI1i <= "00";
2684
BFMA1ii1I <= '0';
2685
BFMA1Loo0 <= '0';
2686
BFMA1ioo0 <= '0';
2687
BFMA1llo0 <= '0';
2688
if BFMA1Loo0 = '1' or BFMA1ioO0 = '1' then
2689
BFMA1OIO0 <= '0';
2690
end if;
2691
if BFMA1Lio1 and HREady = '1' then
2692
BFMA1l01I <= BFMA1ooO1;
2693
BFMA1Ii1i <= '1';
2694
BFMA1Ll1i <= BFMA1iI01;
2695
BFMA1li1I <= "10";
2696
BFMA1IL1i <= BFMA1OI01;
2697
BFMA1OI1i <= BFMA1li01;
2698
BFMA1o11I <= BFMA1I110;
2699
BFMA1l0o0 <= BFMA1L11l(BFMA1i110,
2700
BFMA1OOO1(1 downto 0),
2701
BFMA1loO1,
2702
BFMA1Il11);
2703
BFMA1loo0 <= '1';
2704
BFMA1ILI0 <= BFMA1O110;
2705
BFMA1liO1 := FAlse;
2706
end if;
2707
if BFMA1lLO1 and hREADy = '1' then
2708
BFMA1l01i <= BFMA1OOO1;
2709
BFMA1ii1i <= '0';
2710
BFMA1LL1i <= BFMA1II01;
2711
BFMA1LI1i <= "10";
2712
BFMA1iL1I <= BFMA1oI01;
2713
BFMA1Oi1i <= BFMA1li01;
2714
BFMA1O11i <= BFMA1i110;
2715
BFMA1Iio0 <= BFMA1L11l(BFMA1I110,
2716
BFMA1Ooo1(1 downto 0),
2717
BFMA1LOo1,
2718
BFMA1IL11);
2719
BFMA1o0o0 <= BFMA1IOoi(BFMA1i110,
2720
BFMA1oOO1(1 downto 0),
2721
BFMA1Ioo1,
2722
BFMA1iL11);
2723
BFMA1Ili0 <= BFMA1o110;
2724
BFMA1IOO0 <= '1';
2725
BFMA1OIO0 <= '1';
2726
BFMA1LLo1 := falSE;
2727
end if;
2728
if BFMA1l0O1 and hrEADy = '1' then
2729
BFMA1L01i <= BFMA1ooo1;
2730
BFMA1II1i <= BFMA1LIOol;
2731
BFMA1lL1I <= BFMA1O0Ool;
2732
BFMA1li1I <= BFMA1iIOOl;
2733
BFMA1IL1i <= BFMA1L0ool;
2734
BFMA1OI1i <= BFMA1I0ool;
2735
BFMA1O11i <= BFMA1I110;
2736
BFMA1L0o0 <= BFMA1l11L(BFMA1I110,
2737
BFMA1OOO1(1 downto 0),
2738
BFMA1Loo1,
2739
BFMA1iL11);
2740
BFMA1loo0 <= '1';
2741
BFMA1Ili0 <= BFMA1o110;
2742
BFMA1L0o1 := falsE;
2743
end if;
2744
if BFMA1iio1 and HreadY = '1' then
2745
BFMA1l01I <= BFMA1ooo1;
2746
BFMA1II1i <= '0';
2747
BFMA1LL1i <= BFMA1Ii01;
2748
BFMA1IL1i <= BFMA1OI01;
2749
BFMA1OI1i <= BFMA1li01;
2750
BFMA1o11I <= BFMA1I110;
2751
BFMA1IIO0 <= BFMA1L11l(BFMA1I110,
2752
BFMA1oOO1(1 downto 0),
2753
BFMA1loo1,
2754
BFMA1IL11);
2755
BFMA1o0O0 <= BFMA1iooI(BFMA1I110,
2756
BFMA1ooo1(1 downto 0),
2757
BFMA1ioo1,
2758
BFMA1il11);
2759
BFMA1ili0 <= BFMA1O110;
2760
if BFMA1ioo0 = '1' or BFMA1OLO0 = '1' then
2761
BFMA1LI1i <= "00";
2762
else
2763
BFMA1LI1i <= "10";
2764
BFMA1Ioo0 <= '1';
2765
BFMA1LLo0 <= '1';
2766
end if;
2767
if BFMA1ilo0 = '1' and BFMA1i1i1 then
2768
BFMA1IIo1 := FAlse;
2769
end if;
2770
end if;
2771
if BFMA1ILo1 and HReady = '1' then
2772
BFMA1L01i <= BFMA1OOO1;
2773
BFMA1II1i <= '1';
2774
BFMA1LL1i <= BFMA1II01;
2775
BFMA1Il1i <= BFMA1oi01;
2776
BFMA1oI1I <= BFMA1lI01;
2777
BFMA1o11I <= BFMA1i110;
2778
BFMA1Ili0 <= BFMA1o110;
2779
if BFMA1L011 then
2780
BFMA1LI1i <= "01";
2781
else
2782
BFMA1l0O0 <= BFMA1L11l(BFMA1i110,
2783
BFMA1oOO1(1 downto 0),
2784
TO_slV32(BFMA1iil1(BFMA1oiL1)),
2785
BFMA1IL11);
2786
BFMA1Loo0 <= '1';
2787
if BFMA1oil1 = 0 or BFMA1lI10 = 3
2788
or BOund1K(BFMA1ll11,
2789
BFMA1oOO1) then
2790
BFMA1li1I <= "10";
2791
else
2792
BFMA1LI1i <= "11";
2793
end if;
2794
BFMA1ooo1 := TO_std_LOgic(to_UNsignED(BFMA1ooo1)+BFMA1lIL1);
2795
BFMA1oil1 := BFMA1OIL1+1;
2796
if BFMA1OIl1 = BFMA1ILL1 then
2797
BFMA1ilo1 := FAlse;
2798
end if;
2799
end if;
2800
end if;
2801
if BFMA1oio1 and hreADY = '1' then
2802
BFMA1l01I <= BFMA1oOO1;
2803
BFMA1II1i <= '0';
2804
BFMA1Ll1i <= BFMA1II01;
2805
BFMA1IL1i <= BFMA1OI01;
2806
BFMA1oI1I <= BFMA1li01;
2807
BFMA1o11I <= BFMA1I110;
2808
BFMA1ILI0 <= BFMA1o110;
2809
if BFMA1l011 then
2810
BFMA1LI1i <= "01";
2811
else
2812
BFMA1Iio0 <= BFMA1L11l(BFMA1I110,
2813
BFMA1OOo1(1 downto 0),
2814
to_sLV32(BFMA1IIL1(BFMA1oil1)),
2815
BFMA1il11);
2816
BFMA1O0o0 <= BFMA1ioOI(BFMA1i110,
2817
BFMA1OOO1(1 downto 0),
2818
BFMA1ioo1,
2819
BFMA1il11);
2820
BFMA1IOO0 <= '1';
2821
BFMA1oIO0 <= '1';
2822
if BFMA1oIL1 = 0 or BFMA1LI10 = 3
2823
or boUND1k(BFMA1LL11,
2824
BFMA1ooO1) then
2825
BFMA1lI1I <= "10";
2826
else
2827
BFMA1li1i <= "11";
2828
end if;
2829
BFMA1OOo1 := TO_std_LOgic(tO_UnsiGNEd(BFMA1ooo1)+BFMA1lIL1);
2830
BFMA1OIl1 := BFMA1oIL1+1;
2831
if BFMA1oIL1 = BFMA1ilL1 then
2832
BFMA1oIO1 := FALse;
2833
end if;
2834
end if;
2835
end if;
2836
end if;
2837
if hreADY = '1' then
2838
BFMA1OOO0 <= BFMA1lOO0;
2839
BFMA1olO0 <= BFMA1IOo0;
2840
BFMA1iLO0 <= BFMA1llo0;
2841
BFMA1Lio0 <= BFMA1Oio0;
2842
BFMA1I0o0 <= BFMA1IIO0;
2843
BFMA1O1o0 <= BFMA1O0o0;
2844
BFMA1Oii0 <= BFMA1ILi0;
2845
BFMA1i01I <= BFMA1L01i;
2846
BFMA1L11i <= BFMA1o11i;
2847
end if;
2848
BFMA1O0l0 <= BFMA1iIL0;
2849
BFMA1OOi0 <= BFMA1I1l0;
2850
BFMA1OLl0 <= BFMA1ioL0;
2851
BFMA1lLL0 <= BFMA1i1O0;
2852
BFMA1ilL0 <= BFMA1oOL0;
2853
BFMA1OIl0 <= BFMA1lOL0;
2854
if HREady = '1' then
2855
if BFMA1loO0 = '1' then
2856
BFMA1l1o0 <= BFMA1L0O0;
2857
else
2858
BFMA1l1o0 <= ( others => '0');
2859
end if;
2860
if BFMA1oOO0 = '1' and dEBUg >= 3 then
2861
PrintF("BFM: Data Write %08x %08x",
2862
FMt(BFMA1I01i)&Fmt(BFMA1L1O0));
2863
end if;
2864
if BFMA1I011 and BFMA1ooo0 = '1' then
2865
SPrintF(BFMA1iol1,
2866
"%05t AW %c %08x %08x",
2867
FMT(BFMA1ILOi(BFMA1l11I))&fmt(BFMA1i01i)&FMT(BFMA1L1O0));
2868
wRITe(l,
2869
BFMA1iol1);
2870
WriteLINE(BFMA1il00,
2871
L);
2872
end if;
2873
end if;
2874
if BFMA1I0l0 = '1' and BFMA1l111 then
2875
SPRintf(BFMA1iOL1,
2876
"%05t GW   %08x ",
2877
fmT(BFMA1IIi0));
2878
WritE(L,
2879
BFMA1iOL1);
2880
wRITelinE(BFMA1IL00,
2881
L);
2882
end if;
2883
if BFMA1LIl0 = '1' and BFMA1O111 then
2884
SPrintF(BFMA1IOl1,
2885
"%05t EW   %08x %08x",
2886
fmt(BFMA1I1l0)&FMt(BFMA1l1L0));
2887
WRite(l,
2888
BFMA1ioL1);
2889
WRitelINE(BFMA1il00,
2890
l);
2891
end if;
2892
if HreadY = '1' then
2893
if BFMA1olo0 = '1' then
2894
if DEbug >= 3 then
2895
if BFMA1o1O0 = BFMA1lo00 then
2896
PrintF("BFM: Data Read %08x %08x",
2897
FMt(BFMA1i01I)&FMt(HrdatA));
2898
else
2899
prinTF("BFM: Data Read %08x %08x MASK:%08x",
2900
FMT(BFMA1I01i)&FMT(hRDAta)&FMt(BFMA1O1o0));
2901
end if;
2902
end if;
2903
if BFMA1i011 then
2904
SPRintF(BFMA1IOl1,
2905
"%05t AR %c %08x %08x",
2906
fmt(BFMA1iloi(BFMA1L11i))&FMt(BFMA1i01I)&FMt(hrdATA));
2907
writE(L,
2908
BFMA1ioL1);
2909
wrITElinE(BFMA1IL00,
2910
L);
2911
end if;
2912
if BFMA1o001 >= 0 then
2913
BFMA1i100(BFMA1o001) := BFMA1oiOI(BFMA1oloI(BFMA1l11I,
2914
BFMA1i01I(1 downto 0),
2915
hrdaTA,
2916
BFMA1il11));
2917
end if;
2918
if BFMA1liO0 = '1' and not BFMA1i1I1 then
2919
BFMA1Ll01 := BFMA1LL01+1;
2920
pRINtf("ERROR: AHB Data Read Comparison failed Addr:%08x  Got:%08x  EXP:%08x  (MASK:%08x)",
2921
fmt(BFMA1I01i)&Fmt(hRDAta)&fmt(BFMA1i0o0)&FMt(BFMA1o1O0));
2922
PRIntf("       Stimulus file %s  Line No %d",
2923
fmt(BFMA1O101(BFMA1oiLI(BFMA1oii0,
2924
BFMA1i101)))&fmt(BFMA1IIli(BFMA1Oii0,
2925
BFMA1i101)));
2926
assert faLSE report "BFM Data Compare Error" severity ERror;
2927
if BFMA1i011 then
2928
sPRINtf(BFMA1IOL1,
2929
"%05t ERROR  Addr:%08x  Got:%08x  EXP:%08x  (MASK:%08x)",
2930
fmt(BFMA1I01i)&FMT(HRData)&FMt(BFMA1i0o0)&fMT(BFMA1O1O0));
2931
writE(L,
2932
BFMA1iOL1);
2933
writELIne(BFMA1IL00,
2934
L);
2935
end if;
2936
end if;
2937
end if;
2938
end if;
2939
if BFMA1L0l0 = '1' then
2940
if debUG >= 3 then
2941
if BFMA1oOL0 = BFMA1Lo00 then
2942
PRintf("BFM: GP IO Data Read %08x",
2943
FMt(gp_In));
2944
else
2945
pRINtf("BFM: GP IO Data Read %08x MASK:%08x",
2946
Fmt(gP_In)&fmT(BFMA1oOL0));
2947
end if;
2948
end if;
2949
if BFMA1L111 then
2950
SPRintf(BFMA1IOL1,
2951
"%05t GR   %08x ",
2952
fmt(BFMA1I1O0));
2953
Write(L,
2954
BFMA1IOl1);
2955
WRitelINE(BFMA1Il00,
2956
L);
2957
end if;
2958
if BFMA1o001 >= 0 then
2959
BFMA1i100(BFMA1o001) := BFMA1Oioi(gp_In);
2960
end if;
2961
if BFMA1iol0 = '1' and not BFMA1LO01 then
2962
BFMA1LL01 := BFMA1LL01+1;
2963
PRIntf("GPIO input not as expected  Got:%08x  EXP:%08x  (MASK:%08x)",
2964
fMT(gp_IN)&FMt(BFMA1i1o0)&fmt(BFMA1ooL0));
2965
PRintf("       Stimulus file %s  Line No %d",
2966
fmt(BFMA1o101(BFMA1OIli(BFMA1loL0,
2967
BFMA1i101)))&fMT(BFMA1iILI(BFMA1loL0,
2968
BFMA1I101)));
2969
assert faLSE report "BFM GPIO Compare Error" severity errOR;
2970
if BFMA1L111 then
2971
sPRIntf(BFMA1IOL1,
2972
"ERROR  Got:%08x  EXP:%08x  (MASK:%08x)",
2973
fMT(gp_In)&FMT(BFMA1i1O0)&FMT(BFMA1ool0));
2974
wrITE(l,
2975
BFMA1IOL1);
2976
WRIteliNE(BFMA1il00,
2977
l);
2978
end if;
2979
end if;
2980
end if;
2981
if BFMA1o0l0 = '1' then
2982
if debuG >= 3 then
2983
if BFMA1ill0 = BFMA1lo00 then
2984
pRINtf("BFM: Extention Data Read %08x %08x",
2985
fMT(BFMA1oOI0)&FMt(BFMA1o1L0));
2986
else
2987
PrintF("BFM: Extention Data Read %08x %08x MASK:%08x",
2988
fmt(BFMA1OOI0)&fmt(BFMA1o1L0)&FMT(BFMA1ill0));
2989
end if;
2990
end if;
2991
if BFMA1o111 then
2992
SpriNTF(BFMA1IOL1,
2993
"%05t ER   %08x %08x",
2994
FMT(BFMA1Ooi0)&FMT(BFMA1LLL0));
2995
WRite(l,
2996
BFMA1iOL1);
2997
writELIne(BFMA1il00,
2998
l);
2999
end if;
3000
if BFMA1O001 >= 0 then
3001
BFMA1I100(BFMA1o001) := BFMA1oioI(BFMA1O1l0);
3002
end if;
3003
if BFMA1olL0 = '1' and not BFMA1Oo01 then
3004
BFMA1lL01 := BFMA1ll01+1;
3005
prinTF("ERROR: Extention Data Read Comparison failed  Got:%08x  EXP:%08x  (MASK:%08x)",
3006
fMT(BFMA1O1L0)&fmt(BFMA1llL0)&FMt(BFMA1iLL0));
3007
prINTf("       Stimulus file %s  Line No %d",
3008
FMt(BFMA1O101(BFMA1Oili(BFMA1OIl0,
3009
BFMA1I101)))&fmt(BFMA1IILi(BFMA1OIl0,
3010
BFMA1i101)));
3011
assert falSE report "BFM Extention Data Compare Error" severity erROR;
3012
if BFMA1O111 then
3013
sPRIntf(BFMA1IOL1,
3014
"ERROR  Got:%08x  EXP:%08x  (MASK:%08x)",
3015
fmt(BFMA1o1l0)&fmt(BFMA1lLL0)&FMt(BFMA1ILL0));
3016
wRITe(L,
3017
BFMA1IOl1);
3018
writELIne(BFMA1il00,
3019
L);
3020
end if;
3021
end if;
3022
end if;
3023
BFMA1i001 := BFMA1LLO1 or BFMA1lio1
3024
or BFMA1iLO1
3025
or BFMA1oIO1
3026
or BFMA1IIO1
3027
or BFMA1L0O1
3028
or to_BooleAN(BFMA1IOo0 or BFMA1LOo0
3029
or BFMA1IIL0
3030
or BFMA1l0L0)
3031
or (tO_boolEAN((BFMA1OLo0 or BFMA1OOO0) and not hreaDY));
3032
if BFMA1olo1 then
3033
case BFMA1o010 is
3034
when BFMA1il1 =>
3035
if not BFMA1I001 then
3036
iFPRintF((dEBUg >= 2),
3037
"BFM:%d:checktime was %d cycles ",
3038
fmt(BFMA1o110)&fMT(BFMA1O0I1));
3039
if BFMA1O0i1 < BFMA1olli(1) or BFMA1O0i1 > BFMA1olLI(2) then
3040
pRINtf("BFM: ERROR checktime %d %d Actual %d",
3041
Fmt(BFMA1OLli(1))&Fmt(BFMA1Olli(2))&Fmt(BFMA1O0I1));
3042
PRintF("       Stimulus file %s  Line No %d",
3043
fmt(BFMA1O101(BFMA1OIli(BFMA1o110,
3044
BFMA1I101)))&FMt(BFMA1iILI(BFMA1o110,
3045
BFMA1I101)));
3046
assert fALSe report "BFM checktime failure" severity ERror;
3047
BFMA1LL01 := BFMA1LL01+1;
3048
end if;
3049
BFMA1OLo1 := falSE;
3050
BFMA1l1OOL := BFMA1O0i1;
3051
end if;
3052
when BFMA1ii1 =>
3053
if not BFMA1i001 then
3054
BFMA1oILOl := BFMA1oilOL-1;
3055
IFpriNTF((deBUG >= 2),
3056
"BFM:%d:checktimer was %d cycles ",
3057
Fmt(BFMA1O110)&FMT(BFMA1OIlol));
3058
if BFMA1oilOL < BFMA1ollI(1) or BFMA1OIlol > BFMA1ollI(2) then
3059
prinTF("BFM: ERROR checktimer %d %d Actual %d",
3060
Fmt(BFMA1OLli(1))&fmt(BFMA1oLLI(2))&Fmt(BFMA1oiloL));
3061
PRintf("       Stimulus file %s  Line No %d",
3062
fmt(BFMA1O101(BFMA1OILi(BFMA1o110,
3063
BFMA1I101)))&fmT(BFMA1iili(BFMA1O110,
3064
BFMA1i101)));
3065
assert fALSe report "BFM checktimer failure" severity Error;
3066
BFMA1lL01 := BFMA1Ll01+1;
3067
end if;
3068
BFMA1olo1 := falSE;
3069
BFMA1O1ooL := BFMA1OILol;
3070
end if;
3071
when others =>
3072
end case;
3073
end if;
3074
if BFMA1OI11 then
3075
if BFMA1lol1 > 0 then
3076
BFMA1lOL1 := BFMA1LOL1-1;
3077
else
3078
BFMA1LOl1 := BFMA1l110;
3079
priNTF("       BFM Command Timeout Occured");
3080
prINTf("       Stimulus file %s  Line No %d",
3081
FMT(BFMA1O101(BFMA1oilI(BFMA1OII0,
3082
BFMA1I101)))&fmt(BFMA1iILI(BFMA1OII0,
3083
BFMA1i101)));
3084
assert BFMA1l0l1 report "BFM Command timeout occured" severity erroR;
3085
assert not BFMA1l0L1 report "BFM Completed and timeout occured" severity ErroR;
3086
end if;
3087
else
3088
BFMA1loL1 := BFMA1l110;
3089
end if;
3090
if BFMA1Ll01 > 0 then
3091
BFMA1i0i0 <= '1';
3092
end if;
3093
if BFMA1olo1 or BFMA1lLO1
3094
or BFMA1lio1
3095
or BFMA1ILO1
3096
or BFMA1OIO1
3097
or BFMA1IIo1
3098
or BFMA1l0O1
3099
or ((BFMA1o0O1 or BFMA1Ol11) and BFMA1l001) then
3100
BFMA1o1O1 := TRue;
3101
else
3102
BFMA1O0O1 := falSE;
3103
if not BFMA1L0L1 then
3104
BFMA1O1o1 := FAlse;
3105
end if;
3106
BFMA1lOLI := BFMA1LOli+BFMA1i010;
3107
BFMA1I010 := 0;
3108
if opmoDE > 0 then
3109
if BFMA1lI11 or BFMA1L0L1 then
3110
BFMA1OI11 := FalsE;
3111
BFMA1o1O1 := fALSe;
3112
end if;
3113
end if;
3114
end if;
3115
if BFMA1l0i0 = '0' and oPMOde = 0
3116
and BFMA1l0l1
3117
and not BFMA1L001 then
3118
PRintf("###########################################################");
3119
PRintf(" ");
3120
if BFMA1ll01 = 0 then
3121
PRintf("BFM Simulation Complete - %d Instructions - NO ERRORS",
3122
fmT(BFMA1L0i1));
3123
else
3124
prINTf("BFM Simulation Complete - %d Instructions - %d ERRORS OCCURED",
3125
fmt(BFMA1L0i1)&Fmt(BFMA1Ll01));
3126
end if;
3127
PRintf(" ");
3128
priNTF("###########################################################");
3129
pRINTf(" ");
3130
BFMA1l0I0 <= '1';
3131
BFMA1o1O1 := truE;
3132
BFMA1oI11 := falSE;
3133
if BFMA1OLL1(1) /= nul then
3134
FIle_cLOSe(BFMA1Il00);
3135
end if;
3136
case BFMA1Ll0oL is
3137
when 1 =>
3138
assert False report "BFM Completed" severity noTE;
3139
when 2 =>
3140
assert falSE report "BFM Completed" severity WarniNG;
3141
when 3 =>
3142
assert FALse report "BFM Completed" severity eRROr;
3143
when 4 =>
3144
assert FalsE report "BFM Completed" severity failURE;
3145
when others =>
3146
end case;
3147
end if;
3148
con_BUsy <= to_sTD_logIC(BFMA1oi11 or BFMA1l001);
3149
inSTR_out <= TO_slv32(BFMA1LOLi);
3150
end if;
3151
end process;
3152
Gp_ouT <= BFMA1iii0 after BFMA1Ol00;
3153
EXt_wr <= BFMA1lil0 after BFMA1OL00;
3154
ext_RD <= BFMA1IIl0 after BFMA1OL00;
3155
Ext_ADDr <= BFMA1I1l0 after BFMA1OL00;
3156
EXT_datA <= BFMA1L1l0 when BFMA1LIl0 = '1' else
3157
( others => 'Z') after BFMA1oL00;
3158
BFMA1o1L0 <= ext_DATa;
3159
process (BFMA1l01I,SYsrstN)
3160
begin
3161
if sySRStn = '0' then
3162
BFMA1I11i <= ( others => '0');
3163
else
3164
for BFMA1i0II in 0 to 15
3165
loop
3166
BFMA1I11i(BFMA1i0ii) <= to_sTD_logIC(to_INTeger((to_UNSignED(BFMA1L01i(31 downto 28)))) = BFMA1I0ii);
3167
end loop;
3168
end if;
3169
end process;
3170
hclk <= 'X' when BFMA1o1i0 else
3171
(SYsclk or BFMA1lII0);
3172
PClk <= 'X' when BFMA1O1I0 else
3173
(SysclK or BFMA1lii0);
3174
hreSETn <= 'X' when BFMA1L1i0 else
3175
BFMA1OL1i after BFMA1ol00;
3176
HADdr <= ( others => 'X') when BFMA1I1I0 else
3177
BFMA1L01i after BFMA1ol00;
3178
hwdaTA <= ( others => 'X') when BFMA1Oo00 else
3179
BFMA1L1o0 after BFMA1Ol00;
3180
hbURSt <= ( others => 'X') when BFMA1i1I0 else
3181
BFMA1ll1I after BFMA1Ol00;
3182
hmASTlocK <= 'X' when BFMA1i1I0 else
3183
BFMA1IL1i after BFMA1Ol00;
3184
hprOT <= ( others => 'X') when BFMA1I1i0 else
3185
BFMA1oi1I after BFMA1OL00;
3186
hsIZE <= ( others => 'X') when BFMA1I1i0 else
3187
BFMA1O11i after BFMA1OL00;
3188
HTranS <= ( others => 'X') when BFMA1i1I0 else
3189
BFMA1LI1i after BFMA1OL00;
3190
HwritE <= 'X' when BFMA1I1i0 else
3191
BFMA1ii1I after BFMA1OL00;
3192
hsEL <= ( others => 'X') when BFMA1i1i0 else
3193
BFMA1I11i after BFMA1OL00;
3194
con_DATa <= BFMA1iOI0 when BFMA1olI0 = '1' else
3195
( others => 'Z') after BFMA1OL00;
3196
BFMA1Loi0 <= cON_datA;
3197
FinisHED <= BFMA1l0I0 after BFMA1oL00;
3198
failED <= BFMA1i0i0 after BFMA1oL00;
3199
end BFMA1I10i;

powered by: WebSVN 2.1.0

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