尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Verilog基础:延迟模型
相关阅读Verilog基础专栏https://blog.csdn.net/weixin_45791458/category_12263729.html?spm1001.2014.3001.5482目录1、连续赋值延迟1.1、赋值内嵌延迟1.2、线网声明延迟1.3、门延迟2、过程赋值延迟2.1、过程语句前置时序控制2.2、过程赋值语句内嵌时序控制1、连续赋值延迟连续赋值延迟用于指定右侧表达式的操作数发生值的变化到左值被更新之间的时间间隔它们模拟了惯性延迟模型(Inertial Delay ModelIDM)即他们会把短于门级原语(Primitive)或连续赋值语句(Continuous assignment)的传播延迟(Propagation Delay)的脉冲过滤掉只能传送稳定时间大于等于传播延迟的信号。连续赋值延迟可以分为三种赋值内嵌延迟、线网声明延迟和门延迟。惯性延迟是指如果右侧操作数在前一个更改有时间传播到左侧之前发生更改则会采取以下步骤将重新计算右侧表达式的值。如果此右侧的值与当前计划传播到左侧的值不同则当前计划的传播事件将被取消计划否则当前计划的传播事件按原计划执行。如果重新计算后新的右侧值等于当前左侧值则不会安排任何事件。如果新的右侧值与当前左侧值不同则使用左侧的当前值、右侧的新计算值以及语句中指示的延迟以标准方式计算延迟新的传播事件随后被调度为在延迟时间之后发生。通俗来讲就是如果在赋值号右侧的改变因为延迟尚未赋给左侧此时出现了新的赋值号右侧的改变如果导致新的计算结果和原来计划的一样则原定赋值照常进行否则原赋值将被取消。如果新的计算结果和当前左值一样则不会发生任何事件否则会重新根据值计算延迟并在延迟后赋值。1.1、赋值内嵌延迟赋值内嵌延迟指的是直接在连续赋值语句中说明延迟值下图是连续赋值语句语法的BNF范式形式有关BNF范式的内容可以在Verilog基础专栏的以往文章中找到。其中可选的[delay3]就描述了赋值内嵌延迟他可以是简单的#加上一个延迟值也可以是#后()包围的最多三个mintypmax_expression这三个表达式分别表示上升延迟下降延迟和关断延迟。上升延迟是指赋值号右值发生变化后左值从当前的0xz变为即将赋予的1所需的时间下降延迟是指赋值号右值发生变化后左值从当前的1xz变为即将赋予的0所需的时间。关断延迟是指赋值号右值发生变化后左值从当前的01x变为即将赋予的z所需的时间。另外如果信号值从01z变为即将赋予的x延迟值为这三者中最低小的值。当只有一个表达式时其表示上升延迟同时下降延迟和关断延迟也与其相同。当只有两个表达式时其表示上升延迟和下降延迟同时关断延迟也与两者中最小值相同。值得说明的是mintypmax_expression本身可以由一个或三个表达式构成当其由一个表达式构成时代表延迟的最小值、典型值和最大值都指定为这个表达式当其由三个表达式构成时代表延迟的最小值、典型值和最大值分别指定为这三个表达式。显然上面所说的都是针对标量赋值的情况那对于矢量赋值该如何确定是使用上升延迟、下降延迟还是关断延迟呢Verilog官方文档对此进行了描述如下所示。遗憾的是似乎各大仿真器没有实现这个性质但我在其他资料(Verilog-XL Reference)中找到了有关于描述如下所示。如果右值最低位保持为0或要从当前的1xz变为即将赋予的0则对整体使用下降延迟。如果右值最低位保持为1或要从当前的0xz变为即将赋予的1则对整体使用上升延迟。如果右值最低位保持为z或要从当前的01x变为即将赋予的z则对整体使用上升延迟。如果右值最低位保持为x或要从当前的01z变为即将赋予的x则对整体使用前三者中的最小延迟。1.2、线网声明延迟线网声明延迟来源于net声明的过程如下图所示。其中的[delay3]可选项与上一小节的相同这里的延迟对所有对此net的连续赋值和以此net为输出的门级原语(primitive)生效。注意到语法定义中有[list_of_net_decl_assignment]可选项这代表可以在net声明时进行连续赋值如下图所示。当net声明中存在连续赋值时延迟会变成连续赋值的一部分被解释为赋值内嵌延迟而不是线网声明延迟。因此会失去上面说明的特性。线网声明延迟的其他细节与赋值内嵌延迟一致。1.3、门延迟门延迟指的是在使用门级原语(primitive)时指定的延迟因为门级原语的输入输出就像是使用了连续赋值语句所以把它归为此类下图为门级原语的语法。可以看到其中有些器件拥有[delay3]可选项有些器件只有[delay2]可选项因为有些器件不会出现输出为z的情况如下图所示的n_input_gatetype和n_output_gatetype的真值表。门延迟其他的细节与赋值内嵌延迟相同注意线网声明延迟可以与赋值内嵌延迟或门延迟叠加。2、过程赋值延迟过程赋值延迟顾名思义是存在于过程语句中的延迟分为过程语句前置时序控制和过程赋值语句内嵌时序控制两种。过程语句指的是在initial块或always块内的语句有关于这两个块的相关细节可以在Verilog基础专栏的以往文章中找到。2.1、过程语句前置时序控制过程语句前置时序控制的语法如下图所示。可以看到在一个statement_or_null前可以有procedural_timing_control_statment形式为delay_control或event_control其中delay_control可以是#加简单的延迟值也可以是mintypmax_expression。当控制流遇到procedural_timing_control_statment时会暂定执行后面的语句直到相应的延迟时间后或相应的事件发生一般只有在begin-end块内procedural_timing_control_statment才能阻塞整个块的执行因为begin-end保证了上一条语句执行完成后才开始执行下一条语句。2.2、过程赋值语句内嵌时序控制过程赋值语句内嵌时序控制是在过程赋值语句内部的只针对过程赋值语句的特定延迟它们模拟了传输延迟模型(Transport Delay Model, TDM)即它们能传送所有宽度的脉冲也就是说它们可以传输毛刺(Glitch)。两种过程赋值语句的语法如下图所示分别是阻塞赋值和非阻塞赋值。其中可选的[delay_or_event_control]便是过程赋值语句内嵌时序控制可以看到它相比于过程语句前置时序控制增加了repeat语句描述的event_control。对于阻塞赋值来说当控制流传到赋值语句时立刻计算赋值号右侧的expression并等待[delay_or_event_control]发生后进行赋值赋值完成后此语句才结束这就代表着后面的语句也会受到[delay_or_event_control]的阻塞如果语句在begin-end块中。对于非阻塞赋值来说当控制流传到赋值语句时立刻计算赋值号右侧的expression此时控制流可以继续执行下面的语句就好像是计算完右侧的expression后赋值语句就结束了一样但其实依然需要[delay_or_event_control]发生后进行赋值只是非阻塞赋值的内嵌时序控制不会阻塞后面的语句。图源自《IEEE Standard for Verilog® Hardware Description Language 2005》
RELATED

相关推荐

技术内容创作的安全边界与合规实践指南

技术内容创作的安全边界与合规实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/6 1:07:58
多通道射频幅相一致性产线测试方案设计

多通道射频幅相一致性产线测试方案设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/6 1:07:58
STM32嵌入式工具链四要素:CubeMX、VS Code、GCC、OpenOCD协同原理

STM32嵌入式工具链四要素:CubeMX、VS Code、GCC、OpenOCD协同原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/11/6 1:07:58
MORE NEWS

更多资讯

📰

交通银行江苏省分行试水词元贷:不押厂房给两家工厂批了6200万

交通银行江苏省分行试水词元贷:不押厂房给两家工厂批了6200万 去银行申请几千万元贷款,企业通常要带上什么?房产证、土地证、厂房设备发票,或者厚厚一叠抵押担保合同。但在2026年11月初的江苏,两家实体企业走进交通银行…

📰

18|DeepSeek Harness研究资料更新后,怎样找出还引用旧证据的笔记?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

国家发改委推AI全周期治理:上线备案不够了,算力数据也得备查

国家发改委推AI全周期治理:上线备案不够了,算力数据也得备查 如果一家大模型公司在产品上线的前一天,被要求把两年前买过哪批芯片、洗过哪些数据、改过哪次算法架构甚至员工转岗记录全都清清楚楚交出来,工程师的第一反应大概是发懵…

📰

Autoware 2.0 发布:端到端 AI 与规则模块可混搭

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

连接器接上平台只是开始:内容自动发布最容易漏掉的四件事

很多人第一次做内容自动化,最兴奋的不是文章写得多好,而是看到一句指令之后,内容真的出现在了另一个平台。 但只要把这套流程连续跑几天,问题很快就会冒出来:账号明明连过,任务却突然失效;同一篇…

📰

Python列表、元组、集合 实验实训

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬