verilog学习笔记(三)变量与操作符
变量和操作符是操作语句的重要组成。
网络数据类型wire ,tri
两者语法功能相同
Wire用于单个门驱动或连续赋值语句驱动
Tri多驱动器驱动
当没有定义逻辑强度,多驱动源会出现冲突,输出为X
寄存器类型reg
Reg的初始值为x,表示定义的信号将被用在always内
在作为操作数时reg被认为是正值
Memory型
reg[n-1:0] 储存器名[m-1:0] //长度n-1的储存单元该储存器共有m-1个 reg [n-1:0] rega; //一个n长度的寄存器 reg mema [n-1:0]; //一个n-1个存储单元的存储器
多个寄存器可以一句完成赋值,但是存储器不行
操作符号:
分为单目,双目,三目操作符
基础运算都是双目
位运算只有取反是单目
逻辑运算符:
&&逻辑与
||逻辑或
!逻辑非
与或优先级一样,非不同
要确保优先级不出错就用括号
关系运算符:
<大于
>小于
…
等式运算符
==
!=
===
!==
所有等式运算符中间不能有空格
都是双目运算符
前两个是逻辑等式运算符,不能比较不定值和高阻值,输出为X
当数为不定值或高阻值时
要用后两种去比较,完全相同输出才是1
移位运算符
移动后空出的位置用0填充
A<<n; //a左移动n位
变量移位位数可能会变的
1<<6=32’b1000000; 4’b1001>>1=4’b0100;
左移一定扩展?
右移不扩展?
位拼接运算符
{a,b[3:0],4’b1001}
将括号内的所有字符拼接起来
必须知道所有信号的长度
可以嵌套
{a,{3{a,b}}}={a,a,b,a,b,a,b}
缩减运算符
单目运算符
操作数自身逐位运算
C=&a=((a[0]&a[1])&a[2])&a[3];
与&,或|,非!,都有单目运算