- 第一章 SystemVerilog导论
- 第二章 文本值
- 第三章 数据类型
- 第四章 数组
- 第五章 数据声明
- 第六章 属性
- 第七章 操作符与表达式
- 第八章 过程语句和控制流
- 第九章 进程
- 第十章 任务与函数
- 第十一章 类
- 第十二章 随机约束
- 第十三章 进程间的同步与通信
- 第十四章 调度语义
- 第十五章 时钟控制块
- 第十六章 程序块
- 第十七章 断言
- 第十八章 层次
- 第十九章 接口
- 第二十章 覆盖
- 第二十一章 参数
- 第二十二章 配置库
- 第二十三章 系统任务与系统函数
- 23.1 简介(一般信息)
- 23.2 确立时的typeof函数
- 23.3 typename函数
- 23.4 表达式尺寸系统函数
- 23.5 范围系统函数
- 23.6 Shortreal转换
- 23.7 数组查询系统函数
- 23.8 断言严重性系统任务
- 23.9 断言控制系统任务
- 23.10 断言系统函数
- 23.11 随机数系统函数
- 23.12 程序控制
- 23.13 覆盖系统函数
- 23.14 对Verilog-2001系统任务的增强
- 23.15 $readmemb与$readmemh
- 23.16 $writememb and $writememh
- 23.17 File format considerations for multi-dimensional unpacked arrays
- 23.18 System task arguments for multi-dimensional unpacked arrays
- 第二十四章 VCD数据
- 第二十五章 编译器指令
- 第二十六章 考虑从SystemVerilog中删除的功能
- 第二十七章 直接编程接口(DPI)
- 27.1 概述
- 27.2 Two layers of the DPI
- 27.3 Global name space of imported and exported functions
- 27.4 导入的任务和函数
- 27.5 Calling imported functions
- 27.6 Exported functions
- 27.7 Exported tasks
- 27.8 Disabling DPI tasks and functions
- 第二十八章 SystemVerilog断言API
- 第二十九章 SystemVerilog覆盖API
- 29.1 需求
- 29.2 SystemVerilog real-time coverage access
- 29.3 FSM recognition
- 29.3.1 Specifying the signal that holds the current state
- 29.3.2 Specifying the part-select that holds the current state
- 29.3.3 Specifying the concatenation that holds the current state
- 29.3.4 Specifying the signal that holds the next state
- 29.3.5 Specifying the current and next state signals in the same declaration
- 29.3.6 Specifying the possible states of the FSM
- 29.3.7 Pragmas in one-line comments
- 29.3.8 Example
- 29.4 VPI coverage extensions
- 第三十章 SystemVerilog数据读API
- 30.1 简介(一般信息)
- 30.2 需求
- 30.3 Extensions to VPI enumerations
- 30.4 VPI object type additions
- 30.5 Object model diagrams
- 30.6 Usage extensions to VPI routines
- 30.7 VPI routines added in SystemVerilog
- 30.8 Reading data
- 30.9 Optionally unloading the data
- 30.10 Reading data from multiple databases and/or different read library providers
- 30.11 VPI routines extended in SystemVerilog
- 30.12 VPI routines added in SystemVerilog
- 30.12.1 VPI reader routines
- 第三十一章 SystemVerilog VPI Object Model
- 31.1 简介(一般信息)
- 31.2 Instance
- 31.3 Interface
- 31.4 Program
- 31.5 Module (supersedes IEEE 1364-2001 26.6.1)
- 31.6 Modport
- 31.7 Interface tf decl
- 31.8 Ports (supersedes IEEE 1364-2001 26.6.5)
- 31.9 Ref Obj
- 31.9.1 Examples
- 31.10 Variables (supersedes IEEE 1364-2001 section 26.6.8)
- 31.11 Var Select (supersedes IEEE 1364-2001 26.6.8)
- 31.12 Typespec
- 31.13 Variable Drivers and Loads (supersedes IEEE 1364-2001 26.6.23)
- 31.14 Instance Arrays (supersedes IEEE 1364-2001 26.6.2)
- 31.15 Scope (supersedes IEEE 1364-2001 26.6.3)
- 31.16 IO Declaration (supersedes IEEE 1364-2001 26.6.4)
- 31.17 Clocking Block
- 31.18 Class Object Definition
- 31.19 Constraint, constraint ordering, distribution,
- 31.20 Constraint expression
- 31.21 Class Variables
- 31.22 Structure/Union
- 31.23 Named Events (supersedes IEEE 1364-2001 26.6.11)
- 31.24 Task, Function Declaration (supersedes IEEE 1364-2001 26.6.18)
- 31.25 Alias Statement
- 31.25.1 Examples
- 31.26 Frames (supersedes IEEE 1364-2001 26.6.20)
- 31.27 Threads
- 31.28 tf call (supersedes IEEE 1364-2001 26.6.19)
- 31.29 Module path, path term (supersedes IEEE 1364-2001 26.6.15)
- 31.30 Concurrent assertions
- 31.31 Property Decl
- 31.32 Property Specification
- 31.33 Multiclock Sequence Expression
- 31.34 Sequence Declaration
- 31.35 Sequence Expression
- 31.36 Attribute (supersedes IEEE 1364-2001 26.6.42)
- 31.37 Atomic Statement (supersedes IEEE 1364-2001 26.6.27)
- 31.38 If, if else, return, case, do while (supersedes IEEE 1364-2001 26.6.35, 26.6.36)
- 31.39 waits, disables, expect, foreach (supersedes IEEE 1364 26.6.38)
- 31.40 Simple expressions (supersedes IEEE 1364-2001 26.6.25)
- 31.41 Expressions (supersedes IEEE 1364-2001 26.6.26)
- 31.42 Event control (supersedes IEEE 1364-2001 26.6.30)
- 31.43 Event stmt (supersedes IEEE 1364-2001 26.6.27)
- 31.44 Process (supersedes IEEE 1364-2001 26.6.27)
- 31.45 Assignment (supersedes IEEE 1364-2001 26.6.28)
- 附录A 形式语法
- A.1 源文本
- A.2 声明
- A.3 Primitive instances
- A.4 Module, interface and generated instantiation
- A.5 UDP declaration and instantiation
- A.6 Behavioral statements
- A.6.1 Continuous assignment and net alias statements
- A.6.2 Procedural blocks and assignments
- A.6.3 Parallel and sequential blocks
- A.6.4 Statements
- A.6.5 Timing control statements
- A.6.6 Conditional statements
- A.6.7 Case statements
- A.6.8 Looping statements
- A.6.9 Subroutine call statements
- A.6.10 Assertion statements
- A.6.11 Clocking block
- A.6.12 Randsequence
- A.7 Specify section
- A.8 Expressions
- A.9 General
- A.10 Footnotes (normative)
- 附录B 关键字
- 附录C 标准包
- 附录D 链表
- 附录E DPI C-layer
- E.1 概述
- E.2 Naming conventions
- E.3 Portability
- E.4 Include files
- E.5 Semantic constraints
- E.6 Data types
- E.7 Argument passing modes
- E.8 Context tasks and functions
- E.9 Include files
- E.10 Arrays
- E.11 Open arrays
- E.11.1 Actual ranges
- E.11.2 Array querying functions
- E.11.3 Access functions
- E.11.4 Access to the actual representation
- E.11.5 Access to elements via canonical representation
- E.11.6 Access to scalar elements (bit and logic)
- E.11.7 Access to array elements of other types
- E.11.8 Example 4— two-dimensional open array
- E.11.9 Example 5 — open array
- E.11.10 Example 6 — access to packed arrays
- E.11.11 Example 7 — binary compatible calls of exported functions
- 附录F 包含文件
- 附录G 包含外部语言代码
- 附录H 并发断言的形式语义
- 附录I svvpiuser.h
- 附录J 术语表
- 附录K 参考书目
- 其他
文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
第十七章 断言
主题
链接 主题
主题 | 描述 |
17.1 简介(一般信息) | SystemVerilog加入了为一个系统指定断言的功能。断言说明了系统的一个行为。断言主要用来验证一个设计的行为。另外,断言可以被用来提供功能覆盖以及产生验证的输入激励。 SystemVerilog具有两种类型的断言:并发断言和即时断言。
|
17.2 即时断言 | 即时断言语句是一个表达式的测试,当语句在程序代码中执行的时候完成。表达式是非时间的,并且按一个过程化if语句的条件中的表达式相同的方式解释。也就是说,如果表达式计算成X、Z或0,那么它被解释成假并且认为断言失败。否则,表达式被解释成真,并且认为断言通过。 即时断言语句是一个statement_item,并且可以在一个过程化语句被说明的任意地方说明。 |
17.3 并发断言概述 | 并发断言描述了贯穿时间的行为。与即时断言基于时钟的计算模型不同,并发断言仅在一个时钟标记出现的时候被计算。在计算中使用的变量值是采样的值。通过这种方式,我们可以获得一个可预测的结果,而不管仿真器内部的对事件进行排序和计算的机制如何。这种模型也对应于从RTL描述获得的硬件解释的综合模型。 断言中使用的变量值在一个时隙的Preponed区域被采样,并且断言在Observe区域被计算。这一点在第十四章 调度语义中解释。 一个并发断言规范采用的时序模型基于时钟标记并使用一个通用的时钟周期概念。一个时钟的定义由用户明确地说明并且在表达式之间可以存在不同。 一个时钟标记是时间上的一个原子瞬间,它本身并不具有在时间上的持续期。在任意仿真时间,一个时钟应该只标记一次,并且在这个仿真时间上采样的值被用于当前断言的计算。在一个断言中,采样值是一个时钟标记上变量唯一有效的值。图17-1显示了随着时钟的推进一个变量的值。在时钟标记1和2,req信号的值是低。在时钟标记3,采样的值为高并保持为高直到时钟标记6。变量req在时钟标记6处的采样值为低并保持为低直到时钟标记10。注意,仿真值跃变到高发生在时钟标记9。然而,时钟标记9处的采样值仍为低。
控制序列计算的时钟表达式可以比仅仅是单一的信号名更加复杂。诸如(clk && gating_signal)和(clk iff gating_signal)之类的表达式可以被用来代表一个门时钟。其它更加复杂的表达式也是可能的。然而,为了确保正确的系统行为并尽可能真正地符合基于周期的语义,一个时钟表达式中的信号必须是无毛刺的,并且在任何仿真时间只能跃变一次。 |
17.4 布尔表达式 | 在序列中使用的表达式针对表达式中出现的变量的采样值进行计算。一个表达式计算的结果是布尔值,并且与一个过程化if语句中条件表达式的解释方式相同。也就是说,如果表达式计算成X、Z、或0,那么它被解释成“假”。否则解释成“真”。 出现在并发断言中的表达式存在某些限制。对操作数类型、变量和操作符的限制在后续的章节中描述。 表达式可以包含函数调用,但存在某些语义限制。
|
17.5 序列 | |
17.6 声明序列 | 一个序列可以在下列单元中声明:
序列使用下列的语法进行声明: |
17.7 序列操作 | |
17.8 处理一个序列中的数据 | 使用一个SystemVerilog静态变量意味着仅存在它的一份拷贝。如果需要在流水线设计中检查数据值,那么对于每一个进入流水线的数据量值,我们可以使用一个单独的变量来存储预期的流水线输出,以便在真正退出管线的时候比较结果。这个存储空间可以通过使用一个变量数组来构建,并且为了最小化通过流水线的传播这个数组可以安排在一个移位寄存器中。然而,在一些更为复杂的情况下,例如管线的潜伏期是可变的并且是乱序的,那么这种结构可能就变得非常复杂并且容易出错。因此,我们需要一些局部变量,这些变量在一个特定的、能够跨越任意时间间隔的事务检查中使用,并且能够与其它事务检查重叠。所以,这样的一个变量必须能够在需要的时候在一个序列实例中动态地产生并能在序列结束的时候移除。 一个变量的动态产生极其赋值是通过在一个序列或特性声明中使用局部变量声明并在序列中赋值来实现的。 |
17.9 在一个序列匹配时调用子程序 | 任务、任务方法、void函数、void函数方法以及系统任务可以在一个序列成功匹配的结束处调用。子程序调用,例如局部变量赋值,出现在紧跟着序列的以逗号分割的列表中。子程序调用被称为附加到序列。序列以及之后的列表以括号包围。 |
17.10 系统函数 | 断言一般被用来计算一个设计实现的某些特定属性,例如一个特定的信号是否为“热点(one-hot)”。SystemVerilog中包含下列系统函数来促进这些基本的断言功能:
所有上述的系统函数都具有一个bit类型的返回值。1'b1的返回值指示“真”,1'b0的返回值指示“假”。 |
17.11 声明特性 | 一个特性定义了设计的一个行为。一个特性可以作为一个假设、一个检查器或者一个覆盖率规范被用于验证。为了将这种行为用于验证,必须使用一个断言、假设或者覆盖语句。一个特性声明本身不会产生任何结果。 一个特性可以在下列结构中声明:
为了声明一个特性,我们可以使用如下所示的property结构: |
17.12 多时钟的支持 | 多时钟序列和特性可以使用下列的语法说明。 |
17.13 并发断言 | A property on its own is never evaluated for checking an expression. It must be used within a verification statement for this to occur. A verification statement states the verification function to be performed on the property. The statement can be one of the following:
A concurrent assertion statement can be specified in:
|
17.14 时钟解析 | SystemVerilog具有多种方法为一个特性指定时钟。 — 具有一个时钟的序列实例,例如: |
17.15 将特性绑定到作用域或实例 | To facilitate verification separate from the design, it is possible to specify properties and bind them to specific modules or instances. The following are the goals of providing this feature:
|
17.16 expect语句 | The expect statement is a procedural blocking statement that allows waiting on a property evaluation. The syntax of the expect statement accepts a named property or a property declaration, and is given below. |
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论