interface中clocking block输入偏差与输出偏差
资料来源
(1) 硅芯思见:【125】clocking block中的输入偏差和输出偏差 (qq.com)
(2) sv绿皮书;
1.输入偏差与输出偏差
(1) system verilog的时钟块机制(clocking block)可以对指定信号进行基于特定时钟的同步处理,时钟块中的任何信号都将根据指定时钟被同步驱动或采样;
(2) clocking block可以对采样信号和驱动信号指定input偏差和output偏差;
(3) clocking block中默认的input偏差是1step,默认的output偏差为0; 其中,1step可以认为是上一时间槽(time slot)的最后时刻;
注1:#1step中的step与`timescale中的仿真精度一致(出处???);
注2:当input skew大于0时,避免竞争现象,避免到底采样的是时钟沿前的数据还是时钟沿后的数据;
注3:以program定义的代码被认为是测试平台代码,会放到reactive区域执行;
注4:$monitor,$storbe以及其他类似的事件都在postponed区域执行;
(4) interface中的clocking block只能用于验证平台,不能用于RTL设计;
2.示例
2.1input偏差和output偏差为默认值
(1)默认的输入偏差为1step,默认的输出偏差为0;
(2)输入偏差1step可以认为是上一时间槽的最后时刻,指采样信号事件(cb.sig1)采样输入信号(sig1)在时钟边沿1step前的稳定值;
注1:采样输入信号,使用阻塞赋值;驱动输出信号,采用非阻塞赋值;
(3)输出偏差0则表示采样事件发生后(cb.sig2)立即将对应值驱动或更新到输出端口(sig2)(对于clocking block的输出sig2而言,该信号通过cb引用时,可以被驱动,但是不能被读,否则会报错);
2.2定义default输入偏差与输出偏差
2.3default偏差设置为posedge和negedge
(1)输入偏差设置为posedge,时钟采样到sig1后立即在上升沿将值更新到cb.sig1中;
(2)输出偏差设置为negedge,cb.sig2的值在采样后,等到时钟下降沿将值更新到sig2中;