推荐答案
测试一下
题目
在时钟上升沿时采样别start有效开始,两个时钟周期后,信号“a”连续或者间断地出现3次为高电平,紧接着信号“stop”在下一个时钟周期为高电平,转换成断言描述。以下哪个是正确的
A. property p0: @(posedge clk) $rose (start)1 ##2 (a[=>3]) ##1 stop endpropery
B. property p0:
C property p0:
D. property p0:
参考答案与知识点
参考答案
正确选项为 D。
原题描述:在时钟上升沿采样到 start 有效($rose(start))后,延迟两个时钟周期(##2),随后信号 a 连续或间断地出现 3 次高电平,紧接着下一个时钟周期 stop 为高电平。这对应一个序列:start 上升沿 → ##2 → (a 恰好出现 3 次,允许间隔,且最后一次出现后下一个时钟沿立即为 stop 高) → stop。
选项 A 使用了 [=>3](非连续重复,允许最后一次重复后有任意空闲周期),但这不符合“紧接着” stop 的要求;且语法中有多余字符“1”和拼写错误。
选项 B 使用了 [*3](连续重复),要求 a 连续 3 个周期为高,不符合“连续或间断”的条件。
选项 C 使用了 [=>3](同 A),且 start 拼写错误为 star,重复类型错误。
选项 D 使用了 [=3](go-to 非连续重复),该操作符要求 a 出现 3 次后,下一个时钟沿必须立即匹配后续序列(这里是 ##1 stop),符合“紧接着”的描述。同时使用蕴含操作符 |-> 正确表达了“当 start 上升沿发生时开始检查”的触发条件。语法正确。
因此 D 正确。
涉及知识点
- SystemVerilog 断言重复操作符
- 非连续重复 [=>n] 与 go-to 重复 [=n] 的区别
- 序列蕴含操作符 |-> 与 |=>
- 断言中时序延迟 ## 的使用