当前位置: 首页 > news >正文

【Verilog】运算符

系列文章

数值(整数,实数,字符串)与数据类型(wire、reg、mem、parameter)


  • 系列文章
  • 算术运算符
  • 关系运算符
  • 相等关系运算符
  • 逻辑运算符
  • 按位运算符
  • 归约运算符
  • 移位运算符
  • 条件运算符
  • 连接和复制运算符


算术运算符

Verilog HDL中常用的算术运算符主要有五种,分别是加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)。

算术操作结果的位宽。 算术表达式结果的长度由最长的操作数决定。 在赋值语句下,算术操作结果的长度由操作左端的目标长度决定。


关系运算符

关系运算符也是双目运算符,是对两个操作数的大小进行比较。关系运算符有大于(>)、小于(<)、大于等于(>=)和小于等于(<=)几种。

在进行关系比较时,如果成立则结果为“1”,否则返回的结果为“0”;若不确定则返回结果为不定值(x)。例如:10>15的结果为假(0),20>18的结果为真(1),而4’b1101<4’hx的结果为不定值(x)。


相等关系运算符

相等关系运算符是对两个操作数进行比较,比较的结果有三种:真(1)、假(0)和不定值(x)。Verilog HDL语言中有四种相等关系运算符:等于( == )、不等于( != )、全等(===)、非全等(! ==)。

“==”和“!=”称为逻辑等式运算符,其结果由两个操作数的值决定。

“ === ”和“ !== ”运算符则不同,它是对操作数进行按位比较,两个操作数必须完全一致,其结果才是1,否则为0。但是,若两个操作数对应位出现不定值x和高阻值z,则可认为是相同的。“ ===”和“!==”运算符常用于case表达式的判别,所以又称为“case等式运算符”。


逻辑运算符

逻辑运算符有三种,分别是逻辑与运算符(&&)、逻辑或运算符(||)、逻辑非运算符(!)。其中逻辑与和逻辑或是双目运算符,逻辑非为单目运算符。

逻辑运算符的操作数只能是逻辑0或者逻辑1。

三种逻辑运算符的真值表如下所示:

在这里插入图片描述

在逻辑运算符的操作过程中,如果操作数是1位的,那么1就代表逻辑真,0就代表逻辑假;如果操作数是由多位组成的,则当操作数每一位都是0时才是逻辑0值,只要有某一位为1,这个操作数就是逻辑1值。例如:寄存器变量a、b的初值分别为4’b1110和4’b0000,则 !a=0,!b=1,a&&b=0;a||b=1。

需注意的是,若操作数中存在不定态x,则逻辑运算的结果也是不定态,例如:a的初值为4’b1100,b的初值为4’b01x0,则 !a=0,!b=x,a&&b=x,a||b=x。


按位运算符

数字逻辑电路中,信号与信号之间的运算称为位运算。Verilog HDL提供了以下五种类型的位运算符:按位取反(**)、按位与(&)、按位或(**|**)、按位异或(**^**)、按位同或(**^)。

按位运算举例:

module bit_tb;reg[2:0]a;reg[4:0]b;initialbegina=5'b101;//运算的时候a自动变为5'b00101b=5'b11101;$display("%b",~a);//结果为3'b010$display("%b",~b);//结果为5'b00010$display("%b",a&b);	//结果为5'b00101 $display("%b",a|b); //结果为5'b11101$display("%b",a^b);	//结果为5'b11000          end
endmodule

归约运算符

归约运算符按位进行逻辑运算,属于单目运算符。由于这一类运算符操作的结果是产生1位逻辑值,因而被形象地称为缩位运算符。

Verilog HDL中,缩位运算符包括&(与)、| (或)、^ (异或)以及相应的非操作&、|、^、^。归约运算符的操作数只有一个。

归约运算符的运算过程是:设a是一个4位的寄存器型变量,它的四位分别是a[0]、a[1]、a[2]和a[3]。当对a进行缩位运算时,先对a[0]和a[1]进行缩位运算,产生1位的结果,再将这个结果与a[2]进行缩位运算,再接着是a[3],最后产生1位的操作结果。

归约操作举例:

module cut_tb;reg[5:0]a;initialbegina=6'b101011;$display("%b",&a);   	//结果为1'b0$display("%b",|a);    	//结果为1'b1$display("%b",^a);	 	//结果为1'b0end
endmodule

移位运算符

移位运算符有两种:左移位运算符(<<)、右移位运算符(>>)。运算过程是将左边(右边)的操作数向左(右)移,所移动的位数由右边的操作数来决定,然后用0来填补移出的空位。


条件运算符

条件运算符是Verilog HDL里唯一的三目运算符,它根据条件表达式的值来选择执行表达式,其表达形式为:<条件表达式>?<表达式1>:<表达式2>。其中,条件表达式的计算结果有真(1)、假(0)和不定态(x)三种。当条件表达式的结果为真时,执行表达式1,当条件表达式的结果为假时,执行表达式2。


连接和复制运算符

Verilog HDL语言中还有两个特殊的运算符:连接运算符({})和复制运算符({{}})。

连接运算符是把位于大括号({})中的两个或两个以上信号或数值用逗号(,)分隔的小表达式按位连接在一起,最后用大括号括起来表示一个整体信号,形成一个大的表达式。其格式为:{信号1的某几位,信号2的某几位,…,信号n的某几位}

重复运算符({{}}) 将一个表达式放入双重花括号中,复制因子放在第一层括号中。它为复制一个常量或变量提供了一种简便方法。

连接和复制操作举例:

module con_rep_tb;reg [2:0]a;reg [3:0]b;reg [7:0]c;reg [4:0]d;reg [5:0]e;initialbegina=3'b101;b=5'b1110;c={a,b};d={a[2:1],b[2:0]};e={2{a}};$display("%b",c);   	//结果为8'b01011110	$display("%b",d);	//结果为5'b10110$display("%b",e);	//结果为6'b101101end
endmodule

http://www.lryc.cn/news/276823.html

相关文章:

  • 浅析ARMv8体系结构:A64指令集
  • VSCode安装GitHub Copilot插件方法
  • 实战:使用docker容器化服务
  • 借用GitHub将typora图片文件快速上传CSDN
  • 外包公司干了2个月,技术退步明显了.......
  • PTA✨C语言 组合数的和
  • 这些开源自动化测试框架,会用等于白嫖一个w
  • 代码随想录第三十六天——无重叠区间,划分字母区间,合并区间
  • Python数据分析:入门到实践
  • 第7章-第9节-Java中的Stream流(链式调用)
  • 创建一个矩形中有两个三角形
  • Open3D 基于kdtree树的邻近点搜索(10)
  • c++实现支持动态扩容的栈(stack)
  • 举例说明计算机视觉(CV)技术的优势和挑战。
  • 如何利用docker来部署war包项目
  • SpringBoot 如何增强PageHelper入参的健壮性
  • 书生·浦语大模型全链路开源体系 学习笔记 第三课
  • CodeGPT,你的智能编码助手—CSDN出品
  • VMware Workstation——修改虚拟机配置和设置网络
  • 计算机毕业设计 基于SpringBoot的项目申报系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • CentOS 7.8 安装 Docker
  • Flask 会员列表展示
  • 光纤知识总结
  • LeetCode简单题记录
  • 【Python学习】Python学习10-列表
  • MySQL四大引擎,数据库管理,数据表管理,数据库账号管理
  • CentOS找回root密码
  • react输入框检索树形(tree)结构
  • 云原生学习系列之基础环境准备(虚拟机搭建)
  • Python入门知识点分享——(十三)内置函数