05. exampleを比較する
uvm-1.1dとuvm-1.2のexampleを比較してみました。
1.examples/simple
diff -r uvm-1.1d/examples/simple uvm-1.2/examples/simple
では、バラバラと出てくるのですが、スペース、タブの違いを無視させる(-b追加)と、コード的な違いはありませんでした。細かいところ、コメントは変わっています。
- an uvm_blocking... → a uvm_blocking... とか
- the the *listener → the *listener とか
ネイティブの人?もこんな間違いをするんですね。
2.examples/integrated
diff -rb uvm-1.1d/examples/integrated uvm-1.2/examples/integrated
では、ちょこちょこコードが書き換わっていました。
- apb/apb_master.sv, apb/apb_monitor.sv (run_phase)
- virtual protected task → virtual task
- codec/tb_env.sv
- -regmodel.update(status) (1.1d)
- が書き換わっていました。1.2のために変えたというより、単に処理方法を変更した感じです。
- -report_phaseの処理部分が変わっていました。
- …量が多いので、diffの結果を貼り付けます。
diff -rb uvm-1.1d/examples/integrated/apb/apb_master.sv uvm-1.2/examples/integrated/apb/apb_master.sv
58c58
< virtual protected task run_phase(uvm_phase phase);
---
> virtual task run_phase(uvm_phase phase);
diff -rb uvm-1.1d/examples/integrated/apb/apb_monitor.sv uvm-1.2/examples/integrated/apb/apb_monitor.sv
63c63
< virtual protected task run_phase(uvm_phase phase);
---
> virtual task run_phase(uvm_phase phase);
diff -rb uvm-1.1d/examples/integrated/codec/tb_env.svh uvm-1.2/examples/integrated/codec/tb_env.svh
226c226,232
< regmodel.update(status);
---
> // update the settings BUT without writing the TxRx data register
> // regmodel.update(status);
> begin
> uvm_reg n[]='{regmodel.IntSrc, regmodel.IntMask, regmodel.TxStatus, regmodel.RxStatus};
> foreach(n[idx])
> n[idx].update(status);
> end
390c396,397
< function void report_phase(uvm_phase phase);
---
> function void report_phase(uvm_phase phase); uvm_coreservice_t cs_ = uvm_coreservice_t::get();
>
392c399
< svr = _global_reporter.get_report_server();
---
> svr = cs_.get_report_server();
diff -rb uvm-1.1d/examples/integrated/codec/test.sv uvm-1.2/examples/integrated/codec/test.sv
46,47c46,48
< function void start_of_simulation_phase(uvm_phase phase);
< uvm_root top = uvm_root::get();
---
> function void start_of_simulation_phase(uvm_phase phase); uvm_coreservice_t cs_ = uvm_coreservice_t::get();
>
> uvm_root top = cs_.get_root();
diff -rb uvm-1.1d/examples/integrated/codec/vip/vip_driver.svh uvm-1.2/examples/integrated/codec/vip/vip_driver.svh
104c104
< virtual protected task run_phase(uvm_phase phase);
---
> virtual task run_phase(uvm_phase phase);
diff -rb uvm-1.1d/examples/integrated/codec/vip/vip_monitor.svh uvm-1.2/examples/integrated/codec/vip/vip_monitor.svh
94c94
< virtual protected task run_phase(uvm_phase phase);
---
> virtual task run_phase(uvm_phase phase);
diff -rb uvm-1.1d/examples/integrated/codec/vip/vip_seqlib.svh uvm-1.2/examples/integrated/codec/vip/vip_seqlib.svh
26a27
> set_automatic_phase_objection(1);
28,39d28
<
< virtual task pre_body();
< if (starting_phase != null)
< starting_phase.raise_objection(this, {"Running sequence '",
< get_full_name(), "'"});
< endtask
<
< virtual task post_body();
< if (starting_phase != null)
< starting_phase.drop_objection(this, {"Completed sequence '",
< get_full_name(), "'"});
< endtask
diff -rb uvm-1.1d/examples/integrated/ubus/examples/Makefile.vcs uvm-1.2/examples/integrated/ubus/examples/Makefile.vcs
31c31
< ubus_tb_top.sv
---
> ubus_tb_top.sv +define+UVM_USE_RESOURCE_CONVERTER
diff -rb uvm-1.1d/examples/integrated/ubus/examples/ubus_tb_top.sv uvm-1.2/examples/integrated/ubus/examples/ubus_tb_top.sv
54,55c54,56
< initial begin
< uvm_config_db#(virtual ubus_if)::set(uvm_root::get(), "*", "vif", vif);
---
> initial begin automatic uvm_coreservice_t cs_ = uvm_coreservice_t::get();
>
> uvm_config_db#(virtual ubus_if)::set(cs_.get_root(), "*", "vif", vif);
diff -rb uvm-1.1d/examples/integrated/ubus/sv/ubus_master_seq_lib.sv uvm-1.2/examples/integrated/ubus/sv/ubus_master_seq_lib.sv
34a35
> set_automatic_phase_objection(1);
36,60d36
<
< // Raise in pre_body so the objection is only raised for root sequences.
< // There is no need to raise for sub-sequences since the root sequence
< // will encapsulate the sub-sequence.
< virtual task pre_body();
< if (starting_phase!=null) begin
< `uvm_info(get_type_name(),
< $sformatf("%s pre_body() raising %s objection",
< get_sequence_path(),
< starting_phase.get_name()), UVM_MEDIUM);
< starting_phase.raise_objection(this);
< end
< endtask
<
< // Drop the objection in the post_body so the objection is removed when
< // the root sequence is complete.
< virtual task post_body();
< if (starting_phase!=null) begin
< `uvm_info(get_type_name(),
< $sformatf("%s post_body() dropping %s objection",
< get_sequence_path(),
< starting_phase.get_name()), UVM_MEDIUM);
< starting_phase.drop_objection(this);
< end
< endtask
diff -rb uvm-1.1d/examples/integrated/ubus/sv/ubus_slave_seq_lib.sv uvm-1.2/examples/integrated/ubus/sv/ubus_slave_seq_lib.sv
35c35
< // `uvm_sequence_utils(simple_response_seq, ubus_slave_sequencer)
---
> // `uvm_object_utils(simple_response_seq)
76c76
< // `uvm_sequence_utils(slave_memory_seq, ubus_slave_sequencer)
---
> // `uvm_object_utils(slave_memory_seq)
116a117
> uvm_phase p;
121a123
> p = get_starting_phase();
129c131
< starting_phase.raise_objection(this);
---
> p.raise_objection(this);
134c136
< starting_phase.drop_objection(this);
---
> p.drop_objection(this);