vip信号在没有drv delay情况下,监测到握手后发生信号变化,若此时dut内部握手尚未完成则会导致test fail,且在接口层面难以发现
如何无视vip与dut的clk相位差,依靠为vip drv信号增加一个合适的delay以保证dut握手成功
问题示例:
如果vip握手成功后立刻拉低ready信号,dut clk上升沿采样时ready已拉低,dut握手无法完成
当前所示场景通过调整vip clk delay,使vip采样点晚于dut则可以解决,但如果dut内部存在反向逻辑:
if(握手成功) valid拉低
则调整vip clk delay后可能出现vip无法完成握手的情况
解决方法:为ready信号从vip接口连到dut上时添加虚拟的一个wire delay,保证vip与dut都能握手成功
delay需要多长时间:
如图所示,p0为dut判定是否握手成功的采样时间,p1为下一个采样时间
对于vip而言,无论vip clk与dut clk之间有多少偏移,vip判定握手成功的时刻一定位于valid拉起的那一个cycle中(因为一个cycle内有且只有一个clk上升沿),此时分两种情况:
vip采样判定握手时间早于p0,即图中A区域,则会出现上述的dut握手失败的情况,若添加ready delay则需要满足:添加delay后,ready的拉低延迟到p0及p0之后
vip采样判定握手等于或晚于p0,即落在图中B区域,此时dut可以正常完成握手,若添加ready delay则需要满足:添加delay后,ready拉低不可以晚于下一个dut采样时间p1,防止dut在p1意外握手成功
满足以上两个条件的ready delay只有一个特定的值:
图中的Δt时间为唯一解,Δt为dut valid信号上升沿与采样的dut clk上升沿的时间差
当vip握手时刻落在A区域时,ready延迟Δt则下降沿移动到p0右侧,dut握手成功;
当vip握手时刻落在B区域时,ready延迟Δt则下降沿移动到B至p1之间,dut握手成功
添加ready delay后的效果:
vip与dut都握手成功
添加delay的方法:
在tb中连接信号时,将接口ready添加一个延迟连接到dut
如果为标准axi vip接口,可以通过定义 SVT_AXI_MASTER_IF_HOLD_TIME(设置bready delay),SVT_AXI_SLAVE_IF_HOLD_TIME(设置awready、wready delay),直接达到vip输出信号延迟的效果,但注意,若环境内存在多组axi vip接口,且需要设置的delay值不同时可能不适用