一、基本运算符
1.1、逻辑运算符与按位运算符
区别:
- 按位运算符是逐位进行逻辑运算,输出位数与输入位数一致
- 逻辑运算符进行逻辑运算,不关注输入的某一位而是将输入作为整体进行逻辑操作,输出位数为1,非0即1;
列举:
- 与:& 按位与;&& 逻辑与;
- 或:| 按位或; || 逻辑或;
- 非:~ 按位非; ! 逻辑非;
1.2、缩位运算符
灵活使用缩位运算符,可以简化代码;
如:
- &a 可实现a各位间的与运算,即&a等价与a(0)&a(1)&...&a(n)
- | a 可实现a各位间的或运算,即|a等价与a(0)|a(1)|...|a(n)
1.3、位拼接运算符
拼接功能:将reg/wire型变量首位连接,形成一个更大位宽的变量;
如:
a = 2'b10;
b = 3'b010;
{a,b}=5'b10010;
迭代功能:把一个变量复制多次,组成一个更大位宽的变量;(实际仍为拼接功能的一个特例:拼接元素相同)
如:a = 2'b10;
有{4{a}},即{a,a,a,a}
注意:
- 要保证迭代的完整性:{ {4{a}},b}({4{a}}为迭代功能,括号不能少;即不能写为{ 4{a},b} )
- 位拼接运算符还可以用于常量操作:{ {4{1'b1}},2'b10}
1.4、逻辑移位运算符与算数移位运算符
列举:
<< 逻辑左移运算符;<<< 数字左移运算符;
>> 逻辑右移运算符;>>> 数字右移运算符;
区别:逻辑移位运算符不关心符号位;逻辑左移右端补零,逻辑右移左端补零;
数字左移位运算符不关心符号位,与逻辑左移一样;数字右移运算符关心符号位,左端补符号位;
如:
1010101010,其中[]是添加的位
逻辑左移一位:010101010[0]
算数左移一位:010101010[0]
逻辑右移一位:[0]101010101
算数右移一位:[1]101010101
//======================================================================
// --- 名称 : 基本运算符
// --- 作者 : 又菜又爱玩
// --- 日期 : 2023-10-25
// --- 描述 : 一些常用基本运算符,包括:算数运算符、关系运算符、逻辑运算符、逻辑等式运算符、三目条件运算符、位运算符、移位运算符、位拼接运算符
//======================================================================
module Example_Operation
(
input [3:0] a ,
input [3:0] b ,
input [3:0] c ,
output [3:0] c1 ,
output [3:0] c2 ,
output [5:0] c3 ,
output [3:0] c4 ,
output [3:0] c5 ,
output [3:0] d1 ,
output [3:0] d2 ,
output [3:0] d3 ,
output [3:0] d4 ,
output [3:0] e1 ,
output [3:0] e2 ,
output [3:0] e3 ,
output [3:0] f1 ,
output [3:0] f2 ,
output [3:0] d11 ,
output [3:0] c11 ,
output [3:0] c22 ,
output [3:0] c33 ,
output [3:0] c44 ,
output [3:0] c55 ,
output [3:0] c66 ,
output [3:0] e11 ,
output [3:0] e22 ,
output [7:0] f11 ,
output [7:0] f22
);
//== waveform1 算数运算符
//======================================================================
assign c1 = a + b; //加
assign c2 = a - b; //减
assign c3 = a * b; //乘
assign c4 = a / b; //除
assign c5 = a % b; //求余
//== waveform2 关系运算符
//======================================================================
assign d1 = a > b; //大于
assign d2 = a < b; //小于
assign d3 = a >= b; //大于等于
assign d4 = a <= b; //小于等于
//== waveform3 逻辑运算符
//======================================================================
assign e1 = !a; //非
assign e2 = a && b; //与
assign e3 = a || b; //或
//== waveform4 逻辑等式运算符
//======================================================================
assign f1 = a == b; //判断相等
assign f2 = a != b; //判断不等
//== waveform5 三目条件运算符
//======================================================================
assign d11 = a ? b : c; //a为真,则d11 = b
//a为假,则d11 = c
//== waveform6 位运算符
//=============================&#