SlideShare a Scribd company logo
1 of 12
Download to read offline
SystemVeri log简介★
                         北京航空航天大学夏宇闻


  摘要:美国电气和电子工程师协会(IEEE)最近(2005年11月9日)批准了SystemVerilog硬件描
  述语言的新标准。     新标准是为了适应日益复杂的系统芯片(SoC)设计在原Veri log-2001的基础
  上扩展的。按新标准开发的EDA工具必将大幅度地提高SoC的设计和验证效率。本文对新标准的扩
  展做了简要的介绍,希望引起国内IC设计界对这种功能强大语言的重视。


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

               刖吾                    次上,更方便地为复杂IP之间的连接、测试验证和
                                     查错建立模型,显著地提高了代码的可读性、可维护
                                     性、设计和验证效率,极大地提高了编写测试平台的
   SystemVerilog是IEEE最近推出的硬件描述和
                                     能力。
验证语言,它是在原Verilog(IEEE 1364—1995和
一2001)基础上扩展的新语言。这种新语言将设计                SystemVerilog由OVI(Open   Verilog Internation—


和验证所需的语言组合成同一种语言。而且Sys—              a1)和VI(VHDL Intematioanl)两个国际标准化组织
                                     合作成立的Accellera集团推出,主要用于数字系统
temVerilog还是Verilog一2001的超集。因此,目前的
Verilog用户使用SystemVerilog不存在任何问题。     芯片的设计和验证流程。由于SystemVerilog具有与

SystemVerilog一问世就拥有大量承诺支持它的供应        高级编程语言(如c语言)直接连接调试的强大功

商,这一切都预示着SystemVerilog会有良好的市场        能,为系统级软硬件协同设计验证提供了极大的方

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

   SystemVerilog与Verilog有许多重要的区别。第   非常深远的意义。

一,SystemVerilog提供了完整的仿真模型,它将每个          读者若想全面深入地理解和掌握语法的要点,

时隙细分成1 1个有序的段,并规定了每个段内必须             不但需要认真阅读SystemVerilog LRM(语法手册),

发生的事件。这样就可以避免当仿真包含反应性测               还需要上机练习才行。为了帮助读者用最少的时间

试平台、覆盖率分析工具和相互作用的第三方c模               初步了解SystemVerilog标准所做的扩展,作者将从

型在内的各种模型时,有可能发生的某些不确定                下面30个方面,对最近批准的SystemVerilog标准
                                     作简要的介绍。
性。第二,SystemVerilog具有类似C++语言的一些
高级数据类型和功能,如:结构体、联合体、打包和非
打包的数组,动态存储器分配和动态进程等,更适合                 1)数组
测试平台的开发和系统级建模。第三,仿真和静态验                 在Verilog中可以声明数组类型,reg和线网类

证工具可以使用相同的声明集合。第四,Sys—               型还可以具有矢量位宽。在对象名前面声明的位宽

temVerilog的新扩充还包括了接口块、断言函数等。         表示变量的位宽,在对象名后面声明的维数表示数

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

标准语言,相信一定能受到广大设计人员,尤其是SOC设计人员的欢迎。
』n,曲笛R1苴日、_园蜀曩聂园
 万
   方数据                                                       。。一,.…….:….…
组的个数。举例如下:                                    用。例如:

reg[7:0]rl【1:256];//声明r1为256个8位的变量            typedef      enum{FALSE=I’b0,TRUE)boolean;

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


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


语表示在对象名前面声明的数组的维数;使用“非
打包数组(unpacked array)”这一术语表示在对象                       3)结构体和联合体
名后面声明的数组的维数。打包数组可以由下面的                        Verilog语法中没有结构体或联合体,而结构体或联
数据类型组成:bit、logic、reg、wire以及其它的线网类             合体在把几个声明组合在一起的时候非常有用。
型。无论是打包数组还是非打包数组都可以声明成                        SystemVerilog增加了结构体和联合体,其语法类似
多维的。举例如下:                                     于C。

bit[7:0]a;//打包数组a为bit类型(双值)只有一个
包(包由字节,即8位,组成)                                struct{
bit   b[7:0];//非打包数组b为bit类型(双值)(一位),           reg[15:0]opcode;
共有8位从b[0l至0 b[71                               reg[23:0]addr;
bit[0:1 1][7:0]c;//打包数组c(每包12个字节),            }IR;
只有一个包                                         //声明IR是一个结构体,由两部分组成:16位的操
bit[3:0][7:0]d[1:10];//d的每个包由4个字节(8           作码opcode和24位的地址addr
位)组成,d共有10个非打包的包
      上例中非打包数组大小的定义([1:10])放在打                union    I

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

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

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

个字节组成。                                               结构体或联合体中的域可以通过在变量名和域
                                              名字之间插入句点()来引用:
      2)枚举类型                                  IR.opcode=1;//设置IR变量中的opcode域
      Verilog语法中没有枚举类型。标识符必须显式                N.f=0.0;          ,/将N变量中的f域设置成浮点数的值
                                              0.0
地声明为线网、变量或参数,并赋值。SystemVerilog
允许使用类似于c的语法定义枚举类型。枚举类型                        设计者可以使用typedef为结构体或联合体的定义
具有一组被命名的初始值。缺省情况下,初始值从0                       指定名字,举例如下。
开始递增,但是设计者也可以显式地指定初始值。
枚举类型的例子如下:                                    typedef      struct{

enum{red,yellow,green)RGB;//red=2’b0,yellow    reg[7:0]opcode;

=2’b01.green=2’b10;                            reg[23:0]addr;

enum(WAIT=2’b01,LOAD,DONE)states;//LOAD       l instruction;         //命名的结构体,instruction是一个由
=2’blO,DONE=2’bl 1;                           两部分

      设计者还可以使用typedef为枚举类型指定一                               //(16位的操作码opcode和24位的地址
个名字,从而允许这个枚举类型可以在许多地方使                        addr)组成的指令



  万
    方数据
instruction IR;       //结构体实例,定义IR具有指令   module   RAM(chip—bus io,//RAM模块的端口中包

 (instruction)同样的结构                      含已定义的接口chip—bus,具体接口名为io
     结构体可以使用值的级联来完整地赋值,例如:                        input   clk);

instruction=f5,200};//表示操作码为5,地址为200              //可以使用io.read—request引用接口中的一

     结构体可以作为整体传递到函数或任务,也可                个信号
以从函数或任务传递过来,也可以作为模块端口进                   PndmodlJle


行传递。
                                         module   CPU(chip_bus    io,input   clk);

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

     Verilog模块之问的连接是通过模块端口进行             chip_bus,具体名为io
的。为了给构成设计的各个模块定义端口,设计者
必须对所做的硬件设计有详细的认识。但在设计
的初期,设计者很难把握设计的细节。而一旦模块
的端口定义完成后,端口的配置就很难改变。另外,
设计中的许多模块往往具有相同的端口名,在Ver—                 module top;


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

义和连接,这增加许多无谓的工作量。                        chip_bus    a;    //接口的实例引用,说明a是与

     SystemVerilog提供了一个全新的、高层抽象的         chip_bus同样的接口

连接定义块,这个连接块被称为接口(Interface)。接            RAM   men(.io(a),clk);//将接口a连接到mem实例
口块在关键字interface和endinterface之间定义,它       模块的io接口

独立于模块。接口在模块中就像独立端口一样使用。                  CPU   cpu(.io(a),elk);//将接El a连接到cpu实例模
在最简单的形式下,接口可以认为是一组线网。例                   块的io接口
                                         endmodule
如,可以将PCI总线的所有信号绑定在一起组成一
个接口。借助于接口块的定义,编写代码时若遇到                         实际上,SystemVerilog的接口不仅仅可以表示
许多个实例互相连接的情况,可以不必逐一建立各                   信号的绑定和互连。由于SystemVerilog的接1:3中可
模块对应端口间的连接,大大加快了设计工作。随                   以包含参数、常量、变量、结构、函数、任务、initial块、

着设计的深入,设计细节逐渐变得清晰,许多模块的                  always块以及连续赋值语句,所以SystemVerilog的
接口需要添加和修改。而对接口块所做的修改,可                   接口还可以包含内建的协议检查,以及使用该接口

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

个修改每个模块的接口,大大节省了相关模块接口
修改的工作量。下面是接口的使用实例:                             5)随机激励信号的产生
                                               在设计中,总是有一些边角情况是比较不容易
interface chip—bus;    //定义接口chip_bus    发生,或是不容易想到的,因此借助随机产生的测试
wire read_request,read_grant;            激励,可以帮助验证边角情况。Verilog已经具有
wire[7:0]address,data;                   ¥random来产生随机数,但设计者并无有效办法控
endinterface                             制该随机数的范围与顺序。在SystemVerilog 3.1里,
                                         增加了rand与randc两个对象类,用于设定随机数



 万
   方数据                                                                       ‘、‘‘^
                                                                                     J^.--^.-^:……一
l…H巾国集成电路                                                                      珏“
■—_            China Integrated Circuit                                        ”7。。


产生的条件。下例中设计者声明一个名为Bus的类,                                   SystemVerilog为了能更方便地控制时间单位,
并规定地址总线的最低的两位必须为0。而在使用                             做了两个重要的改进。1)时间值可以显式地指定为
时,利用rand类里的randomize子类,产生50个随                      某一个单位。时间单位可以在s、ms、ns、ps或fs之间
机数据与地址,大大简化了Verilog原来产生随机数                         选择,时间单位作为时间值的后缀出现。例如:
的手段。                                               forever#5ns clock=-clock;


                                                           2)SystemVerilog允许使用新的关键字(timeu—
class Bus;                                         nits和timeprecision)来指定时间单位和精度。这些
      rand   bit【15:0】addr;                        声明可以在任何模块中指定,同时也可以在全局空
      rand bit【31:0】data;                          间中指定。时间单位和精度必须是10的幂,范围可
   constraint     word   align{addr[1:0]_=‘2b0;)   以从s到fs。例如:
endclass                                           timeunits lns;


                                                   timeprecision 1 0ps;

Bus bus=new;


                                                           7)抽象数据类型
repeat(50)begin                                            Verilog提供了面向底层硬件的线网、寄存器和
  if(bus.randomize0==1)                            变量数据类型。这些类型代表了4态逻辑值,通常用
       ¥display(”addr=%16h data=%hha”,bus.addr,    来在底层上对硬件进行建模和验证。线网数据类型
bus.data);                                         还具有多个强度级别,并且能够为多驱动源的线网
  else                                             提供解析功能。
       ¥display(”Randomization failed.U”);                 SystemVerilog包括了C语言的char和int数据
end
                                                   类型,它允许在Verilog模型和验证程序中直接使用
                                                   c和c++代码。Verilog PLI不再需要整合总线功能
       6)时间单位和精度                                   模型、算法模型和c函数。SystemVerilog还为Ver—
       在Verilog中,表示时间的值使用一个数来表                     ilog加入了几个新的数据类型,以便能够在更抽象
示,而不带有任何时间单位。                                      的层次上为硬件电路建模。
例如:forever#5         clock=~clock;                         char:两态的有符号变量,它与c语言中的char
       单从这一语句中,设计者无法判断5代表的是                        数据类型相同,可以是一个8位整数(ASCII)或
5ns?5ps?还是5us。Verilog的时间单位和精度是作                    short   int(Unicode);

为每个模块的属性,在模块代码前用编译器指令                                      int:两态的有符号变量,它与C语言中的int数
、timescale来设置。使用这种方法存在固有的缺陷,                       据类型相似,但被精确地定义成32位;
因为编译器指令的执行依赖于源代码的编译顺序,                                     shortint:两态的有符号变量,被精确地定义成
编译器总是将它遇到的最后一个、timescale设置的                        16位;

时间单位和精度作为标准。那么,若有些模块代码                                     longint:两态的有符号变量,它与c语言中的
没有用、timeseale设置时间单位和精度,当这种源代                       long数据类型相似,但被精确地定义成64位;
码前缺少时间单位定义的模块与有、timescale设置                                byte:两态的有符号变量,被精确地定义成8
的模块一起仿真时,就有可能出现完全想象不到的                             位;

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


●、¨^.,^…I…;……一
  万
    方数据
型,可以用来替代Verilog的reg数据类型;                       8)有符号和无符号限定符
   logic:四态的可以具有任意位宽的无符号数据                     缺省情况下,Verilog的net和reg数据类型是无
类型,可以用来替代Verilog的线网或reg数据类             符号类型,integer类型是有符号类型变量。Ve卜
型,但具有某些限制;                             ilog一2001标准允许使用signed关键字将无符号类
   shortreal:两态的单精度浮点变量,与c语言的          型显式地声明成有符号类型。SystemVerilog添加了
float类型相同;                             类似的能力,它可以通过unsigned关键字将有符号
   void:表示没有返回值,可以定义成函数的返回             数据类型显式地声明成有无符号数据类型。例如:
值,与C语言中的含义相同。

   SystemVerilog的bit和其他数据类型允许用户
使用两态逻辑为设计建模,两态逻辑模型的仿真速
度快,效率高。由于Verilog语言没有两态数据类型,                    值得注意的是unsigned在Verilog中是保留字,
因此许多仿真器将这种功能作为仿真器的选项。有                 但并没有被Verilog标准使用。
些仿真器不支持两态逻辑数据,所以有时在必须用
三态或四态逻辑建模的设计中强制使用两态逻辑,                         9)用户定义的类型
仿真器还会出现问题。而SystemVerilog的bit数据                 Verilog不允许用户定义新的数据类型。Sys—
类型能够极大提高仿真器的性能,同时在需要的时                 temVerilog通过使用typedef提供了定义新的数据类
候仍然可以使用三态或四态逻辑。用改变数据类型                 型方法,这与C语言类似。用户定义的类型可以与
的方法来代替仿真器的逻辑状态选项,使得设计模                 其它数据类型一样地在声明中使用。例如:
型能适应多种仿真器。                             typedef   unsigned   int uint;

   SystemVerilog的logic数据类型比Verilog的线   uint a.b:

网和寄存器数据类型更加灵活,它使得在任何抽象
层次上为硬件建模变得更加容易。logic类型能够以                      用户定义的数据类型可以在它的定义之前使
下面的任何一种方法赋值:                           用,只要它首先在空的typedef中说明,例如:
   任意次的过程赋值语句赋值,能够替代Verilog            typedef   int48;//空的typedef,即虽然定义了int48,
的reg类型;                                但究竟int48定义成什么?
   单一的连续赋值语句赋值,能够有限地替代                             ∥还需要在其他地方进行完整的定义
Verilog的wire类型;                        int48   c;//虽然int48具体如何定义并未确定,但可
   连接到单一原语的输出,能够有限制地替代                 以把e定义为是int48类型的。
Verilog的wire类型;

   由于logic数据类型能够被用来替代Vet/log的                  10)在命名块中声明变量
reg或wire(具有限制),这就使得设计者能在更高
                                            Verilog允许变量在命名的begin—end或
的抽象层次上建模,并且随着设计的深入,能不断地
                                       fork-join语句组中声明。对于命名的语句组来说,在
添加设计细节而不必改变数据类型的声明。logic数              块内定义的变量是本地的,但它们可以用层次化命
据类型不能表示信号的强度,也不具有线逻辑的解
                                       名方法引用它们。在SystemVerilog中,变量既可以
析功能,因此logic数据类型比Verilog的wire类型         在命名的块中也可以在未命名的块中声明,对在未
能更有效地仿真和综合。
                                       命名的块中声明的变量,不能使用层次名来访问,所
                                       有的变量类型,包括用户定义的类型、枚举类型、结


  万
    方数据
l…H巾国集成电路                                                                      珏“
■●_           China Inte grated Circuit
                                                                               ”7。


构体和联合体都可以在begin—end或fork-join命名                     在Verilog中,用字母赋值时候有一些约定。而
的语句组中声明。                                       SystemVerilog则为用字母赋值作了下面的改进:
                                               变量的所有位可以方便地用字母(、0、、1、、z或、X)赋
        1   1)常量                               值。填充一个任意位宽的矢量,而无需显式地指定矢

        在Verilog中有三种特殊类型的常量:parame—            量的位宽,例如:

ter、specparam和localparam。而在SystemVerilog中,     bit【63:0】data;

允许使用const关键字声明常量。例如:                           data=、1;//将data的所有位(共64位)都设置成l
const       char colon=“:”:

                                                    15)字符串(str ing)
        12)可重定义的数据类型                               SystemVerilog添加了可变长度的字符串数据类

        SystemVerilog扩展了Verilog的参数(parame—     型,使用者不需声明字符串数据的长度,编译工具会
ter)功能,使其可以包含数据类型。若模块定义了参                      自动判断。而SystemVerilog也提供了常用字符串处
数,用于表示数据类型,则在引用该模块的实例时,                        理函数,例如putc0,getc0,atoi0,itoa0等,而口些字符
可通过参数传递重新定义每个实例中的数据类型。                         串处理函数功能以前必须通过PLI函数才能实现。

例如:

module foo:                                         16)强制类型转换
 #(parameter      type   VAR—TYPE=shortint;)       Verilog不能将一个值强制转换成不同的数据类
 (input logic[7:0]i,output logic[7:0】o);       型。SystemVerilog通过使用<数据类型>’操作符
 VAR_TYPE         j=o;      //如果不重新定义,j的数据类    提供了数据类型的强制转换功能。这种强制转换可
型为shortint                                     以转换成任意类型,包括用户定义的类型。例如:
                                               int’(2.0木3.0)//将计算结果转换为int类型
                                               mytype’(foo)//将foo转换为mytype类型


module bar;                                        在强制转换操作符前指定一个10进制数可以
 logic[3:0]i,o;                                用来确定转换后的矢量位宽,例如:
 foo#(.VAR—TYPE(int))ul(i,o);//重新将             17’(X一2)//将结果转换为17位宽
VAR—TYPE定义成int类型                               也可以将结果转换成有符号值,例如:
endmodule                                      signed’(x)//将x转换为有符号值


     13)模块端口连接                                     1   7)操作符
    在Verilog中,可以连接到模块端El的数据类型                      Verilog没有C语言的递增(++)和递减(~)
被限制为线网类型以及变量类型中的reg、integer和                   操作符。而SystemVerilog加入了几个新的操作符:
time。而在SystemVerilog中,则去除了这种限制,任                    ++和~:递增和递减操作符;
何数据类型都可以通过端口传递,包括实数、数组和                                +=、一=、:g_--、_--、%=、&=、^=、J=、<<=、>>=、<<<=

结构体。                                           和>>>=赋值操作符;


     14)用字母赋值                                      18)具有唯一性和优先级的条件语句


  万
    方数据
在Verilog中,如果没有遵循严格的编码风格,它的                         来跳转到新的语句,包括:return、break、continue和
if-else和case语句会在RTL仿真和RTL综合间具                      goto。在Verilog中除了通过使用disable语句跳转到
有不一致的结果。如果没有正确使用full—case和                         语句组的尾部外,没有提供任何其它跳转语句。使用
parallel_case综合指令还会引起一些其它的错误。                      disable语句执行中止和继续功能要求加入块的名
      SystemVerilog能够显式地指明什么时候条件语                  字,并且会产生不直观的代码。SystemVerilog加入了
句的分支是唯一的,或者什么时候需要计算优先级。                            c语言的break和continue关键字,这两个关键字不

设计者可以在if或case关键字之前使用unique或                        要求使用块名字。另外,SystemVerilog还加入了一个
requires关键字。这些关键字可以向仿真器、综合编                        return关键字,它可以用来在任何执行点上退出一
译器、以及其它工具指示设计者期望的硬件类型。                             个任务或函数。
工具使用这些信息来检查if或case语句是否正确                                break:退出一个循环,与C语言相同;

地为期望的逻辑建立了模型。例如,如果使用unique                              continue:跳转到一个循环的尾部,与C语言相
限定了条件语句,那么在不希望的ease值出现的时                           同;

候仿真器就会发布警告信息。                                           retum表达式:退出一个函数;
bit[2:0]a;                                              return:退出一个任务或void类型的函数。
unique     if((a==O)ll(a==1))y=inl;                SystemVerilog没有包含C语言中的goto语句。
             else    if(a==2)Y=in2;
             else    if(a==4)Y=in3;//值3、5、6、7会引起        20)块名字和语句标签
一个警告                                                    在Verilog中,设计者可以通过在begin或fork
                                                   关键字之后指定名字来为begin—end或fork-jion语
priorityif(a[2:1]_=0)Y=inl;//a是0或1                 句组命名。这个指定的名字代表整个语句块。Sys—
             else    if(a【2]_=o)Y=in2;//a是2或3      temVerilog还允许在end或iion关键字之后指定一
                     else   y=in3;//如果a为其他的值       个匹配的块名字。这种机制很容易将end或jion与
                                                   对应的begin或fork联系起来,尤其是在一个长的
unique     case(a)                                 块或嵌套的块中。块结尾处的名字是可选的,但如果
     0,1:Y=inl;                                    使用的话,它必须与块起始处的名字相同。例如:
         2:Y=in2;

         4:Y=in3;                                  begin:foo//在begin之后的块名字
     endcase//值3、5、6.7会引起一个警告

                                                   fork:bar//具有名字的嵌套的块
priority   casez(a)

     2’bOO?:y=inl;//a是0或1                          jion:bar//必须具有相同的名字
     2’b077:Y=in2;//a是2或3

     default:y=in3;//如果a为其他的值                      end:foo//必须具有相同的名字
           endcase


                                                        SystemVerilogJ丕允许像C语言一样为单个语句
     1   9)跳转语句                                    设置标签。语句标签放置在语句的前面,用来标识
     在语句的执行过程中,c语言提供了几种方式                          这条语句。例如:



  万
    方数据
initial begin                        SystemVerilog加入了一个changed关键字,在事件
 test 1:read_enable=O:               控制列表中它被用作一个修饰符。@(changed(表达
                                     式))能够显式地定义只有当表达式的结果发生改变

 test2:for(i=0;i<=255;i++)           的时候才会触发事件控制。例如:
                                     always@(changed(a水b))
end                                  always@(changed memory[address])
                                         ●事件控制中的赋值

         21)对事件控制的增强                     Verilog不允许在事件控制中使用赋值。Sys—
         Verilog使用@标记来控制基于特定事件的执     temVerilog允许在事件控制中使用赋值表达式。事

行流,SystemVerilog增强了@事件控制。            件控制仅仅对赋值表达式右侧的变化敏感。例如:

         ●有条件的事件控制                   always@(v=a球b)

@标记的一个基本应用就是推断具有使能输入的
锁存器。下面的例子演示了锁存器建模的基本风格。                  22)新的always过程块

always@(data     or   en)                Verilog使用always过程块来表示时序逻辑、组
 if(en)Y=data;                       合逻辑和锁存逻辑的RTL模型。综合工具和其它软
         这种编码风格对仿真来说是效率很低,因为即        件工具必须根据过程起始处的事件控制列表以及过
使在使能无效的时候,数据输入的每次改变都会触               程内的语句来推断always过程的意图。这种推断会
发事件控制,都要消耗仿真时间。SystemVerilog在事       导致仿真结果和综合结果之间的不一致。Sys—
件控制中加入了一个iff条件。只有珊条件为真的              temVerilog增加了三个新的过程来显式地指示逻辑
条件下,事件控制才会被触发。通过将使能判断移               意图。

入到事件控制里面,使得只有在锁存器输出能够改                       always_ff:表示时序逻辑的过程块;
变的时候事件控制才会被触发。例如:                            always_comb:表示组合逻辑的过程块;
always@(a     or en   iff   en==1)       always_latch:表示锁存逻辑的过程块。
 Y
     2   a:                              例如:

         ●事件控制中的表达式                  always—comb@(a or b   or   sel)

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

例如:                                     if(sel)Y=a;

always@((a术b))                               else Y=b:


always@(memory[address])               end

         在第一个例子中,是当操作数发生改变的时候            软件工具能够检查事件控制敏感列表和过程的
还是只有当运算结果发生改变的时候才会触发事件               内容来保证逻辑的功能匹配过程的类型。例如,工具
控制?在第二个例子中,是当memory的地址发生变            能够检查一个always_comb过程能够敏感过程内读
化的时候还是只有当memory的值发生变化的时候             取的所有外部值,对逻辑的每一个分支的相同变量
才会触发事件控制?当@事件控制中包含表达式的               进行赋值,并且检查分支是否覆盖了所有可能的条
时候,IEEE Verilog标准允许仿真器进行不同的优         件。如果任何一个条件没有满足,软件工具均会报告
化。这就可能导致在不同的仿真器间有不同的仿真               该过程没有正确建模组合逻辑。
结果,可能还会导致仿真与综合之间的结果不一致。



k●4^,^…^…;……一
  万
    方数据
23)动态过程                                在资源共享使用方面,最常见的是多个硬件模块同

        Verilog通过使用fork-jion提供了一种静态的并          时对共享资源作读写操作。若安排的读写顺序有

发过程。每个分支都是一个分离的、并发的过程。过                        错误,将出现严重问题SystemVerilog添加了

程块中,fork-jion后的任何语句必须在组内的每一                    semaphore、mailbox等类来协助资源的共享使用。
个过程完成后才会执行。例如:
initial begin                                     25)任务和函数的增强
 fork                                             SystemVerilog为Verilog的任务和函数作了几个
      send_packet_task(1,255,O);               增强。

      send—packet_task(7,1 28,5);                 ●静态和自动的存储
   watch—result_task(1,255,0);                    缺省情况下,在Verilog任务或函数内的所有存
   watch—resuh_task(7,1 28,5);                 储都是静态的。Verilog一2001允许将任务和函数声
 jion//所有的任务必须完成后才会到达这里                        明成自动的。在SystemVerilog中:1)静态任务和函
end                                            数内的特定数据可以显式地声明成自动的。声明成
        SystemVerilog通过process关键字加入了一个新        自动的数据在块中具有完整的生命周期,并且在任
的、动态的过程。它为过程产生分支,然后继续执行                        务和函数调用的入口处初始化;2)自动的任务或函

而无需等待其他过程完成。过程不会阻塞过程或任                         数中的特定数据可以显式地声明成静态的。自动任
务内的语句执行。这种方式能够为多线程过程建模。                        务或函数中声明成静态的数据在块的本地范围内具
例如:                                            有静态的生命周期。
initial   begin                                   ●从任何点返回

       process   send_packet_task(1,255,0);       Verilog在任务或函数中执行到endtask或end—
       process   send_packet_task(7,1 28,5);   function关键字的时候返回。函数的返回值是给函数

      process    watch_result_task(1,255,0);   名赋的最后一个值。SystemVerilog加入了一个return
       process   watch_result_task(7,128,5);   关键字,使用这个关键字,一个任务或函数可以在任
       end//所有的过程并行运行                          何点上返回。
                                                  ●多语句

        24)并行处理                                   Verilog要求任务或函数只具有一个语句或语
        硬件设计常遇到需要并行处理的情况,此时在                   句块。多条语句必须组合到单一的begin—end或
资源分配和同步操作上需要认真安排时序。由于并                         fork-jion块中。SystemVerilog去除了这种限制。因

行处理一般由硬件实现,硬件可以由设计者自行安                         此,多条语句可以在一个任务或函数中列出而无需

排,不存在实现的问题。但编写测试模块,则是希望                        使用的begin—end或fork-jion。每有分组的语句就像
代码简明扼要、可读性好、仿真效率高。在同步仿真                        在begin—end中一样顺序执行。设计者还可以产生

模块的编写时,原Verilog的folk-join语句可以让指                没有语句的任务或函数定义。

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

成后,才能结束。SystemVerilog添加了join—none与                Verilog要求函数具有一个返回值,函数的调用

ioin—any声明,可以让一组同时启动的动作,各自停                    接收这个返回值。SystemVerilog加入了void数据
止而不受其他动作的影响(join—none),或者当其                    类型,这个数据类型可以作为函数的返回值类型。

中一个动作完成后整组动作都停止(join—any)。而                    void函数可以像Verilog任务一样进行调用,而无需



   万
     方数据                                                           L,‘‘^
                                                                           ,^.^.^..^:……一
I…H巾国集成电路                                                                        珏“
■—■■一        China Integrated Circuit
                                                                                 一7。

接收返回值。void函数和任务的差别在于函数存在                           28)事务级别测试(Transaction—Ievel
几个限制,例如没有时间控制等。                               tests)
      ●函数的输入和输出                                    SystemVerilog提供了许多基于交易事务建模所
     Verilog标准要求函数至少具有一个输入,不能                 需要的能力,可将系统模型抽象化,并可将验证从块
有输出或者双向端口。SystemVerilog去除了这些限                 级提前到体系结构级。由于只考虑交易事务和体系
制。函数可以具有任意数目的输人、输出以及双向                        结构级别的问题,设计者不必关心信号冒险竞争等
端口,也可以什么也没有。                                  具体电路细节,编写系统验证用的代码更加方便,代
                                              码也更简明扼要,便于重复使用和维护。
     26)、defi Re的增强

     SystemVerilog增强了、define编译器指令的能                29)直接的外部语言接口
力,以支持将字符串作为宏的参数。宏文本字符串                             SystemVerilog添加了直接外部语言接口(Direct
中可以包含引号,引号的前面必须用一个反勾号                         Foreign Language   Interface),允许SystemVerilog代码
(、’’),这就允许字符串中包含宏参数。宏文本可以                     直接使用C/C++函数,避免了以往需要使用Verilog
在行的尾部包含一个反斜杠(\)来表示在下一行                        Programming Language   Interface(PLI)所造成的仿真
继续。如果宏文本字符串中包含反斜杠,则反斜杠                        速度变慢的情况。此外,直接外部语言接口,也允许
应该被放在两个反勾号之间(、\、),这样它就不会                      c程序,直接调用SystemVerilog的任务与函数,而用
被认为是Verilog转义标识符的开始。宏文本字符串                    SystemVerilog编写的系统验证代码块中还可以插入
还可以包含双反勾号(“),它允许标识符能够从参                       RTL或gate—level代码块,这也就是说由C编写的
数中构建。这些增强使得、define指令更加灵活。例                    高层次系统仿真代码在仿真验证时硬件模块可以具
如:、include指令后可以紧跟宏名字来替代一个字符                   体到RTL和门级,这必将大大提高系统的验证和查
串。                                            错效率。
、define   fl“一/project_top/opcode—defines’’
、include、fl
                                                   30)断言

                                                   SystemVerilogqb添加了断言应用程序接口(As—
     27)增加了C++/dava面向对象的动态数                   sertion Application Program   Interface),便于测试代码
据类型:CIass                                     与Verilog仿真器之间的数据通信,显著改善了系统
     在一个类(class)里,可以包含数据声明fdata               的测试和查错功能。断言应用程序接口包括:¥one—
declaration)和处理数据的任务与函数。数据声明又                 hot(<表达式>);¥inset(<表达式>,<表达式>,…)
成称属性(properties),而任务(task)与函数                 ;¥isunknown(<表达式>)-..・.等断言应用程序。断言
(function)称作方法(methods);属性与方法定义了              应用程序集的每条子程序具有各自的分析能力,其
对象(object)的内容与功能。有了类后,对象可以动                   中包括立即断言(Immediate Assertions),并发断言
态地产生、删除与设定。而对象可以继承其它类的                        (Concurrent Assertions),布尔表达式断言,序列断

屙陛与方法。在SystemVerilog中,设计者不需处理                 言等等,有兴趣的读者可以参考SystemVerilog 3.1
存储器的配置与归还,仿真工具会自动处理,这可防                       LRM一一Section 17。

止因存储器管理不当所造成的逐渐被某一进程占用                             以上列出了常用SystemVerilog的扩展提要,共
而变少的情况。                                       30条,其实新标准在Verilog一2001基础上所做扩展
                                              远远不止这些,作者不可能用这么短的篇幅讲解清


k●●^,^…^…:……一
  万
    方数据
楚。有兴趣的读者可以用以下网址:http://www.eda.                       ●SystemVerilog 3.1 a LRM http://www.eda.org/sv/Sys—

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

LRM、(语言参考手册)。                                         ●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.
    综上所述SystemVerilog对Verilog一2001标准进
                                                      2003.              Available       on    http://www.synopsys.
行了一系列扩展。这些扩展使得大型数字系统设
                                                      com/news/pubs/compiler/art3一sll—feb03.html
计建模和验证的工作量得以减轻,并维持了Verilog
                                                      ●Richard Goefing.”Cadence IEEE donation ovedaps
原有的竞争力。用SystemVerilog编写的各种层次的
                                                      SystemVerilog,”EE Times,June 2,2003.Available                on
代码不但简明扼要,清晰易懂,容易维护,而且功能
                                                      http://www.eedesign.com/news/OEG20030602S01 16
非常强大。工程师们只要熟练掌握SystemVerilog和
C两种语言,就能很快适应基于平台的SoC设计方                               ●SystemVerilog Strategy.Plans and Proposal             to   ad—

                                                      dress    issues,          Available      on    http://www.eda.
法,自己独立编写或利用各种成熟程度和层次的可
                                                      org/sv-ee/hm/0354.html
重用代码加以修改,加速完成整个SoC系统的仿真
                                                      ●Richard Goering.“Accellera approves SystemVer-
测试和验证。我国集成电路设计行业的工程师必须
                                                      ilog and three other standards,”         EE Times,May 30,
在掌握Verilog的基础上,尽快地学会并熟练掌握这
                                                      2003.         Available          http://www.eedesign.com/sto—
种新语言,积极主动地将新标准用于设计实践,紧跟                                                         on




国际设计行业的步伐,尽快地提高我国Ic设计的水                               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%。其中包括芯片和平板显
 示器生产设备。




 万
   方数据
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日

More Related Content

Similar to System verilog简介

构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析liangxiao0315
 
UNIT 11 一级指针——指针基本篇.ppt
UNIT 11 一级指针——指针基本篇.pptUNIT 11 一级指针——指针基本篇.ppt
UNIT 11 一级指针——指针基本篇.pptxianbingwang1
 
105-2 iOS程式設計(二)
105-2 iOS程式設計(二) 105-2 iOS程式設計(二)
105-2 iOS程式設計(二) Hao Lee
 
asdfdfasdf
asdfdfasdfasdfdfasdf
asdfdfasdftonghs
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章浒 刘
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程kidmany2001
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析wavefly
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)永立 連
 
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack FirmwareSimen Li
 
Php extension开发
Php extension开发Php extension开发
Php extension开发thinkinlamp
 
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式Will Huang
 
Ipv6協定與原理
Ipv6協定與原理Ipv6協定與原理
Ipv6協定與原理dpodp
 

Similar to System verilog简介 (20)

构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析构建私有云计算平台的Eucalyptus架构分析
构建私有云计算平台的Eucalyptus架构分析
 
UNIT 11 一级指针——指针基本篇.ppt
UNIT 11 一级指针——指针基本篇.pptUNIT 11 一级指针——指针基本篇.ppt
UNIT 11 一级指针——指针基本篇.ppt
 
105-2 iOS程式設計(二)
105-2 iOS程式設計(二) 105-2 iOS程式設計(二)
105-2 iOS程式設計(二)
 
Thrift
ThriftThrift
Thrift
 
About Thrift
About ThriftAbout Thrift
About Thrift
 
asdfdfasdf
asdfdfasdfasdfdfasdf
asdfdfasdf
 
软件工程 第七章
软件工程 第七章软件工程 第七章
软件工程 第七章
 
08 指標
08 指標08 指標
08 指標
 
第9章 Shell 編程
第9章 Shell 編程第9章 Shell 編程
第9章 Shell 編程
 
Google protocol buffers简析
Google protocol buffers简析Google protocol buffers简析
Google protocol buffers简析
 
Ch10
Ch10Ch10
Ch10
 
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
看似比較簡單的推坑教學 C語言從崩潰到崩潰Ex(二)
 
Inside VCL
Inside VCLInside VCL
Inside VCL
 
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
[ZigBee 嵌入式系統] ZigBee Architecture 與 TI Z-Stack Firmware
 
Python 庫簡介
Python 庫簡介Python 庫簡介
Python 庫簡介
 
Php extension开发
Php extension开发Php extension开发
Php extension开发
 
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
TypeScript 開發實戰:開發即時互動的 html5 websocket 聊天室應用程式
 
第1章 概论
第1章 概论第1章 概论
第1章 概论
 
SCJP ch16
SCJP ch16SCJP ch16
SCJP ch16
 
Ipv6協定與原理
Ipv6協定與原理Ipv6協定與原理
Ipv6協定與原理
 

System verilog简介

  • 1. SystemVeri log简介★ 北京航空航天大学夏宇闻 摘要:美国电气和电子工程师协会(IEEE)最近(2005年11月9日)批准了SystemVerilog硬件描 述语言的新标准。 新标准是为了适应日益复杂的系统芯片(SoC)设计在原Veri log-2001的基础 上扩展的。按新标准开发的EDA工具必将大幅度地提高SoC的设计和验证效率。本文对新标准的扩 展做了简要的介绍,希望引起国内IC设计界对这种功能强大语言的重视。 这些扩展使得SystemVerilog可以在更高的抽象层 刖吾 次上,更方便地为复杂IP之间的连接、测试验证和 查错建立模型,显著地提高了代码的可读性、可维护 性、设计和验证效率,极大地提高了编写测试平台的 SystemVerilog是IEEE最近推出的硬件描述和 能力。 验证语言,它是在原Verilog(IEEE 1364—1995和 一2001)基础上扩展的新语言。这种新语言将设计 SystemVerilog由OVI(Open Verilog Internation— 和验证所需的语言组合成同一种语言。而且Sys— a1)和VI(VHDL Intematioanl)两个国际标准化组织 合作成立的Accellera集团推出,主要用于数字系统 temVerilog还是Verilog一2001的超集。因此,目前的 Verilog用户使用SystemVerilog不存在任何问题。 芯片的设计和验证流程。由于SystemVerilog具有与 SystemVerilog一问世就拥有大量承诺支持它的供应 高级编程语言(如c语言)直接连接调试的强大功 商,这一切都预示着SystemVerilog会有良好的市场 能,为系统级软硬件协同设计验证提供了极大的方 前景。 便,因此对包括软硬件在内的现代复杂SoC设计有 SystemVerilog与Verilog有许多重要的区别。第 非常深远的意义。 一,SystemVerilog提供了完整的仿真模型,它将每个 读者若想全面深入地理解和掌握语法的要点, 时隙细分成1 1个有序的段,并规定了每个段内必须 不但需要认真阅读SystemVerilog LRM(语法手册), 发生的事件。这样就可以避免当仿真包含反应性测 还需要上机练习才行。为了帮助读者用最少的时间 试平台、覆盖率分析工具和相互作用的第三方c模 初步了解SystemVerilog标准所做的扩展,作者将从 型在内的各种模型时,有可能发生的某些不确定 下面30个方面,对最近批准的SystemVerilog标准 作简要的介绍。 性。第二,SystemVerilog具有类似C++语言的一些 高级数据类型和功能,如:结构体、联合体、打包和非 打包的数组,动态存储器分配和动态进程等,更适合 1)数组 测试平台的开发和系统级建模。第三,仿真和静态验 在Verilog中可以声明数组类型,reg和线网类 证工具可以使用相同的声明集合。第四,Sys— 型还可以具有矢量位宽。在对象名前面声明的位宽 temVerilog的新扩充还包括了接口块、断言函数等。 表示变量的位宽,在对象名后面声明的维数表示数 ・编者注:IEEE刚刚于2005年11月9日批准System Verilog硬件描述语言的新标准之际,夏宇闻老师为我刊编写了本文。具体介绍了这一 标准语言,相信一定能受到广大设计人员,尤其是SOC设计人员的欢迎。 』n,曲笛R1苴日、_园蜀曩聂园 万   方数据 。。一,.…….:….…
  • 2. 组的个数。举例如下: 用。例如: reg[7:0]rl【1:256];//声明r1为256个8位的变量 typedef enum{FALSE=I’b0,TRUE)boolean; 在SystemVerilog中设计者可使用不同的术语 boolean ready; 表示数组:使用“打包数组(packed array)”这一术 boolean test_complete; 语表示在对象名前面声明的数组的维数;使用“非 打包数组(unpacked array)”这一术语表示在对象 3)结构体和联合体 名后面声明的数组的维数。打包数组可以由下面的 Verilog语法中没有结构体或联合体,而结构体或联 数据类型组成:bit、logic、reg、wire以及其它的线网类 合体在把几个声明组合在一起的时候非常有用。 型。无论是打包数组还是非打包数组都可以声明成 SystemVerilog增加了结构体和联合体,其语法类似 多维的。举例如下: 于C。 bit[7:0]a;//打包数组a为bit类型(双值)只有一个 包(包由字节,即8位,组成) struct{ bit b[7:0];//非打包数组b为bit类型(双值)(一位), reg[15:0]opcode; 共有8位从b[0l至0 b[71 reg[23:0]addr; bit[0:1 1][7:0]c;//打包数组c(每包12个字节), }IR; 只有一个包 //声明IR是一个结构体,由两部分组成:16位的操 bit[3:0][7:0]d[1:10];//d的每个包由4个字节(8 作码opcode和24位的地址addr 位)组成,d共有10个非打包的包 上例中非打包数组大小的定义([1:10])放在打 union I 包数组(d)定义之后,这就允许将整个打包数组(4 intI; 个字节)作为单一的元素进行引用。在上面的例子 shortreal f; 中,d【1】引用非打包数组的第一个元素,该元素由4 1 N; 个字节组成。 结构体或联合体中的域可以通过在变量名和域 名字之间插入句点()来引用: 2)枚举类型 IR.opcode=1;//设置IR变量中的opcode域 Verilog语法中没有枚举类型。标识符必须显式 N.f=0.0; ,/将N变量中的f域设置成浮点数的值 0.0 地声明为线网、变量或参数,并赋值。SystemVerilog 允许使用类似于c的语法定义枚举类型。枚举类型 设计者可以使用typedef为结构体或联合体的定义 具有一组被命名的初始值。缺省情况下,初始值从0 指定名字,举例如下。 开始递增,但是设计者也可以显式地指定初始值。 枚举类型的例子如下: typedef struct{ enum{red,yellow,green)RGB;//red=2’b0,yellow reg[7:0]opcode; =2’b01.green=2’b10; reg[23:0]addr; enum(WAIT=2’b01,LOAD,DONE)states;//LOAD l instruction; //命名的结构体,instruction是一个由 =2’blO,DONE=2’bl 1; 两部分 设计者还可以使用typedef为枚举类型指定一 //(16位的操作码opcode和24位的地址 个名字,从而允许这个枚举类型可以在许多地方使 addr)组成的指令 万   方数据
  • 3. instruction IR; //结构体实例,定义IR具有指令 module RAM(chip—bus io,//RAM模块的端口中包 (instruction)同样的结构 含已定义的接口chip—bus,具体接口名为io 结构体可以使用值的级联来完整地赋值,例如: input clk); instruction=f5,200};//表示操作码为5,地址为200 //可以使用io.read—request引用接口中的一 结构体可以作为整体传递到函数或任务,也可 个信号 以从函数或任务传递过来,也可以作为模块端口进 PndmodlJle 行传递。 module CPU(chip_bus io,input clk); 4)接口(Interface) //CPU模块的端口中也使用了已定义的接口 Verilog模块之问的连接是通过模块端口进行 chip_bus,具体名为io 的。为了给构成设计的各个模块定义端口,设计者 必须对所做的硬件设计有详细的认识。但在设计 的初期,设计者很难把握设计的细节。而一旦模块 的端口定义完成后,端口的配置就很难改变。另外, 设计中的许多模块往往具有相同的端口名,在Ver— module top; ilog语言中,设计者必须对每个模块进行相同的定 reg clk=0: 义和连接,这增加许多无谓的工作量。 chip_bus a; //接口的实例引用,说明a是与 SystemVerilog提供了一个全新的、高层抽象的 chip_bus同样的接口 连接定义块,这个连接块被称为接口(Interface)。接 RAM men(.io(a),clk);//将接口a连接到mem实例 口块在关键字interface和endinterface之间定义,它 模块的io接口 独立于模块。接口在模块中就像独立端口一样使用。 CPU cpu(.io(a),elk);//将接El a连接到cpu实例模 在最简单的形式下,接口可以认为是一组线网。例 块的io接口 endmodule 如,可以将PCI总线的所有信号绑定在一起组成一 个接口。借助于接口块的定义,编写代码时若遇到 实际上,SystemVerilog的接口不仅仅可以表示 许多个实例互相连接的情况,可以不必逐一建立各 信号的绑定和互连。由于SystemVerilog的接1:3中可 模块对应端口间的连接,大大加快了设计工作。随 以包含参数、常量、变量、结构、函数、任务、initial块、 着设计的深入,设计细节逐渐变得清晰,许多模块的 always块以及连续赋值语句,所以SystemVerilog的 接口需要添加和修改。而对接口块所做的修改,可 接口还可以包含内建的协议检查,以及使用该接口 在使用该接口块的每个模块中反映出来,而无需逐 的每个模块共用的功能。 个修改每个模块的接口,大大节省了相关模块接口 修改的工作量。下面是接口的使用实例: 5)随机激励信号的产生 在设计中,总是有一些边角情况是比较不容易 interface chip—bus; //定义接口chip_bus 发生,或是不容易想到的,因此借助随机产生的测试 wire read_request,read_grant; 激励,可以帮助验证边角情况。Verilog已经具有 wire[7:0]address,data; ¥random来产生随机数,但设计者并无有效办法控 endinterface 制该随机数的范围与顺序。在SystemVerilog 3.1里, 增加了rand与randc两个对象类,用于设定随机数 万   方数据 ‘、‘‘^ J^.--^.-^:……一
  • 4. l…H巾国集成电路 珏“ ■—_ China Integrated Circuit ”7。。 产生的条件。下例中设计者声明一个名为Bus的类, SystemVerilog为了能更方便地控制时间单位, 并规定地址总线的最低的两位必须为0。而在使用 做了两个重要的改进。1)时间值可以显式地指定为 时,利用rand类里的randomize子类,产生50个随 某一个单位。时间单位可以在s、ms、ns、ps或fs之间 机数据与地址,大大简化了Verilog原来产生随机数 选择,时间单位作为时间值的后缀出现。例如: 的手段。 forever#5ns clock=-clock; 2)SystemVerilog允许使用新的关键字(timeu— class Bus; nits和timeprecision)来指定时间单位和精度。这些 rand bit【15:0】addr; 声明可以在任何模块中指定,同时也可以在全局空 rand bit【31:0】data; 间中指定。时间单位和精度必须是10的幂,范围可 constraint word align{addr[1:0]_=‘2b0;) 以从s到fs。例如: endclass timeunits lns; timeprecision 1 0ps; Bus bus=new; 7)抽象数据类型 repeat(50)begin Verilog提供了面向底层硬件的线网、寄存器和 if(bus.randomize0==1) 变量数据类型。这些类型代表了4态逻辑值,通常用 ¥display(”addr=%16h data=%hha”,bus.addr, 来在底层上对硬件进行建模和验证。线网数据类型 bus.data); 还具有多个强度级别,并且能够为多驱动源的线网 else 提供解析功能。 ¥display(”Randomization failed.U”); SystemVerilog包括了C语言的char和int数据 end 类型,它允许在Verilog模型和验证程序中直接使用 c和c++代码。Verilog PLI不再需要整合总线功能 6)时间单位和精度 模型、算法模型和c函数。SystemVerilog还为Ver— 在Verilog中,表示时间的值使用一个数来表 ilog加入了几个新的数据类型,以便能够在更抽象 示,而不带有任何时间单位。 的层次上为硬件电路建模。 例如:forever#5 clock=~clock; char:两态的有符号变量,它与c语言中的char 单从这一语句中,设计者无法判断5代表的是 数据类型相同,可以是一个8位整数(ASCII)或 5ns?5ps?还是5us。Verilog的时间单位和精度是作 short int(Unicode); 为每个模块的属性,在模块代码前用编译器指令 int:两态的有符号变量,它与C语言中的int数 、timescale来设置。使用这种方法存在固有的缺陷, 据类型相似,但被精确地定义成32位; 因为编译器指令的执行依赖于源代码的编译顺序, shortint:两态的有符号变量,被精确地定义成 编译器总是将它遇到的最后一个、timescale设置的 16位; 时间单位和精度作为标准。那么,若有些模块代码 longint:两态的有符号变量,它与c语言中的 没有用、timeseale设置时间单位和精度,当这种源代 long数据类型相似,但被精确地定义成64位; 码前缺少时间单位定义的模块与有、timescale设置 byte:两态的有符号变量,被精确地定义成8 的模块一起仿真时,就有可能出现完全想象不到的 位; 结果。 bit:两态的可以具有任意位宽的无符号数据类 ●、¨^.,^…I…;……一 万   方数据
  • 5. 型,可以用来替代Verilog的reg数据类型; 8)有符号和无符号限定符 logic:四态的可以具有任意位宽的无符号数据 缺省情况下,Verilog的net和reg数据类型是无 类型,可以用来替代Verilog的线网或reg数据类 符号类型,integer类型是有符号类型变量。Ve卜 型,但具有某些限制; ilog一2001标准允许使用signed关键字将无符号类 shortreal:两态的单精度浮点变量,与c语言的 型显式地声明成有符号类型。SystemVerilog添加了 float类型相同; 类似的能力,它可以通过unsigned关键字将有符号 void:表示没有返回值,可以定义成函数的返回 数据类型显式地声明成有无符号数据类型。例如: 值,与C语言中的含义相同。 SystemVerilog的bit和其他数据类型允许用户 使用两态逻辑为设计建模,两态逻辑模型的仿真速 度快,效率高。由于Verilog语言没有两态数据类型, 值得注意的是unsigned在Verilog中是保留字, 因此许多仿真器将这种功能作为仿真器的选项。有 但并没有被Verilog标准使用。 些仿真器不支持两态逻辑数据,所以有时在必须用 三态或四态逻辑建模的设计中强制使用两态逻辑, 9)用户定义的类型 仿真器还会出现问题。而SystemVerilog的bit数据 Verilog不允许用户定义新的数据类型。Sys— 类型能够极大提高仿真器的性能,同时在需要的时 temVerilog通过使用typedef提供了定义新的数据类 候仍然可以使用三态或四态逻辑。用改变数据类型 型方法,这与C语言类似。用户定义的类型可以与 的方法来代替仿真器的逻辑状态选项,使得设计模 其它数据类型一样地在声明中使用。例如: 型能适应多种仿真器。 typedef unsigned int uint; SystemVerilog的logic数据类型比Verilog的线 uint a.b: 网和寄存器数据类型更加灵活,它使得在任何抽象 层次上为硬件建模变得更加容易。logic类型能够以 用户定义的数据类型可以在它的定义之前使 下面的任何一种方法赋值: 用,只要它首先在空的typedef中说明,例如: 任意次的过程赋值语句赋值,能够替代Verilog typedef int48;//空的typedef,即虽然定义了int48, 的reg类型; 但究竟int48定义成什么? 单一的连续赋值语句赋值,能够有限地替代 ∥还需要在其他地方进行完整的定义 Verilog的wire类型; int48 c;//虽然int48具体如何定义并未确定,但可 连接到单一原语的输出,能够有限制地替代 以把e定义为是int48类型的。 Verilog的wire类型; 由于logic数据类型能够被用来替代Vet/log的 10)在命名块中声明变量 reg或wire(具有限制),这就使得设计者能在更高 Verilog允许变量在命名的begin—end或 的抽象层次上建模,并且随着设计的深入,能不断地 fork-join语句组中声明。对于命名的语句组来说,在 添加设计细节而不必改变数据类型的声明。logic数 块内定义的变量是本地的,但它们可以用层次化命 据类型不能表示信号的强度,也不具有线逻辑的解 名方法引用它们。在SystemVerilog中,变量既可以 析功能,因此logic数据类型比Verilog的wire类型 在命名的块中也可以在未命名的块中声明,对在未 能更有效地仿真和综合。 命名的块中声明的变量,不能使用层次名来访问,所 有的变量类型,包括用户定义的类型、枚举类型、结 万   方数据
  • 6. l…H巾国集成电路 珏“ ■●_ China Inte grated Circuit ”7。 构体和联合体都可以在begin—end或fork-join命名 在Verilog中,用字母赋值时候有一些约定。而 的语句组中声明。 SystemVerilog则为用字母赋值作了下面的改进: 变量的所有位可以方便地用字母(、0、、1、、z或、X)赋 1 1)常量 值。填充一个任意位宽的矢量,而无需显式地指定矢 在Verilog中有三种特殊类型的常量:parame— 量的位宽,例如: ter、specparam和localparam。而在SystemVerilog中, bit【63:0】data; 允许使用const关键字声明常量。例如: data=、1;//将data的所有位(共64位)都设置成l const char colon=“:”: 15)字符串(str ing) 12)可重定义的数据类型 SystemVerilog添加了可变长度的字符串数据类 SystemVerilog扩展了Verilog的参数(parame— 型,使用者不需声明字符串数据的长度,编译工具会 ter)功能,使其可以包含数据类型。若模块定义了参 自动判断。而SystemVerilog也提供了常用字符串处 数,用于表示数据类型,则在引用该模块的实例时, 理函数,例如putc0,getc0,atoi0,itoa0等,而口些字符 可通过参数传递重新定义每个实例中的数据类型。 串处理函数功能以前必须通过PLI函数才能实现。 例如: module foo: 16)强制类型转换 #(parameter type VAR—TYPE=shortint;) Verilog不能将一个值强制转换成不同的数据类 (input logic[7:0]i,output logic[7:0】o); 型。SystemVerilog通过使用<数据类型>’操作符 VAR_TYPE j=o; //如果不重新定义,j的数据类 提供了数据类型的强制转换功能。这种强制转换可 型为shortint 以转换成任意类型,包括用户定义的类型。例如: int’(2.0木3.0)//将计算结果转换为int类型 mytype’(foo)//将foo转换为mytype类型 module bar; 在强制转换操作符前指定一个10进制数可以 logic[3:0]i,o; 用来确定转换后的矢量位宽,例如: foo#(.VAR—TYPE(int))ul(i,o);//重新将 17’(X一2)//将结果转换为17位宽 VAR—TYPE定义成int类型 也可以将结果转换成有符号值,例如: endmodule signed’(x)//将x转换为有符号值 13)模块端口连接 1 7)操作符 在Verilog中,可以连接到模块端El的数据类型 Verilog没有C语言的递增(++)和递减(~) 被限制为线网类型以及变量类型中的reg、integer和 操作符。而SystemVerilog加入了几个新的操作符: time。而在SystemVerilog中,则去除了这种限制,任 ++和~:递增和递减操作符; 何数据类型都可以通过端口传递,包括实数、数组和 +=、一=、:g_--、_--、%=、&=、^=、J=、<<=、>>=、<<<= 结构体。 和>>>=赋值操作符; 14)用字母赋值 18)具有唯一性和优先级的条件语句 万   方数据
  • 7. 在Verilog中,如果没有遵循严格的编码风格,它的 来跳转到新的语句,包括:return、break、continue和 if-else和case语句会在RTL仿真和RTL综合间具 goto。在Verilog中除了通过使用disable语句跳转到 有不一致的结果。如果没有正确使用full—case和 语句组的尾部外,没有提供任何其它跳转语句。使用 parallel_case综合指令还会引起一些其它的错误。 disable语句执行中止和继续功能要求加入块的名 SystemVerilog能够显式地指明什么时候条件语 字,并且会产生不直观的代码。SystemVerilog加入了 句的分支是唯一的,或者什么时候需要计算优先级。 c语言的break和continue关键字,这两个关键字不 设计者可以在if或case关键字之前使用unique或 要求使用块名字。另外,SystemVerilog还加入了一个 requires关键字。这些关键字可以向仿真器、综合编 return关键字,它可以用来在任何执行点上退出一 译器、以及其它工具指示设计者期望的硬件类型。 个任务或函数。 工具使用这些信息来检查if或case语句是否正确 break:退出一个循环,与C语言相同; 地为期望的逻辑建立了模型。例如,如果使用unique continue:跳转到一个循环的尾部,与C语言相 限定了条件语句,那么在不希望的ease值出现的时 同; 候仿真器就会发布警告信息。 retum表达式:退出一个函数; bit[2:0]a; return:退出一个任务或void类型的函数。 unique if((a==O)ll(a==1))y=inl; SystemVerilog没有包含C语言中的goto语句。 else if(a==2)Y=in2; else if(a==4)Y=in3;//值3、5、6、7会引起 20)块名字和语句标签 一个警告 在Verilog中,设计者可以通过在begin或fork 关键字之后指定名字来为begin—end或fork-jion语 priorityif(a[2:1]_=0)Y=inl;//a是0或1 句组命名。这个指定的名字代表整个语句块。Sys— else if(a【2]_=o)Y=in2;//a是2或3 temVerilog还允许在end或iion关键字之后指定一 else y=in3;//如果a为其他的值 个匹配的块名字。这种机制很容易将end或jion与 对应的begin或fork联系起来,尤其是在一个长的 unique case(a) 块或嵌套的块中。块结尾处的名字是可选的,但如果 0,1:Y=inl; 使用的话,它必须与块起始处的名字相同。例如: 2:Y=in2; 4:Y=in3; begin:foo//在begin之后的块名字 endcase//值3、5、6.7会引起一个警告 fork:bar//具有名字的嵌套的块 priority casez(a) 2’bOO?:y=inl;//a是0或1 jion:bar//必须具有相同的名字 2’b077:Y=in2;//a是2或3 default:y=in3;//如果a为其他的值 end:foo//必须具有相同的名字 endcase SystemVerilogJ丕允许像C语言一样为单个语句 1 9)跳转语句 设置标签。语句标签放置在语句的前面,用来标识 在语句的执行过程中,c语言提供了几种方式 这条语句。例如: 万   方数据
  • 8. initial begin SystemVerilog加入了一个changed关键字,在事件 test 1:read_enable=O: 控制列表中它被用作一个修饰符。@(changed(表达 式))能够显式地定义只有当表达式的结果发生改变 test2:for(i=0;i<=255;i++) 的时候才会触发事件控制。例如: always@(changed(a水b)) end always@(changed memory[address]) ●事件控制中的赋值 21)对事件控制的增强 Verilog不允许在事件控制中使用赋值。Sys— Verilog使用@标记来控制基于特定事件的执 temVerilog允许在事件控制中使用赋值表达式。事 行流,SystemVerilog增强了@事件控制。 件控制仅仅对赋值表达式右侧的变化敏感。例如: ●有条件的事件控制 always@(v=a球b) @标记的一个基本应用就是推断具有使能输入的 锁存器。下面的例子演示了锁存器建模的基本风格。 22)新的always过程块 always@(data or en) Verilog使用always过程块来表示时序逻辑、组 if(en)Y=data; 合逻辑和锁存逻辑的RTL模型。综合工具和其它软 这种编码风格对仿真来说是效率很低,因为即 件工具必须根据过程起始处的事件控制列表以及过 使在使能无效的时候,数据输入的每次改变都会触 程内的语句来推断always过程的意图。这种推断会 发事件控制,都要消耗仿真时间。SystemVerilog在事 导致仿真结果和综合结果之间的不一致。Sys— 件控制中加入了一个iff条件。只有珊条件为真的 temVerilog增加了三个新的过程来显式地指示逻辑 条件下,事件控制才会被触发。通过将使能判断移 意图。 入到事件控制里面,使得只有在锁存器输出能够改 always_ff:表示时序逻辑的过程块; 变的时候事件控制才会被触发。例如: always_comb:表示组合逻辑的过程块; always@(a or en iff en==1) always_latch:表示锁存逻辑的过程块。 Y 2 a: 例如: ●事件控制中的表达式 always—comb@(a or b or sel) Verilog允许在@事件控制列表中使用表达式, begin 例如: if(sel)Y=a; always@((a术b)) else Y=b: always@(memory[address]) end 在第一个例子中,是当操作数发生改变的时候 软件工具能够检查事件控制敏感列表和过程的 还是只有当运算结果发生改变的时候才会触发事件 内容来保证逻辑的功能匹配过程的类型。例如,工具 控制?在第二个例子中,是当memory的地址发生变 能够检查一个always_comb过程能够敏感过程内读 化的时候还是只有当memory的值发生变化的时候 取的所有外部值,对逻辑的每一个分支的相同变量 才会触发事件控制?当@事件控制中包含表达式的 进行赋值,并且检查分支是否覆盖了所有可能的条 时候,IEEE Verilog标准允许仿真器进行不同的优 件。如果任何一个条件没有满足,软件工具均会报告 化。这就可能导致在不同的仿真器间有不同的仿真 该过程没有正确建模组合逻辑。 结果,可能还会导致仿真与综合之间的结果不一致。 k●4^,^…^…;……一 万   方数据
  • 9. 23)动态过程 在资源共享使用方面,最常见的是多个硬件模块同 Verilog通过使用fork-jion提供了一种静态的并 时对共享资源作读写操作。若安排的读写顺序有 发过程。每个分支都是一个分离的、并发的过程。过 错误,将出现严重问题SystemVerilog添加了 程块中,fork-jion后的任何语句必须在组内的每一 semaphore、mailbox等类来协助资源的共享使用。 个过程完成后才会执行。例如: initial begin 25)任务和函数的增强 fork SystemVerilog为Verilog的任务和函数作了几个 send_packet_task(1,255,O); 增强。 send—packet_task(7,1 28,5); ●静态和自动的存储 watch—result_task(1,255,0); 缺省情况下,在Verilog任务或函数内的所有存 watch—resuh_task(7,1 28,5); 储都是静态的。Verilog一2001允许将任务和函数声 jion//所有的任务必须完成后才会到达这里 明成自动的。在SystemVerilog中:1)静态任务和函 end 数内的特定数据可以显式地声明成自动的。声明成 SystemVerilog通过process关键字加入了一个新 自动的数据在块中具有完整的生命周期,并且在任 的、动态的过程。它为过程产生分支,然后继续执行 务和函数调用的入口处初始化;2)自动的任务或函 而无需等待其他过程完成。过程不会阻塞过程或任 数中的特定数据可以显式地声明成静态的。自动任 务内的语句执行。这种方式能够为多线程过程建模。 务或函数中声明成静态的数据在块的本地范围内具 例如: 有静态的生命周期。 initial begin ●从任何点返回 process send_packet_task(1,255,0); Verilog在任务或函数中执行到endtask或end— process send_packet_task(7,1 28,5); function关键字的时候返回。函数的返回值是给函数 process watch_result_task(1,255,0); 名赋的最后一个值。SystemVerilog加入了一个return process watch_result_task(7,128,5); 关键字,使用这个关键字,一个任务或函数可以在任 end//所有的过程并行运行 何点上返回。 ●多语句 24)并行处理 Verilog要求任务或函数只具有一个语句或语 硬件设计常遇到需要并行处理的情况,此时在 句块。多条语句必须组合到单一的begin—end或 资源分配和同步操作上需要认真安排时序。由于并 fork-jion块中。SystemVerilog去除了这种限制。因 行处理一般由硬件实现,硬件可以由设计者自行安 此,多条语句可以在一个任务或函数中列出而无需 排,不存在实现的问题。但编写测试模块,则是希望 使用的begin—end或fork-jion。每有分组的语句就像 代码简明扼要、可读性好、仿真效率高。在同步仿真 在begin—end中一样顺序执行。设计者还可以产生 模块的编写时,原Verilog的folk-join语句可以让指 没有语句的任务或函数定义。 定的一组动作同时启动,但必须等所有的动作都完 ●void函数 成后,才能结束。SystemVerilog添加了join—none与 Verilog要求函数具有一个返回值,函数的调用 ioin—any声明,可以让一组同时启动的动作,各自停 接收这个返回值。SystemVerilog加入了void数据 止而不受其他动作的影响(join—none),或者当其 类型,这个数据类型可以作为函数的返回值类型。 中一个动作完成后整组动作都停止(join—any)。而 void函数可以像Verilog任务一样进行调用,而无需 万   方数据 L,‘‘^ ,^.^.^..^:……一
  • 10. I…H巾国集成电路 珏“ ■—■■一 China Integrated Circuit 一7。 接收返回值。void函数和任务的差别在于函数存在 28)事务级别测试(Transaction—Ievel 几个限制,例如没有时间控制等。 tests) ●函数的输入和输出 SystemVerilog提供了许多基于交易事务建模所 Verilog标准要求函数至少具有一个输入,不能 需要的能力,可将系统模型抽象化,并可将验证从块 有输出或者双向端口。SystemVerilog去除了这些限 级提前到体系结构级。由于只考虑交易事务和体系 制。函数可以具有任意数目的输人、输出以及双向 结构级别的问题,设计者不必关心信号冒险竞争等 端口,也可以什么也没有。 具体电路细节,编写系统验证用的代码更加方便,代 码也更简明扼要,便于重复使用和维护。 26)、defi Re的增强 SystemVerilog增强了、define编译器指令的能 29)直接的外部语言接口 力,以支持将字符串作为宏的参数。宏文本字符串 SystemVerilog添加了直接外部语言接口(Direct 中可以包含引号,引号的前面必须用一个反勾号 Foreign Language Interface),允许SystemVerilog代码 (、’’),这就允许字符串中包含宏参数。宏文本可以 直接使用C/C++函数,避免了以往需要使用Verilog 在行的尾部包含一个反斜杠(\)来表示在下一行 Programming Language Interface(PLI)所造成的仿真 继续。如果宏文本字符串中包含反斜杠,则反斜杠 速度变慢的情况。此外,直接外部语言接口,也允许 应该被放在两个反勾号之间(、\、),这样它就不会 c程序,直接调用SystemVerilog的任务与函数,而用 被认为是Verilog转义标识符的开始。宏文本字符串 SystemVerilog编写的系统验证代码块中还可以插入 还可以包含双反勾号(“),它允许标识符能够从参 RTL或gate—level代码块,这也就是说由C编写的 数中构建。这些增强使得、define指令更加灵活。例 高层次系统仿真代码在仿真验证时硬件模块可以具 如:、include指令后可以紧跟宏名字来替代一个字符 体到RTL和门级,这必将大大提高系统的验证和查 串。 错效率。 、define fl“一/project_top/opcode—defines’’ 、include、fl 30)断言 SystemVerilogqb添加了断言应用程序接口(As— 27)增加了C++/dava面向对象的动态数 sertion Application Program Interface),便于测试代码 据类型:CIass 与Verilog仿真器之间的数据通信,显著改善了系统 在一个类(class)里,可以包含数据声明fdata 的测试和查错功能。断言应用程序接口包括:¥one— declaration)和处理数据的任务与函数。数据声明又 hot(<表达式>);¥inset(<表达式>,<表达式>,…) 成称属性(properties),而任务(task)与函数 ;¥isunknown(<表达式>)-..・.等断言应用程序。断言 (function)称作方法(methods);属性与方法定义了 应用程序集的每条子程序具有各自的分析能力,其 对象(object)的内容与功能。有了类后,对象可以动 中包括立即断言(Immediate Assertions),并发断言 态地产生、删除与设定。而对象可以继承其它类的 (Concurrent Assertions),布尔表达式断言,序列断 屙陛与方法。在SystemVerilog中,设计者不需处理 言等等,有兴趣的读者可以参考SystemVerilog 3.1 存储器的配置与归还,仿真工具会自动处理,这可防 LRM一一Section 17。 止因存储器管理不当所造成的逐渐被某一进程占用 以上列出了常用SystemVerilog的扩展提要,共 而变少的情况。 30条,其实新标准在Verilog一2001基础上所做扩展 远远不止这些,作者不可能用这么短的篇幅讲解清 k●●^,^…^…:……一 万   方数据
  • 11. 楚。有兴趣的读者可以用以下网址:http://www.eda. ●SystemVerilog 3.1 a LRM http://www.eda.org/sv/Sys— org/sv/SystemVerilog_3.1a.pdf查阅SystemVerilog 3.1a temVerilog_3.1a.pdf LRM、(语言参考手册)。 ●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. 综上所述SystemVerilog对Verilog一2001标准进 2003. Available on http://www.synopsys. 行了一系列扩展。这些扩展使得大型数字系统设 com/news/pubs/compiler/art3一sll—feb03.html 计建模和验证的工作量得以减轻,并维持了Verilog ●Richard Goefing.”Cadence IEEE donation ovedaps 原有的竞争力。用SystemVerilog编写的各种层次的 SystemVerilog,”EE Times,June 2,2003.Available on 代码不但简明扼要,清晰易懂,容易维护,而且功能 http://www.eedesign.com/news/OEG20030602S01 16 非常强大。工程师们只要熟练掌握SystemVerilog和 C两种语言,就能很快适应基于平台的SoC设计方 ●SystemVerilog Strategy.Plans and Proposal to ad— dress issues, Available on http://www.eda. 法,自己独立编写或利用各种成熟程度和层次的可 org/sv-ee/hm/0354.html 重用代码加以修改,加速完成整个SoC系统的仿真 ●Richard Goering.“Accellera approves SystemVer- 测试和验证。我国集成电路设计行业的工程师必须 ilog and three other standards,” EE Times,May 30, 在掌握Verilog的基础上,尽快地学会并熟练掌握这 2003. Available http://www.eedesign.com/sto— 种新语言,积极主动地将新标准用于设计实践,紧跟 on 国际设计行业的步伐,尽快地提高我国Ic设计的水 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%。其中包括芯片和平板显 示器生产设备。 万   方数据
  • 12. 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日