sequence啟動的三種方式

2022-09-21 22:39:12 字數 2513 閱讀 6791

首先你需明確的是uvm的框架下,消耗時間的task的執行都在在uvm_component底下的objection的機制來實現的。也就是說phase的機制跟uvm_component是緊密相關的。

uvm_sequence是乙個uvm_object的類,uvm_sequencer是乙個uvm_component的類。

seq需要掛載在seqr上執行。

run_time_phase.svh

在前面我們講過uvm_phase的機制,在execute函式的地方有對uvm_sequencer_base型別的做處理。

也只有在用default_sequence的方式啟動seq的時候,start_phase != null,原因是如果是sqr的時候在uvm_task_phase.svh裡面有介紹,會自己呼叫start_phase_sequence,裡面會對seq.set_starting_phase(phase);進行set。

前提

對應uvm1.2版本,

或者是my_seq.set_automatic_phase_objection(1);

在start_phase_sequence裡面已經指定了phase,seq.set_starting_phase(phase);

命令列設定default_sequencer:

+uvm_set_default_sequence=uvm_test_top.env.i_agt.sqr,main_phase,case0_sequence

function void my_case0::build_phase(uvm_phase phase);

case0_sequence my_seq;

super.build_phase(phase);

my_seq = new("my_seq");

uvm_config_db#(uvm_sequence_base)::set(this,

"env.i_agt.sqr.main_phase",

"default_sequence",

my_seq);

endfunction

前提:如果想用starting_phase的話,需要為其指定,不像default_sequencer那樣,start_phase_sequence(phase)裡面已經呼叫了set_starting_phase

參考uvm_ug:

`uvm_do系列的巨集,我們知道這些巨集最終都是呼叫的uvm_do_on_pri_with的巨集。uvm_do系列的巨集是可以在uvm_sequence_base以及其擴充套件類中才能呼叫的!

那麼這裡自然而言,我就會想可以在頂層這樣做嗎?

剛剛入行的時候,總會有這些問題,為什麼不能這麼做的?

首先巨集是啥意思?在**編譯的時候,巨集會依次展開,所以create_item/start_item/finish_item都會暴露出來,由於你是在uvm_sequencer中呼叫的,根據擴充套件關係,是找不到create_item/start_item/finish_item這些東西的啊,同學!!!!

create_item/start_item/finish_item是在uvm_sequence_base裡面定義的。

也就是說uvm_do系列的巨集是可以在uvm_sequence_base以及其擴充套件類中才能呼叫的!

oralce 啟動三種方式

在startup命令中,可以通過不同的選項來控制資料庫的不同啟動步驟。1 startup nomount nonount選項僅僅建立乙個oracle例項。讀取init.ora初始化引數檔案 啟動後台程序 初始化系統全域性區 sga init.ora檔案定義了例項的配置,包括記憶體結構的大小和啟動後台...

redis三種啟動方式

tar zxvf redis 2.8.9.tar.gz cd redis 2.8.9 直接make 編譯 make 可使用root使用者執行 make install 將可執行檔案拷貝到 usr local bin目錄下。這樣就可以直接敲名字執行程式了。make install 啟動 加上 號使re...

redis三種啟動方式

tar zxvf redis 2.8.9.tar.gz cd redis 2.8.9 直接make 編譯 make 可使用root使用者執行 make install 將可執行檔案拷貝到 usr local bin目錄下。這樣就可以直接敲名字執行程式了。make install 啟動 加上 號使re...