VHDL中信号通过端口传递是否会产生delta周期延迟?
VHDL端口连接的Delta延迟问题解析
核心结论:端口关联的两种不同处理逻辑
VHDL规范中,端口关联的行为取决于实际关联部分的类型,并非所有端口连接都会生成隐式信号赋值:
1. 实际关联为全局静态信号(时钟分发的典型场景)
当端口连接的实际部分是一个全局静态信号(比如顶层时钟clk直接连接到子模块的clk端口),根据VHDL-2008规范6.5.6.3节的描述:
当实际部分为信号时,形式端口与该信号关联。此时形式端口表示与实际信号相同的信号;它们共享相同的驱动源和当前值。
这种情况下,形式端口本质是实际信号的别名,二者指向同一个信号对象,不存在中间的隐式赋值语句,自然不会产生delta周期延迟。所有层级的时钟端口都对应同一个信号,值的更新完全同步,不会出现多个带不同delta延迟的时钟版本。
2. 实际关联为非全局静态表达式(用户提到的隐式赋值场景)
只有当实际关联部分是一个非全局静态表达式(例如foo + 1、not bar这类动态计算的表达式)时,才会触发用户看到的规范描述:生成匿名信号和隐式并发赋值语句anonymous <= E;,此时该赋值会引入delta周期延迟。但这种场景在时钟分发中几乎不会出现。
时钟分发无多版本Delta延迟的原因
在层级化设计的时钟分发中,我们始终是将时钟信号(全局静态信号)直接通过端口连接到各个子模块。这种关联属于上述第一种情况,所有层级的时钟端口都是原时钟信号的别名,共享同一信号值的更新逻辑——信号值在当前delta周期内更新后,所有别名端口都会立即看到新值,没有额外的延迟。
内容的提问来源于stack exchange,提问作者Connor
相关产品推荐
相关产品推荐

