0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是移位运算符

汽车电子技术 来源: OpenFPGA 作者:碎碎思 2023-02-09 15:49 次阅读

数字硬件建模SystemVerilog-移位运算符

pYYBAGPkpMCAS1oxAATfUc7boq8063.png

经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。

pYYBAGPkpM6AcnB_AAIyY3UUO5A678.png

移位运算符

移位运算符将向量的位向右或向左移位指定的次数。SystemVerilog具有按位和算术移位运算符,如表5-18所示。

表5-18:RTL建模的移位运算符

pYYBAGPkpOmAXpIMAAFTF5iD0G0559.png

按位移位只是将向量的位向右或向左移动指定的次数,移出向量的位丢失。移入的新位是零填充的。例如,操作8’b11000101 << 2将产生值8’b00010100。按位移位将执行相同的操作,无论被移位的值是有符号的还是无符号的。

算术左移位对有符号和无符号表达式执行与按位右移位相同的操作。算术右移位对“无符号”和“有符号”表达式执行不同的运算。如果要移位的表达式是无符号的, 算术右移位的行为与按位右移相同,即用零填充输入位。如果表达式是有符号的,则算术右移将通过用符号位的值填充每个输入位来保持值的有符号性。

图5-11显示了这些移位操作如何将向量的位移动2位,

图5-11:按位和算术移位运算-将值向左或向右移动2位图5-11:按位和算术移位运算-将值向左或向右移动2位

poYBAGPkpPqACV2KAAJXozfr6lI128.png

可综合移位操作

移动固定的次数。固定次数的移位操作只需将总线的位重新布线,“输入位”接地。实现固定移位不需要逻辑门。示例5-11说明了一个简单的除二组合逻辑模型,其中通过将8位总线右移一位来进行除法。

示例5-11:使用移位运算符:通过右移一位除以二

poYBAGPkpQWAfl1OAAE0_c-L7ao119.png

图5-12显示了固定位数的右移是如何综合的。综合编译器在模块的输入和输出上放置了缓冲区,但没有使用任何额外的门来执行操作。

图5-12:示例5-11的综合结果:移位运算符,按1位右移

poYBAGPkpRGAB0akAAGUQuU_eV8512.png

固定次数的移位也可以使用连接操作来表示。下面两行代码在功能上是相同的。

pYYBAGPkpRyAeJbQAAB4tO7ApaY523.png

执行移位操作的两种类型都将综合为相同的布线硬件,一种类型没有优于另一种类型的优势。

移动次数可变。可变次数的移位操作代表是桶形移位器(barrel shifter)的功能,但具体实现将取决于特定目标库中可用的门级功能。一些目标设备可能有一个已经针对该设备进行了优化的预构建桶形移位器,其他设备可能需要综合以从较低级别的门构建桶形移位器。

桶形移位器的一个应用是用2的幂乘(向左移位)或除(向右移位)。例如,左移1位将值乘以2。左移2位将一个值乘以4。

示例5-12显示了可变左移操作的代码

示例5-12:使用移位运算符:通过向左移位乘以二的幂

poYBAGPkpSiAPaYAAAF-MlcY4x0479.png

本例中的$ciog2系统函数用于计算base2exp输入端口的宽度。此函数用于返回一个log2值的的上限(分数向上舍入到下一个整数)。该函数是计算一个值需要多少位的便捷方法。

图5-13说明了该模型可能如何综合。该示意图是“在将移位功能映射并优化”到特定设备之前的“中间综合结果”。通用的“左移位逻辑”组件表示未映射的移位操作。

图5-13:综合结果“例如5-12:移位运算符,可变左移位”

poYBAGPkpTeASpiTAAD_aROPi7g006.png

综合结果中的通用左移分量对其两个输入具有相同的位数。base2exp输入未使用的高位与地相连。当综合将通用左移组件映射到特定的目标实现时,这些未使用的位可能会被删除。

移位运算符可用于乘以或除以除2的幂以外的值,以下示例将向量移动7次。

pYYBAGPkpUCAAIKxAAAsPz72_Eo410.png

可以在硬件中使用cading shift实现非2次方的移位,例如,操作可以通过链接4位左移位器、2位左移位器和1位左移位器来完成7次左移位。

让综合器完成它的工作!综合使工程师能够在抽象层次上进行设计,专注于功能,而不必陷入实现细节的泥潭,也不必过度关注特定ASICFPGA的功能。综合编译器将抽象功能模型转换为目标ASIC或FPGA的有效实现。虽然可以在更详细的层面上仿真barrel shift行为,但这样做通常没有好处。现代综合编译器使用移位运算符识别抽象RTL模型中的barrel shift行为,并将在目标设备中生成此功能的最佳实现。对于不同的目标设备,这种实现可能会有所不同,具体取决于该设备中可用的标准单元、LUT或门阵列。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Verilog
    +关注

    关注

    28

    文章

    1343

    浏览量

    109971
  • System
    +关注

    关注

    0

    文章

    165

    浏览量

    36877
  • 运算符
    +关注

    关注

    0

    文章

    172

    浏览量

    11062
收藏 人收藏

    评论

    相关推荐

    #硬声创作季 #单片机应用 27 移位运算符

    单片机
    发布于 :2022年12月08日 08:55:26

    32 Java语言基础移位运算符 #硬声创作季

    JAVAPython编程语言
    充八万
    发布于 :2023年07月26日 16:05:11

    18_移位运算符 [001100000064] - 第1节 #硬声创作季

    电路模块编程函数代码DAC驱动
    充八万
    发布于 :2023年08月18日 20:08:57

    18_移位运算符 [001100000064] - 第3节 #硬声创作季

    电路模块编程函数代码DAC驱动
    充八万
    发布于 :2023年08月18日 20:10:40

    炼狱传奇-移位和位拼运算符之战

    1. 移位运算符移位运算符是双目运算符,将运算符左边的操作数左移或右移
    发表于 04-30 09:43

    VHDL中移位运算符的实现之SLL使用

    本帖最后由 guyubinghu 于 2016-8-14 19:34 编辑 大家好,想请教大家一个问题,大家在用VHDL时使用过SLL这个操作运算没,要是用过的话是怎么使用的呢?
    发表于 08-14 13:42

    【FPGA】VHDL 语言的运算符有哪些?计算的优先级是怎样的?

    在 VHDL 语言中,常用的运算符有逻辑运算(Logic)、关系运算(Relational)、算术运算(Arithmetic)和移位
    发表于 09-12 09:51

    【梦翼师兄今日分享】 常见的关系运算符(移位运算符)

    立即学习>>梦翼师兄FPGA培训(视频加板卡),手把手带你入门FPGA写在前面的话移位运算符是双目运算符,将运算符左边的操作数左移或右移指定的位数,用0来补充空闲位。如果右边操作数的
    发表于 12-17 10:45

    二进制每一位数可取

    二进制每一位数可取,方法一:通过移位运算符>>、
    发表于 07-14 08:16

    FPGA入门实验教程之进行LED跑马灯实验的详细资料说明

    让实验板上的8个LED 实现跑马灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的Verilog HDL 的编程方法以及移位运算符的使用
    发表于 05-24 14:50 12次下载
    FPGA入门实验教程之进行LED跑马灯实验的详细资料说明

    数字设计FPGA应用:移位运算符

    本课程以目前流行的Xilinx 7系列FPGA的开发为主线,全面讲解FPGA的原理及电路设计、Verilog HDL语言及VIVADO的应用,并循序渐进地从组合逻辑、时序逻辑的开发开始,深入到FPGA的基础应用、综合应用和进阶应用。
    的头像 发表于 12-03 07:03 3230次阅读
    数字设计FPGA应用:<b class='flag-5'>移位</b><b class='flag-5'>运算符</b>

    FPGA入门系列教程之进行LED流水灯的实验资料免费下载

    让实验板上的 8 个 LED 实现流水灯的功能。通过这个实验,进一步掌握采用计数与判断的方式来实现分频的 Verilog HDL 的编程方法以及移位运算符的使用。
    发表于 06-10 17:07 7次下载
    FPGA入门系列教程之进行LED流水灯的实验资料免费下载

    移位运算符的应用实例讲解

    移位运算符在程序设计中,是位操作运算符的一种。移位运算符可以在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种:(带符号
    的头像 发表于 11-19 07:04 3485次阅读
    <b class='flag-5'>移位</b><b class='flag-5'>运算符</b>的应用实例讲解

    C/C++中移位运算符的工作原理

      可以在计算机内部存储和操作的最小数据量是二进制数字或位,它可用于存储两个不同的值:0 或 1。这些值在任何特定情况下实际体现的内容时间取决于我们。例如,我们可能决定一位代表开关的状态(例如,向下或向上)或灯(例如,关闭或打开)或逻辑值(例如,假或真)。或者,我们可能决定使用我们的位来表示数值 0(零)或 1(一)。
    发表于 07-28 08:03 1286次阅读