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

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

3天内不再提示

关于RTL表达式和运算符

OpenFPGA 来源:OpenFPGA 作者:OpenFPGA 2022-09-01 09:13 次阅读

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

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

3edd705e-298e-11ed-ba43-dac502259ad0.png

移位运算符

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

表5-18:RTL建模的移位运算符 3f0d31ae-298e-11ed-ba43-dac502259ad0.png

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

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

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

图5-11:按位和算术移位运算-将值向左或向右移动2位 图5-11:按位和算术移位运算-将值向左或向右移动2位 3f335f78-298e-11ed-ba43-dac502259ad0.png

可综合移位操作

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

示例5-11:使用移位运算符:通过右移一位除以二 3f65daa2-298e-11ed-ba43-dac502259ad0.png

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

图5-12:示例5-11的综合结果:移位运算符,按1位右移 3f8d1964-298e-11ed-ba43-dac502259ad0.png

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

3fc58d3a-298e-11ed-ba43-dac502259ad0.png

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

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

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

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

示例5-12:使用移位运算符:通过向左移位乘以二的幂 3fe42e34-298e-11ed-ba43-dac502259ad0.png

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

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

图5-13:综合结果“例如5-12:移位运算符,可变左移位” 400df3ae-298e-11ed-ba43-dac502259ad0.png

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

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

403a7866-298e-11ed-ba43-dac502259ad0.png

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

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

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

    关注

    11

    文章

    2921

    浏览量

    64746
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59060
  • 移位器
    +关注

    关注

    0

    文章

    9

    浏览量

    8406
  • 运算符
    +关注

    关注

    0

    文章

    163

    浏览量

    10945

原文标题:SystemVerilog-移位运算符

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    JAVA语言的运算符表达式

    JAVA语言的运算符表达式3.5 运算符表达式数据的类型除了限定数据的存储方式、取值范围之外,还定义了对该数据类型可进行的操作即运算。表
    发表于 12-06 00:28

    数据类型、运算符表达式

    数据类型、运算符表达式2.1   程序设计概述2.2  C语言的数据类型 2.3  常量和变量 2.4 
    发表于 03-10 15:05

    【跟我学单片机c语言】如何更好地使用C51运算符表达式

    `【跟我学单片机c语言】如何更好地使用C51运算符表达式之前说了常量和变量,先来补充一个用以重新定义数据类型的的语句吧。这个语句就是 typedef,这是个很好用的语句,但我却不常用它,通常我定义
    发表于 12-05 10:22

    C语言单片机第七课 运算符表达式(关系运算符)

    第七课 运算符表达式(关系运算符)关系运算符,同样我们也并不陌生。单片机C语言中有六种关系运算符,这些东西同样是在我们小时候学算术时就已经
    发表于 10-21 09:38

    关于C语言的运算符表达式--笔记1

    关于C语言的运算符表达式学好C语言的基础运算,还是很有必要,无论在C语言,还是后面单片机,都会用到基础运算。如果不能很好运用,会给我们编程
    发表于 07-19 00:48

    C语言运算符优先级(超详细)

    -- 2-负号运算符-表达式右到左单目运算符~按位取反运算符~表达式++自增运算符++变量名/变
    发表于 04-27 16:47

    单片机C语言教程-运算符表达式

    单片机C语言教程-运算符表达式   单片机C语言教程-运算符表达式  运算符的种类、优先级和结合性  c语言中运
    发表于 03-27 17:13 2121次阅读

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 07-27 09:11 1199次阅读

    SystemVerilog-运算符/表达式规则

    RTL建模中广泛使用的运算符是条件运算符,也称为三元运算符,该运算符用于在两个表达式之间进行选择
    的头像 发表于 08-03 09:03 2305次阅读

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 10-11 10:15 1183次阅读

    RTL表达式运算符

    经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式运算符
    的头像 发表于 11-03 09:14 907次阅读

    运算符/表达式规则

    运算符对操作数执行操作。大多数运算符都有两个操作数。例如,在运算a+b中,+(加法)运算的操作数是a和b。每个操作数都被称为表达式
    的头像 发表于 02-09 15:37 601次阅读
    <b class='flag-5'>运算符</b>/<b class='flag-5'>表达式</b>规则

    逻辑运算符表达式

    在C语言中,我们通常会进行真值与假值的判断,这时我们就需要用到逻辑运算符与逻辑表达式。如果表达式的值不为0,则通通返回为真值。只有当表达式的值为0时,才会返回假值。
    的头像 发表于 02-21 15:16 1436次阅读
    逻辑<b class='flag-5'>运算符</b>与<b class='flag-5'>表达式</b>

    位逻辑运算符表达式

    位逻辑运算符与位逻辑表达式可以实现位的编辑,比如位的清零、设置、取反和取补等操作。使用位逻辑运算符与位逻辑表达式可以在不使用汇编的情况下实现部分汇编的功能
    的头像 发表于 02-21 15:22 937次阅读
    位逻辑<b class='flag-5'>运算符</b>与<b class='flag-5'>表达式</b>

    C语言基本的算术运算符表达式

    注意:自增和自减运算符只能用于变量,而不能用于常量或表达式 **C语言算术表达式运算符的优先级与结合性 ** 在表达式求值时,
    的头像 发表于 03-09 10:44 1274次阅读