文章目录
- 主体内容
- 1 运算符
- 1.1 算术运算符
- 1.2 关系运算符
- 1.3 逻辑运算符
- 1.4 条件操作符
- 1.5 位运算符
- 1.6 移位运算符
- 1.7 拼接运算符(个人认为是HDL的最大特色)
- 1.8 运算符优先级
- 2 注释
- 3 关键字
- 参考资料
主体内容
1 运算符
1.1 算术运算符
+ - * / %
注意!!!/
为整除,%
为求余数(取模运算)。
使用算术运算符时,要注意以下问题:
1,算术运算结果的位宽。算术表达式结果的长度由最长的操作数决定。在赋值语句下,算术结果的长度由等号操作符左端的目标长度决定;
2,有符号数和无符号数的使用。在设计中,要注意到哪些操作数应该是无符号数,哪些应该是有符号数:
(1)无符号数值一般存储在线网、reg(寄存器)型变量及普通(没有符号标记s)的基数格式表示的整形数中。
(2)有符号数值一般存储在整形变量、十进制形式的整数、有符号的reg(寄存器)型变量及有符号的线网中。
1.2 关系运算符
> < <= >= == != ===(全等) !==(非全等)
使用关系运算符时,要注意以下问题:
1,在进行关系比较时,如果成立则结果为 1‘b1,否则返回的结果为 1’b0;若不确定则返回结果为不定制(x)。
2,若操作数长度不同,则长度短的操作数应在左边用0补齐。例如:'b1001 > 'b101100 等价于 'b001001 >= 'b101101,结果为假(0)。
3,值相同而位宽不同时,使用 == 时为真,使用 === 时为假。=== 和 !== 时对操作数进行按位比较,两个操作数必须完全一致,结果才是真,否则时0,若两个操作数对应位出现不定值 x 和高阻值 z,则可以认为是相同的。 === 和 !== 常用于 case 表达式的判别,所以又称为“case 等式运算符”。
1.3 逻辑运算符
!非 &&与 ||或
注意!!!,这里的非是!
而不是!!
。
使用逻辑运算符时,要注意以下问题:
1,如果操作数是由多位组成的,则当操作数每一位都是0时才是逻辑0值,只要有某一位为1,这个操作数就是逻辑1值。
2,逻辑运算符的操作数只能是逻辑0或者逻辑1。若操作数中存在不定态x,则逻辑运算的结果也是不定态,例如a为4‘b1100,b为4’b01x0,则 !a = 0, !b = x, a && b = x,a||b = x。
1.4 条件操作符
?: a?b:c **如果a为真,为b,否则为c**
条件运算符是verilog中的唯一三目运算符。注意条件表达式的运算结果可以为x,这个判断比较复杂。
1.5 位运算符
~位取反 &位相与 |位相或 ^位异或(不同为1) ^~位同或
位宽不同的数按运算时,会自动地将两个操作数按右端对齐,会把位宽低的高位补0(即补至两者的最大位宽),再运算,运算结果的位宽与操作数中的位宽较大者中相同。
特别注意区分逻辑运算符和位运算符到底谁是单个符号,谁是两个符号!!!
1.6 移位运算符
<< a<<b 将a左移b位 >> a>>b 将a右移b位
注意主次!两种移位运算都用0来填补移出的空位。
另外要注意!!!左移时,位宽增加;右移时,位宽不变(移出去的位就没了)。
4'b1001 << 2 = 6'b100100;
4'b1001 >> 1 = 4'b0100;
1.7 拼接运算符(个人认为是HDL的最大特色)
{} {a,b} 将a和b拼接起来,作为一个新信号
a = 3'b101;
b = 5'b11110;c = {a, b[3:0]}; //c = 7'b1011110
d = {2{a}}; //d = 6'b101101
1.8 运算符优先级
2 注释
类型1:// 只到本行结束有效
类型2:/*
*/ 两个符号间的内容均有效
注意!多行注释不允许嵌套,但是单行注释可以嵌套在多行注释中。
3 关键字
变量命名时,不能与系统关键字重名,且所有关键字都是小写的。例如,ALWAYS不是关键字,它是标识符常用关键字如下:
参考资料
1,正点原子领航者ZYNQ7020视频
2,《verilog HDL数字集成电路设计原理与应用(第二版)》 蔡觉平等
3,文心一言搜索结果