衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

參數(shù)化接口和可重用VIP:第一部分

星星科技指導(dǎo)員 ? 來源:synopsys ? 作者:Aron Pratt ? 2023-05-29 10:30 ? 次閱讀

背景

基于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
interface param_if#(int width = 8);
logic clk;
logic[width-1:0] data;
clocking active_cb @(posedge clk);
default input #1 output #1;
output data;
endclocking
modport active_mp (clocking active_cb);
endinterface
typedef virtual param_if param_vif

接下來,我們定義可重復(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ù)雜化,并限制了測試平臺的可重用性。

審核編輯:郭婷

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8694

    瀏覽量

    151928
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110397
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19228
收藏 人收藏

    評論

    相關(guān)推薦

    京東賣的最熱的:Labview寶典 第一部分

    由于限制每日只能傳20M,所以先傳第一部分,每天都傳。
    發(fā)表于 09-28 20:29

    保護(hù)您的 IP 核——第一部分軟 IP——前言

    保護(hù)您的 IP 核——第一部分軟 IP——前言 隨著全球硬件設(shè)計(jì)和制造過程的激增以及IP供應(yīng)商之間的競爭,IP盜版/假冒、虛假所有權(quán)等威脅正在加劇。因此,保護(hù)?? IP 核設(shè)計(jì)的要求及其代表的專有
    發(fā)表于 02-23 11:59

    免調(diào)節(jié)中頻VCO的實(shí)現(xiàn)(第一部分)

    免調(diào)節(jié)中頻VCO的實(shí)現(xiàn)(第一部分)
    發(fā)表于 05-07 13:21 ?24次下載

    微型模塊電源產(chǎn)品第一部分

    微型模塊電源產(chǎn)品第一部分,有需要的下來看看
    發(fā)表于 03-17 17:43 ?0次下載

    GBT 20234.1-2011 第一部分

    電動汽車傳導(dǎo)充電用連接裝置第一部分,通用部分
    發(fā)表于 05-10 14:24 ?1次下載

    中國NB-IOT產(chǎn)業(yè)聯(lián)盟-第一部分問題清單-20160824

    中國NB-IOT產(chǎn)業(yè)聯(lián)盟-第一部分問題清單
    發(fā)表于 01-11 12:16 ?9次下載

    2012年P(guān)SoC數(shù)模混合設(shè)計(jì)培訓(xùn)_第一部分

    2012年P(guān)SoC數(shù)模混合設(shè)計(jì)培訓(xùn)_第一部分
    發(fā)表于 10-27 09:35 ?4次下載

    怎樣通過Altera 的設(shè)計(jì)商店找到并使用實(shí)例設(shè)計(jì) (第一部分)

    怎樣通過Altera 的設(shè)計(jì)商店找到并使用實(shí)例設(shè)計(jì) (第一部分)
    的頭像 發(fā)表于 06-11 17:19 ?1866次閱讀
    怎樣通過Altera 的設(shè)計(jì)商店找到并使用實(shí)例設(shè)計(jì) (<b class='flag-5'>第一部分</b>)

    AN-388: 使用Σ-Δ轉(zhuǎn)換器—第一部分[中文版]

    AN-388: 使用Σ-Δ轉(zhuǎn)換器—第一部分[中文版]
    發(fā)表于 03-19 08:32 ?0次下載
    AN-388: 使用Σ-Δ轉(zhuǎn)換器—<b class='flag-5'>第一部分</b>[中文版]

    有時(shí)你需要點(diǎn)收獲第一部分

    有時(shí)你需要點(diǎn)收獲第一部分
    發(fā)表于 04-20 10:31 ?1次下載
    有時(shí)你需要<b class='flag-5'>一</b>點(diǎn)收獲<b class='flag-5'>第一部分</b>

    第一部分、硬件設(shè)計(jì)

    第一部分、硬件設(shè)計(jì)我把個(gè)硬件系統(tǒng)分為五個(gè)單元:電源單元、單片機(jī)單元、輸入單元、輸出單元、通信單元。如下圖:
    發(fā)表于 12-09 12:36 ?16次下載
    <b class='flag-5'>第一部分</b>、硬件設(shè)計(jì)

    《家用和類似用途電器的安全第一部分:通用要求》pdf

    《家用和類似用途電器的安全第一部分:通用要求》pdf
    發(fā)表于 01-07 11:50 ?3次下載

    生成任意量級偏置電流網(wǎng)絡(luò)(第一部分

    生成任意量級偏置電流網(wǎng)絡(luò)(第一部分
    發(fā)表于 11-03 08:04 ?1次下載
    生成任意量級偏置電流網(wǎng)絡(luò)(<b class='flag-5'>第一部分</b>)

    參數(shù)接口重用VIP:第三部分

    在本系列的第一部分中,介紹了SystemVerilog接口的基本概念,并描述了這些接口參數(shù)給測試平臺代碼帶來的問題。在第二
    的頭像 發(fā)表于 05-29 10:32 ?818次閱讀

    驅(qū)動ADC 第一部分

    電子發(fā)燒友網(wǎng)站提供《差驅(qū)動ADC 第一部分.pdf》資料免費(fèi)下載
    發(fā)表于 11-23 16:36 ?0次下載
    差<b class='flag-5'>分</b>驅(qū)動ADC <b class='flag-5'>第一部分</b>
    玩百家乐官网五湖四海娱乐城| 百家乐官网庄闲的几率| 永利百家乐娱乐网| 澳门百家乐官网牌例| 大发888娱乐城备用网址| 真人百家乐平台排行| 百家乐官网单跳| 凯旋门娱乐| 威尼斯人娱乐信誉| 百家乐长路投注法| 百家乐官网单跳| 奇博娱乐| 哪家百家乐优惠最好且信誉不错| 百家乐赌场老千| 澳门百家乐官网路单怎么看| 赌场风云| 全讯网开奖| 百家乐投注平台信誉排名| 澳门百家乐官网娱乐场开户注册| 百家乐官网休闲游戏| 大发888娱乐场| 大发888 真钱娱乐场| 百家乐六合彩3535| 大众百家乐官网的玩法技巧和规则 | 真人百家乐官网免费送钱| 百家乐官网赌博大揭密| 百家乐官网三多注码法| 爱赢娱乐城| 北京太阳城三期| 百家乐记算| 澳门百家乐下注最低| 大世界百家乐官网的玩法技巧和规则 | 盛世国际开户| 海南博彩业| 中国百家乐澳门真人娱乐平台网址| 粤港澳百家乐娱乐场| 百家乐赌博论坛博客| 百家乐连线游戏下载| 888百家乐官网的玩法技巧和规则 大发百家乐官网的玩法技巧和规则 | 飞天百家乐官网的玩法技巧和规则| 手机百家乐官网的玩法技巧和规则 |