4.2 學習UVM中的“connect_phase“,將其應用到具體案例分為幾步?

文章目錄

  • 前言
  • 1. `connect_phase` 的作用與執行順序
  • 2. TLM 連接的類型與示例
    • 2.1 生產者-消費者模型
    • 2.2 分析端口廣播模型
  • 3. 層次化連接示例
  • 4. 動態連接與條件化配置
  • 5. 關鍵注意事項
  • 6. 完整示例:SoC 驗證環境連接
    • 6.1 Monitor 廣播數據
    • 6.2 Scoreboard 和 Coverage
    • 6.3 Env 中的連接


前言

在 UVM 驗證環境中,connect_phase 是組件間通信鏈路構建的核心階段,用于連接 TLM 端口、分析端口等通信接口。以下是分步驟的詳細應用說明:


1. connect_phase 的作用與執行順序

  • 功能:建立組件間的通信通道(如 TLM 端口、分析端口、FIFO 等)。
  • 執行順序:自底向上(Bottom-Up),子組件的 connect_phase 先于父組件執行。
  • build_phase 的區別build_phase 創建組件實例,connect_phase 連接組件實例。

2. TLM 連接的類型與示例

2.1 生產者-消費者模型

場景:Driver 生成事務(Transaction),Scoreboard 接收事務進行比對。

// Driver 類定義(生產者)
class instruction_driver extends uvm_driver #(instruction_tx);`uvm_component_utils(instruction_driver)uvm_blocking_put_port #(instruction_tx) put_port;  // 阻塞式輸出端口function new(string name, uvm_component parent);super.new(name, parent);put_port = new("put_port", this);endfunction
endclass// Scoreboard 類定義(消費者)
class regfile_scoreboard extends uvm_scoreboard;`uvm_component_utils(regfile_scoreboard)uvm_blocking_put_imp #(instruction_tx, regfile_scoreboard) put_imp;  // 阻塞式輸入端口實現function new(string name, uvm_component parent);super.new(name, parent);put_imp = new("put_imp", this);endfunction// 實現 put 方法(接收數據)task put(instruction_tx tx);// 比對邏輯endtask
endclass// Env 中的 connect_phase 連接端口
class processor_env extends uvm_env;instruction_driver   driver;regfile_scoreboard   scoreboard;virtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);driver.put_port.connect(scoreboard.put_imp);  // 端口綁定endfunction
endclass

2.2 分析端口廣播模型

場景:Monitor 監控 DUT 信號,通過分析端口廣播給多個組件(Scoreboard、Coverage)。

// Monitor 類定義(廣播者)
class data_monitor extends uvm_monitor;`uvm_component_utils(data_monitor)uvm_analysis_port #(data_tx) ap;  // 分析端口function new(string name, uvm_component parent);super.new(name, parent);ap = new("ap", this);endfunctiontask run_phase(uvm_phase phase);// 捕獲數據并通過 ap.write(tx) 廣播endtask
endclass// Scoreboard 和 Coverage 類定義(訂閱者)
class data_scoreboard extends uvm_scoreboard;uvm_analysis_imp #(data_tx, data_scoreboard) ap_imp;function new(string name, uvm_component parent);super.new(name, parent);ap_imp = new("ap_imp", this);endfunctionfunction void write(data_tx tx);// 數據比對邏輯endfunction
endclassclass data_coverage extends uvm_component;uvm_analysis_imp #(data_tx, data_coverage) ap_imp;function new(string name, uvm_component parent);super.new(name, parent);ap_imp = new("ap_imp", this);endfunctionfunction void write(data_tx tx);// 覆蓋率收集邏輯endfunction
endclass// Env 中的 connect_phase 連接分析端口
class data_env extends uvm_env;data_monitor     monitor;data_scoreboard  scoreboard;data_coverage    coverage;virtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);monitor.ap.connect(scoreboard.ap_imp);   // 單播連接monitor.ap.connect(coverage.ap_imp);     // 多播連接endfunction
endclass

3. 層次化連接示例

場景:在 SoC 驗證中,連接跨層級的組件(如 Agent 到 Env 級 Scoreboard)。

// Agent 內部定義分析端口
class data_agent extends uvm_agent;data_monitor monitor;uvm_analysis_port #(data_tx) ap;  // Agent 級分析端口virtual function void build_phase(uvm_phase phase);super.build_phase(phase);monitor = data_monitor::type_id::create("monitor", this);ap = new("ap", this);endfunctionvirtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);// 將 Monitor 的端口連接到 Agent 的端口monitor.ap.connect(ap);endfunction
endclass// Env 中跨層級連接
class soc_env extends uvm_env;data_agent       d_agent;soc_scoreboard   soc_sb;virtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);// 連接 Agent 的端口到 Scoreboardd_agent.ap.connect(soc_sb.ap_imp);endfunction
endclass

4. 動態連接與條件化配置

場景:根據測試需求動態啟用/禁用某些連接。

// Env 中按條件連接
class dynamic_env extends uvm_env;data_agent      d_agent;debug_monitor   dbg_mon;bit             enable_debug;virtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);// 默認連接d_agent.monitor.ap.connect(scoreboard.ap_imp);// 動態啟用調試連接if (enable_debug) begind_agent.monitor.ap.connect(dbg_mon.ap_imp);endendfunction
endclass

5. 關鍵注意事項

  1. 執行順序connect_phase自底向上執行,確保子組件先連接,父組件后連接。
  2. 端口類型匹配:連接的端口必須類型兼容(如 uvm_blocking_put_port 必須連接 uvm_blocking_put_imp)。
  3. 引用層級路徑:跨層級連接時需正確引用組件路徑(如 agent.monitor.ap)。
  4. 避免空指針:確保連接的組件已在 build_phase 中實例化。
  5. FIFO 連接:若需緩沖數據,可使用 uvm_tlm_fifo 作為中間件:
uvm_tlm_fifo #(data_tx) fifo = new("fifo", this);
monitor.ap.connect(fifo.analysis_export);
scoreboard.ap_imp.connect(fifo.get_ap);

6. 完整示例:SoC 驗證環境連接

6.1 Monitor 廣播數據

class soc_monitor extends uvm_monitor;uvm_analysis_port #(soc_tx) ap;virtual task run_phase(uvm_phase phase);forever begin// 捕獲 DUT 信號生成 soc_txap.write(tx);  // 廣播事務endendtask
endclass

6.2 Scoreboard 和 Coverage

class soc_scoreboard extends uvm_scoreboard;uvm_analysis_imp #(soc_tx, soc_scoreboard) ap_imp;function void write(soc_tx tx);// 比對事務與預期結果endfunction
endclassclass soc_coverage extends uvm_component;uvm_analysis_imp #(soc_tx, soc_coverage) ap_imp;function void write(soc_tx tx);// 收集覆蓋率endfunction
endclass

6.3 Env 中的連接

class soc_env extends uvm_env;soc_monitor      monitor;soc_scoreboard  scoreboard;soc_coverage    coverage;virtual function void connect_phase(uvm_phase phase);super.connect_phase(phase);monitor.ap.connect(scoreboard.ap_imp);monitor.ap.connect(coverage.ap_imp);endfunction
endclass

通過 connect_phase,UVM 驗證環境中的組件能夠高效協作,實現事務級數據交互,為驗證場景的動態性和可擴展性奠定基礎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70479.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

HBase Shell

目錄 1. HBase常用命令1.1 create命令1.2 list命令1.3 describe命令1.4 put命令1.5 get命令1.6 scan命令1.7 count命令1.8 exists命令1.9 修改表結構1.10 delete命令1.11 deleteall命令1.12 truncate命令1.13 disable、drop命令1.14 status命令1.15 version命令 2. HBase Shell…

MATLAB基礎學習相關知識

MATLAB安裝參考:抖音-記錄美好生活 MATLAB基礎知識學習參考:【1小時Matlab速成教程-嗶哩嗶哩】 https://b23.tv/CnvHtO3 第1部分:變量定義和基本運算 生成矩陣: % 生成矩陣% 直接法% ,表示行 ;表示列 a [1,2,3;4,5,6;7,8,9];%…

用自定義注解實現Excel數據導入中的枚舉值校驗

使用自定義注解實現Excel數據導入中的枚舉值校驗 在實際開發中,我們經常需要從Excel文件中導入數據,并且這些數據需要符合一定的規則,比如某些字段的值必須是預定義的枚舉值。本文將介紹如何使用自定義注解來實現這一功能,以提高…

基于ffmpeg+openGL ES實現的視頻編輯工具-opengl相關邏輯(五)

在我們的項目中,OpenGL ES 扮演著至關重要的角色,其主要功能是獲取圖像數據,經過一系列修飾后將處理結果展示到屏幕上,以此實現各種豐富多樣的視覺效果。為了讓大家更好地理解后續知識,本文將詳細介紹 OpenGL 相關代碼。需要注意的是,當前方案將對 OpenGL 的所有操作都集…

dify安裝

官網教程 https://github.com/langgenius/dify/blob/main/README_CN.md 1、下載源碼 git clone https://github.com/langgenius/dify.git 2、進入docker目錄 cd dify cd docker cp .env.example .env修改nginx對外端口配置 修改為9000 最后執行:docker compo…

前端導出word文件,并包含導出Echarts圖表等

基礎導出模板 const html <html><head><style>body {font-family: Times New Roman;}h1 {text-align: center;}table {border-collapse: collapse;width: 100%;color: #1118FF;font-weight: 600;}th,td {border: 1px solid black;padding: 8px;text-align: …

【ETL】從理論到Python實踐的數據處理

引言 ETL&#xff08;Extract, Transform, Load&#xff09;是一種數據處理過程&#xff0c;用于將數據從一個或多個源提取出來&#xff0c;進行清洗、轉換和整合&#xff0c;然后加載到目標數據倉庫或數據庫中。ETL 是數據倉庫和數據分析領域中不可或缺的一部分&#xff0c;廣…

若依Flowable工作流版本監聽器使用方法

1.前言 本文詳細介紹如何在若依Flowable工作流版本&#xff08;RuoYi-Vue-Flowable&#xff09;中配置執行監聽器和任務監聽器。是以我二次開發的代碼為基礎&#xff0c;介紹如何配置監聽器&#xff0c;已解決源碼在新增或刪除監聽器出現的問題&#xff0c;如果需要二次開發的…

紛析云開源版- Vue2-增加字典存儲到localStorage

main.js //保存字典數據到LocalStorage Vue.prototype.$api.setting.SystemDictType.all().then(({data}) > {loadDictsToLocalStorage(data) })新增 dictionary.js 放在 Utils文件夾里面 // 獲取字典數據 export function getDictByType(dictType) {const dicts JSON.par…

jQuery UI CSS 框架 API

jQuery UI CSS 框架 API 概述 jQuery UI 是一個基于 jQuery 的用戶界面和交互庫,它提供了一套豐富的交互組件和視覺效果,旨在幫助開發者快速構建具有吸引力和互動性的網頁應用。jQuery UI CSS 框架 API 是 jQuery UI 的一部分,它允許開發者通過簡單的 CSS 類來控制 UI 組件…

VSCode自定義快捷鍵和添加自定義快捷鍵按鍵到狀態欄

VSCode自定義快捷鍵和添加自定義快捷鍵按鍵到狀態欄 &#x1f4c4;在VSCode中想實現快捷鍵方式執行某些指令操作&#xff0c;可以通過配置組合式的鍵盤按鍵映射來實現&#xff0c;另外一種方式就是將執行某些特定的指令嵌入在面板菜單上&#xff0c;在想要執行的時候&#xff0…

【C語言】指針(5)

前言&#xff1a;上篇文章的末尾我們使用了轉移表來解決代碼冗余的問題&#xff0c;那我們還有沒有什么辦法解決代碼冗余呢&#xff1f;有的這就是接下來要說的回調函數。 往期文章: 指針1 指針2 指針3 指針4 文章目錄 一&#xff0c;回調函數二&#xff0c;qsort實現快速排序1…

【python】網頁批量轉PDF

安裝wkhtmltopdf 網站&#xff1a;wkhtmltopdf wkhtmltopdf http://www.baidu.com/ D:website1.pdf 安裝pdfkit庫 pip install pdfkit 批量轉換代碼 import os import pdfkit path_wkthmltopdf rE:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe config pdfkit.configu…

游戲引擎學習第113天

倉庫:https://gitee.com/mrxiao_com/2d_game_2 黑板&#xff1a;優化的基本過程 在游戲編程中&#xff0c;優化是一個非常重要的學習內容&#xff0c;尤其是想要成為專業開發者時。優化的核心是理解代碼的執行速度&#xff0c;以及如何提升其性能。在這個階段&#xff0c;已經…

通義靈碼AI程序員

通義靈碼是阿里云與通義實驗室聯合打造的智能編碼輔助工具&#xff0c;基于通義大模型技術&#xff0c;為開發者提供多種編程輔助功能。它支持多種編程語言&#xff0c;包括 Java、Python、Go、TypeScript、JavaScript、C/C、PHP、C#、Ruby 等 200 多種編碼語言。 通義靈碼 AI…

SeaTunnel社區「Demo方舟計劃」首期活動上線—— MySQL CDC實時同步至PostgreSQL實戰

引言 凌晨2點&#xff0c;某電商公司的數據工程師小李正對著屏幕抓狂——業務部門臨時要求將MySQL的訂單表實時同步到PostgreSQL進行分析&#xff0c;眾所周知&#xff0c;在數據驅動的業務場景中&#xff0c;異構數據源同步是高頻剛需。 以MySQL到PostgreSQL的CDC同步為例&a…

iNeuOS工業互聯網操作系統,民爆遠程運維平臺案例

iNeuOS工業互聯網操作系統,民爆遠程運維平臺案例 目 錄 1. 概述... 2 2. iNeuOS在民爆生產廠區和北京運維中心配置... 3 1.1 生產廠區配置... 3 1.2 運維中心配置... 7 1. 概述 針對本項目進行初步調研,項目的總體需求為滿足新建…

利用websocket檢測網絡連接穩定性

瀏覽器中打開F12&#xff0c;控制臺中輸入以下內容 > 回車 > 等待結果 連接關閉 表示斷網 let reconnectDelay 1000; // 初始重連間隔 let pingInterval null; let socketManuallyClosed false; // 標志是否手動關閉function createWebSocket() {if (socketManuallyCl…

Unity shader glsl著色器特效之 模擬海面海浪效果

一個簡單的海浪效果&#xff0c;通過波的疊加實現水面起伏的動效&#xff0c;根據波峰斜率來為浪花著色&#xff0c;再根據法線貼圖和水花貼圖來和調整uv的平滑移動來增強海浪移動的細節。如果需要更逼真的效果可以考慮在滿足浪花觸發的地方添加粒子系統 前置效果圖 因為是很久…