Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1320170
  • 博文数量: 177
  • 博客积分: 3640
  • 博客等级: 中校
  • 技术积分: 1778
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-27 16:51
文章分类

全部博文(177)

文章存档

2014年(1)

2013年(10)

2012年(3)

2011年(163)

分类: WINDOWS

2011-05-27 15:53:43

数据类型用来表示数字电路硬件中的数据存储和传送元素。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;
阅读(6419) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~