プロデューサとコンシューマ間のパケットクラス(packet.sv)は、次のようになっています。
// トランザクションのデータは、uvm_transactionを継承する class packet extends uvm_transaction; rand int addr; // ランダム生成するメンバー変数には、rand を付ける! // randomize()が呼ばれると、constraintの制約を満足するような値が設定される // この部分はおまじない // 実は、set_config_xxx/get_config_xxx関数を使えるようにするため! `uvm_object_utils_begin(packet) `uvm_field_int(addr, UVM_ALL_ON) `uvm_object_utils_end // 制約は、constraint で記述する // {}に囲まれたものが制約で、0 <= addr < 'h100 になる constraint c { addr >= 0 && addr < 'h100; } // 制約は複数記述できるが、矛盾する制約はだめ! // constraint d { 0 > addr } は、c と矛盾するのでだめ! endclass
検証、Verification、SystemVerilog、UVM、Unified Verification Methodology