Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

VMM :Parameterized vmm_channelクラス

Verification Engineerの戯言

Parameterized vmm_channelクラスを使うには、
コンパイル時に+define+VMM_PARAM_CHANNELを指定し、
VMM_PARAM_CHANNELマクロを定義する必要があります。
sv/std_lib/vmm.svファイルでは、次のようにマクロ定義されています。
    `ifdef VMM_PARAM_CHANNEL
    `define vmm_channel(T) typedef vmm_channel_typed#(T) T``_channel;
    `else
    `define vmm_channel_(T) T``_channel
    `define vmm_channel(T) \
    class `vmm_channel_(T) extends vmm_channel; \
vmm_channel_typedクラスを使っています。
vmm_channel_typedクラスの定義は、次のようになっています。
パラメータ(#type T = vmm_data)を指定し、引数や戻り値にTを指定しています。
    class vmm_channel_typed #(type T = vmm_data) extends vmm_channel;

        //  所々、省略
        
        function T unput(int offset = -1);
        task get(output T obj, input int offset = 0);
        task peek(output T obj, input int offset = 0);
        task activate(output T obj, input int offset = 0);
        function T active_slot();
        function T start();
        function T complete(vmm_data status = null);
        function T remove();
        task tee(output T obj);
        function T for_each(bit reset = 0);

    endclass
(マクロ定義での実装でも同様に方法を使っています)

私がVMMでちょっとスマートではないと思っていたvmm_channelが上記のように
パラメータを指定できるように実装されていたのですね!

検証、Verification、SystemVerilog、VMM、Verification Methodology Manual