[Verilog] Verilog 操作符与表达式

主页: 元存储博客

文章目录

    • 前言
    • 1. 操作符
    • 2. 操作数
    • 3 表达式
    • 总结

前言

1. 操作符

在这里插入图片描述
图片来源: https://www.runoob.com/

Verilog语言中使用的操作符包括:

  • 算术操作符:加法(+)、减法(-)、乘法(*)、除法(/)、取模(%)、自增(++)、自减(–)等。

  • 逻辑操作符:与(&)、或(|)、非(!)、异或()、与非(~&)、或非(~|)、异或非(~)等。

  • 位操作操作符:按位与(&)、按位或(|)、按位异或(^)、按位非(~)、左移(<<)、右移(>>)等。

  • 关系操作符:等于(==)、不等于(!=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)等。

  • 条件操作符:三目运算符(?😃。

  • 赋值操作符:赋值(=)、加等(+=)、减等(-=)、乘等(*=)、除等(/=)、模等(%=)、与等(&=)、或等(|=)、异或等(^=)、左移等(<<=)、右移等(>>=)等。

结构化操作符:括号(())、方括号([])、点号(.)等。

  • 归约操作符 [文献1]

归约操作符包括:归约与(&),归约与非(&),归约或(|),归约或非(|),归约异或(),归约同或(~)。

归约操作符只有一个操作数,它对这个向量操作数逐位进行操作,最终产生一个 1bit 结果。

逻辑操作符、按位操作符和归约操作符都使用相同的符号表示,因此有时候容易混淆。区分这些操作符的关键是分清操作数的数目,和计算结果的规则。

A = 4'b1010 ;
&A ;      //结果为 1 & 0 & 1 & 0 = 1'b0,可用来判断变量A是否全1
~|A ;     //结果为 ~(1 | 0 | 1 | 0) = 1'b0, 可用来判断变量A是否为全0
^A ;      //结果为 1 ^ 0 ^ 1 ^ 0 = 1'b0

**位宽操作符([])
等号(=)操作符:用于将一个位宽较小的信号赋值给一个位宽较大的信号

reg [7:0] a;
reg [3:0] b;

assign a = b;
 

将位宽为4位的信号b赋值给位宽为8位的信号a。Verilog会自动将b的值复制到a的低4位上。

等号(=)操作符加括号:用于将一个位宽较大的信号赋值给一个位宽较小的信号,并执行截断操作。例如:

reg [7:0] a;
reg [3:0] b;

assign b = a[3:0];
 

上面将位宽为8位的信号a的低4位赋值给位宽为4位的信号b。Verilog会自动对a的低4位进行截断

重复操作符({})**
用于复制一个信号的多个副本

reg [3:0] a;
reg [7:0] b;

assign b = {4{a}};
 

拼接操作符({})
拼接操作符用大括号 {,} 来表示,用于将多个操作数(向量)拼接成新的操作数(向量),信号间用逗号隔开。

拼接符操作数必须指定位宽,常数的话也需要指定位宽。例如:

实例

A = 4'b1010 ;
B = 1'b1 ;
Y1 = {B, A[3:2], A[0], 4'h3 };  //结果为Y1='b1100_0011
Y2 = {4{B}, 3'd4};  //结果为 Y2=7'b111_1100
Y3 = {32{1'b0}};  //结果为 Y3=32h0,常用作寄存器初始化时匹配位宽的赋初值

2. 操作数

位操作数:表示单个位的值,可以是0或1。
寄存器操作数:表示存储在寄存器中的值。
端口操作数:表示输入/输出端口的值。
参数操作数:表示参数值。
固定操作数:表示常量值,如整数、浮点数或字符串。
立即操作数:表示在运行时计算得到的值。

3 表达式

表达式由操作符和操作数构成,其目的是根据操作符的意义得到一个计算结果。
常见的Verilog表达式:

  • 算术运算符:使用"+“、”-“、”*“、”/"等运算符执行加法、减法、乘法和除法操作。例如:a = b + c;

  • 逻辑运算符:使用"&&“、”||“、”!"等运算符执行与、或和非逻辑操作。例如:y = a && b;

  • 比较运算符:使用"==“、”!=“、”>“、”<"等运算符执行比较操作。例如:is_equal = a == b;

  • 位运算符:使用"&“、”|“、”~"等运算符执行位操作。例如:result = a & b;

  • 移位运算符:使用">>“、”<<"等运算符执行位移操作。例如:result = a >> 2;

  • 条件运算符:使用"?“和”:"运算符执行条件操作。例如:result = (a > b) ? a : b;

  • 乘方运算符:使用"**"运算符计算乘方。例如:result = a ** 2;

  • 括号:使用括号将表达式进行分组。例如:result = (a + b) * c;

总结


参考文献

  1. https://www.runoob.com/w3cnote/verilog-expression.html

声明
本文仅为学习交流目的。
文中部分文字和图片来源于互联网,列在参考的文献,但可能有遗漏。如有侵权,请告知我删除。

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

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

相关文章

常用网安渗透工具及命令(扫目录、解密爆破、漏洞信息搜索)

目录 dirsearch&#xff1a; dirmap&#xff1a; 输入目标 文件读取 ciphey&#xff08;很强的一个自动解密工具&#xff09;&#xff1a; john(破解密码)&#xff1a; whatweb指纹识别&#xff1a; searchsploit&#xff1a; 例1&#xff1a; 例2&#xff1a; 例3&…

no module named ‘xxx‘

目录结构如下 我想在GCNmodel的model里引入layers的GraphConvolution&#xff1a;from GCNmodel.layers import GraphConvolution&#xff0c;但这样却报错no module named GCNmodel&#xff0c;而且用from layers import GraphConvolution也不行。然后用sys.path.appen(xxx)…

MySQL数据库,表的增量备份与恢复

1. 从物理与逻辑的角度 数据库备份可以分为物理备份和逻辑备份。物理备份是对数据库操作系统的物理文件&#xff08;如数据 文件&#xff0c;日志文件等&#xff09;的备份。这种类型的备份适用于在出现问题时需要快速恢复的大型重要数据库。 物理备份又可以分为冷备份&#xf…

Redis Cluster集群搭建 三主三从

Redis包下载 Linux&#xff1a; http://download.redis.io/releases/ Mac or Windows: https://redis.io/download/ 2.下载后解压进入文件夹&#xff08;本次我的Redis版本是6.2.14版本&#xff09; /redis/redis-6.2.14 开始安装 make instarll修改配置文件复制redis.conf 6…

Ubuntu 常用命令之 chmod 命令用法介绍

chmod是Linux系统下的一个命令&#xff0c;用于改变文件或目录的权限。它的名称是“change mode”的缩写。在Linux中&#xff0c;文件或目录的权限分为读&#xff08;r&#xff09;、写&#xff08;w&#xff09;和执行&#xff08;x&#xff09;三种&#xff0c;分别对应数字4…

Python redis安装使用教程

一、项目环境 Python 3.8.xredis-5.0.14 二、Redis 安装 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 下载 Redis-x64-xxx.zip压缩包到你要安装的文件夹&#xff0c;解压即可 三、使用redis 打开一个 cmd 窗口&#xff0c;使用 cd 命令切换redis…

(5)shell命令以及Linux的权限

写在前面 本章我们将重点讲解 Linux 权限&#xff0c;这是 Linux 基础部分中非常重要的一部分。内容比较干&#xff0c;我会稍稍正经些去讲解。话不多说&#xff0c;我们直接切入正题。 shell 命令及运行原理 严格意义上说的是一个操作系统&#xff0c;我们称之为 —— &…

MDK编译过程和文件类型

MDK是一款IDE软件&#xff0c;具有&#xff0c;编辑&#xff0c;编译&#xff0c;链接&#xff0c;下载&#xff0c;调试等等的功能。 1.编译器介绍&#xff1a; MDK可以编译C/C文件和汇编文件&#xff0c;MDK只是一款IDE软件&#xff0c;那他内部使用的是什么编译器呢&#x…

【已解决】Java zip解压时候 malformed input off : 4, length : 1

需求&#xff1a;通过页面上传ZIP文件后&#xff0c;对zip文件进行解压。 遇到的错误&#xff1a;在进行zip解压的时候错误如下&#xff1a; 先看报错前的&#xff1a; /*** 解压缩ZIP文件* param zipFile ZIP文件* param destDir 目标路径*/ public static void zipDecompre…

HIVE窗口函数

什么是窗口函数 hive中开窗函数通过over关键字声明&#xff1b;窗口函数&#xff0c;准确地说&#xff0c;函数在窗口中的应用&#xff1b;比如sum函数不仅可在group by后聚合&#xff0c;在可在窗口中应用&#xff1b; hive中groupby算子和开窗over&#xff0c;shuffle的逻辑…

时序数据库选型TimescaleDB

最近要做一个数字车间的物联网项目&#xff0c;数据存储成了首先要解决的问题&#xff0c;整个车间一共104台数控机床&#xff0c;1s钟采集1次数据&#xff0c;360024365*1043,279,744,000 &#xff0c;一年要产生32亿条记录&#xff0c;这个数据量用常见的关系型数据库肯定是不…

phpMyAdmin的常见安装位置

nginx的日志显示有人一直在尝试访问phpMyAdmin的setup.php&#xff0c;用了各种位置。 其实我只有一个nginx&#xff0c;别的什么也没有。 47.99.136.156 - - [01:44:37 0800] "GET http://abc.com:80/phpMyAdmin/scripts/setup.php HTTP/1.0" 404 162 "-"…

新建vue3项目

三种方法 一. 第一种方式 1、操作步骤&#xff1a; 创建项目目录 vue create 项目名称选择配置方式 ? Please pick a preset: #选择一个配置 Default &#xff08;[Vue 3] babel, eslint&#xff09;Default &#xff08;[Vue 2] babel, eslint&#xff09;Manually select …

wordpress安装之正式开始安装wordpress

1、拉取wordpress镜像 docker pull wordpress 2、启动容器 启动容器&#xff0c;设置容器名为wordpress2并把80端口映射到宿主机的9988端口 docker run -it --name wordpress2 -p 9988:80 -d wordpress 3、查看容器状态 docker ps 4、安装wordpress博客程序 因为我们前面启…

「斗破年番」小医仙黑皇城遭调戏,五品丹换药材,获取菩提涎消息

Hello,小伙伴们&#xff0c;我是拾荒君。 《斗破苍穹年番》的第75集已经更新了&#xff0c;喜欢这部国漫的小伙伴应该都去观看了吧&#xff0c;拾荒君也是看了看这一集。在这一集中&#xff0c;萧炎成功地帮助吴昊等人摆脱了鹰爪老人的围困&#xff0c;然后便前往了黑皇城。 黑…

【JAVA-Day65】Java内部类深度解析

Java内部类深度解析 《Java内部类深度解析》摘要引言一、理解内部类1. 内部类的基本概念和语法1.1 什么是内部类&#xff1f;1.2 内部类的语法结构1.3 内部类的基本概念 2. 不同类型的内部类详解2.1 成员内部类2.2 静态内部类2.3 局部内部类2.4 匿名内部类 二、内部类与普通类的…

FL Studio2024破解版注册机及使用教程

FL Studio 2024破解版是一款非常实用的软件。该软件用于不同的目的&#xff0c;例如从音频中删除人声、管理音频以及更改不同的音频属性。此外&#xff0c;您还可以查看音频和歌曲的不同效果并管理其音量和大小。您还可以管理音乐和音频的自动化。您可以用它创作一首具有不同音…

深入理解——快速排序

目录 &#x1f4a1;基本思想 &#x1f4a1;基本框架 &#x1f4a1;分割方法 ⭐Hoare版本 ⭐挖坑法 ⭐前后指针法 &#x1f4a1;优化方法 ⭐三数取中法 ⭐小区间内使用插入排序 &#x1f4a1;非递归实现快速排序 &#x1f4a1;性能分析 &#x1f4a1;基本思想 任取待排…

LeedCode刷题---滑动窗口问题(二)

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、将X减到0的最小操作数 题目链接&#xff1a;将 x 减到 0 的最小操作数 题目描述 给你一个整数数组 nums 和一个整数 x 。每一…

函数和函数表达式

我们先来看三个式子 1️⃣ yf(x) 2️⃣ f(x)2x1 3️⃣ y2x1 先来明确一下概念&#xff0c;这三个式子的&#x1f7f0;两边总共有3种表达形式 y是函数最终输出的值f(x) 是整个函数运算过程2x1是具体的表达式 那么这三个式子分别是什么意思呢&#xff1f; yf(x)是对函数关系的…