如何使VHDL并发断言适配任意数量delta周期以验证信号驱动?
解决VHDL多Delta周期下的并发断言验证问题
针对多delta周期导致断言误触发的问题,有两种可靠的解决方案:
方法1:用进程控制断言时机(推荐)
通过进程结合wait for 0 ns,让断言在当前时间步的最后一个delta周期执行,此时被驱动信号driven_sig已完成所有更新:
process(driver_sig, driven_sig, check_sigs) begin wait for 0 ns; -- 跳过当前时间步的所有中间delta周期,等待到最后一个delta if check_sigs then assert driver_sig = driven_sig report "Error: driven_sig does not match driver_sig" severity error; end if; end process;
原理:wait for 0 ns会让进程暂停,直到当前时间点的所有delta周期事件都处理完毕,再执行断言逻辑。无论中间有多少个delta延迟,都能保证检查的是信号最终稳定后的值。
方法2:利用'stable属性
通过信号的'stable属性,仅当两个信号都不再变化(即当前时间步的所有delta更新完成)时才执行断言:
assert (check_sigs and driver_sig'stable and driven_sig'stable) implies (driver_sig = driven_sig) report "Error: driven_sig does not match driver_sig" severity error;
原理:'stable属性在信号当前时间步内没有发生任何变化时返回true,只有当两个信号都稳定后,才会触发断言检查,避免中间delta周期的误报。
内容的提问来源于stack exchange,提问作者crete
相关产品推荐
相关产品推荐

