1、标志符
标识符可以是一组字母、数字、下划线和$符号的组合,且标识符的第一个字符必须是字母或者下划线。另外,标识符区分大小写。要注意的是Verilog HDL定义了一系列保留字作为关键字,但只要小写的关键字才是保留字,所以对于不确定是否为保留字,可以将标识符首字母大写。
2、数据类型
1、wire型
Verilog程序模块中输入、输出信号类型默认时自定义为wire型。
wire型信号的定义格式如下:
wire[n-1:0] 数据名1,数据名2,...数据名N;
总共定义了N条线,每条线的位宽为n。
2、reg型
reg是寄存器数据类型的关键字,是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值。reg型数据常用来表示always模块内的指定信号,在always块内被赋值的每一个信号都必须定义为reg型。
reg型信号的定义格式如下:
wire[n-1:0] 数据名1,数据名2,...数据名N;
总共定义了N个寄存器变量,每条线的位宽为n。
3、memory型
Verilog通过对reg型变量建立数组来对存储器建模,memory型通过扩展reg型数据的地址范围来达到二维数组的效果。其定义的格式如下:
reg[n-1:0] 存储器名 [m-1:0];
其中,reg[n-1:0]定义了每一个存储器中每一个存储单元的大小;存储器后面的[m-1:0]则定义了存储器的大小。
eg:reg [15:0] ROMA [7:0];
即定义了一个存储位宽为16位,存储深度为8的一个存储器。
要注意的是,一个n位的寄存器可以在一条赋值语句中直接进行赋值,而一个完整的存储器则不行。如果要对memory型存储单元进行读写,则必须要指明地址。
4、parameter型
在Verilog HDL中用parameter来定义常量。
parameter型信号的定义格式如下:
parameter 参数名1=数据名1;
3、模块端口
1、input:模块从外界读取数据的接口,在模块内不可写。
2、output:模块往外界送出数据的接口,在模块内不可读。
3、inout:可读取数据也可送出数据,数据可双向流动。
4、常量集合
Verilog HDL有四种基本数值:
(1)0:逻辑0或“假”;
(2)1:逻辑1或“真”;
(3)x:未知;
(4)z:高阻。
1、整数
整数型可以按如下两种方式书写:简单的十进制数格式及基数表示格式。
(1)简单的十进制数格式
eg:45 -46
负数以补码表示。
(2)基数表示格式
基数表示的整数格式为:
[长度]'基数 数值
eg:6'b9 5'o9 9'd6
2、实数
(1)十进制计数法
eg:2.0 16539.236
(2)科学计数法
eg:235.12e2 5e-4
其中,e与E相同。
3、字符串
字符串是双引号内的字符序列,字符串不能分成多行书写。字符串是8位ASCLL值的序列。
eg:reg[1:8*7]Char;
Char="counter"
5、运算符和表达式
1、基本算术运算符
包含:+、-、*、/、%
其中,取模运算(%)结果的符号位和模运算的第一个操作数的符号保持一致(按照无符号进行运算,再对结果添加符号)。
2、赋值运算符
赋值运算分为连续赋值和过程赋值两种。
(1)连续赋值
连续赋值语句只能用来对线网型变量进行赋值,而不能对寄存器变量进行赋值,在实际使用时,有以下几种应用:
I.对标量线网型赋值
(2)过程赋值
过程赋值主要用于两种结构化模块(initial模块和always模块)中的赋值语句,在过程块中只能使用过程赋值语句,不能出现连续赋值语句。其中,赋值操作符有两种:“=”和“<=”,分别代表阻塞赋值和非阻塞赋值。
过程赋值语句只能对寄存器类型的变量(reg、integer、real和time)进行操作。对于存储器类型,只能对指定地址单元的整个字进行赋值,不能对其中某些位单独赋值。
3、关系运算符
关系运算符共8种:>、>=、<、<=、==(逻辑相等)、!=(逻辑不相等)、===(实例相等)、!==(实例不相等)。
实例算子===和!==可以比较含有X和Z的操作数。
4、逻辑运算符
(1)&& 逻辑与
(2)|| 逻辑或
(3)!逻辑非
5、条件运算符
三目运算符,格式如下:
y = x ? a : b;
若第一个操作数y=x为True,算子返回第二个操作数a,否则返回第三个操作数b。
6、位运算符
按位进行逻辑运算,共有7中逻辑运算符:
~非、&与、|或、^异或、^~同或、~&与非、|~或非。
如果两个操作数的长度不相等,将会对较短的数高位补零,使输出结果的长度与位宽较长的操作数的长度保持一致。
7、移位运算符
左移<<一位相当于乘2,右移一位相当于除2.
s<
8、一元约简运算符
单目运算符。其运算过程为:首先将操作数的第一位与第二位进行与、或、非运算;然后再将结果和第三位进行与、或、非运算,以此类推,直至最后一位。
eg:reg [3:0] s1;
reg s2;
s2=&s1;
文章出处:【微信公众号:FPGA之家】
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !