虚拟机:VMware-workstation-full-14.0.0.24051
环 境:ubuntu 18.04.1
文章目录
一、学习内容
这节主要是学习上半部分-运算符及其表达式
二、运算符和表达式
- 运算符按功能分为9类:
算术运算符、逻辑运算符、关系运算符、等式运算符、缩减运算符、条件运算符、位运算符、移位运算符、位拼接运算符。 - 运算符按操作数的个数分为3类:
- 单目运算符–带一个操作数:逻辑非!、按位取反~、缩减运算符、移位运算符;
- 双目运算符–带两个操作数:算术、关系、等式运算符;逻辑、位运算符的大部分;
- 三目运算符–带三个操作数:条件运算符。
(1)算术运算符
算术运算符 | 说明 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法 |
% | 求模 |
- 进行整数除法运算时,结果值略去小数部分,只取整数部分!
- %称为求模(或求余)运算符,要求%两侧均为整型数据;
- 求模运算结果值的符号位取第一个操作数的符号位!【例 1】 -11%3,结果为-2
- 进行算术运算时,若某操作数为不定值x,则整个结果也为x。
【例 2】 除法和求模运算的区别
module arithmetic(
output reg [3:0] c,
output reg [3:0] d,
output reg [7:0] e,
input clk,
input [3:0] a,
input [3:0] b
);
always @ (posedge clk) begin
c <= a/b;
d <= a%b;
e <= a*b;
end
(2)逻辑运算符
逻辑运算符 | 说明 |
---|---|
&&(双目) | 逻辑与 |
两竖杆(双目) | 逻辑或 |
!(单目) | 逻辑非 |
- 非零的操作数被认为是真(1‘b1);
- 零被认为是假(1‘b0);
- 不确定的操作数如4’bxx00, 被认为是不确定的(可能为零,也可能为非零)(记为1’bx); 但4’bxx11被认为是真(记为1’b1,因为它肯定是非零的)
注意进行逻辑运算后的结果为布尔值(为1或0或x)
“&&”和“||”的优先级除高于条件运算符外,低于关系运算符、等式运算符等几乎所有运算符;逻辑非“!”优先级最高
(3)位运算符
- 位运算其结果与操作数位数相同。位运算符中的双目运算符要求对两个操作数的相应位逐位进行运算。
- 两个不同长度的操作数进行位运算时,将自动按右端对齐,位数少的操作数会在高位用0补齐。
【例 3】
若A = 5’b11001,B = 3’b101,
则A & B = (5’b11001)&(5’b00101)= 5’b00001
思考:&&运算符和&运算符的区别。
(4)关系运算符(双目)
关系运算符 | 说明 |
---|---|
< | 小于 |
<= | 小于或等于 |
> | 大于 |
>= | 大于或等于 |
- 运算结果为1位的逻辑值1或0或x。 关系运算时,若关系为真,则返回值为1;若声明的关系为假,则返回值为0;若某操作数为不定值x,则返回值为x;
- 所有的关系运算符优先级别相同;
- 关系运算符的优先级低于算术运算符。
a < size - 1 等同于: a<(size - 1)
size -(1<a) 不等同于: size-1<a
(5)等式运算符(双目)
等 式 运 算 符 | 说 明 |
---|---|
== | 等 于 |
!= | 不 等 于 |
=== | 全 等 |
!== | 不全等 |
- 运算结果为1位的逻辑值1或0或x;
- 等于运算符(= =)和全等运算符(= = =)的区别
使用等于运算符时,两个操作数必须逐位相等,结果才为1;若某些位为x或z,则结果为x。
使用全等运算符时,若两个操作数的相应位完全一致(如同是1,或同是0,或同是x,或同是z),则结果为1;否则为0。 - 所有的等式运算符优先级别相同。
【例 4】 真值表比较
(6)缩减运算符
- 运算法则与位运算符类似,但运算过程不同!
- 对单个操作数进行递推运算,即先将操作数的最低位与第二位进行与、或、非运算,再将运算结果与第三位进行相同的运算,依次类推,直至最高位 。
- 运算结果缩减为1位二进制数
【例 5】
reg[3:0] a;
b=|a; //等效于 b =( (a[0] | a[1]) | a(2)) | a[3]
(7)移位运算符(单目)
用法:A>>n 或 A<<n,将操作数右移或左移n位,同时用n个0填补移出的空位。
【例 6】
4'b1001>>3 = 4'b0001; 4'b1001>>4 = 4'b0000;
4'b1001<<1 = 5'b10010; 4'b1001<<2 = 6'b100100;
1<<6 = 32'b1000000
(8)条件运算符(三目)
格式:信号 = 条件?表达式1:表达式2。当条件为真,信号取表达式1的值;为假,则取表达式2的值。
(9)位拼接运算符
位拼接运算符为{ },用于将两个或多个信号的某些位拼接起来,表示一个整体信号。
【例 8】
output [3:0] sum; //和
output cout; // 进位输出
input[3:0] ina, inb;
input cin;
assign {cout, sum} = ina + inb +cin;// 进位与和拼接在一起
{a, b[3:0], w, 3’b101} = {a, b[3], b[2], b[1], b[0], w, 1’b1, 1’b0, 1’b1 }
(10)算术运算符
可用重复法简化表达式,如:{4{w}} //等同于{w, w, w, w},还可用嵌套方式简化书写,如:{b, { 3{a, b} } } //等同于{b, {a, b}, {a, b}, {a, b}},也等同于{b, a, b, a, b, a, b}。
在位拼接表达式中,不允许存在没有指明位数的信号,必须指明信号的位数;若未指明,则默认为32位的二进制数!如{ {1,0} } = 64’h h00000001_ 000000000 ,注 意{ {1 ,0} } 不等于2’b1100。
三、小结
可以使用使用括号()来控制运算的优先级。
作者:xlinxdu
版权:本文版权归作者所有
转载:欢迎点赞、评论和转载,但未经作者同意,必须保留此段声明,必须在文章中给出原文连接。