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

Subversion Repositories uart2bus_testbench

[/] [uart2bus_testbench/] [trunk/] [tb/] [uvm_src/] [macros/] [uvm_printer_defines.svh] - Blame information for rev 16

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 16 HanySalah
//----------------------------------------------------------------------
2
//   Copyright 2007-2010 Mentor Graphics Corporation
3
//   Copyright 2007-2011 Cadence Design Systems, Inc.
4
//   Copyright 2010 Synopsys, Inc.
5
//   All Rights Reserved Worldwide
6
//
7
//   Licensed under the Apache License, Version 2.0 (the
8
//   "License"); you may not use this file except in
9
//   compliance with the License.  You may obtain a copy of
10
//   the License at
11
//
12
//       http://www.apache.org/licenses/LICENSE-2.0
13
//
14
//   Unless required by applicable law or agreed to in
15
//   writing, software distributed under the License is
16
//   distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
17
//   CONDITIONS OF ANY KIND, either express or implied.  See
18
//   the License for the specific language governing
19
//   permissions and limitations under the License.
20
//----------------------------------------------------------------------
21
 
22
//------------------------------------------------------------------------------
23
//
24
// MACROS for uvm_printer usage
25
//
26
// Provides a set of printing macros that will call appropriate print methods
27
// inside of a uvm_printer object. All macros have two versions: one assumes
28
// a printer named printer is available in scope; the other takes a printer
29
// argument.
30
//
31
//------------------------------------------------------------------------------
32
 
33
`ifndef UVM_PRINTER_DEFINES_SVH
34
`define UVM_PRINTER_DEFINES_SVH
35
 
36
// uvm_print_int*
37
// --------------
38
 
39
`define uvm_print_int(F, R) \
40
  `uvm_print_int3(F, R, uvm_default_printer)
41
 
42
`define uvm_print_int3(F, R, P) \
43
   do begin \
44
     uvm_printer p__; \
45
     if(P!=null) p__ = P; \
46
     else p__ = uvm_default_printer; \
47
     `uvm_print_int4(F, R, `"F`", p__) \
48
   end while(0);
49
 
50
`define uvm_print_int4(F, R, NM, P) \
51
    if ($bits(F) > 64) \
52
      P.print_field(NM, F, $bits(F), R, "["); \
53
    else \
54
      P.print_field_int(NM, F, $bits(F), R, "[");
55
 
56
 
57
// uvm_print_enum
58
// --------------
59
 
60
`define uvm_print_enum(T, F, NM, P) \
61
    P.print_generic(NM, `"T`", $bits(F), F.name(), "[");
62
 
63
 
64
// uvm_print_object*
65
// -----------------
66
 
67
`define uvm_print_object(F) \
68
  `uvm_print_object2(F, uvm_default_printer)
69
 
70
`define uvm_print_object2(F, P) \
71
   do begin \
72
     uvm_printer p__; \
73
     if(P!=null) p__ = P; \
74
     else p__ = uvm_default_printer; \
75
     p__.print_object(`"F`", F, "["); \
76
   end while(0);
77
 
78
 
79
// uvm_print_string*
80
// -----------------
81
 
82
`define uvm_print_string(F) \
83
  `uvm_print_string2(F, uvm_default_printer)
84
 
85
`define uvm_print_string2(F, P) \
86
   do begin \
87
     uvm_printer p__; \
88
     if(P!=null) p__ = P; \
89
     else p__ = uvm_default_printer; \
90
     p__.print_string(`"F`", F, "["); \
91
   end while(0);
92
 
93
 
94
// uvm_print_array*
95
// ----------------
96
 
97
`define uvm_print_array_int(F, R) \
98
  `uvm_print_array_int3(F, R, uvm_default_printer)
99
 
100
`define uvm_print_array_int3(F, R, P) \
101
  `uvm_print_qda_int4(F, R, P, da)
102
 
103
 
104
// uvm_print_sarray*
105
// -----------------
106
 
107
`define uvm_print_sarray_int3(F, R, P) \
108
  `uvm_print_qda_int4(F, R, P, sa)
109
 
110
`define uvm_print_qda_int4(F, R, P, T) \
111
  begin \
112
    uvm_printer p__; \
113
    uvm_printer_knobs k__; \
114
    int curr, max__; max__=0; curr=0; \
115
    if(P!=null) p__ = P; \
116
    else p__ = uvm_default_printer; \
117
    max__ = $right(F)+1; \
118
//    max__=$size(F); \
119
    p__.print_array_header (`"F`", max__,`"T``(integral)`"); \
120
    k__ = p__.knobs; \
121
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
122
    begin \
123
      foreach(F[i__]) begin \
124
        if(k__.begin_elements == -1 || k__.end_elements == -1 || curr < k__.begin_elements ) begin \
125
          `uvm_print_int4(F[curr], R, p__.index_string(curr), p__) \
126
        end \
127
        else break; \
128
        curr++; \
129
      end \
130
      if(curr
131
        if((max__-k__.end_elements) > curr) curr = max__-k__.end_elements; \
132
        if(curr
133
        else begin \
134
          p__.print_array_range(k__.begin_elements, curr-1); \
135
        end \
136
        for(curr=curr; curr
137
          `uvm_print_int4(F[curr], R, p__.index_string(curr), p__) \
138
        end \
139
      end \
140
    end \
141
    p__.print_array_footer(max__); \
142
    //p__.print_footer(); \
143
  end
144
 
145
`define uvm_print_qda_enum(F, P, T, ET) \
146
  begin \
147
    uvm_printer p__; \
148
    uvm_printer_knobs k__; \
149
    int curr, max__; max__=0; curr=0; \
150
    if(P!=null) p__ = P; \
151
    else p__ = uvm_default_printer; \
152
    foreach(F[i]) max__ = i+1; \
153
    //max__=$size(F); \
154
    p__.print_array_header (`"F`", max__,`"T``(``ET``)`"); \
155
    k__ = p__.knobs; \
156
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
157
    begin \
158
      foreach(F[i__]) begin \
159
        if(k__.begin_elements == -1 || k__.end_elements == -1 || curr < k__.begin_elements ) begin \
160
          `uvm_print_enum(ET, F[curr], p__.index_string(curr), p__) \
161
        end \
162
        else break; \
163
        curr++; \
164
      end \
165
      if(curr
166
        if((max__-k__.end_elements) > curr) curr = max__-k__.end_elements; \
167
        if(curr
168
        else begin \
169
          p__.print_array_range(k__.begin_elements, curr-1); \
170
        end \
171
        for(curr=curr; curr
172
          `uvm_print_enum(ET, F[curr], p__.index_string(curr), p__) \
173
        end \
174
      end \
175
    end \
176
    p__.print_array_footer(max__); \
177
    //p__.print_footer(); \
178
  end
179
 
180
`define uvm_print_queue_int(F, R) \
181
  `uvm_print_queue_int3(F, R, uvm_default_printer)
182
 
183
`define uvm_print_queue_int3(F, R, P) \
184
  `uvm_print_qda_int3(F, R, P, queue)
185
 
186
`define uvm_print_array_object(F,FLAG) \
187
  `uvm_print_array_object3(F, uvm_default_printer,FLAG)
188
 
189
`define uvm_print_sarray_object(F,FLAG) \
190
  `uvm_print_sarray_object3(F, uvm_default_printer,FLAG)
191
 
192
`define uvm_print_array_object3(F, P,FLAG) \
193
  `uvm_print_object_qda4(F, P, da,FLAG)
194
 
195
`define uvm_print_sarray_object3(F, P,FLAG) \
196
  `uvm_print_object_qda4(F, P, sa,FLAG)
197
 
198
`define uvm_print_object_qda4(F, P, T,FLAG) \
199
  do begin \
200
    int curr, max__; \
201
    uvm_printer p__; \
202
    max__=0; curr=0; \
203
    if(P!=null) p__ = P; \
204
    else p__ = uvm_default_printer; \
205
    //max__=$size(F); \
206
    foreach(F[i]) max__ = i+1; \
207
\
208
    //p__.print_header();\
209
\
210
    p__.m_scope.set_arg(`"F`");\
211
    p__.print_array_header(`"F`", max__, `"T``(object)`");\
212
    if((p__.knobs.depth == -1) || (p__.knobs.depth+1 > p__.m_scope.depth())) \
213
    begin\
214
      for(curr=0; curr
215
         p__.knobs.end_elements == -1 || curr
216
        if(((FLAG)&UVM_REFERENCE) == 0) \
217
          p__.print_object(p__.index_string(curr), F[curr], "[");\
218
        else \
219
          p__.print_object_header(p__.index_string(curr), F[curr], "[");\
220
      end \
221
      if(curr
222
        curr = max__-p__.knobs.end_elements;\
223
        if(curr
224
        else begin\
225
          p__.print_array_range(p__.knobs.begin_elements, curr-1);\
226
        end\
227
        for(curr=curr; curr
228
          if(((FLAG)&UVM_REFERENCE) == 0) \
229
            p__.print_object(p__.index_string(curr), F[curr], "[");\
230
          else \
231
            p__.print_object_header(p__.index_string(curr), F[curr], "[");\
232
        end \
233
      end\
234
    end \
235
\
236
    p__.print_array_footer(max__); \
237
    //p__.print_footer(); \
238
  end while(0);
239
 
240
`define uvm_print_object_queue(F,FLAG) \
241
  `uvm_print_object_queue3(F, uvm_default_printer,FLAG)
242
 
243
`define uvm_print_object_queue3(F, P,FLAG) \
244
  do begin \
245
    `uvm_print_object_qda4(F,P, queue,FLAG); \
246
  end while(0);
247
 
248
`define uvm_print_array_string(F) \
249
  `uvm_print_array_string2(F, uvm_default_printer)
250
 
251
`define uvm_print_array_string2(F, P) \
252
   `uvm_print_string_qda3(F, P, da)
253
 
254
`define uvm_print_sarray_string2(F, P) \
255
   `uvm_print_string_qda3(F, P, sa)
256
 
257
`define uvm_print_string_qda3(F, P, T) \
258
  do begin \
259
    int curr, max__; \
260
    uvm_printer p__; \
261
    max__=0; curr=0; \
262
    //max__=$size(F); \
263
    foreach(F[i]) max__ = i+1; \
264
    if(P!=null) p__ = P; \
265
    else p__ = uvm_default_printer; \
266
\
267
    //p__.print_header();\
268
\
269
    p__.m_scope.set_arg(`"F`");\
270
    p__.print_array_header(`"F`", max__, `"T``(string)`");\
271
    if((p__.knobs.depth == -1) || (p__.knobs.depth+1 > p__.m_scope.depth())) \
272
    begin\
273
      for(curr=0; curr
274
        p__.print_string(p__.index_string(curr), F[curr], "[");\
275
      end \
276
      if(curr
277
        curr = max__-p__.knobs.end_elements;\
278
        if(curr
279
        else begin\
280
          p__.print_array_range(p__.knobs.begin_elements, curr-1);\
281
        end\
282
        for(curr=curr; curr
283
          p__.print_string(p__.index_string(curr), F[curr], "[");\
284
        end \
285
      end\
286
    end \
287
\
288
    p__.print_array_footer(max__); \
289
    //p__.print_footer(); \
290
  end while(0);
291
 
292
`define uvm_print_string_queue(F) \
293
  `uvm_print_string_queue2(F, uvm_default_printer)
294
 
295
`define uvm_print_string_queue2(F, P) \
296
  do begin \
297
    `uvm_print_string_qda3(F,P, queue); \
298
  end while(0);
299
 
300
//-----------------------------------------------------------------------------
301
//
302
// Associative array printing methods
303
//
304
//-----------------------------------------------------------------------------
305
`define uvm_print_aa_string_int(F) \
306
  `uvm_print_aa_string_int3(F, R, uvm_default_printer)
307
 
308
 
309
`define uvm_print_aa_string_int3(F, R, P) \
310
  begin \
311
    uvm_printer p__; \
312
    uvm_printer_knobs k__; \
313
    if(P!=null) p__ = P; \
314
    else p__ = uvm_default_printer; \
315
    p__.print_array_header (`"F`", F.num(), "aa(int,string)"); \
316
    k__ = p__.knobs; \
317
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
318
    begin \
319
      foreach(F[string_aa_key]) \
320
          `uvm_print_int4(F[string_aa_key], R,  \
321
                                {"[", string_aa_key, "]"}, p__) \
322
    end \
323
    p__.print_array_footer(F.num()); \
324
    //p__.print_footer(); \
325
  end
326
 
327
`define uvm_print_aa_string_object(F,FLAG) \
328
  `uvm_print_aa_string_object_3(F, uvm_default_printer,FLAG)
329
 
330
`define uvm_print_aa_string_object3(F, P,FLAG) \
331
  begin \
332
    uvm_printer p__; \
333
    uvm_printer_knobs k__; \
334
    uvm_object u__; \
335
    if(P!=null) p__ = P; \
336
    else p__ = uvm_default_printer; \
337
    p__.print_array_header (`"F`", F.num(), "aa(object,string)"); \
338
    k__ = p__.knobs; \
339
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
340
    begin \
341
      foreach(F[string_aa_key]) begin \
342
          if(((FLAG)&UVM_REFERENCE)==0) \
343
            p__.print_object({"[", string_aa_key, "]"}, F[string_aa_key], "[");\
344
          else \
345
            p__.print_object_header({"[", string_aa_key, "]"}, F[string_aa_key], "[");\
346
      end \
347
    end \
348
    p__.print_array_footer(F.num()); \
349
    //p__.print_footer(); \
350
  end
351
 
352
`define uvm_print_aa_string_string(F) \
353
  `uvm_print_aa_string_string_2(F, uvm_default_printer)
354
 
355
`define uvm_print_aa_string_string2(F, P) \
356
  begin \
357
    uvm_printer p__; \
358
    uvm_printer_knobs k__; \
359
    if(P!=null) p__ = P; \
360
    else p__ = uvm_default_printer; \
361
    p__.print_array_header (`"F`", F.num(), "aa(string,string)"); \
362
    k__ = p__.knobs; \
363
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
364
    begin \
365
      foreach(F[string_aa_key]) \
366
          p__.print_string({"[", string_aa_key, "]"}, F[string_aa_key], "["); \
367
    end \
368
    p__.print_array_footer(F.num()); \
369
    //p__.print_footer(); \
370
  end
371
 
372
`define uvm_print_aa_int_object(F,FLAG) \
373
  `uvm_print_aa_int_object_3(F, uvm_default_printer,FLAG)
374
 
375
`define uvm_print_aa_int_object3(F, P,FLAG) \
376
  begin \
377
    uvm_printer p__; \
378
    uvm_printer_knobs k__; \
379
    uvm_object u__; \
380
    int key; \
381
    if(P!=null) p__ = P; \
382
    else p__ = uvm_default_printer; \
383
    p__.print_array_header (`"F`", F.num(), "aa(object,int)"); \
384
    k__ = p__.knobs; \
385
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
386
    begin \
387
      foreach(F[key]) begin \
388
          $swrite(__m_uvm_status_container.stringv, "[%0d]", key); \
389
          if(((FLAG)&UVM_REFERENCE)==0) \
390
            p__.print_object(__m_uvm_status_container.stringv, F[key], "[");\
391
          else \
392
            p__.print_object_header(__m_uvm_status_container.stringv, F[key], "[");\
393
      end \
394
    end \
395
    p__.print_array_footer(F.num()); \
396
    //p__.print_footer(); \
397
  end
398
 
399
`define uvm_print_aa_int_key4(KEY, F, R, P) \
400
  begin \
401
    uvm_printer p__; \
402
    uvm_printer_knobs k__; \
403
    if(P!=null) p__ = P; \
404
    else p__ = uvm_default_printer; \
405
    __m_uvm_status_container.stringv = "aa(int,int)"; \
406
    for(int i=0; i<__m_uvm_status_container.stringv.len(); ++i) \
407
      if(__m_uvm_status_container.stringv[i] == " ") \
408
        __m_uvm_status_container.stringv[i] = "_"; \
409
    p__.print_array_header (`"F`", F.num(), __m_uvm_status_container.stringv); \
410
    k__ = p__.knobs; \
411
    if((p__.knobs.depth == -1) || (p__.m_scope.depth() < p__.knobs.depth+1)) \
412
    begin \
413
      foreach(F[aa_key]) begin \
414
          `uvm_print_int4(F[aa_key], R,  \
415
                                {"[", $sformatf("%0d",aa_key), "]"}, p__) \
416
      end \
417
    end \
418
    p__.print_array_footer(F.num()); \
419
    //p__.print_footer(); \
420
  end
421
 
422
`endif

powered by: WebSVN 2.1.0

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