sequence啟動(dòng)的三種方式

1宇整、seq相關(guān)的phase機(jī)制

首先你需明確的是UVM的框架下瓶佳,消耗時(shí)間的task的執(zhí)行都在在uvm_component底下的objection的機(jī)制來(lái)實(shí)現(xiàn)的。也就是說(shuō)phase的機(jī)制跟uvm_component是緊密相關(guān)的鳞青。
uvm_sequence是一個(gè)uvm_object的類(lèi)霸饲,uvm_sequencer是一個(gè)uvm_component的類(lèi)为朋。
seq需要掛載在seqr上執(zhí)行。

run_time_phase.svh

在前面我們講過(guò)UVM_PHASE的機(jī)制厚脉,在execute函數(shù)的地方有對(duì)uvm_sequencer_base類(lèi)型的做處理习寸。

  • start_phase_sequence(phase):處理default_sequencer
  • 這里先做個(gè)遺留,到底這里是什么從外面獲得default_sequencer的器仗。

方法一:利用default_sequence啟動(dòng)seq

也只有在用default_sequence的方式啟動(dòng)seq的時(shí)候融涣,start_phase != null精钮,原因是如果是sqr的時(shí)候在uvm_task_phase.svh里面有介紹,會(huì)自己調(diào)用start_phase_sequence剃斧,里面會(huì)對(duì)seq.set_starting_phase(phase);進(jìn)行set轨香。
前提
對(duì)應(yīng)uvm1.2版本,

或者是my_seq.set_automatic_phase_objection(1);
在start_phase_sequence里面已經(jīng)指定了phase幼东,seq.set_starting_phase(phase);

命令行設(shè)置default_sequencer:
+UVM_SET_DEFAULT_SEQUENCE=uvm_test_top.env.i_agt.sqr,main_phase,case0_sequence

  • 第一個(gè)參數(shù)是指定seqr的路徑
  • 第二個(gè)參數(shù)是指定要執(zhí)行的phase階段
  • 第三個(gè)參數(shù)是指定你的seq
    uvm_config_db設(shè)置default_sequencer

uvm_config_db#(uvm_object_wrapper)::set(this, "env.i_agt.sqr.main_phase", "default_sequence", case0_sequence::type_id::get());

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
  • super.build_phase到一定不能省略臂容。應(yīng)該跟config_db的get/set相關(guān)的源碼有關(guān),后面再具體分析根蟹!https://www.cnblogs.com/xuqing125/p/15761695.html

  • 這兩個(gè)都要包含的信息其實(shí)跟命令行是一樣的E肌!简逮!

方法二:利用seq.start(seqr)顯示啟動(dòng)

前提:如果想用starting_phase的話球散,需要為其指定,不像default_sequencer那樣散庶,start_phase_sequence(phase)里面已經(jīng)調(diào)用了set_starting_phase

  • 利用starting_phase來(lái)啟動(dòng)objection:直接調(diào)用seq.start(seqr)

  • 或者將my_seq.starting_phase=phase替換成my_seq.set_starting_phase這種寫(xiě)法蕉堰。
  • 利用common的objection機(jī)制:直接調(diào)用seq.start(seqr)

參考UVM_UG:




方法三:利用uvm_do_on系列的宏

`uvm_do系列的宏,我們知道這些宏最終都是調(diào)用的uvm_do_on_pri_with的宏悲龟。uvm_do系列的宏是可以在uvm_sequence_base以及其擴(kuò)展類(lèi)中才能調(diào)用的屋讶!

  • 當(dāng)?shù)谝粋€(gè)參數(shù)是sequence類(lèi)型的時(shí)候,會(huì)調(diào)用seq.start,也就是能啟動(dòng)seq须教。
  • my_seq.start() -> my_seq.body() -> uvm_do(my_seq_0) -> my_seq_0.start() -> my_seq_0.body()

那么這里自然而言皿渗,我就會(huì)想可以在頂層這樣做嗎?

剛剛?cè)胄械臅r(shí)候轻腺,總會(huì)有這些問(wèn)題乐疆,為什么不能這么做的?
首先宏是啥意思约计?在代碼編譯的時(shí)候诀拭,宏會(huì)依次展開(kāi),所以create_item/start_item/finish_item都會(huì)暴露出來(lái)煤蚌,由于你是在uvm_sequencer中調(diào)用的耕挨,根據(jù)擴(kuò)展關(guān)系细卧,是找不到create_item/start_item/finish_item這些東西的啊,同學(xué)M舱肌L懊怼!翰苫!
create_item/start_item/finish_item是在uvm_sequence_base里面定義的止邮。
也就是說(shuō)uvm_do系列的宏是可以在uvm_sequence_base以及其擴(kuò)展類(lèi)中才能調(diào)用的!

小結(jié):從本質(zhì)上講奏窑,seq的啟動(dòng)都是調(diào)用了uvm_squence_base的start函數(shù)导披。
下面簡(jiǎn)單來(lái)看一下;uvm_sequence_base::start(sqr)的源碼:

start
  • 設(shè)置m_sequencer和p_sequencer
  • 注冊(cè)m_sequencer和sequence埃唯,將seq_id sqr_id等關(guān)聯(lián)起來(lái)
set_item_context

m_register_sequence
start
start
  • pre_start/pre_body/body/post_body/post_start,是一些callback函數(shù)撩匕。
  • parent_sequence也有pre_do/mid_do/post_do的callback函數(shù),但這些很不常用墨叛。
  • 重點(diǎn)關(guān)注body()的override就行止毕。
  • m_sequence_exiting()將sequence從arb_sequence_q[]中刪除。
m_sequence_exiting

真正sequence的跟driver交互的東西就是在body()里面實(shí)現(xiàn)的漠趁。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扁凛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子闯传,更是在濱河造成了極大的恐慌谨朝,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丸边,死亡現(xiàn)場(chǎng)離奇詭異叠必,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)妹窖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)纬朝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人骄呼,你說(shuō)我怎么就攤上這事共苛。” “怎么了蜓萄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵隅茎,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嫉沽,道長(zhǎng)辟犀,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任绸硕,我火速辦了婚禮堂竟,結(jié)果婚禮上魂毁,老公的妹妹穿的比我還像新娘。我一直安慰自己出嘹,他們只是感情好席楚,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著税稼,像睡著了一般烦秩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上郎仆,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天只祠,我揣著相機(jī)與錄音,去河邊找鬼丸升。 笑死铆农,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的狡耻。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼猴凹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼夷狰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起郊霎,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤沼头,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后书劝,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體进倍,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年购对,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猾昆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡骡苞,死狀恐怖垂蜗,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情解幽,我是刑警寧澤贴见,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站躲株,受9級(jí)特大地震影響片部,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霜定,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一档悠、第九天 我趴在偏房一處隱蔽的房頂上張望廊鸥。 院中可真熱鬧,春花似錦站粟、人聲如沸黍图。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)助被。三九已至,卻和暖如春切诀,著一層夾襖步出監(jiān)牢的瞬間揩环,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工幅虑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丰滑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓倒庵,卻偏偏與公主長(zhǎng)得像褒墨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子擎宝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容