system verilog 标准阅读笔记-IEEE Standard for SystemVerilog

SystemVerilog是建立在IEEE Std 1364之上的。SystemVerilog提高了基于Verilog的代码的生产率、可读性和可重用性。SystemVerilog中的语言增强提供了更简洁的硬件描述,同时还提供了使用现有工具进入当前硬件实现流的简单路径。这些增强还为定向和约束随机测试台开发、覆盖驱动验证和基于断言的验证提供了广泛的支持。

本标准中使用的惯例

这个标准被组织成条款,每个条款侧重于语言的特定领域。每个子条款中都有子条款来讨论各个构造和概念。讨论从介绍和可选的构造或概念的基本原理开始,接着是语法和语义描述,接着是示例和注释。

本标准中使用的术语惯例如下:

-该词用于表示严格遵守的强制性要求,以符合标准,不允许有任何偏差(应等于要求)。

-这个词应该用来表示,在几种可能性中,有一种被推荐为特别合适,而不提及或排除其他可能性;或者某一行动方针是可取的,但不一定是必需的;或者(以否定的形式)某一行动方案被否决但不被禁止(应该等于建议)。

-may一词用于表示在标准范围内允许的行动(may等于允许的行动)。

-can一词用于陈述可能性和能力,无论是物质的、物理的还是因果的(can等于能够)。

句法描述

正文使用以下约定:

-定义术语时的斜体字体

-等宽字体,用于示例、文件名和对常量的引用,特别是0、1、x和z值

-当引用实际关键字时,Verilog和SystemVerilog关键字为粗体等宽字体

使用Backus-Naur形式(BNF)描述SystemVerilog的形式语法。

巴科斯范式 以美国人巴科斯(Backus)和丹麦人诺尔(Naur)的名字命名的一种形式化的语法表示方法,用来描述语法的一种形式体系,是一种典型的元语言。又称巴科斯-诺尔形式(Backus-Naur form)。它不仅能严格地表示语法规则,而且所描述的语法是与上下文无关的。它具有语法简单,表示明确,便于语法分析和编译的特点。BNF表示语法规则的方式为:非终结符用尖括号括起。每条规则的左部是一个非终结符,右部是由非终结符和终结符组成的一个符号串,中间一般以“::=”分开。具有相同左部的规则可以共用一个左部,各右部之间以直竖“|”隔开。

在双引号中的字("word")代表着这些字符本身。而double_quote用来代表双引号。

在双引号外的字(有可能有下划线)代表着语法部分。

尖括号( < > )内包含的为必选项。

方括号( [ ] )内包含的为可选项。

大括号( { } )内包含的为可重复0至无数次的项。

竖线( | )表示在其左右两边任选一项,相当于"OR"的意思。

::= 是“被定义为”的意思。

使用以下约定:

-小写单词,有些包含嵌入下划线,表示语法类别。例如:

模块声明

-黑体红色字符表示保留的关键字、运算符和标点符号,作为语法的必需部分。例如:

模块=>;

-竖线(|)分隔可选项,除非它以粗体红色显示,在这种情况下,它代表自己。例如:

unary_operator ::=
+ | - | ! | ~ | & | ~& | | | ~| | ^ | ~^ | ^~

-方括号([])包含可选项。例如:

input_declaration ::= input [ range ] list_of_variables ;

-大括号({})将一个重复的项括起来,除非它以粗体红色出现,在这种情况下,它代表自己。该项可能出现零次或多次;重复从左到右,就像使用等效的左递归规则一样。因此,以下两条规则是等价的:

list_of_param_assignments ::= param_assignment { , param_assignment }
list_of_param_assignments ::=
param_assignment
| list_of_param_assignment , param_assignment

-如果任何类别的名称以斜体部分开头,则等同于没有斜体部分的类别名称。斜体部分旨在传达一些语义信息。例如,“msb_index”和“lsb_index”等同于“index”

 

本标准内容

文中简要介绍了条款和附件,以供参考。有31条和11条

附件。所有条款以及附件A至附件I均为本标准的规范性部分。附件J和

附件K仅供参考。

第1条描述了本标准的内容和本标准中使用的惯例。

第2条列出了实施本标准所需的其他标准的参考。

第3条描述SystemVerilog源文本中使用的词法标记及其约定。它描述了

如何指定和解释词法标记。

第4条描述了对Verilog数据对象和数据类型的增强,包括新的变量数据对象

和类型、网络数据类型扩展、字符串类型、枚举类型、用户定义类型、结构和

工会。

第5条描述SystemVerilog数组,包括打包和解包数组、动态数组、关联数组

数组、队列和各种数组方法。

第6条描述了如何声明网络、变量和常量数据、关于写入变量的增强规则、信号

别名和类型兼容性。

第7条描述了SystemVerilog中的面向对象编程功能。主题包括定义

类,动态构造对象,继承和子类,数据隐藏和封装,多态性,

以及参数化类。

第8条描述了新的运算符、SystemVerilog数据类型的操作规则、数组上的操作,

运算符方法和运算符重载。

第9条描述SystemVerilog增强的仿真调度语义。

第10条描述了对Verilog决策语句和循环结构的增强,新的过程

语句、最终块、语句和块标签、增强的事件类型和事件控制。

第11条描述了用于建模组合逻辑、锁存逻辑和

顺序逻辑;对Verilog连续分配的增强;过程控制。

第12条描述了对Verilog任务和函数的许多增强,以及用于导入的语法

功能从一门外语和输出任务和功能到一门外语。

第13条描述了动态地生成随机数,约束随机数的生成

更改约束,并植入随机数生成器(RNGs)和随机case语句

执行。

第14条描述了内置的信号量和邮箱类,并描述了增强的Verilog事件类型和

操作员。

第15条定义了时钟块、输入和输出偏差、周期延迟和默认时钟。

第16条描述了测试台程序的构造、测试台比赛条件的消除和程序

控制任务。

第17条描述了即时断言、并发断言、属性、序列、序列操作,

多锁序列、时钟解析和断言绑定。

第18条描述了覆盖组、覆盖点、交叉覆盖、覆盖选项和覆盖范围

方法。

第19条描述包、编译单元($unit)、顶级实例($root)、嵌套模块、外部

模块、增强的端口声明、时间单位和精度、端口连接规则和名称空间。

第20条描述了接口语法、接口端口、modport、接口任务和函数,参数化

接口、虚拟接口和访问接口内的对象。

第21条描述了对Verilog配置的增强。

第22条描述了对Verilog系统任务和系统功能的几个扩展,包括$typename

函数,$bits size函数,range函数,数组查询函数,断言控制任务,随机

数字功能、程序控制任务、覆盖功能和对Verilog系统任务和

系统功能。

第23条描述了Verilog“define and”include指令的扩展,以及用于控制

关键词兼容性。

第24条描述了支持SystemVerilog数据对象的值更改转储(VCD)文件的扩展名

和数据类型。

第25条涵盖了Verilog defparam语句和Verilog过程

分配/取消分配语句。

第26条描述了SystemVerilog与外语的直接接口。

第27条描述了对VPI对象图的增强,以支持SystemVerilog构造。

第28条描述SystemVerilog中的断言API。

第29条描述SystemVerilog中的覆盖API。

第30条描述了对VPI的增强,以支持从文件访问设计和仿真数据。

附录A使用BNF定义了SystemVerilog的形式语法。

附件B列出了SystemVerilog关键字。

附件C描述了邮箱、信号量、随机化和进程的系统类型定义。

附录D定义了一个实现列表数据结构的列表包,类似于标准模板

库(STL)。

附录E描述了SystemVerilog并发断言的形式化语义。

附录F定义了SystemVerilog DPI的C语言层。

附录G定义了用于SystemVerilog DPI应用程序的标准svdpi.h include文件。

附件H描述了在SystemVerilog中包含外语代码的通用指南

申请。

附件一提供了sv vpi_user.h文件的内容列表,该文件扩展了Verilog

vpi_user.h包含文件。

附录J定义了本标准中使用的术语。

附录K列出了与本标准相关的参考文件。

你可能感兴趣的:(verilog,system,verilog)