SV - 断言概述
内容
- 断言有很多,这里主要讲解SVA
- 立即断言和并发断言是SVA的核心
断言Assertion
- 假设有一个valid信号只能维持一个时钟周期,如果valid信号超过两个时钟周期就表示valid信号出错了
使用SV语法写monitor.sv检测信号
int cnt_valid;
always @(posedge clk or negedge resetn) begin
if(!restn)
cnt_valid <= 0;
else
cnt_valid <= cnt_valid + 1'b1;
end
always @(posedge clk or negedge resetn) begin
if(!resetn)
valid_err <= 1'b0;
else if(cnt_valid > 1)
valid_err <= 1'b1;
$finish;
else
valid_err <= 1'b0;
end
- 使用计数器计数valid的信号周期数
- 使用SVA进行检测valid信号会非常的简单
- 并发断言通常用于进行时序检查,用于信号的检查
- SV - 进行功能验证,SVA - 进行时序的检查
- 断言assertion是一种方法学,SVA指的是system verilog assertion,是一种语法
- 通过断言定义一个设计意图的语法,如果设计不满足,就会报错误
property pGetAcookie; //断言名称
@(posedge hour_clk) hungry&&cookie_count>9 |=>eat_1_cookie;
endproperty
apGetAcookie:assert property(pGetAcookie);
- 所有的property定义之后并不会进行执行,只有通过assert关键字启动一个property之后,property才会进行执行
- property在仿真启动之后,在每个时钟上升沿会都会进行check
- 断言对于内存的开销比较大
- 基于覆盖率的验证称为CDV
- 基于断言的验证称为ABV
- 可以在RTL中插入assertion
- 断言对于时序检查比较方便
- 设计和验证都可以使用断言
- 小的block可以使用ABV进行验证,大的block不行
- 白盒验证可以配合SVA使用
- 任何平台都可以使用断言
SVA验证策略
Assertion Property
- ##1 - 仅仅是延时一拍
- |=> - 延时一拍还有一个判断的作用,只有Antecedent成立之后才会执行之后的语句
Assertion