SystemVerilog 3.1a 语言参考手册 PDF 文档

发布于 2023-04-07 18:02:30 字数 26601 浏览 137 评论 0

本参考手册详细描述了 Accellera 为使用 Verilog 硬件描述语言在更高的抽象层次上进行系统的建模和验证所作的扩展。

这些扩展将 Verilog 语言推向了系统级空间和验证级空间。SystemVerilog 构建于 IEEE Verilog 2001 委员会所作的工作之上。
在本参考手册中:

  • Verilog 或Verilog-2001 指的是 IEEE Std. 1364-2001 Verilog 硬件描述语言标准;
  • SystemVerilog 指的是 Accellera 对 Verilog-2001 标准所作的扩展。

在本参考手册中对 Verilog 语言的几个版本进行了如下的编号:

  • Verilog 1.0 指的是 IEEE Std. 1364-1995 Verilog 硬件描述语言标准,也被称作 Verilog-1995;
  • Verilog 2.0 指的是 IEEE Std. 1364-2001 Verilog 硬件描述语言标准,一般称之为 Verilog-2001。这一

版本的 Verilog 包含了自从 Verilog 在 1990 年向公共领域开放以来所作的首次具有革新意义的增强;

SystemVerilog 3.x 指的是 Verilog-2001 加上为在更高的抽象层次上进行系统建模和验证所作的扩展,也就是在本参考手册中描述的版本;

  • SystemVerilog 3.0 在 2002 年六月被批准为 Accellera 标准,主要针对高层结构建模进行了增强;
  • SystemVerilog 3.1 在 2003 年五月被批准为 Accellera 标准,主要针对高级验证和 C 语言集成进行了增强;
  • SystemVerilog 3.1a 在 2004 年四月被批准为 Accellera 标准,包括了对 SystemVerilog 3.1 手册所作的修正和解释。同时对 Verilog 进行了更多的增强,例如 SystemVerilog 结构的 VCD 和 PLI 规范等。

在 Accellera HDL+Technical 小组委员会的指导之下,Accellera 正在为增强 Verilog 进行着持续的努力。这个委员会也会在 SystemVerilog 3.1a 之上继续为 Verilog 进行更多的增强。

SystemVerilog 构建于 Verilog-2001 之上。SystemVerilog 改进了 Verilog 代码的生产率、可读性以及可重用性。

SystemVerilog 中的语言增强提供了更加简洁的硬件描述,同时又为 SystemVerilog 能够使用现存的工具进入当前的硬件实现流程提供了一个简单的途径。这些增强还为被控的测试平台开发、随机约束的测试平台开发、覆盖驱动的验证、以及基于断言的验证提供了广泛的支持。

第一章 SystemVerilog导论
第二章 文本值
2.1 简介(一般信息)
2.2 文本值语法
2.3 整数和逻辑文本
2.4 实数文本
2.5 时间文本
2.6 字符串文本
2.7 数组文本
2.8 结构体文本
第三章 数据类型
3.1 简介(一般信息)
3.2 数据类型语法
3.3 整数数据类型
3.3.1 integral类型
3.3.2 两态(两值)与四态(四值)数据类型
3.3.3 有符号与无符号数据类型
3.4 real与shortreal数据类型
3.5 void数据类型
3.6 chandle数据类型
3.7 string数据类型
3.7.1 len()
3.7.2 putc()
3.7.3 getc()
3.7.4 toupper()
3.7.5 tolower()
3.7.6 compare()
3.7.7 icompare()
3.7.8 substr(int i, int j)
3.7.9 atoi(), atohex(), atooct(), atobin()
3.7.10 atoreal()
3.7.11 itoa()
3.7.12 hextoa()
3.7.13 octtoa()
3.7.14 bintoa()
3.7.15 realtoa()
3.8 event数据类型
3.9 用户定义的类型
3.10 枚举
3.10.1 将新的数据类型定义成枚举类型
3.10.2 枚举类型的排列
3.10.3 类型检查
3.10.4 数值表达式中的枚举类型
3.10.4.1 first()
3.10.4.2 last()
3.10.4.3 next()
3.10.4.4 prev()
3.10.4.5 num()
3.10.4.6 name()
3.10.4.7 使用枚举类型的方法
3.11 结构体与联合体
3.12 类
3.13 单一类型与集合类型
3.14 强制类型转换
3.15 $cast动态强制类型转换
3.16 位流强制类型转换
第四章 数组
4.1 简介(一般信息)
4.2 压缩与非压缩数组
4.3 多维数组
4.4 数组的索引与分片
4.5 数组查询函数
4.6 动态数组
4.6.1 new[]
4.6.2 size()
4.6.3 delete()
4.7 数组赋值
4.8 将数组作为自变量
4.9 联合数组
4.9.1 通配符索引类型
4.9.2 字符串索引
4.9.3 类索引
4.9.4 integer(或int)索引
4.9.5 有符号的压缩数组
4.9.6 无符号压缩数组或压缩结构体
4.9.7 其它用户定义类型
4.10 联合数组方法
4.10.1 num()
4.10.2 delete()
4.10.3 exists()
4.10.4 first()
4.10.5 last()
4.10.6 next()
4.10.7 prev()
4.11 联合数组赋值
4.12 联合数组自变量
4.13 联合数组文本
4.14 队列
4.14.1 队列操作符
4.14.2 队列方法
4.14.2.1 size()
4.14.2.2 insert()
4.14.2.3 delete()
4.14.2.4 pop_front()
4.14.2.5 pop_back()
4.14.2.6 push_front()
4.14.2.7 push_back()
4.15 数组处理方法
4.15.1 数组定位符方法
4.15.2 数组排序方法
4.15.3 数组缩减方法
4.15.4 迭代器索引查询
第五章 数据声明
5.1 简介(一般信息)
5.2 数据声明语法
5.3 常量
5.4 变量
5.5 作用范围与生命周期
5.6 线网、reg、与logic
5.7 信号别名
5.8 类型兼容性
5.8.1 等价类型
5.8.2 赋值兼容
5.8.3 强制转换兼容
5.8.4 类型非兼容性
第六章 属性
6.1 简介(一般信息)
6.2 缺省属性类型
第七章 操作符与表达式
7.1 简介(一般信息)
7.2 操作符语法
7.3 赋值操作符
7.4 对logic和bit类型的操作
7.5 通配等式与通配不等式
7.6 实操作符
7.7 尺寸
7.8 符号
7.9 操作符优先级与关联性
7.10 内建方法
7.10.1 内建包
7.11 静态前缀
7.12 串联
7.13 非压缩数组表达式
7.14 结构体表达式
7.15 标签联合体表达式与成员访问
7.16 集合表达式
7.17 操作符过载
7.18 流操作符(压缩/非压缩)
7.18.1 将动态尺寸的数据位流化
7.19 条件操作符
7.20 集合成员资格
第八章 过程语句和控制流
8.1 简介(一般信息)
8.2 语句
8.3 阻塞赋值与无阻塞赋值
8.4 选择语句
8.4.1 模式匹配
8.4.1.1 case语句中的模式匹配
8.4.1.2 if语句中的模式匹配
8.4.1.3 条件表达式中的模式匹配
8.5 循环语句
8.5.1 do...while循环
8.5.2 循环的增强
8.5.3 foreach循环
8.6 跳转语句
8.7 final块
8.8 命名块与语句标签
8.9 disable
8.10 事件控制
8.10.1 序列事件
8.11 电平敏感的序列控制
8.12 过程赋值与解赋值的移除
第九章 进程
9.1 简介(一般信息)
9.2 组合逻辑
9.2.1 隐含的always_comb敏感性
9.3 锁存逻辑
9.4 时序逻辑
9.5 连续赋值
9.6 fork...join
9.7 进程执行线程
9.8 进程控制
9.8.1 wait fork
9.8.2 disable fork
9.9 精细的进程控制
第十章 任务与函数
10.1 简介(一般信息)
10.2 任务
10.3 函数
10.3.1 返回值与void函数
10.3.2 丢弃函数返回值
10.4 任务与函数的参数传递
10.4.1 通过值传递
10.4.2 通过引用传递
10.4.3 缺省参数值
10.4.4 通过名字传递参数
10.4.5 可选的参数列表
10.5 导入与导出函数
第十一章 类
11.1 简介
11.2 语法
11.3 概述
11.4 对象(类实例)
11.5 对象属性
11.6 对象方法
11.7 构造器
11.8 静态类属性
11.9 静态方法
11.10 this
11.11 赋值、重命名与拷贝
11.12 继承与子类
11.13 过载成员
11.14 super
11.15 强制类型转换
11.16 串接构造器
11.17 数据隐藏与封装
11.18 常量类属性
11.19 抽象类与虚拟方法
11.20 多态性:动态方法查找
11.21 类范围解析操作符 ::
11.22 块外声明
11.23 参数化的类
11.24 typedef类
11.25 类与结构体
11.26 内存管理
第十二章 随机约束
12.1 简介(一般信息)
12.2 概述
12.3 随机变量
12.3.1 rand修饰符
12.3.2 randc修饰符
12.4 约束块
12.4.1 外部约束块
12.4.2 继承
12.4.3 集合成员资格
12.4.4 分布
12.4.5 蕴含
12.4.6 if...else约束
12.4.7 迭代约束
12.4.8 全局约束
12.4.9 变量排序
12.4.10 静态约束块
12.4.11 约束中的函数
12.4.12 约束守卫者
12.5 随机化方法
12.5.1 randomize()
12.5.2 pre_randomize()与post_randomize()
12.5.3 随机化方法注意事项
12.6 内联约束 — randomize() with
12.7 使用rand_mode()关闭随机变量
12.8 使用constraint_mode()控制约束
12.9 动态的约束修改
12.10 内联随机变量控制
12.10.1 内联约束检查器
12.11 范围变量的随机化 — std::randomize()
12.11.1 为范围变量添加约束 — std::randomize() with
12.12 随机数系统函数与方法
12.12.1 $urandom
12.12.2 $urandom_range()
12.12.3 srandom()
12.12.4 get_randstate()
12.12.5 set_randstate()
12.13 随机稳定性
12.13.1 随机稳定性的特性
12.13.2 线程稳定性
12.13.3 对象稳定性
12.14 为随机化手工设置种子
12.15 随机加权的条件 — randcase
12.16 随机序列产生 — randsequence
12.16.1 随机生成式权重
12.16.2 If...else生成式语句
12.16.3 case生成式语句
12.16.4 repeat生成式语句
12.16.5 交叉生成式 — rand join
12.16.6 中止生成式 — break和return
12.16.7 生成式间的值传递
第十三章 进程间的同步与通信
13.1 简介(一般信息)
13.2 semaphore
13.2.1 new()
13.2.2 put()
13.2.3 get()
13.2.4 try_get()
13.3 mailbox
13.3.1 new()
13.3.2 num()
13.3.3 put()
13.3.4 try_put()
13.3.5 get()
13.3.6 try_get()
13.3.7 peek()
13.3.8 try_peek()
13.4 参数化的mailbox
13.5 事件
13.5.1 触发一个事件
13.5.2 无阻塞的事件触发
13.5.3 等待一个事件
13.5.4 稳固的触发:触发特性
13.6 事件排序:wait_order()
13.7 事件变量
13.7.1 合并事件
13.7.2 回收事件
13.7.3 事件比较
第十四章 调度语义
14.1 硬件模型的执行及其验证环境
14.2 事件仿真
14.3 分层的事件调度器
14.3.1 SystemVerilog仿真参考算法
14.4 PLI回调控制点
第十五章 时钟控制块
15.1 简介(一般信息)
15.2 时钟控制块声明
15.3 输入时滞与输出时滞
15.4 层次化的表达式
15.5 多时钟控制块中的信号
15.6 时钟控制块的作用范围和生命周期
15.7 多时钟控制块的例子
15.8 接口与时钟控制块
15.9 时钟控制块事件
15.10 周期延时:##
15.11 缺省时钟控制
15.12 输入采样
15.13 同步的事件
15.14 同步的驱动
15.14.1 驱动和无阻塞赋值
15.14.2 驱动值解析
第十六章 程序块
16.1 简介(一般信息)
16.2 程序结构
16.3 多个程序
16.4 消除测试平台的竞争
16.4.1 零时滞时钟控制块竞争
16.5 阻塞周期/事件模式下的任务
16.6 程序控制任务
16.6.1 $exit()
第十七章 断言
17.1 简介(一般信息)
17.2 即时断言
17.3 并发断言概述
17.4 布尔表达式
17.4.1 操作数类型
17.4.2 变量
17.4.3 操作符
17.5 序列
17.6 声明序列
17.7 序列操作
17.7.1 操作符优先级
17.7.2 序列中的复制
17.7.3 采样值函数
17.7.4 与操作
17.7.5 交集(具有长度限制的与操作)
17.7.6 或操作
17.7.7 first_match操作
17.7.8 序列上的条件
17.7.9 包含在另外一个序列中的序列
17.7.10 一个序列结束点的检测和使用
17.8 处理一个序列中的数据
17.9 在一个序列匹配时调用子程序
17.10 系统函数
17.11 声明特性
17.11.1 蕴含
17.11.2 特性的例子
17.11.3 递归特性
17.11.4 有限长度与无限长度行为
17.11.5 Non-degeneracy
17.12 多时钟的支持
17.12.1 多时钟控制序列
17.12.2 多时钟控制特性
17.12.3 时钟流
17.12.4 例子
17.12.5 在多时钟语境中检测和使用一个序列的结束点
17.13 并发断言
17.13.1 断言语句
17.13.2 假设语句
17.13.3 覆盖语句
17.13.4 在过程化代码外部使用并发断言语句
17.13.5 在过程化代码中嵌入并发断言
17.14 时钟解析
17.14.1 在多时钟控制特性中的时钟解析
17.15 将特性绑定到作用域或实例
17.16 expect语句
第十八章 层次
18.1 简介(一般信息)
18.2 包
18.2.1 引用包中的数据
18.2.2 搜索顺序规则
18.3 编译单元的支持
18.4 顶层实例
18.5 模块声明
18.6 嵌套的模块
18.7 外部模块
18.8 端口声明
18.9 端口表达式列表
18.10 时间单位与精度
18.11 模块实例
18.11.1 Instantiation using positional port connections
18.11.2 Instantiation using named port connections
18.11.3 Instantiation using implicit .name port connections
18.11.4 Instantiation using implicit .* port connections
18.12 端口连接规则
18.12.1 变量的端口连接规则
18.12.2 线网的端口连接规则
18.12.3 接口的端口连接规则
18.12.4 兼容的端口类型
18.12.5 非压缩数组端口与实例数组
18.13 命名空间
18.14 层次化的名字
第十九章 接口
19.1 简介(一般信息)
19.2 接口语法
19.2.1 Example without using interfaces
19.2.2 Interface example using a named bundle
19.2.3 Interface example using a generic bundle
19.3 接口中的端口
19.4 modport
19.4.1 An example of a named port bundle
19.4.2 An example of connecting a port bundle
19.4.3 An example of connecting a port bundle to a generic interface
19.4.4 Modport expressions
19.4.5 Clocking blocks and modports
19.5 接口与specify块
19.6 接口中的任务与函数
19.6.1 An example of using tasks in an interface
19.6.2 An example of using tasks in modports
19.6.3 An example of exporting tasks and functions
19.6.4 An example of multiple task exports
19.7 参数化接口
19.8 虚拟接口
19.8.1 Virtual interfaces and clocking blocks
19.8.2 Virtual interfaces modports and clocking blocks
19.9 对接口对象的访问
第二十章 覆盖
20.1 简介(一般信息)
20.2 定义覆盖模型:covergroup
20.3 在类中使用covergroup
20.4 定义覆盖点
20.4.1 Specifying bins for transitions
20.4.2 Automatic bin creation for coverage points
20.4.3 Wildcard specification of coverage point bins
20.4.4 Excluding coverage point values or transitions
20.4.5 Specifying Illegal coverage point values or transitions
20.5 Defining cross coverage
20.5.1 Example of user-defined cross coverage and select expressions
20.5.2 Excluding cross products
20.5.3 Specifying Illegal cross products
20.6 Specifying coverage options
20.6.1 Covergroup Type Options
20.7 Predefined coverage methods
20.8 Predefined coverage system tasks and functions
20.9 Organization of option and type_option members
第二十一章 参数
21.1 简介(一般信息)
21.1.1 defparam语句的删除
21.2 参数声明语法
第二十二章 配置库
22.1 简介(一般信息)
22.2 库
第二十三章 系统任务与系统函数
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.15.1 读取压缩的数据
23.15.2 读取两态类型
23.16 $writememb and $writememh
23.16.1 Writing packed data
23.16.2 Writing 2-state types
23.16.3 Writing addresses to output file
23.17 File format considerations for multi-dimensional unpacked arrays
23.18 System task arguments for multi-dimensional unpacked arrays
第二十四章 VCD数据
第二十五章 编译器指令
25.1 简介(一般信息)
25.2 `define宏
25.3 `include
第二十六章 考虑从SystemVerilog中删除的功能
26.1 简介(一般信息)
26.2 defparam语句
26.3 过程赋值与解赋值语句
第二十七章 直接编程接口(DPI)
27.1 概述
27.1.1 Tasks and functions
27.1.2 Data types
27.1.2.1 Data representation
27.2 Two layers of the DPI
27.2.1 DPI SystemVerilog layer
27.2.2 DPI foreign language layer
27.3 Global name space of imported and exported functions
27.4 导入的任务和函数
27.4.1 Required properties of imported tasks and functions — semantic constraints
27.4.1.1 Instant completion of imported functions
27.4.1.2 input, output and inout arguments
27.4.1.3 Special properties pure and context
27.4.1.4 Memory management
27.4.1.5 Reentrancy of imported tasks
27.4.1.6 C++ exceptions
27.4.2 Pure functions
27.4.3 Context tasks and functions
27.4.4 Import declarations
27.4.5 Function result
27.4.6 形式参数的类型
27.4.6.1 开放数组
27.5 Calling imported functions
27.5.1 Argument passing
27.5.1.1 “What You Specify Is What You Get” principle
27.5.2 Value changes for output and inout arguments
27.6 Exported functions
27.7 Exported tasks
27.8 Disabling DPI tasks and functions
第二十八章 SystemVerilog断言API
28.1 需求
28.1.1 命名约定
28.2 Extensions to VPI enumerations
28.2.1 Object types
28.2.2 Object properties
28.2.3 Callbacks
28.2.4 Control constants
28.3 Static information
28.3.1 Obtaining assertion handles
28.3.2 Obtaining static assertion information
28.3.2.1 Using vpi_get_assertion_info
28.3.2.2 Extending vpi_get() and vpi_get_str()
28.4 Dynamic information
28.4.1 Placing assertion system callbacks
28.4.2 Placing assertions callbacks
28.5 Control functions
28.5.1 Assertion system control
28.5.2 Assertion control
第二十九章 SystemVerilog覆盖API
29.1 需求
29.1.1 SystemVerilog API
29.1.2 Naming conventions
29.1.3 Nomenclature
29.2 SystemVerilog real-time coverage access
29.2.1 Predefined coverage constants in SystemVerilog
29.2.2 Built-in coverage access system functions
29.2.2.1 $coverage_control
29.2.2.2 $coverage_get_max
29.2.2.3 $coverage_get
29.2.2.4 $coverage_merge
29.2.2.5 $coverage_save
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
29.4.1 VPI entity/relation diagrams related to coverage
29.4.2 Extensions to VPI enumerations
29.4.3 Obtaining coverage information
29.4.4 Controlling coverage
第三十章 SystemVerilog数据读API
30.1 简介(一般信息)
30.2 需求
30.3 Extensions to VPI enumerations
30.3.1 Object types
30.3.2 Object properties
30.3.2.1 Static info
30.3.2.2 Dynamic info
30.3.2.2.1 Control constants
30.3.3 System callbacks
30.4 VPI object type additions
30.4.1 Traverse object
30.4.2 VPI collection
30.4.2.1 Operations on collections
30.5 Object model diagrams
30.6 Usage extensions to VPI routines
30.7 VPI routines added in SystemVerilog
30.8 Reading data
30.8.1 VPI read initialization and load access initialization
30.8.2 Object selection for traverse access
30.8.3 Optionally loading objects
30.8.3.1 Iterating the design for the loaded objects
30.8.3.2 Iterating the object collection for its member objects
30.8.4 Reading an object
30.8.4.1 Traversing value changes of objects
30.8.4.2 Jump Behavior
30.8.4.3 Dump off regions
30.8.5 Sample code using object (and traverse) collections
30.8.6 Object-based traversal
30.8.7 Time-ordered traversal
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.1.1 库源文本
A.1.2 配置源文本
A.1.3 模块和原语源文本
A.1.4 模块参数和端口
A.1.5 模块条目
A.1.6 接口条目
A.1.7 程序条目
A.1.8 类条目
A.1.9 Constraints
A.1.10 Package items
A.2 声明
A.2.1 声明类型
A.2.1.1 模块参数声明
A.2.1.2 Port declarations
A.2.1.3 Type declarations
A.2.2 Declaration data types
A.2.2.1 Net and variable types
A.2.2.2 Strengths
A.2.2.3 Delays
A.2.3 Declaration lists
A.2.4 Declaration assignments
A.2.5 Declaration ranges
A.2.6 Function declarations
A.2.7 Task declarations
A.2.8 Block item declarations
A.2.9 Interface declarations
A.2.10 Assertion declarations
A.2.11 Covergroup declarations
A.3 Primitive instances
A.3.1 Primitive instantiation and instances
A.3.2 Primitive strengths
A.3.3 Primitive terminals
A.3.4 Primitive gate and switch types
A.4 Module, interface and generated instantiation
A.4.1 Instantiation
A.4.1.1 Module instantiation
A.4.1.2 Interface instantiation
A.4.1.3 Program instantiation
A.4.2 Generated instantiation
A.4.2.1 Generated module instantiation
A.4.2.2 Generated interface instantiation
A.5 UDP declaration and instantiation
A.5.1 UDP declaration
A.5.2 UDP ports
A.5.3 UDP body
A.5.4 UDP 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.7.1 Patterns
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.7.1 Specify block declaration
A.7.2 Specify path declarations
A.7.3 Specify block terminals
A.7.4 Specify path delays
A.7.5 System timing checks
A.7.5.1 System timing check commands
A.7.5.2 System timing check command arguments
A.7.5.3 System timing check event definitions
A.8 Expressions
A.8.1 Concatenations
A.8.2 Subroutine calls
A.8.3 Expressions
A.8.4 Primaries
A.8.5 Expression left-side values
A.8.6 Operators
A.8.7 Numbers
A.8.8 Strings
A.9 General
A.9.1 Attributes
A.9.2 Comments
A.9.3 Identifiers
A.9.4 White space
A.10 Footnotes (normative)
附录B 关键字
附录C 标准包
C.1 semaphore
C.2 mailbox
C.3 randomize
C.4 进程
附录D 链表
D.1 List definitions
D.2 List declaration
D.2.1 Declaring list variables
D.2.2 Declaring list iterators
D.3 Linked list class prototypes
D.3.1 List_Iterator class prototype
D.3.2 List class prototype
D.4 List_Iterator methods
D.4.1 next()
D.4.2 prev()
D.4.3 eq()
D.4.4 neq()
D.4.5 data()
D.5 List methods
D.5.1 size()
D.5.2 empty()
D.5.3 push_front()
D.5.4 push_back()
D.5.5 front()
D.5.6 back()
D.5.7 pop_front()
D.5.8 pop_back()
D.5.9 start()
D.5.10 finish()
D.5.11 insert()
D.5.12 insert_range()
D.5.13 erase()
D.5.14 erase_range()
D.5.15 set()
D.5.16 swap()
D.5.17 clear()
D.5.18 purge()
附录E DPI C-layer
E.1 概述
E.2 Naming conventions
E.3 Portability
E.3.1 Binary compatibility
E.3.2 Source-level compatibility
E.4 Include files
E.4.1 svdpi.h include file
E.4.2 svdpi_src.h include file
E.5 Semantic constraints
E.5.1 Types of formal arguments
E.5.2 input arguments
E.5.3 output arguments
E.5.4 Value changes for output and inout arguments
E.5.5 context and non-context tasks and functions
E.5.6 pure functions
E.5.7 Memory management
E.6 Data types
E.6.1 Limitations
E.6.2 Duality of types: SystemVerilog types vs. C types
E.6.3 Data representation
E.6.4 Basic types
E.6.5 Normalized ranges
E.6.6 Mapping between SystemVerilog ranges and normalized ranges
E.6.7 Canonical representation of packed arrays
E.7 Argument passing modes
E.7.1 Overview
E.7.2 Calling SystemVerilog tasks and functions from C
E.7.3 Argument passing by value
E.7.4 Argument passing by reference
E.7.5 Allocating actual arguments for SystemVerilog-specific types
E.7.6 Argument passing by handle—open arrays
E.7.7 input arguments
E.7.8 inout and output arguments
E.7.9 Function result
E.8 Context tasks and functions
E.8.1 Overview of DPI and VPI context
E.8.2 Context of imported and export tasks and functions
E.8.3 Working with DPI context tasks and functions in C code
E.8.4 Example 1 — Using DPI context functions
E.8.5 Relationship between DPI and VPI/PLI interfaces
E.9 Include files
E.9.1 Binary compatibility include file svdpi.h
E.9.1.1 Scalars of type bit and logic
E.9.1.2 Canonical representation of packed arrays
E.9.1.3 Implementation-dependent representation
E.9.1.4 Translation between the actual representation and the canonical representation
E.9.2 Source-level compatibility include file svdpi_src.h
E.9.3 Example 2 — binary compatible application
E.9.4 Example 3— source-level compatible application
E.10 Arrays
E.10.1 Multidimensional arrays
E.10.2 Direct access to unpacked arrays
E.10.3 Access to packed arrays via canonical representation
E.10.3.1 Bit selects
E.10.3.2 Part selects
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 包含文件
F.1 Binary-level compatibility include file svdpi.h
F.2 源级兼容性包含文件svdpi_src.h
附录G 包含外部语言代码
G.1 Location independence
G.2 Object code inclusion
G.2.1 Bootstrap file
G.2.2 Examples
附录H 并发断言的形式语义
H.1 简介
H.2 抽象语法
H.2.1 Abstract grammars
H.2.2 Notations
H.2.3 Derived forms
H.2.3.1 Derived non-overlapping implication operator
H.2.3.2 Derived consecutive repetition operators
H.2.3.3 Derived delay and concatenation operators
H.2.3.4 Derived non-consecutive repetition operators
H.2.3.5 Other derived operators
H.3 语义
H.3.1 Rewrite rules for clocks
H.3.2 Tight satisfaction without local variables
H.3.3 Satisfaction without local variables
H.3.3.1 Neutral satisfaction
H.3.3.2 Weak and strong satisfaction by finite words
H.3.4 Local variable flow
H.3.5 Tight satisfaction with local variables
H.3.6 Satisfaction with local variables
H.3.6.1 Neutral satisfaction
H.3.6.2 Weak and strong satisfaction by finite words
H.4 Extended Expressions
H.4.1 Extended booleans
H.4.2 Past
H.5 Recursive Properties
附录I sv_vpi_user.h
附录J 术语表
集合
断言
Bit-stream
Canonical representation
Constant
Context imported task
Disable protocol
DPI
Dynamic
Elaboration
枚举类型
Exported task
Imported task
Interface
Integral
LRM
Open array
Packed array
进程
信号
单一类型(Singular)
SystemVerilog
非压缩数组(Unpacked array)
Verilog
VPI
附录K 参考书目

下载地址:https://www.wenjiangs.com/wp-content/uploads/staticcdn/pdf/d37c5fe1-6cb229b5.zip

在线阅读:https://www.wenjiangs.com/docs/ieee-systemverilog

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

文章
评论
84962 人气
更多

推荐作者

泪是无色的血

文章 0 评论 0

yriii2

文章 0 评论 0

1649543945

文章 0 评论 0

g红火

文章 0 评论 0

嘿哥们儿

文章 0 评论 0

旧城烟雨

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文