仿真过程中采样和数据驱动的竞争问题

设计和仿真过程中都会存在时序竞争问题。
大家在跑仿真的过程中,将波形展开时,时钟的上升沿和数据变化的沿,看起来是一样齐的,好像没有延时。而真实电路中,时钟上升沿和驱动信号二者从物理电气特性上来说,延时是必然存在的。
那么为什么rtl仿真上没有表现呢?因为rtl级仿真不知道具体的物理上的delay是多少,这些延迟只有在门级仿真时才会体现出来,在rtl级是不清楚的,因此默认情况下,rtl级仿真,时钟对于组合电路的驱动会添加一个无限最小时间(delta—cycle)的延迟,该延迟无法用绝对时间单位衡量,它要比最小时间单位精度还小。 该最小延迟表明,任何信号只要被时钟驱动,或者任何一个信号只要被其他信号驱动,那么被驱动的信号和驱动信号之间至少有一个delta—cycle的延迟,该延迟只在仿真上有意义。在仿真器中敲入命令“run 0”,即为让仿真器运行一个delta—cycle的时间,称为一个时间片(time—slot)。
举个例子
在这里插入图片描述
以45ns处波形变化为例,此时clk1、clk2均为上升沿,data加到2。时序图如下:
可以
可以看到,在clk1上升沿处,由clk1触发的clk2与data信号,三者几乎同时变化。

将光标移至45ns处,
在这里插入图片描述
数据显示clk1=1,clk2=1,data=8’h02,而打印出的消息为

在这里插入图片描述
波形的数据与打印出的数据不一致,这是为什么呢?
如果只从波形来看,我们无法得出clk1、clk2与data的准确时序前后关系,而这种更准确的前后时序关系只发生在delta-cycle。查看delta—cycle,可以得到更准确的时序关系。
将光标选中波形上的clk1,再将时间轴选中到clk1在45ns处的上升变化沿。选中工具栏处的“expanded time deltas mode”,再选中“expanded time at active cursor”。即可以观察在特定时间点,时序逻辑或组合逻辑中,参与硬件模拟仿真的硬件变量之间的准确时序前后关系。
在这里插入图片描述
在“45ns + 0(delta—cycle)”处,clk1=1,clk2=0,data=1。

clk2利用了组合逻辑跟clk1跳转,所以clk2一定比clk1晚一个delta cycle。
在这里插入图片描述
在“45ns + 1(delta—cycle)”处,clk1=1,clk2=1,data=1。
在这里插入图片描述
在“45ns + 2(delta—cycle)”处,clk1=1,clk2=1,data=2。
在这里插入图片描述
总结:
由于各种可能性,clk与被采样数据之间可能存在若干个delta—cycle的延迟,那么采样可能会存在问题,如上面的例子中clk1与clk2对data采样,在同一时刻得到的是不同的采样结果。因此采样数据中的竞争问题会成为潜在困扰仿真采样准确性的问题。
如何避免采样的竞争问题呢?
1.在驱动时,添加相应的人为延迟,模拟真实的延迟行为,同时加大clk与变量之间的延迟,以此提高DUT使用信号时的准确度和TB采样信号时的可靠性。
2.对于一些采样时依然存在delta—cycle延迟的信号,还可以依靠在采样事件前的某段时刻中进行采样,来模拟建立时间的采样要求,确保采样的可靠性。

  • 11
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值