采样和数据驱动

本文探讨了在SystemVerilog中如何避免竞争问题,特别是在采样和数据驱动时。建议通过非阻塞赋值和人为延迟来处理同步问题,以确保时钟和驱动信号的正确时序。介绍了clocking块的作用,它用于定义采样事件和驱动行为,从而提高仿真准确性和消除信号竞争。同时,强调在接口和module中使用clocking声明的重要性,以确保信号同步和采样的可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

竞争问题

 为了避免在RTL仿真行为中发生信号竞争问题,建议通过非阻塞赋值或者延迟来解决同步问题

  • 同样地在仿真行为中,为了尽量避免时序电路中时钟和驱动信号的时序竞争问题,我们需要给出尽量明确的驱动时序和采样时序。
  • 默认情况下,时钟对于组合电路的驱动会添加一个无限最小时间(delta-cycle)的延迟,而该延迟无法用绝对时间单位衡量,它要比最小时间单位精度还小。(该延迟仅在仿真上有意义)
  • 在一个时间片(time-slot)中可以发生很多事情,例如在仿真器中敲入命令"run o",即是让仿真器运行一个delta-cycle的时间。
forever #5 clk1<=!clk;
...
always @(clk1) clk2<=clk1;
...
always@(posedge clk1 or negedge rstn)begin
    if(!rstn) d1<=0;
    else d1<=d1+1;
end
...

波形和打印的不一致,打印的更准确

  • clk2和clk1尽管在波形上看起来是在相同时间起落的,但是clk2相比于clk1要晚于一个delta-cycle,这是由于always中的驱动所添加的,同时d1又晚于clk1—个delta-cycle,所以d2与clk2并没有相差delta-cycle,即它们之间是同时发生变化的。(如clk1采样45ns处,clk2采样45ns处其实表示45ns+delta-cycle)因此在45ns处,clk1要领先d1一个delta-cycle,采样出d1=1,而clk2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值