数据类型用来表示数字电路硬件中的数据存储和传送元素。Verilog
HDL中总共有19种数据类型,只介绍4个常用的数据类型:wire型、reg型、memory型和parameter型。
1.wire型
wire型数据常用来表示以assign关键字指定的组合逻辑信号。Verilog程序模块中输入、输出信号类型默认为wire型。wire型信号可以用做方程式的输入,也可以用做“assign”语句或者实例元件的输出。
wire型信号的定义格式如下:
wire [n-1:0] 数据名1,数据名2,……数据名N;
这里,总共定义了N条线,每条线的位宽为n。下面给出几个例子:
wire [9:0] a, b, c; // a,
b, c都是位宽为10的wire型信号
wire d;
2.reg型
reg是寄存器数据类型的关键字。寄存器是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值,其作用相当于改变触发器存储器的值。reg型数据常用来表示always模块内的指定信号,代表触发器。通常在设计中要由always模块通过使用行为描述语句来表达逻辑关系。在always块内被赋值的每一个信号都必须定义为reg型,即赋值操作符的右端变量必须是reg型。
reg型信号的定义格式如下:
reg [n-1:0] 数据名1,数据名2,……数据名N;
这里,总共定义了N个寄存器变量,每条线的位宽为n。下面给出几个例子:
reg [9:0] a, b, c; //
a, b, c都是位宽为10的寄存器
reg d;
reg型数据的缺省值是未知的。reg型数据可以为正值或负值。但当一个reg型数据是一个表达式中的操作数时,它的值被当作无符号值,即正值。如果一个4位的reg型数据被写入-1,在表达式中运算时,其值被认为是+15。
reg型和wire型的区别在于:reg型保持最后一次的赋值,而wire型则需要持续的驱动。
3.memory型
Verilog通过对reg型变量建立数组来对存储器建模,可以描述RAM、ROM存储器和寄存器数组。数组中的每一个单元通过一个整数索引进行寻址。memory型通过扩展reg
型数据的地址范围来达到二维数组的效果,其定义的格式如下:
reg [n-1:0] 存储器名 [m-1:0];
其中,reg
[n-1:0]定义了存储器中每一个存储单元的大小,即该存储器单元是一个n位位宽的寄存器;存储器后面的[m-1:0]则定义了存储器的大小,即该存储器中有多少个这样的寄存器。例如:
reg [15:0] ROMA [7:0];
这个例子定义了一个存储位宽为16位,存储深度为8的一个存储器。该存储器的地址范围是0到8。
需要注意的是:对存储器进行地址索引的表达式必须是常数表达式。
尽管memory型和reg型数据的定义比较接近,但二者还是有很大区别的。例如,一个由n个1位寄存器构成的存储器是不同于一个n位寄存器的。
reg [n-1 : 0] rega; // 一个n位的寄存器
reg memb [n-1 : 0]; //
一个由n个1位寄存器构成的存储器组
一个n位的寄存器可以在一条赋值语句中直接进行赋值,而一个完整的存储器则不行。
rega = 0; // 合法赋值
memb = 0; // 非法赋值
如果要对memory型存储单元进行读写必须要指定地址。例如:
memb[0] = 1; // 将memeb中的第0个单元赋值为1。
reg [3:0] Xrom [4:1];
Xrom[1] = 4’h0;
Xrom[2] = 4’ha;
Xrom[3] = 4’h9;
Xrom[4] = 4’hf;
4.parameter型
在Verilog
HDL中用parameter来定义常量,即用parameter来定义一个标志符表示一个常数。采用该类型可以提高程序的可读性和可维护性。
parameter型信号的定义格式如下:
parameter 参数名1 = 数据名1;
下面给出几个例子:
parameter s1 = 1;
parameter [3:0] S0=4'h0,
S1=4'h1,
S2=4'h2,
S3=4'h3,
S4=4'h4;
阅读(6490) | 评论(0) | 转发(0) |