pkg
ここでは、以下の例が言いたいのだと思います。
- print_configの使い方と出力例
- printの出力例。uvm_default_printerを置き換えるとどうなるかも含む。
- factory.print(1)の出力例
initial begin
set_config_int("mu.*", "data", 101);
set_config_string("mu.*", "str", "hi");
set_config_int("mu.l1", "data", 55);
set_config_object("mu.*", "obj", bar);
//mu.print_config_settings("", null, 1);
mu.print_config(1,0);
uvm_default_printer = uvm_default_tree_printer;
mu.print();
factory.print(1);
run_test();
mu.print();
end
mu.print_config_settings("", null, 1); の実行結果が長く見づらく、そしてDUPRECATEDって書いてあったので、代わりに mu.print_config(1,0); の実行結果に置き換えました。
# UVM_INFO @ 0: mu [CFGPRT] visible resources:
# <none>
# UVM_INFO @ 0: mu.l1 [CFGPRT] visible resources:
# str [mu.*] : (string) hi
# -
# str [mu.l1] : (string) hi
# -
# obj [mu.*] : (class uvm_pkg::uvm_config_object_wrapper) @mydata@2 1
# -
# obj [mu.*] : (class uvm_pkg::uvm_object) {} 482 1 492 @uvm_status_container@1
# -
# data [mu.l1] : (reg signed[4095:0]) 55
# -
# data [mu.*] : (reg signed[4095:0]) 101
# -
# da* [mu.*] : (reg signed[4095:0]) 256
# -
# UVM_INFO @ 0: mu.l2 [CFGPRT] visible resources:
# str [mu.*] : (string) hi
# -
# obj [mu.*] : (class uvm_pkg::uvm_config_object_wrapper) @mydata@2 1
# -
# obj [mu.*] : (class uvm_pkg::uvm_object) {} 482 1 493 @uvm_status_container@1
# -
# data [mu.*] : (reg signed[4095:0]) 101
# -
# da* [mu.*] : (reg signed[4095:0]) 256
# -
mu.print();を実行すると、以下のログが出るのですが
# -------------------------------
# Name Type Size Value
# -------------------------------
# mu myunit - @338
# l1 lower - @348
# data integral 32 'h30
# str string 0 ""
# l2 lower - @356
# data integral 32 'h40
# str string 0 ""
# a array 5 -
# [0] integral 32 'h0
# [1] integral 32 'h1
# [2] integral 32 'h4
# [3] integral 32 'h9
# [4] integral 32 'h10
# -------------------------------
その前に、uvm_default_printer = uvm_default_tree_printer; を実行しておくとこうなります。
# mu: (myunit@338) {
# l1: (lower@348) {
# data: 'h30
# str: ""
# }
# l2: (lower@356) {
# data: 'h40
# str: ""
# }
# a: {
# [0]: 'h0
# [1]: 'h1
# [2]: 'h4
# [3]: 'h9
# [4]: 'h10
# }
# }
uvm_printerに興味がわいたので、調べてみました。セットできるものは
- uvm_default_tree_printer
- uvm_default_line_printer
- uvm_default_table_printer
があり、初期値は uvm_default_table_printer だそうです。なお、line_printerの適用結果も載せようと思いましたが、このprinterは1行にメンバ値を出すものでした。見づらいので掲載は省きます。
なお、それぞれのprinterは細かい調整が可能で、それは以下のように記述すればいいようです。
- uvm_default_table_printer.knobs.name_width=20;
- uvm_default_table_printer.knobs.type_width=50;
- uvm_default_table_printer.knobs.size_width=10;
- uvm_default_table_printer.knobs.value_width=14;
変更可能なパラメータの種類は、uvmクラスライブラリに付属するHTML版のマニュアルをご覧ください。
factory.print(1);の実行結果は
#### Factory Configuration (*)
#
# No instance or type overrides are registered with this factory
#
# All types registered with the factory: 39 total
# (types without type names will not be printed)
#
# Type Name
# ---------
# lower
# myobject
# myunit
# (*) Types with no associated type name will be printed as <unknown>
でした。inst_overrideやtype_overrideの結果も出るよ、と書かれてますね。