一、基础知识
- 0:低电平,即GND
- 1:高电平,即VCC
- X:未知,可能是高可能是低
- Z:高阻态,悬空,即三态门的0开关下的输出
- 二进制表示:4’b0101,即四位二进制数0101
- 八进制表示:4’o7,即四位八进制数7
- 十进制表示:4’d2,即四位十进制数2(0101)
- 十六进制表示:4’ha,即四位十六进制数a(二进制1010)
注意:前面的4表示是的实际的位宽,如果没有指定,默认的是32位的位宽。可以在数之间加入下划线,如16’b1001_1010_1010_1001以增加可读性
- 标识符:用来定义模块、端口、信号的名字,和程序设计语言中的函数名与变量名类似,区分大小写
二、数据类型
- 主要有三种:寄存器数据类型、线网数据类型、参数数据类型
- 寄存器数据类型:表示一个抽象的数据存储单元(类似于寄存器)关键字是reg,默认的初始值是X,定义方法是
reg [2:0] name1;
reg name2;
- reg类型的数据只能在always语句和initial语句中被赋值,不能够给予初始值
- 如果语句描述的是时序逻辑电路,那么always语句将带有时钟信号,则该寄存器变量相当于一个触发器
- 如果语句描述的是组合逻辑电路,那么always语句不带有时钟信号,则该寄存器变量相当于一条硬件连接线
- 线网数据类型:表示结构实体之间的物理连线,不能够存储值,他的值是由它所连接的元件所控制的,只是一条连接线。关键字包括wire型和tri型,最常用是wire。默认是高阻态Z
wire [2:0] key1;
wire key2;
- 参数数据类型:实际上就是一个常量,类似于define,关键字是parameter,右边必须有一个常量表达式。可以一次定义多个,但参数与参数之间需要用逗号隔开。
parameter name1 = 4'b0101;
三、运算符
- +:a+b,表示相加
- -:a-b,表示相减
- *:a乘以b,表示相乘
- /:a除以b,表示整除
- %:a%b,表示取余
- :a>b,表示a大于b
- <:a<b,表示a小于b
- =:a>=b,表示a大于等于b
- <=:a<=b,表示a小于等于b
- ==:a等于b,表示a等于b
- !=:a!=b,表示a不等于b
- !:!a,表示a的非
- &&:a&&b,表示a与b
- ||:a||b,表示a或b
- ?: :a?b:c,表示如果a为真则选择b,否则选择c
- ~:表示按位取反
- &:表示按位取与
- |:表示按位取或
- ^:表示按位异或
- <<:a<<b,表示a左移b位
- :a>>b表示a右移b位
注意,不管是左移还是右移都会用0来补充空位,所以,左移位宽增加,右移位宽不变
- {}:{a,b},表示将a和b拼接起来,作为一个新的信号或者变量