一、概念
verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。
二、基础知识
在数字电路中一般使用逻辑值0和1代表逻辑的假和真;
逻辑0:表示低电平,对应电路的GND;
逻辑1:表示高电平,对应电路的VCC;
逻辑X:表示未知,有可能是高电平,也有可能是低电平;
逻辑Z:表示高阻态,外部没有激励信号,是一个悬空状态。
1、进制转换
Verilog数字进制格式包括二进制(B)、八进制(O)、十进制(D)和十六机制(H)。
一般常用的为二进制、十进制和十六进制。
例子:
二进制表示如下:4‘b0101表示4位二进制数字0101
十进制表示如下:4‘d2表示4位十进制数字2(二进制0010)
十六进制表示如下:4'ha表示4韦十六进制数a(二进制1010)
2、数制转换
3、标识符
标识符用于定义模块名、端口名、信号名等。
标识符可以使一组任意字母、数字、$符号和_(下划线)符号的组合;
但是标识符的第一个字符必须是字母或下划线;
标识符是区分大小写的。
三、数据类型
在verilog语言中,主要有三大数据类型:
寄存器型(reg)、线网型(wire)和参数型,真正在数字电路中起作用的类型是reg型和wire型 。
1、寄存器类型(reg):
寄存器表示一X个抽象的数据存储单元,通过赋值语句可以改变寄存器存储的值。
寄存器数据类型的关键字是reg,reg数据的默认初始值为不定值X。
reg类型的数据只能在always语句和initial语句中被赋值。
如果该过程语句描述的是时序逻辑,即always语句带有时钟信号,则该寄存器变量对应为触发器;
如果该过程语句描述的是组合逻辑,即always语句不带有时钟信号,则该寄存器对应为硬件连线;
2、线网类型(wire)
线网数据类型表示结构实体(例如门)之间的物理连线。
线网类型的变量不能储存值,它的值是由驱动它的元件所决定的。
驱动线网类型变量的元件有门、连续赋值语句、assign等。
如果没有驱动元件连接到线网类型的变量上,则该变量就是高组的,即其值为z。
线网数据类型包括wire型和tri型,其中最常用的就是wire类型。
3、参数类型(parameter):
参数其实就是一个常量,在Verilog HDL中用parameter定义常量。
可以一次定义多个参数,参数与参数之间需要逗号隔开。
每个参数定义的右边必须是一个常数表达式。
参数型数据常用于定义状态机的状态、数据位宽和延迟大小等。
采用标识符来代表一个常量可以提高程序的可读性和可维护性。
在模块调用时,可通过参数传递来改变被调用模块中已定义的参数。
四、运算符 Verilog中的操作符按照功能可以分为以下几种类型:
①算数运算符
②关系运算符(比较两个参数的大小)
③逻辑运算符(与或非)
④条件运算符(Verilog特有的运算符)
a?b:c 中a表示一个判断条件,?表示是否满足a这个样判断条件,如果判断条件满足执行第一项(b),不满足则执行第二项(c)
result = (a>=b) ? a : b;这个例子说明如果(a>=b)则把a的值赋值给result,反之。
⑤位运算符(按位操作)
注意:如果A和B位宽不一致,需要在位宽少的数前面补0(高位补0),补成相同的位宽,然后再进行按位操作。
⑥移位运算符(verilog中常用)
⑦拼接运算符(verilog特有)
运算符的优先级:(最后一个问号表示条件运算符)
注意注意注意!在使用verilog编写表达式,一定要考虑运算符的优先级,否则实际计算出来结果可能与预期不一致,编写比较长的表达式要多用括号,整个结构会比较明了,减少出错概率。