検証チームと uvm テスト ケースを簡単に記述できるフレームワークを作成しています。基本的な考え方は、私のベース (uvm_) シーケンスには、本体タスクに 1 行しか含まれていないということです。
regs.update(status);
個々の (uvm_) テストから、便利なヘルパー関数を使用してレジスタ値を設定できます。たとえば、私のテストには次のものが含まれます。
class base_test extends uvm_test;
........
........
virtual function void set_registerA(....);
regs.registerA1.set(....);
regs.registerA2.set(....);
regs.registerA3.set(....);
endfunction
virtual function void set_registerB(....);
regs.registerB1.set(....);
regs.registerB2.set(....);
regs.registerB3.set(....);
endfunction
endclass
class test1 extends base_test;
virtual function void end_of_elaboration_phase(uvm_phase phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
class test2 extends base_test;
virtual function void end_of_elaboration_phase(uvm_phase phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
end_of_elaboration フェーズは、レジスタを設定するのに最適な場所ではない可能性があることに気付きました。私のコンパイラは、「警告: タスク "end_of_elaboration" でタスク "set_registerA" を呼び出しています。したがって、run_phase で実行するように変更しました:
class test1 extends base_test;
virtual task run_phase(uvm_phase phase);
super.run_phase(phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
class test2 extends base_test;
virtual task run_phase(uvm_phase phase);
super.run_phase(phase);
set_registerA(....);
set_registerB(....);
endfunction
endclass
これが私がやろうとしていることの正しい方法論であるかどうか確信が持てませんか? super.run_phase を呼び出すと問題が発生しますか? 私はこれがどこでも行われているのを見ません。