Assertion检查

简介: Assertion检查

1 Assertion概述

断言概述

1.概念:通过在代码中插入对RTL的特征描述,检查RTL代码的关键行为是否和期望的一致(一般检查设计中的控制信号的完整性和数据的完整性),当异常出现时,断言语句会报警。通过这种方法可以快速的定位问题,为测试平台提供自检机制,提高验证效率。

2.目的:

  • 为测试平台提供优秀的自检机制;
  • 提高验证效率,减少调试时间;
  • 提高测试的可控性和可观察性;

3.功能:

  • 检查设计中控制信号的正确性;
  • 检查设计中数据的完整性;

2 OVL概述

  • 概念:Open Verification Library硬件验证库。在源代码设计的同时加入的更为细化的验证方案采用的库,通过在代码中插入ovl语句,可以在仿真验证中快速的定位出问题所在。
  • 应用:Verilog HDL,VHDL,SystemC,System Verilog。

2.1 两个常用的OVL检测器

一个是assert_implication,一个是assert_never

assert_implication

assert_implication [#(severity_level, property_type,
msg, category, coverage_level_1,
coverage_level_2, coverage_level_3)]
inst_name (
    clk, 
    reset_n, 
    antecedent_expr, 
    consequent_expr);

这个检查器会连续监测 antecedent_expr。

如果值为真,检查器将验证consequent_expr(下一个表达式) 是否为真,如果为真,那么不会报错。

当 antecedent_expr 为假的时候, consequent_expr 表达式将不会被检查,并且断言表明通过。

(severity_level表示严重级别,property_type表示属性类型,msg表示message,category表示种类)

assert_never

assert_never [#(severity_level, property_type, msg,
category)]
inst_name (
    clk, 
    reset_n,
    test_expr);

这个检查器会在每个时钟 clk 的上升沿连续的监测 test_expr。 它的检查目的 是: test_expr 的值永远不能为真。 test_expr 可以是任意有效的 verilog 表达式。 当 test_expr 为真的时候,检查器将会报错。

3 OVL使用案例

在cmsdk_apb4_eg_slave.v中使用断言

`ifdef ARM_APB_ASSERT_ON
 `include "std_ovl_defines.h"
  // ------------------------------------------------------------
  // Assertions
  // ------------------------------------------------------------
   // Check the reg_write_en signal generated
    assert_implication
    #(`OVL_ERROR,
      `OVL_ASSERT,
      "Error! register write signal was not generated! "
      )
     u_ovl_apb4_eg_slave_reg_write
     (.clk             (PCLK),
      .reset_n         (PRESETn),
      .antecedent_expr ( (PSEL & (~PENABLE) & PWRITE) ),
      .consequent_expr ( reg_write_en == 1'b1)
      );
  // Check the reg_read_en signal generated
    assert_implication
    #(`OVL_ERROR,
      `OVL_ASSERT,
      "Error! register read signal was not generated! "
      )
     u_ovl_apb4_eg_slave_reg_read
     (.clk             (PCLK),
      .reset_n         (PRESETn),
      .antecedent_expr ( (PSEL & (~PENABLE) & (~PWRITE)) ),
      .consequent_expr ( reg_read_en == 1'b1)
      );
  // Check register read and write operation won't assert at the same cycle
    assert_never
     #(`OVL_ERROR,
       `OVL_ASSERT,
       "Error! register read and write active at the same cycle!")
     u_ovl_apb4_eg_slave_rd_wr_illegal
     (.clk         (PCLK),
      .reset_n     (PRESETn),
      .test_expr   ((reg_write_en & reg_read_en))
      );
`endif
目录
相关文章
|
C++
error C2220: 警告被视为错误 - 没有生成“object”文件
原文:error C2220: 警告被视为错误 - 没有生成“object”文件 这种错误的原因是:原因是该文件的代码页为英文,而我们系统中的代码页为中文。
5420 0
|
Java 数据库连接 开发工具
【Java异常】Spring Boot出现警告 WARNING: An illegal reflective access operation has occurred
【Java异常】Spring Boot出现警告 WARNING: An illegal reflective access operation has occurred
370 1
|
缓存 Android开发 流计算
Hulu 错误代码 RUNUNK13:原因和最佳修复!
由于网络相关问题出现 Hulu 错误代码 RUNUNK13,我们在此帮助您进行一些实用修复,以解决 RUNUNK 13 错误。
Hulu 错误代码 RUNUNK13:原因和最佳修复!
|
JSON Java 数据格式
JSONException: illegal identifier : \pos 1 异常报错问题
JSONException: illegal identifier : \pos 1 异常报错问题
708 0
|
前端开发 测试技术 Apache
JMeter 检查点之响应断言(Response Assertion)
JMeter 检查点之响应断言(Response Assertion)
133 0
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
117 0
exception(359): error C2220: 警告被视为错误 - 没有生成“object”文件
|
Java Maven
invalid bound statement (not found) - 接手一个老项目时报的几个错误处理方案
invalid bound statement (not found) - 接手一个老项目时报的几个错误处理方案
209 0
invalid bound statement (not found) - 接手一个老项目时报的几个错误处理方案
|
C++
VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
VS编译错误:error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
347 0
|
编译器
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
error C2143: 语法错误 : 缺少“;”(在“类型”的前面)
514 0
|
Java 应用服务中间件 Android开发
Struts2 Error filterStart异常的解决方法总结
今天一位网友让polaris帮忙解决一些jqGrid的问题。在polaris部署运行其工程时,却抛出Struts2 Error filterStart异常,也就是根本连tomcat都启动不了。
224 0

热门文章

最新文章