这是本文档旧的修订版!
银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
技术论坛 | http://www.eeschool.org | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-07-01 | gingko | 初次建立 |
表5-1 算术运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 |
+ | 加法运算 | 2 | rega + 10 |
- | 减法运算 | 2 | rega - 10 |
* | 乘法运算 | 2 | rega * 10 |
/ | 除法运算 | 2 | 23 / 10,运行结果为2。 |
* 在基本算术运算符应用过程中需要注意:
表5-2 逻辑运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 | ||||
! | 逻辑求反 | 1 | !a | ||||
&& | 逻辑与 | 2 | a && b | ||||
逻辑或 | 2 | a | b |
a | b | !a | !b | a && b | a | b | |
1 | 1 | 0 | 0 | 1 | 1 | ||
1 | 0 | 0 | 1 | 0 | 1 | ||
0 | 1 | 1 | 0 | 0 | 1 | ||
0 | 0 | 1 | 1 | 0 | 0 |
表5-4 关系运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 |
< | 小于 | 2 | a < b |
> | 大于 | 2 | a > b |
< = | 小于等于 | 2 | a ⇐ b |
>= | 大于等于 | 2 | a >= b |
wire data_out = sel_en ? a : b;
表5-5 按位运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 | ||||
~ | 按位求反 | 1 | ~a | ||||
& | 按位与 2 | a & b | |||||
按位或 2 | a | b | |||||
按位异或 | 2 | a | b | ||||
---|---|---|---|---|---|---|---|
~ | , | ~ | 按位同或 | 2 | a ~ | b,a | ~ b |
* 在按位运算中,若两个操作数的位宽不一致,则会自动将两个操作数右对齐,高位补0后进行运算。
{signal1,signal2}
表5-6 移位运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 |
» | 右移 | 2 | a » m,a为操作数,m为移的位数 |
« | 左移 | 2 | a « m,a为操作数,m为移的位数 |
表5-7 等式运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 |
== | 等于 | 2 | a == b |
!= | 不等于 | 2 | a != b |
=== | 等于 | 2 | a === b |
!== | 不等于 | 2 | a !=== b |
* 在进行等式运算中,“==”和“!=”又被称作是逻辑等式运算符,由于等式运算中的两个操作数有可能是x和z,因此其运算结果可能是不定值x。但是,“===”和“!==”对比时要求两个操作数必须完全一致,因此其运行结果只有0和1两种。
表5-8 赋值运算符
操作符 | 执行的操作 | 操作数个数 | 表达式 |
= | 连续赋值 | 不定 | a = b |
= | 过程赋值 | 不定 | a = b |
⇐ | 过程赋值 | 不定 | a ⇐ b |
* 通常,连续赋值运算用于“assign”语句中,用于对wire型变量进行赋值,“=”两侧的操作数时随时变化的,例如: assign a = b,当b信号发生变化时,a都随之变化。
其代码如下:
reg [9:0]b; //产生输入信号b,并使b从0加1直至加到1000 always@(posedge clk_25m) if(b == 10'd1000) b <= 10'd0; else b <= b + 1'd1; reg [8:0]a; //产生输入信号a,并使a从0开始加1直至500 always@(posedge clk_25m) if(a == 9'd500) a <= 9'd0; else a <= a + 1'd1; assign c = a[7] && b[9]; //逻辑与,a[7]与b[9]同时为真时c为真 assign d = a[7] || b[9]; //逻辑或,a[7]与b[9]至少一个为真时d为真 assign e = !a[7]; //逻辑非,a[7]为假时e为真
其代码如下:
assign f = a[7] & b[9]; //按位与,a[7]=1、b[9]=1,f=1 assign g = a[7] | b[9]; //按位或,a[7]、b[9]至少一个为1时,g=1 assign h = ~a[7]; //按位非,a[7]为0时,h=1 assign i = a[7] &~ b[9]; //按位与非,a[7]=1、b[9]=1,i=0 assign j = a[7] |~ b[9]; //按位或非,a[7]=0、b[9]=0,j=1 assign k = a[7] ^ b[9]; //按位异或,a[7]和b[9]相异,k=1 assign l = a[7] ~^ b[9]; //按位同或,a[7]和b[9]相同,l=1