第1章與UVM的第一次接觸
基本沒有感興趣的內(nèi)容,推薦直接從第2章開始,防止勸退。
第2章一個(gè)簡單的UVM驗(yàn)證平臺(tái)
2.1 驗(yàn)證平臺(tái)的組成
2.2 只有driver的驗(yàn)證平臺(tái)
2.2.1 最簡單的驗(yàn)證平臺(tái)
driver應(yīng)該派生自u(píng)vm_driver,而uvm_driver派生自u(píng)vm_component。相關(guān)派生關(guān)系如下圖所示:
2.2.2 加入factory機(jī)制
factory機(jī)制的實(shí)現(xiàn)被集成在了一個(gè)宏中:uvm_component_utils。它可以將my_driver注冊在UVM內(nèi)部的一張表中。只要在定義一個(gè)新的類時(shí)使用這個(gè)宏,就相當(dāng)于把這個(gè)類注冊到了這張表中。然后使用run_test時(shí),可以自動(dòng)創(chuàng)建一個(gè)類的實(shí)例并調(diào)用其中函數(shù)main_phase。其中uvm_component_utils的入?yún)⑹穷惷鹠y_driver,而run_test入?yún)樵赨VM內(nèi)部表中注冊的字符串名(注意:這里的字符串名必須和類名相同)。
2.2.3 加入objection機(jī)制
objection機(jī)制用來控制仿真的開始和結(jié)束。在每個(gè)phase中,UVM會(huì)檢查是否有objection被提起(raise_objection),如果有,那么等待這個(gè)objection被撤銷(drop_objection)后停止仿真;如果沒有,則馬上結(jié)束當(dāng)前phase。
2.2.4 加入virtual interface
目的:杜絕在驗(yàn)證平臺(tái)中使用絕對路徑,從而增強(qiáng)驗(yàn)證平臺(tái)的可移植性。
SV和UVM中端口使用的比對:
- sv中
- 使用interface,通過對top_tb.my_driver.xxx的引用實(shí)現(xiàn)賦值。
- UVM中
- 引入virtual interface:解決UVM類中無法實(shí)例化接口的問題。
- 引入config_db機(jī)制:解決top中無法通過實(shí)例模塊引用內(nèi)部接口的問題(UVM通過run_test語句實(shí)例化了一個(gè)脫離了top_tb層次結(jié)構(gòu)的實(shí)例,建立了一個(gè)新的層次結(jié)構(gòu),導(dǎo)致top_tb.my_dut.xxx可以,但top_tb.my_driver.xxx不可以)。具體而言分為set和get兩步操作
- 引入了build_phase:為config_db機(jī)制的實(shí)現(xiàn)服務(wù)。它也是UVM中內(nèi)建的一個(gè)phase,在new函數(shù)之后main_phase之前執(zhí)行(是一個(gè)函數(shù)phase,不消耗仿真時(shí)間)。通過config_db的set和get操作來傳遞一些數(shù)據(jù),以及實(shí)例化成員變量等。
config_db機(jī)制中set方法的使用
- 第一個(gè)參數(shù):目標(biāo)get所在實(shí)例的參考路徑索引(舉例:“null”,“this”)。在top_tb中設(shè)置virtual interface時(shí),由于top_tb不是一個(gè)類,無法使用this指針,所以設(shè)置set的第一個(gè)參數(shù)為null。
- 第二個(gè)參數(shù):目標(biāo)get所在實(shí)例的路徑索引,它是相對于第一個(gè)參數(shù)的相對路徑(舉例:"uvm_test_top"、"uvm_test_top.drv")
- 第三個(gè)參數(shù):一個(gè)名字,建立set與get之間的對應(yīng)關(guān)系
- 第四個(gè)參數(shù):set要傳遞個(gè)get的信號(hào),信號(hào)為uvm_config_db#(xxx)中xxx的實(shí)例。
進(jìn)一步解釋:
- 無論傳遞給run_test的參數(shù)是什么,創(chuàng)建的實(shí)例的名字都為uvm_test_top。
- 由于set操作的目標(biāo)是my_driver,所以set函數(shù)的第二個(gè)參數(shù)就是uvm_test_top。
- set函數(shù)與get函數(shù)使用雙冒號(hào)是因?yàn)檫@兩個(gè)函數(shù)都是靜態(tài)函數(shù),而uvm_config_db#( virtual my_if)則是一個(gè)參數(shù)化的類,其參數(shù)就是要寄信的類型。
uvm_fatal宏的理解
- 類似于斷言,條件為假時(shí),結(jié)束仿真。
路徑索引的概念:
- UVM采用樹形結(jié)構(gòu),對于樹中任何一個(gè)結(jié)點(diǎn),都有一個(gè)與其相應(yīng)的字符串類型的路徑索引。路徑索引可以通過get_full_name函數(shù)來獲取,把下列代碼加入任何UVM樹的結(jié)點(diǎn)中就可以得知當(dāng)前結(jié)點(diǎn)的路徑索引:
$display("the full name of current component is: %s", get_full_name());
-
字符串
+關(guān)注
關(guān)注
1文章
578瀏覽量
20506 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19167 -
PHASE
+關(guān)注
關(guān)注
0文章
12瀏覽量
10846
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論