热度 2|
http://www.pld.com.cn/HDL/systemverilog/2.htm
4. 抽象数据类型
Verilog提供了面向底层硬件的线网、寄存器和变量数据类型。这些类型代表了4态逻辑值,通常用来在底层上对硬件进行建模和验证。线网数据类型还具有多个强度级别,并且能够为多驱动源的线网提供解析功能。
SystemVerilog包括了C语言的char和int数据类型,它允许在Verilog模型和验证程序中直接使用C和C++代码。Verilog PLI不再需要集成总线功能模型、算法模型和C函数。SystemVerilog还为Verilog加入了几个新的数据类型,以便能够在更抽象的层次上建模硬件。
l char:一个两态的有符号变量,它与C语言中的char数据类型相同,可以是一个8位整数(ASCII)或short int(Unicode);
l int:一个两态的有符号变量,它与C语言中的int数据类型相似,但被精确地定义成32位;
l shortint:一个两态的有符号变量,被精确地定义成16位;
l longint:一个两态的有符号变量,它与C语言中的long数据类型相似,但被精确地定义成64位;
l byte:一个两态的有符号变量,被精确地定义成8位;
l bit:一个两态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog的reg数据类型;
l logic:一个四态的可以具有任意向量宽度的无符号数据类型,可以用来替代Verilog的线网或reg数据类型,但具有某些限制;
l shortreal:一个两态的单精度浮点变量,与C语言的float类型相同;
l void:表示没有值,可以定义成一个函数的返回值,与C语言中的含义相同。
SystemVerilog的bit和其他数据类型允许用户使用两态逻辑对设计建模,这种方法对仿真性能更有效率。由于Verilog语言没有两态数据类型,因此许多仿真器都通过将这种功能作为仿真器的一个选项提供。这些选项不能够在所有的仿真器之间移植,而且在需要时用三态或四态逻辑的设计中强制使用两态逻辑还具有副作用。SystemVerilog的bit数据类型能够极大改进仿真器的性能,同时在需要的时候仍然可以使用三态或四态逻辑。通过使用具有确定行为的数据类型来代替专有的仿真器选项,两态模型能够在所有的SystemVerilog仿真器间移植。
SystemVerilog的logic数据类型比Verilog的线网和寄存器数据类型更加灵活,它使得在任何抽象层次上建模硬件都更加容易。logic类型能够以下面的任何一种方法赋值:
l 通过任意数目的过程赋值语句赋值,能够替代Verilog的reg类型;
l 通过单一的连续赋值语句赋值,能够有限制地替代Verilog的wire类型;
l 连接到一个单一原语的输出,能够有限制地替代Verilog的wire类型;
由于logic数据类型能够被用来替代Verilog的reg或wire(具有限制),这就使得能够在一个更高的抽象层次上建模,并且随着设计的不断深入能够加入一些设计细节而不必改变数据类型的声明。logic数据类型不会表示信号的强度也不具有线逻辑的解析功能,因此logic数据类型比Verilog的wire类型更能有效地仿真和综合。
5. 有符号和无符号限定符
缺省情况下,Verilog net和reg数据类型是无符号类型,integer类型是一个有符号类型。Verilog-2001标准允许使用signed关键字将无符号类型显式地声明成有符号类型。SystemVerilog加入了相似的能力,它可以通过unsigned关键字将有符号数据类型显式地声明成有无符号数据类型。例如:
int unsigned j;
值得注意的是unsigned在Verilog中是一个保留字,但并没有被Verilog标准使用。
6. 用户定义的类型
Verilog不允许用户定义新的数据类型。SystemVerilog通过使用typedef提供了一种方法来定义新的数据类型,这一点与C语言类似。用户定义的类型可以与其它数据类型一样地使用在声明当中。例如:
typedef unsigned int uint;
uint a, b;
一个用户定义的数据类型可以在它的定义之前使用,只要它首先在空的typedef中说明,例如:
typedef int48; // 空的typedef,在其他地方进行完整定义
int
48 c;