system_verilog教程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于断言的验证技术

SystemVerilog Tutorials

下面的手册会帮助你了解一些SystemVerilog中最重要的新特点。手册还提供了一些代码样本和例子使你可以对语言有更好"感觉"。这些辅导假设你们已经了解了一些Verilog语言。如果没有,你可以先去看看Verilog设计者指南(V erilog Designer’s Guide)。

* Data types

* RTL design

* Interfaces

* Clocking

* Assertion-based verification

* Classes

* Testbench automation and constraints

* The Direct Programming Interface (DPI)

SystemVerilog 的数据类型

这个手册将描述Systemverilog新引进的数据类型。他们大多数都是可以综合的,并且可以使RTL级描述更易于理解和书写。

整型和实型

SystemVerilog引进了几种新的数据类型。C语言程序员会熟悉其中的大多数。引进新的数据类型构思是这样的,如果C语言和SystemVerilog有相同的数据类型可以使C语言算法模型更容易的转化为SystemVerilog模型。

Verilog的变量类型有四态:既是0,1,X,Z。SystemVerilog引进了新的两态数据类型,每一位只可以是0或是1。当你不需要使用的X和Z值时,譬如在写Testbench和做为for语句的循环变量。使用两态变量的RTL级模型,可以使模拟器更有效率。并且使用得当的话将不会对综合结果产生影响。

二态整型

类型描述例子

Bit user-defined size bit [3:0] a_nibble;

Byte 8 bits, unsigned byte a, b;

Shortint 16 bits, signed shortint c, d;

Int 32 bits, signed int i,j;

Longint 64 bits, signed longint lword;

注意到和C语言不一样,SystemVerilog指定了一些固定宽度的类型。

四态整型

类型描述例子

Reg user-defined size reg [7:0] a_byte;

Logic identical to reg in every way logic [7:0] a_byte;

Integer 32 bits, signed integer i, j, k;

logic是一种比reg型更好的类型,他更加的完善。我们将会看到你可以在过去verilog hdl 中用reg型或是wire型的地方用logic型来代替。

非整数类型

类型描述例子

Time 64-bit unsigned time now;

Shortreal like float in C shortreal f;

Real like double in C double g;

Realtime identical to real realtime now;

数组

在Verilog-1995中,你可以定义标量或是矢量类型的网线和变量。你也可以定义一维数组变量类型的存储器数组。在Verilog-2001中允许多维的网线和变量数组存在,并且取消了一些存储器数组用法的限制。

在SystemVerilog中数组有了新的发展,并对数组重新进行了重新定义,从而允许对数组进行更多的操作。

在SystemVerilog,中,数组可以具有压缩数组或是非压缩数组的属性,也可以同时具有两种属性。考虑下面的例子:

reg [3:0][7:0] register [0:9];

压缩数组是[3:0]和[7:0],非压缩数组是[0:9] 。(只要你喜欢可以有同样多的压缩数组和非压缩数组)

压缩数组

* 保证将在存储器中产生持续的数据

* 可以复制到任何其他的压缩对象中

* 可切片("部分选取")

* 仅限于"bit"类型(bit, logic, int等),其中有些(如int)有固定的尺寸

相比之下,非压缩数组可以放在模拟器选择的任何地方,可以可靠地复制到另一个相同数据类型的数组中。对于不同数据类型的数组,你必须使用映射(有几个非压缩数组映射到压缩数组的规则)。非压缩数组可以是任何的类型,如实数数组。

SystemVerilog允许对完整的非压缩数组和部分选取的非压缩数组进行一些操作。对与此,部分选取的数组必须是相同的数据类型和大小。如非压缩数组必须要有相同的位数和长度。而压缩数组不一样,只要选取的部分有相同数量的位数。

允许的操作有

* 读和写整个数组

* 读和写部分选取的数组

* 读和写数组中的位

* 在数组,部分选取的数组和数组的位有同样的优先级

SystemVerilog也支持动态数组(在仿真中数组长度可以改变)和关联数组(数组中的数据非连续排列)。

为了支持这些数组类型,SystemVerilog中提供了一些数组查找的函数和方法。如你可以使用$dimensions函数查询一个数组变量的的维数。

Typedef

SystemVerilog的数据类型系统允许定义复杂的数据类型。为了使代码看起来清晰,引进了别名的方法。别名的方法允许使用者在他们的代码中用自己的名字来定义经常使用的数据类型,当构造复杂的数组时用别名的方法是很方便的。

typedef reg [7:0] octet;

octet b;

和reg [7:0] b;的效果是一致的

typedef octet [3:0] ;

quadOctet;

相关文档
最新文档