FPGA基礎 -- Verilog 命名事件

Verilog 的“命名事件(Named Events)”機制 進行一次系統、專業的培訓。該機制在 Verilog 中是比較冷門但重要的仿真控制特性,主要用于 模塊間同步、行為仿真觸發、事件通信,在復雜的 Testbench、行為模型中尤為重要。


一、命名事件是什么?

命名事件(Named Event) 是 Verilog 提供的一種可以顯式創建、顯式觸發、顯式等待的“同步信號”,和 event 關鍵詞相關。它們不是信號,也不是變量,而是一種 仿真時間上的觸發機制

它不是綜合語法,只用于 仿真(Simulation only)


二、基本語法與操作

1. 定義事件

event my_event;

定義了一個命名事件變量 my_event


2. 觸發(trigger)事件

-> my_event;

或:

->> my_event;  // 延遲觸發(Verilog-2005)

這表示立即觸發事件 my_event,供其它地方監聽。


3. 等待事件發生

@(my_event);  // 等待 my_event 被觸發

也可以和其他觸發條件組合:

@(posedge clk or my_event);

三、案例分析:事件觸發與等待

module event_example;event done_event;   // 定義一個事件initial begin$display("T=%0t: Waiting for event...", $time);@(done_event);   // 等待事件觸發$display("T=%0t: Event triggered!", $time);endinitial begin#50;             // 延遲 50 時間單位-> done_event;   // 觸發事件$display("T=%0t: Event sent", $time);endendmodule

輸出:

T=0: Waiting for event...
T=50: Event sent
T=50: Event triggered!

四、事件機制使用場景

1. 多模塊同步(仿真側)

// DUT 和 TB 控制之間通過事件同步開始測試

2. 行為級通信

在 FSM 中一個狀態機等待另一個模塊觸發完成事件。

3. Testbench 編寫中常用

  • 等待某個模擬行為完成(如 DMA 傳輸完成)
  • 協調不同 initial 塊之間的動作順序
  • 等待某個周期性過程完成再發下一組數據

五、多個事件組合(進階)

1. 多個事件等待

@(event_a or event_b);

2. 多次觸發也可以

repeat(3) @(event_x);

六、事件的傳遞與參數化

事件是 傳引用的,因此可以作為參數傳入子模塊:

task wait_for_event(event e);@(e);  // 等待傳入的事件
endtask

或者在 fork-join 結構中,通過共享事件做子任務完成的同步。


七、Verilog-2005 延遲觸發 ->>

->> event_name; // 表示下一時間單位才觸發

這在一些 race condition 下非常有用,避免當前時間立刻觸發帶來的不確定行為。


八、仿真工具支持與注意事項

特性支持情況
仿真支持? ModelSim、VCS、Verilator 等均支持
語義層面綜合支持? 絕不用于綜合 RTL
多線程并發場景? 搭配 fork-join 同步子任務
建議用法? 僅限 Testbench 和驗證模型中使用

九、命名事件 VS 信號控制的對比

方面命名事件觸發信號
本質模擬器中的同步機制電平/邊沿
仿真可用??
RTL綜合??
可追蹤性模擬器內部事件(不可見)信號波形可觀察
用途高層行為建模與協調真實電路邏輯

十、總結與工程建議

建議內容說明
? 推薦在 Testbench 中使用命名事件協調流程控制適合用于多個線程/過程的同步,如等待初始化完成、總線傳輸結束等
? 不要用于 RTL 模塊或計劃綜合的代碼中不屬于綜合語法,綜合工具會忽略或報錯
? 與 fork-join、任務、函數配合使用更具威力實現多線程任務的完成同步

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

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

相關文章

《Go語言圣經》結構體

《Go語言圣經》結構體 一、結構體指針的高效應用 在處理大型結構體時,為避免內存復制,通常使用指針傳遞和返回結構體: // 通過指針傳入結構體,避免值拷貝 func Bonus(e *Employee, percent int) int {return e.Salary * percen…

Ascend上如何進行帶寬測試

1 工具安裝 1.1 下載鏈接 https://www.hiascend.com/developer/download/community/result?moduledl%2Bcann 1.2 安裝指令: ./Ascend-mindx-toolbox_{version}_linux-{arch}.run --install設置環境變量: source /usr/local/Ascend/toolbox/set_env.…

生產BUG集

磁盤達到閾值導致ES無法刪除數據 method [POST], host [http://xx.xxx.xxx.xxx:9200], URI [/security_event/_delete_by_query?slices1&requests_per_second-1&ignore_unavailablefalse&expand_wildcardsopen&allow_no_indicestrue&ignore_throttledtru…

基于FastAPI與Selenium的智能開關狀態管理系統實踐

引言 在工業物聯網(IIoT)與自動化控制場景中,設備狀態的實時監控與自然語言指令執行是提升效率的關鍵。本文將介紹一種基于 FastAPI 和 Selenium 的智能設備狀態管理系統,通過大語言模型(LLM)解析用戶指令…

主體和債項均為“AAA”等級 海爾消金發行10億金融債

6月18日,繼年內發行ABS、落地ESG掛鉤銀團貸后,海爾消費金融(以下簡稱“海爾消金”)在金融市場上又邁出重要一步,成功簿記發行2025年首期規模達10億元金融債,且主體信用等級仍為“AAA”。這一舉措為海爾消金…

n8n:輕松自動化您的工作流

借助開源自動化利器 n8n,釋放重復勞動的生產力! 引言 n8n 是一款免費、開源的工作流自動化工具,致力于幫助開發者和團隊通過連接各種應用和服務,實現重復任務的自動化處理。 它由 Jan Oberhauser 于 2019 年在德國柏林創建&…

Angular--Hello(TODO)

最近有個小錯誤,因為最近還是在看thingsboard,最近終于看到前端的代碼,突然發現怎么全是ts的文件,仔細一看原來并不是之前認為的AngularJS,而是Angular。。。我tm真的無語了,又要去重新學。。。 Angular的…

在 Linux 系統中通過 yum 安裝 Sublime Text

在 Linux 系統中通過 yum 安裝 Sublime Text 的步驟如下: ?步驟 1:導入 GPG 公鑰? sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg 這一步用于驗證軟件包的合法性。 ?步驟 2:添加 Sublime Text 的軟件倉…

面向自主多星對地觀測的多智能體強化學習

大家讀完覺的有幫助記得及時關注和點贊!!! 抽象 近地軌道 (LEO) 衛星的指數級增長徹底改變了地球觀測 (EO) 任務,解決了氣候監測、災害管理等方面的挑戰。然而,多衛星系統…

flutter 短視頻相關插件選型

?插件名稱??核心優勢??缺點??短視頻場景適用性??推薦指數??video_player? (官方基礎庫)? 官方維護,跨平臺兼容性最佳(iOS/Android/macOS) ? 輕量級,無額外依賴,啟動速度快 ? 支持本地/網絡視頻、基礎播…

QTableView為例:Qt模型視圖委托(MVD)(Model-View-Delegate)

文章目錄 1. QT中的MVD模式2. View3. Model4. Delegate5. 以TableView為例 1. QT中的MVD模式 模型視圖委托(MVD)是Qt中特有的設計模式,類似MVC設計模式,將MVC設計模式中的Controller當做MVD中的Delegate,兩者的概念基…

uni-app總結3-項目新建運行調試

一、新建項目 通過HbuilderX新建 在點擊工具欄里的文件 -> 新建 -> 項目(快捷鍵CtrlN,MacOS上是CMD N): 左測Tab選擇uni-app類型,輸入工程名,選擇模板,Vue版本選擇3,其他不…

LeetCode 每日一題打卡|若谷的刷題日記 4day--移動零

移動零 題目: 給定一個數組 nums,編寫一個函數將所有 0 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行操作。 示例 1: 輸入: nums [0,1,0,3,12] 輸出: [1,3,1…

簡歷模板3——數據挖掘工程師5年經驗

姓名 / Your Name 數據挖掘工程師 | 5年經驗 | 推薦/畫像/反欺詐 📞 138-XXXX-XXXX | ?? your.emailexample.com | 🌐 github.com/yourname | 📍 北京 🎯 個人簡介 / Summary 5年大廠數據挖掘工程經驗,碩士學歷&am…

Vue添加圖片作為水印

直接上代碼 把圖片作為水印 <div class"info-warp"><div class"image-container"><img src"https://img.shetu66.com/2023/06/28/1687920981963810.png" /><div class"watermark-layer"><imgv-for"…

Conda 常用命令大全:從入門到高效使用

Conda 常用命令大全&#xff1a;從入門到高效使用 Conda 是 Python 生態中最流行的環境管理工具之一&#xff0c;它不僅可以管理 Python 包&#xff0c;還能創建隔離的虛擬環境&#xff0c;適用于數據分析、機器學習、科學計算等場景。本文將介紹 Conda 的常用命令&#xff0c…

【系統更新】TDuckX2.7升級!DSL邏輯、自定義Webhook、AI考試來襲

No.1 支持自定義 DSL 公式 邏輯規則支持自定義 DSL&#xff0c;通過公式表達式構建復雜邏輯條件&#xff0c;能夠支持選項、矩陣、自增表單中的內容控制&#xff0c;可以滿足多變業務場景&#xff0c;極大提升了邏輯配置的靈活性。 No.2 擴展值新增“名稱字段” 在批量生成擴…

安卓9.0系統修改定制化____深入解析安卓 9.0 各手機分區:功能、作用與差異 基礎篇二

在安卓 9.0 系統中,手機內部存儲被劃分為多個不同的分區,每個分區都承擔著獨特且重要的職責。深入了解這些分區,對于我們理解安卓系統運行機制、進行系統優化,甚至是刷機等操作都有著極大的幫助。尤其是rom定制與修改方面。 通過博文了解?????? 1??????-----了…

自動駕駛技術路線之爭:視覺派、激光雷達派與融合派,誰將引領未來?

自動駕駛的賽道上&#xff0c;科技巨頭、傳統車企和初創公司紛紛亮出“看家本領”。但你是否注意到&#xff0c;不同玩家的“眼睛”和“大腦”配置大相徑庭&#xff1f;特斯拉CEO馬斯克曾稱“激光雷達是徒勞的拐杖”&#xff0c;而國內華為、小鵬等企業則堅定擁抱激光雷達。這背…

Spring Cloud Alibaba 中間件

Spring Cloud Alibaba 中間件 &#x1f517; Spring官方介紹 [??Spring官方對Spring Cloud Alibaba的更新不及時] &#x1f517; Spring Cloud Alibaba官網 &#x1f4dd; 代碼記錄 Nacos&#xff08;服務注冊與發現&#xff09; Nacos(Dynamic Naming and Configuration…