【IC验证】基于systemverilog(UVM)断言

news2024/10/10 15:45:01

断言

  • 0.注意
  • 1.作用
  • 2.分类
  • 3.断言的语法
  • 4.基本组成
  • 5.实现断言
  • 6.常见断言方法
  • 7.APB的断言
    • 7.1APB的时序
    • 7.2 断言的检查
    • 7.4 断言覆盖率的统计
    • ...未完待续

0.注意

在sequence序列、property属性和断言语句中都可以触发事件,但是建议在property中定义;

1.作用

可以进行时序检查和覆盖率统计。

2.分类

即时断言:执行到程序块,立即执行断言,可以结合信息打印机制进行使用;
并发断言:在整个仿真过程中,都会连续地检查信号。

3.断言的语法

//含bool表达式的sequence
sequence sequence名字;
	bool表达式;
endsequence
//含sequence的property
property 名字;
	@(敏感事件列表)   sequence;
endproperty
//含property的断言语句
断言的名字: 断言关键字(assert/cover/assume) property(property名字);
   断言执行结果;
else
   不满足断言执行结果;

4.基本组成

sequnce序列:表示事件;
property属性:仿真过程中被验证的单元;
实例化property的关键字:
assert:时序检查,要求在整个验证场景中必须为真;
cover:覆盖断言,在整个验证场景中必须出现过;
assume:约束断言,一般用来规范电路的输入激励;

5.实现断言

bool表达式构成sequence序列;
sequence序列构成property属性;
使用属性进行断言;

6.常见断言方法

A 运算符
a 说明:(过于简单的断言可以不用sequence序列)
直接使用运算符;
b 语法:
直接使用运算符;
c 例子:
在这里插入图片描述
在这里插入图片描述
B 内建方法
a 说明
使用systemverilog内建的方法进行断言;
b 语法:
$rose(expression or signal)
当表达式/信号由0变为1时,返回真;
$fell(expression or signal)
当表达式/信号由0变成1时,返回真;
$stable(expression or signal)
当表达式/信号不变时,返回真。
$past(signal,pad)
检查信号前几拍;
例子1:
在这里插入图片描述
在这里插入图片描述
例子2:
在这里插入图片描述
在这里插入图片描述
例子3:
在这里插入图片描述
在这里插入图片描述
C 参数化
说明:
sequence序列和property都可以传参;
语法:
sequence sequence名字(参数列表);
bool表达式;
endsequence
property property名字(参数列表);
sequence序列或bool表达式;
endproperty
例子:
在这里插入图片描述
在这里插入图片描述
D 延时
说明:当先行算子满足后,延时拍数,后续算子需满足;
语法:先行算子 ##延时拍数 后续算子;
注意:拍数表示延迟的周期数,而不是时间单位;
例子:
在这里插入图片描述
在这里插入图片描述
说明:上图波形不能反映断言结果,截出断言列表;
在这里插入图片描述
D1 延时1
说明:当先行算子满足后,延时拍数区间,后续算子在延时区间满足其中一个时刻即可;
语法:先行算子 ##延时拍数区间 后续算子;
注意:拍数表示延迟的周期数,而不是时间单位;
例子:
在这里插入图片描述
在这里插入图片描述
E 交叠蕴含
说明:当先行算子满足时,在同一周期,计算后续算子的表达式;
当先行算子不满足时,会显示空成功;
语法:先行算子 |-> 后续算子;
代码:
在这里插入图片描述
结果:
在这里插入图片描述
F 非交叠蕴含
语法:先行算子 |=> 后续算子;
说明:当先行算子满足时,在下一周期,计算后续算子的表达式;
当先行算子不满足时,会显示空成功;
代码:
在这里插入图片描述
结果:
在这里插入图片描述
注意:断言结果为后续算子满足时显示;
G sequence序列的拼接(ended没有考虑)
说明:
序列可以按照起点进行拼接,前面序列断言后,继续断言后续序列,同时满足断言成功;
起点拼接,直接用断言符号;
例子:
在这里插入图片描述
在这里插入图片描述
H 连续重复跟随运算符
说明:信号或序列连续多拍满足,且次算子判定必须紧跟前序算子和后续算子。
语法:signal or sequence [*n]
例子:
在这里插入图片描述
在这里插入图片描述
I 非连续重复跟随运算符
说明:信号或序列连续或间断满足要求,且信号或序列必须紧跟前序算子和后续算子;
语法:信号或序列[->次数]
例子:
在这里插入图片描述
在这里插入图片描述
j 非连续重复非跟随重复运算符
说明:信号或序列连续或间断满足要求,且信号或序列必须紧跟前序算子和后续算子;
语法:信号或sequence序列[=n] 后续断言;
例子:
在这里插入图片描述
在这里插入图片描述
注意1:会重复检测。
注意2:三个重复算子的区别:
a重复序列的构造

	前序算子   重复算子   后续算子;
	//前序算子和后续算子不是必须项;

b重复序列的特性
连续性:重复算子必须紧跟前序算子执行,且必须连续满足重复算子([*3]即为三个连续的高电平);
跟随性:后续算子必须紧跟重复算子执行;
c 三个重复算子满足的特性

连续性跟随性
[*n]
[->n]×
[=n]××

k and构造
说明:
可以并列组合两个序列,两个序列都成功时,整个属性成功;
两个sequence序列起点要相同,终点可以不同;
检验的起始点是两个sequnce序列检验的起始点,检验的终点是后结束sequence序列检验的终点;
语法:
序列1 and 序列2;
例子:
在这里插入图片描述
结果:
在这里插入图片描述
在这里插入图片描述
注意:两个sequence序列起始点必须相同,当起始点不同时,后一个sesquence序列的起始点也可作为前一个sequence序列的起始点时,可以将后一个序列的起始点作为总的起始点;
例子:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
l intersect构造
说明:
可以并列组合两个sequnce序列,两个sequence序列都成功时,property属性才成功;
两个sequence序列必须同时开始和同时结束,即需要有相同的长度;
例子1:起点和终点都不同,and和intersect都断言失败;
在这里插入图片描述
在这里插入图片描述
例子2:起点相同和终点不同,and断言成功intersect断言失败;
在这里插入图片描述
在这里插入图片描述
例子3:起点和终点都相同,and和intersect都断言成功;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
m or构造
说明:
可以并列组合两个sequence序列,只要有一个序列成功,property属性就成功;
n first_match构造(没跑通例子,例子和理论违背)
说明:当序列由多个并行序列通过通过逻辑运算符进行组合(and /or等),会出现一次检测有多个匹配的结果,使用first_match够着只会用第一次序列匹配;
语法:first_match(sequence序列或信号);
例子:
在这里插入图片描述

在这里插入图片描述
说明
序列:

	a ##[1:2] b

等价于由两个序列通过or运算符进行组合:

	(a ##1 b) or(a ## 2 b)

所以,一般会将所有序列检查完,才会检查后续序列;
当使用first_match构造后,多个并行序列检查到第一次满足后,立刻执行后续序列:

	first_match (a ##[1:2] b)

o throughout构造
说明:bool表达式,在整个后续序列过程中,为高电平;
语法:(bool表达式) throughout 后续sequence序列;
例子:
在这里插入图片描述
在这里插入图片描述
说明:
在50到90时刻,断言失败,因为前提条件a为低;
90到130时刻,断言失败,因为前提a并没有在整个过程中满足;
130到170时刻,断言成功,因为前提a在整个过程中满足后续表达式也满足。
p within构造
说明:后续序列发生的时间段,包含前面序列发生的时间段;
即,后续序列必须先于 先行序列开始,后续序列必须后于 先行序列结束;
语法:先行序列 within 后续序列;
例子:
在这里插入图片描述
在这里插入图片描述
q 局部变量
说明:sequence序列和property属性内都可以定义局部变量,局部变量可以赋值,紧接着子程序放置用逗号隔开;
语法:

局部变量声明;
bool表达式,局部变量赋值;

例子:APB协议中的断言;
在这里插入图片描述
r 例子
a 例1
在这里插入图片描述
说明:
先行算子:a和b同时为高;
后续算子:在1到3拍内,c至少在一个时钟周期内为高;
结果:
在这里插入图片描述

b 例子2
在这里插入图片描述
说明:
先行算子: a为高;
后续算子:在一拍以后,b存在高电平;
b为高,同时及以后,c存在高电平;

7.APB的断言

7.1APB的时序

(1)写操作时序
在这里插入图片描述
(3)读操作时序
在这里插入图片描述

7.2 断言的检查

(1)公共断言
A PSEL信号拉高,APBADDR信号不应该为X;
使用的断言:交叠蕴含和$unknown内建方法;
代码:
在这里插入图片描述
结果:
在这里插入图片描述

B PSEL信号拉高,下一个周期PENABLE信号也应该拉高;
使用的断言:$rose内建方法和非交叠蕴含;
代码:
在这里插入图片描述
结果:
在这里插入图片描述
C PENABLE信号拉高,下一个周期PENABLE信号应该拉低;
使用的断言: $rose(), $fell()内建方法和非交叠覆盖;
代码:
在这里插入图片描述

结果:
在这里插入图片描述
D在下一次传输前,PADDR和PWRITE信号应该保持不变;
使用的断言:$rose(),局部参数,##1,[=1],基本运算符,$past(),,first_match,|->
例子:
在这里插入图片描述
代码分析:
a 用$rose内建方法判定PENABLE信号的上升沿前一次传输过程的开始,并记录地址;
b用延时(##1)和基本运算符和非连续重复非跟随运算符判定下一次传输的开始,并用$past记录地址;
c用first_match结构只检查第一次满足要求的结果;
d用交叠蕴含(|->)判定地址的一致性;
(2)写模式断言
说明:无论是在读还是写数据模式,依次数据传输过程中,写数据线(PWDATA)保持不变;
代码:
在这里插入图片描述
结果:
在这里插入图片描述

7.4 断言覆盖率的统计

(1)非连续写操作
说明:进行一次写操作,空缺一拍,再进行下一次写操作;
时序如下图:
在这里插入图片描述
代码:
在这里插入图片描述
说明:
a PSEL为高且PENABLE为低,判定一次传输的开始;
b 通过交叠蕴含(|->)和througout结构要求从此刻开始到下一次传输结束,PWRITE保持为高;
c 通过延迟结构(##)、连续重复跟随结构、非连续重复非跟随结构,要求下一拍PENABLE为高、PENABLE连续两拍低、PENABLE在后一次传输结束前为高一拍;
结果:
在这里插入图片描述
(2)连续写
说明:前一次写完,立刻写第二次
时序:
在这里插入图片描述
代码:
在这里插入图片描述

代码说明:
a PSEL为高且PENABLE为低,判定一次传输的开始;
b 通过交叠蕴含(|->)和througout结构要求从此刻开始到下一次传输结束,PWRITE保持为高;
c 通过延迟结构(##)、要求下一拍PENABLE为高、再下一拍PENABLE为低、再下一拍PENABLE在后一次传输结束前为高一拍;
结果:
在这里插入图片描述

…未完待续

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

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

相关文章

机器学习西瓜书笔记(十四) 第十四章概率图模型

第十四章 概率图模型14.1 隐马尔可夫模型14.1.1 小结 14.2 马尔可夫随机场小结 14.3 条件随机场14.3.1 小结 14.4 学习与推断14.4.1 变量消去14.4.2 信念传播小结 14.5 近似推断14.5.1 MCMC采样14.5.2 变分推断小结 14.6 话题模型14.6.1 小结 总结 概率图模型 14.1 隐马尔可夫…

模型漫谈:图神经网络(GNN)是什么样的存在

文章大纲: 从生活中的例子谈图与图神经网络 什么是图神经网络?它如何起源? 图神经网络的基本原理和原则 图神经网络的应用方向:以环境科学为例 公众号推荐 在现代科技迅速发展的今天,许多看似复杂的概念其实都有…

安全运营中心 (SOC) 团队对其安全工具感到失望

Vectra AI 表示,安全运营中心 (SOC) 从业人员认为,由于太多孤立的工具和缺乏准确的攻击信号,他们在检测和确定真实威胁的优先级方面正在失败。 人们对供应商的不信任感日益加深,认为供应商的工具在发现真正的攻击方面起的阻碍作用…

基于Rational Rose 做的UML图

因为要写软件工程的实验报告,但是老师讲的完全听不懂。so 看的b站上面的 UML视频(古董),记个笔记,完全图一乐。 目录 用例图: 类图 类和类之间的关系: 继承(泛化 Generalization) 实现(Interface&…

随机链表的复制OJ

目录 前言1.随机链表的复制1.1 思路1.2 代码 总结 前言 这道题可谓是链表的试金石,涉及到链表的插入、删除,对代码能力是很大的考验。而且思路也很巧妙,很有价值的一道题。 1.随机链表的复制 138.随机链表的复制 1.1 思路 这个题目很难整…

哈希闭散列的实现与机制

目录 哈希的介绍 哈希冲突 原因 影响 解决方法 实例 哈希函数 哈希函数设计原则: 常见哈希函数 闭散列 线性探测的实现 代码解读 1. 命名空间和枚举定义 2. 哈希表节点结构体 3. 哈希函数模板 4. 哈希表类 5. 插入、查找和删除逻辑 二次探测 哈希的…

头歌 | 获取最多金币

题目描述 有一个 N x N 的方格,每一个格子都有一些金币,只要站在格子里就能拿到里面的金币。你站在最左上角的格子里,每次可以从一个格子走到它右边或下边的格子里。请问如何走才能拿到最多的金币。 输入输出格式 输入格式 第一行有一个整数 N。 之后 N 行有 N 个整数&…

msvcp100.dll丢失怎样修复,6招轻松解决msvcp100.dll丢失问题

在众多电脑故障中,msvcp100.dll丢失问题尤为常见。本文将详细探讨msvcp100.dll丢失的原因、影响、解决方法以及预防措施,帮助用户更好地应对这一难题。 一、什么是msvcp100.dll? msvcp100.dll是微软Visual C 2010 redistributable package的…

【网络协议大花园】应用层 http协议的使用小技巧,用好了都不用加班,效率翻两倍(上篇)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

基站设备检测系统源码分享

基站设备检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vision …

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解(UDP) 3. 面向连接的多路复用与多路分解(TCP) 4. Web 服务器与TCP 三、UDP&#x…

CMake 教程跟做与翻译

目录 STEP 1: 入门与理解 cmake_minimum_required设置CMake版本的最小值 project声明工程属性 add_executable添加可执行文件 使用CMake构建工程 根据自己的构建工具自行构建 Reference STEP 1: 入门与理解 我们起手的,最基本的 CMake 项目是从单个源代码文件…

一篇教你玩转腾讯混元大模型!

0 前言 腾讯混元大模型(Tencent Hunyuan)具备: 强大的中文创作能力复杂语境下的逻辑推理能力可靠的任务执行能力 基于混元大模型,腾讯云推出文本生成、图像创作、视频创作产品方案,覆盖全场景AIGC应用: …

如何在 Kubernetes 上部署 Spark

在 Kubernetes 集群中部署 Apache Spark,需要你具备对 Kubernetes 的工作原理、Spark 的架构以及云原生应用的理解。 前期准备工作 在进行 Spark 的部署之前,需要对你的 Kubernetes 环境做好充分的准备。这包括 Kubernetes 集群的搭建以及基础工具的安…

【大模型理论篇】大模型相关的周边技术分享-关于《NN and DL》的笔记

本文所要介绍的一本书《Neural Networks and Deep Learning》,该书作者Michael Nielsen,Y Combinator Research的研究员,是多年之前自己看的一本基础书籍,很适合入门了解一些关于深度学习的概念知识,当然也包含了一些小…

华为OD机试 - 日志限流 - 二分查找(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

毕业设计——springboot + VUE实现后台管理系统(集成JWT接口权限验证)

作品详情 - 高质量的代码、代码结构、和代码注释 - 漂亮的UI,菜单栏、标签页,体验、交互更好用的员工、部门、角色、菜单管理等等 - 优化基于Keepalive的标签页,做到标签页该缓存的时候缓存,比如左右切换等,不该缓存的…

二、图解C#教程

一、方法 {}块,里面的是方法体 二、Var关键字 推断出等号右边的实际类型 三、局部常量 1、声明时必须初始化 2、声明后不能改变

虚拟内存能不能完全关了?太占空间了……

前言 这几天咱们提到关于Swap区(就是Linux上的数据交换分区),在Windows上这个功能被称为虚拟内存。 前段时间(应该是很早之前),小白写过一篇关于虚拟内存的文章: Windows调大虚拟内存来代替升…

常见激活函数总结

简介:个人学习分享,如有错误,欢迎批评指正。 一. 激活函数的定义 激活函数(Activation Function)是人工神经网络中对每个神经元的输入进行非线性变换的函数。神经网络中的每个神经元都会接受来自上一层的输入&#xf…