【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;
    initial
        begin
            a=5'b101;//运算的时候a自动变为5'b00101
            b=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;
    initial
        begin
            a=6'b101011;
          $display("%b",&a);   	//结果为1'b0
          $display("%b",|a);    	//结果为1'b1
          $display("%b",^a);	 	//结果为1'b0
        end
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;
    initial
        begin
            a=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'b101101
        end
endmodule
            

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/305220.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

React 入门 - 05(响应式与事件绑定)

本章内容 目录 一、响应式设计思想二、React 中的事件绑定 继上一节我们简单实现一个 TodoList来更加了解编写组件的一些细节。本节继续这个案例功能的完成。 一、响应式设计思想 1、在原生的 JS中&#xff0c;如果要实现点击”提交“按钮就将输入框的内容添加至页面列表中&…

【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍

前言&#xff1a; 在之前的项目中&#xff0c;我们已经使用 OpenVINO TM CSharp API 部署 PaddleOCR 全系列模型&#xff0c;但随着PaddleOCRv4版本发布以及OpenVINO CSharp API版本迭代&#xff0c;上一版本的项目已经不再适用。因此在推出的最新项目中&#xff0c;已经完成了…

6款实用的Git可视化管理工具

前言 俗话说得好“工欲善其事&#xff0c;必先利其器”&#xff0c;合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本&#xff0c;提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…

QT基础篇(1)QT概述

1.什么是QT QT是一个跨平台的C应用程序开发框架。它提供了一套丰富的图形用户界面&#xff08;GUI&#xff09;和多媒体功能&#xff0c;可以用于开发各种类型的应用程序&#xff0c;包括桌面应用程序、移动应用程序和嵌入式系统。QT具有易于使用、可定制性强、性能高等特点&a…

DelayQueue原理探究

DelayQueue并发队列是一个无界阻塞延迟队列&#xff0c;队列中的每个元素都有个过期时间&#xff0c;当从队列获取元素时&#xff0c;只有过期元素才会出队列。队列头元素是最快要过期的元素。 DelayQueue类图结构 由该图可知&#xff0c;DelayQueue内部使用PriorityQueue存放…

doris部署

doris-2.0.1.1部署安装 一、下载doris安装包二、解压到/data下&#xff0c;修改名称三、修改fe配置文件四、启动doris-fe五、验证doris-fe六、修改be配置文件七、启动doris-be八、mysql中连接be&#xff0c;在Doris中添加后端节点九、设置密码 一、下载doris安装包 wget https…

腾讯云优惠券是什么?2024年如何领取优惠券?

腾讯云优惠券是腾讯云平台提供的一种优惠方式&#xff0c;用户可以通过领取并使用优惠券&#xff0c;享受一定的折扣优惠。这些优惠券适用于腾讯云的各类产品&#xff0c;包括云服务器、数据库、CDN等&#xff0c;帮助用户降低购买成本&#xff0c;提高使用体验。 在2024年&…

软件测试|Django 入门:构建Python Web应用的全面指南

引言 Django 是一个强大的Python Web框架&#xff0c;它以快速开发和高度可扩展性而闻名。本文将带您深入了解Django的基本概念和核心功能&#xff0c;帮助您从零开始构建一个简单的Web应用。 什么是Django&#xff1f; Django 是一个基于MVC&#xff08;模型-视图-控制器&a…

11.11上课笔记

1.字符串 1.字符串是基本数据类型&#xff1a; "字符串" 字符串字符串str(字符串) #创建或者转换其他类型的字符串 a.获取长度&#xff1a;len&#xff08;字符串&#xff09; b.字符串是一个有序的数列&#xff08;sequence&#xff09;&#xff0c;也是一个可迭…

Edge浏览器停止更新方法之一(一分钟版)

一分钟时间停止器 开整原理效果步骤 结尾 开整 原理 通过限制window管理员的权限&#xff0c;禁止了更新程序的写入和读取&#xff0c;自然就更新不了了 效果 步骤 对着Edge浏览器图标右键&#xff0c;点击“打开文件所在位置” 到这级目录&#xff0c;然后往回退两级找到…

二进制部署

HOST HostnameIP地址flannedAPPmaster192.169.116.10ETCD\APIserver\Scheduler\Controller-Managernode1192.168.116.11172.17.28.0ETCD,Flanned,Kubelet,kube-proxynode2192.168.116.12172.17.26.0ETCD,Flanned,Kubelet,kube-proxy Kubernetes社区 Kubernetes文档 ETCD mas…

最新ThinkPHP版本实现证书查询系统,实现批量数据导入,自动生成电子证书

前提&#xff1a;朋友弄了一个培训机构&#xff0c;培训考试合格后&#xff0c;给发证书&#xff0c;需要一个证书查询系统。委托我给弄一个&#xff0c;花了几个晚上给写的证书查询系统。 实现功能&#xff1a; 前端按照姓名手机号码进行证书查询证书信息展示证书展示&#x…

云仓酒庄的品牌雷盛红酒LEESON分享什么是“小农香槟”?

云仓酒庄的品牌雷盛红酒LEESON分享说起香槟&#xff0c;第一时间会想到法国&#xff0c;因为只有法国的起泡酒才能叫“香槟”。那么&#xff0c;什么又是“小农香槟”呢&#xff1f; 小农香槟是相对大厂香槟而命名的&#xff0c;是指葡萄果农自产、自酿、自销的香槟&#xff0…

【AI】AI和点云(1/2)

目录 一、什么是点云 二、点云的应用领域 三、点云的创建 四、点云感知 一、什么是点云 在三维技术领域中&#xff0c;点云被定义为一种数据结构&#xff0c;用于表示三维空间中一组离散的点。这些点通常由它们的坐标&#xff08;x&#xff0c;y&#xff0c;z&#xff09;…

二分查找

二分查找(binary search)是一种基于分治策略的高效搜索算法。它利用数据的有序性&#xff0c;每轮缩小一半搜索范围&#xff0c;直至找到目标元素或搜索区间为空为止。 例&#xff1a;给定一个n 的数组 nums &#xff0c;元素按从小到大的顺序排列且不重复。请查找并返回元素 …

尝试使用深度学习识别百度旋转验证码

最近研究了一下图像识别&#xff0c;一直找到很好的应用场景&#xff0c;今天我就发现可以用百度的旋转验证码来做一个实验。没想到效果还挺好&#xff0c;下面就是实际的识别效果。 1、效果演示 2、如何识别 2.1准备数据集 首先需要使用爬虫&#xff0c;对验证码图片进行采…

克服VSCode与WSL的互通障碍:访问‘\wsl.localhost’的有效方法

前言 大家好&#xff01;今天染念想和大家分享一下我最近在使用 VS Code 时遇到的一个有趣问题&#xff0c;以及我是如何解决它的。这个问题涉及到在 Windows 上使用 WSL&#xff08;Windows Subsystem for Linux&#xff09;时的一个安全设置问题。 首先&#xff0c;让我简单…

Java中SpringBoot组件集成接入【Knife4j接口文档(swagger增强)】

Java中SpringBoot组件集成接入【Knife4j接口文档】 1.Knife4j介绍2.maven依赖3.配置类4.常用注解使用1.实体类及属性(@ApiModel和@ApiModelProperty)2.控制类及方法(@Api、@ApiOperation、@ApiImplicitParam、 @ApiResponses)3.@ApiOperationSupport注解未生效的解决方法5.…

livp转换成jpg怎么转换?看完这篇文章你就知道了

livp转换成jpg怎么转换&#xff1f;livp文件是一种特定的图片格式&#xff0c;将其转换为jpg格式可以方便我们进行存储、共享和编辑。此外&#xff0c;jpg格式也是一种广泛支持的图片格式&#xff0c;几乎所有的设备和软件都能够识别和打开这种格式的图片。因此&#xff0c;将l…

echarts - legend设置宽度不生效

如图&#xff0c;想要这样的设计&#xff0c;文字和百分比都各自垂直对齐。 本来想要设置 legend.width &#xff0c;但是设置了不生效&#xff0c;后来找到了原因。 orient“horizontal” 的时候&#xff0c;只有width会起作用&#xff0c;height为auto&#xff1b;orient“v…