系统verilog属性定义中[ - > 1]的含义

时间:2016-03-03 16:40:53

标签: validation system-verilog verification assertion system-verilog-assertions

我无法找到[->]表达式的含义。我熟悉将范围用作[a:b]或序列,例如EVENT1|->EVENT2,但不是我在开头提到的那个。

上下文是一个断言属性,可确保clk1在复位较低时始终切换。

@(clk2) disable iff(rst) !$stable(clk1)[->1];

关于[->]真正含义的任何想法?

提前致谢!

3 个答案:

答案 0 :(得分:1)

[->N]表示"非连续的精确重复"。 a[->N]表示N的非连续重复,其中匹配恰好在第N次重复之后发生。

因此,例如,a ##1 b[->2] ##1 c将匹配

          _
a _______/ \_____________________
         |          _     _ 
b _________________/ \___/ \_____
         |                  _
c _________________________/ \___
         |                   |
         |                   |
match    |<----------------->|

但不是

          _
a _______/ \___________________________
                    _     _ 
b _________________/ \___/ \___________
                                  _
c _______________________________/ \___

[=N]表示&#34;非连续重复&#34;。 a[=N]表示N次非连续重复,匹配发生在第N次重复之后的任何时间。

因此,例如,a ##1 b[=2] ##1 c将匹配上面的第二个模式。

答案 1 :(得分:1)

基本上有3个这样的运营商:

连续重复[* n] -

(a ##1 b[*2] ##1 c) = (a ##1 b ##1 b ##1 c)

这意味着,应该断言a,之后应该在连续的2个时钟周期内断言b,在下一个时钟周期中断言c之后。

转到重复[ - &gt; n] -

(a ##1 b[->2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 c)

这意味着,应该断言a,之后应该在2个时钟周期内断言b,但不能连续断言。一旦b在2个时钟周期内被置位,在下一个时钟滴答c应该被置位

非连续重复[= n] -

(a ##1 b[=2] ##1 c) = (a ##1 ((!b[*0:$] ##1 b)[*2]) ##1 !b[*0:$] ##1 c)

这意味着,应该断言a,之后应该在2个时钟周期内断言b,但不能连续断言。一旦b在2个时钟周期内被置位,c应该被置位,然后b再次被置为第3次。

  

请记住,[ - &gt; n]&amp; [= n]运算符,与之相关   最后一个操作数&#34; c&#34;。在[ - > 2]中,c应在下一个时钟上置位   一旦b被断言两次(非连续),就打勾。但在[= 2]中,   在b第三次被断言之前,应该断言c(非   连续地)

答案 2 :(得分:1)

系统verilog中基本上有3个重复运算符,如其他答案中所述和解释的那样。

代码

    @(clk2) disable iff(rst) !$stable(clk1)[->1];

可以解释如下:

  

如果'rst'为高,则'禁用'断言属性。如果不是这样,检查'clk1'对于'1'clk2时钟变化是否“不稳定”(从高到低或从低到高),不一定是连续的clk2时钟变化。

表示断言:

    如果rst为1,
  • 将被禁用(即既不通过也不失败)。

  • 如果clk1不稳定(保持在原状,即高或低),
  • 将通过1 clk2时钟更改。但是clk1不必在连续的clk2时钟变化时不稳定。

  • 否则会失败。

建议您检查clk1的运行频率是否高于clk2。