00a. uvm-1.2を試す

uvm-1.2がリリースされましたので、早速家の環境で試してみることにしました。

uvm-1.2はこちらから

動作確認環境は、「01. 10日で身に付けるUVMの基礎」の10日目環境です。

  1. とりあえずtar.gzを展開しますと、uvm-1.2/.nfsxxxxというゴミファイルが見つかります。放置してもいいですが、気持ち悪い方は消してしまいましょう
  2. 家の環境では、まずuvm packageをコンパイルするところから始まります
    1. → これは通りました。
  3. テストモデルをコンパイルで落ちました。
    1. +define+UVM_NO_DEPRECATEDをつけているから。
      1. 外すとコンパイルが通って動いて見えるのですが、やはりobjection処理が適切にされないために、Simulation時間が0psで終わってしまいました。本当なら700psまで動く環境なのです(下記 ログ参照ください)
      2. +define+UVM_DEPRECATED_STARTING_PHASEにしても、やはりコンパイルは通るけれども、実行時にobjection処理の問題で0psで終わりました。
      3. 結論:sequenceのobjection処理は、変換ツールで変換するか、下記のset_automatic_phase_objectionを使いましょう。
    2. uvm_sequenceを継承したsequence定義ファイルの、pre_body, post_bodyに書いたobjection処理内、starting_phaseがそのまま参照できなくなりました。
      1. uvm-1.2/bin/uvm11-to-uvm12.plで変換してみて、とリリースノートにはありますが、家のcygwin環境にはなぜかdiffがなくて落ちました…職場の方は使えると思います。このツールは、変更 したいソースコードの置いてあるディレクトリに移動して、実行するのが良さそうです。ツールは、別ディレクトリを作成して、変換結果を出力するもよう
      2. 手修正するのは難しいかも。starting_phase自体はprivateになったもようで、uvm_phase _phase; などの変数を定義して、_phase = get_starting_phase(); と書けるのですが、この_phaseに raise_objectionとかdrop_objectionができるわけでもなく(試してませんが)、そもそもテストベンチ全体でobjection管理をしなければならないため、ローカル変数 _phaseで何かできるわけ でもありません。なので、既存のobjection記述を頑張って置き換えるのはたいへん…かもしれません
      3. 下記4番の修正方法が簡単だと思います
  4. 修正
    1. uvm_sequence記述の、pre_bodyやpost_bodyなどに記述している、starting_phase系の処理ブロックはそっくりコメントアウトなどします
    2. function newの中に、以下の記述を追加します
      1. set_automatic_phase_objection(1);
  5. 4番の修正により、家のなんちゃって環境はuvm-1.2で動作しました。

ログ:

# ----------------------------------------------------------------
# UVM-1.2
# (C) 2007-2014 Mentor Graphics Corporation
# (C) 2007-2014 Cadence Design Systems, Inc.
# (C) 2006-2014 Synopsys, Inc.
# (C) 2011-2013 Cypress Semiconductor Corp.
# (C) 2013-2014 NVIDIA Corporation
# ----------------------------------------------------------------
#
#   ***********       IMPORTANT RELEASE NOTES         ************
#
#   You are using a version of the UVM library that has been compiled
#   with `UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR undefined.
#   See http://www.eda.org/svdb/view.php?id=3770 for more details.
#
#       (Specify +UVM_NO_RELNOTES to turn off this notice)
#
# UVM_INFO ../uvm-1.2/src/base/uvm_root.svh(453) @ 0: reporter [NO_DPI_TSTNAME] UVM_NO_DPI defined--getting UVM_TESTNAME directly, without DPI
# UVM_INFO @ 0: reporter [RNTST] Running test sample_test...
# UVM_INFO ../uvm-1.2/src/base/uvm_traversal.svh(279) @ 0: reporter [UVM/COMP/NAMECHECK] This implementation of the component name checks requires DPI to be enabled
# UVM_INFO @ 0: uvm_test_top [TEST] Hello World
# UVM_INFO ../uvm-1.2/src/base/uvm_root.svh(579) @ 0: reporter [UVMTOP] UVM testbench topology:
# -------------------------------------------------------------------
# Name                         Type                       Size  Value
# -------------------------------------------------------------------
# uvm_test_top                 sample_test                -     @341
#   tb                         tb_env                     -     @359
#     sample_model             sample_env                 -     @372
#       master                 sample_master_agent        -     @410
#         driver               sample_master_driver       -     @429
#           rsp_port           uvm_analysis_port          -     @448
#           seq_item_port      uvm_seq_item_pull_port     -     @438
#         monitor              sample_master_chg_monitor  -     @458
#           ap_read            uvm_analysis_port          -     @477
#           ap_write           uvm_analysis_port          -     @467
#         sequencer            sample_master_sequencer    -     @487
#           rsp_export         uvm_analysis_export        -     @496
#           seq_item_export    uvm_seq_item_pull_imp      -     @614
#           arbitration_queue  array                      0     -
#           lock_queue         array                      0     -
#           num_last_reqs      integral                   32    'd1
#           num_last_rsps      integral                   32    'd1
#       slave                  sample_slave_agent         -     @419
#         driver               sample_slave_driver        -     @627
#           rsp_port           uvm_analysis_port          -     @646
#           seq_item_port      uvm_seq_item_pull_port     -     @636
#         sequencer            sample_slave_sequencer     -     @656
#           rsp_export         uvm_analysis_export        -     @665
#           seq_item_export    uvm_seq_item_pull_imp      -     @783
#           arbitration_queue  array                      0     -
#           lock_queue         array                      0     -
#           num_last_reqs      integral                   32    'd1
#           num_last_rsps      integral                   32    'd1
#     sample_scrbd             uvm_scoreboard             -     @381
#       ap_exp                 uvm_analysis_imp_exp       -     @400
#       ap_obs                 uvm_analysis_imp_obs       -     @390
#       disable_scoreboard     integral                   1     'h0
#       mode                   integral                   8     'h2
# -------------------------------------------------------------------
#
# UVM_INFO @ 0: uvm_test_top.tb.sample_model [ENV] Hello ENV
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.slave [AGENT] Hi
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.slave.sequencer [SEQR] Hi
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.slave.driver [DRIVER] Hi
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.master [AGENT] Hi
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.master.sequencer [SEQR] Hi
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.master.monitor [MONITOR] Hi
# me me me
# UVM_INFO @ 0: uvm_test_top.tb.sample_model.master.driver [DRIVER] Hi
# UVM_INFO @ 300: uvm_test_top.tb.sample_model.master.monitor [MON] write addr=10h wdata=5ah
# UVM_INFO @ 300: uvm_test_top.tb.sample_scrbd [SCRBD] write expected data
# UVM_INFO @ 600: uvm_test_top.tb.sample_model.master.monitor [MON] read  addr=10h rdata=5ah
# UVM_INFO @ 600: uvm_test_top.tb.sample_scrbd [SCRBD] write observed data
# UVM_INFO @ 600: uvm_test_top.tb.sample_scrbd [SCRBD] data compare OK. addr=10h
# UVM_INFO ../uvm-1.2/src/base/uvm_report_server.svh(847) @ 700: reporter [UVM/REPORT/SERVER]
# --- UVM Report Summary ---
#
# ** Report counts by severity
# UVM_INFO :   19
# UVM_WARNING :    0
# UVM_ERROR :    0
# UVM_FATAL :    0
# ** Report counts by id
# [AGENT]     2
# [DRIVER]     2
# [ENV]     1
# [MON]     2
# [MONITOR]     1
# [NO_DPI_TSTNAME]     1
# [RNTST]     1
# [SCRBD]     3
# [SEQR]     2
# [TEST]     1
# [UVM/COMP/NAMECHECK]     1
# [UVM/RELNOTES]     1
# [UVMTOP]     1
#
# ** Note: $finish    : ../uvm-1.2/src/base/uvm_root.svh(517)
#    Time: 700 ps  Iteration: 86  Instance: /tb_top