SystemVerilog语言知识介绍.doc
《SystemVerilog语言知识介绍.doc》由会员分享,可在线阅读,更多相关《SystemVerilog语言知识介绍.doc(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、.SystemVerilogSystemVerilog 语言简介语言简介SystemVerilog 是一种硬件描述和验证语言(HDVL),它基于 IEEE 1364-2001 Verilog 硬件描述语言(HDL),并对其进行了扩展,包括扩充了 C 语言数据类型、结构、压缩和非压缩数组、接口、断言等等,这些都使得 SystemVerilog 在一个更高的抽象层次上提高了设计建模的能力。SystemVerilog 由 Accellera 开发,它主要定位在芯片的实现和验证流程上,并为系统级的设计流程提供了强大的连接能力。下面我们从几个方面对 SystemVerilog 所作的增强进行简要的介绍,
2、期望能够通过这个介绍使大家对 SystemVerilog 有一个概括性的了解。1.接口(Interface)Verilog 模块之间的连接是通过模块端口进行的。为了给组成设计的各个模块定义端口,我们必须对期望的硬件设计有一个详细的认识。不幸的是,在设计的早期,我们很难把握设计的细节。而且,一旦模块的端口定义完成后,我们也很难改变端口的配置。另外,一个设计中的许多模块往往具.有一样的端口定义,在 Verilog 中,我们必须在每个模块中进行一样的定义,这为我们增加了无谓的工作量。SystemVerilog 提供了一个新的、高层抽象的模块连接,这个连接被称为接口(Interface)。接口在关键字
3、 interface和 endinterface 之间定义,它独立于模块。接口在模块中就像一个单一的端口一样使用。在最简单的形式下,一个接口可以认为是一组线网。例如,可以将 PCI 总线的所有信号绑定在一起组成一个接口。通过使用接口,我们在进行一个设计的时候可以不需要首先建立各个模块间的互连。随着设计的深入,各个设计细节也会变得越来越清晰,而接口的信号也会很容易地表示出来。当接口发生变化时,这些变化也会在使用该接口的所有模块中反映出来,而无需更改每一个模块。下面是一个接口的使用实例:interface chip_bus;/定义接口wire read_request,read_grant;wir
4、e 7:0 address,data;endinterface:chip_busmodule RAM(chip_bus io,/使用接口input clk);/可以使用 io.read_request 引用接口中的一个信号.3/28endmodulemodule CPU(chip_bus io,input clk);.endmodulemodule top;reg clk=0;chip_bus a;/实例接口/将接口连接到模块实例RAM mem(a,clk);CPU cpu(a,clk);endmodule实际上,SystemVerilog 的接口不仅仅可以表示信号的绑定和互连。由于 Syst
5、emVerilog 的接口中可以包含参数、常量、变量、结构、函数、任务、initial 块、always 块以与连续赋值语句,所以 SystemVerilog 的接口还可以包含建的协议检查以与被使用该接口的模块所共用的功能。2.全局声明和语句.在 Verilog 中,除了一个模块可以作为模块实例引用其他模块外,并不存在一个全局空间。另外,Verilog 允许任意数目的顶层模块,因此会产生毫无关联的层次树。SystemVeriog增加了一个被称为$root的隐含的顶级层次。任何在模块边界之外的声明和语句都存在于$root 空间中。所有的模块,无论它处于哪一个设计层次,都可以引用$root 中声明
6、的名字。这样,如果某些变量、函数或其它信息被设计中的所有模块共享,那么我们就可以将它们作为全局声明和语句。全局声明和语句的一个使用实例如下:reg error _flag;/全局变量function compare(.);/全局函数always(error_flag)/全局语句.module test;chip1 u1(.)endmodulemodule chip1(.);FSM u2(.);always(data)error_flag=compare(data,expected);.5/28endmodulemodule FSM(.);.always(state)error_flag=com
7、pare(state,expected);endmodule3.时间单位和精度在 Verilog 中,表示时间的值使用一个数来表示,而不带有任何时间单位。例如:forever#5clock=clock;从这一句中我们无法判断 5 代表的是 5ns?5ps?还是其他。Verilog 的时间单位和精度是作为每一个模块的属性,并使用编译器指令timescale 来设置。使用这种方法具有固有的缺陷,因为编译器指令的执行依赖于源代码的编译顺序,编译器总是将它遇到的最后一个timescale 设置的时间单位和精度作为之后的标准。那么,假如有些模块之前没有使用timescale 设置时间单位和精度,这就有可
8、能出现同一个源代码的不同仿真会出现不同结果的情况。SystemVerilog 为了控制时间单位加入了两个重要的增强。首先,时间值可以显式地指定一个单位。时间单位可以.是 s、ms、ns、ps 或 fs。时间单位作为时间值的后缀出现。例如:forever#5nsclock=clock;其次,SystemVerilog 允许使用新的关键字(timeunits和 timeprecision)来指定时间单位和精度。这些声明可以在任何模块中指定,同时也可以在$root 空间中全局指定。时间单位和精度必须是 10 的幂,围可以从 s 到 fs。例如:timeunits 1ns;timeprecision1
9、0ps;4.抽象数据类型Verilog 提供了面向底层硬件的线网、寄存器和变量数据类型。这些类型代表了 4 态逻辑值,通常用来在底层上对硬件进行建模和验证。线网数据类型还具有多个强度级别,并且能够为多驱动源的线网提供解析功能。SystemVerilog 包括了 C 语言的 char 和 int 数据类型,它允许在 Verilog 模型和验证程序中直接使用 C 和 C+代码。Verilog PLI 不再需要集成总线功能模型、算法模型和 C函数。SystemVerilog 还为 Verilog 加入了几个新的数据类型,以便能够在更抽象的层次上建模硬件。.7/28char:一个两态的有符号变量,它与
10、 C 语言中的char 数据类型一样,可以是一个 8 位整数(ASCII)或short int(Unicode);int:一个两态的有符号变量,它与 C 语言中的 int 数据类型相似,但被精确地定义成 32 位;shortint:一个两态的有符号变量,被精确地定义成 16 位;longint:一个两态的有符号变量,它与 C 语言中的 long 数据类型相似,但被精确地定义成 64 位;byte:一个两态的有符号变量,被精确地定义成8 位;bit:一个两态的可以具有任意向量宽度的无符号数据类型,可以用来替代 Verilog 的 reg 数据类型;logic:一个四态的可以具有任意向量宽度的无符
11、号数据类型,可以用来替代 Verilog 的线网或 reg 数据类型,但具有某些限制;shortreal:一个两态的单精度浮点变量,与 C 语言的 float 类型一样;void:表示没有值,可以定义成一个函数的返回值,与 C 语言中的含义一样。.SystemVerilog的bit和其他数据类型允许用户使用两态逻辑对设计建模,这种方法对仿真性能更有效率。由于 Verilog 语言没有两态数据类型,因此许多仿真器都通过将这种功能作为仿真器的一个选项提供。这些选项不能够在所有的仿真器之间移植,而且在需要时用三态或四态逻辑的设计中强制使用两态逻辑还具有副作用。SystemVerilog 的 bit
12、数据类型能够极大改进仿真器的性能,同时在需要的时候仍然可以使用三态或四态逻辑。通过使用具有确定行为的数据类型来代替专有的仿真器选项,两态模型能够在所有的 SystemVerilog 仿真器间移植。SystemVerilog 的 logic 数据类型比 Verilog 的线网和寄存器数据类型更加灵活,它使得在任何抽象层次上建模硬件都更加容易。logic 类型能够以下面的任何一种方法赋值:通过任意数目的过程赋值语句赋值,能够替代 Verilog 的 reg 类型;通过单一的连续赋值语句赋值,能够有限制地替代 Verilog 的 wire 类型;连接到一个单一原语的输出,能够有限制地替代Verilo
13、g 的 wire 类型;由于 logic 数据类型能够被用来替代 Verilog 的 reg 或 wire(具有限制),这就使得能够在一个更高的抽象层次上建模,.9/28并且随着设计的不断深入能够加入一些设计细节而不必改变数据类型的声明。logic 数据类型不会表示信号的强度也不具有线逻辑的解析功能,因此 logic 数据类型比 Verilog 的wire 类型更能有效地仿真和综合。5.有符号和无符号限定符缺省情况下,Verilog net 和 reg 数据类型是无符号类型,integer 类型是一个有符号类型。Verilog-2001 标准允许使用 signed 关键字将无符号类型显式地声明
14、成有符号类型。SystemVerilog 加入了相似的能力,它可以通过 unsigned 关键字将有符号数据类型显式地声明成有无符号数据类型。例如:int unsigned j;值得注意的是 unsigned 在 Verilog 中是一个保留字,但并没有被 Verilog 标准使用。6.用户定义的类型Verilog 不允许用户定义新的数据类型。SystemVerilog通过使用 typedef 提供了一种方法来定义新的数据类型,这一点与 C 语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:typedef unsigned int uint;.uint a,b;一个用户定义
15、的数据类型可以在它的定义之前使用,只要它首先在空的 typedef 中说明,例如:typedef int48;/空的 typedef,在其他地方进行完整定义int48 c;7.枚举类型在 Verilog 语言中不存在枚举类型。标识符必须被显式地声明成一个线网、变量或参数并被赋值。SystemVerilog允许使用类似于 C 的语法产生枚举类型。一个枚举类型具有一组被命名的值。缺省情况下,值从初始值 0 开始递增,但是我们可以显式地指定初始值。枚举类型的例子如下:enum red,yellow,green RGB;enum WAIT=2b01,LOAD,DONE states;我们还可以使用 t
16、ypedef 为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:typedef enum FALSE=1b0,TRUE boolean;boolean ready;boolean test_complete;8.结构体和联合体.11/28在 Verilog 语言中不存在结构体或联合体,而结构体或联合体在将几个声明组合在一起的时候非常有用。SystemVerilog 增加了结构体和联合体,它们的声明语法类似于 C。struct reg 15:0 opcode;reg 23:0 addr;IR;union int I;shortreal f;N;结构体或联合体中的域可以通过在变
17、量名和域名字之间插入句点(.)来引用:IR.opcode=1;/设置 IR 变量中的 opcode 域N.f=0.0;/将 N 设置成浮点数的值我们可以使用 typedef 为结构体或联合体的定义指定一个名字。typedef struct reg 7:0 opcode;reg 23:0 addr;.instruction;/命名的结构体instruction IR;/结构体实例一个结构体可以使用值的级联来完整地赋值,例如:instruction=5,200;结构体可以作为一个整体传递到函数或任务,也可以从函数或任务传递过来,也可以作为模块端口进行传递。9.数组在 Verilog 中可以声明一个
18、数组类型,reg 和线网类型还可以具有一个向量宽度。在一个对象名前面声明的尺寸表示向量的宽度,在一个对象名后面声明的尺寸表示数组的深度。例如:reg 7:0 r1 1:256;/256 个 8 位的变量在 SystemVerilog 中我们使用不同的术语表示数组:使用“压缩数组(packed array)”这一术语表示在对象名前声明尺寸的数组;使用“非压缩数组(unpacked array)”这一术语表示在对象名后面声明尺寸的数组。压缩数组可以由下面的数据类型组成:bit、logic、reg、wire 以与其它的线网类型。无论是压缩数组还是非压缩数组都可以声明成多维的尺寸。bit 7:0 a;
19、/一个一维的压缩数组.13/28bit b 7:0;/一个一维的非压缩数组bit 0:11 7:0 c;/一个二维的压缩数组bit 3:0 7:0 d 1:10;/一个包含10个具有4个8位字节的压缩数组的非压缩数组非压缩尺寸在压缩尺寸之前引用,这就允许将整个压缩数组作为一个单一的元素进行引用。在上面的例子中,d1引用非压缩数组的一个单一元素,这个元素是一个包含 4 个字节的数组。10.在为命名的块中声明Verilog 允许变量在一个命名的 begin-end 或 fork-join语句组中声明。相对于语句组来说,这些变量是本地的,但它们可以被层次化地引用。在 SystemVerilog 中,
20、既可以在命名的块中也可以在未命名的块中声明。在未命名的块中,不能够使用层次名来访问变量。所有的变量类型,包括用户定义的类型、枚举类型、结构体和联合体都可以在 begin-end 或 fork-join 语句组中声明。11.常量在 Verilog 中有三种特性类型的常量:parameter、specparam 和 localparam。而在 SystemVerilog 中,允许使用const 关键字声明常量。例如:.const char colon=“:”;12.可重定义的数据类型SystemVerilog 扩展了 Verilog 的 parameter,使其可以包含类型。这个强大的功能使得一个
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SystemVerilog 语言 知识 介绍
限制150内