《SystemVerilog Assertion 应用指南》学习01
创始人
2024-02-13 07:41:00
0

文章目录

  • 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
begina_ia: assert ( a && b ) ;
end
/// 即时断言 a_ia 被写成一个过程块的一部分,遵循和信号a、b 相同的事件调度。
// 当信号a 和 信号b 发生变化时,always 块被执行。

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

1.5、建立 SVA 块

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

sequence name_of_sequence;;
endsequence

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

property name_of_property;; or;
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

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

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...