You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VHDL并发过程调用仿真时间异常原因咨询

VHDL并发过程调用的时序异常分析

结论:这确实属于VHDL仿真中的竞争条件,根源在于非阻塞信号赋值特性与并发过程触发逻辑的交互。

现象拆解

当进程中WAIT FOR 10 ns;放在cnt <= i;之前时,仿真时间点为0ns、20ns、30ns、40ns,而非预期的0ns、10ns、20ns、30ns;将WAIT语句移到赋值之后,时序恢复正常。

原因分析

  1. 初始状态与并发过程触发逻辑

    • 仿真启动时(0ns),cnt初始值为0,并发调用的test(cnt, str)立即执行,输出str为"zero "。
    • VHDL中,并发过程调用仅在输入信号发生变化时才会重新执行。
  2. WAIT在前的时序问题

    • 进程第一次循环:先执行WAIT FOR 10 ns;,仿真推进到10ns,随后执行cnt <= 0;。
    • 这里用的是非阻塞赋值,cnt的更新会被安排在当前仿真时间点(10ns)的Δ延迟周期中完成。但由于新值(0)和旧值(0)完全相同,cnt并没有发生实际变化,因此并发的test过程不会被触发重新执行。
    • 进程第二次循环:再次WAIT FOR 10 ns;,仿真推进到20ns,执行cnt <= 1;。这次cnt从0变为1,触发test执行,str更新为"one ",此时时间点为20ns。
    • 后续循环中,每次赋值都会改变cnt的值,因此仿真时间依次推进到30ns、40ns,导致整体时序比预期晚了10ns。
  3. WAIT在后的正常时序

    • 进程第一次循环:先执行cnt <= 0;,虽然值未变化,但随后WAIT FOR 10 ns;将仿真推进到10ns。
    • 第二次循环:执行cnt <= 1;,cnt发生变化,触发test在10ns的Δ周期执行,随后WAIT FOR 10 ns;推进到20ns。
    • 后续循环以此类推,每次赋值都能触发test在对应的10ns间隔点执行,时序符合预期。

核心本质

这个问题的竞争点在于:当非阻塞赋值的新值与旧值相同时,信号不会产生事件,导致并发过程的触发被延迟。这种因信号事件触发时机与赋值逻辑不匹配导致的时序偏差,属于VHDL仿真中典型的竞争条件场景。


内容的提问来源于stack exchange,提问作者user24973442

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:58:20