前言:仿真的时候,需要观察某些程序运行的结果是否符合预期,这一需求一般是通过断言来实现。
断言
- 对于程序的检查。
- 断言是设计的属性的描述。
- 如果被检查的属性与期望不同断言失败。
- 如果被禁止在设计中出现的属性在仿真中出现,也断言失败。
- 断言可以在功能仿真中不断被监视。
- 相同的断言可以在仿真中也可以在形式验证中复用。
断言的评估和执行包括一下三个阶段:
- 预备(Preponed)在这个阶段,采样断言变量,而且信号或变量的状态不能改变。这样确保在时隙开始的时候采样到最稳定的值。
- 观察(Observed)在这个阶段,对所有的属性表达式求值。
- 相应(Reactive)在这个阶段,调度评估属性成功或失败的代码。
1. 为什么使用SVA语言?
- SVA是一种描述性语言,可以详细的描述相关的状况, 非常精确且易于维护。
- 有内嵌函数来测定特定情况,并且可以收集断言覆盖率。
1.1 即时断言
- 基于仿真事件的语义,与在过程块中其他表达式一样。
- 即时断言本质与时序无关,立即求值。必须放在过程块的定义中,应用在动态仿真里。
always_comb
begin
a_aia : assert (a&&b);//assert 断言
end
1.2. 并发断言
- 基于时钟周期,根据调用的变量采样值计算测试表达式。
- 一般放在模块接口里。
a_cc : assert property(@(posedge cik) not(a&&b)); //
有property的是并发断言,后边跟的时钟。
2. 建立SVA块
- 功能由多个逻辑事件组成。这些事件可以是简单的同一个时钟边缘求值的表达式。
2.1 序列
- SVA用序列sequence来表示这些事件,描述这些发生变化的事件。
sequence name_of_sequence;
< test expression>;
endsequence
-多个序列可以逻辑组合生成更复杂的序列,使用属性property来表示 。例如序列1发生导致序列2发生。
property name_of_property;

本文详细介绍了系统验证语言(SVA)在验证程序中的应用,包括断言的类型如即时断言和并发断言,以及SVA中的序列、属性和时钟定义。重点阐述了序列的内置方法、时序关系以及属性的使用,如蕴含操作符和描述延迟的方法。此外,还提及了SVA在功能覆盖率和设计连接中的作用,以及如何利用SVA进行局部变量的定义和覆盖信息的获取。
最低0.47元/天 解锁文章
8478

被折叠的 条评论
为什么被折叠?



