采样时发生竞争(delta cycle的存在),会导致采样数据错误。为了避免在RTL仿真中发生信号竞争的问题,建议通过非阻塞赋值或者特定的信号延迟来解决同步问题。这里我们介绍使用clocking时钟块来决定信号的驱动和采样的方式。
delta cycle的存在问题
在RTL仿真时,由于无法确定具体电路的延迟时间,默认情况下时钟驱动电路时会添加一个**无限最小的时间(delta cycle)**的延迟,这个延迟要比最小时间单位精度还要小(可以理解成远小于1ps)。
由于各种可能性,clk与被采样数据之间如果只存在若干个delta-cycle的延迟,那么采样就会出问题。
采用clocking时钟块
clocking块基于时钟周期对信号进行驱动或者采样的方式,可以使testbench准确及时地对信号驱动或采样,消除信号竞争的问题。文章来源:https://www.toymoban.com/news/detail-609149.html
clocking bus@(posedge clk);
default input #2ns output #2ns //在clk上升沿的前2ns对其进行输入采样,在事件的后2ns进行输出驱动
endclocking
一般在接口中定义clocking块,如下:文章来源地址https://www.toymoban.com/news/detail-609149.html
interface chnl_intf(input clk, input rstn);
logic [31:0] ch_data;
logic ch_valid;
logic ch_ready;
logic [ 5:0] ch_margin;
// 定义时钟块
clocking drv_ck @(posedge clk);
//采样时间
default input #1ns output #1ns;
//声明变量方向
output ch_data, ch_valid;
input ch_ready, ch_margin;
endclocking
endinterface
到了这里,关于SV中的clocking时钟块的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!