一.语言要素
1.空白符:空格符(\b),制表符(\t),换行符,换页符;
2.注释符:“//”,“/* */”;
Ps:注释全部用英文。
3.标识符:字母,数字,$,"_"的组合;
Ps:区分大小写,第一个字符必须是字母或者下划线,用“\"+非合法标识符也在代码中会看到,但是并不常用。
4.数值
状态 | 含义 |
---|---|
0 | 低电平,假或0 |
1 | 高电平,真或者1 |
x或X | 不确定或者未知状态 |
z或Z | 高阻态 |
注:低于0.7V为低电平,高于0.7V为高电平。
5.整数及其表示
数制 | 符号 | 合法标识符 |
---|---|---|
二进制 | b或B | 0-1,x,X,z,Z,?,_ |
八进制 | o或O | 0-7,x,X,z,Z,?,_ |
十进制 | d或D | 0-9,_ |
十六进制 | h或H | 0-9,a-f,A-F,a,X,z,Z |
注:二进制和十六进制为主
6.实数表示方法:
1)十进制表示法;
2)科学计数法。
二.数据类型
1.物理数据类型:
①连线型:wire,tri ;wor,trior等等
wire和tri
wire/tri | 0 | 1 | x | z |
---|---|---|---|---|
0 | 0 | x | x | 0 |
1 | x | 1 | x | 1 |
x | x | x | x | x |
z | 0 | 1 | x | z |
wor和trior
wor/trior | 0 | 1 | x | z |
---|---|---|---|---|
0 | 0 | 1 | x | 0 |
1 | 1 | 1 | 1 | 1 |
x | x | 1 | x | x |
z | 0 | 1 | x | z |
②寄存器类型:
reg型:十数据春初单元的抽象类型,其对应的硬件电路元件具有状态保持作用,能够存储数据,如触发器,锁存器等等。
reg型变量常用于行为级描述,由过程赋值语句对其进行赋值。
下面来一些简单例子:
reg a; //定义一个一位的名为a的reg变量
reg[3:0]b; //定义一个4位的名的reg型变量
reg[8:1]c,d,e; //定义了三个名称分别为c,d,e的八位reg型变量
Ps:reg型变量一般为无符号数,若将一个负数赋给reg型变量,则自动转成二进制补码的形式。
物理数据类型举例说明:
reg rega; //定义一个1位的寄存器型变量
reg [7:0]regb; //定义一个八位的寄存器型变量
tri [7:0]tribus; //定义一个八位的三态总线
tri0[15:0]busa; //定义一个16位的连线型,处于三态时为上拉电阻
tri1[31:0]busb; //定义一个32位的连线型,处于三态时为下拉电位
③存储器型:
存储器型变量可以用来描述RAM型,ROM型存储器以及reg文件。
三.运算符和表达式
1.算术操作符
加法(+);减法(-);乘法(*);除法(/);取模(%)。
位宽:算数表达式的结果长度由最长的操作数来表示。在赋值语句下,算术操作结果的长度由操作左端目标长度决定。
2.关系操作符
举例:
module rela_tb;
reg[3:0]a,b,c,d;
initial
begin
a=3;b=6;c=1;d=4'hx;
$display(a<b); //结果为真1
$display(a>b); //结果为假0
$display(a<=c); //结果为假0
$display(d<=a); //结果为未知数x
end
endmodule
3.相等关系操作符
等于“==”,不等于“!=”,全等“===”,非全等“!==”
真1假0,不定值x
== | 0 | 1 | x | z |
---|---|---|---|---|
0 | 1 | 0 | x | x |
1 | 0 | 1 | x | x |
x | x | x | x | x |
z | x | x | x | x |
“===”运算符真值表
=== 0 1 x z 0 1 0 0 0 1 0 1 0 0 x 0 0 1 0 z 0 0 0 1
4.逻辑运算符
逻辑与运算符“&&”,逻辑或运算符“||”,逻辑非运算符“!”
a | b | !a | !b | a&&b | a||b |
---|---|---|---|---|---|
1 | 1 | 0 | 0 | 1 | 1 |
1 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 0 | 1 |
0 | 0 | 1 | 1 | 0 | 0 |
5.按位操作符
按位取反“~”,按位与“&”,按位或“|”,按位异或"^",按位同或"^~"
& | 0 | 1 | x |
---|---|---|---|
0 | 0 | 0 | 0 |
1 | 0 | 1 | x |
x | 0 | x | x |
6.移位操作符
左移位运算符''<<",右移位运算符">>";
所移动的位数由右边的操作数来决定,然后用0来填补移出的空位
7.条件运算符
表达形式如下:<条件表达式>?<表达式1>:<表达式2>,结果为真执行表达式1;结果为假执行表达式2。
8.连接和复制运算符
连接运算符“{}”,复制运算符“{{}}”。
另外,本周HDLBits练习截图如下: