13 `uvm_object_utils_begin(cl_syoscb_printer_config)
20 extern function new(string name = "cl_syoscb_printer_config");
27 extern static function void
copy_printer(uvm_printer from, uvm_printer to);
30 extern static function void
do_help_pack(uvm_printer printer, uvm_packer packer);
31 extern static function uvm_printer
do_help_unpack(uvm_packer packer);
37 function cl_syoscb_printer_config::new(string name = "cl_syoscb_printer_config");
48 printer.knobs.mcd = fd;
58 return printer.get_file();
60 return printer.knobs.mcd;
72 uvm_table_printer table_printer;
73 uvm_line_printer line_printer;
74 uvm_tree_printer tree_printer;
78 if($cast(table_printer, printer)) begin
79 ptype = pk_syoscb::SYOSCB_PRINTER_TABLE;
80 end else if ($cast(line_printer, printer)) begin
81 ptype = pk_syoscb::SYOSCB_PRINTER_LINE;
82 end else if ($cast(tree_printer, printer)) begin
83 ptype = pk_syoscb::SYOSCB_PRINTER_TREE;
84 end else if ($cast(xml_printer, printer)) begin
85 ptype = pk_syoscb::SYOSCB_PRINTER_XML;
88 ptype = ptype.first();
89 res = "Unable to determine printer type as it was not of of ";
90 res = {res, $sformatf(
"%s(%0d)", ptype.name(), ptype)};
91 while(ptype != ptype.last()) begin
93 res = {res, $sformatf(
", %s(%0d)", ptype.name(), ptype)};
95 `uvm_fatal(
"PRINTER", res)
99 endfunction: get_printer_type
111 pk_syoscb::SYOSCB_PRINTER_TABLE: begin
117 pk_syoscb::SYOSCB_PRINTER_TREE: begin
123 pk_syoscb::SYOSCB_PRINTER_LINE: begin
129 pk_syoscb::SYOSCB_PRINTER_XML: begin
141 res =
"Unable to generate a printer object as input type did not match one of ";
142 res = {res, $sformatf(
"%s(%0d)", loop.name(), loop)};
144 while(loop != loop.last()) begin
146 res = {res, $sformatf(
", %s(%0d)", loop.name(), loop)};
148 res = {res, $sformatf(
". Got %s(%0d)", ptype.name(), ptype)};
149 `uvm_fatal(
"PRINTER", res)
154 endfunction: get_printer_of_type
162 to.set_name_enabled(from.get_name_enabled());
163 to.set_type_name_enabled(from.get_type_name_enabled());
164 to.set_size_enabled(from.get_size_enabled());
165 to.set_id_enabled(from.get_id_enabled());
166 to.set_radix_enabled(from.get_radix_enabled());
167 to.set_radix_string(UVM_DEC, from.get_radix_string(UVM_DEC));
168 to.set_radix_string(UVM_BIN, from.get_radix_string(UVM_BIN));
169 to.set_radix_string(UVM_OCT, from.get_radix_string(UVM_OCT));
170 to.set_radix_string(UVM_UNSIGNED, from.get_radix_string(UVM_UNSIGNED));
171 to.set_radix_string(UVM_HEX, from.get_radix_string(UVM_HEX));
172 to.set_default_radix(from.get_default_radix());
173 to.set_root_enabled(from.get_root_enabled());
174 to.set_recursion_policy(from.get_recursion_policy());
175 to.set_max_depth(from.get_max_depth());
176 to.set_file(from.get_file());
177 to.set_line_prefix(from.get_line_prefix());
178 to.set_begin_elements(from.get_begin_elements());
179 to.set_end_elements(from.get_end_elements());
181 to.knobs.header = from.knobs.header;
182 to.knobs.footer = from.knobs.footer;
183 to.knobs.full_name = from.knobs.full_name;
184 to.knobs.identifier = from.knobs.identifier;
185 to.knobs.type_name = from.knobs.type_name;
186 to.knobs.size = from.knobs.size;
187 to.knobs.depth = from.knobs.depth;
188 to.knobs.reference = from.knobs.reference;
189 to.knobs.begin_elements = from.knobs.begin_elements;
190 to.knobs.end_elements = from.knobs.end_elements;
191 to.knobs.prefix = from.knobs.prefix;
192 to.knobs.indent = from.knobs.indent;
193 to.knobs.show_root = from.knobs.show_root;
194 to.knobs.mcd = from.knobs.mcd;
195 to.knobs.separator = from.knobs.separator;
196 to.knobs.show_radix = from.knobs.show_radix;
197 to.knobs.default_radix = from.knobs.default_radix;
198 to.knobs.dec_radix = from.knobs.dec_radix;
199 to.knobs.bin_radix = from.knobs.bin_radix;
200 to.knobs.oct_radix = from.knobs.oct_radix;
201 to.knobs.unsigned_radix = from.knobs.unsigned_radix;
202 to.knobs.hex_radix = from.knobs.hex_radix;
204 endfunction: copy_printer
216 bit type_name_enabled;
224 string unsigned_radix;
225 uvm_radix_enum default_radix;
227 uvm_recursion_policy_enum policy;
233 t_printer_type ptype;
236 if(printer != null) begin
237 packer.pack_field_int(1, 4);
239 packer.pack_field_int(0, 4);
244 name_enabled = printer.get_name_enabled();
245 type_name_enabled = printer.get_type_name_enabled();
246 size_enabled = printer.get_size_enabled();
247 id_enabled = printer.get_id_enabled();
248 radix_enabled = printer.get_radix_enabled();
249 dec_radix = printer.get_radix_string(UVM_DEC);
250 bin_radix = printer.get_radix_string(UVM_BIN);
251 oct_radix = printer.get_radix_string(UVM_OCT);
252 hex_radix = printer.get_radix_string(UVM_HEX);
253 unsigned_radix = printer.get_radix_string(UVM_UNSIGNED);
254 default_radix = printer.get_default_radix();
255 root_enabled = printer.get_root_enabled();
256 policy = printer.get_recursion_policy();
257 max_depth = printer.get_max_depth();
258 file = printer.get_file();
259 line_prefix = printer.get_line_prefix();
260 begin_elements = printer.get_begin_elements();
261 end_elements = printer.get_end_elements();
263 name_enabled = printer.knobs.identifier;
264 type_name_enabled = printer.knobs.type_name;
265 size_enabled = printer.knobs.size;
266 id_enabled = printer.knobs.reference;
267 radix_enabled = printer.knobs.show_radix;
268 dec_radix = printer.knobs.dec_radix;
269 bin_radix = printer.knobs.bin_radix;
270 oct_radix = printer.knobs.oct_radix;
271 hex_radix = printer.knobs.hex_radix;
272 unsigned_radix = printer.knobs.unsigned_radix;
273 default_radix = printer.knobs.default_radix;
274 root_enabled = printer.knobs.show_root;
275 policy = UVM_DEFAULT_POLICY;
276 max_depth = printer.knobs.depth;
277 file = printer.knobs.mcd;
278 line_prefix = printer.knobs.prefix;
279 begin_elements = printer.knobs.begin_elements;
280 end_elements = printer.knobs.end_elements;
285 ptype = get_printer_type(printer);
286 packer.pack_field_int(ptype, $bits(ptype));
287 packer.pack_field_int(name_enabled, $bits(name_enabled));
288 packer.pack_field_int(type_name_enabled, $bits(type_name_enabled));
289 packer.pack_field_int(size_enabled, $bits(size_enabled));
290 packer.pack_field_int(id_enabled, $bits(id_enabled));
291 packer.pack_field_int(radix_enabled, $bits(radix_enabled));
292 packer.pack_string(dec_radix);
293 packer.pack_string(bin_radix);
294 packer.pack_string(oct_radix);
295 packer.pack_string(hex_radix);
296 packer.pack_string(unsigned_radix);
297 packer.pack_field_int(default_radix, $bits(default_radix));
298 packer.pack_field_int(root_enabled, $bits(root_enabled));
299 packer.pack_field_int(policy, $bits(policy));
300 packer.pack_field_int(max_depth, $bits(max_depth));
301 packer.pack_field_int(file, $bits(file));
302 packer.pack_string(line_prefix);
303 packer.pack_field_int(begin_elements, $bits(begin_elements));
304 packer.pack_field_int(end_elements, $bits(end_elements));
305 endfunction: do_help_pack
318 bit type_name_enabled;
326 string unsigned_radix;
327 uvm_radix_enum default_radix;
329 uvm_recursion_policy_enum policy;
336 int default_radix_value;
338 t_printer_type ptype;
342 is_null = packer.unpack_field_int($bits(is_null));
343 if(is_null == 4
'b0) begin 347 ptype_value = packer.unpack_field_int($bits(ptype)); 348 name_enabled = packer.unpack_field_int($bits(name_enabled)); 349 type_name_enabled = packer.unpack_field_int($bits(type_name_enabled)); 350 size_enabled = packer.unpack_field_int($bits(size_enabled)); 351 id_enabled = packer.unpack_field_int($bits(id_enabled)); 352 radix_enabled = packer.unpack_field_int($bits(radix_enabled)); 353 dec_radix = packer.unpack_string(); 354 bin_radix = packer.unpack_string(); 355 oct_radix = packer.unpack_string(); 356 hex_radix = packer.unpack_string(); 357 unsigned_radix = packer.unpack_string(); 358 default_radix_value = packer.unpack_field_int($bits(default_radix)); 359 root_enabled = packer.unpack_field_int($bits(root_enabled)); 360 policy_value = packer.unpack_field_int($bits(policy)); 361 max_depth = packer.unpack_field_int($bits(max_depth)); 362 file = packer.unpack_field_int($bits(file)); 363 line_prefix = packer.unpack_string(); 364 begin_elements = packer.unpack_field_int($bits(begin_elements)); 365 end_elements = packer.unpack_field_int($bits(end_elements)); 367 //To conform to strong enum typing, we must use this workaround when assigning the value of policy, default_radix, printer_type 368 //Iterate through all possible enumeration values, check if they match retrieved value. 369 //If not, throw an error 370 default_radix = default_radix.first(); 371 while(default_radix != default_radix_value && default_radix != default_radix.last()) begin 372 default_radix = default_radix.next(); 374 if(default_radix != default_radix_value) begin 375 `uvm_error("ENUM_DECODE", $sformatf("Unable to interpret 'default_radix
' enum. Unpacked value was %0d which is not valid", default_radix_value)) 378 policy = policy.first(); 379 while(policy != policy_value && policy != policy.last()) begin 380 policy = policy.next(); 382 if(policy != policy_value) begin 383 `uvm_error("ENUM_DECODE", $sformatf("Unable to interpret 'policy
' enum. Unpacked value was %0d which is not valid", policy_value)) 386 ptype = ptype.first(); 387 while(ptype != ptype_value && ptype != ptype.last()) begin 388 ptype = ptype.next(); 390 if(ptype != ptype_value) begin 391 `uvm_error("ENUM_DECODE", $sformatf("Unable to interpret 'ptype
' enum. Unpacked value was %0d which is not valid", ptype_value)) 394 printer = get_printer_of_type(ptype); 397 printer.set_name_enabled(name_enabled); 398 printer.set_type_name_enabled(type_name_enabled); 399 printer.set_size_enabled(size_enabled); 400 printer.set_id_enabled(id_enabled); 401 printer.set_radix_enabled(radix_enabled); 402 printer.set_radix_string(UVM_DEC, dec_radix); 403 printer.set_radix_string(UVM_BIN, bin_radix); 404 printer.set_radix_string(UVM_OCT, oct_radix); 405 printer.set_radix_string(UVM_HEX, hex_radix); 406 printer.set_radix_string(UVM_UNSIGNED, unsigned_radix); 407 printer.set_default_radix(default_radix); 408 printer.set_root_enabled(root_enabled); 409 printer.set_recursion_policy(policy); 410 printer.set_max_depth(max_depth); 411 printer.set_file(file); 412 printer.set_line_prefix(line_prefix); 413 printer.set_begin_elements(begin_elements); 414 printer.set_end_elements(end_elements); 416 printer.knobs.identifier = name_enabled; 417 printer.knobs.type_name = type_name_enabled; 418 printer.knobs.size = size_enabled; 419 printer.knobs.reference = id_enabled; 420 printer.knobs.dec_radix = dec_radix; 421 printer.knobs.bin_radix = bin_radix; 422 printer.knobs.oct_radix = oct_radix; 423 printer.knobs.hex_radix = hex_radix; 424 printer.knobs.unsigned_radix = unsigned_radix; 425 printer.knobs.default_radix = default_radix; 426 printer.knobs.show_root = root_enabled; 427 printer.knobs.depth = max_depth; 428 printer.knobs.mcd = file; 429 printer.knobs.prefix = line_prefix; 430 printer.knobs.begin_elements = begin_elements; 431 printer.knobs.end_elements = end_elements; 435 endfunction: do_help_unpack 441 function void cl_syoscb_printer_config::set_printer_begin_elements(uvm_printer printer,
444 printer.set_begin_elements(elements);
446 printer.knobs.begin_elements = elements;
448 endfunction: set_printer_begin_elements
454 function void cl_syoscb_printer_config::set_printer_end_elements(uvm_printer printer,
457 printer.set_end_elements(elements);
459 printer.knobs.end_elements = elements;
461 endfunction: set_printer_end_elements
static uvm_printer get_printer_of_type(t_printer_type ptype)
Generates a new printer of the correct type.
static int get_file_descriptor(uvm_printer printer)
Gets the file descriptor used for a given printer.
An XML printer for cl_syoscb_items.
static void set_printer_begin_elements(uvm_printer printer, int elements)
Sets the number of elements to print at the head of a list whenever the printer is used to print a tx...
static void set_printer_end_elements(uvm_printer printer, int elements)
Sets the number of elements to print at the tail of a list whenever the printer is used to print a tx...
static void copy_printer(uvm_printer from, uvm_printer to)
Copies all config information from one printer to another printer.
static void do_help_pack(uvm_printer printer, uvm_packer packer)
Packs all configuration data for the given uvm_printer using the given uvm_packer.
static void set_file_descriptor(uvm_printer printer, int fd=0)
Sets the file descriptor to be used for a given printer.
static t_printer_type get_printer_type(uvm_printer printer)
Gets the type of printer that a given uvm_printer represents.
Utility class used to perform manipulations of uvm_printer objects.
static uvm_printer do_help_unpack(uvm_packer packer)
Unpacks printer configuration data and returns a printer with that configuration. ...