断言(assert)是一种描述性语言,通过描述的期望结果来进行仿真验证。
断言有一个更加基础的信息,我们称为属性(property),属性可以作为断言结果,功能覆盖点,形式检查和约束随机激励生成。
断言相比较与testcase的仿真验证,对设计的可见度要求比较高,可以帮助快速定位错误的根源,断言可以分布在设计各个部位。
在项目中使用断言,有两种方式(eda tool中都支持):
1) 使用预建的断言库,如OVL,
2) 使用SVA,PSL等断言语言来自己描述。(PSL是完全独立的断言语言,SVA被继承在SV语言中),
SVA的语言层次结构:
assertion分为:
1) immediate assert,基于simulation event semantics;
assert/assume/cover (expression) action_block;
2) concurrent assert,基于clock semantics;
assert/assume/cover (expression) action_block;
action_block的声明:
statement | [statement] else statement;
immediate assert的action block紧跟着assert执行,就像在procedual block中,(比如active或者NBA region)
可以放在任何procedual中,initial,always,task,function。
concurrent assert的action block,在当前assert的reactive region执行,所以action block中使用$sampled()采样信号值,表示evaluate时的信号值。
assertion中的property,可以用来描述design的某一个行为,必须被例化在assert,assume,cover等编译选项后,
包含在module,interface,package,program,clocking,$unit中。
sequence,用来描述high lev