IC验证面试之断言


以下均为个人答案,水平有限,仅供参考。如有解释不对的地方,欢迎大家评论区留言一起学习交流
【持续搜集更新中…】
注:更多的细节知识点可以看 Assertion断言


1.断言中两个sequence如何同时开始、同时结束?

使用intersect操作符,SEQ1 intersect SEQ2,可以完成两个sequence同时开始并同时结束。

intersect操作符要求:需要两边的序列时序在同一时间周期内匹配

拓展一下,与and和or操作符的区别:

  • and要求没那么严格,满足的时刻为两个sequence都满足的时候(注意不是同时满足)。但是,在此之前,某一个sequence可能提前满足了,等到后一个满足的sequence满足,seq1 and seq2就满足了。
  • or是指两个sequence满足任何一个,这个表达式 seq1 or seq2 就满足了。举个例子,如下:
/*
【需求:】
如果burst write长度为4,那么写的长度可以为1、2或者4,怎么判断?
*/
property BurstLengthValid
    @(posedge clk) disable iff(!rst)
    ((burstLen == 4) |->
       (wrlen==1) or (wrlen==2) or (wrlen==4) );
endproperty
assert property (BurstLengthValid) 

2.断言中怎么表示信号上升沿?

r o s e ( ) 表 示 上 升 沿 , rose()表示上升沿, rose()沿fell()表示下降沿。

例如:

/*
【需求:】
在PSEL拉高的下一个周期,PENABLE也应该拉高。
*/
property penable_rise;
    @(posedge clk) $rose(psel) |=> $rose(penable);
endproperty
assert property(penable_rise) else `uvm_error("ASSERT","PENABLE not rose after 1 cylce PSEL rose");

3.断言中的 $firstmatch什么意思?

用来从多次满足的序列中选择第一次满足的时刻,从而放弃其他满足时刻。

例如:

/*
【需求:】
每一次PIC总线进入idle状态时,状态机也应该返回idle状态。
由此,在时序上要求:
	如果frame和irdy信号保持至少两个周期以上为高时,系统的状态应该进入idle状态。
*/
sequence CheckBusIdle;
    (##[2:$] (frame && irdy) );
endsequence
property first_match_idle;
    @(posedge clk)
      first_match(CheckBusIdle) |-> (state==idle);    
endproperty

再延伸一下,这与 throughout 和 within 的异同点是什么?

  • 表达式SEQ1 within SEQ2 ,注意是SEQ2包住SEQ1。如果当SEQ1满足在SEQ2的一部分连续时钟周期内成立,则表达式成立;
  • sig1/Exp1 thoughout SEQ,左边要惯穿右边,所以左边包住右边。左边条件满足的周期里面右边满足时,则表达式sig1/Exp1 thoughout SEQ 成立。
  • 5
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小verifier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值