91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

virtual interface怎么使用

發布時間:2021-12-17 16:27:03 來源:億速云 閱讀:420 作者:iii 欄目:互聯網科技

本篇內容主要講解“virtual interface怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“virtual interface怎么使用”吧!

interface 封裝了模塊的端口(ports),以及它們的方向(modports)同步關系( clocking block),function和task。

interface 簡化了模塊之間的連接,但是無法很好地適用于基于OOP的測試平臺,無法在program ,class中進行實例化。

為了解決這個問題, System Verilog引入了virtual interface的概念。virtual interface是實際interface的指針。即virtual interface是一種可以在class中實例化的數據類型,使用virtual interface可與被測設計(DUT)進行間接地通信,而無需使用層次結構引用。

interface將測試平臺與DUT分開。virtual interface在測試平臺的不同位置操縱一組虛擬信號,而不是直接操縱實際的信號。

interface SBus; // A Simple bus interfacelogic [7:0] addr, data;endinterface
class SBusTransctor; // SBus transactor class virtual SBus bus; // virtual interface of type Sbus function new( virtual SBus s );    bus= s; // initialize the virtual interface endfunctionendclass
module dev ( Sbus s ) ... endmodule //devices that use SBus
module topSBus s ; // instantiate  interfacedev a ( s ); // instantiate  device
initial beginSbusTransactor t; // create  bus-transactorst = new( s );endendmodule

在前面的示例中,SbusTransctor是一個簡單的可重用事務類,其在編寫時不需要知道測試平臺的層次結構,也不知道與之交互的特定設計。該事務類可以與符合接口協議的任何數量的設計進行交互。

在測試平臺中是virtual interface時,需要滿足以下3個要求

1、  實例化的接口必須正確連接到DUT。


SBus s ; // instantiate  interfacedev a ( s ); // instantiate  device

2、  必須在類中聲明virtual interface句柄。


virtual SBus bus; // virtual interface oftype Sbusfunction new( virtual SBus s );  bus = s; // initialize the virtual interface endfunction

3、必須將指定模塊的interface賦值給virtual interface


SbusTransactor t; // create  bus-transactorst = new( s );

UVM是基于類的驗證方法,其需要在driver和monitor兩個不同的位置訪問DUT,因此在UVM中需要兩個virtual interface。

在UVM中設置虛擬接口如下所示


module top;…dut_if dif;…initial beginuvm_config_db#(virtual dut_if)::set(null, "*", "vif", dif);run_test();endendmoduleclass tb_driver extends uvm_driver #(trans1);…virtual dut_if vif;…function void build_phase(uvm_phase phase);super.build_phase(phase);// Get the virtual interface handle that was stored in the// uvm_config_db and assign it to the local vif field.if (!uvm_config_db#(virtual dut_if)::get(this, "", "vif",vif))`uvm_fatal("NOVIF", {"virtual interface must be set for: ",get_full_name(), ".vif"});endfunction…endclass

實際的interface dif在頂層模塊中的run_test()之前使用命令


uvm_config_db#(virtualdut_if)::set(null, "*", "vif", dif);

存儲在(set)字符串“ vif”中。 

然后使用命令


uvm_config_db#(virtual dut_if)::get(this, "", "vif", vif)

從同一“ vif”位置,并將其賦值給tb_driver類中的virtual interface vif

到此,相信大家對“virtual interface怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉义县| 当涂县| 新竹县| 高安市| 同心县| 舒兰市| 和田县| 淮滨县| 海原县| 曲靖市| 西宁市| 班玛县| 克拉玛依市| 尚义县| 青田县| 眉山市| 北宁市| 华安县| 巴彦淖尔市| 黔江区| 城口县| 潍坊市| 蓬莱市| 东阿县| 惠来县| 沂源县| 乐昌市| 珠海市| 开封县| 汉川市| 济宁市| 海晏县| 富蕴县| 涟水县| 湘西| 克拉玛依市| 吐鲁番市| 平南县| 霍州市| 宝清县| 南康市|