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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…