以下の内容はhttps://msyksphinz.hatenablog.com/entry/2024/10/12/040000より取得しました。


Vivado Simulatorを使ってUVMに入門する (7. 複数のテストを試行する)

もう何回目になるのかわからないが、そろそろUVMを覚えなければならないのでVivado Simulatorを使ってUVMに入門してみよう。

前回作ったテストが、Vivado 2023.2 だと、なんとなく動かなかったので、DSimでも試行している。

参考にしているのは例によって以下のウェブサイトだ:

sites.google.com

UVMによりいくつかのテストシーケンスを用意する、という話だ。sample_testsample_test2というテストを用意している。

  • sample_test.sv
class sample_test extends uvm_test;
  `uvm_component_utils(sample_test)
/* ... 途中省略 ... */
  function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    uvm_config_db #(uvm_object_wrapper)::set(this, "env.master.sequencer.run_phase", "default_sequence", write_read_seq::type_id::get());
    uvm_config_db #(uvm_object_wrapper)::set(this, "env.slave.sequencer.run_phase",  "default_sequence", normal_response_seq::type_id::get());
    env = sample_env::type_id::create("env", this);
  endfunction // build_phase

class sample_test2 extends uvm_test;
  `uvm_component_utils(sample_test2)
/* ... 途中省略 ... */
  function void build_phase(uvm_phase phase);
    super.build_phase(phase);
    uvm_config_db #(uvm_object_wrapper)::set(this, "env.master.sequencer.run_phase", "default_sequence", write_read_seq::type_id::get());
    uvm_config_db #(uvm_object_wrapper)::set(this, "env.slave.sequencer.run_phase",  "default_sequence", random_response_seq::type_id::get());
    env = sample_env::type_id::create("env", this);
  endfunction // build_phase

sample_testsample_test2の違いは、受け取り側のタスクがnormal_response_seqrandom_response_seqのどちらかである、ということだ。

  • model/sample_slave_seq_lib.sv
class random_response_seq extends sample_slave_base_seq;
  `uvm_object_utils(random_response_seq)

  function new (string name="random_response_seq");
    super.new(name);
  endfunction // new

  virtual task body();
    forever begin
      `uvm_create (req);
      req.wait_cycle <= $urandom_range(8, 0);
      `uvm_send(req)
    end
  endtask // body

endclass // random_response_seq

sample_test2では、レスポンスのためのreadyの立ち上がりのタイミングがランダムになる。

UVM_INFO @ 1000: uvm_test_top.env.slave.driver [SLAVE] write access accept. addr=10h, data=5ah
UVM_INFO @ 1000: uvm_test_top.env.master.monitor [MON] write addr=10h wdata=5ah
UVM_INFO @ 1000: uvm_test_top.env.master.driver [DRIVER] Hi
UVM_INFO @ 2000: uvm_test_top.env.slave.driver [SLAVE] read access accept. adr=10h
UVM_INFO @ 2000: uvm_test_top.env.slave.driver [SLAVE] read data is = 5ah
UVM_INFO @ 2000: uvm_test_top.env.master.monitor [MON] read  addr=10h rdata=5ah
UVM_INFO @ 2000: uvm_test_top.env.master.driver [DRIVER] Hi



以上の内容はhttps://msyksphinz.hatenablog.com/entry/2024/10/12/040000より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14