system verilog的断言assertion

1.什么是断言?

 断言通常被称为序列监视器或者序列检验器;是对设计应当如何执行特定行为的描述,是一种嵌入设计检查。如果检查的属性(property)不是我们期望的表现,那么在我们期望事件序列的故障上会产生警告或者错误提示。

断言用来检查模拟序列行为或者激励生成的正确性,断言作为功能验证的一种重要手段,可以脱离测试用例而覆盖测试点,所以断言覆盖率可以是功能覆盖率的一部分,完善的断言能为全面的功能覆盖率尺度打下良好的基础。

2.可以添加什么类型的断言?

设计层面:设计意图相关的断言;

接口层面:模块接口相关断言、芯片功能意图相关断言、芯片接口相关断言;

性能层面:读取的缓存延迟、数据包处理延迟。如果超过设计时限则请求断言。

3.断言的目的是?

 

 3.断言添加的位置

断言可以嵌入到RTL中:和普通设计语句一样,分布在rtl中,在综合时会被忽略;

在设计模型中,但是独立成块:仿真时和设计一起执行综合要忽略;

在设计模型外部独立的模块文件。

4.断言的两种类型

4.1即时断言(immediate assertions):在当时时刻断定信号的数值情况;

语法

label: asser (expression) actin_block;

必须放到过程块中(task/function/always)

例如

asser_foo:assert (foo)$display("%m pass");
            else $display("%m failed"); //名字:assert(判断语句)若真执行语句1,否则执行语句2

4.2并发断言(concyrrent assertions):在多个周期断定序列顺序

并发断言是检查跨越多个时钟周期的事件序列。

仅在有时钟周期的情况下出现,

测试表达式是基于所涉及的采样值在时钟边缘计算的;

可以放在过程块、模块、接口或程序定义中

区别并发断言和即时断言的关键字是property

例子

always @ (posedge clk)
        if (state == fetch)
        ap_req_grant:assert property (p_req_gnt) passed_count++;
        property p_req_gnt;
            @(posedge clk) request ##3 grant ##1 !request ##1 !grant;
         endproperty:p_req_gnt

主要区别是与clk有无关系。

5.断言的结构

断言assertion(属性property(序列sequence))

6.断言基本语法

  6.1信号间的组合逻辑关系

   (1)常见的有&&,||,!,^

        (2)a?b:c    a事件成功后,触发b,a不成功出发c。

  6.2 再时序逻辑中判断独立的一根信号的行为:

                $rose(a)   ---  信号上升;

                $fell()    --   信号下降

                $stable(a)   --信号值不变

   6.3 再时序逻辑中判断多个事件/信号的行为关系

                intersect(a,b)     --        a和b两个事件同时产生,同时约束

                a within b         --        b事件发生的时间段内包含a事件发生的时间段

                a ## 2b        --        a事件发生的两个时间单位内b事件会发生

                a##[1:3] b        --        a事件发生过后1-3个时间单位内b会发生

                a##[1:$] b         --        a事件发生后的3个周期后B会发生

                c throughout (a##2 b)         --        在a成立到b成立的过程中,c一直成立

                

                @(posedge clk) a |-> b        --        clk上升沿,a事件发生,同时b发生。

                @(posedge clk) a.end|->b        --        clk上升沿,a发生结束后,b发生

                @(posedge clk) a |=>b        --        clk上升沿,a发生后,b在下一个clk发生

                @(posedge clk) a|=> ##2        --        clk上升沿,a发生后,b在下三个时钟沿发生

                @(posedge clk)a [*3]         --        a在连续的3个时钟沿都成立

                @(posedge clk)a [*1:3]         --        a在连续的1~3个时钟沿都成立

                @(posedge clk)a [->*3]         --        a在非连续的3个时钟沿都成立

         6.4 多时钟域的联合断言:能表示多个时钟域的之间的信号关系

                多时钟序列由单时钟序列通过延迟符号 ##1 连接而成。表示从第一个时钟序列的结束点,到第二个单时钟序列的起始点。

        6.5        总线的断言函数

                $onehot(expression):  在给定的时钟沿,表达式只有一位为高

                $onehot0(expression):  在给定的时钟沿,表达式只有一位为低,或没有高位

例子

property p5
    @(posedge clk) $ rose (start)|->##2 (a[*3])##2 stop ##1 !stop;
    endpriperty


其中a[*3]可以展开成:a##1 a ##1 a;

                

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SystemVerilog Assertion 应用指南电子版提供了对于SystemVerilog Assertion(SVA)在硬件验证中的应用的详细指导和建议。 SVA是一种在硬件验证中使用的特殊语言,用于对设计规范和行为进行验证。它与Verilog HDL结合使用,可以对设计中的时序和功能进行表达和验证。SVA在验证过程中可以帮助设计人员更好地发现和排除设计中的错误,并提高验证效率。 在SystemVerilog Assertion 应用指南电子版中,主要包括以下内容: 1. SVA基础知识:介绍SVA的语法和基本语句,包括property语句、assertion语句、sequence语句等。通过学习这些基础知识,读者可以了解SVA的基本用法和功能。 2. SVA高级应用:介绍一些复杂的SVA用法和技巧,如时序检查、复杂约束、错误定位等。这些高级应用可以帮助读者更好地应用SVA进行验证。 3. SVA调试技巧:提供了一些在验证过程中调试SVA的实用技巧和方法,帮助读者定位问题和提高调试效率。 4. SVA实例:给出了一些实际的SVA验证案例,在实例中展示了如何使用SVA进行验证,并提供了相关的代码和解释。 通过阅读SystemVerilog Assertion 应用指南电子版,读者可以全面了解SVA的应用和使用方法,掌握SVA在硬件验证中的关键技巧,提高验证效率和准确性。无论是初学者还是有一定经验的验证工程师,都可以从中获得实用的知识和指导,提高自己在硬件验证中的能力。 ### 回答2: SystemVerilog是一种硬件描述语言,它支持断言Assertion)的应用。系统级别验证是确保设计和验证的正确性的重要步骤,断言在此过程中起着关键作用。断言是一种用于描述设计预期行为和验证目标的形式规范。以下是SystemVerilog断言的应用指南。 1.断言语法:SystemVerilog提供了一种断言语言来描述设计和验证要求。断言语句使用assert、assume和cover等关键字来定义,可以包含条件表达式和时序属性。 2.时序属性:时序属性是断言的重要组成部分。它们描述了信号行为在时间上的相对顺序。SystemVerilog提供了丰富的时序属性,如延迟(delay)、周期周期(repeat)和到达(property)等。 3.设计验证目标:在使用断言时,首先需要明确验证目标。验证目标可以是功能、性能、时序或其他特定方面的需求。这有助于确定需要编写的断言类型和属性。 4.模块划分:将设计划分为多个模块可以更好地管理断言。根据设计功能不同,可以设计独立的断言来验证每个模块的功能。 5.调试和报告:SystemVerilog断言提供了一种检测设计错误的方法。在验证过程中,可以通过断言的报告和调试信息来定位错误。根据断言的触发条件和时序属性,可以确定错误出现的位置。 6.性能优化:断言的数量和复杂性可能会对验证过程产生负面影响。因此,应该根据设计的规模和复杂性进行性能优化,以确保验证效率。 7.仿真和形式验证:SystemVerilog断言可以用于仿真和形式验证。在仿真中,通过断言验证设计行为的正确性。在形式验证中,断言可以指导形式验证工具进行验证,以寻找潜在错误。 总结:使用SystemVerilog断言,可以更好地管理系统级别验证的过程。它提供了丰富的语法和时序属性,用于描述设计预期行为和验证目标。通过模块划分和性能优化,可以提高验证效率。同时,以断言为基础的调试和报告方法可以快速定位设计错误,从而加快验证过程。无论是在仿真还是形式验证中,断言都是验证流程中不可或缺的一部分。 ### 回答3: 《SystemVerilog 断言应用指南》是一本非常有用的电子书,旨在帮助工程师们更好地理解和应用 SystemVerilog 断言。以下是对该电子书的简要回答。 该电子书通过简单明了的方式解释了 SystemVerilog 断言的基本概念和语法,并提供了丰富的示例来帮助读者快速上手。它深入讲解了断言的不同类型和用法,例如基本断言、连续断言和并发断言等。对于初学者来说,这些示例有助于更好地理解断言在各种情况下的实际应用。 此外,该电子书还介绍了断言的调试技巧和最佳实践。通过详细讲解断言的调试过程和常见的问题,读者可以了解到如何有效地调试断言并解决相关问题。此外,最佳实践部分提供了一些建议和技巧,包括如何编写清晰、可读性强的断言以及如何在实际项目中集成断言等。 除了基本内容之外,这本电子书还提供了一些高级主题,如在面向对象设计中使用断言、如何使用参数化断言以及如何在验证环境中使用断言等。这些主题对于有一定经验的工程师来说非常有价值,可以帮助他们进一步提升断言的应用水平。 总的来说,《SystemVerilog 断言应用指南》是一本全面而实用的电子书,对于想要学习和应用 SystemVerilog 断言的工程师来说是一本不可或缺的参考书。无论你是初学者还是有经验的工程师,这本电子书都能够帮助你更好地理解和应用断言,并提升你的设计和验证能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值