system verilog简介

12
SystemVeri log简介★ 北京航空航天大学夏宇闻 摘要:美国电气和电子工程师协会(IEEE)最近(2005年11月9日)批准了SystemVe 述语言的新标准。 新标准是为了适应日益复杂的系统芯片(SoC)设计在原Veri log-2001的基础 上扩展的。按新标准开发的EDA工具必将大幅度地提高SoC的设计和验证效率。本文对新标准的扩 展做了简要的介绍,希望引起国内IC设计界对这种功能强大语言的重视。 刖吾 SystemVerilog是IEEE最近推出的硬件描述和 验证语言,它是在原Verilog(IEEE 1364—1995和 一2001)基础上扩展的新语言。这种新语言将设计 和验证所需的语言组合成同一种语言。而且Sys— temVerilog还是Verilog一2001的超集。因此,目前的 Verilog用户使用SystemVerilog不存在任何问题。 SystemVerilog一问世就拥有大量承诺支持它的供应 商,这一切都预示着SystemVerilog会有良好的市场 前景。 SystemVerilog与Verilog有许多重要的区别。第 一,SystemVerilog提供了完整的仿真模型,它将每个 时隙细分成1 1个有序的段,并规定了每个段内必须 发生的事件。这样就可以避免当仿真包含反应性测 试平台、覆盖率分析工具和相互作用的第三方c模 型在内的各种模型时,有可能发生的某些不确定 性。第二,SystemVerilog具有类似C++语言的一些 高级数据类型和功能,如:结构体、联合体、打包和非 打包的数组,动态存储器分配和动态进程等,更适合 测试平台的开发和系统级建模。第三,仿真和静态验 证工具可以使用相同的声明集合。第四,Sys— temVerilog的新扩充还包括了接口块、断言函数等。 这些扩展使得SystemVerilog可以在更高的抽 次上,更方便地为复杂IP之间的连接、测试验证和 查错建立模型,显著地提高了代码的可读性、可维护 性、设计和验证效率,极大地提高了编写测试平台的 能力。 SystemVerilog由OVI(Open Verilog Internation— a1)和VI(VHDL Intematioanl)两个国际标准化组 合作成立的Accellera集团推出,主要用于数字系统 芯片的设计和验证流程。由于SystemVerilog具 高级编程语言(如c语言)直接连接调试的强大功 能,为系统级软硬件协同设计验证提供了极大的方 便,因此对包括软硬件在内的现代复杂SoC设计有 非常深远的意义。 读者若想全面深入地理解和掌握语法的要点, 不但需要认真阅读SystemVerilog LRM(语法手册), 还需要上机练习才行。为了帮助读者用最少的时间 初步了解SystemVerilog标准所做的扩展,作者将 下面30个方面,对最近批准的SystemVerilo 作简要的介绍。 1)数组 在Verilog中可以声明数组类型,reg和线网类 型还可以具有矢量位宽。在对象名前面声明的位宽 表示变量的位宽,在对象名后面声明的维数表示数 ·编者注:IEEE刚刚于2005年11月9日批准System Verilog硬件描述语言的新标准之际,夏宇闻老师为我刊编写了本文。具体介绍了这一 标准语言,相信一定能受到广大设计人员,尤其是SOC设计人员的欢迎。 』n,曲笛R1苴日、_园蜀曩聂园 。。一,.⋯⋯.:⋯.⋯ 万方数据

Upload: wujianping

Post on 15-Jul-2015

2.196 views

Category:

Design


0 download

TRANSCRIPT

Page 1: System verilog简介

SystemVerilog简介★

北京航空航天大学夏宇闻

摘要:美国电气和电子工程师协会(IEEE)最近(2005年11月9日)批准了SystemVerilog硬件描

述语言的新标准。 新标准是为了适应日益复杂的系统芯片(SoC)设计在原Veri log-2001的基础

上扩展的。按新标准开发的EDA工具必将大幅度地提高SoC的设计和验证效率。本文对新标准的扩

展做了简要的介绍,希望引起国内IC设计界对这种功能强大语言的重视。

刖吾

SystemVerilog是IEEE最近推出的硬件描述和

验证语言,它是在原Verilog(IEEE 1364—1995和

一2001)基础上扩展的新语言。这种新语言将设计

和验证所需的语言组合成同一种语言。而且Sys—

temVerilog还是Verilog一2001的超集。因此,目前的

Verilog用户使用SystemVerilog不存在任何问题。

SystemVerilog一问世就拥有大量承诺支持它的供应

商,这一切都预示着SystemVerilog会有良好的市场

前景。

SystemVerilog与Verilog有许多重要的区别。第

一,SystemVerilog提供了完整的仿真模型,它将每个

时隙细分成11个有序的段,并规定了每个段内必须

发生的事件。这样就可以避免当仿真包含反应性测

试平台、覆盖率分析工具和相互作用的第三方c模

型在内的各种模型时,有可能发生的某些不确定

性。第二,SystemVerilog具有类似C++语言的一些

高级数据类型和功能,如:结构体、联合体、打包和非

打包的数组,动态存储器分配和动态进程等,更适合

测试平台的开发和系统级建模。第三,仿真和静态验

证工具可以使用相同的声明集合。第四,Sys—

temVerilog的新扩充还包括了接口块、断言函数等。

这些扩展使得SystemVerilog可以在更高的抽象层

次上,更方便地为复杂IP之间的连接、测试验证和

查错建立模型,显著地提高了代码的可读性、可维护

性、设计和验证效率,极大地提高了编写测试平台的

能力。

SystemVerilog由OVI(Open Verilog Internation—

a1)和VI(VHDL Intematioanl)两个国际标准化组织

合作成立的Accellera集团推出,主要用于数字系统

芯片的设计和验证流程。由于SystemVerilog具有与

高级编程语言(如c语言)直接连接调试的强大功

能,为系统级软硬件协同设计验证提供了极大的方

便,因此对包括软硬件在内的现代复杂SoC设计有

非常深远的意义。

读者若想全面深入地理解和掌握语法的要点,

不但需要认真阅读SystemVerilog LRM(语法手册),

还需要上机练习才行。为了帮助读者用最少的时间

初步了解SystemVerilog标准所做的扩展,作者将从

下面30个方面,对最近批准的SystemVerilog标准

作简要的介绍。

1)数组

在Verilog中可以声明数组类型,reg和线网类

型还可以具有矢量位宽。在对象名前面声明的位宽

表示变量的位宽,在对象名后面声明的维数表示数

·编者注:IEEE刚刚于2005年11月9日批准System Verilog硬件描述语言的新标准之际,夏宇闻老师为我刊编写了本文。具体介绍了这一

标准语言,相信一定能受到广大设计人员,尤其是SOC设计人员的欢迎。

』n,曲笛R1苴日、_园蜀曩聂园 。。一,.⋯⋯.:⋯.⋯ 万方数据

Page 2: System verilog简介

组的个数。举例如下:

reg[7:0]rl【1:256];//声明r1为256个8位的变量

在SystemVerilog中设计者可使用不同的术语

表示数组:使用“打包数组(packed array)”这一术

语表示在对象名前面声明的数组的维数;使用“非

打包数组(unpacked array)”这一术语表示在对象

名后面声明的数组的维数。打包数组可以由下面的

数据类型组成:bit、logic、reg、wire以及其它的线网类

型。无论是打包数组还是非打包数组都可以声明成

多维的。举例如下:

bit[7:0]a;//打包数组a为bit类型(双值)只有一个

包(包由字节,即8位,组成)

bit b[7:0];//非打包数组b为bit类型(双值)(一位),

共有8位从b[0l至0 b[71

bit[0:1 1][7:0]c;//打包数组c(每包12个字节),

只有一个包

bit[3:0][7:0]d[1:10];//d的每个包由4个字节(8

位)组成,d共有10个非打包的包

上例中非打包数组大小的定义([1:10])放在打

包数组(d)定义之后,这就允许将整个打包数组(4

个字节)作为单一的元素进行引用。在上面的例子

中,d【1】引用非打包数组的第一个元素,该元素由4

个字节组成。

2)枚举类型

Verilog语法中没有枚举类型。标识符必须显式

地声明为线网、变量或参数,并赋值。SystemVerilog

允许使用类似于c的语法定义枚举类型。枚举类型

具有一组被命名的初始值。缺省情况下,初始值从0

开始递增,但是设计者也可以显式地指定初始值。

枚举类型的例子如下:

enum{red,yellow,green)RGB;//red=2’b0,yellow

=2’b01.green=2’b10;

enum(WAIT=2’b01,LOAD,DONE)states;//LOAD

=2’blO,DONE=2’bl 1;

设计者还可以使用typedef为枚举类型指定一

个名字,从而允许这个枚举类型可以在许多地方使

用。例如:

typedef enum{FALSE=I’b0,TRUE)boolean;

boolean ready;

boolean test_complete;

3)结构体和联合体

Verilog语法中没有结构体或联合体,而结构体或联

合体在把几个声明组合在一起的时候非常有用。

SystemVerilog增加了结构体和联合体,其语法类似

于C。

struct{

reg[15:0]opcode;

reg[23:0]addr;

}IR;

//声明IR是一个结构体,由两部分组成:16位的操

作码opcode和24位的地址addr

union I

intI;

shortreal f;

1 N;

结构体或联合体中的域可以通过在变量名和域

名字之间插入句点()来引用:

IR.opcode=1;//设置IR变量中的opcode域

N.f=0.0; ,/将N变量中的f域设置成浮点数的值

0.0

设计者可以使用typedef为结构体或联合体的定义

指定名字,举例如下。

typedef struct{

reg[7:0]opcode;

reg[23:0]addr;

l instruction; //命名的结构体,instruction是一个由

两部分

//(16位的操作码opcode和24位的地址

addr)组成的指令

万方数据

Page 3: System verilog简介

instruction IR; //结构体实例,定义IR具有指令

(instruction)同样的结构

结构体可以使用值的级联来完整地赋值,例如:

instruction=f5,200};//表示操作码为5,地址为200

结构体可以作为整体传递到函数或任务,也可

以从函数或任务传递过来,也可以作为模块端口进

行传递。

4)接口(Interface)

Verilog模块之问的连接是通过模块端口进行

的。为了给构成设计的各个模块定义端口,设计者

必须对所做的硬件设计有详细的认识。但在设计

的初期,设计者很难把握设计的细节。而一旦模块

的端口定义完成后,端口的配置就很难改变。另外,

设计中的许多模块往往具有相同的端口名,在Ver—

ilog语言中,设计者必须对每个模块进行相同的定

义和连接,这增加许多无谓的工作量。

SystemVerilog提供了一个全新的、高层抽象的

连接定义块,这个连接块被称为接口(Interface)。接

口块在关键字interface和endinterface之间定义,它

独立于模块。接口在模块中就像独立端口一样使用。

在最简单的形式下,接口可以认为是一组线网。例

如,可以将PCI总线的所有信号绑定在一起组成一

个接口。借助于接口块的定义,编写代码时若遇到

许多个实例互相连接的情况,可以不必逐一建立各

模块对应端口间的连接,大大加快了设计工作。随

着设计的深入,设计细节逐渐变得清晰,许多模块的

接口需要添加和修改。而对接口块所做的修改,可

在使用该接口块的每个模块中反映出来,而无需逐

个修改每个模块的接口,大大节省了相关模块接口

修改的工作量。下面是接口的使用实例:

interface chip—bus; //定义接口chip_bus

wire read_request,read_grant;

wire[7:0]address,data;

endinterface

module RAM(chip—bus io,//RAM模块的端口中包

含已定义的接口chip—bus,具体接口名为io

input clk);

//可以使用io.read—request引用接口中的一

个信号

PndmodlJle

module CPU(chip_bus io,input clk);

//CPU模块的端口中也使用了已定义的接口

chip_bus,具体名为io

module top;

reg clk=0:

chip_bus a; //接口的实例引用,说明a是与

chip_bus同样的接口

RAM men(.io(a),clk);//将接口a连接到mem实例

模块的io接口

CPU cpu(.io(a),elk);//将接El a连接到cpu实例模

块的io接口

endmodule

实际上,SystemVerilog的接口不仅仅可以表示

信号的绑定和互连。由于SystemVerilog的接1:3中可

以包含参数、常量、变量、结构、函数、任务、initial块、

always块以及连续赋值语句,所以SystemVerilog的

接口还可以包含内建的协议检查,以及使用该接口

的每个模块共用的功能。

5)随机激励信号的产生

在设计中,总是有一些边角情况是比较不容易

发生,或是不容易想到的,因此借助随机产生的测试

激励,可以帮助验证边角情况。Verilog已经具有

$random来产生随机数,但设计者并无有效办法控

制该随机数的范围与顺序。在SystemVerilog 3.1里,

增加了rand与randc两个对象类,用于设定随机数

‘、‘‘^ J^.--^.-^:⋯⋯一 万方数据

Page 4: System verilog简介

China Integrated Circuit

l⋯H巾国集成电路 珏“■—_ ”7。。

产生的条件。下例中设计者声明一个名为Bus的类,

并规定地址总线的最低的两位必须为0。而在使用

时,利用rand类里的randomize子类,产生50个随

机数据与地址,大大简化了Verilog原来产生随机数

的手段。

class Bus;

rand bit【15:0】addr;

rand bit【31:0】data;

constraint word align{addr[1:0]_=‘2b0;)

endclass

Bus bus=new;

repeat(50)begin

if(bus.randomize0==1)

$display(”addr=%16h data=%hha”,bus.addr,

bus.data);

else

$display(”Randomization failed.U”);

end

6)时间单位和精度

在Verilog中,表示时间的值使用一个数来表

示,而不带有任何时间单位。

例如:forever#5 clock=~clock;

单从这一语句中,设计者无法判断5代表的是

5ns?5ps?还是5us。Verilog的时间单位和精度是作

为每个模块的属性,在模块代码前用编译器指令

、timescale来设置。使用这种方法存在固有的缺陷,

因为编译器指令的执行依赖于源代码的编译顺序,

编译器总是将它遇到的最后一个、timescale设置的

时间单位和精度作为标准。那么,若有些模块代码

没有用、timeseale设置时间单位和精度,当这种源代

码前缺少时间单位定义的模块与有、timescale设置

的模块一起仿真时,就有可能出现完全想象不到的

结果。

●、¨^.,^⋯I⋯;⋯⋯一

SystemVerilog为了能更方便地控制时间单位,

做了两个重要的改进。1)时间值可以显式地指定为

某一个单位。时间单位可以在s、ms、ns、ps或fs之间

选择,时间单位作为时间值的后缀出现。例如:

forever#5ns clock=-clock;

2)SystemVerilog允许使用新的关键字(timeu—

nits和timeprecision)来指定时间单位和精度。这些

声明可以在任何模块中指定,同时也可以在全局空

间中指定。时间单位和精度必须是10的幂,范围可

以从s到fs。例如:

timeunits lns;

timeprecision 1 0ps;

7)抽象数据类型

Verilog提供了面向底层硬件的线网、寄存器和

变量数据类型。这些类型代表了4态逻辑值,通常用

来在底层上对硬件进行建模和验证。线网数据类型

还具有多个强度级别,并且能够为多驱动源的线网

提供解析功能。

SystemVerilog包括了C语言的char和int数据

类型,它允许在Verilog模型和验证程序中直接使用

c和c++代码。Verilog PLI不再需要整合总线功能

模型、算法模型和c函数。SystemVerilog还为Ver—

ilog加入了几个新的数据类型,以便能够在更抽象

的层次上为硬件电路建模。

char:两态的有符号变量,它与c语言中的char

数据类型相同,可以是一个8位整数(ASCII)或

short int(Unicode);

int:两态的有符号变量,它与C语言中的int数

据类型相似,但被精确地定义成32位;

shortint:两态的有符号变量,被精确地定义成

16位;

longint:两态的有符号变量,它与c语言中的

long数据类型相似,但被精确地定义成64位;

byte:两态的有符号变量,被精确地定义成8

位;

bit:两态的可以具有任意位宽的无符号数据类

万方数据

Page 5: System verilog简介

型,可以用来替代Verilog的reg数据类型;

logic:四态的可以具有任意位宽的无符号数据

类型,可以用来替代Verilog的线网或reg数据类

型,但具有某些限制;

shortreal:两态的单精度浮点变量,与c语言的

float类型相同;

void:表示没有返回值,可以定义成函数的返回

值,与C语言中的含义相同。

SystemVerilog的bit和其他数据类型允许用户

使用两态逻辑为设计建模,两态逻辑模型的仿真速

度快,效率高。由于Verilog语言没有两态数据类型,

因此许多仿真器将这种功能作为仿真器的选项。有

些仿真器不支持两态逻辑数据,所以有时在必须用

三态或四态逻辑建模的设计中强制使用两态逻辑,

仿真器还会出现问题。而SystemVerilog的bit数据

类型能够极大提高仿真器的性能,同时在需要的时

候仍然可以使用三态或四态逻辑。用改变数据类型

的方法来代替仿真器的逻辑状态选项,使得设计模

型能适应多种仿真器。

SystemVerilog的logic数据类型比Verilog的线

网和寄存器数据类型更加灵活,它使得在任何抽象

层次上为硬件建模变得更加容易。logic类型能够以

下面的任何一种方法赋值:

任意次的过程赋值语句赋值,能够替代Verilog

的reg类型;

单一的连续赋值语句赋值,能够有限地替代

Verilog的wire类型;

连接到单一原语的输出,能够有限制地替代

Verilog的wire类型;

由于logic数据类型能够被用来替代Vet/log的

reg或wire(具有限制),这就使得设计者能在更高

的抽象层次上建模,并且随着设计的深入,能不断地

添加设计细节而不必改变数据类型的声明。logic数

据类型不能表示信号的强度,也不具有线逻辑的解

析功能,因此logic数据类型比Verilog的wire类型

能更有效地仿真和综合。

8)有符号和无符号限定符

缺省情况下,Verilog的net和reg数据类型是无

符号类型,integer类型是有符号类型变量。Ve卜

ilog一2001标准允许使用signed关键字将无符号类

型显式地声明成有符号类型。SystemVerilog添加了

类似的能力,它可以通过unsigned关键字将有符号

数据类型显式地声明成有无符号数据类型。例如:

值得注意的是unsigned在Verilog中是保留字,

但并没有被Verilog标准使用。

9)用户定义的类型

Verilog不允许用户定义新的数据类型。Sys—

temVerilog通过使用typedef提供了定义新的数据类

型方法,这与C语言类似。用户定义的类型可以与

其它数据类型一样地在声明中使用。例如:

typedef unsigned int uint;

uint a.b:

用户定义的数据类型可以在它的定义之前使

用,只要它首先在空的typedef中说明,例如:

typedef int48;//空的typedef,即虽然定义了int48,

但究竟int48定义成什么?

∥还需要在其他地方进行完整的定义

int48 c;//虽然int48具体如何定义并未确定,但可

以把e定义为是int48类型的。

10)在命名块中声明变量

Verilog允许变量在命名的begin—end或

fork-join语句组中声明。对于命名的语句组来说,在

块内定义的变量是本地的,但它们可以用层次化命

名方法引用它们。在SystemVerilog中,变量既可以

在命名的块中也可以在未命名的块中声明,对在未

命名的块中声明的变量,不能使用层次名来访问,所

有的变量类型,包括用户定义的类型、枚举类型、结

万方数据

Page 6: System verilog简介

China Inte

l⋯H巾国集成电路 珏“■●_ grated Circuit”7。

构体和联合体都可以在begin—end或fork-join命名

的语句组中声明。

1 1)常量

在Verilog中有三种特殊类型的常量:parame—

ter、specparam和localparam。而在SystemVerilog中,

允许使用const关键字声明常量。例如:

const char colon=“:”:

12)可重定义的数据类型

SystemVerilog扩展了Verilog的参数(parame—

ter)功能,使其可以包含数据类型。若模块定义了参

数,用于表示数据类型,则在引用该模块的实例时,

可通过参数传递重新定义每个实例中的数据类型。

例如:

module foo:

#(parameter type VAR—TYPE=shortint;)

(input logic[7:0]i,output logic[7:0】o);

VAR_TYPE j=o; //如果不重新定义,j的数据类

型为shortint

module bar;

logic[3:0]i,o;

foo#(.VAR—TYPE(int))ul(i,o);//重新将

VAR—TYPE定义成int类型

endmodule

13)模块端口连接

在Verilog中,可以连接到模块端El的数据类型

被限制为线网类型以及变量类型中的reg、integer和

time。而在SystemVerilog中,则去除了这种限制,任

何数据类型都可以通过端口传递,包括实数、数组和

结构体。

14)用字母赋值

在Verilog中,用字母赋值时候有一些约定。而

SystemVerilog则为用字母赋值作了下面的改进:

变量的所有位可以方便地用字母(、0、、1、、z或、X)赋

值。填充一个任意位宽的矢量,而无需显式地指定矢

量的位宽,例如:

bit【63:0】data;

data=、1;//将data的所有位(共64位)都设置成l

15)字符串(str ing)

SystemVerilog添加了可变长度的字符串数据类

型,使用者不需声明字符串数据的长度,编译工具会

自动判断。而SystemVerilog也提供了常用字符串处

理函数,例如putc0,getc0,atoi0,itoa0等,而口些字符

串处理函数功能以前必须通过PLI函数才能实现。

16)强制类型转换

Verilog不能将一个值强制转换成不同的数据类

型。SystemVerilog通过使用<数据类型>’操作符

提供了数据类型的强制转换功能。这种强制转换可

以转换成任意类型,包括用户定义的类型。例如:

int’(2.0木3.0)//将计算结果转换为int类型

mytype’(foo)//将foo转换为mytype类型

在强制转换操作符前指定一个10进制数可以

用来确定转换后的矢量位宽,例如:

17’(X一2)//将结果转换为17位宽

也可以将结果转换成有符号值,例如:

signed’(x)//将x转换为有符号值

1 7)操作符

Verilog没有C语言的递增(++)和递减(~)

操作符。而SystemVerilog加入了几个新的操作符:

++和~:递增和递减操作符;

+=、一=、:g_--、_--、%=、&=、^=、J=、<<=、>>=、<<<=

和>>>=赋值操作符;

18)具有唯一性和优先级的条件语句

万方数据

Page 7: System verilog简介

在Verilog中,如果没有遵循严格的编码风格,它的

if-else和case语句会在RTL仿真和RTL综合间具

有不一致的结果。如果没有正确使用full—case和

parallel_case综合指令还会引起一些其它的错误。

SystemVerilog能够显式地指明什么时候条件语

句的分支是唯一的,或者什么时候需要计算优先级。

设计者可以在if或case关键字之前使用unique或

requires关键字。这些关键字可以向仿真器、综合编

译器、以及其它工具指示设计者期望的硬件类型。

工具使用这些信息来检查if或case语句是否正确

地为期望的逻辑建立了模型。例如,如果使用unique

限定了条件语句,那么在不希望的ease值出现的时

候仿真器就会发布警告信息。

bit[2:0]a;

unique if((a==O)ll(a==1))y=inl;

else if(a==2)Y=in2;

else if(a==4)Y=in3;//值3、5、6、7会引起

一个警告

priorityif(a[2:1]_=0)Y=inl;//a是0或1

else if(a【2]_=o)Y=in2;//a是2或3

else y=in3;//如果a为其他的值

unique case(a)

0,1:Y=inl;

2:Y=in2;

4:Y=in3;

endcase//值3、5、6.7会引起一个警告

priority casez(a)

2’bOO?:y=inl;//a是0或1

2’b077:Y=in2;//a是2或3

default:y=in3;//如果a为其他的值

endcase

来跳转到新的语句,包括:return、break、continue和

goto。在Verilog中除了通过使用disable语句跳转到

语句组的尾部外,没有提供任何其它跳转语句。使用

disable语句执行中止和继续功能要求加入块的名

字,并且会产生不直观的代码。SystemVerilog加入了

c语言的break和continue关键字,这两个关键字不

要求使用块名字。另外,SystemVerilog还加入了一个

return关键字,它可以用来在任何执行点上退出一

个任务或函数。

break:退出一个循环,与C语言相同;

continue:跳转到一个循环的尾部,与C语言相

同;

retum表达式:退出一个函数;

return:退出一个任务或void类型的函数。

SystemVerilog没有包含C语言中的goto语句。

20)块名字和语句标签

在Verilog中,设计者可以通过在begin或fork

关键字之后指定名字来为begin—end或fork-jion语

句组命名。这个指定的名字代表整个语句块。Sys—

temVerilog还允许在end或iion关键字之后指定一

个匹配的块名字。这种机制很容易将end或jion与

对应的begin或fork联系起来,尤其是在一个长的

块或嵌套的块中。块结尾处的名字是可选的,但如果

使用的话,它必须与块起始处的名字相同。例如:

begin:foo//在begin之后的块名字

fork:bar//具有名字的嵌套的块

jion:bar//必须具有相同的名字

end:foo//必须具有相同的名字

SystemVerilogJ丕允许像C语言一样为单个语句

1 9)跳转语句 设置标签。语句标签放置在语句的前面,用来标识

在语句的执行过程中,c语言提供了几种方式 这条语句。例如:

万方数据

Page 8: System verilog简介

initial begin

test1:read_enable=O:

test2:for(i=0;i<=255;i++)

end

21)对事件控制的增强

Verilog使用@标记来控制基于特定事件的执

行流,SystemVerilog增强了@事件控制。

●有条件的事件控制

@标记的一个基本应用就是推断具有使能输入的

锁存器。下面的例子演示了锁存器建模的基本风格。

always@(data or en)

if(en)Y=data;

这种编码风格对仿真来说是效率很低,因为即

使在使能无效的时候,数据输入的每次改变都会触

发事件控制,都要消耗仿真时间。SystemVerilog在事

件控制中加入了一个iff条件。只有珊条件为真的

条件下,事件控制才会被触发。通过将使能判断移

入到事件控制里面,使得只有在锁存器输出能够改

变的时候事件控制才会被触发。例如:

always@(a or en iff en==1)

Y2 a:

●事件控制中的表达式

Verilog允许在@事件控制列表中使用表达式,

例如:

always@((a术b))

always@(memory[address])

在第一个例子中,是当操作数发生改变的时候

还是只有当运算结果发生改变的时候才会触发事件

控制?在第二个例子中,是当memory的地址发生变

化的时候还是只有当memory的值发生变化的时候

才会触发事件控制?当@事件控制中包含表达式的

时候,IEEE Verilog标准允许仿真器进行不同的优

化。这就可能导致在不同的仿真器间有不同的仿真

结果,可能还会导致仿真与综合之间的结果不一致。

k●4^,^⋯^⋯;⋯⋯一

SystemVerilog加入了一个changed关键字,在事件

控制列表中它被用作一个修饰符。@(changed(表达

式))能够显式地定义只有当表达式的结果发生改变

的时候才会触发事件控制。例如:

always@(changed(a水b))

always@(changed memory[address])

●事件控制中的赋值

Verilog不允许在事件控制中使用赋值。Sys—

temVerilog允许在事件控制中使用赋值表达式。事

件控制仅仅对赋值表达式右侧的变化敏感。例如:

always@(v=a球b)

22)新的always过程块

Verilog使用always过程块来表示时序逻辑、组

合逻辑和锁存逻辑的RTL模型。综合工具和其它软

件工具必须根据过程起始处的事件控制列表以及过

程内的语句来推断always过程的意图。这种推断会

导致仿真结果和综合结果之间的不一致。Sys—

temVerilog增加了三个新的过程来显式地指示逻辑

意图。

always_ff:表示时序逻辑的过程块;

always_comb:表示组合逻辑的过程块;

always_latch:表示锁存逻辑的过程块。

例如:

always—comb@(a or b or sel)

begin

if(sel)Y=a;

else Y=b:

end

软件工具能够检查事件控制敏感列表和过程的

内容来保证逻辑的功能匹配过程的类型。例如,工具

能够检查一个always_comb过程能够敏感过程内读

取的所有外部值,对逻辑的每一个分支的相同变量

进行赋值,并且检查分支是否覆盖了所有可能的条

件。如果任何一个条件没有满足,软件工具均会报告

该过程没有正确建模组合逻辑。

万方数据

Page 9: System verilog简介

23)动态过程

Verilog通过使用fork-jion提供了一种静态的并

发过程。每个分支都是一个分离的、并发的过程。过

程块中,fork-jion后的任何语句必须在组内的每一

个过程完成后才会执行。例如:

initial begin

fork

send_packet_task(1,255,O);

send—packet_task(7,128,5);

watch—result_task(1,255,0);

watch—resuh_task(7,1 28,5);

jion//所有的任务必须完成后才会到达这里

end

SystemVerilog通过process关键字加入了一个新

的、动态的过程。它为过程产生分支,然后继续执行

而无需等待其他过程完成。过程不会阻塞过程或任

务内的语句执行。这种方式能够为多线程过程建模。

例如:

initial begin

process send_packet_task(1,255,0);

process send_packet_task(7,1 28,5);

process watch_result_task(1,255,0);

process watch_result_task(7,128,5);

end//所有的过程并行运行

24)并行处理

硬件设计常遇到需要并行处理的情况,此时在

资源分配和同步操作上需要认真安排时序。由于并

行处理一般由硬件实现,硬件可以由设计者自行安

排,不存在实现的问题。但编写测试模块,则是希望

代码简明扼要、可读性好、仿真效率高。在同步仿真

模块的编写时,原Verilog的folk-join语句可以让指

定的一组动作同时启动,但必须等所有的动作都完

成后,才能结束。SystemVerilog添加了join—none与

ioin—any声明,可以让一组同时启动的动作,各自停

止而不受其他动作的影响(join—none),或者当其

中一个动作完成后整组动作都停止(join—any)。而

在资源共享使用方面,最常见的是多个硬件模块同

时对共享资源作读写操作。若安排的读写顺序有

错误,将出现严重问题SystemVerilog添加了

semaphore、mailbox等类来协助资源的共享使用。

25)任务和函数的增强

SystemVerilog为Verilog的任务和函数作了几个

增强。

●静态和自动的存储

缺省情况下,在Verilog任务或函数内的所有存

储都是静态的。Verilog一2001允许将任务和函数声

明成自动的。在SystemVerilog中:1)静态任务和函

数内的特定数据可以显式地声明成自动的。声明成

自动的数据在块中具有完整的生命周期,并且在任

务和函数调用的入口处初始化;2)自动的任务或函

数中的特定数据可以显式地声明成静态的。自动任

务或函数中声明成静态的数据在块的本地范围内具

有静态的生命周期。

●从任何点返回

Verilog在任务或函数中执行到endtask或end—

function关键字的时候返回。函数的返回值是给函数

名赋的最后一个值。SystemVerilog加入了一个return

关键字,使用这个关键字,一个任务或函数可以在任

何点上返回。

●多语句

Verilog要求任务或函数只具有一个语句或语

句块。多条语句必须组合到单一的begin—end或

fork-jion块中。SystemVerilog去除了这种限制。因

此,多条语句可以在一个任务或函数中列出而无需

使用的begin—end或fork-jion。每有分组的语句就像

在begin—end中一样顺序执行。设计者还可以产生

没有语句的任务或函数定义。

●void函数

Verilog要求函数具有一个返回值,函数的调用

接收这个返回值。SystemVerilog加入了void数据

类型,这个数据类型可以作为函数的返回值类型。

void函数可以像Verilog任务一样进行调用,而无需

L,‘‘^ ,^.^.^..^:⋯⋯一 万方数据

Page 10: System verilog简介

China Integrated Circuit

I⋯H巾国集成电路 珏“■—■■一 一7。

接收返回值。void函数和任务的差别在于函数存在

几个限制,例如没有时间控制等。

●函数的输入和输出

Verilog标准要求函数至少具有一个输入,不能

有输出或者双向端口。SystemVerilog去除了这些限

制。函数可以具有任意数目的输人、输出以及双向

端口,也可以什么也没有。

26)、defi Re的增强

SystemVerilog增强了、define编译器指令的能

力,以支持将字符串作为宏的参数。宏文本字符串

中可以包含引号,引号的前面必须用一个反勾号

(、’’),这就允许字符串中包含宏参数。宏文本可以

在行的尾部包含一个反斜杠(\)来表示在下一行

继续。如果宏文本字符串中包含反斜杠,则反斜杠

应该被放在两个反勾号之间(、\、),这样它就不会

被认为是Verilog转义标识符的开始。宏文本字符串

还可以包含双反勾号(“),它允许标识符能够从参

数中构建。这些增强使得、define指令更加灵活。例

如:、include指令后可以紧跟宏名字来替代一个字符

串。

、define fl“一/project_top/opcode—defines’’

、include、fl

27)增加了C++/dava面向对象的动态数

据类型:CIass

在一个类(class)里,可以包含数据声明fdata

declaration)和处理数据的任务与函数。数据声明又

成称属性(properties),而任务(task)与函数

(function)称作方法(methods);属性与方法定义了

对象(object)的内容与功能。有了类后,对象可以动

态地产生、删除与设定。而对象可以继承其它类的

屙陛与方法。在SystemVerilog中,设计者不需处理

存储器的配置与归还,仿真工具会自动处理,这可防

止因存储器管理不当所造成的逐渐被某一进程占用

而变少的情况。

k●●^,^⋯^⋯:⋯⋯一

28)事务级别测试(Transaction—Ievel

tests)

SystemVerilog提供了许多基于交易事务建模所

需要的能力,可将系统模型抽象化,并可将验证从块

级提前到体系结构级。由于只考虑交易事务和体系

结构级别的问题,设计者不必关心信号冒险竞争等

具体电路细节,编写系统验证用的代码更加方便,代

码也更简明扼要,便于重复使用和维护。

29)直接的外部语言接口

SystemVerilog添加了直接外部语言接口(Direct

Foreign Language Interface),允许SystemVerilog代码

直接使用C/C++函数,避免了以往需要使用Verilog

Programming Language Interface(PLI)所造成的仿真

速度变慢的情况。此外,直接外部语言接口,也允许

c程序,直接调用SystemVerilog的任务与函数,而用

SystemVerilog编写的系统验证代码块中还可以插入

RTL或gate—level代码块,这也就是说由C编写的

高层次系统仿真代码在仿真验证时硬件模块可以具

体到RTL和门级,这必将大大提高系统的验证和查

错效率。

30)断言

SystemVerilogqb添加了断言应用程序接口(As—

sertion Application Program Interface),便于测试代码

与Verilog仿真器之间的数据通信,显著改善了系统

的测试和查错功能。断言应用程序接口包括:$one—

hot(<表达式>);$inset(<表达式>,<表达式>,⋯)

;$isunknown(<表达式>)-..·.等断言应用程序。断言

应用程序集的每条子程序具有各自的分析能力,其

中包括立即断言(Immediate Assertions),并发断言

(Concurrent Assertions),布尔表达式断言,序列断

言等等,有兴趣的读者可以参考SystemVerilog 3.1

LRM一一Section 17。

以上列出了常用SystemVerilog的扩展提要,共

30条,其实新标准在Verilog一2001基础上所做扩展

远远不止这些,作者不可能用这么短的篇幅讲解清

万方数据

Page 11: System verilog简介

楚。有兴趣的读者可以用以下网址:http://www.eda.

org/sv/SystemVerilog_3.1a.pdf查阅SystemVerilog 3.1a

LRM、(语言参考手册)。

结论

综上所述SystemVerilog对Verilog一2001标准进

行了一系列扩展。这些扩展使得大型数字系统设

计建模和验证的工作量得以减轻,并维持了Verilog

原有的竞争力。用SystemVerilog编写的各种层次的

代码不但简明扼要,清晰易懂,容易维护,而且功能

非常强大。工程师们只要熟练掌握SystemVerilog和

C两种语言,就能很快适应基于平台的SoC设计方

法,自己独立编写或利用各种成熟程度和层次的可

重用代码加以修改,加速完成整个SoC系统的仿真

测试和验证。我国集成电路设计行业的工程师必须

在掌握Verilog的基础上,尽快地学会并熟练掌握这

种新语言,积极主动地将新标准用于设计实践,紧跟

国际设计行业的步伐,尽快地提高我国Ic设计的水

准。四

参考资料

●SystemVerilog 3.1a LRM http://www.eda.org/sv/Sys—

temVerilog_3.1a.pdf

●SystemVerilog Symposium 2003一Basic Training,

Methodology&Overview.Enhancements for Design&

Verificatio http://l^IrWW.sunburst—design.con

●Dave Kelf, “How to Make the Verilog Productivity

Leap Using SystemVerilog,”in Compiler magazine,Feb.

2003. Available on http://www.synopsys.

com/news/pubs/compiler/art3一sll—feb03.html

●Richard Goefing.”Cadence IEEE donation ovedaps

SystemVerilog,”EE Times,June 2,2003.Available on

http://www.eedesign.com/news/OEG20030602S01 16

●SystemVerilog Strategy.Plans and Proposal to ad—

dress issues, Available on http://www.eda.

org/sv-ee/hm/0354.html

●Richard Goering.“Accellera approves SystemVer-

ilog and three other standards,” EE Times,May 30,

2003. Available on http://www.eedesign.com/sto—

ry/OEG20030530S0020

●Janick Bergeron.Writing Testbenches:Functional

Verification of HDL Models,2nd ed.,Kluwer Academic

Publishers,Boston,2003.

VLS I乐观看2006年半导体产业

辞岁迎新,许多市场调研公司已先后对2006年的半导体市场进行了预测。Gartner公司的副总裁兼

首席分析师Bryan Lewis认为我们应该忘掉过去,半导体商业周期正变得更加温和,SEMI Europe则报告

半导体市场前景光明,但供应链上存在隐患,并预测2006年全球半导体产业增长17.5%。

目前,VLSI Research也提出了他们的预测,认为2005年表现平平之后,2006年半导体产业将出现

8.2%的增长,IC和平板显示器生产设备将比2005年增长6%。VLSI Research报告说,过去的2005年,半

导体产业估计比2004年增长了6—7%,而半导体设备产业大约下降了34%。而对于2006年,该机构持

乐观看法,认为”进入2006年之际,芯片生产行业处于健康状态”。据VLSI Research,预计2006年全球

芯片销售额达到2,080亿美元,比2005年增长8.2%。预计Ic销售量增长8.8%,但平均销售价格(ASP)预

计将下降0.6%。预计2006年IC设备市场达到542亿美元,比2005年增长6%。其中包括芯片和平板显

示器生产设备。

万方数据

Page 12: System verilog简介

SystemVerilog简介作者: 夏宇闻

作者单位: 北京航空航天大学

刊名:中国集成电路

英文刊名: CHINA INTEGRATED CIRCUIT

年,卷(期): 2006,15(2)

引用次数: 1次

参考文献(7条)

1.SystemVerilog 3.1a LRM

2.SystemVerilog Symposium 2003 -Basic Training,Methodology & Overview,Enhancements for Design &

Verificatio

3.Dave Kelf How to Make the Verilog Productivity Leap Using SystemVerilog, in Compiler magazine 2003

4.Richard Goering Cadence IEEE donation overlaps SystemVerilog 2003

5.SystemVerilog Strategy,Plans and Proposal to address issues

6.Richard Goering Accellera approves SystemVerilog and three other standards 2003

7.Janick Bergeron Writing Testbenches:Functional Verification of HDL Models 2003

引证文献(1条)

1.刘燕.王京梅.张帆.兰中文 基于VMM的流量管理芯片验证[期刊论文]-现代电子技术 2009(12)

本文链接:http://d.g.wanfangdata.com.cn/Periodical_zgjcdl200602012.aspx

下载时间:2010年6月19日