UVM driver/sequencerはマクロで作成しよう

はじめに

UVMを久しぶりに書くと、Driver, Sequencerの書き方を忘れます。

なので、Defineマクロを使って簡単に作成できるようにしましょう。

マクロを作成する

Sequencer

uvm_sequnecerを継承したSequncerを作成するマクロです。

sequncer_def.svh
`define SEQUENCER(sequencer) \
    class sequencer extends uvm_sequencer; \
        `uvm_component_utils(sequencer) \
        function new(string name=`"sequencer`", uvm_component parent); \
            super.new(name, parent); \
        endfunction \
    endclass

Driver

uvm_driverを継承したDriverを作成するマクロです。

driver_def.svh
`define DRIVER(driver) \
    class driver extends uvm_driver; \
        `uvm_component_utils(driver) \
        function new(string name=`"driver`", uvm_component parent); \
            super.new(name, parent); \
        endfunction \
        extern task run_phase(uvm_phase phase); \
    endclass

run_phaseはexternで宣言しているため、外部から書き換えることができます。

では、これらを使ってテストベンチを作成してみます。

サンプルコード

sample_driverのtask run_phaseを外部で書き換えて、実行すると”OK”が出力されます。

`include "sequencer_def.svh"
`include "driver_def.svh"
module top();
    import uvm_pkg::*;
    `include "uvm_macros.svh"

    `DRIVER(sample_driver)
    task sample_driver::run_phase(uvm_phase phase);
        `uvm_info("", "OK", UVM_NONE)
    endtask

    `SEQUENCER(sample_sequencer)

    class sample_test extends uvm_test;
        sample_sequencer sequencer;
        sample_driver driver;
        `uvm_component_utils(sample_test)
        function new(string name="sample_test", uvm_component parent=null);
            super.new(name, parent);
        endfunction

        function void build_phase(uvm_phase phase);
            super.build_phase(phase);
            driver = sample_driver::type_id::create("driver", this);
            sequencer = sample_sequencer::type_id::create("sequencer", this);
        endfunction

        function void connect_phase(uvm_phase phase);
            super.connect_phase(phase);
            driver.seq_item_port.connect(sequencer.seq_item_export);
        endfunction
    endclass

    initial begin
        run_test("sample_test");
    end
endmodule

まとめ

Sequencer, Driverを作成するマクロを作成しました。

コメント

タイトルとURLをコピーしました