← sv_uvm验证基础

推荐答案 测试一下

除此使用sample()进行收集覆盖率信息之外,也可以用事件触发进行收集,如图所示。

判断题 中等 笔试真题

参考答案

我们分析题目:这是一个关于SystemVerilog验证和断言(SVA)的判断题?实际上题目看起来像是一段知识点总结,要求判断其正误?但题目本身是"定向测试",然后是一大段描述。可能是一道判断题要求判断这些描述是否正确?但题目没有明确说是判断哪句话。通常IC笔试中的判断题会给出一个陈述,然后判断对错。这里给出的是一整段混杂的知识点,可能是要求判断整段描述是否正确?或者这其实是一道综合题? 重新读题:题型是判断题,题目标题是"定向测试",然后正文是一大段关于覆盖率、bins、条件覆盖率、跳转覆盖率、交叉覆盖、SVA、断言等的描述。看起来是列举了一些知识点,但其中可能有错误。可能是要求判断这些描述是否全部正确?或者指出其中的错误? 根据经验,这段描述中有一些不正确或容易误解的地方: 1. "Bins:覆盖点 默认情况下每一个覆盖点值都有一个bins,不过默认最大只有64个bins。" 实际上,对于枚举或小范围值,默认每个值一个bin;但对于大范围值(如int),默认自动创建最多64个bin。但描述说"默认情况下每一个覆盖点值都有一个bins"不准确,对于int类型默认是自动binning。另外"默认最大只有64个bins"也不完全准确,对于覆盖点,默认auto_bin_max=64,但可以修改。 2. "用户自定义bins:如图所示,自定义24个仓,,每个仓至少跑到一次,才可以覆盖到。因此,仓的多少和定义会影响覆盖率统计" 基本正确。 3. "条件覆盖率:iff 如图所示:复位时不收集覆盖率" 正确。 4. "跳转覆盖率:如图所示,0到1等" 正确。 5. "交叉覆盖:定义两个或多个覆盖点之间的交叉覆盖,要注意适用不适用,它是一个乘法次数。" 表述不严谨,交叉覆盖率是每个组合的覆盖率,数量是每个覆盖点bin数的乘积,但不一定是乘法次数。 6. "SVA: 一般用于时序检测,对有时序关系的信号,进行时序顺序的检测。" 正确。 7. "激励,属性,行为三种层次。只能很好的界定是否失败,对于检测是否成功很难。" 这个说法有问题。SVA可以检测成功和失败,断言成功是指序列发生,失败是指序列未发生。但说"很难检测是否成功"不准确。 8. "SVA可以插入DUT内部,进行测试检测。SVA可以用于覆盖率检测,因为时序的检测不好用covergroup进行测试。Cover preproty" 基本正确,但"Cover preproty"应该为"cover property"。 9. "下述SVA断言实例:" 后面的描述基本正确,但有一些细节: - "Assert在每个时钟上升沿都会进行检测,因此如果断言太大,会非常吃内存。" 正确。 - "Antecedent |-> Consequent : 同一个时钟中判断。类似于if else" 正确。 - "Antecedent |=> Consequent : 上下两个时钟中判断" 正确(更准确是下一个时钟周期)。 - "##1也是延迟一个时钟判断,与|=>的区别是,##1仅仅是延迟,而|=>是由先前条件决定后延迟一拍检查后面。" 这个解释不太准确。|=>是当前时钟周期判断前件满足,下一个时钟周期检查后件;##1是延迟一个时钟周期,但通常用于序列中,两者不同。描述有一定误导性。 - "立即断言:不带时钟检测,类似于if else" 正确。 - "并发断言:带时钟的检测,有property" 正确。 - "单独写sequence、property、assert,分层次更加鲜明。" 正确。 - "Sequence匹配:如图所示,根据##1等操作产生一个时序序列,sequence中可以不写@(posedge clk),在property中写也是可以的。" 正确。 - "Sequence重复操作符:[*n] 、 [*min:max] 连续重复,中间不可有空挡" 正确。 - "Goto repetiton :如图,不要求两个b之间连续,不要求a与b之间连续,但是b与c之间无间隔。[->n] 、 [->n:m]" 正确,但注意goto repetition的b与c之间可以有无间隔?实际上->n表示信号出现n次,不要求连续,但最后一次出现后立即进行后续匹配。描述说b与c之间无间隔,正确。 - "Non-consecutive repetition: [=n] 、[=min:max] 只要在a与c之间有2-10次就可以,可以不连续。" 正确。 - "$sampled:采样 $rose:判断上升沿 $fell:判断下降沿 $stable:判断信号稳定不变,$onehot():独热码检测" 正确。 - "$past:返回当前时钟周期之前的一个时钟周期的表达式采样值 $past(a,3)表示上3个时钟的a值。" 正确。 - "序列and操作:and操作符表示两个序列是匹配的,要求具有相同起始点,结束点可以不一致。结束时间由最后的决定。" 正确。 - "Intersection:交互操作符,要求起始点和结束点都一致" 正确。 - "序列or:两个序列只要有一个满足即可" 正确。 - "First_match:如果有多个匹配序列,其只返回第一个匹配序列的返回值。" 正确。 - "Throughout:假设条件为真下,序列才会执行。只有在burst_mode为0时,序列才会检测。" 正确。 - "Ended:只看结束点" 正确。 - "使用bind DUT assert_cherk cherk(*),bind关键字可以将cherk嵌入到DUT中。" 正确。 - "property属性:Implication条件:条件满足后才会检测序列是否满足|-> 当前时钟 |=> 下一个时钟" 正确。 - "Disable iff 、 not:disable iff:当foo为1时property无效;not表示当后面序列不出现时成功,出现时失败。" 正确。 - "Property使用方法:可以嵌套使用,可以递归,支持的递归属性调用同一个property" 正确。 - "多时钟处理:这里后面看" 无意义。 - "Cover:收集覆盖率,一般cover property,一般成功一次就可以" 正确。 但是,最重要的问题:题目是"定向测试",正文第一句是"定向测试 除此使用sample()进行收集覆盖率信息之外,

涉及知识点

  • SystemVerilog
  • 综合
  • 复位
  • 时序
  • 时钟
登录后反馈错题