Verification Engineerの戯言
Parameterized vmm_channelクラスを使うには、
コンパイル時に+define+VMM_PARAM_CHANNELを指定し、
VMM_PARAM_CHANNELマクロを定義する必要があります。
sv/std_lib/vmm.svファイルでは、次のようにマクロ定義されています。
vmm_channel_typedクラスの定義は、次のようになっています。
パラメータ(#type T = vmm_data)を指定し、引数や戻り値にTを指定しています。
コンパイル時に+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