当前位置:智城范文网>范文大全 > 征文 > SystemVerilog简介

SystemVerilog简介

时间:2022-03-24 09:09:31 来源:网友投稿

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

前言

SystemVerilog是IEEE最近推出的硬件描述和验证语言,它是在原Verilog (IEEE 1364-1995和 -2001)基础上扩展的新语言。 这种新语言将设计和验证所需的语言组合成同一种语言。而且SystemVerilog还是Verilog -2001的超集。因此,目前的Verilog用户使用SystemVerilog不存在任何问题。SystemVerilog一问世就拥有大量承诺支持它的供应商,这一切都预示着SystemVerilog会有良好的市场前景。

SystemVerilog与Verilog有许多重要的区别。第一,SystemVerilog提供了完整的仿真模型,它将每个时隙细分成11个有序的段,并规定了每个段内必须发生的事件。这样就可以避免当仿真包含反应性测试平台、覆盖率分析工具和相互作用的第三方C模型在内的各种模型时,有可能发生的某些不确定性。 第二,SystemVerilog具有类似C++语言的一些高级数据类型和功能,如:结构体、联合体、打包和非打包的数组,动态存储器分配和动态进程等,更适合测试平台的开发和系统级建模。第三,仿真和静态验证工具可以使用相同的声明集合。第四,SystemVerilog的新扩充还包括了接口块、断言函数等。这些扩展使得SystemVerilog可以在更高的抽象层次上,更方便地为复杂IP之间的连接、测试验证和查错建立模型,显著地提高了代码的可读性、可维护性、设计和验证效率,极大地提高了编写测试平台的能力。

SystemVerilog由OVI(Open Verilog International)和VI(VHDL Internatioanl)两个国际标准化组织合作成立的Accellera集团推出,主要用于数字系统芯片的设计和验证流程。由于SystemVerilog具有与高级编程语言(如C语言)直接连接调试的强大功能,为系统级软硬件协同设计验证提供了极大的方便,因此对包括软硬件在内的现代复杂SoC设计有非常深远的意义。

读者若想全面深入地理解和掌握语法的要点,不但需要认真阅读SystemVerilog LRM(语法手册),还需要上机练习才行。为了帮助读者用最少的时间初步了解SystemVerilog标准所做的扩展,作者将从下面30个方面,对最近批准的SystemVerilog标准作简要的介绍。

1)数组

在Verilog中可以声明数组类型,reg和线网类型还可以具有矢量位宽。在对象名前面声明的位宽表示变量的位宽,在对象名后面声明的维数表示数组的个数。举例如下:

reg [7:0] r1 [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[0]到b[7]

bit [0:11] [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’b10, DONE = 2’b11;

设计者还可以使用typedef为枚举类型指定一个名字,从而允许这个枚举类型可以在许多地方使用。例如:

typedef enum {FALSE=1’b0, TRUE} boolean;

booleaeady;

booleantest_complete;

3)结构体和联合体

Verilog语法中没有结构体或联合体,而结构体或联合体在把几个声明组合在一起的时候非常有用。SystemVerilog增加了结构体和联合体,其语法类似于C。

struct {

reg [15:0] opcode;

reg [23:0] addr;

} IR;

//声明IR是一个结构体,由两部分组成:16位的操作码opcode和 24位的地址addr

union {

int I;

shortreal f;

} 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;

} instruction; // 命名的结构体,instruction 是一个由两部分

// (16位的操作码opcode和 24位的地址addr)组成的指令

instruction IR;// 结构体实例, 定义IR具有指令(instruction)同样的结构

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

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

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

推荐访问: 简介 SystemVerilog

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号