逻辑值
逻辑0:表示低电平,对应电路中的GND
逻辑1:表示高电平,对应电路中的VCC
逻辑X:表示未知,两个输入端,分别为VCC和GND,所以有可能是高电平,有可能是低电平
逻辑Z:表示高阻态(外部没有输入),是一个悬空状态,所以没有高低电平
进制表示方法
(没特意写出4,则默认位32位数)
二进制: 4‘b0101 表示 4位二进制数 0101
十进制: 4’d2 表示 4位十进制数 2
十六进制: 4‘ha 表示 4位十六进制数 a
(下划线只是为了看着舒服,8421码,方便计算)
example:16’b1001_1010_1010_1001 = 16'h9AA9
标识符
用于定义模块名、端口名、信号名等
标识符可以是任意一组字母、数字、$符号和_(下划线)符号的组成
要求:
1.标识符的第一个字符必须是字母或下划线
2.标识符区分大小写
建议:
1.不建议大小写混合使用
2.信号命名最好体现信号的含义
推荐写法:
1.用英文名
2.用下划线分隔单词, 如:cpu_addr
3.用一些常用前缀或后缀, 如:clk_50,clk_cpu
数据类型
主要分为三种:寄存器、线网、参数(前两种是真正在数字电路中起作用的)
寄存器类型
表示一个抽象的存储单元
可以使用reg改变寄存器存储的值,reg初始值为x
//-----------------------------------------
//reg define
//-----------------------------------------
reg [31:0] delay_cnt; //when defined bits need high to short
reg key_reg; // 1 bits
reg类型的数据只能在always块和initial块中被赋值
如果该语句描述的是时序逻辑(always中带有时钟信号),则改寄存器变量对应为触发器
如果该语句描述的是组合逻辑(always中不带有时钟信号),则改寄存器变量对应为硬件连线
线网类型
表示结构实体(例如门)之间的物理连线
不能存储值,其值由驱动元件决定
驱动线网类型类型的元件有门、连续赋值语句、assign等
若无驱动原件连接到线网类型的变量上,则该变量就为高阻的(值为z)
线网数据类型包括wire型和tri型
//-----------------------------------------
///wire define
//-----------------------------------------
wire key_flag;
参数类型
参数实际上是常量,用parameter定义
可以一次定义多个常量,中间用逗号隔开
每个参数定义的右边必须是一个常数表达式(不能是变量)
parameter H_SYNC = 11‘d2;
parameter H_SYNC , L_SUNC = 11‘d2;
1.常用于定义状态机的状态、数据位宽和延迟大小等
2.提高程序的可读性和可维护性
3.模块调用时,可通过参数传递来改变被调用模块中已定义的参数
维护例:wire [2:0] key_flag 等于 parameter f_bits = 2;
wire [f_bits:0] key_flag
运算符
c语言的部分以下
1.条件运算符:a ? b :c //若a为真,则选择b,否则选择c
例:
result = (a>b) ? a : b;
2.位运算符(不同位时,较低位的高位补0)
~ ~a a的每位取反
& a&b a与b按位相与
| a|b a与b按位相或
^ a^b a与b按位异或
3.移位运算符
<< a<<b a左移b位
>> a>>b a右移b位
4.拼接运算符
{} {a,b} [a:b]