数据类型
Verilog中常用的基本数据类型:wire 、reg、 integer、 parameter
常量
在程序运行过程中,不被改变的量称为常量:数字 和 参数
数字:
整数在程序中是最常用的,整数常量常有以下4种进制表示:
1、二进制(b或B)
2、十进制(d或D)
3、十六进制(h 或 H)
4、八进制(o或 O)
数字的表达方式有以下3种:
1、<位宽><进制><数字> 这是一种全面的表达方式;
2、在<进制><数字>这种表达方式中,数字的位宽采用默认位宽(由具体的机器系统决定)
3、在<数字>这种描述中,采用默认进制(十进制)
示例如下:
8'd100 //十进制 100
8'h64 //十六进 100
8'b01100100 //二进制 100
8'o144 //八进制 100
参数(parameter)
在verilog 中,用parameter 来定义常量,即用parameter来定义一个标识符来代替常量,称为符号常量,即标识符形式的的常量。采用标识符代替一个常量,可以提高程序的可读性和可维护性。
parameter 说明格式如下:
parameter 参数名1= 表达式1,参数名1= 表达式1,参数名1= 表达式1,…参数名n= 表达式n;
示例如下:
parameter STOP_BYTE = 1'b01; //定义了一个常量:停止位
parameter START_BYTE = 1'b0; //定义了一个常量 :起始位
parameter WIDTH = 4'd6; //定义了一个常量:数据宽度
需要注意的是:表达式只能包含数字或之前已经定义的参数。
变量
1、wire 型
wire型数据常用来表示用以assign关键字指定的组合逻辑。Verilog程序模块中输入、输出信号类型默认时自动定义为wire型,wire型信号可以用作任何方程式的输入,也可以用作“assign”语句或实例元件的输出。
wire 型信号定义格式如下:
wire [位宽-1] 数据1,数据2,数据3,…数据n;
也可以分开定义,如下所示:
wire [位宽-1:0] 数据1;
wire [位宽-1:0] 数据2;
wire [位宽-1:0] 数据3;
wire [位宽-1:0] 数据n;
实例如下:
wire [3:0] data_length; //定义了一个4位的数据: data_length
wire a; //定义了一个1位的数据 : a
2、reg型
寄存器是数据单元的抽象,寄存器数据类型的关键字是reg。
reg数据常用来表示“always”模块内的制定信号,常代表触发器。在“always”模块内被赋值的每一个信号都必须定义为reg型 。
reg数据定义的格式如下:
reg [位宽-1] 数据1,数据2,数据3,…数据n;
也可以分开定义,如下所示:
reg [位宽-1:0] 数据1;
reg [位宽-1:0] 数据2;
reg [位宽-1:0] 数据3;
reg [位宽-1:0] 数据n;
示例如下:
reg [3:0] data; //定义了一个4位的数据: data
reg b; //定义了一个1位的数据 : b
总结:
1、在verilog模块中所有过程块(如:initial:块 always块)、assign连续赋值语句 、
实例引用都是并行的。
2、在 同一模块中各个模块中各个过程块、各条连续赋值语句和各条实例引用语句这三者出现的先后顺序没有关系。
3、只有连续赋值语句assign 和实例引用语句可以独立于过程块而存在于模块的功能定义部分。
4、被实例引用的得模块,其端口可以通过不同名的的连线或者寄存器类型的变量链接到别的模块相应的输入、输出信号 端。
5、在“always"模块内被赋值的每一个信号都必须定义为reg型。