《SystemVerilog Assertion 应用指南》学习01

news2025/8/12 18:32:19

文章目录

  • 0、基于断言的 验证
  • 1、SVA 介绍
    • 1.1.、什么是断言
    • 1.2、为什么使用 SystemVerilog 断言(SVA)
    • 1.3、SystemVerilog 的调度
    • 1.4、SVA 术语
      • 1.4.1、==并发断言==
      • 1.4.2、==即时断言==
    • 1.5、建立 SVA 块
    • 1.6、一个简单的序列
    • 1.7、边沿定义的序列
    • 1.8、逻辑关系的序列
    • 1.9、序列表达式
    • 1.10、时序关系的序列

0、基于断言的 验证

测试平台的自检机制,通常关注两个方面:

  • (1)协议检验:检验控制信号
  • (2)数据检验:检验正在处理的数据的完整性

功能覆盖用于衡量验证的完整性,衡量指标包括两项指定的信息:

  • (1)协议覆盖(Protocol Converage):协议覆盖在所有合法和不合法的情况下衡量一个设计,即用来衡量一个设计的功能说明书(function specification)中的所有功能是否都测试过
  • (2)测试计划覆盖(Test Plan Converage):用来衡量测试平台的穷尽性

SVA(SystemVerilog Assertion)着重处理两大类问题:

  • (1)协议检验
  • (2)协议覆盖
    SVA 直接将设计断言与设计相连,与设计信号交互,但他仍然可以和测试平台很有效的共享信息。

1、SVA 介绍

1.1.、什么是断言

断言是设计的属性的表示:

  • 如果一个在模拟中被检查的属性(property)与期望的表现不同,则断言失败
  • 如果一个被禁止在设计中出现的属性在模拟过程中发生,则断言失败

示例:相互断言条件检查的Verilog 实现

// 若a和b同时为高电平,则报错(断言失败)
`ifdef ma
if(a&b)
$display("Error: Mutually asserted check failed.\n")
`endif

// 只有当需要时才被纳入设计环境中。可以通过允许 Verilog 条件编译指令 “ `ifdef ” 来实现

1.2、为什么使用 SystemVerilog 断言(SVA)

使用 Verilog 检查的不足:

  • (1)Verilog 时一种过程语言,不能控制时序
  • (2)Verilog 比较冗长复杂,随着断言数量增加而不方便维护
  • (3)Verilog 的检验器可能无法捕捉到所有被触发的并行事件
  • (4)Verilog 语言没有提供内嵌的机制来提供功能覆盖率的数据,需要用户自己实现

SVA:一种描述性语言,可以很好的描述时序相关的状况;精确且易于维护;SVA提供了若干内嵌函数用来测试特定的设计情况,并且提供了一些构造来自动收集功能覆盖数据;若断言失败SVA会自动显示错误信息。

1.3、SystemVerilog 的调度

Systemverilog 语言被定义成一种基于事件的执行模式。
断言的评估和执行包括三个阶段:

  • 预备(Preponed) : 在这个阶段,采样断言变量,而且信号(net) 或 变量(variable) 的状态不能改变。确保在时隙开始的时候采样到最稳定的值。
  • 观察(Observed):该阶段对所有的属性表达式求值
  • 响应(Reactive):该阶段调度评估属性成功或失败的代码

1.4、SVA 术语

SystemVerilog 语言中定义了两种断言:并发断言即时断言

1.4.1、并发断言

  • 基于时钟周期
  • 在时钟边缘,根据调用的变量的采样值计算测试表达式
  • 变量的采样在预备阶段完成,而表达式的计算在调度器的观察阶段完成
  • 可以被放到过程块(procedural block)、模块(module)、接口(interface),或者一个程序(program)的定义中
  • 可以在静态(形式)验证 和 动态验证(模拟)工具中使用

示例:

// 在时钟沿,a和b 不能同时为高电平
a_cc: assertproperty(@ posedge clk) not (a&b));

属性的每一个时钟的上升沿都被检验,不论信号a 和 信号b 是否有值的变换

1.4.2、即时断言

  • 基于模拟事件的语义
  • 测试表达式的求值就像过程块中的其他 Verilog 的表达式一样。本质不是时序相关的,而是立即被求值
  • 必须放在过程块的定义中
  • 只能用于动态模拟
    示例:
always_comb
begin
	a_ia: assert ( a && b ) ;
end
/// 即时断言 a_ia 被写成一个过程块的一部分,遵循和信号a、b 相同的事件调度。
// 当信号a 和 信号b 发生变化时,always 块被执行。

对于即时断言,当断言的信号值发生变化时,always块(断言语句)被执行
区别即时断言 和 并发断言 的关键词:** " property" **

1.5、建立 SVA 块

任何设计模型中,功能总是由多个逻辑事件的组合来表示的。
SVA 用关键词** “ sequence”** 来表示这些事件。
==序列(sequence)==的基本语法:

sequence name_of_sequence;
	<test expression>;
endsequence

许多序列可以逻辑或有序地组合起来成更复杂的序列。SVA 提供了关键 “property” 来表示这些复杂的有序行为
property 基本语法:

property name_of_property;
	<test expression>; or
	<complex seqeunce expressions>;
endproperty

属性:是在模拟过程中被验证的单元。它必须在模拟中被断言来发挥。SVA提供了关键词**“assert”** 来检查属性。
==断言(assert)==基本语法:

assertion_name: assert property ( property_name );

建立 SVA 检验器的步骤:
步骤1: 建立布尔表达式

步骤2:建立序列表达式

步骤3:建立属性

步骤4:断言属性

1.6、一个简单的序列

// 检查信号 a 在每个时钟上升沿都是高电平
sequence s1;
	@(posedge clk) a;
endsequence

1.7、边沿定义的序列

序列s1 使用的是信号的逻辑值。
SVA 也内嵌了边缘表达式,方便用户检测信号值从一个时钟周期到另一个时钟周期的跳变。 —— 使得用户能够检查边沿敏感的信号。
三种有用的内嵌函数:

  • $rose( boolean expression or signal_name):当信号/表达式
  • $fell( boolean expression or signal_name ) : 当信号/表达式的最低位变为0 时返回真
  • $stabel ( boolean expression or signal_name) :当表达式的值不发生变化时返回真

示例:

// 序列s2 检查信号 " a " 在每个时钟上升沿跳变为1
sequence s2;
	@(posedge clk) $rose( a );
endsequence

在这里插入图片描述

  • 在时钟周期2之前,信号”a" 没有被赋值,因此断言值被认定为“x"。值从x到0 的转换不是上升沿,断言失败
  • 时钟周期3,信号”a" 在序列中的采样值是1。值从0到1的上升沿转化,所以在时钟3断言成功
  • 同理时钟周期9、时钟周期12 断言成功

1.8、逻辑关系的序列

示例:

// 序列s3 检查每一个时钟上升沿,信号“a" 或 信号 “ b" 是高电平
sequence s3;
	@(posedge clk) a || b;
endsequence

在这里插入图片描述

1.9、序列表达式

在序列定义中定义形参,相同的序列能够被重用到设计中具有相似行为的信号上。
示例:

// 定义
sequence s3_lib ( a, b );
a || b;
endsequence

// 通用的序列 s3_lib 能重用在任何两个信号上
sequence s3_lib_inst1;
	s3_lib ( req1,  req2 );
endsequence

一些在设计中常见的通用属性都可以被开发成一个库便于重用,如 one-hot 状态机检查,等效性检查等。

1.10、时序关系的序列

时序检查 :检查的信号需要几个时钟周期才能完成事件
SVA 中,时钟周期延迟 用 ” ## “ 表示。如 ##3 表示3个时钟周期
示例:

// 序列s4:检查信号 " a “ 在 一个给定的时钟上升沿为高电平后,信号"b" 在两个时钟周期后为高电平
// 注意:序列以 信号"a" 在时钟上升沿为高电平开始
sequence s4;
	@(posedge clk) a ##2 b;
endsequence
 

在这里插入图片描述
注意:断言成功的序列总是标注在序列开始的位置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云原生安全:4C~

4C是啥&#xff1f; cloudclustercontainercode 4个C是层的关系&#xff0c;外圈不安全&#xff0c;不能指望里面太安全。。。 目录 Cloud cloud Provider Security 基础架构安全 Cluster cluster的组件 cluster中的组件&#xff08;应用中的&#xff09; Container …

第二章:Pythonocc官方demo 案例44(几何板条)

源代码&#xff1a; ##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General Public License as pub…

数据库 Apache Doris 展开了为期两个月的调研测试

2022 年 3 月开始&#xff0c;我们对符合以上特点的数据库 Apache Doris 展开了为期两个月的调研测试。以下是 Apache Doris 1.1.2 在各个方面的满足情况。 基于上述情况&#xff0c;我们决定采用 Apache Doris&#xff0c;除了可以满足上文提到的几个特点&#xff0c;我们还考…

[信息系统项目管理师-2023备考]信息化与信息系统(一)

1.信息的质量特性 精确性&#xff1a;对事物状态描述的精准程度完整性&#xff1a;对事物状态描述的全面程度&#xff0c;完整信息应该包括所有重要事实可靠性&#xff1a;信息的来源、采集方法、传输过程是可以信任的&#xff0c;符合预期及时性&#xff1a;获取信息的时刻与…

(八)RabbitMQ发布确认

发布确认1、发布确认原理2、发布确认策略2.1、开启发布确认的方法2.2、单个确认发布2.3、批量确认发布2.4、异步确认发布2.5、处理异步未确认消息1、发布确认原理 书面文&#xff1a;生产者将信道设置成 confirm 模式&#xff0c;一旦信道进入 confirm 模式&#xff0c;所有在…

Python集合类型详解(一)——集合定义与集合操作符

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python集合类型定义与集合操作符。 一、集合类型定义 在Python中&#xff0c;集合是一种非常重要的组合数据类型。Python中的集合与数学中的集合非常相似&#xff0c;集合中的数据没有顺序&#xff0c;并且每个元…

第二章:Pythonocc官方demo 案例45(几何轴向曲线偏置)

源代码&#xff1a; #!/usr/bin/env python##Copyright 2009-2016 Jelle Feringa (jelleferingagmail.com) ## ##This file is part of pythonOCC. ## ##pythonOCC is free software: you can redistribute it and/or modify ##it under the terms of the GNU Lesser General …

【优化调度】遗传算法求解工件的并行调度组合优化问题【含Matlab源码 2234期】

⛄ 一、 遗传算法简介 1 问题描述 假定一个加工系统有m台机器和n件工件&#xff0c;每个工件包含一道或多道工序,工件的加工顺序是确定的,但每个工件可能有几条可行的加工路线,即每道工序可在多台不同的机床上加工,工序的加工时间和加工费用随机床的性能不同而变化。作业调度的…

并查集解析

文章目录&#x1f6a9;并查集的理解&#x1f6a9;并查集的结构与原理&#x1f6a9;并查集的实现&#x1f341;整体框架&#x1f341;路径压缩&#x1f6a9;总结&#x1f6a9;并查集的理解 并查集是基于数组操作的一个特殊数据结构&#xff0c;和以前学习[数组的堆排序]时有点相…

分析设备树文件

1.设备树是干嘛的 硬件资源有很多&#xff0c;想要实现分类管理&#xff0c;方便驱动去控制它&#xff0c;则需要设备树来管理硬件信息。 所以&#xff0c;设备树主要存放了一些设备节点信息&#xff0c;键值对&#xff0c;和属性&#xff1b;节点中也可以包含子节点。 2.设…

安全架构中的前端安全防护研究

国家互联网应急中心发布的被篡改网站数据让很多人触目惊心&#xff0c;近年来各种Web网站攻击事件频频发生&#xff0c;网站SQL注入&#xff0c;网页被篡改、信息失窃、甚至被利用成传播木马的载体Web安全形势日益严峻&#xff0c;越来越受到人们的关注。 Gartner 对安全架构的…

创建计划协议、维护创建计划、收货

创建计划协议事务码&#xff1a;ME31L创建计划协议 &#xff08;ME32L 修改计划协议 ME33L查询计划协议 ME2L查询采购订单&#xff09; 输入&#xff1a;供应商、协议类型、协议日期、采购组织、采购组、工厂、存储地点等信息后回车。 然后输入有效截至日期&#xff0c; 再点击…

计算机毕业设计java+springboot宠物商城系统

一、项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot Maven mybatis Vue 等等组成&#xff0c;B…

【JVM】垃圾回收:垃圾收集器

一、语境中的并行与并发 并行 并行描述的时多条垃圾收集器线程之间的关系&#xff0c;说明同一时间有多条这样的线程在协同工作&#xff0c;通常默认此时用户线程是处于等待状态。 并发 并发描述的是垃圾收集器线程与用户线程之间的关系&#xff0c;说明同一时间垃圾收集器线程…

简单实现一个虚拟形象系统

前言 上周启动居家开会的时候&#xff0c;看到有人通过「虚拟形象」功能&#xff0c;给自己带上了口罩、眼镜之类&#xff0c;于是想到了是不是也可以搞一个简单的虚拟形象系统。 大致想来&#xff0c;分为以下几个部分&#xff1a; 卷积神经网络(CNN) 下面讲解一下三层CN…

视频格式转换器哪个好用?万兴优转-好用的视频格式转换器

视频格式转换器是用于转换视频格式的软件&#xff0c;是指用于视频转换、音频转换、CD轨抓取、音视频混合转换、音视频剪切、连接转换、视频水印叠加、滚动字幕、个性化文字、图片叠加、视频相框叠加的音视频转换工具。 也就是说&#xff0c;视频有非常多的格式如AVI、VCD、SVC…

【JavaWeb从零到一】会话技术CookieSessionJSP

&#x1f680;【JavaWeb从零到一】系列文章目录 &#x1f6a9;【JavaWeb从零到一】前置知识 &#x1f6a9;【JavaWeb从零到一】Mysql基础总结 &#x1f6a9;【JavaWeb从零到一】JDBC详解 &#x1f6a9;【JavaWeb从零到一】JDBC连接池&JDBCTemplate Cookie&Session&…

王学岗音视频开发(二)—————OpenGLES开发实践

矩阵以及矩阵运算 上图就是m x a 的矩阵 1x30x22x1 :为左侧第一行乘以右侧第一列。 1x10x12x0 :为左侧第一行乘以右侧第二列。 -1x33x21x1:为左侧第二行乘以右侧第一列。 -1x13x11x0:为左侧第二行乘以右侧第二列。 矩阵的行列式 伴随矩阵 A*表示伴随矩阵 OpenGL 教程----屏…

Grails SpringBoot国际化不生效

问题描述&#xff1a; grails项目使用了国际化&#xff0c;按照官方文档的说法&#xff1a; 会根据用户浏览器访问时使用的Accept-Language头自动选择合适的语言。 但无论浏览器了配置什么语言甚至配置了Tomcat启动参数 -Duser.languagexxx -Duser.regionxxx页面显示依旧是英…

[附源码]java毕业设计一点到家小区微帮服务系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…