0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于断言的验证简介 – 第 1 部分

modemdesign 来源:modemdesign 作者:modemdesign 2024-01-09 09:59 次阅读

基于断言的验证简介 – 第 1 部分

基于断言的验证(ABV)是一种与传统方法相比可以大大减少验证过程的技术.

ABV主要用于 ASIC 领域,但由于FPGA 设备的复杂性不断增加,事实证明它在 FPGA 验证流程中同样至关重要。

然而,在我们开始庆祝芯片项目验证周期大幅缩短的可能性之前,我们需要了解断言以及如何将它们有效地集成到验证方法中。

为了便于技术消化,断言的介绍将分为两部分。第一部分将解释什么是断言,讨论语言并发展基本术语和思想。在第二部分中,我们将深入挖掘并介绍蕴涵的使用和“空洞真理”的概念以及断言和覆盖。

什么是断言?

断言最简单的定义是“设备行为的抽象表示,在规范、验证和实现中很有用……”

稍后我们会看到这个定义可以扩展为更准确的描述,但现在就用这个定义了。

有两种语言可用于表达断言的实际应用,即属性规范语言(PSL)SystemVerilog断言子集(SVA)

PSL 可用于 VHDL、Verilog、 SystemVerilog和SystemC ,并且是 VHDL-2008 的子集。

SVA 是SystemVerilog语言的断言相关子集,基于Superlog和OpenVera捐赠。它的断言和属性功能也借鉴了 PSL。

两种语言都是 IEEE 标准。

哪种语言?

VHDL 设计人员可以同时使用 SVA 和 PSL,但通常选择 PSL,因为它可以直接放入 VHDL 代码中并有助于设计文档,而 SVA 则不能。此外,PSL 现在是 VHDL 标准 (2008) 的一部分,因此这意味着只需要使用一种语言。

Verilog 设计人员可以同时使用 PSL 和 SVA,但通常使用 SVA,因为当直接放入 Verilog 代码中时,它比 PSL 具有更多可用功能。此外, SystemVerilog和 Verilog 现在合并为一个标准 - SystemVerilog 。

好消息是 PSL 和 SVA 属性看起来几乎相同。

为什么使用断言?

断言已经成为 ASIC 设计中一种既定且流行的验证方法,因此 FPGA设计可以从这一领域学习。重要的是,它们受 IEEE 标准(PSL、 SystemVerilog和 VHDL)管辖。

面向对象编程中处理类、对象、继承等要容易得多。它们基于您作为设计师所熟悉的设计规范,因此更容易实施。

断言在模拟中创建了额外的安全层,因为它们是对原始规范的引用,并且在进行综合和实现迭代时非常有用。

断言本质上以它们的编写方式创建“实时文档”,这使得设计的管理变得更加容易。它们非常容易阅读和解释,这使得与设计团队的共享变得更容易管理。

在哪里放置断言?

所有工具都允许您将断言放置在单独的单元或文件中,并将它们“绑定”到常规 RTL 代码。验证工程师喜欢这个想法,因为它允许文件独立性,而 HDL 设计人员通常更喜欢将断言直接放入代码中以减少所需的文件量。

大多数模拟器允许您直接在 RTL 代码中放置断言。对于 PSL,这表示为注释。对于SystemVerilog ,断言可以直接放入代码中。

例如: – psl属性 p1 是... 或 // psl属性 p2 是...

VHDL-2008 允许将 PSL 断言直接放入代码中(无需注释)。

将断言放入代码中时需要小心,因为综合工具通常不支持某些断言,因此需要使用综合编译指示来管理它们。

发展基本术语和想法

术语“基于断言的验证”(ABV)通常用于描述整个验证过程,但它不仅仅涉及断言。

该流程由序列、属性、断言和覆盖组成。

ABV的基本思想是“属性”。属性是对设计的特定行为的正式描述,例如“窗户破裂触发警报”或“安全在 30 秒内响应警报”。

验证工具可以通过多种方式使用属性,通过“断言”属性来验证不会发生不好的事情,例如“断言损坏的窗户总是会触发警报”。

或者,使用“覆盖”来验证是否发生了好事,例如“在 30 秒内覆盖了对触发警报的响应”。

深入挖掘这些属性,如果你看一下典型的数字设计规范,它已经充满了用简单的英语表达的设计属性。作为设计人员,您可以将这些属性重写到 HDL 中,同时考虑到正确的硬件实现。

因此,属性、断言和覆盖代表了设计的纯粹行为(期望的或不期望的)。正如我们所说,它们可以作为非常有效的设计文档,并作为设计验证期间的参考。它们还被各种功能和形式验证工具所接受。

我们现在需要了解如何定义属性以及它如何使用“时间逻辑”的原理。

时态逻辑可以被认为是添加了时间维度的布尔逻辑。

如果我们使用“离散时间”,则属性表示设计的“状态序列”。请注意,所有流行的基于属性的设计 (PBD)/ABV 解决方案都对设计中对象的采样值进行操作。

为了及时表达这种关系,属性使用“时间”或“模态”运算符,例如下一个、最后、全局、直到(next, finally, globally, until)等。

接下来我们需要了解如何构建属性。

我们都熟悉的布尔类型表达式是属性组成的一部分,但却是最简单的部分。我们还需要了解“序列” 。

“序列”通常被认为是代表离散时间点上的一系列设计状态的属性的基本时间构建块。

典型的序列代表设计中的简单执行路径。

要从简单的序列创建真实的属性,您可以:

“融合”序列,其中一个序列在另一个序列开始的同一时刻结束。

“连接”序列,其中一个序列结束,另一个序列在下一个时间点开始

说一个序列是另一个序列的“蕴含”

“与”或“或”序列

检查一个序列是否包含在另一个序列中

检查序列是否重复给定次数(连续或不连续)

一旦设计属性正式化,所有工具都可以在两个指令之一中使用这些属性:

wKgaomWcp_2AASYtAAC85u8SQYQ126.png

图-1

断言——当属性不成立时会发出警报。

覆盖——确认该属性已成功测试。

一些工具(主要是形式验证,但也有一些模拟器)允许更多指令,例如控制设计刺激或限制环境条件(假设、限制、公平等)。

建立实用的断言

现在我们已经了解了属性和序列的基本元素,让我们看看如何构建实际的断言。

正如我们所提到的,最基本的属性是具有严格线性时间流的“序列”。

模拟需要线性时间流,因此属性的时间来回跳跃是不可能的,因为这会使模拟变得不可能。

序列的每个节点代表您的设计的一种状态:

某些信号所需的值

必须满足的条件

为了完成序列,您必须指定如何将这些节点连接在一起。那么,让我们看看一些“序列”属性事实。

最简单的序列是布尔表达式,但更常见的是,您会将多个表达式粘合在一起以形成“随时间扩展”的复杂序列。

要使元素在同一时钟上粘在一起,请在 PSL 中使用‘fusion’ (:) 或在 SVA 中使用“零时钟延迟”(##0) ‘zero clock delay’ (##0)。

wKgaomWcp_2AVafGAAAQGvwFvOQ716.png

要在元素之间引入一个周期中断,请在 PSL 中使用“串联”(;) ‘concatenation’ (;)或在 SVA 中使用“一个周期延迟”(##1) ‘one cycle delay’ (##1)。

wKgZomWcp_2AB4EhAAAQDudwqsg552.png

您可以使用 SVA 中的一系列值 (##[ m:n ]) 指定更长的延迟。

PSL 使用“连续重复运算符”(<序列>[ *m 到 n])([*m to n])来指定“值范围”延迟。如果没有要重复的序列,则假定“True”是重复的参数

现在我们已经提到了重复,让我们更正式地看看这个。

如果相同的条件应保持超过一个周期,那么我们可以使用“连续重复运算符”,而不是使用串联或一个周期延迟来重复条件。

该运算符在 PSL 和 SVA 中看起来相同:序列 [* Number_or_Range ] Sequence [* Number_or_Range].。

带有数字的简单形式表示序列应该重复(保持)给定的次数: A[ *7]。

范围版本表示序列应在自然范围内保持任意数量的循环(要指定无限上限,请在 PSL 中使用“inf”或在 SVA 中使用“$”): B[*1 to inf] B[*1:$]

让我们用一个例子来说明:

wKgaomWcp_2AZasxAAESaIYhSVs933.png

图3

在这里,我们看到了一个重复的例子,以及没有重复的等效序列,并显示了 PSL 和 SVA 的相同序列。

时钟序列/复位和属性

所有属性语言都使用离散时间,这意味着必须指定时钟或采样方法。

如果未指定时钟,则应用最快的可用工具默认值,在模拟器的情况下,这可能是周期等于模拟分辨率的时钟。

如果大多数属性都使用一种时钟方法,则您可以指定“默认时钟”‘default clock’。

要指定时钟事件,请在 PSL 中序列的末尾或 SVA 中的开头使用“@<时钟条件>”。

对于时钟条件,请使用本机 HDL 中首选的时钟检测器,例如VHDL 中的“ rising_edge ”函数或Verilog 中的“ negedge ”。

我们还需要能够处理重置,因为有时您可能正在进行属性评估,并且发生重置,这会导致断言失败或其他不需要的情况。

幸运的是,PSL和SVA都提供了放弃属性评估的机制,而不会产生不利影响。

PSL允许在属性末尾添加“ async_abort ”或“ sync_abort ”运算符和重置条件。

always (({(A);(B)}) async_abort C=’1′) @rising_edge(CLK);

在属性开头添加“disable iff (条件)”短语。

@(posedge CLK) disable iff (C) A ##1 B;

总结一下时钟和复位:

属性中没有默认重置,但您可以拥有默认时钟(采样事件)。

在 SVA 中将重置和时钟应用于属性的文本顺序是 PSL 中顺序的镜像。

wKgaomWcp_2AK2zyAABRIVoR-mQ782.png

图4

综上所述

我们引入了断言,并发现 PSL 和 SVA 属性相似并且类似于设计要求。

我们开发了断言的基本术语和思想,并讨论了序列、属性、断言和覆盖以及它们如何形成设计属性。我们还学习了如何定义属性以及它如何遵循时序逻辑原则。最后,我们开始构建一些实际的断言来理解我们所介绍和讨论的内容。

如果您喜欢这个介绍,您可以期待第二部分,它将介绍蕴含在断言中的使用及其在断言中的重要性以及在模拟中的使用。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • asic
    +关注

    关注

    34

    文章

    1158

    浏览量

    119269
  • 断言
    +关注

    关注

    0

    文章

    8

    浏览量

    6657
收藏 人收藏

    评论

    相关推荐

    什么是断言?C语言中断言的语法和用法

    在软件开发过程中,我们经常需要处理各种错误和异常情况。为了提高代码的健壮性和可靠性,我们需要使用一些工具和技术来检测和处理这些问题。本篇博客将深入探讨C语言中断言的使用,帮助读者更好地理解和应用断言,提高代码的质量和可维护性。
    发表于 08-03 10:34 1682次阅读

    解析C语言断言函数的使用

    对于断言,相信大家都不陌生,大多数编程语言也都有断言这一特性。简单地讲,断言就是对某种假设条件进行检查。 在 C 语言中,断言被定义为宏的形式(assert(expression)),
    发表于 08-08 09:51 237次阅读
    解析C语言<b class='flag-5'>断言</b>函数的使用

    何为断言断言的作用有哪些?断言的种类 断言层次结构

    断言主要用来检查仿真过程中存在的时序问题,如果存在异常情况,断言会报警。一般在数字电路设计中都要加入断言断言占整个设计的比例应不少于30%。
    的头像 发表于 08-28 11:16 5544次阅读
    何为<b class='flag-5'>断言</b>?<b class='flag-5'>断言</b>的作用有哪些?<b class='flag-5'>断言</b>的种类 <b class='flag-5'>断言</b>层次结构

    C语言assert(断言)简介

    assert的功能,条件为真,程序继续执行;如果断言为假(false),则程序终止。
    的头像 发表于 11-17 16:33 652次阅读
    C语言assert(<b class='flag-5'>断言</b>)<b class='flag-5'>简介</b>

    硬件验证语言——简介

    硬件验证语言——简介 硬件验证语言 (HVL) 是一种编程语言,用于验证以硬件描述语言 (HDL) 编写的电子电路设计。 HVL 通常包括高级编程语言(如 C++ 或 Java)的特
    发表于 02-16 13:36

    SVA断言是基于边沿还是电平呢?

    SVA断言是一个强时序的技术,很多时候SVA的实际时序和验证工程师的期望可能不同,这种不同很难调试定位。下面是一个SVA断言的示例,验证工程师期望
    发表于 08-25 15:57

    何为断言断言该怎么使用呢

    的每个函数的参数!调试的便利 :如果在程序测试和调试期间违反了前置条件,也就是说断言异常了,则调用包含前置条件的函数的代码中存在bug。如果在程序测试和调试期间违反了后置条件,则该断言前面部分代码可能有
    发表于 09-21 14:59

    硬件验证方法简明介绍

    硬件验证方法简明介绍本书“硬件验证方法简明介绍”是“半导体 IP 核——不仅仅是设计”系列丛书中“验证 IP 和 IP 核验证”的一部分。本
    发表于 11-26 20:43

    基于事务断言验证及SDH芯片验证平台

    提出了基于事务断言验证技术,用属性说明语言(Property Specification Language,PSL)描述系统的属性,用事务进行系统的验证,通过编程语言接口机理和工具控制语言来控制
    发表于 08-02 17:26 0次下载

    SystemVerilog断言及其应用

    在介绍SystemVerilog 断言的概念、使用断言的好处、断言的分类、断言的组成以及断言如何被插入到被测设计(DUT)的基础上,本文详细
    发表于 05-24 16:35 0次下载
    SystemVerilog<b class='flag-5'>断言</b>及其应用

    验证通常构成整个验证IP开发周期不可或缺的一部分

    断言是一种条件语句,通过标记错误继而捕获错误来指示设计的不正确行为。断言用于验证处于不同生命周期阶段(例如形式验证、动态验证、运行时监控和仿
    的头像 发表于 05-23 10:01 1221次阅读
    言<b class='flag-5'>验证</b>通常构成整个<b class='flag-5'>验证</b>IP开发周期不可或缺的一<b class='flag-5'>部分</b>

    STM32函数库Assert断言机制

    何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言
    发表于 02-08 15:29 2次下载
    STM32函数库Assert<b class='flag-5'>断言</b>机制

    电气过应力简介-第2部分

    电气过应力简介-第2部分
    发表于 11-04 09:52 6次下载
    电气过应力<b class='flag-5'>简介</b>-第2<b class='flag-5'>部分</b>

    电气过应力简介-第1部分

    电气过应力简介-第1部分
    发表于 11-04 09:52 5次下载
    电气过应力<b class='flag-5'>简介</b>-第1<b class='flag-5'>部分</b>

    防御式编程之断言assert的使用

    是为了验证预期的结果——当程序执行到断言的位置时,对应的断言应该为真;若断言不为真时,程序会终止执行,并给出错误信息。可以在任何时候启用和禁用断言
    的头像 发表于 04-19 11:35 377次阅读