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