色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

參數化接口和可重用VIP:第三部分

星星科技指導員 ? 來源:synopsys ? 作者:Aron Pratt ? 2023-05-29 10:32 ? 次閱讀

在本系列的第一部分中,介紹了SystemVerilog接口的基本概念,并描述了這些接口的參數化給測試平臺代碼帶來的問題。在第二部分中,描述了使用訪問器類來保護VIP代碼免受參數化影響的方法,但此解決方案對該接口的VIP訪問施加了新的限制。在本系列的最后一篇文章中,介紹了一個過程,該流程允許測試平臺使用參數化接口,而不會對VIP訪問其提供的接口的方式施加任何限制。

最大占用空間:兩全其美

參數化接口引入動態測試平臺代碼的問題無法使用當今現有的SystemVerilog功能來解決。因此,我們必須設計一種方法來避免將這些參數暴露給VIP代碼。本系列的上一篇文章介紹了訪問器類來實現這一點。另一種解決方案是定義 VIP 可以與之交互的最大占用空間樣式接口,以及包裝此最大占用空間接口并從最大占用空間接口連接到所需信號的參數化接口。

最大占位面積樣式接口定義了每個信號的最大寬度,并且可以將各個VIP組件配置為利用來自這些信號的位片。這允許具有不同寬度的多個 VIP 實例,并且不需要參數化類來使用參數化接口。以下代碼段演示了這些概念。

首先,我們定義最大占用空間樣式接口。請注意,此接口未參數化,因為這是 VIP 代碼將與之交互的接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Redefinable max footprint
`ifndef MAX_DATA_WIDTH
`define MAX_DATA_WIDTH 32
`endif
interface max_footprint_if;
logic clk;
logic[`MAX_DATA_WIDTH-1:0] data_in;
logic[`MAX_DATA_WIDTH-1:0] data_out;
clocking active_cb @(posedge clk);
default input #1 output #1;
input data_in;
output data_out;
endclocking
modport active_mp (clocking active_cb);
endinterface
typedef virtual max_footprint_if max_footprint_vif;

接下來,定義參數化接口,用于包裝最大占用空間接口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface param_if#(int width = 8);
logic clk;
logic[width-1:0] data_in;
logic[width-1:0] data_out;
max_footprint_if internal_if();
assign internal_if.clk = clk;
// Z values driven on unused inputs of the max footprint
assign internal_if.data_in = {`MAX_DATA_WIDTH'hz, data_in};
// Only selected output values used from the max footprint
assign data_out = internal_if.data_out[width-1:0];
endinterface

在此之后,實現VIP代碼以使用最大占用空間接口而不是參數化接口。下面顯示的一個附加類在前面的帖子中沒有顯示,它是配置類,用于定義每個 VIP 實例的信號寬度。該解決方案造成的另一個復雜問題是,VIP在采樣和驅動信號時必須使用位切片技術。這很不幸,但SystemVerilog完全有能力處理這個問題。

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//=======================================================================
class cust_cfg extends uvm_object;
rand int data_width;
constraint valid_data_width {
data_width inside {8, 16, 32};
}
//=======================================================================
class cust_driver extends uvm_driver#(cust_data);
max_footprint_vif vif;
cust_cfg cfg;
`uvm_component_utils(cust_driver)
function void build_phase(uvm_phase phase);
if (!uvm_config_db#(max_footprint_vif)::get(this, "", "vif", vif))
`uvm_fatal("build", "A valid virtual interface was not received.");
if (!uvm_config_db#(cust_cfg)::get(this, "", "cfg", cfg))
`uvm_fatal("build", "A valid configuration was not received.");
task consume_from_seq_item_port();
seq_item_port.get_next_item(req);
vif.active_cb.prop_out <= ((req.prop <> (`MAX_DATA_WIDTH-cfg.data_width));
@(vif.active_cb);
task sample_signals();
bit[31:0] sampled_prop_in = ((vif.active_cb.prop_in <> (`MAX_DATA_WIDTH-cfg.data_width));
VM_LOW);
@(vif.active_cb);
//=======================================================================
class cust_agent extends uvm_agent;
`uvm_component_utils(cust_agent)
max_footprint_vif vif;
cust_driver driver;
function void build_phase(uvm_phase phase);
if (!uvm_config_db#(max_footprint_vif)::get(this, "", "vif", vif))
`uvm_fatal("build", "A valid virtual interface was not received.");
if (!uvm_config_db#(cust_cfg)::get(this, "", "cfg", cfg))
`uvm_fatal("build", "A valid configuration was not received.");
uvm_config_db#(max_footprint_vif)::set(this, "driver", "vif", vif);
uvm_config_db#(cust_cfg)::set(this, "driver", "cfg", cfg);
driver = cust_driver::type_id::create("driver", this);

最后,給出了測試平臺代碼。測試用例無需參數化即可訪問 VIP,并且實例化接口的頂級模塊可以使用參數化接口。還顯示了為每個 VIP 實例創建配置對象的附加步驟(這不是額外的步驟,因為早期的解決方案也需要這樣做,但為了簡潔起見,省略了)。

利用最大占用空間樣式接口進行VIP信號訪問,無需參數化VIP代碼即可創建VIP代碼。定義參數化接口允許測試平臺利用它們所支持的改進集成功能。使用參數化接口包裝最大占用空間接口的策略可實現這兩種樣式的優勢。

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//=======================================================================
class cust_test extends uvm_test;
cust_cfg cfg8;
cust_cfg cfg16;
cust_cfg cfg32;
cust_agent agent8;
cust_agent agent16;
cust_agent agent32;
virtual function void build_phase(uvm_phase phase);
cfg8 = new("cfg8");
cfg8.data_width = 8;
uvm_config_db#(cust_cfg)::set(this, "agent8", "cfg", cfg8);
agent8 = cust_agent::type_id::create("agent8", this);
cfg16 = new("cfg16");
cfg16.data_width = 16;
uvm_config_db#(cust_cfg)::set(this, "agent16", "cfg", cfg16);
agent16 = cust_agent::type_id::create("agent16", this);
cfg32 = new("cfg32");
cfg32.data_width = 32;
uvm_config_db#(cust_cfg)::set(this, "agent32", "cfg", cfg32);
agent32 = cust_agent::type_id::create("agent32", this);
endfunction
endclass
//=======================================================================
module test_top;
param_if#(8) if8();
param_if#(16) if16();
param_if#(32) if32();
initial begin
uvm_config_db#(max_footprint_vif)::set(uvm_root::get(), "uvm_test_top.agent8", "vif", if8.internal_if);
uvm_config_db#(max_footprint_vif)::set(uvm_root::get(), "uvm_test_top.agent16", "vif", if16.internal_if);
uvm_config_db#(max_footprint_vif)::set(uvm_root::get(), "uvm_test_top.agent32", "vif", if32.internal_if);
run_test("cust_test");
end
endmodule

利用最大占用空間樣式接口進行VIP信號訪問,無需參數化VIP代碼即可創建VIP代碼。定義參數化接口允許測試平臺利用它們所支持的改進集成功能。使用參數化接口包裝最大占用空間接口的策略可實現這兩種樣式的優勢。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8580

    瀏覽量

    151046
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110078
  • 代碼
    +關注

    關注

    30

    文章

    4780

    瀏覽量

    68539
收藏 人收藏

    評論

    相關推薦

    獨特的51單片機教程第三部分上—牛人經驗,論壇獨家奉獻

    本帖最后由 eehome 于 2013-1-5 10:01 編輯 獨特的51單片機教程第三部分—牛人經驗,論壇獨家奉獻指令系統 與 尋址方式 按照順序,今天該到說指令系統的時候了,要說指令系統
    發表于 11-17 11:18

    獨特的51單片機教程第三部分下—牛人經驗,論壇獨家奉獻

    ——有什么潛力,至于怎么做,怎么寫這條指令,這才是接下來要查的內容。 獨特的51單片機教程第三部分下—牛人經驗,論壇獨家奉獻獨特的51單片機教程匯總貼https://bbs.elecfans.com
    發表于 11-18 09:59

    LabVIEW開發者必備技巧寶典第三部分

    LabVIEW開發者必備技巧寶典第三部分分享給大家,請叫我雷鋒。
    發表于 12-05 11:40

    LabVIEW開發者必備技巧寶典第三部分

    本帖最后由 jfzhangjin 于 2015-5-6 09:30 編輯 LabVIEW開發者必備技巧寶典第三部分由電子發燒友網論壇出品,集結眾多大牛、工程師的經驗之作。為廣大LabVIEW
    發表于 12-05 14:19

    找不到任何基于PSoC4或Pro的第三部分模塊

    大家好,我似乎找不到任何基于PSoC4或Pro的第三部分模塊。例如,對話框的DA14580來自松下的PAN1740模塊。塞浦路斯IC有第三方供應商嗎?提前感謝!克里斯托弗
    發表于 09-17 14:18

    接收機用晶體變換器設計及制作第三部分

    接收機用晶體變換器設計及制作第三部分 晶體變換器的印刷電路基板的制作與調整 圖26晶體變換器的印刷電路基板
    發表于 05-15 10:58 ?1003次閱讀
    接收機用晶體變換器設計及制作<b class='flag-5'>第三部分</b>

    開關電源設計(第3版)第三部分

    電子發燒友網站提供《開關電源設計(第3版)第三部分.txt》資料免費下載
    發表于 09-12 15:04 ?0次下載

    2012年PSoC數模混合設計培訓_第三部分

    2012年PSoC數?;旌显O計培訓_第三部分
    發表于 10-27 09:30 ?8次下載
    2012年PSoC數?;旌显O計培訓_<b class='flag-5'>第三部分</b>

    《電動汽車傳導充電系統》國家標準第三部分直流充電接口資料免費下載

    本文檔的主要內容詳細介紹的是《電動汽車傳導充電系統》國家標準第三部分直流充電接口資料免費下載。
    發表于 12-18 08:00 ?34次下載
    《電動汽車傳導充電系統》國家標準<b class='flag-5'>第三部分</b>直流充電<b class='flag-5'>接口</b>資料免費下載

    LTC2387驅動程序第三部分

    LTC2387驅動程序第三部分
    發表于 05-16 15:23 ?5次下載
    LTC2387驅動程序<b class='flag-5'>第三部分</b>

    用于激活設備的可編程定時器-第三部分

    電子發燒友網站提供《用于激活設備的可編程定時器-第三部分.zip》資料免費下載
    發表于 12-16 10:28 ?0次下載
    用于激活設備的可編程定時器-<b class='flag-5'>第三部分</b>

    用Raspberry Pi和傳感器制作“自動營造舒適空間的裝置” 第三部分

    大家好,我是吉田!我們這次要創作一款讓家中更舒適、讓在家辦公更高效的設備,本文是第三部分。在第二部分中,我們用BLE連接了羅姆SensorMedal并測量了各種數據。
    的頭像 發表于 02-24 10:43 ?596次閱讀
    用Raspberry Pi和傳感器制作“<b class='flag-5'>可</b>自動營造舒適空間的裝置” <b class='flag-5'>第三部分</b>

    硬件即代碼第三部分:空間與時間

    電子發燒友網站提供《硬件即代碼第三部分:空間與時間.zip》資料免費下載
    發表于 06-14 15:12 ?0次下載
    硬件即代碼<b class='flag-5'>第三部分</b>:空間與時間

    SensorTile.box第三部分:編程模式(Pro mode)介紹

    電子發燒友網站提供《SensorTile.box第三部分:編程模式(Pro mode)介紹.pdf》資料免費下載
    發表于 07-29 16:19 ?0次下載
    SensorTile.box<b class='flag-5'>第三部分</b>:編程模式(Pro mode)介紹

    用于高頻接收器和發射器的鎖相環——第三部分

    電子發燒友網站提供《用于高頻接收器和發射器的鎖相環——第三部分.pdf》資料免費下載
    發表于 11-23 10:18 ?0次下載
    用于高頻接收器和發射器的鎖相環——<b class='flag-5'>第三部分</b>
    主站蜘蛛池模板: 国产色播视频在线观看| 嗯 用力啊 嗯 c我 啊哈老师| 热久久综合这里只有精品电影| 亚洲精品无码AAAAAA片| 扒开老师大腿猛进AAA片| 久久免费视频| 亚洲 自拍 偷拍 另类综合图区| 99热这里只有精品| 久久国产精品永久免费网站| 无限资源在线看影院免费观看| qvod激情图片| 久欠热视频精品首页| 亚洲欧美另类无码专区| 国产精品69人妻无码久久| 欧美性最猛xxxx在线观看视频| 又大又硬又爽免费视频| 国产亚洲精品线观看不卡| 日韩 国产 欧美视频二区| 99国产热视频在线观看| 久久99re2热在线播放7| 小p孩玩成年女性啪啪资源| 菠萝菠萝蜜在线观看视频| 美女图片131亚洲午夜| 野花日本韩国视频免费高清观看| 国产精品大全国产精品| 日本人bbwbbwbbwbbw| bl被教练啪到哭H玉势| 久久天天综合| 伊人网综合网| 精品一区二区三区色花堂| 亚洲国产精品免费观看| 国产精品久久久久久久久爆乳| 日本浴室日产在线系列| ZZoo兽2皇| 欧洲-级毛片内射八十老太婆| 99精品国产免费久久久久久下载 | 99久久无码一区人妻A片蜜| 久久水蜜桃亚洲AV无码精品偷窥| 亚洲嫩草影院久久精品| 国内偷拍夫妻av| 亚洲不卡高清免v无码屋|