背景
基于SystemVerilog的驗(yàn)證引入了接口的概念來表示設(shè)計(jì)模塊之間的通信。在其最基本的形式中,SystemVerilog 接口只是一個(gè)命名的信號束,可以通過模塊端口作為單個(gè)項(xiàng)目進(jìn)行通信。然后,接收此接口的設(shè)計(jì)模塊可以通過此接口參考訪問信號。但是,接口的更高級別函數(shù)也可以提供更強(qiáng)類型的通信,以更好地表示設(shè)計(jì)意圖。以下是系統(tǒng)Verilog接口中可用的高階函數(shù)的子集:
可以通過使用時(shí)鐘塊和模塊端口在信號列表上執(zhí)行訪問規(guī)則
函數(shù)和任務(wù)可用于封裝高階排序或訪問控制
初始塊和始終塊等進(jìn)程可以添加功能
連續(xù)賦值語句還可以添加功能
斷言可以確保正確的集成
SystemVerilog 接口的一個(gè)非常重要的用途是將靜態(tài)設(shè)計(jì)元素連接到動態(tài)測試平臺元素。動態(tài)測試平臺元素需要訪問靜態(tài)設(shè)計(jì)元素才能采樣和驅(qū)動信號,但可重用的測試平臺元素?zé)o法訪問靜態(tài)設(shè)計(jì)元素,除非通過稱為虛擬接口的特殊構(gòu)造。虛擬接口是測試平臺代碼中的接口句柄,可以與接口實(shí)例一起分配。虛擬接口是動態(tài)屬性,可以分配給不同測試平臺中的不同接口實(shí)例,從而提高可重用性。
設(shè)計(jì)可重用設(shè)計(jì)塊的常用技術(shù)是使用參數(shù)使設(shè)計(jì)塊的不同實(shí)例具有獨(dú)特的特征。例如,可以對模塊進(jìn)行參數(shù)化,以允許在聲明模塊并提供參數(shù)值時(shí)定義數(shù)據(jù)總線寬度。SystemVerilog 接口也支持參數(shù)化,但參數(shù)化接口的使用在測試平臺端帶來了不可預(yù)見的復(fù)雜性。為了與賦值兼容,參數(shù)化虛擬接口必須專用于接口實(shí)例專用的相同值。除非采取預(yù)防措施,否則這可能會使一些非常丑陋的測試平臺代碼具有更丑陋的使用模型。
參數(shù)擴(kuò)散:蠻力法
參數(shù)化虛擬接口引入的問題是,訪問它的測試平臺元素必須知道強(qiáng)類型接口。因此,當(dāng)接口專用化尚未知時(shí),無法編寫泛型類以使用參數(shù)化虛擬接口。此問題的一個(gè)解決方案是參數(shù)化訪問參數(shù)化虛擬接口的類。例如,可以使用 UVM 驅(qū)動程序必須使用的虛擬接口類型進(jìn)行參數(shù)化。然而,這只是將問題向上移動了一層,因?yàn)楝F(xiàn)在實(shí)例化該參數(shù)化驅(qū)動程序的代理也必須參數(shù)化,以便它可以創(chuàng)建驅(qū)動程序的正確專用實(shí)例。這會不斷向上移動,直到您到達(dá)“知道”正在測試的特定專業(yè)化存在的頂層測試平臺組件。以下代碼段演示了此問題。
首先,我們定義參數(shù)化的虛擬接口:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
接下來,我們定義可重復(fù)使用的 VIP 代碼。此測試平臺代碼必須設(shè)計(jì)為可在參數(shù)化接口可以使用的任何環(huán)境中重用,因此還必須參數(shù)化VIP代碼本身,以便可以訪問正確的接口。以下代碼段演示必須如何參數(shù)化 UVM 驅(qū)動程序類和包含該驅(qū)動程序的代理:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//======================================================================= class param_driver#(type vif_t=param_vif) extends uvm_driver#(cust_data);
`uvm_component_param_utils(param_driver#(vif_t))
vif_t vif;
function void build_phase(uvm_phase phase);
if (!uvm_config_db#(vif_t)::get(this, "", "vif", vif))
`uvm_fatal("build", "A valid interface was not received.");
endfunction endclass //======================================================================= class cust_agent#(type vif_t=param_vif) extends uvm_agent;
`uvm_component_param_utils(param_agent#(vif_t))
vif_t vif;
param_driver#(vif_t) param_driver;
function void build_phase(uvm_phase phase);
if (!uvm_config_db#(vif_t)::get(this, "", "vif", vif))
`uvm_fatal("build", "A valid interface was not received.");
uvm_config_db#(vif_t)::set(this, "param_driver", "vif", vif);
param_driver = param_driver#(vif_t)::type_id::create("param_driver", this);
endfunction endclass |
到目前為止,這看起來還不錯!它給類定義增加了一點(diǎn)復(fù)雜性,但不會太多。然而,在你檢查測試平臺必須如何訪問這些參數(shù)化類之前,這些問題不會變得明顯。以下段顯示了測試如何根據(jù)接口的參數(shù)化方式唯一地訪問 VIP 的每個(gè)實(shí)例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
//======================================================================= class cust_test extends uvm_test;
`uvm_component_utils(cust_test)
param_agent#(virtual param_if#(8)) param_agent8;
param_agent#(virtual param_if#(16)) param_agent16;
param_agent#(virtual param_if#(32)) param_agent32;
virtual function void build_phase(uvm_phase phase);
param_agent8 = param_agent#(virtual param_if#(8))::type_id::create("param_agent8", this);
param_agent16 = param_agent#(virtual param_if#(16))::type_id::create("param_agent16", this);
param_agent32 = param_agent#(virtual param_if#(32))::type_id::create("param_agent32", this);
endfunction endclass //======================================================================= module test_top;
param_if#(8) if8();
param_if#(16) if16();
param_if#(32) if32();
initial begin
uvm_config_db#(virtual param_if#(8))::set(uvm_root::get(), "uvm_test_top.param_agent8", "vif", if8);
uvm_config_db#(virtual param_if#(16))::set(uvm_root::get(), "uvm_test_top.param_agent16", "vif", if16);
uvm_config_db#(virtual param_if#(32))::set(uvm_root::get(), "uvm_test_top.param_agent32", "vif", if32);
run_test("cust_test");
end endmodule |
如您所見,對 VIP 的每個(gè)引用都必須使用要使用的正確接口類型進(jìn)行參數(shù)化。這不僅會影響VIP建設(shè),還會影響回調(diào)注冊、工廠覆蓋等。這給測試平臺開發(fā)人員帶來了很大的負(fù)擔(dān),并限制了這些環(huán)境的可重用性。
向驗(yàn)證組件添加參數(shù)是可重用VIP的有效技術(shù)解決方案,但它使使用模型大大復(fù)雜化,并限制了測試平臺的可重用性。
審核編輯:郭婷
-
接口
+關(guān)注
關(guān)注
33文章
8694瀏覽量
151928 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110397 -
UVM
+關(guān)注
關(guān)注
0文章
182瀏覽量
19228
發(fā)布評論請先 登錄
相關(guān)推薦
評論