VCS仿真调度机制

在SystemVerilog中,仿真事件调度遵循特定的时间轮次(time wheel),该轮次包含不同的时间槽(slot),每个时间槽对应不同的仿真阶段(region)。这些阶段包括:

  • Active Region
  • Inactive Region
  • NBA (Non-Blocking Assignment) Region
  • Observed Region
  • Re-Active Region
  • Postponed Region

@(posedge clk)

  • Region: Active Region
  • Event Type: “posedge clk” 是在Active Region触发的,这意味着在这个区域所有的事件都会立即执行。换句话说,当检测到clk信号的上升沿时,所有等待这个事件的进程会Active Region立即触发。

@(vif.cb)

  • Region: Clocking Block Event
  • Event Type: “@(vif.cb)” 依赖于clocking block的事件触发机制。Clocking block事件的触发和执行有特定的时间槽,通常会在Observed Region执行。

Clocking Block的具体行为:

  • Clocking Blocks: 在clocking block中,信号的采样和驱动是分离的。信号的采样在Observed Region进行,而信号的驱动在Re-Active Region进行。这意味着@(vif.cb)的触发是基于Observed Region中的事件。

区别总结

  • @(posedge clk) 在Active Region执行,意味着它会在检测到clk信号的上升沿时立即触发并执行。
  • @(vif.cb) 在Observed Region触发,意味着它会在Active Region完成后并在信号被观察后才会触发。Clocking block中的信号采样发生在Observed Region,而信号驱动发生在Re-Active Region,这确保了clocking block内的信号同步。

仿真时间轮次(Time Wheel)

| Active Region    | -> Events triggered by posedge clk
| Inactive Region  |
| NBA Region       |
| Observed Region  | -> Events triggered by vif.cb
| Re-Active Region |
| Postponed Region |

实际仿真行为差异

  • @(posedge clk): 在Active Region检测到clk的上升沿时立即触发,适用于所有对clk边沿敏感的进程。
  • @(vif.cb): 在Observed Region触发,这使得它更适用于同步多个信号并确保信号的稳定性。由于clocking block的设计,信号采样和驱动的分离可以避免竞争条件和不确定行为。

因此,在使用VCS仿真器时,@(vif.cb)会在稍后的时间槽触发,这可以确保信号的同步和稳定性,而@(posedge clk)则会在更早的时间槽立即触发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值