Vengineerの妄想(準備期間)

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

SystemVerilog: process(その3)

Verification Engineerの戯言 : SystemVerilogの世界へようこそ

processは、OVM 2.1の中でも使われています。使われている場所は、

ovm-2.1/src/methodology/sequences/ovm_sequence_base.svhの49行目です。

  48:  `ifndef INCA
  49:  protected process  m_sequence_process;
  50:  `else
  51:  protected bit m_sequence_started = 0;
  52:  protected event m_kill_event;
  53:  `endif

INCAマクロが定義されていない場合のみ使われます。

ハンドルが生成される場所は、ovm_sequence.svhの165行目です。
fork/join内で使われています。
 161:  `ifndef INCA
 162:    
 163:    fork
 164:      begin
 165:        m_sequence_process = process::self();
 166:        body();
 167:        m_sequence_state_ended = 1;
 168:        m_sequence_state = ENDED;
 169:        #0;   // Allow external waiter to be activated
 170:      end
 171:    join
 172:    
 173:  `else

ハンドル(m_sequence_process)は、ovm_sequence_base.svhの次の場所で使われています。

 657:  `ifndef INCA
 658:      if (m_sequence_process != null) begin
 659:        m_sequence_process.kill;
 660:        m_sequence_process = null;
 661:      end
 662:  `else

kill関数が呼ばれています(kill関数は引数が無いので、()は無くてもOKです)

検証、Verification、SystemVerilog