首页 > 其他分享 >FPGA开发——verilog的运算符以及相关优先级的介绍

FPGA开发——verilog的运算符以及相关优先级的介绍

时间:2024-08-22 19:25:36浏览次数:11  
标签:优先级 FPGA 结果 assign 运算符 verilog 移位 表达式

一、简介

        在我们学习任何一门编程语言时,不可避免的都会遇见运算符和相关的运算优先级的问题,只有掌握了各个运算符的优先级关系我们才能进行更好的代码编写。在前面的时候因为我没有遇到因为优先级而导致的工程结果错误,所以没有过多注意,但是遇到之后才发现运算符优先级的重要性。

二、verilog运算符

在verilog语言中也有属于它的特殊运算符,今天我们就来看看verilog的运算符。

1、基本运算符

在Verilog 语言中,也是和其他编程语言一样拥有下面这几个基本操作符,同时也是我们最为常见的运算符:
(1)+ (加法运算符)
示例:assign Y = A + B ; //将A与B相加,计算结果赋值给Y
(2)- (减法运算符)
示例:assign Y = A - B; //将A的值减去B的值,计算结果赋值给Y
(3)* (乘法运算符)
示例:assign Y = A * B;//将A与B乘积的结果赋值给Y
(4)/ (除法运算符)
示例:assign Y = A / B; //将变量A的值除以B结果赋值给Y
(5)% (模运算符, 或者称为求余运算符,要求%两侧均为整型数据,例如7%3的值为1)

2、位运算符

(1)取反运算符 ~ :
assign Y = ~A;//若A = 4’b1011; 则Y的值为4’b0100, 即按照每个bit位进行取反操作。

(2)按位与操作 & :
assign Y = A & B; //若A的值为4’b1011, B的值为4’b0101, 则Y的值为4’b0001

(3)按位或操作 | :
assign Y = A | B; //若A的值为4’b1011, B的值为4’b0101, 则Y的值为4’b1111

(4)按位异或 ^ :
assign Y = A ^ B;//若A的值为4’b1011, B的值为4’b0101, 则Y的值为4’b1110

(5)按位同或 ^~
assign Y = A ^~ B;//若A的值为4’b1011, B的值为4’b0101, 则Y的值为4’b0001

在这里我们需要特别注意的是~、&、|和 !、&&、||操作的相关区别,因为在编程当中我们会经常使用这些操作 

3、关系运算符

          Verilog 语法中表示关系运算的有:大于(>); 小于(<); 大于等于(>=); 小于等于(<=)这里的用法和C语言等的使用方法一样,这里就不展开说了。

4、逻辑运算符

Verilog 语法中的逻辑运算符也是我们所熟知的 逻辑与(&&), 逻辑或(||), 逻辑非(!)三个基本运算符。在这里我们针对的是表达式的逻辑正确与否进行编写的,最终的结果只能是0或1,而在位运算符中的~、&、|是根据数据的每个位进行操作的,只有当操作的变量为1位时,两种运算符的结果相等。掌握这6个运算符的区别可以使我们编程的结果更加准确。

5、移位运算符

        移位运算符是二元运算符,左移符号为“<<”,右移符号为“>>”,将运算符左边的操作数左移或右移指定的位数,用 0 来补充空闲位。如果右边操作数的值为 x 或 z,则移位结果为未知数 x。在应用以为运算符的时候一定要注意它的这个特性,那就是空闲位用 0来填充,也就是说,一个二进制数不管原数值是多少,只要一直移位,最终全部会变为0。

        用最好理解的方法来说,将一个数据进行左右移操作就是将这个数据进行乘除操作,左移1位就是×2,右移1位就是÷2。和乘除运算实现的结果一样,唯一的区别就是和乘除运算符的优先级不一样。乘除运算符优先级高于移位运算符。

6、拼接运算符

         在Verilog HDL语言中有1个特殊的运算符:位拼接运算符 {} ,用这个运算符可以把两个或者是多个信号的某些位拼接起来进行运算操作。 使用拼接运算符我们不仅可以实现拼接的功能,还能实现赋值、循环移位等功能,这些都是我们在代码编写时常用的功能

实例:

拼接功能:Y={a[1],b[2],c[0]};这里假设Y是三位变量,a[1]=1,b[2]=0,c[0]=3;那么最后Y的结果就是103。

复制功能:Y={8'{1'b1}};这里假设Y是8位变量,就是将1'b1的值复制到Y的8个位置。

循环移位功能:Y={a[6:0],a[7]};这里假设Y是8位变量,最终实现的结果就是将a的值进行一个向左的循环移位功能,可以用于LED流水灯,数码管位选等操作。

7、条件运算符

        如果在条件语句中,只执行单个的赋值语句时,用条件表达式会更方便。条件运算符
为“ ? : ”,它是一个三元运算符,即有三个参与运算的量。
由条件运算符组成的条件表达式的一般形式为:表达式 1 ? 表达式 2 : 表达式 3
执行过程是:当表达式 1 为真,则表达式 2 作为条件表达式的值,否则以表达式 3 作
为条件表达式的值。例如:当 a = 6, b = 7,条件表达式(a > b) ? a : b 的结果为 7。

三、运算符优先级

        我们在进行多种类型运算符混合使用时,一定要特别注意运算符之间的优先级关系,不然就算编译不会报错,我们的结果也会出错。像使用乘除、加减和移位运算符时,我们要将移位运算符使用一个括号,不然就会先执行乘除,再执行加减,最后才执行移位,这样就会造成结果出错。

例如:a=b/2+c>>1,这就是一个错误的写法,我们想要计算的是b/2+c/2的值,但是因为移位运算符优先级没有加法的高,所以会先计算b/2+c,最后将这个结果进行移位计算,所得到的结果就会出错。正确的写法应该是a=b/2+(c>>1)

 

标签:优先级,FPGA,结果,assign,运算符,verilog,移位,表达式
From: https://blog.csdn.net/weixin_63553972/article/details/141422387

相关文章

  • FPGA开发——DS18B20读取温度并且在数码管上显示
    一、简介        在上一篇文章中我们对于DS18B20的相关理论进行了详细的解释,同时也对怎样使用DS18B20进行了一个简单的叙述。在这篇文章我们通过工程来实现DS18B20的温度读取并且实现在数码管伤显示。1、基本实现思路根据不同时刻的操作,我们可以使用一个状态机来实......
  • 【AD9361 数字基带】多片基带内FPGA补偿 I/Q Rotation
    I/Q旋转Rotation在许多多通道射频系统中,如AD-FMCOMMS5,甚至在AD-FMCOMMS2、AD-FMCOMMS3上,都需要测量或校正两个复数(I/Q)RF信号之间的相位差。从纯粹的数学描述来看,单个正弦波没有相位,一个相位只能在两个不同的正弦波之间发展。增加复杂性的是,我们没有一个单一的真实......
  • 位运算符-按位取反运算符补充详解
    位运算符在计算机中用于直接操作整数的二进制位的运算符。这些运算符通常用于低级编程和优化特定类型的计算任务。以下是几种常见的位运算符及其解释:按位与(&):对应位都是1时结果为1,否则为0。例如:0101&0111=0101按位或(|):只要对应位有一个是1,结果就为1。例如:0101|0111=......
  • AD7606芯片驱动-FPGA实现
        简介        AD7606是一款16位ADC芯片,可实现8通道并行采集,每通道最大速度可达1M,可实现多种模式数据采集。    介绍        本次FPGA使用的是8通道串行采样模式,设计中所用到的AD7606引脚说明如下:名称定义CONVST同步采集转换开始信号BUS......
  • 基于FPGA的图像拼接融合算法
    基于FPGA的图像拼接融合算法一、图像拼接1.0拼接算法设计预处理(图像矫正)图像矫正通过计算图像灰度值,赋值给目标像素,将目标像素与源数据比较,然后将图像边缘的值插入到目标点;对图像消除彩色分量(对提取特征无影响),只提取亮度分量;得到的灰度图像噪声更小,细节更明显。特征点检......
  • C++学习,运算符
    运算符是告诉编译器执行特定数学或逻辑函数的符号。C++语言内置运算符丰富,提供以下类型的运算符:算术运算符关系运算符逻辑运算符按位运算符赋值运算符其它运算符 算术运算符(ArithmeticOperators)下表显示了C++语言支持的所有算术运算符。假设变量A=10,变量B=20:操作......
  • 再见了Try-Catch,ECMA增加安全赋值运算符提案
    JavaScript的错误处理即将获得重大升级。新的ECMAScript安全赋值运算符提案(?=)旨在通过减少对传统try-catch代码块的需求,来简化您的代码。让我们一起来看看这个提案如何简化您的错误管理,并使您的JavaScript代码更干净、更高效。简单示例传统的try-catch代码块常常导致代......
  • Verilog刷题笔记55
    题目:Exams/ece2412014q5aYouaretodesignaone-inputone-outputserial2’scomplementerMoorestatemachine.Theinput(x)isaseriesofbits(oneperclockcycle)beginningwiththeleast-significantbitofthenumber,andtheoutput(Z)isthe2......
  • 数字IC/FPGA中有符号数的处理探究
    做秋招笔试题时不出意外地又发现了知识盲区,特此学习记录。1.前提说明        有符号数无非分为两种:正数和负数,其中正数的符号位是0,不会引起歧义,负数的符号为1,采用的是补码表示。    此处复习一下补码的知识:对正数而言原码反码补码一致,负数则有区别,要掌握将......
  • C++运算符优先级
    优先级操作符描述例子结合性1()[]->.::++--调节优先级的括号操作符数组下标访问操作符通过指向对象的指针访问成员的操作符通过对象本身访问成员的操作符作用域操作符后置自增操作符后置自减操作符(a+b)/4;array[4]=2;ptr->age=34;obj.age=34;Class::ag......