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_package.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: 29809 $
9
-- SVN $Date: 2017-05-12 15:13:23 +0530 (Fri, 12 May 2017) $
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
package bfM_packAGE is
17
 
18
constant BFMA1O: inTEGer := 22;
19
 
20
constant BFMA1l: iNTEger := 0;
21
 
22
constant BFMA1I: InteGER := 4;
23
 
24
constant BFMA1OL: iNTEger := 8;
25
 
26
constant BFMA1LL: INtegeR := 12;
27
 
28
constant BFMA1il: iNTEger := 16;
29
 
30
constant BFMA1OI: INTegeR := 20;
31
 
32
constant BFMA1LI: IntegER := 24;
33
 
34
constant BFMA1Ii: IntegER := 28;
35
 
36
constant BFMA1o0: IntegER := 32;
37
 
38
constant BFMA1l0: INtegER := 36;
39
 
40
constant BFMA1i0: inTEGer := 40;
41
 
42
constant BFMA1O1: intEGEr := 44;
43
 
44
constant BFMA1l1: INTegeR := 48;
45
 
46
constant BFMA1i1: inteGER := 52;
47
 
48
constant BFMA1OOL: InteGER := 56;
49
 
50
constant BFMA1LOL: INtegeR := 60;
51
 
52
constant BFMA1ioL: inTEGEr := 64;
53
 
54
constant BFMA1oll: IntegER := 68;
55
 
56
constant BFMA1LLl: iNTEger := 72;
57
 
58
constant BFMA1ILl: inTEGer := 76;
59
 
60
constant BFMA1OIL: inteGER := 80;
61
 
62
constant BFMA1LIl: iNTEger := 100;
63
 
64
constant BFMA1Iil: intEGEr := 101;
65
 
66
constant BFMA1O0l: InteGER := 102;
67
 
68
constant BFMA1L0l: inteGER := 103;
69
 
70
constant BFMA1i0l: intEGEr := 104;
71
 
72
constant BFMA1o1L: inteGER := 105;
73
 
74
constant BFMA1L1l: inTEGer := 106;
75
 
76
constant BFMA1i1L: INtegeR := 107;
77
 
78
constant BFMA1Ooi: intEGEr := 108;
79
 
80
constant BFMA1LOI: inteGER := 109;
81
 
82
constant BFMA1iOI: INTeger := 110;
83
 
84
constant BFMA1Oli: inteGER := 111;
85
 
86
constant BFMA1lLI: inTEGer := 112;
87
 
88
constant BFMA1ili: INtegER := 113;
89
 
90
constant BFMA1oiI: IntegER := 114;
91
 
92
constant BFMA1lii: iNTEger := 115;
93
 
94
constant BFMA1iii: INTEger := 128;
95
 
96
constant BFMA1O0I: INTegeR := 129;
97
 
98
constant BFMA1l0i: inTEGer := 130;
99
 
100
constant BFMA1I0i: InteGER := 131;
101
 
102
constant BFMA1o1i: INtegeR := 132;
103
 
104
constant BFMA1l1i: INtegeR := 133;
105
 
106
constant BFMA1i1I: inTEGer := 134;
107
 
108
constant BFMA1OO0: InteGER := 135;
109
 
110
constant BFMA1lO0: intEGEr := 136;
111
 
112
constant BFMA1iO0: IntegER := 137;
113
 
114
constant BFMA1Ol0: INTegeR := 138;
115
 
116
constant BFMA1ll0: INTegeR := 139;
117
 
118
constant BFMA1iL0: INTeger := 140;
119
 
120
constant BFMA1oi0: INTeger := 141;
121
 
122
constant BFMA1LI0: IntegER := 142;
123
 
124
constant BFMA1II0: inTEGEr := 150;
125
 
126
constant BFMA1o00: intEGEr := 151;
127
 
128
constant BFMA1l00: IntegER := 152;
129
 
130
constant BFMA1I00: IntegER := 153;
131
 
132
constant BFMA1o10: InteGER := 154;
133
 
134
constant BFMA1L10: iNTEger := 160;
135
 
136
constant BFMA1i10: inteGER := 161;
137
 
138
constant BFMA1oO1: IntegER := 162;
139
 
140
constant BFMA1lo1: inTEGEr := 163;
141
 
142
constant BFMA1iO1: intEGEr := 164;
143
 
144
constant BFMA1OL1: INTeger := 165;
145
 
146
constant BFMA1LL1: inteGER := 166;
147
 
148
constant BFMA1Il1: iNTEger := 167;
149
 
150
constant BFMA1OI1: IntegER := 168;
151
 
152
constant BFMA1Li1: INTegeR := 169;
153
 
154
constant BFMA1ii1: INTeger := 170;
155
 
156
constant BFMA1o01: IntegER := 171;
157
 
158
constant BFMA1L01: intEGEr := 172;
159
 
160
constant BFMA1i01: InteGER := 200;
161
 
162
constant BFMA1o11: IntegER := 201;
163
 
164
constant BFMA1l11: iNTEger := 202;
165
 
166
constant BFMA1I11: INTeger := 203;
167
 
168
constant BFMA1oOOL: INtegeR := 204;
169
 
170
constant BFMA1looL: inteGER := 205;
171
 
172
constant BFMA1iOOL: IntegER := 206;
173
 
174
constant BFMA1OLOl: inTEGer := 207;
175
 
176
constant BFMA1llOL: IntegER := 208;
177
 
178
constant BFMA1ILOl: inTEGer := 209;
179
 
180
constant BFMA1Oiol: inTEGer := 210;
181
 
182
constant BFMA1Liol: INtegeR := 211;
183
 
184
constant BFMA1IIol: INtegeR := 212;
185
 
186
constant BFMA1O0ol: INtegeR := 213;
187
 
188
constant BFMA1L0ol: INtegER := 214;
189
 
190
constant BFMA1i0OL: inTEGer := 215;
191
 
192
constant BFMA1o1oL: INtegeR := 216;
193
 
194
constant BFMA1L1ol: inteGER := 217;
195
 
196
constant BFMA1i1OL: InteGER := 218;
197
 
198
constant BFMA1Ooll: intEGEr := 219;
199
 
200
constant BFMA1LOll: INtegeR := 220;
201
 
202
constant BFMA1iolL: IntegER := 221;
203
 
204
constant BFMA1oLLL: inteGER := 222;
205
 
206
constant BFMA1lLLL: IntegER := 250;
207
 
208
constant BFMA1ILLl: InteGER := 251;
209
 
210
constant BFMA1OILl: INTeger := 252;
211
 
212
constant BFMA1LIll: iNTEGer := 253;
213
 
214
constant BFMA1iiLL: intEGEr := 254;
215
 
216
constant BFMA1o0ll: IntegER := 255;
217
 
218
constant BFMA1L0Ll: IntegER := 1001;
219
 
220
constant BFMA1I0ll: IntegER := 1002;
221
 
222
constant BFMA1O1Ll: inTEGer := 1003;
223
 
224
constant BFMA1l1LL: IntegER := 1004;
225
 
226
constant BFMA1i1LL: inteGER := 1005;
227
 
228
constant BFMA1ooil: intEGEr := 1006;
229
 
230
constant BFMA1lOIL: INTEger := 1007;
231
 
232
constant BFMA1IOil: iNTEGer := 1008;
233
 
234
constant BFMA1olil: INtegER := 1009;
235
 
236
constant BFMA1llil: INTegeR := 1010;
237
 
238
constant BFMA1ilIL: IntegER := 1011;
239
 
240
constant BFMA1OIIl: INtegeR := 1012;
241
 
242
constant BFMA1liil: inTEGer := 1013;
243
 
244
constant BFMA1iIIL: IntegER := 1014;
245
 
246
constant BFMA1o0IL: InteGER := 1015;
247
 
248
constant BFMA1L0il: inteGER := 1016;
249
 
250
constant BFMA1I0il: INtegeR := 1017;
251
 
252
constant BFMA1o1IL: inteGER := 1018;
253
 
254
constant BFMA1L1Il: iNTEGer := 1019;
255
 
256
constant BFMA1i1IL: INtegeR := 1020;
257
 
258
constant BFMA1OO0l: intEGEr := 1021;
259
 
260
constant BFMA1LO0l: INTegeR := 1022;
261
 
262
constant BFMA1Io0l: IntegER := 1023;
263
 
264
constant BFMA1ol0L: INTeger := 0;
265
 
266
constant BFMA1ll0L: inTEGer := 1;
267
 
268
constant BFMA1IL0l: iNTEger := 2;
269
 
270
constant BFMA1oI0L: inteGER := 3;
271
 
272
constant BFMA1lI0L: inteGER := 4;
273
 
274
constant BFMA1Ii0l: INtegeR := 0;
275
 
276
constant BFMA1O00l: INTegeR := 1;
277
 
278
constant BFMA1l00L: iNTEger := 2;
279
 
280
constant BFMA1i00L: INTegeR := 3;
281
 
282
constant BFMA1o10L: integER := 4;
283
 
284
constant BFMA1l10L: INtegER := 5;
285
 
286
constant BFMA1I10l: INTEger := 6;
287
 
288
constant BFMA1OO1l: intEGEr := 7;
289
 
290
constant BFMA1lo1L: INTegeR := 8;
291
 
292
constant BFMA1Io1l: inTEGer := 16#00000000#;
293
 
294
constant BFMA1OL1l: iNTEger := 16#00002000#;
295
 
296
constant BFMA1ll1L: inTEGer := 16#00004000#;
297
 
298
constant BFMA1IL1l: inTEGer := 16#00006000#;
299
 
300
constant BFMA1oI1l: iNTEger := 16#00008000#;
301
 
302
type BFMA1li1L is (BFMA1II1l,BFMA1O01l,BFMA1l01L,X);
303
 
304
subtype BFMA1I01l is sTD_logiC_VectOR(31 downto 0);
305
 
306
type BFMA1O11l is array (INTegeR range <> ) of BFMA1I01l;
307
 
308
function BFMA1L11l(siZE: STD_loGIC_vecTOr(2 downto 0);
309
BFMA1I11l: sTD_logIC_vecTOR(1 downto 0);
310
BFMA1Oooi: Std_lOGIc_vECTor(31 downto 0);
311
BFMA1LOOi: iNTEGer)
312
return std_LOgic_VEctoR;
313
 
314
function BFMA1Iooi(sizE: std_LOGic_vECTor(2 downto 0);
315
BFMA1I11l: stD_logiC_VectOR(1 downto 0);
316
BFMA1oOOI: STD_logIC_veCTOr(31 downto 0);
317
BFMA1Looi: IntegER)
318
return std_LOgic_VEctor;
319
 
320
function BFMA1OLOi(sIZE: STd_lOGIc_veCTOr(2 downto 0);
321
BFMA1i11l: std_LOGic_vECTor(1 downto 0);
322
BFMA1OOoi: Std_lOGIc_veCTOr(31 downto 0);
323
BFMA1looI: INtegeR)
324
return stD_LogiC_VectOR;
325
 
326
function BFMA1lloI(x: iNTEger)
327
return CHAracTER;
328
 
329
function BFMA1ILOi(Size: iNTEger)
330
return charACTer;
331
 
332
function BFMA1ILOi(SIze: Std_lOGIc_vECTor)
333
return CHAractER;
334
 
335
function BFMA1OIOi(BFMA1lioi: STD_logIC_veCTOr)
336
return intEGEr;
337
 
338
function tO_Slv32(X: iNTEger)
339
return std_LOGic_vECTor;
340
 
341
function BFMA1iioI(size: inTEGer;
342
BFMA1O0oi: INtegeR)
343
return INTegeR;
344
 
345
function BFMA1l0oI(sIZE: IntegER;
346
BFMA1I0Oi: inteGER)
347
return STD_logIC_veCTOr;
348
 
349
 impure function BFMA1O1oi(BFMA1L1oi: intEGEr;
350
X,y: intEGEr;
351
deBUG: InteGER)
352
return iNTEger;
353
 
354
function BFMA1i1OI(X: STd_lOGIC_veCTOr)
355
return std_Logic_VEctoR;
356
 
357
 impure function BFMA1OOLi(BFMA1lOLI: INTeger;
358
BFMA1ioLI: iNTEGer_ARRay;
359
BFMA1OLli: intEGEr_arRAY)
360
return STRing;
361
 
362
function BFMA1llli(BFMA1ilLI: InteGER)
363
return inteGER;
364
 
365
function BFMA1OIli(BFMA1liLI,x: IntegER)
366
return INTeger;
367
 
368
function BFMA1Iili(BFMA1Lili,x: INTeger)
369
return intEGEr;
370
 
371
function To_inT_signED(BFMA1lioi: STD_logIC_veCTOr)
372
return IntegER;
373
 
374
function tO_Int_uNSIgneD(BFMA1liOI: Std_lOGIc_vECTor)
375
return IntegER;
376
 
377
function BFMA1o0li(SEed: INTeger)
378
return IntegER;
379
 
380
function BFMA1L0Li(Seed: INtegeR;
381
Size: inteGER)
382
return IntegeR;
383
 
384
function BFMA1i0li(SEEd: intEGEr;
385
SIZe: INTeger)
386
return IntegER;
387
 
388
function BounD1K(BFMA1O1li: INtegeR;
389
BFMA1l1LI: sTD_logIC_vecTOR)
390
return bOOLEan;
391
 
392
component bfm_Main
393
generic (oPMODe: inteGER range 0 to 2 := 0;
394
VectfILE: stRINg := "test.vec";
395
mAX_insTRUctiONS: INtegeR := 16384;
396
MAx_stACK: inteGER := 1024;
397
max_MemteST: INTEger := 65536;
398
tpD: InteGER range 0 to 1000 := 1;
399
debuGLEvel: inTEGer range -1 to 5 := -1;
400
coN_SpulSE: IntegER range 0 to 1 := 0;
401
aRGValue0: INTegeR := 0;
402
aRGValue1: iNTEGer := 0;
403
arGVAlue2: INTeger := 0;
404
arGVAlue3: inTEGer := 0;
405
argVALue4: INtegeR := 0;
406
ARgvaLUE5: inTEGer := 0;
407
argvALUe6: inTEGer := 0;
408
argvALUe7: inTEGer := 0;
409
ARGvaluE8: InteGER := 0;
410
ArgvALUe9: IntegER := 0;
411
argvALUe10: intEGEr := 0;
412
argVALue11: intEGEr := 0;
413
ARGvalUE12: INtegER := 0;
414
ArgvALUe13: INtegeR := 0;
415
ArgvALUe14: IntegER := 0;
416
ARGValuE15: INtegeR := 0;
417
arGVAlue16: INTEger := 0;
418
arGVALue17: INtegeR := 0;
419
argvALUe18: inTEGer := 0;
420
argvALUe19: inteGER := 0;
421
aRGValue20: INTeger := 0;
422
ArgvALUe21: INTeger := 0;
423
arGVAlue22: inteGER := 0;
424
argvALUe23: inTEGer := 0;
425
aRGValue24: inteGER := 0;
426
argVALue25: INTeger := 0;
427
ARgvalUE26: INteGEr := 0;
428
ARgvalUE27: INtegeR := 0;
429
argVALue28: IntegER := 0;
430
argvALUe29: IntegER := 0;
431
ARgvaLUE30: inTEGer := 0;
432
ARgvalUE31: inTEGEr := 0;
433
argVALue32: intEGEr := 0;
434
ARGvaluE33: intEGEr := 0;
435
argvALUe34: inteGER := 0;
436
arGVAlue35: INTeger := 0;
437
arGVAlue36: inteGER := 0;
438
aRGVAlue37: inTEGer := 0;
439
ARGvaluE38: inteGER := 0;
440
ARGvalUE39: inTEGer := 0;
441
argVALue40: inteGER := 0;
442
argVALue41: inTEGEr := 0;
443
argVALue42: intEGER := 0;
444
arGVAlue43: intEGEr := 0;
445
aRGValue44: intEGEr := 0;
446
ARGvaluE45: inTEGer := 0;
447
argvALUe46: INTeger := 0;
448
ArgvALUe47: iNTEGer := 0;
449
arGVAlue48: IntegER := 0;
450
aRGValue49: INTeger := 0;
451
arGVAlue50: iNTEger := 0;
452
arGVAlue51: intEGEr := 0;
453
aRGValue52: iNTEger := 0;
454
ARGvaluE53: iNTEger := 0;
455
aRGValue54: INTeger := 0;
456
aRGValue55: inteGER := 0;
457
aRGVAlue56: inteGER := 0;
458
ARGvaluE57: INtegER := 0;
459
ARGvalUE58: IntegER := 0;
460
argvALUe59: IntegER := 0;
461
argvALUe60: INtegeR := 0;
462
ArgvALUe61: INtegeR := 0;
463
argVALue62: INTegeR := 0;
464
aRGValue63: InteGER := 0;
465
argvALUe64: intEGEr := 0;
466
argVALue65: IntegER := 0;
467
arGVAlue66: INTegeR := 0;
468
argvALUe67: INtegeR := 0;
469
aRGValue68: iNTEGer := 0;
470
aRGValue69: iNTEGer := 0;
471
ArgvaLUE70: inTEGer := 0;
472
ARGvaluE71: intEGEr := 0;
473
argvALUe72: inTEGer := 0;
474
ARgvalUE73: integER := 0;
475
ArgvaLUE74: IntegER := 0;
476
ARgvaLUE75: inteGER := 0;
477
ARGvaluE76: INTeger := 0;
478
ARGvaluE77: inTEGer := 0;
479
ARgvalUE78: INTeger := 0;
480
argvALUe79: INtegER := 0;
481
ArgvaLUE80: inteGER := 0;
482
ArgvaLUE81: inteGER := 0;
483
arGVAlue82: inTEGer := 0;
484
aRGValue83: iNTEger := 0;
485
ArgvALUe84: iNTEger := 0;
486
argvALUe85: IntegER := 0;
487
aRGValue86: INTeger := 0;
488
arGVALue87: inteGER := 0;
489
ArgvaLUE88: intEGEr := 0;
490
ARgvalUE89: inteGER := 0;
491
ARGvaluE90: INTegeR := 0;
492
ArgvaLUE91: IntegER := 0;
493
argVALue92: INtegER := 0;
494
ARGvalUE93: inTEGer := 0;
495
ArgvaLUE94: intEGEr := 0;
496
ARgvaLUE95: intEGEr := 0;
497
aRGValue96: inteGER := 0;
498
argvALUe97: inteGER := 0;
499
ARgvalUE98: inteGER := 0;
500
aRGValue99: INTeger := 0);
501
port (sYSClk: in Std_lOGIc;
502
SysrsTN: in Std_lOGIC;
503
pclk: out sTD_logIC;
504
hCLK: out sTD_logIC;
505
HResetN: out STD_logIC;
506
hadDR: out STD_logIC_vecTOr(31 downto 0);
507
HBUrst: out STD_logIC_veCTOr(2 downto 0);
508
HMastlOCK: out Std_LOGic;
509
hpROT: out std_LOGic_VECtor(3 downto 0);
510
hSIZe: out sTD_logIC_vecTOR(2 downto 0);
511
HTRans: out stD_logiC_VectOR(1 downto 0);
512
HwriTE: out sTD_logIC;
513
HwdatA: out STd_loGIC_veCTOr(31 downto 0);
514
hrDATa: in stD_LogiC_VectOR(31 downto 0);
515
hREAdy: in std_Logic;
516
hRESp: in stD_logiC;
517
HSEl: out std_Logic_VEctoR(15 downto 0);
518
INterrUPT: in stD_LogiC_VectOR(255 downto 0);
519
GP_out: out STd_loGIC_vecTOr(31 downto 0);
520
gp_IN: in std_Logic_VEctoR(31 downto 0);
521
Ext_wR: out sTD_logIC;
522
eXT_rd: out STd_loGIC;
523
exT_Addr: out STD_logIC_veCTOr(31 downto 0);
524
EXt_daTA: inout Std_lOGIc_vECTor(31 downto 0);
525
EXT_waiT: in stD_LogiC;
526
cON_addR: in sTD_logIC_vecTOR(15 downto 0);
527
CON_datA: inout Std_lOGIc_vECTor(31 downto 0);
528
coN_Rd: in sTD_logIC;
529
CON_wr: in STD_logIC;
530
con_BUSy: out STd_loGIC;
531
INstr_out: out STD_logIC_vecTOr(31 downto 0);
532
instR_in: in Std_LOGic_vECTor(31 downto 0);
533
fiNIShed: out STd_lOGIc;
534
FailED: out std_LOGic);
535
end component;
536
 
537
component Bfm_aHBSlavEEXt
538
generic (awIDTh: InteGER range 1 to 32;
539
DEPth: intEGEr := 256;
540
Ext_sIZE: inTEGer range 0 to 2 := 2;
541
INItfiLE: sTRIng := "";
542
ID: iNTEGer := 0;
543
TPD: INTEger range 0 to 1000 := 1;
544
enfuNC: inteGER := 0;
545
eNFIfo: INTegeR range 0 to 1024 := 0;
546
dEBUg: iNTEGer range 0 to 1 := 0);
547
port (HCLk: in std_LOGic;
548
hrESETn: in STD_logIC;
549
hSEL: in stD_logiC;
550
HWRite: in STd_lOGIC;
551
HADDr: in sTD_logIC_vecTOR(AwidtH-1 downto 0);
552
HWdata: in stD_Logic_VectOR(31 downto 0);
553
HrdatA: out Std_lOGIc_vECTor(31 downto 0);
554
hreaDYIn: in std_LOgic;
555
hrEADyout: out sTD_logIC;
556
HtranS: in STd_lOGIc_veCTOr(1 downto 0);
557
HSize: in STD_loGIC_veCTOr(2 downto 0);
558
HBUrst: in sTD_logIC_vecTOR(2 downto 0);
559
hMAStlocK: in Std_lOGIC;
560
hPROt: in Std_lOGIc_vECTor(3 downto 0);
561
HresP: out STd_loGIC;
562
exT_En: in STD_logIC;
563
Ext_WR: in STd_lOGIC;
564
exT_Rd: in std_LOgic;
565
eXT_addr: in sTD_logiC_vectOR(AWIdth-1 downto 0);
566
eXT_datA: inout Std_LOGic_vECTor(31 downto 0);
567
TxreaDY: out std_Logic;
568
rXREady: out STD_logIC);
569
end component;
570
 
571
component BFM_ahbSLAve
572
generic (awIDTh: iNTEger range 1 to 32;
573
Depth: inteGER := 256;
574
iNITFile: StrinG := "";
575
iD: inTEGer := 0;
576
TPD: InteGER range 0 to 1000 := 1;
577
ENfunc: INTeger := 0;
578
DEbug: IntegER range 0 to 1 := 0);
579
port (HClk: in std_LOGic;
580
hresETN: in STD_logIC;
581
hsEL: in stD_LogiC;
582
HwritE: in stD_logiC;
583
Haddr: in Std_LOGIc_vECTor(awIDTH-1 downto 0);
584
hwdATA: in std_Logic_VEctOR(31 downto 0);
585
HrdaTA: out STD_loGIC_veCTOr(31 downto 0);
586
hREAdyin: in Std_lOGIc;
587
HreadYOUt: out STD_logIC;
588
htrANS: in Std_LOGIc_vECTor(1 downto 0);
589
hsIZE: in std_Logic_VEctoR(2 downto 0);
590
hbURSt: in sTD_logIC_vecTOR(2 downto 0);
591
HmastLOCk: in std_LOGic;
592
HPRot: in std_LOGic_vECtor(3 downto 0);
593
hRESp: out Std_LOGIc);
594
end component;
595
 
596
component BFm_apBSLaveEXT
597
generic (AWidth: IntegER range 1 to 32;
598
Depth: IntegER := 256;
599
DWIdth: INTeger range 8 to 32 := 32;
600
EXt_siZE: INTeger range 0 to 2 := 2;
601
iniTFIle: STring := "";
602
ID: iNTEGer := 0;
603
tpd: iNTEger range 0 to 1000 := 1;
604
ENfunC: INTeger := 0;
605
dEBUg: IntegER range 0 to 1 := 0);
606
port (PCLk: in stD_LogiC;
607
pRESetn: in Std_lOGIc;
608
peNABle: in std_LOGic;
609
PwritE: in STd_loGIC;
610
pseL: in STD_logIC;
611
pADDr: in std_LOGic_vECTor(awIDTh-1 downto 0);
612
pwdATA: in STD_logIC_veCTOr(dwIDTh-1 downto 0);
613
prdATA: out std_LOGic_VECtor(dwiDTH-1 downto 0);
614
prEADy: out STD_loGIC;
615
pSLVerr: out stD_logiC;
616
Ext_eN: in stD_logiC;
617
ext_WR: in STD_loGIC;
618
exT_Rd: in STD_logIC;
619
EXt_aDDR: in stD_LogiC_VectOR(AWIdth-1 downto 0);
620
EXT_datA: inout STd_loGIC_veCTOr(DwidTH-1 downto 0));
621
end component;
622
 
623
component BFM_apbSLAve
624
generic (awiDTH: INTeger range 1 to 32;
625
dePTH: intEGEr := 256;
626
DWIdth: inTEGer range 8 to 32 := 32;
627
INItfilE: striNG := "";
628
id: intEGEr := 0;
629
TPD: IntegER range 0 to 1000 := 1;
630
eNFUnc: inteGER := 0;
631
DEBug: INtegeR range 0 to 1 := 0);
632
port (Pclk: in std_LOGic;
633
PreseTN: in STD_loGIC;
634
peNABle: in STd_lOGIC;
635
PWRite: in sTD_logIC;
636
psEL: in STd_loGIC;
637
PaddR: in std_LOGic_VECtor(aWIDth-1 downto 0);
638
pWDAta: in std_Logic_VEctoR(dwidTH-1 downto 0);
639
PrdatA: out sTD_logIC_vecTOR(DwidtH-1 downto 0);
640
pREAdy: out Std_LOGIc;
641
pslvERR: out Std_lOGIC);
642
end component;
643
 
644
component bfM_Ahbl
645
generic (vecTFIle: stRINg := "test.vec";
646
Max_INSTrucTIOns: intEGEr := 16384;
647
tpd: intEGEr range 0 to 1000 := 1;
648
Max_sTACk: INtegeR := 1024;
649
max_MEmteST: IntegER := 65536;
650
debUGLevel: inTEGer range -1 to 5 := -1;
651
ARGvaluE0: inTEGer := 0;
652
ARGvaluE1: inTEGer := 0;
653
argVALue2: iNTEger := 0;
654
aRGValue3: INtegeR := 0;
655
ARgvalUE4: intEGEr := 0;
656
ARGvalUE5: inteGER := 0;
657
aRGValuE6: inTEGer := 0;
658
ArgvALUE7: INTeger := 0;
659
ArgvALUE8: INtegeR := 0;
660
ArgvALUe9: INtegeR := 0;
661
ArgvaLUE10: iNTEger := 0;
662
ARgvalUE11: inTEGer := 0;
663
aRGValue12: IntegER := 0;
664
ArgvALUE13: InteGER := 0;
665
ARGvaluE14: INtegeR := 0;
666
ARGvaluE15: INTEger := 0;
667
argVALue16: InteGER := 0;
668
arGVAlue17: inteGER := 0;
669
ARgvalUE18: intEGEr := 0;
670
aRGVAlue19: IntegER := 0;
671
ArgvaLUE20: inteGER := 0;
672
arGVAlue21: IntegER := 0;
673
argvALUe22: inteGER := 0;
674
ArgvALUe23: InteGER := 0;
675
arGVAlue24: inTEGEr := 0;
676
ARgvalUE25: iNTEGer := 0;
677
ARgvalUE26: intEGEr := 0;
678
ARGvalUE27: inteGER := 0;
679
ArgvaLUE28: inTEGer := 0;
680
argVALue29: intEGEr := 0;
681
ARGvaluE30: INTegeR := 0;
682
arGVAlue31: INTeger := 0;
683
ArgvALUe32: INTegeR := 0;
684
ARgvalUE33: iNTEger := 0;
685
ArgvaLUE34: inTEGer := 0;
686
arGVALue35: inteGER := 0;
687
argvALUe36: INTeger := 0;
688
arGVAlue37: iNTEger := 0;
689
aRGValue38: INTegeR := 0;
690
ARgvalUE39: INtegeR := 0;
691
aRGValue40: iNTEger := 0;
692
ARgvaLUE41: INTeger := 0;
693
argVALue42: INTeger := 0;
694
ARGvaluE43: inteGER := 0;
695
argvALUe44: inTEGer := 0;
696
aRGValuE45: INtegeR := 0;
697
arGVAlue46: inteGER := 0;
698
argvALUe47: IntegER := 0;
699
aRGValue48: intEGEr := 0;
700
argvALUe49: IntegER := 0;
701
ArgvaLUE50: inteGER := 0;
702
ARGvaluE51: inTEGer := 0;
703
ArgvaLUE52: inteGER := 0;
704
ARGvaluE53: INtegeR := 0;
705
aRGValuE54: INTeger := 0;
706
ArgvaLUE55: IntegER := 0;
707
ARGvaluE56: iNTEger := 0;
708
argVALue57: IntegER := 0;
709
argvALUe58: iNTEger := 0;
710
ARgvalUE59: inteGER := 0;
711
argVALue60: INTegeR := 0;
712
ARgvalUE61: inteGER := 0;
713
arGVAlue62: inTEGer := 0;
714
ArgvALUE63: inteGER := 0;
715
argVALue64: intEGEr := 0;
716
argvALUe65: INTeger := 0;
717
arGVAlue66: INtegER := 0;
718
ArgvALUe67: inTEGer := 0;
719
arGVAlue68: IntegER := 0;
720
ArgvaLUE69: INtegeR := 0;
721
ArgvaLUE70: IntegeR := 0;
722
aRGValue71: INtegeR := 0;
723
ARGvaluE72: intEGEr := 0;
724
arGVAlue73: InteGER := 0;
725
aRGValue74: inteGER := 0;
726
ArgvALUE75: iNTEger := 0;
727
ARGvalUE76: intEGEr := 0;
728
ArgvaLUE77: IntegER := 0;
729
argVALue78: intEGER := 0;
730
argVALue79: inTEGer := 0;
731
ArgvaLUE80: INtegER := 0;
732
ArgvALUe81: inTEGer := 0;
733
ARGvaluE82: inTEGer := 0;
734
argvALUe83: intEGEr := 0;
735
argvALUe84: intEGEr := 0;
736
argvALUe85: IntegER := 0;
737
argVALue86: inteGER := 0;
738
ArgvaLUE87: INtegeR := 0;
739
ARgvalUE88: iNTEger := 0;
740
ARGvaluE89: intEGEr := 0;
741
ArgvALUe90: INTeger := 0;
742
ARGvaluE91: intEGEr := 0;
743
arGVAlue92: INtegeR := 0;
744
arGVAlue93: INtegeR := 0;
745
ARGvaluE94: IntegER := 0;
746
aRGValue95: INTeger := 0;
747
ARgvalUE96: iNTEger := 0;
748
ARGvaluE97: intEGEr := 0;
749
ArgvaLUE98: iNTEger := 0;
750
ARGvaluE99: intEGEr := 0);
751
port (SYsclK: in std_LOgic;
752
SysrsTN: in STd_loGIC;
753
HAddr: out stD_logiC_VectOR(31 downto 0);
754
Hclk: out stD_logiC;
755
HRESetn: out STD_loGIC;
756
hbuRST: out stD_logiC_VectOR(2 downto 0);
757
hmaSTLock: out std_LOGic;
758
hproT: out STd_loGIC_veCTOr(3 downto 0);
759
hSIZE: out stD_logiC_VectOR(2 downto 0);
760
hTRAns: out std_LOgic_VEctoR(1 downto 0);
761
HwritE: out Std_LOGic;
762
hwdaTA: out stD_logiC_VectOR(31 downto 0);
763
HRdata: in STD_logIC_veCTOr(31 downto 0);
764
HReady: in stD_logiC;
765
hRESP: in sTD_logIC;
766
Hsel: out std_LOGic_vECTor(15 downto 0);
767
intERRupt: in std_LOgic_VEctoR(255 downto 0);
768
GP_out: out sTD_logIC_vecTOr(31 downto 0);
769
Gp_iN: in STD_loGIC_veCTOr(31 downto 0);
770
exT_wr: out std_LOGic;
771
EXt_rd: out Std_LOGic;
772
EXt_aDDR: out std_LOgic_VEctoR(31 downto 0);
773
EXt_dATA: inout STd_loGIC_veCTOr(31 downto 0);
774
EXt_waIT: in STd_loGIC;
775
finISHEd: out sTD_logIC;
776
FAIled: out std_LOGic);
777
end component;
778
 
779
component BFMA1i1lI
780
generic (tpD: INTeger range 0 to 1000 := 1);
781
port (hCLK: in std_LOGic;
782
HRESetn: in STD_loGIC;
783
hSEL: in std_LOGic;
784
HWRite: in STD_logIC;
785
HADdr: in std_LOGic_VECtor(31 downto 0);
786
hwdaTA: in STd_loGIC_veCTOr(31 downto 0);
787
HRdata: out STd_lOGIC_veCTOr(31 downto 0);
788
HreaDYIN: in std_LOgic;
789
HReadyOUT: out STD_logIC;
790
htraNS: in std_LOgic_VEctoR(1 downto 0);
791
hsIZE: in sTD_logIC_vecTOR(2 downto 0);
792
HburST: in std_LOGic_vECTor(2 downto 0);
793
HMAstloCK: in Std_LOGIc;
794
hprOT: in sTD_logIC_vecTOR(3 downto 0);
795
hreSP: out stD_logiC;
796
psel: out Std_lOGIC_veCTOr(15 downto 0);
797
padDR: out STD_logIC_vecTOR(31 downto 0);
798
pwriTE: out Std_LOGic;
799
pENABle: out Std_lOGIc;
800
pWDAta: out sTD_logIC_vecTOR(31 downto 0);
801
PrdatA: in Std_lOGIc_vECTor(31 downto 0);
802
PreadY: in Std_LOGic;
803
psLVErr: in std_LOgic);
804
end component;
805
 
806
component bfM_ahblAPB
807
generic (VectfILE: STRing := "test.vec";
808
MAX_insTRUctiONS: IntegER := 16384;
809
TPd: inTEGer range 0 to 1000 := 1;
810
MAX_staCK: IntegER := 1024;
811
Max_mEMTest: inteGER := 65536;
812
DebugLEVel: inTEGer range -1 to 5 := -1;
813
ARGvaluE0: INTeger := 0;
814
aRGValue1: inteGER := 0;
815
argvALUe2: iNTEger := 0;
816
argvALUe3: INtegeR := 0;
817
argVALue4: inteGER := 0;
818
ArgvaLUE5: IntegER := 0;
819
arGVAlue6: inteGER := 0;
820
ArgvaLUE7: INTeger := 0;
821
aRGValue8: intEGEr := 0;
822
argVALue9: iNTEger := 0;
823
argVALue10: iNTEGer := 0;
824
ARgvalUE11: inTEGer := 0;
825
argVALue12: iNTEGer := 0;
826
ARGvalUE13: INtegeR := 0;
827
ARGvalUE14: IntegER := 0;
828
ARgvalUE15: InteGER := 0;
829
ARGvaluE16: inTEGer := 0;
830
argVALue17: iNTEger := 0;
831
ArgvaLUE18: intEGEr := 0;
832
ARgvalUE19: inteGER := 0;
833
ARgvalUE20: IntegER := 0;
834
ARGvaluE21: iNTEger := 0;
835
ARGvaluE22: iNTEger := 0;
836
aRGValue23: INTeger := 0;
837
ARgvaLUE24: IntegER := 0;
838
arGVAlue25: INtegER := 0;
839
ARGvalUE26: inteGER := 0;
840
ARGvaluE27: iNTEGer := 0;
841
ARgvalUE28: IntegER := 0;
842
aRGValue29: INTeger := 0;
843
arGVAlue30: intEGEr := 0;
844
ArgvaLUE31: INTeger := 0;
845
aRGVAlue32: inteGER := 0;
846
argvALUe33: INTEger := 0;
847
ARGvaluE34: intEGEr := 0;
848
ARGvaluE35: IntegER := 0;
849
ARgvalUE36: InteGER := 0;
850
ARgvalUE37: InteGER := 0;
851
argVALue38: IntegER := 0;
852
aRGValue39: iNTEger := 0;
853
ARGvaluE40: INTEger := 0;
854
argvALUe41: INtegeR := 0;
855
argVALue42: inteGER := 0;
856
ARGvaluE43: inTEGer := 0;
857
aRGValue44: INtegeR := 0;
858
ARGvalUE45: IntegER := 0;
859
argvALUe46: IntegER := 0;
860
arGVAlue47: inteGER := 0;
861
ARGvaluE48: INTegeR := 0;
862
ArgvaLUE49: IntegER := 0;
863
argvALUe50: iNTEGer := 0;
864
arGVALue51: inteGER := 0;
865
arGVAlue52: INtegeR := 0;
866
arGVAlue53: iNTEger := 0;
867
ARgvaLUE54: INtegeR := 0;
868
arGVALue55: InteGER := 0;
869
ARgvalUE56: intEGEr := 0;
870
argVALue57: INTegeR := 0;
871
aRGValue58: IntegER := 0;
872
ArgvaLUE59: inteGER := 0;
873
arGVAlue60: iNTEger := 0;
874
argvALUe61: inteGER := 0;
875
argvALUe62: INTeger := 0;
876
aRGValue63: intEGEr := 0;
877
argvALUe64: iNTEger := 0;
878
ArgvALUE65: inTEGer := 0;
879
arGVAlue66: INTeger := 0;
880
arGVAlue67: INTeger := 0;
881
ARgvaLUE68: inteGER := 0;
882
ARgvalUE69: IntegER := 0;
883
arGVAlue70: iNTEger := 0;
884
arGVAlue71: iNTEger := 0;
885
ARGvaluE72: inTEGer := 0;
886
ARgvalUE73: inteGER := 0;
887
ARgvalUE74: inteGER := 0;
888
ARGValuE75: InteGER := 0;
889
ARgvalUE76: IntegER := 0;
890
ARGvalUE77: IntegER := 0;
891
aRGValue78: iNTEger := 0;
892
ArgvaLUE79: INTeger := 0;
893
ARgvalUE80: INTeger := 0;
894
arGVAlue81: InteGER := 0;
895
ArgvALUe82: inTEGEr := 0;
896
ArgvALUe83: iNTEger := 0;
897
arGVAlue84: iNTEGer := 0;
898
aRGVAlue85: INtegeR := 0;
899
ArgvALUe86: INTeger := 0;
900
ArgvALUe87: INTegeR := 0;
901
aRGValue88: inTEGer := 0;
902
ARGvaluE89: iNTEger := 0;
903
ARgvalUE90: inteGER := 0;
904
aRGValuE91: IntegER := 0;
905
ARgvaLUE92: IntegER := 0;
906
aRGValuE93: INtegeR := 0;
907
argvALUe94: INTegeR := 0;
908
ARgvalUE95: INtegeR := 0;
909
arGVAlue96: iNTEger := 0;
910
aRGValue97: intEGEr := 0;
911
argVALue98: iNTEger := 0;
912
ArgvALUe99: intEGEr := 0);
913
port (syscLK: in Std_lOGIc;
914
sysRSTn: in Std_lOGIc;
915
HCLk: out std_Logic;
916
HreseTN: out STD_logIC;
917
HaddR: out STD_logIC_veCTOr(31 downto 0);
918
hbuRST: out sTD_logIC_vecTOR(2 downto 0);
919
HmastLOCk: out Std_LOGIc;
920
hproT: out stD_logiC_VectOR(3 downto 0);
921
HSIze: out std_LOGic_vECTor(2 downto 0);
922
HTRans: out stD_logiC_VectOR(1 downto 0);
923
HwritE: out std_LOGic;
924
hwDATa: out std_Logic_VectoR(31 downto 0);
925
hrdaTA: in stD_LogiC_VectOR(31 downto 0);
926
hREAdyin: in stD_logiC;
927
hREAdyouT: out STD_logIC;
928
hRESp: in STd_loGIC;
929
Hsel: out Std_lOGIc_vECTor(15 downto 0);
930
PCLk: out STd_loGIC;
931
presETN: out std_LOGic;
932
Paddr: out STd_loGIC_veCTOr(31 downto 0);
933
peNABLe: out std_Logic;
934
PWritE: out STD_logIC;
935
PwdatA: out sTD_logIC_vecTOR(31 downto 0);
936
pRDAta: in Std_LOGIc_vECTor(31 downto 0);
937
preaDY: in Std_LOGic;
938
PSLverR: in std_LOGic;
939
psel: out std_LOGic_VECtor(15 downto 0);
940
InterRUPt: in STD_logIC_vecTOr(255 downto 0);
941
GP_out: out std_LOGic_vECTor(31 downto 0);
942
gp_IN: in Std_lOGIc_veCTOr(31 downto 0);
943
EXT_wr: out sTD_logIC;
944
eXT_rd: out STd_loGIC;
945
eXT_addR: out std_LOgic_VEctoR(31 downto 0);
946
EXt_daTA: inout STD_logIC_veCTOr(31 downto 0);
947
EXt_wAIT: in Std_LOGic;
948
fINIshed: out std_LOGic;
949
faILEd: out STD_logIC);
950
end component;
951
 
952
component bfm_APb
953
generic (VEctfiLE: STRing := "test.vec";
954
Max_iNSTrucTIOns: iNTEger := 16384;
955
tpD: intEGEr range 0 to 1000 := 1;
956
maX_stacK: intEGEr := 1024;
957
mAX_memTESt: iNTEger := 65536;
958
DEBugleVEL: INtegeR range -1 to 5 := -1;
959
aRGValue0: InteGER := 0;
960
argvALUe1: InteGER := 0;
961
argVALue2: intEGEr := 0;
962
aRGValue3: inTEGer := 0;
963
arGVAlue4: inteGER := 0;
964
ARgvalUE5: INTEger := 0;
965
arGVAlue6: INTegeR := 0;
966
ARGvaluE7: intEGEr := 0;
967
aRGValuE8: inteGER := 0;
968
argvALUe9: inTEGer := 0;
969
aRGValue10: IntegER := 0;
970
argVALue11: intEGEr := 0;
971
aRGValue12: inTEGer := 0;
972
ARgvaLUE13: iNTEger := 0;
973
arGVAlue14: inTEGEr := 0;
974
aRGValue15: inTEGer := 0;
975
arGVAlue16: intEGEr := 0;
976
ARGvaluE17: INtegeR := 0;
977
aRGValue18: INtegeR := 0;
978
argVALue19: iNTEger := 0;
979
arGVAlue20: inTEGer := 0;
980
ARgvalUE21: iNTEger := 0;
981
arGVAlue22: IntegER := 0;
982
argvALUe23: INtegeR := 0;
983
ARgvalUE24: inTEGer := 0;
984
ARGvaluE25: IntegER := 0;
985
ARgvaLUE26: inTEGEr := 0;
986
arGVAlue27: iNTEGer := 0;
987
aRGValue28: INTeger := 0;
988
arGVAlue29: IntegER := 0;
989
ARGValuE30: inTEGer := 0;
990
ARGValuE31: inTEGer := 0;
991
argVALue32: IntegER := 0;
992
arGVAlue33: INtegER := 0;
993
ArgvALUe34: inteGER := 0;
994
argVALue35: intEGER := 0;
995
ARGvaluE36: iNTEger := 0;
996
ARgvalUE37: InteGER := 0;
997
ArgvaLUE38: INTegeR := 0;
998
aRGValue39: InteGER := 0;
999
ARGvaluE40: intEGEr := 0;
1000
ARGvaluE41: IntegER := 0;
1001
ARgvalUE42: INtegeR := 0;
1002
argVALue43: inteGER := 0;
1003
arGVALue44: intEGEr := 0;
1004
ArgvaLUE45: INTeger := 0;
1005
arGVAlue46: inteGER := 0;
1006
ARgvalUE47: inTEGEr := 0;
1007
ARgvalUE48: intEGER := 0;
1008
ARGvaluE49: InteGER := 0;
1009
aRGValue50: INtegeR := 0;
1010
argvALUe51: intEGEr := 0;
1011
ARGvalUE52: INTegeR := 0;
1012
ARGvaluE53: inTEGer := 0;
1013
ArgvaLUE54: inTEGer := 0;
1014
ARgvalUE55: intEGEr := 0;
1015
argVALue56: INTegeR := 0;
1016
ARGvaluE57: InteGER := 0;
1017
ArgvaLUE58: inteGER := 0;
1018
argvALUe59: IntegER := 0;
1019
argvALUe60: INTeger := 0;
1020
argVALue61: intEGEr := 0;
1021
aRGVAlue62: intEGEr := 0;
1022
ArgvALUe63: iNTEGer := 0;
1023
argvALUe64: intEGEr := 0;
1024
argVALue65: inTEGer := 0;
1025
ARGvalue66: iNTEger := 0;
1026
ArgvALUE67: INtegeR := 0;
1027
aRGValue68: inTEGer := 0;
1028
aRGValue69: intEGEr := 0;
1029
argVALue70: INTegeR := 0;
1030
ArgvaLUE71: inTEGer := 0;
1031
aRGValuE72: IntegER := 0;
1032
ARgvaLUE73: inteGER := 0;
1033
aRGValue74: IntegER := 0;
1034
ArgvaLUE75: INTeger := 0;
1035
ArgvaLUE76: INTEger := 0;
1036
argVALue77: inteGER := 0;
1037
argVALue78: INtegeR := 0;
1038
argvALUe79: INTeger := 0;
1039
ArgvaLUE80: iNTEger := 0;
1040
argvALUe81: iNTEger := 0;
1041
aRGValue82: INtegER := 0;
1042
aRGVAlue83: iNTEger := 0;
1043
ArgvaLUE84: IntegER := 0;
1044
ARGvaluE85: iNTEger := 0;
1045
argvALUe86: InteGER := 0;
1046
argvALUe87: INTeger := 0;
1047
argVALue88: IntegER := 0;
1048
ArgvaLUE89: inteGER := 0;
1049
ARgvalUE90: IntegER := 0;
1050
ARgvalUE91: IntegER := 0;
1051
argVALue92: InteGER := 0;
1052
arGVAlue93: iNTEger := 0;
1053
argVALue94: INtegeR := 0;
1054
argvALUe95: iNTEger := 0;
1055
ArgvALUE96: INTeger := 0;
1056
arGVAlue97: IntegER := 0;
1057
argvALUe98: iNTEger := 0;
1058
ARGvaluE99: IntegER := 0);
1059
port (sYSClk: in Std_lOGIC;
1060
sYSRStn: in STd_loGIC;
1061
pcLK: out Std_LOGic;
1062
PREsetn: out Std_lOGIc;
1063
paddR: out STD_logIC_veCTOr(31 downto 0);
1064
PenabLE: out STD_logIC;
1065
pWRIte: out sTD_logIC;
1066
pwdATA: out Std_lOGIc_vECTor(31 downto 0);
1067
PRData: in STD_logIC_veCTOr(31 downto 0);
1068
PREAdy: in sTD_logIC;
1069
PSLverr: in stD_logiC;
1070
pSEL: out std_LOGic_VECtor(15 downto 0);
1071
inTERrupt: in std_LOGic_VECtor(255 downto 0);
1072
gP_out: out std_LOgic_VEctoR(31 downto 0);
1073
Gp_iN: in STd_loGIC_veCTOr(31 downto 0);
1074
exT_Wr: out std_LOgic;
1075
EXT_rd: out STD_loGIC;
1076
EXt_adDR: out STd_loGIC_veCTOr(31 downto 0);
1077
Ext_dATA: inout std_LOGic_vECTor(31 downto 0);
1078
EXt_waIT: in STD_logIC;
1079
FInishED: out STD_logIC;
1080
fAILed: out STD_logIC);
1081
end component;
1082
 
1083
component Bfm_aPB2apb
1084
generic (tPD: INtegeR range 0 to 1000 := 1);
1085
port (PClk_pM: in STd_loGIC;
1086
PResetN_Pm: in STD_logIC;
1087
paddR_pm: in std_LOGic_vECTor(31 downto 0);
1088
PWrite_PM: in STd_loGIC;
1089
pENABle_PM: in std_LOGic;
1090
PWData_PM: in STD_loGIC_vecTOr(31 downto 0);
1091
prdATA_pm: out Std_lOGIc_vECTor(31 downto 0);
1092
PreadY_Pm: out sTD_logIC;
1093
PSLverR_Pm: out STD_loGIC;
1094
pcLK_sc: in std_LOgic;
1095
Psel_SC: out Std_lOGIc_veCTOr(15 downto 0);
1096
paddR_sc: out Std_lOGIC_veCTOr(31 downto 0);
1097
pwriTE_sc: out STd_loGIC;
1098
pENAble_SC: out Std_LOGIc;
1099
PWdata_Sc: out Std_lOGIc_vECTor(31 downto 0);
1100
prdaTA_sc: in sTD_logIC_vecTOR(31 downto 0);
1101
PREady_SC: in STd_loGIC;
1102
pslVERr_sc: in STd_loGIC);
1103
end component;
1104
end bfM_packAGE;
1105
 
1106
package body bfM_packAGE is
1107
function BFMA1OIoi(BFMA1LIoi: stD_Logic_VectOR)
1108
return intEGEr is
1109
variable x: IntegER;
1110
begin
1111
x := To_inTEGer(tO_SignED(BFMA1LIoi));
1112
return (x);
1113
end BFMA1oioI;
1114
function tO_Int_UNSignED(BFMA1lIOI: Std_LOGIc_vECTor)
1115
return INTegeR is
1116
variable x: INtegeR;
1117
begin
1118
x := to_INtegER(TO_unsIGNed(BFMA1Lioi));
1119
return (X);
1120
end To_inT_unsiGNEd;
1121
function to_iNT_sigNED(BFMA1LIOi: STD_logIC_vecTOR)
1122
return intEGEr is
1123
variable X: INtegeR;
1124
begin
1125
x := TO_inteGER(to_sIGNed(BFMA1Lioi));
1126
return (X);
1127
end to_INT_sigNED;
1128
function to_SLV32(x: INTeger)
1129
return STD_loGIC_vecTOr is
1130
variable BFMA1lIOI: STd_loGIC_veCTOr(31 downto 0);
1131
begin
1132
BFMA1Lioi := TO_std_LOgic(To_siGNEd(x,
1133
32));
1134
return (BFMA1LIoi);
1135
end TO_slv32;
1136
function BFMA1l11L(sizE: Std_LOGic_vECTor(2 downto 0);
1137
BFMA1I11l: std_LOgic_VEctoR(1 downto 0);
1138
BFMA1OOOi: Std_LOGic_vECTor(31 downto 0);
1139
BFMA1LOOi: inteGER)
1140
return sTD_logIC_vecTOR is
1141
variable BFMA1OOIi: STD_logIC_veCTOr(31 downto 0);
1142
variable BFMA1Loii: STd_loGIC;
1143
begin
1144
BFMA1OOII := ( others => '0');
1145
BFMA1loII := BFMA1I11l(1);
1146
case BFMA1LOoi is
1147
when 0 =>
1148
case SIze is
1149
when "000" =>
1150
case BFMA1i11L is
1151
when "00" =>
1152
BFMA1OOii(7 downto 0) := BFMA1OOoi(7 downto 0);
1153
when "01" =>
1154
BFMA1OOIi(15 downto 8) := BFMA1oOOI(7 downto 0);
1155
when "10" =>
1156
BFMA1OOii(23 downto 16) := BFMA1OOOi(7 downto 0);
1157
when "11" =>
1158
BFMA1OOII(31 downto 24) := BFMA1oooI(7 downto 0);
1159
when others =>
1160
end case;
1161
when "001" =>
1162
case BFMA1i11L is
1163
when "00" =>
1164
BFMA1OOIi(15 downto 0) := BFMA1oooI(15 downto 0);
1165
when "01" =>
1166
BFMA1Ooii(15 downto 0) := BFMA1Oooi(15 downto 0);
1167
assert faLSE report "BFM: Missaligned AHB Cycle(Half A10=01) ?" severity WARning;
1168
when "10" =>
1169
BFMA1OOIi(31 downto 16) := BFMA1Oooi(15 downto 0);
1170
when "11" =>
1171
BFMA1OOIi(31 downto 16) := BFMA1OOoi(15 downto 0);
1172
assert fALSe report "BFM: Missaligned AHB Cycle(Half A10=11) ?" severity warNINg;
1173
when others =>
1174
end case;
1175
when "010" =>
1176
BFMA1Ooii := BFMA1oOOI;
1177
case BFMA1I11l is
1178
when "00" =>
1179
when "01" =>
1180
assert FALse report "BFM: Missaligned AHB Cycle(Word A10=01) ?" severity WArniNG;
1181
when "10" =>
1182
assert fALSe report "BFM: Missaligned AHB Cycle(Word A10=10) ?" severity warNINg;
1183
when "11" =>
1184
assert FalsE report "BFM: Missaligned AHB Cycle(Word A10=11) ?" severity wARNing;
1185
when others =>
1186
end case;
1187
when others =>
1188
assert FALse report "Unexpected AHB Size setting" severity ErroR;
1189
end case;
1190
when 1 =>
1191
case sizE is
1192
when "000" =>
1193
case BFMA1i11L is
1194
when "00" =>
1195
BFMA1OOii(7 downto 0) := BFMA1OOOi(7 downto 0);
1196
when "01" =>
1197
BFMA1OOii(15 downto 8) := BFMA1oOOI(7 downto 0);
1198
when "10" =>
1199
BFMA1Ooii(7 downto 0) := BFMA1ooOI(7 downto 0);
1200
when "11" =>
1201
BFMA1OOII(15 downto 8) := BFMA1OOoi(7 downto 0);
1202
when others =>
1203
end case;
1204
when "001" =>
1205
BFMA1OOii(15 downto 0) := BFMA1OOOi(15 downto 0);
1206
case BFMA1i11L is
1207
when "00" =>
1208
when "01" =>
1209
assert FAlse report "BFM: Missaligned AHB Cycle(Half A10=01) ?" severity waRNIng;
1210
when "10" =>
1211
assert falSE report "BFM: Missaligned AHB Cycle(Half A10=10) ?" severity warNINg;
1212
when "11" =>
1213
assert FAlse report "BFM: Missaligned AHB Cycle(Half A10=11) ?" severity WarnING;
1214
when others =>
1215
end case;
1216
when others =>
1217
assert FAlse report "Unexpected AHB Size setting" severity eRROr;
1218
end case;
1219
when 2 =>
1220
case siZE is
1221
when "000" =>
1222
BFMA1Ooii(7 downto 0) := BFMA1oOOI(7 downto 0);
1223
when others =>
1224
assert False report "Unexpected AHB Size setting" severity ERror;
1225
end case;
1226
when 8 =>
1227
BFMA1OOII := BFMA1oooi;
1228
when others =>
1229
assert FAlse report "Illegal Alignment mode" severity ERror;
1230
end case;
1231
return (BFMA1ooii);
1232
end BFMA1L11l;
1233
function BFMA1iooI(siZE: STd_loGIC_veCTOr(2 downto 0);
1234
BFMA1i11L: Std_lOGIc_vECTor(1 downto 0);
1235
BFMA1Oooi: std_LOGic_VECtor(31 downto 0);
1236
BFMA1loOI: INtegeR)
1237
return sTD_logIC_vecTOR is
1238
variable BFMA1OOii: STD_loGIC_vecTOr(31 downto 0);
1239
begin
1240
BFMA1OOIi := BFMA1L11l(Size,
1241
BFMA1i11l,
1242
BFMA1OOoi,
1243
BFMA1loOI);
1244
return (BFMA1ooiI);
1245
end BFMA1Iooi;
1246
function BFMA1OLoi(Size: Std_lOGIc_veCTOr(2 downto 0);
1247
BFMA1i11L: Std_LOGIc_vECTor(1 downto 0);
1248
BFMA1oOOI: STD_logIC_vecTOr(31 downto 0);
1249
BFMA1looI: iNTEger)
1250
return stD_LogiC_VectOR is
1251
variable BFMA1OOII: stD_logiC_VectOR(31 downto 0);
1252
variable BFMA1loII: STD_logIC;
1253
begin
1254
if BFMA1looI = 8 then
1255
BFMA1OOii := BFMA1OOoi;
1256
else
1257
BFMA1Ooii := ( others => '0');
1258
BFMA1lOII := BFMA1i11L(1);
1259
case Size is
1260
when "000" =>
1261
case BFMA1i11L is
1262
when "00" =>
1263
BFMA1ooii(7 downto 0) := BFMA1ooOI(7 downto 0);
1264
when "01" =>
1265
BFMA1OOii(7 downto 0) := BFMA1ooOI(15 downto 8);
1266
when "10" =>
1267
BFMA1ooII(7 downto 0) := BFMA1Oooi(23 downto 16);
1268
when "11" =>
1269
BFMA1oOII(7 downto 0) := BFMA1oooi(31 downto 24);
1270
when others =>
1271
end case;
1272
when "001" =>
1273
case BFMA1loII is
1274
when '0' =>
1275
BFMA1ooiI(15 downto 0) := BFMA1ooOI(15 downto 0);
1276
when '1' =>
1277
BFMA1ooiI(15 downto 0) := BFMA1OOOi(31 downto 16);
1278
when others =>
1279
end case;
1280
when "010" =>
1281
BFMA1OOII := BFMA1OOOi;
1282
when others =>
1283
assert False report "Unexpected AHB Size setting" severity ERror;
1284
end case;
1285
end if;
1286
return (BFMA1ooii);
1287
end BFMA1OLOi;
1288
function BFMA1lloI(X: inTEGer)
1289
return CHAracTER is
1290
variable BFMA1IOII: CHAracTER;
1291
begin
1292
BFMA1IOIi := CharaCTER'val(X);
1293
return (BFMA1IOIi);
1294
end BFMA1LLOI;
1295
function BFMA1iloI(sizE: inTEGer)
1296
return cHARacteR is
1297
variable BFMA1IOIi: CharaCTEr;
1298
begin
1299
case SIze is
1300
when 0 =>
1301
BFMA1IOIi := 'b';
1302
when 1 =>
1303
BFMA1ioiI := 'h';
1304
when 2 =>
1305
BFMA1IOii := 'w';
1306
when 3 =>
1307
BFMA1ioII := 'x';
1308
when others =>
1309
BFMA1iOII := '?';
1310
end case;
1311
return (BFMA1ioII);
1312
end BFMA1ilOI;
1313
function BFMA1iLOI(SIze: STd_loGIC_vecTOr)
1314
return CharaCTEr is
1315
variable BFMA1Ioii: CharaCTEr;
1316
variable BFMA1OLIi: sTD_logiC_VectOR(2 downto 0);
1317
begin
1318
BFMA1oliI := siZE(2 downto 0);
1319
case BFMA1olII is
1320
when "000" =>
1321
BFMA1iOII := 'B';
1322
when "001" =>
1323
BFMA1Ioii := 'H';
1324
when "010" =>
1325
BFMA1Ioii := 'W';
1326
when "011" =>
1327
BFMA1IOIi := 'X';
1328
when others =>
1329
BFMA1IOii := '?';
1330
end case;
1331
return (BFMA1ioii);
1332
end BFMA1iLOI;
1333
function BFMA1IIOi(SIze: inteGER;
1334
BFMA1o0OI: INTEger)
1335
return iNTEger is
1336
variable BFMA1Ioii: INTeger;
1337
begin
1338
case Size is
1339
when 0 =>
1340
BFMA1Ioii := 1;
1341
when 1 =>
1342
BFMA1ioiI := 2;
1343
when 2 =>
1344
BFMA1IOIi := 4;
1345
when 3 =>
1346
BFMA1IOIi := BFMA1O0Oi;
1347
when others =>
1348
BFMA1Ioii := 0;
1349
end case;
1350
return (BFMA1IOii);
1351
end BFMA1Iioi;
1352
function BFMA1l0oi(size: iNTEger;
1353
BFMA1i0OI: INtegER)
1354
return stD_Logic_VectOR is
1355
variable BFMA1Ioii: Std_LOGic_vECTor(2 downto 0);
1356
begin
1357
case SIZe is
1358
when 0 =>
1359
BFMA1IOIi := "000";
1360
when 1 =>
1361
BFMA1iOII := "001";
1362
when 2 =>
1363
BFMA1Ioii := "010";
1364
when 3 =>
1365
BFMA1IOIi := tO_std_LOGic(to_UNSigneD(BFMA1i0oI,
1366
3));
1367
when others =>
1368
BFMA1iOII := "XXX";
1369
end case;
1370
return (BFMA1ioiI);
1371
end BFMA1L0oi;
1372
 impure function BFMA1O1oi(BFMA1L1Oi: INTeger;
1373
X,Y: InteGER;
1374
DEbug: INtegER)
1375
return INtegeR is
1376
variable z: inteGER;
1377
variable BFMA1LLIi,BFMA1iLII,BFMA1oiII: sIGNEd(31 downto 0);
1378
variable BFMA1Liii: iNTEger;
1379
variable BFMA1iIII: SigneD(63 downto 0);
1380
constant BFMA1O0ii: signED(31 downto 0) := ( others => '0');
1381
constant BFMA1L0ii: SIGNed(31 downto 0) := (0 => '1', others => '0');
1382
begin
1383
BFMA1lLII := TO_signED(x,
1384
32);
1385
BFMA1ILIi := TO_sigNED(y,
1386
32);
1387
BFMA1liII := y;
1388
BFMA1OIIi := ( others => '0');
1389
case BFMA1l1OI is
1390
when BFMA1l0lL =>
1391
BFMA1OIIi := ( others => '0');
1392
when BFMA1i0LL =>
1393
BFMA1OIIi := BFMA1lLII+BFMA1ILIi;
1394
when BFMA1O1ll =>
1395
BFMA1oiII := BFMA1llII-BFMA1ilII;
1396
when BFMA1L1ll =>
1397
BFMA1iiII := BFMA1LLii*BFMA1iliI;
1398
BFMA1OIii := BFMA1iiII(31 downto 0);
1399
when BFMA1i1ll =>
1400
BFMA1OIii := BFMA1lLII/BFMA1ILII;
1401
when BFMA1iOIL =>
1402
BFMA1OIII := BFMA1LLII and BFMA1iliI;
1403
when BFMA1oLIL =>
1404
BFMA1OIIi := BFMA1LLIi or BFMA1iliI;
1405
when BFMA1lliL =>
1406
BFMA1oIII := BFMA1llII xor BFMA1ilII;
1407
when BFMA1Ilil =>
1408
BFMA1oiii := BFMA1LLii xor BFMA1Ilii;
1409
when BFMA1lIIL =>
1410
if BFMA1liii = 0 then
1411
BFMA1oiII := BFMA1lLII;
1412
else
1413
BFMA1oIII := BFMA1o0II(BFMA1LIIi downto 1)&BFMA1LLIi(31 downto BFMA1LIIi);
1414
end if;
1415
when BFMA1oiil =>
1416
if BFMA1Liii = 0 then
1417
BFMA1Oiii := BFMA1lliI;
1418
else
1419
BFMA1OIIi := BFMA1LLIi(31-BFMA1LIIi downto 0)&BFMA1o0II(BFMA1LIii downto 1);
1420
end if;
1421
when BFMA1loIL =>
1422
BFMA1IIii := BFMA1o0II&BFMA1l0II;
1423
if BFMA1Liii > 0 then
1424
for BFMA1I0Ii in 1 to BFMA1liii
1425
loop
1426
BFMA1Iiii := BFMA1iiII(31 downto 0)*BFMA1Llii;
1427
end loop;
1428
end if;
1429
BFMA1oiii := BFMA1iIII(31 downto 0);
1430
when BFMA1IIIl =>
1431
if BFMA1llII = BFMA1iLII then
1432
BFMA1oiii := BFMA1L0Ii;
1433
end if;
1434
when BFMA1O0il =>
1435
if BFMA1LLIi /= BFMA1iliI then
1436
BFMA1oIII := BFMA1l0II;
1437
end if;
1438
when BFMA1l0il =>
1439
if BFMA1llii > BFMA1ILii then
1440
BFMA1OIIi := BFMA1l0II;
1441
end if;
1442
when BFMA1I0Il =>
1443
if BFMA1lLII < BFMA1ILii then
1444
BFMA1oiII := BFMA1l0II;
1445
end if;
1446
when BFMA1o1IL =>
1447
if BFMA1lliI >= BFMA1ILii then
1448
BFMA1oiII := BFMA1l0ii;
1449
end if;
1450
when BFMA1L1il =>
1451
if BFMA1llII <= BFMA1Ilii then
1452
BFMA1oIII := BFMA1l0ii;
1453
end if;
1454
when BFMA1oOIL =>
1455
BFMA1OIIi := BFMA1llII mod BFMA1ilii;
1456
when BFMA1i1iL =>
1457
if Y <= 31 then
1458
BFMA1Oiii := BFMA1llII;
1459
BFMA1oIII(Y) := '1';
1460
else
1461
assert False report "Bit operation on bit >31" severity FAilurE;
1462
end if;
1463
when BFMA1oo0L =>
1464
if y <= 31 then
1465
BFMA1oiiI := BFMA1Llii;
1466
BFMA1Oiii(y) := '0';
1467
else
1468
assert fALSe report "Bit operation on bit >31" severity FAilurE;
1469
end if;
1470
when BFMA1lo0l =>
1471
if Y <= 31 then
1472
BFMA1OIIi := BFMA1LLii;
1473
BFMA1oiII(y) := not BFMA1oiII(Y);
1474
else
1475
assert falsE report "Bit operation on bit >31" severity FAIlure;
1476
end if;
1477
when BFMA1IO0l =>
1478
if Y <= 31 then
1479
BFMA1Oiii := ( others => '0');
1480
BFMA1oiii(0) := BFMA1llII(Y);
1481
else
1482
assert FALse report "Bit operation on bit >31" severity faILUre;
1483
end if;
1484
when others =>
1485
assert FAlse report "Illegal Maths Operator" severity fAILure;
1486
end case;
1487
Z := to_INTeger(BFMA1oiII);
1488
if (Debug >= 4) then
1489
priNTF("Calculated %d = %d (%d) %d",
1490
FMT(Z)&fMT(x)&fmt(BFMA1l1OI)&FMt(y));
1491
end if;
1492
return (z);
1493
end BFMA1o1OI;
1494
function BFMA1i1oi(X: STD_logIC_vecTOr)
1495
return std_LOgic_VEctoR is
1496
variable BFMA1O1ii: Std_lOGIc_vECTor(X'range );
1497
begin
1498
BFMA1o1II := x;
1499
BFMA1O1Ii := ( others => '0');
1500
for BFMA1I0ii in BFMA1O1Ii'range
1501
loop
1502
if x(BFMA1I0Ii) = '1' then
1503
BFMA1o1iI(BFMA1i0II) := '1';
1504
end if;
1505
end loop;
1506
return (BFMA1O1ii);
1507
end BFMA1i1oi;
1508
function BFMA1lLLI(BFMA1ILLi: inTEGer)
1509
return IntegER is
1510
variable BFMA1l1II: inteGER;
1511
variable BFMA1i1II: IntegER;
1512
variable BFMA1oO0i: intEGEr;
1513
begin
1514
BFMA1I1ii := BFMA1Illi/65536;
1515
BFMA1l1II := BFMA1ILli rem 65536;
1516
BFMA1OO0i := 2+BFMA1l1II+1+((BFMA1I1Ii-1)/4);
1517
return (BFMA1oo0I);
1518
end BFMA1llli;
1519
 impure function BFMA1OOli(BFMA1lolI: InteGER;
1520
BFMA1iOLI: INTeger_ARray;
1521
BFMA1OLLi: inTEGer_aRRAy)
1522
return sTRIng is
1523
variable BFMA1LO0i: sTRIng(1 to 256);
1524
variable BFMA1IO0i: striNG(1 to 256);
1525
variable BFMA1I0ii,BFMA1oL0I,BFMA1LL0i: INtegeR;
1526
variable BFMA1Il0i: unsIGNed(31 downto 0);
1527
variable BFMA1L1ii: InteGER;
1528
variable BFMA1i1II: inteGER;
1529
variable BFMA1illI: inteGER;
1530
begin
1531
BFMA1i1iI := BFMA1Ioli(BFMA1lOLI+1)/65536;
1532
BFMA1L1Ii := BFMA1iolI(BFMA1lOLI+1) rem 65536;
1533
BFMA1ILLi := 2+BFMA1L1Ii+1+((BFMA1I1ii-1)/4);
1534
BFMA1I0ii := BFMA1lolI+2+BFMA1l1iI;
1535
BFMA1LL0i := 3;
1536
for BFMA1oL0I in 1 to BFMA1I1ii
1537
loop
1538
BFMA1il0I := to_unSIGned(BFMA1iOLI(BFMA1I0Ii),
1539
32);
1540
BFMA1lo0i(BFMA1OL0i) := BFMA1lLOI(To_inTEGEr(BFMA1il0i(BFMA1LL0i*8+7 downto BFMA1ll0i*8+0)));
1541
if BFMA1ll0I = 0 then
1542
BFMA1I0Ii := BFMA1i0iI+1;
1543
BFMA1Ll0i := 4;
1544
end if;
1545
BFMA1ll0I := BFMA1LL0i-1;
1546
end loop;
1547
BFMA1lO0I(BFMA1I1ii+1) := Nul;
1548
case BFMA1L1ii is
1549
when 0 =>
1550
sPRIntf(BFMA1IO0i,
1551
BFMA1LO0i);
1552
when 1 =>
1553
spRINtf(BFMA1IO0i,
1554
BFMA1lo0I,
1555
FMT(BFMA1oLLI(2)));
1556
when 2 =>
1557
spRINtf(BFMA1Io0i,
1558
BFMA1lO0I,
1559
fmT(BFMA1OLli(2))&fmT(BFMA1OLLi(3)));
1560
when 3 =>
1561
spRINtf(BFMA1Io0i,
1562
BFMA1LO0i,
1563
Fmt(BFMA1OLli(2))&fmt(BFMA1ollI(3))&fMT(BFMA1OLli(4)));
1564
when 4 =>
1565
sPRIntf(BFMA1io0I,
1566
BFMA1lo0I,
1567
fmT(BFMA1ollI(2))&FMt(BFMA1Olli(3))&Fmt(BFMA1ollI(4))&Fmt(BFMA1OLLi(5)));
1568
when 5 =>
1569
sPRIntf(BFMA1io0I,
1570
BFMA1lo0I,
1571
fmT(BFMA1olli(2))&fmt(BFMA1oLLI(3))&Fmt(BFMA1ollI(4))&fmT(BFMA1olli(5))&FMt(BFMA1olLI(6)));
1572
when 6 =>
1573
SprinTF(BFMA1Io0i,
1574
BFMA1LO0i,
1575
FMt(BFMA1OLLi(2))&fMT(BFMA1oLLI(3))&Fmt(BFMA1olli(4))&fMT(BFMA1OLLi(5))&fMT(BFMA1OLli(6))&fmt(BFMA1ollI(7)));
1576
when 7 =>
1577
spriNTF(BFMA1IO0i,
1578
BFMA1Lo0i,
1579
fmt(BFMA1OLLi(2))&fmt(BFMA1Olli(3))&fmt(BFMA1Olli(4))&FMT(BFMA1OLli(5))&fmT(BFMA1OLli(6))&fmt(BFMA1olLI(7))&Fmt(BFMA1ollI(8)));
1580
when others =>
1581
assert falSE report "String Error" severity FAIlure;
1582
end case;
1583
return (BFMA1io0I);
1584
end BFMA1ooLI;
1585
function BFMA1iILI(BFMA1Lili,x: intEGEr)
1586
return iNTEger is
1587
variable BFMA1Oi0i,BFMA1LI0i: INTeger;
1588
begin
1589
BFMA1LI0i := BFMA1lILI/X;
1590
BFMA1oi0I := BFMA1lILI-BFMA1li0I*x;
1591
return (BFMA1oI0I);
1592
end BFMA1iILI;
1593
function BFMA1OIli(BFMA1LILi,x: IntegER)
1594
return INTeger is
1595
variable BFMA1oi0I,BFMA1LI0i: IntegER;
1596
begin
1597
BFMA1Li0i := BFMA1lILI/X;
1598
BFMA1oI0I := BFMA1lilI-BFMA1LI0i*X;
1599
return (BFMA1LI0i);
1600
end BFMA1OIli;
1601
function BFMA1o0LI(seeD: INTeger)
1602
return intEGEr is
1603
variable BFMA1ii0I: std_LOGic;
1604
variable BFMA1O00i: IntegER;
1605
variable BFMA1l00I: STD_logIC_veCTOr(31 downto 0);
1606
variable BFMA1I00i: sTD_logiC_VectOR(31 downto 0);
1607
begin
1608
BFMA1l00i := to_SLV32(sEED);
1609
BFMA1ii0I := '1';
1610
BFMA1I00i(0) := BFMA1ii0I xor BFMA1L00i(31);
1611
BFMA1I00i(1) := BFMA1II0i xor BFMA1L00i(31)
1612
xor BFMA1L00i(0);
1613
BFMA1i00i(2) := BFMA1II0i xor BFMA1l00I(31)
1614
xor BFMA1l00I(1);
1615
BFMA1i00I(3) := BFMA1l00I(2);
1616
BFMA1I00i(4) := BFMA1ii0i xor BFMA1L00i(31)
1617
xor BFMA1l00I(3);
1618
BFMA1I00i(5) := BFMA1II0i xor BFMA1L00i(31)
1619
xor BFMA1L00i(4);
1620
BFMA1i00i(6) := BFMA1l00I(5);
1621
BFMA1i00I(7) := BFMA1II0i xor BFMA1L00i(31)
1622
xor BFMA1l00I(6);
1623
BFMA1i00I(8) := BFMA1II0i xor BFMA1L00i(31)
1624
xor BFMA1l00I(7);
1625
BFMA1i00i(9) := BFMA1l00I(8);
1626
BFMA1I00i(10) := BFMA1II0i xor BFMA1l00I(31)
1627
xor BFMA1l00i(9);
1628
BFMA1i00I(11) := BFMA1II0i xor BFMA1l00I(31)
1629
xor BFMA1L00i(10);
1630
BFMA1I00i(12) := BFMA1ii0I xor BFMA1L00i(31)
1631
xor BFMA1l00I(11);
1632
BFMA1I00i(13) := BFMA1l00I(12);
1633
BFMA1i00I(14) := BFMA1L00i(13);
1634
BFMA1i00I(15) := BFMA1L00i(14);
1635
BFMA1i00I(16) := BFMA1Ii0i xor BFMA1l00I(31)
1636
xor BFMA1L00i(15);
1637
BFMA1i00I(17) := BFMA1L00i(16);
1638
BFMA1i00I(18) := BFMA1L00i(17);
1639
BFMA1i00i(19) := BFMA1l00I(18);
1640
BFMA1i00I(20) := BFMA1l00I(19);
1641
BFMA1I00i(21) := BFMA1L00i(20);
1642
BFMA1i00i(22) := BFMA1II0i xor BFMA1L00i(31)
1643
xor BFMA1l00i(21);
1644
BFMA1i00i(23) := BFMA1Ii0i xor BFMA1L00i(31)
1645
xor BFMA1l00I(22);
1646
BFMA1I00i(24) := BFMA1l00I(23);
1647
BFMA1i00I(25) := BFMA1L00i(24);
1648
BFMA1I00i(26) := BFMA1ii0I xor BFMA1l00I(31)
1649
xor BFMA1l00I(25);
1650
BFMA1I00i(27) := BFMA1l00I(26);
1651
BFMA1I00i(28) := BFMA1L00i(27);
1652
BFMA1I00i(29) := BFMA1l00I(28);
1653
BFMA1i00I(30) := BFMA1l00I(29);
1654
BFMA1I00i(31) := BFMA1L00i(30);
1655
BFMA1O00i := TO_int_SIgneD(BFMA1I00i);
1656
return (BFMA1o00i);
1657
end BFMA1o0LI;
1658
function BFMA1L0li(SEed: intEGEr;
1659
sIZE: INTeger)
1660
return inTEGer is
1661
variable BFMA1o00I: INtegeR;
1662
variable BFMA1L00i: sTD_logIC_vecTOR(31 downto 0);
1663
begin
1664
BFMA1l00I := to_sLV32(Seed);
1665
if (sIZE < 31) then
1666
BFMA1l00I(31 downto SIZe) := ( others => '0');
1667
end if;
1668
BFMA1o00I := TO_int_SIGned(BFMA1l00I);
1669
return (BFMA1O00i);
1670
end BFMA1L0li;
1671
function BFMA1I0li(Seed: intEGEr;
1672
Size: INTegeR)
1673
return INtegER is
1674
variable BFMA1o00i: INTeger;
1675
variable BFMA1L00i: std_LOGic_vECTor(31 downto 0);
1676
variable BFMA1O10i: iNTEger;
1677
begin
1678
case siZE is
1679
when 1 =>
1680
BFMA1O10i := 0;
1681
when 2 =>
1682
BFMA1o10I := 1;
1683
when 4 =>
1684
BFMA1O10i := 2;
1685
when 8 =>
1686
BFMA1o10I := 3;
1687
when 16 =>
1688
BFMA1O10i := 4;
1689
when 32 =>
1690
BFMA1O10i := 5;
1691
when 64 =>
1692
BFMA1O10i := 6;
1693
when 128 =>
1694
BFMA1O10i := 7;
1695
when 256 =>
1696
BFMA1O10i := 8;
1697
when 512 =>
1698
BFMA1O10i := 9;
1699
when 1024 =>
1700
BFMA1o10I := 10;
1701
when 2048 =>
1702
BFMA1O10i := 11;
1703
when 4096 =>
1704
BFMA1O10i := 12;
1705
when 8192 =>
1706
BFMA1O10i := 13;
1707
when 16384 =>
1708
BFMA1o10I := 14;
1709
when 32768 =>
1710
BFMA1O10i := 15;
1711
when 65536 =>
1712
BFMA1O10i := 16;
1713
when 131072 =>
1714
BFMA1O10i := 17;
1715
when 262144 =>
1716
BFMA1O10i := 18;
1717
when 524288 =>
1718
BFMA1O10i := 19;
1719
when 1048576 =>
1720
BFMA1o10I := 20;
1721
when 2097152 =>
1722
BFMA1O10i := 21;
1723
when 4194304 =>
1724
BFMA1O10i := 22;
1725
when 8388608 =>
1726
BFMA1O10i := 23;
1727
when 16777216 =>
1728
BFMA1o10I := 24;
1729
when 33554432 =>
1730
BFMA1O10i := 25;
1731
when 67108864 =>
1732
BFMA1o10I := 26;
1733
when 134217728 =>
1734
BFMA1o10I := 27;
1735
when 268435456 =>
1736
BFMA1o10I := 28;
1737
when 536870912 =>
1738
BFMA1O10i := 29;
1739
when 1073741824 =>
1740
BFMA1O10i := 30;
1741
when others =>
1742
assert FAlse report "Random function error" severity FailURE;
1743
end case;
1744
BFMA1L00i := To_slV32(seed);
1745
if (BFMA1o10I < 31) then
1746
BFMA1L00i(31 downto BFMA1O10i) := ( others => '0');
1747
end if;
1748
BFMA1O00i := to_INt_siGNEd(BFMA1l00I);
1749
return (BFMA1o00i);
1750
end BFMA1I0li;
1751
function BOund1K(BFMA1o1li: intEGEr;
1752
BFMA1L1li: Std_LOGic_vECTor)
1753
return BooleAN is
1754
variable BFMA1l10I: booLEAn;
1755
begin
1756
BFMA1l10I := FALse;
1757
case BFMA1O1li is
1758
when 0 =>
1759
if BFMA1L1li(9 downto 0) = "0000000000" then
1760
BFMA1L10i := TRue;
1761
end if;
1762
when 1 =>
1763
BFMA1L10i := True;
1764
when 2 =>
1765
when others =>
1766
assert False report "Illegal Burst Boundary Set" severity FailuRE;
1767
end case;
1768
return (BFMA1l10i);
1769
end bOUNd1k;
1770
end BFM_paCKAge;

powered by: WebSVN 2.1.0

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