我无法找到[->]
表达式的含义。我熟悉将范围用作[a:b]
或序列,例如EVENT1|->EVENT2
,但不是我在开头提到的那个。
上下文是一个断言属性,可确保clk1在复位较低时始终切换。
@(clk2) disable iff(rst) !$stable(clk1)[->1];
关于[->]
真正含义的任何想法?
提前致谢!
答案 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时钟变化。
表示断言:
将被禁用(即既不通过也不失败)。
将通过1 clk2时钟更改。但是clk1不必在连续的clk2时钟变化时不稳定。
否则会失败。
建议您检查clk1的运行频率是否高于clk2。