もう何回目になるのかわからないが、そろそろUVMを覚えなければならないのでVivado Simulatorを使ってUVMに入門してみよう。
今回はVivado 2023.2を使っている。
参考にしているのは例によって以下のウェブサイトだ:
前回のコードをVivadoで動かすためには、UVM 1.2で動かす必要があり、そのためには多少の改造が必要だ。
virtual class sample_base_seq extends uvm_sequence #(sample_seq_item); function new(string name="sample_base_seq"); super.new(name); do_not_randomize = 1; set_automatic_phase_objection(1); // ここを追加 endfunction // new // ここを全部コメントアウト // 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 // pre_body // // // 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 endclass
これで、Vivadoで動作するようになった。
UVM_INFO /tools/Xilinx/Vivado/2023.2/data/system_verilog/uvm_1.2/xlnx_uvm_package.sv(18648) @ 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 /tools/Xilinx/Vivado/2023.2/data/system_verilog/uvm_1.2/xlnx_uvm_package.sv(20867) @ 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 /tools/Xilinx/Vivado/2023.2/data/system_verilog/uvm_1.2/xlnx_uvm_package.sv(18752) @ 0: reporter [UVMTOP] UVM testbench topology: -------------------------------------------------------------- Name Type Size Value -------------------------------------------------------------- uvm_test_top sample_test - @341 env sample_env - @358 agent sample_agent - @367 driver sample_driver - @377 rsp_port uvm_analysis_port - @396 seq_item_port uvm_seq_item_pull_port - @386 monitor sample_monitor - @406 sequencer sample_sequencer - @415 rsp_export uvm_analysis_export - @424 seq_item_export uvm_seq_item_pull_imp - @542 arbitration_queue array 0 - lock_queue array 0 - num_last_reqs integral 32 'd1 num_last_rsps integral 32 'd1 -------------------------------------------------------------- UVM_INFO @ 0: uvm_test_top.env [ENV] Hello ENV UVM_INFO @ 0: uvm_test_top.env.agent [AGENT] Hi UVM_INFO @ 0: uvm_test_top.env.agent.monitor [MONITOR] Hi UVM_INFO @ 0: uvm_test_top.env.agent.driver [DRIVER] Hi Hello SEQ UVM_INFO @ 0: uvm_test_top.env.agent.monitor [MON] write addr=10h data=55h UVM_INFO /tools/Xilinx/Vivado/2023.2/data/system_verilog/uvm_1.2/xlnx_uvm_package.sv(19968) @ 1000: reporter [TEST_DONE] 'run' phase is ready to proceed to the 'extract' phase UVM_INFO /tools/Xilinx/Vivado/2023.2/data/system_verilog/uvm_1.2/xlnx_uvm_package.sv(13673) @ 1000: reporter [UVM/REPORT/SERVER]