System verilog SVA:验证不同时钟域中的稳定信号
我的问题在下面的文章中得到了完美的描述: 考虑图8中的场景,其中选通信号在src_clk域中生成,并且在dst_clk域中必须至少稳定3个周期。断言必须检查选通信号是否保持稳定,以及是否有足够的设置和保持时间在dst_clk域中进行采样 然后,作者提出以下主张来克服这个问题:System verilog SVA:验证不同时钟域中的稳定信号,system-verilog,system-verilog-assertions,System Verilog,System Verilog Assertions,我的问题在下面的文章中得到了完美的描述: 考虑图8中的场景,其中选通信号在src_clk域中生成,并且在dst_clk域中必须至少稳定3个周期。断言必须检查选通信号是否保持稳定,以及是否有足够的设置和保持时间在dst_clk域中进行采样 然后,作者提出以下主张来克服这个问题: assert property ( @(posedge src_clk) $rose(strobe) |-> ( strobe[*1:$] ##1 1 ) ) intersect (
assert property (
@(posedge src_clk) $rose(strobe) |-> (
strobe[*1:$] ##1 1 )
) intersect (
##1 @(posedge dst_clk) strobe[*3]
##1 @(posedge src_clk) 1
)
);
我的问题是Cadence incisive 15.20和Synopsys VCS 2014.10都抱怨在交叉点内使用多个时钟:
Incisive 15.20:多时钟上下文中的运算符和/或操作数无效
Synopsys VCS 2014.10:“intersect”运算符的右操作数中应为单时钟序列,找到多时钟序列
但是,当我使用Aldec Riviera Pro 2017.02编译时,它确实可以工作,所以我猜这只是一个工具限制
有没有其他方法可以实现这一点?我发现使用粘合逻辑可以避免复杂的属性 在这种情况下,我会计算dst_时钟并执行以下操作:
unsigned reg [7:0] dst_clk_conter_width;
parameter counter_width = 256;
always @(posedge dst_clk)
dst_clk_counter <= dst_clk_counter +1;
property prop;
@(posedge src_clk or posedge dst_clk)
$rose(strobe) |->
(1,strobe_rise_dst_clk_num = dst_clk_counter)
##[1:$] strobe
##1 strobe && (dst_clk_counter = (strobe_rise_dst_clk_num + 3) % counter_width)
endproperty
unsigned reg[7:0]dst_clk_conter_width;
参数计数器_宽度=256;
始终@(posedge dst_clk)
时钟计数器
(1,选通上升时钟数值=时钟计数器)
##[1:$]选通
##1选通和(dst时钟计数器=(选通上升dst时钟数字+3)%计数器宽度)
端属性
说明:
第一行捕获当前计数器值,第二行确保选通不会下降,最后一行检查我们是否已经通过了3个dst时钟我发现使用粘合逻辑有助于避免复杂的属性 在这种情况下,我会计算dst_时钟并执行以下操作:
unsigned reg [7:0] dst_clk_conter_width;
parameter counter_width = 256;
always @(posedge dst_clk)
dst_clk_counter <= dst_clk_counter +1;
property prop;
@(posedge src_clk or posedge dst_clk)
$rose(strobe) |->
(1,strobe_rise_dst_clk_num = dst_clk_counter)
##[1:$] strobe
##1 strobe && (dst_clk_counter = (strobe_rise_dst_clk_num + 3) % counter_width)
endproperty
unsigned reg[7:0]dst_clk_conter_width;
参数计数器_宽度=256;
始终@(posedge dst_clk)
时钟计数器
(1,选通上升时钟数值=时钟计数器)
##[1:$]选通
##1选通和(dst时钟计数器=(选通上升dst时钟数字+3)%计数器宽度)
端属性
说明:
第一行捕获当前计数器值,第二行确保选通不会下降,最后一行检查我们是否已经通过了3个dst时钟您能简要说明问题吗?您能简要说明问题吗?