Vengineerの妄想(準備期間)

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

UVM 1.0 : examples/simple/hello_world (その2)


プロデューサとコンシューマ間のパケットクラス(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