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);