一、数据类型
1.1 物理数据类型
1.1.1 连线型
连线型数据类型 | 功能说明 |
wire.tri | 标准连线〔缺省为该类型) |
wor,trior | 多重驱动时,具有线或特性的连线型 |
wand,trand | 多重驱动时,具有线与特性的连线型 |
trireg | 具有电荷保持特性的连线型数据〈特例) |
tri1 | 上拉电阻 |
tri0 | 下拉电阻 |
supply1 | 电源线,用于对电源建模,为高电平1 |
supplyo | 电源线,用于对“地”建模,为低电平0 |
wire/tri | 0 | 1 | x | z |
0 | 0 | x | x | 0 |
1 | x | 1 | x | |
x | x | x | x | x |
z | 0 | 1 | x | z |
wor/trior | 0 | 1 | x | z |
0 | 0 | 1 | x | 0 |
1 | 1 | 1 | 1 | 1 |
x | x | 1 | x | x |
z | 0 | 1 | x | z |
1.1.2 寄存器类型
reg型是数据储存单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器、锁存器等
reg型变量常用于行为级描述,由过程赋值语句对其进行赋值
举例
reg a;//定义一个一位的名为a的reg变量
reg [3:0]b;∥定义一个4位的名为b的reg型变量
reg[8:1]c,d,e;∥定义了三个名称分别为c、d、e的8位的reg型变量
reg型变量一般为无符号数,若将一个负数赋给g型变量,则自动转换成其二进制补
码形式。
举例
reg signed[3:0]rega:
rega=-2;∥reg0的值为1110(14),是2的补码
1.2寄存器和连线器的声明
1.2.1连线型数据类型的声明
<net_declaration><drive_strength><range><delay>[list_of_variables];
//net_declaration:包括wire、tri、tri0、tri1、wand.、triand、trior、wor中的任意一种。
//range:用来指定数据为标量或矢量。若该项默认,表示数据类型为1位的标量,超过1位则为矢量形式。
//delay:指定仿真延迟时间.
//list_of_variables:变量名称,一次可定义多个名称,之间用逗号分开,
//drive_strength:表示连线变量的驱动强度,
1.2.2寄存器型数据类型的声明
reg<range><list_of_register_variables>;
//range为可选项,它指定了reg型变量的位宽,缺省时为1位
//<list of register variables>为变量名称列表,一次可以定义多个名称,之间用逗号分开。
reg [n-1:0]a;
//声明一个n位寄存器a
reg a[n-1:0];
//声明一个寄存器a,由n个1位寄存器构成
1.3抽象类型
抽象数据类型主要包括整型(integer)、时间型(time)、实型(real)及参数型(parameter)
//整型
integer<list_of_register_variables>;
//例
integer index;
∥简单的32位有符号整数
integer i[31:0]
∥定义了整型数组,它有32个元素
2运算符和表达式
2.1算数运算符
“+”,“-”,“*”,“/”,“%”
2.1.1运算符的位宽
算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术操作结果的长度由操作左端目标长度决定。
reg[3:0]A,B,C;
reg[5:0]D;
A=B+C;//4位
D=B+C;//6位
2.2关系操作符
“>”,“<”,“>=”,“<=”