uvm中的激勵是如何發送出去的

在UVM中,Sequence生成的激勵(Transaction)通過以下協作流程發送到Driver并最終驅動到DUT,其核心機制如下:

+---------------+       +---------------+       +------------+       +-----+
| Sequence      | →     | Sequencer     | →     | Driver     | →     | DUT |
+---------------+       +---------------+       +------------+       +-----+生成事務(Transaction)  管理事務隊列與仲裁     拉取并處理事務       實際驅動信號

2. 激勵發送的詳細步驟

步驟1:Sequence生成事務
  • Sequence通過uvm_do宏或手動調用start_item/finish_item生成事務。

  • class my_sequence extends uvm_sequence #(my_transaction);task body();my_transaction tx;repeat(10) begintx = my_transaction::type_id::create("tx");start_item(tx);       // 請求發送權限assert(tx.randomize());// 隨機化事務finish_item(tx);      // 將事務提交給Sequencerendendtask
    endclass

步驟2:Sequencer管理事務隊列

?事務緩存finish_item()將事務放入Sequencer的請求隊列。

?仲裁機制:Sequencer根據配置的仲裁算法(如優先級、公平性)選擇下一個發送的事務。

  • Driver在run_phase中循環調用get_next_item從Sequencer獲取事務。

步驟3:Driver拉取事務
  • Driver在run_phase中循環調用get_next_item從Sequencer獲取事務。

  • class my_driver extends uvm_driver #(my_transaction);virtual task run_phase(uvm_phase phase);forever beginmy_transaction req;seq_item_port.get_next_item(req);  // 阻塞獲取事務drive_to_dut(req);                // 驅動到DUTseq_item_port.item_done();        // 通知事務完成endendtask
    endclass

    get_next_item?的作用:

    • ????????功能:從Sequencer的請求隊列中阻塞獲取下一個事務

      • 關鍵行為

        • 阻塞等待:若Sequencer的隊列為空,Driver會在此處掛起,直到Sequence產生新事務。

        • 獲取事務對象:返回的requvm_sequence_item類型,通常需要轉換為具體的Transaction類型。

  • item_done?的作用

  • 功能:通知Sequencer當前事務已處理完畢,允許Sequencer釋放資源并繼續后續操作。

  • 關鍵行為

    • 同步握手:解除Sequence中finish_item()的阻塞,使Sequence能繼續發送下一個事務。

    • 可選響應傳遞:通過參數返回響應數據(如讀操作結果)

  • Sequence與Driver的交互
+-------------------+       +-------------------+       +-------------------+
| Sequence          |       | Sequencer         |       | Driver            |
+-------------------+       +-------------------+       +-------------------+
| start_item(req)   | -->   | 將req放入隊列      | <--   | get_next_item(req)|
|                   |       |                   |       |                   |
| finish_item(req)  | <--   | 等待item_done()   | --(阻塞)-+                 |
|                   |       |                   |       | 處理req并驅動DUT |
|                   |       |                   |       | item_done()       |
+-------------------+       +-------------------+       +-------------------+

?

?步驟4:事務完成確認

  • Driver調用item_done()通知Sequencer事務處理完畢,觸發以下行為:

    • 釋放Sequence阻塞:解除finish_item()的阻塞,允許Sequence繼續發送下一個事務。

    • 響應傳遞(可選):若需要返回響應數據(如讀取DUT結果),可通過item_done(rsp)傳遞。

3. 關鍵交互機制

(1) 阻塞握手協議
  • start_item():請求發送權限,若Sequencer未授權則阻塞。

  • finish_item():將事務提交到Sequencer隊列,等待Driver處理完成(item_done)后解除阻塞。

(2) 事務生命周期
Sequence生成事務 → Sequencer緩存 → Driver拉取 → 驅動到DUT → 確認完成 → Sequence繼續

4. 多Sequence并發場景

當多個Sequence同時向同一個Sequencer發送事務時:

  • Sequencer仲裁:通過set_arbitration方法設置仲裁策略(如UVM_SEQ_ARB_FIFOUVM_SEQ_ARB_PRIORITY)。

  • 優先級控制:可通過set_priority調整Sequence優先級。

5. 示例:完整交互流程

// 場景:一個Sequence發送3個事務
// ----------------------------
// Sequence代碼
class test_sequence extends uvm_sequence #(my_transaction);task body();for (int i=0; i<3; i++) beginmy_transaction tx;tx = my_transaction::type_id::create("tx");start_item(tx);tx.data = i;finish_item(tx);  // 阻塞直到Driver調用item_done()endendtask
endclass// Driver代碼
class my_driver extends uvm_driver #(my_transaction);task run_phase(uvm_phase phase);forever beginmy_transaction req;seq_item_port.get_next_item(req);  // 阻塞直到事務到達$display("Driving transaction: data=%0d", req.data);#10ns;  // 模擬驅動時序seq_item_port.item_done();         // 解除finish_item阻塞endendtask
endclass

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

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

相關文章

SpringAI系列 - ToolCalling篇(二) - 如何設置應用側工具參數ToolContext(有坑)

目錄 一、引言二、集成ToolContext示例步驟1: 在`@Tool`標注的工具方法中集成`ToolConext`參數步驟2:`ChatClient`運行時動態設置`ToolContext`參數三、填坑一、引言 在使用AI大模型的工具調用機制時,工具參數都是由大模型解析用戶輸入上下文獲取的,由大模型提供參數給本地…

【RabbitMQ業務冪等設計】RabbitMQ消息是冪等的嗎?

在分布式系統中&#xff0c;RabbitMQ 自身不直接提供消息冪等性保障機制&#xff0c;但可通過業務邏輯設計和技術組合實現消息處理的冪等性。以下是 8 種核心實現方案及最佳實踐&#xff1a; 一、消息唯一標識符 (Message Deduplication) 原理 每條消息攜帶全局唯一ID&#xff…

網絡可靠性要求

目錄 一、背景介紹 二、環路引發的危害 1、廣播風暴 2、MAC 地址表震蕩 三、STP生成樹 1、STP的作用 2、STP工作過程 3、根橋選舉 4、根端口選舉 5、指定端口選舉 6、BPDU報文分析 7、計時器 8、端口狀態轉化 總結 一、背景介紹 為了提高網絡可靠性&#xff0c;交換網絡…

《STL 六大組件之容器探秘:深入剖析 string》

目錄 一、string 類簡介二、string 類的常用接口1. 構造函數&#xff08;constructor function&#xff09;2. 與容量相關的接口&#xff08;capacity&#xff09;3. 與迭代器有關的接口&#xff08;iterator&#xff09;4. 與元素訪問有關的接口&#xff08;element access&am…

Unreal5從入門到精通之在編輯器中更新 UserWidgets

前言 在虛幻中創建越來越復雜和靈活的 UserWidget 藍圖時,一個問題是它們在編輯器中的外觀與它們在游戲中的最終外觀可能有很大不同。 庫存面板示例 假設你想創建一個通用的庫存顯示小部件。我們可以在整個 UI 中使用它,無論我們需要在哪里顯示某些內容。 標題,描述所顯示…

計算機網絡-OSI七層參考模型與數據封裝,網絡安全零基礎入門到精通實戰教程!

目錄 一、網絡 1、網絡的定義 2、網絡的分類 3、網絡的作用 4、網絡的數據傳輸方式 5、網絡的數據通訊方式 二、OSI七層參考模型 1、網絡參考模型定義 2、分層的意義 3、分層與功能 4、TCP\IP五層模型 三、參考模型的協議 1、物理層 2、數據鏈路層 3、網絡層 4…

Python正則替換終極指南:用re.sub玩轉字符串魔法

Python正則替換終極指南&#xff1a;用re.sub玩轉字符串魔法 一、為什么re.sub是文本處理的瑞士軍刀&#xff1f; 在Python的re模塊中&#xff0c;re.sub()的周下載量突破5800萬次&#xff08;2025年PyPI數據&#xff09;&#xff0c;它實現了&#xff1a; &#x1f4cd; 模…

gen_gauss_filter用于檢測帶方向的線條

目錄 一、核心參數分析 1.1 方向覆蓋范圍 1.2 濾波器方向帶寬 二、角度配置建議 三、參數選擇依據 四、實施建議 五、模擬圖測試(項目圖檔不好直接分享) 5.1 模擬圖制作 5.2 檢測偽代碼 在Halcon中使用高斯濾波器檢測多方向線條時,角度參數的選取需要綜合考慮濾波…

C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串轉換工具

文章目錄 1. 傳統轉換方法的局限性2. std::to_chars&#xff1a;數值到字符串的高效轉換函數原型&#xff1a;返回值&#xff1a;示例代碼&#xff1a;輸出&#xff1a; 3. std::from_chars&#xff1a;字符串到數值的高效解析函數原型&#xff1a;返回值&#xff1a;示例代碼&…

深入學習解析:183頁可編輯PPT華為市場營銷MPR+LTC流程規劃方案

華為終端正面臨銷售模式轉型的關鍵時刻&#xff0c;旨在通過構建MPRLTC項目&#xff0c;以規避對運營商定制的過度依賴&#xff0c;并探索新的增長路徑。項目核心在于建設一套全新的銷售流程與IT系統&#xff0c;支撐雙品牌及自有品牌的戰略發展。 項目總體方案聚焦于四大關鍵議…

Python正則表達式處理中日韓字符過濾全解析

Python正則表達式處理中日韓字符過濾全解析 一、核心原理&#xff1a;Unicode字符范圍定位 中日韓字符在Unicode中的分布&#xff1a; 中文&#xff1a;\u4e00-\u9fff&#xff08;基本區&#xff09; \u3400-\u4dbf&#xff08;擴展A區&#xff09; \U00020000-\U0002a6df…

基于WOA鯨魚優化的WSN網絡最優節點部署算法matlab仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鯨魚優化算法&#xff08;WOA&#xff09;是一種模擬座頭鯨捕食行為的元啟發式優化算法。其主要原理基于座頭鯨獨特的 “氣泡網” 捕食策略&#xff0c;通過數學模…

【數據分析】3 數據分析成長之路

職業發展路徑&#xff1a; 向上發展&#xff08;技術方向&#xff09;&#xff1a;可以詳細說明成為數據科學家或專家所需的具體技能和步驟&#xff0c;包括學習的算法、工具等。向下發展&#xff08;業務方向&#xff09;&#xff1a;可以探討結合業務知識的具體領域&#xff…

excel導入Mysql中時間格式異常

問題描述&#xff1a; 當使用xls/xlsx/csv導入mysql中&#xff0c;如果列是時間類型比如excel表中顯示2024/02/20 09:18:00&#xff0c;導入后時間可能就會變成1900-01-01 09:18:00這樣。 問題原因&#xff1a; 這是由于excel表中和數據庫中的時間類型不匹配導致。 問題解決…

async checkpointing

Reducing Model Checkpointing Times by Over 10x with PyTorch Distributed Asynchronous Checkpointing | PyTorch 最初來源&#xff1a;IBM Research 核心思想&#xff1a;GPU->CPU&#xff0c;用的是blocking&#xff1b;CPU->Disk&#xff0c;用的是異步不阻塞訓練…

Nginx穩定版最新1.26.2源碼包安裝【保姆級教學】

Nginx安裝及配置 開源Nginx官網地址(https://nginx.org) Nginx源碼包下載地址(https://nginx.org/en/download.html) Mainline version 主線版本 Stable version 穩定版本 Legacy versions 陳舊版本 下載Nginx源碼文件 curl -O https://nginx.org/download/nginx-1.26.2.t…

在ubuntu上用Python的openpyxl模塊操作Excel的案例

文章目錄 安裝模塊讀取Excel數據庫取數匹配數據和更新Excel數據 在Ubuntu系統的環境下基本職能借助Python的openpyxl模塊實現對Excel數據的操作。 安裝模塊 本次需要用到的模塊需要提前安裝(如果沒有的話) pip3 install openpyxl pip3 install pymysql在操作前&#xff0c;需…

GeoHD - 一種用于智慧城市熱點探測的Python工具箱

GeoHD - 一種用于智慧城市熱點探測的Python工具箱 詳細原理請參考&#xff1a;Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137. 代碼下載&#xff1a;下載 1. 簡介 在城市數據…

16 中介者(Mediator)模式

中介者模式 1.1 分類 &#xff08;對象&#xff09;行為型 1.2 提出問題 實現一個機場的起飛管理系統&#xff0c;如果由駕駛員們討論誰先飛&#xff0c;后果可能是災難性的。 1.3 解決方案 用一個中介對象來封裝一系列的對象交互。中介者使各對象不需要顯式地相互引用&a…

最薄的機身,游最深的海

經濟全球化的潮流&#xff0c;勢不可擋。 “技術、通訊和全球化&#xff0c;正在消除傳統的地理和經濟邊界&#xff0c;使競爭環境趨于平等。”《世界是平的》作者托馬斯弗里德曼預言的"扁平化競爭"正加速演進。 在高端智能手機戰場&#xff0c;一場由中國企業主導…