uvm 形式验证_uvm面试题
1、uvm_component與uvm_object之間的區(qū)別和聯(lián)系?
uvm_component類:是用于構(gòu)成UVM仿真平臺(tái)的組件,可組成樹形結(jié)構(gòu),在bulid_phase中創(chuàng)建,之后整個(gè)仿真周期內(nèi)一直存在,可通過interface連接到DUT的端口上或者通過TLM port完成uvm_component間的連接,可通過phase機(jī)制控制平臺(tái)的仿真行為。
uvm_object類:uvm中基本的類,可用于封裝數(shù)據(jù)流(事務(wù)),從一個(gè)組件(component)產(chǎn)生傳遞到另一個(gè)組件,無phase機(jī)制,不能形成樹狀結(jié)構(gòu)。
2、uvm中的port都有哪些,各有什么區(qū)別?
analysis port :可以不連接,也可以連接多個(gè)analysis export,以廣播的形式傳輸數(shù)據(jù),用于monitor將數(shù)據(jù)發(fā)到reference model和scoreboard。可以通過該analysis port端口調(diào)用在另一個(gè)組件中實(shí)現(xiàn)的方法。
TLM port:必須一對(duì)一連接到export上,否則編譯會(huì)報(bào)錯(cuò),常用于driver和sequencer之間的transaction通信。
3、uvm的factory機(jī)制,其優(yōu)點(diǎn)是什么?
factory是一種設(shè)計(jì)模式,也叫編程技巧,在使用工廠模式的時(shí)候分為三個(gè)步驟:
1)注冊(cè)
在定義一個(gè)類的時(shí)候使用UVM已經(jīng)提供的宏進(jìn)行注冊(cè)。
`uvm_object_utils(class_type_name)
2)實(shí)例化對(duì)象
在對(duì)component或object型對(duì)象進(jìn)行實(shí)例化的時(shí)候要使用靜態(tài)方法create(),不能采用new()去實(shí)例化。
3. 重載override。使用override實(shí)現(xiàn)對(duì)象的替換
該機(jī)制的優(yōu)點(diǎn)是在不更改平臺(tái)代碼的前提下實(shí)現(xiàn)對(duì)象的替換,在其內(nèi)部有兩張表,一張注冊(cè)表,一張?zhí)鎿Q表,在例化的時(shí)候,如果該類替換表中無內(nèi)容,就用注冊(cè)表的類進(jìn)行例化,否則就使用替換表的內(nèi)容進(jìn)行例化。
4、function phase和task phase區(qū)別?
只有run_phase(及其并行的12個(gè)phase)是task phase(消耗仿真時(shí)間的phase),其他phase都是function phase(不消耗仿真時(shí)間的非阻塞類型phase)。
5、uvm平臺(tái)中,用例仿真是怎么樣開始的怎么樣停止的?
phase的啟動(dòng)通過在頂層或者測(cè)試用例中調(diào)用run_test任務(wù),該任務(wù)會(huì)首先創(chuàng)建test top,然后調(diào)用所有的phase,開始仿真。
在遇到最后一個(gè)組件的drops objection時(shí),結(jié)束仿真。
6、uvm平臺(tái)中,config_db機(jī)制有什么作用?
config_db機(jī)制用于在uvm驗(yàn)證平臺(tái)間傳遞參數(shù),通常都是成對(duì)出現(xiàn)的,set函數(shù)是寄信,get函數(shù)是收信,set和get函數(shù)的第一個(gè)和第二個(gè)參數(shù)聯(lián)合起來構(gòu)成目標(biāo)路徑,第三個(gè)參數(shù)是目標(biāo)成員的記號(hào),第四個(gè)參數(shù)是設(shè)置的值或者對(duì)象。
7、使用config_db機(jī)制,傳遞函數(shù)未成功可能是什么原因?qū)е碌?#xff1f;
可能是set和get參數(shù)所指的路徑不一致,或者第三個(gè)參數(shù)成員記號(hào)不一致導(dǎo)致的。
8、什么是objection機(jī)制?
UVM平臺(tái)通過objection機(jī)制控制驗(yàn)證平臺(tái)的關(guān)閉。在每個(gè)phase中,UVM會(huì)檢查 是否objection被提起(raise_objection),如果被提起,那么等待這個(gè)objection被撤銷(drop_objection)后仿真停止;如果未提起,那么則立馬結(jié)束當(dāng)前的phase。
可以簡(jiǎn)單的將drop_objection理解成finish的替代者,只不過之前必須調(diào)用raise_objection。raise_objection語句必須在main_phase中第一個(gè)消耗仿真時(shí)間的語句之前。如:$display不消耗時(shí)間,@(posedge top.clk)需要消耗仿真時(shí)間。
9、filed automation機(jī)制?
uvm中的field_automation實(shí)現(xiàn)了類中的copy,compare,print等基本的操作函數(shù),在使用時(shí),通過uvm_field_utils_begin和uvm_field_utils_end來加到自己寫的class中。
10、sequence和sequencer如何建立聯(lián)系?
通過三種方式實(shí)現(xiàn)sequence和sequencer的掛接。
1) 使用start任務(wù)
2) 使用uvm_config_db#(uvm_object_wrapper)配置default_sequence
3) 使用uvm_config_db#(uvm_sequence_base)配置default_sequence
11、運(yùn)行sequence的步驟?
1) 創(chuàng)建一個(gè)序列
2) 配置或隨機(jī)化序列
3)開始一個(gè)sequence,使用sequence.start()方法啟動(dòng)序列,start方法需要輸入一個(gè)指向sequencer的參數(shù)
12、m_sequencer句柄?
可以理解為member_sequencer,可以理解為每個(gè)sequence中默認(rèn)都有m_sequencer這一成員變量。m_sequencer 是一個(gè)指向執(zhí)行當(dāng)前sequence的sequencer句柄。其類型為uvm_sequencer_base,該類m_sequencer是父類,不能直接用子類中定義的各類數(shù)據(jù),解決辦法就是使用p_sequencer,
13、p_sequencer句柄?
使用 `uvm_declare_p_sequencer(my_sequencer) 宏聲明p_sequencer,其本質(zhì)是在當(dāng)前sequence中聲明了一個(gè)成員變量p_sequencer。指向的類型為my_sequencer,即p_sequencer是my_sequencer的句柄
總結(jié)
以上是生活随笔為你收集整理的uvm 形式验证_uvm面试题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 任天堂 Switch Online 会员
- 下一篇: cuid卡写入后锁死_荣耀手机NFC升级