Verilog基础语法
逻辑值
逻辑0: 表示低电平,对应电路GND
逻辑1:表示高电平,对应电路VCC
逻辑X:表示未知,输入端存在多种输入情况,可能是高电平,也可能是低电平
逻辑Z: 表示高组态,外部没有激励信号,是一个悬空状态
数字进制格式
一般常用二进制(b)、八进制(o)、十进制(d)和十六进制(h)
二进制:4’b0101->4位宽的二进制数值 0101
十进制:4’d2 ->4位宽十进制数值2(表示二进制0101)
十六进制:4’ha ->表示4位宽十六进制数值a(二进制1010)
注:数据实际存储用二进制,位宽表示储存时二进制占用宽度。若不指定位宽,则默认32位位宽。若不指定进制,则默认位d。
默认 32’d 32位十进制数值
16’b1001_1010_1010_1001 = 16’hh9AA9
标识符
用于定义模块名、端口名、信号名等。
标识符可以是字母、数字、$符号和_符号组成;
但标识符第一个字符必须时字母或者下划线;
标识符区分大小写;
数据类型
三大数据类型:寄存器、线网、参数数据类型
寄存器类型(reg):
表示抽象数据存储单元。reg默认初始值为X(不确定值)
reg[31:0] delay_cnt; //定义32位寄存器
reg key_reg;
reg类型只能在always和inital语句中被赋值。
若描述语句是时序逻辑,即always语句中带有时钟信号,则该寄存器变量对应为触发器
若描述语句是组合逻辑,即always语句不带有时钟信号,则该寄存器变量对应为硬件连线
线网类型
表示结构实体(例如门)之间的物理连线。
不能存储值,值是由驱动他的元件所决定的。
驱动线网类型变量的元件有门、连续赋值语句、assign等
若没有驱动元件连接到线网上,这线网默认为高阻态Z
线网数据类型包括wire和tri,常用wire
wire key_flag;
参数类型
参数实际就是一个常量,类似与c语言的define,在Verilog中用parameter定义常量。
常用于定义状态机状态,数据位宽和延迟大小等。
parameter H_SYNC = 11'd41;
运算符
算术运算符 + - * / % (除法只能实现整除)
关系运算符 > < <= >= == !=
逻辑运算符 ! && ||
条件运算符 ?: a?b:c (a为真输出b,反之为c)
位运算符 ~ & | ^
移位运算符 << >> (用0填补空位,左移增加位宽,右移位宽不变)
4'b1001 << 2 = 6'b100100;
4'b1001 >> 1 = 4'b0100;
拼接运算符 {} {a,b}
c = {a, b[3,0]};
//假设a为8位。
//则c位12位