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