如何淺析UVM概念中的raise/drop objection,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)公司是一家網(wǎng)站設(shè)計(jì)公司,集創(chuàng)意、互聯(lián)網(wǎng)應(yīng)用、軟件技術(shù)為一體的創(chuàng)意網(wǎng)站建設(shè)服務(wù)商,主營(yíng)產(chǎn)品:響應(yīng)式網(wǎng)站建設(shè)、成都品牌網(wǎng)站建設(shè)、營(yíng)銷(xiāo)型網(wǎng)站。我們專(zhuān)注企業(yè)品牌在網(wǎng)站中的整體樹(shù)立,網(wǎng)絡(luò)互動(dòng)的體驗(yàn),以及在手機(jī)等移動(dòng)端的優(yōu)質(zhì)呈現(xiàn)。成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、移動(dòng)互聯(lián)產(chǎn)品、網(wǎng)絡(luò)運(yùn)營(yíng)、VI設(shè)計(jì)、云產(chǎn)品.運(yùn)維為核心業(yè)務(wù)。為用戶(hù)提供一站式解決方案,我們深知市場(chǎng)的競(jìng)爭(zhēng)激烈,認(rèn)真對(duì)待每位客戶(hù),為客戶(hù)提供賞析悅目的作品,網(wǎng)站的價(jià)值服務(wù)。
UVM中,component的task phase是消耗仿真時(shí)間的,各個(gè)components需要在不同層次的task phase中同步信息。
UVM中通過(guò)objection mechanism來(lái)控制phase的執(zhí)行,通過(guò)raise or drop objection來(lái)決定phase中事件的開(kāi)始和停止。
當(dāng)程序根據(jù)phase執(zhí)行順序,進(jìn)入到某一個(gè)phase中時(shí),它會(huì)收集此phase提起的所有的objection(每個(gè)component都可以raiseobjection)
當(dāng)這個(gè)phase中所有的objection都被撤銷(xiāo)(drop)之后,那么這個(gè)phase就執(zhí)行結(jié)束。
components或sequence將在驗(yàn)證行為的開(kāi)始 raise phase objection,在驗(yàn)證行為完成后drop phase objection。一旦phase里所有的objection都被dropped,該phase就結(jié)束了。
考慮一個(gè)例子,agent完成讀寫(xiě)操作。通??梢栽趕equence 或者test中添加raise/drop objection。
Objection in sequence
class wr_rd_seq extends uvm_sequence#(mem_seq_item); task pre_body(); // raise objection if started as a root sequence if(starting_phase!= null) starting_phase.raise_objection(this); endtask task body(); `uvm_do_with(req,wr_en==1); `uvm_do_with(req,rd_en==1); endtask task post_body(); // drop objection if started as a root sequence if(starting_phase!= null) starting_phase.drop_objection(this); endtaskendclass
在uvm_sequence中有一個(gè)starting_phase成員,它是uvm_phase類(lèi)型。如果我們通過(guò)設(shè)置run phase的default sequence來(lái)啟動(dòng)一個(gè)sequence,那么會(huì)默認(rèn)將run phase的phase傳遞給這個(gè)sequence的starting_phase.
Objection in test
如果需要在test中顯式啟動(dòng)sequence,即在test中添加objection。
class wr_rd_test extends uvm_test; ... task main_phase(uvm_phase phase); phase.raise_objection(); //rasing objection wr_rd_seq.start(mem_agent.sequencer); phase.drop_objection(); //droping objection endtask endclass
在test中顯式啟動(dòng)sequence時(shí), starting_phase的值是null。
關(guān)于如何淺析UVM概念中的raise/drop objection問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。