Validation 系统verilog属性定义中[->;1]的含义
我无法找到Validation 系统verilog属性定义中[->;1]的含义,validation,system-verilog,verification,assertion,system-verilog-assertions,Validation,System Verilog,Verification,Assertion,System Verilog Assertions,我无法找到[->]表达式的含义。我熟悉使用范围作为[a:b]或序列,例如EVENT1 |->EVENT2,但不熟悉我在开头提到的范围 上下文是一个断言属性,它确保clk1在重置为低时始终处于切换状态 @(clk2) disable iff(rst) !$stable(clk1)[->1]; 你知道[->]的真正含义吗 提前谢谢 [->N]表示“不连续的精确重复”a[->N]表示a的N次非连续重复,匹配正好发生在a的第N次重复之后 因此,例如,a##1b[->2]##1c将匹配
[->]
表达式的含义。我熟悉使用范围作为[a:b]
或序列,例如EVENT1 |->EVENT2
,但不熟悉我在开头提到的范围
上下文是一个断言属性,它确保clk1在重置为低时始终处于切换状态
@(clk2) disable iff(rst) !$stable(clk1)[->1];
你知道[->]
的真正含义吗
提前谢谢 [->N]
表示“不连续的精确重复”a[->N]
表示a的N次非连续重复,匹配正好发生在a的第N次重复之后
因此,例如,a##1b[->2]##1c
将匹配
_
a _______/ \_____________________
| _ _
b _________________/ \___/ \_____
| _
c _________________________/ \___
| |
| |
match |<----------------->|
[=N]
表示“非连续重复”a[=N]
表示a的N次非连续重复,匹配发生在a的第N次重复之后的任何时间
因此,例如,a###1b[=2]##1c
将匹配上面的第二种模式。[->N]
表示“非连续的精确重复”a[->N]
表示a的N次非连续重复,匹配正好发生在a的第N次重复之后
因此,例如,a##1b[->2]##1c
将匹配
_
a _______/ \_____________________
| _ _
b _________________/ \___/ \_____
| _
c _________________________/ \___
| |
| |
match |<----------------->|
[=N]
表示“非连续重复”a[=N]
表示a的N次非连续重复,匹配发生在a的第N次重复之后的任何时间
因此,例如,
a##1b[=2]##1c
将匹配上面的第二个模式。基本上有3个这样的运算符:
连续重复[*n]-
(a ##1 b[*2] ##1 c) = (a ##1 b ##1 b ##1 c)
这意味着,a应该被断言,然后b应该在连续的2个时钟信号上被断言,在下一个时钟信号中断言c之后
转到重复[->n]-
(a ##1 b[->2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 c)
(a ##1 b[=2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 !b[*0:$] ##1 c)
这意味着,a应该被断言,然后b应该在2个时钟信号上被断言,但不是连续地。一旦b在2个时钟信号上被断言,在下一个时钟信号上,c应该被断言
不连续重复[=n]-
(a ##1 b[->2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 c)
(a ##1 b[=2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 !b[*0:$] ##1 c)
这意味着,a应该被断言,然后b应该在2个时钟信号上被断言,但不是连续地。一旦b在2个时钟信号上被断言,c应该被断言,在b再次被断言第三次之前
请记住,[->n]&[=n]运算符之间的差异与
最后一个操作数“c”。在[->2]中,应在下一个时钟上断言c
勾选,只要b被断言两次(非连续)。但在[=2]中,
在b第三次被断言之前,c应该被断言(非
连续地)
基本上有3个这样的运营商: 连续重复[*n]-
(a ##1 b[*2] ##1 c) = (a ##1 b ##1 b ##1 c)
这意味着,a应该被断言,然后b应该在连续的2个时钟信号上被断言,在下一个时钟信号中断言c之后
转到重复[->n]-
(a ##1 b[->2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 c)
(a ##1 b[=2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 !b[*0:$] ##1 c)
这意味着,a应该被断言,然后b应该在2个时钟信号上被断言,但不是连续地。一旦b在2个时钟信号上被断言,在下一个时钟信号上,c应该被断言
不连续重复[=n]-
(a ##1 b[->2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 c)
(a ##1 b[=2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 !b[*0:$] ##1 c)
这意味着,a应该被断言,然后b应该在2个时钟信号上被断言,但不是连续地。一旦b在2个时钟信号上被断言,c应该被断言,在b再次被断言第三次之前
请记住,[->n]&[=n]运算符之间的差异与
最后一个操作数“c”。在[->2]中,应在下一个时钟上断言c
勾选,只要b被断言两次(非连续)。但在[=2]中,
在b第三次被断言之前,c应该被断言(非
连续地)
如其他答案所述,系统verilog中基本上有3个重复运算符可用 代码
@(clk2) disable iff(rst) !$stable(clk1)[->1];
可以解释如下:
如果“rst”为高,则“禁用”断言属性。如果不是这样,检查“1”clk2时钟变化(从高到低或从低到高)时“clk1”是否“不”稳定,不一定在连续clk2时钟变化时
这意味着断言:
- 如果rst为1,将被禁用(即既不通过也不失败)
- 如果clk1对于1 clk2时钟变化不稳定(保持在其状态,即高或低),则通过。但在连续的clk2时钟变化中,clk1不一定是不稳定的
- 否则就会失败
中建议您检查clk1的工作频率是否高于clk2。如其他答案中所述,系统verilog中基本上有3个重复运算符可用 代码
@(clk2) disable iff(rst) !$stable(clk1)[->1];
可以解释如下:
如果“rst”为高,则“禁用”断言属性。如果不是这样,检查“1”clk2时钟变化(从高到低或从低到高)时“clk1”是否“不”稳定,不一定在连续clk2时钟变化时
这意味着断言:
- 如果rst为1,将被禁用(即既不通过也不失败)
- 如果clk1对于1 clk2时钟变化不稳定(保持在其状态,即高或低),则通过。但在连续的clk2时钟变化中,clk1不一定是不稳定的
- 否则就会失败
在中,建议您检查clk1是否以高于clk2的频率运行。这不是系统Verilog而不是Verilog吗?这不是系统Verilog而不是Verilog吗?我相信完全一样。但是,您能告诉我们非连续模式
[=N]
何时会失败吗。在整个模拟过程中,当c
没有到达时,我看到了这种类型的断言,但从未失败过。@sharvill111一个64000美元的问题。。。如果a###1b[=2]###1c
是条件而不是前提,那么就没有时间了