一、常量
常量按类型分为数字常量、字符常量和其他。
1.数字常量
数字常量分为整数和实数。
整数的表示形式:<+/-><数字位宽>'<数字类型><数字>
负号表示为负数,负数通常表示为二进制的补码形式:-6‘d3表示6位的用二进制补码形式存储的十进制3,表示负数;
数字类型:十进制(D或d)、十六进制(H或h)、二进制(B或b)、八进制(O或o);
数字:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
实数表现形式:
十进制,如:4.0、3.567;
科学计数法:3.6e2、5e-4;
2.字符串
由双引号括起来的字符队列,字符串不可多行书写,即不能含回车符。如“hello verilog” //为一字符串
3.其他
x和z值以及下划线“_”和“?”。
x表示不确定值,z表示高阻值:x或z在二进制中为1位的x或z,在八进制中位3位,在十六进制中为4位。8'b1100zzzz //相当于8'bcz
"_"可出现在数字常量的任何位置,只是提高可读性,编译时会被忽略。
"?"是z的另一种表示,使用问号是增加casex和casez语句的可读性,"?"(高阻抗)表示“不必关心”的情况,如4'b10?? //相当于4'b10zz
二、数据类型
Verilog有两大数据类型:线网类型、寄存器类型
1.线网类型
线网结构相当于硬件电路的各种物理连接,特点是输出值跟随输入值变化而变化
定义格式:
wire[位宽]<数据名>:位宽缺省默认为1;
多位wire类型变量:wire[n-1:0]<数据名>或wire[n:1]<数据名> 表示数据宽度为n位
为避免使用关键字,建议数据名用大写字母
2.寄存器类型
具有保持状态的电路元件,如触发器。寄存器类型只能在initial和always语中,通过过程赋值。
在initial和always过程块中,被赋值的信号必须定义成寄存器类型,即使某些实际设计信号实际上不是寄存器类型。
verilog中共有4种寄存器变量:reg型、integer型(32位带符号整形)、real型(64位带符号实型)、time型(无符号时间变量)。
定义格式:
与wire类型相似。
reg[位宽]<数据名>:位宽缺省默认为1;
多位reg类型变量:reg[n-1:0]<数据名>或reg[n:1]<数据名> 表示数据宽度为n位
3.参数型(parameter)
用parameter定义的参数代表常量,不能进行赋值操作。
定义格式:
parameter <参数名>=表达式:parameter WIDTH=256; //定义宽度为常数256