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









posted @ 2024-03-10 00:03  Icer_Newer  阅读(339)  评论(0编辑  收藏  举报