位运算符
1) ~ //取反
2) & //按位与
3) | //按位或
4) ^ //按位异或
5) ^~ //按位同或(异或非)
逻辑运算符
在Verilog HDL语言中存在三种逻辑运算符:
1) && 逻辑与
2) || 逻辑或
3) ! 逻辑非
等式运算符
在Verilog HDL语言中存在四种等式运算符:
1) == (等于)
2) != (不等于)
3) === (等于)
4) !== (不等于)
"=="和"!="又称为逻辑等式运算符。其结果由两个操作数的值决定。由于操作数中某些位可能是不定值x和高阻值z,结果可能为不定值x。
而"==="和"!=="运算符则不同,它在对操作数进行比较时对某些位的不定值x和高阻值z也进行比较,两个操作数必需完全一致,其结果才是1,否则为0。"==="和"!=="运算符常用于case表达式的判别,所以又称为"case等式运算符"。
位移运算符
左移:右边的添0
右移:左边的添0,移除的位舍去
举例:
4’b1001<<1 = 5’b10010; 4’b1001<<2 = 6’b100100;
1<<6 = 32’b1000000; 4’b1001>>1 = 4’b0100; 4’b1001>>4 = 4’b0000;
位拼接运算符
1.{a,b[3:0],w,3’b101}也可以写成为{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}
2.{4{w}} //这等同于{w,w,w,w}
3.{b,{3{a,b}}} //这等同于{b,a,b,a,b,a,b}
位拼接运算符
1.{a,b[3:0],w,3’b101}也可以写成为{a,b[3],b[2],b[1],b[0],w,1’b1,1’b0,1’b1}
2.{4{w}} //这等同于{w,w,w,w}
3.{b,{3{a,b}}} //这等同于{b,a,b,a,b,a,b}
wire型变量通常是用来表示单个门驱动或连续赋值语句驱动的网络型数据,常用来表示用于以assign关键字指定的组合逻辑信号。Verilog程序模块中输入输出信号类型缺省时自动定义为wire型。
reg:寄存器数据类型的关键字是,通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。reg类型数据的缺省初始值为不定值x,常用来表示用于“always”模块内的指定信号,常代表触发器,在“always”块内被赋值的每一个信号都必须定义成reg, reg型只表示被定义的信号将用在“always”块内
tri型变量则用来表示多驱动器驱动的网络型数据
memory型数据是通过扩展reg型数据的地址范围来生成的。
reg [7:0] mema[255:0];
这个例子定义了一个名为mema的存储器,该存储器有256个8位的存储器。该存储器的地址范围是0到255。
如果想对memory中的存储单元进行读写操作,必须指定该单元在存储器中的地址。下面的写法是正确的。
mema[3]=0; //给memory中的第3个存储单元赋值为0。
模块中最重要的部分是逻辑功能定义部分。有三种方法可在模块中产生逻辑。