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

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

3天内不再提示

如何将SystemVerilog断言属性和覆盖属性置于在设计上?

数字芯片实验室 来源:数字芯片实验室 2024-05-28 10:30 次阅读

介绍

功能覆盖、激励生成和运行管理是当今功能验证的三大相互关联的任务。其中,功能覆盖率可以说是最重要的,主要是因为覆盖率收敛是tape的主要标准。覆盖率衡量标准提供了关键的反馈。如图1所示,覆盖率模型应包括端到端功能覆盖、主要接口的事务覆盖、关键RTL结构的结构覆盖和基本代码覆盖。

基于断言的方法有助于发现bug,反馈回归环境的质量。这种方法不仅可以由验证实现,设计可以通过以断言的形式描述他们对设计内部操作的深入行为来提供check。

断言和功能覆盖实际上是同一枚硬币的两面。两者都在寄存器传输水平(RTL)设计中提供详细的观察点。

指南

遵循指南可以使设计更容易。首先,将断言放在RTL代码中,以便它们可以与RTL代码一起管理、更新和重复使用。接下来,通过适当的注释将断言与RTL分开;一些公司建议将ifdef/endif放在断言周围,以便将它们排除在实现流程中的工具之外。

断言不必复杂。事实上,根据我的经验,简单的断言通常和复杂的断言一样有用,包括捕捉复杂的bug。在接下来的部分中,我将探索如何将SystemVerilog 断言属性和覆盖属性置于在设计上。

首先,用于表示特殊信息的寄存器应遵守预定义的合法值(gray_code、odd_parity、even_parity、one-hot)。例如,下面的寄存器声明要求bus_state是one_hot编码的,int_mask中的单个位是相互排斥的,hdl_cmd将只具有合法值。设计或者验证可以捕获它们,以确保它们被功能验证所涵盖。


接下来,当寄存器用作计数器时,它们应该相应地存在概念(最小、最大、范围、值、递减、递增、上溢出、下溢出等)。例如,在下面的寄存器声明中,我们希望确保hdr_adr在1到26的范围内。对于bus_cnt,它不应该下溢和溢出。对于计数器来说,了解他们是否达到了高水位可能很有趣。验证团队可以进行更多的覆盖分析,但需要知道这些计数器的位置,这些指针通常可以在覆盖属性中找到。

接下来,当寄存器用作计数器时,它们应该相应地运行(即与最小、最大、范围、值、递减、增量、增量、下流、溢出等的所有参数一致)。例如,在下面的寄存器声明中,我们希望确保hdr_adr在1到26的范围内。对于bus_cnt,它不应该下溢和上溢。对于计数器来说,了解他们是否达到了高水位也可能很有趣。验证团队可以进行更多的覆盖率分析。


此外,重要的控制寄存器(状态、地址和状态)应正确复位,并且不应具有X或Z状态。

在RTL开发期间定期进行检查。例如,在下面的示例中,当断言cmd_write时,将发生DMA传输。然而,用户没有检查cmd_ready。他假设当cmd_write被采样时,命令处理已经准备就绪。

下面的第一个断言属性有助于确保在断言cmd_write时,信号cmd_ready为真。第二个断言属性确保xdma传输将在cmd_write之后发生。另一个覆盖率属性可以评估成功的DMA传输。

当综合指令与case语句一起使用时,确保假设对指定的case语句成立,并报告任何潜在的仿真/综合不匹配。对于full_case指令,至少有一个case项为真,对于parall_case指令,最多有一个case项为真。例如,在下面的示例中,带有“X”赋值的默认分支用于帮助综合优化。永远不应该达到它。可以添加断言属性来检查此场景。然后,可以使用仿真和形式验证来验证它永远不会被执行。与此同时,我们可以有一个覆盖率属性,可以获取一些关键但罕见的条件。我们希望确保它们已经通过仿真进行了检查和覆盖。

有时候,只有一个分支变量应该是真。例如,在下面的示例中,应始终断言其中一个信号(s0、s1或s2)。我们可以用one_hot属性来验证这一点。同样,覆盖属性可用于捕获控制信号上的临界值变化,例如当pkg_type从`CTRL更改为3'b111时。控制语句为定义这些覆盖属性提供了一个特别好的位置,因为所有控制信号和参数都在本地可用。

当设计团队集成所有SoC模块进行芯片级仿真时,这些模块通常无法相互通信。为了及早发现这些模块间通信问题,添加了协议监视器来检查片上总线和标准接口。在仿真过程中,协议监视器确保模块与其外部接口正确通信。通过收集统计数据和覆盖信息,这些监视器衡量验证环境的有效性。

随着模块的复杂性增加,内部通信方案也越来越复杂。断言对于验证这些模块内接口很有用。

覆盖率和数据流统计对内部接口和外部接口一样重要。此类信息证实了通过接口的数据流,并突出了任何潜在的“瓶颈”。

例如,在下面的数据传输波形中,我想确保数据有效信号断言足够长的时间(两到四个周期),并且当断言有效时数据总线是稳定的。


接下来,在下面的握手数据传输波形中,我想确保数据有效信号的断言时间足够长,以便在断言有效时数据总线是稳定的,并且每个有效的断言后都有一个ack。


计算资源、系统片上总线、互连、buffer和存储器是逻辑结构,通常由仲裁和复杂的控制逻辑共享和控制。在为设计创建验证环境时,团队倾向于首先关注整体规格。相反,它们不会强调这些资源控制逻辑的边界情况。我看到许多回归环境在这些关键场景提供的覆盖率非常低。因此,有问题的场景没有被发现,包括重新流片成本高昂的故障。

在仲裁资源共享的控制器中,根据优先级、权重或credit方案生成request和grant信号。我想确保仲裁方案正确,资源(总线、互连、内存)一次只由一个master处理,并在再次分配之前取消分配。最好用参考模型方法检查这种类型的结构。可以利用Accellera OVL库中的仲裁检查器。预定义的仲裁包括优先权、公平或轮训、FIFO和LRU。

ovl_arbiter检查器可以在RTL代码中实例化。它确保不应在没有请求的情况下发放grant,并且在一个周期内只声明一项grant,并在请求后[min_cks:max_cks]指定的时间窗口内grant。除了检查仲裁方案外,仲裁员checker还有一套全面的cover point和cover group,如cover_req_granted、cover_req_aborted、time_to_grant、concurrent_requests等。还可以添加额外的断言属性,以确保request和grant信号表现良好。例如,仲裁checker假设请求将保留,直到它被grant。我们可以为每个通道生成断言属性,如下所示。


总线桥、dma控制器和路由器等数据传输设备将数据包从一个接口传输到另一个接口。在系统级仿真环境中,数据完整性错误不容易观察到。只有当损坏的数据到达scoreboard时,它们才会被检测到,或者在仿真结束时被标记为丢失。使用断言属性,可以沿着数据传输路径检查它们。它们不应该丢失或损坏,如有必要,我们还可以确保它们遵循先入先出规格,没有任何更改。与其手动创建数据完整性断言,不如利用Accellera OVL库中的fifo断言检查器。fifo检查器确保模块中事务通过模块的数据传输不会损坏。对于具有多个输入和输出端口的模块,例如N-to-M总线矩阵,可以使用OVL多端口fifo检查器。同样,fifo检查器还有一套全面的cover point和cover group,如cover_enqueues、cover_dequeues、cover_fifo_full、cover_fifo_empty、cover_simultaneous_enq_deq等。它们可用于评估设备的数据流。也可以添加其他断言属性。

出于验证目的,我们将有限状态机(FSM)分为两类:接口FSM和计算FSM。接口FSM使用具有明确timing要求的I/O信号。接口FSM的例子有总线控制器、握手FSM等。计算FSM不涉及具有明确定义的timing要求的信号。重要的是不要根据FSM的RTL编写属性。如果设计师误解了需求或在编写RTL时犯了错误,FSM将是错误的。

通常,接口FSM的规范来自协议文档和波形图。断言属性应来自原始规范。他们将确保FSM在时间段内正确采样输入信号,并在输出时序规范内断言响应信号。通常,计算FSM的规范来自控制流图,这在工程文档和标准规范中很常见。为了提高性能和/或简化实现,流程图可能会被划分、扁平化、重新管道化成多个FSM。我们可以捕获具有断言属性的流程图行为创建了一个“可执行”规范。

断言属性可用于捕获流程图中的控制决策、状态跳变和操作序列。在下面的示例中,流程图来自原始规范。



结论

在覆盖率驱动的验证方法中,捕获错误和衡量进度的能力同样重要。幸运的是可以利用用断言捕获错误以及在设计中提供深入的结构覆盖。通过使用覆盖属性和断言库,你可以以很少的增量努力完成这项工作。

最好的建议:在为设计开发断言时考虑覆盖范围。这是在回归环境中实现全面的错误检测能力和结构覆盖率的第一步。



审核编辑:刘清

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

    关注

    30

    文章

    5183

    浏览量

    118349
  • 数据传输
    +关注

    关注

    9

    文章

    1606

    浏览量

    63898
  • 计数器
    +关注

    关注

    32

    文章

    2217

    浏览量

    93533
  • SoC芯片
    +关注

    关注

    1

    文章

    565

    浏览量

    34606
  • RTL
    RTL
    +关注

    关注

    1

    文章

    382

    浏览量

    59266

原文标题:如何使用简单的SystemVerilog断言来验证你的设计

文章出处:【微信号:数字芯片实验室,微信公众号:数字芯片实验室】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    SystemVerilog中的“const”类属性

    SystemVerilog中可以将类属性声明为常量,即“只读”。目的就是希望,别人可以读但是不能修改它的值。
    发表于 11-29 10:25 1849次阅读

    [启芯公开课] SystemVerilog for Verification

    设计验证相关的公开课!SystemVerilog作为IEEE-1800,VLSI设计、验证和断言属性集中在一起,是数字超大规模集成电路设计和验证领域最流行的语言。从2006年至今
    发表于 06-10 09:25

    TDMS组属性如何读取?

    本帖最后由 carter1987 于 2014-7-31 09:32 编辑 如何将上图 Group 那一行属性读出呢?现在想调出每个组通道的 speed 属性值,求大侠帮助
    发表于 07-18 10:06

    属性节点

    会由往下执行,且当中途有任一个属性操作的过程发生错误,则属性节点会立即停止动作,然后错误讯息丢出。如果你想要用Control Reference的方式来控制
    发表于 12-10 12:13

    如何将XY图的属性关闭程序后恢复至以前?

    如何将XY图的属性关闭程序后恢复至以前,我想实现的功能是:XY图身设置两个游标,程序运行中可任意添加游标,当关闭程序下次开启时,仍为两个游标。
    发表于 12-16 15:10

    如何将CAD文字标注变为ArcGIS属性

    。同样的步骤,我们再将文字导出成mif格式的文件,文件命名为“文字”。这里和导出多段线有点区别,首先是图9那里,“对象类型”要选择“文字”;设置界面处,我们需要点击“数据”分页,点击“选择属性
    发表于 01-21 16:16

    如何将DRIVEDONE属性传播到我的mcs文件生成?

    我正在使用Kintex-7部分,由于某种原因(尚未完全研究),我必须将BITSTREAM.CONFIG.DRIVEDONE属性设置为yes以便能够位文件加载到FPGA中。现在我遇到了编程SPI PROM的问题 - 表明完成的引脚没有变高。
    发表于 06-04 07:29

    AMBA 4 AXI4、AXI4-Lite和AXI4-流协议断言用户指南

    您可以协议断言与任何旨在实现AMBA®4 AXI4的接口一起使用™, AXI4 Lite™, 或AXI4流™ 协议通过一系列断言根据协议检查测试接口的行为。 本指南介绍SystemVeril
    发表于 08-10 06:39

    SystemVerilog断言手册

    SystemVerilog Assertion Handbook1 ROLE OF SYSTEMVERILOG ASSERTIONSIN A VERIFICATION METHODOLOGY
    发表于 07-22 14:12 20次下载

    SystemVerilog断言及其应用

    在介绍SystemVerilog 断言的概念、使用断言的好处、断言的分类、断言的组成以及断言如何
    发表于 05-24 16:35 0次下载
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>断言</b>及其应用

    基于节点连接结构和属性值的属性图聚类匿名化方法

    社交网络中积累的海量信息构成一类图大数据,为防范隐私泄露,一般在发布此类数据时需要做匿名化处理.针对现有匿名方案难以防范同时以结构和属性信息为背景知识的攻击的不足,研究一种基于节点连接结构和属性
    发表于 12-26 11:22 0次下载
    基于节点连接结构和<b class='flag-5'>属性</b>值的<b class='flag-5'>属性</b>图聚类匿名化方法

    labview属性节点教程,属性节点有什么作用?

    控件的大部分属性都可以通过属性对话框ā行设置,对于未包括的属性则需要通过属性节点来编程操作了。属性节点用于访问对象的
    发表于 08-13 08:00 0次下载
    labview<b class='flag-5'>属性</b>节点教程,<b class='flag-5'>属性</b>节点有什么作用?

    如何访问对象属性

    在JavaScript对象的属性是无序的集合。每个键值对称为一个属性。对象属性的键可以是字符串。属性的值可以是任何值,例如字符串、数字、数组,甚至是函数。
    的头像 发表于 12-07 09:34 1056次阅读

    placeholder属性和value属性的差别

    在现代的Web设计和开发中,表单是至关重要的元素之一。与此同时,placeholder属性和value属性在表单中扮演着重要的角色。本文将详细探讨这两个属性的区别,深入探究它们在不同场景下的应用及其
    的头像 发表于 11-30 10:13 723次阅读

    arcgis中如何在属性表中选择多个属性

    在ArcGIS中,你可以通过多种方式来选择属性表中的多个属性。下面是一些常用的方法: 方法一:使用Select by Attributes工具 在ArcGIS的属性表中,选择“Selection
    的头像 发表于 02-25 11:10 7049次阅读