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

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

3天内不再提示

用HDL代码描述加法运算要用操作符“+” 看似很简单实则不然

FPGA技术驿站 来源:Lauren的FPGA 作者:Lauren的FPGA 2020-09-24 14:31 次阅读

采用HDL代码描述加法运算只需要用操作符“+”即可,这看似很简单,这里我们以两个4-bit数相加为例,对输入/输出数据均寄存,从而形成如下图所示电路。

此电路对应的HDL代码如下图所示。这里采用了SystemVerilog语言。有两点值得注意:一是两个N位数相加,无论是有符号数还是无符号数,其结果都有可能是N+1位,故输出比输入位宽多1位,这样才能保证不会发生溢出(Overflow)。二是默认情况下,代码中的logic表示的都是无符号数,但是对于下面这段代码,无符号数和有符号数均适用,这是因为有符号数是以二进制补码表示的。

为了进一步说明,我们看如下例子。数据a二进制形式位1001,既可以看作无符号数9(十进制),也可以看作有符号数-7(十进制);数据b二进制形式为1010,既可以看作无符号数10(十进制),也可以看作有符号数-6(十进制)。最终结果的二进制形式为10011,既可以看作无符号数19(十进制),也可以看作有符号数-13(十进制)。

这里两个4-bit数相加和设置为5-bit,如果和设置为6-bit,有符号数和无符号数的结果是否一致呢?对于无符号数,sum[5]补0,如图中红色方框所示。

对于有符号数,sum[5]则是sum[4]的复制版本,实质上是符号位扩展。

本质上,在赋值时,如果把一个N位数据a赋值给一个位宽M的数据b(这里M>N),且两个数据均为同一类型(都是有符号或无符号),此时是将N位数据做符号位扩展为M位再赋值给b。因此,对于两个N位数据相加,如果输出位宽选择大于N+1,那么上述代码只适合于无符号数,对于有符号数需要在logic后加关键字signed,如下图所示。

如果两个位宽不等的数相加,同样需要指明是有符号数还是无符号数。例如,一个4-bit数和一个3-bit数相加,如下图所示。如果a二进制为1001,对应无符号数9(十进制),b二进制形式为101,对应无符号数5(十进制),两个无符号数相加,先将b高位补0,最终和为01110;如果将a和b看作有符号数,则要将b符号位扩展为1101,最终和为10110。符号位扩展是工具完成的,无需人工干预。

总体而言,在描述加法运算时,如果两个数据均为N位,那么和要设置为N+1位,此时无符号数的描述方式也适合于有符号数。如果两个数一个是N位,一个是M位,且M>N,那么和要设置为M+1位,此时要明确指出是有符号数还是无符号数。

原文标题:加法运算很简单?

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

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

    关注

    10320

    文章

    10718

    浏览量

    528002
  • HDL
    HDL
    +关注

    关注

    8

    文章

    327

    浏览量

    47336
  • 代码
    +关注

    关注

    30

    文章

    4742

    浏览量

    68330

原文标题:加法运算很简单?

文章出处:【微信号:Lauren_FPGA,微信公众号:FPGA技术驿站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    逻辑异或运算符在Python中的用法

    在Python编程语言中,逻辑异或运算符并不直接作为一个内置的操作符存在,因为Python更侧重于高级编程和可读性,并没有直接提供异或运算符的简写形式用于逻辑运算(真/假值的异或)。然
    的头像 发表于 11-19 09:46 70次阅读

    Verilog语法中运算符的用法

    verilog语法中使用以下两个运算符可以简化我们的位选择代码
    的头像 发表于 10-25 15:17 286次阅读
    Verilog语法中<b class='flag-5'>运算符</b>的用法

    技术干货驿站 ▏解锁C语言高效编程秘诀:深入解析运算符与优先级

    在C语言的学习过程中,运算符的使用是不可忽视的重要环节。本文将继续深入探讨C语言中的运算符,重点介绍位运算符、赋值运算符及其优先级。掌握这些运算符
    的头像 发表于 10-13 08:09 191次阅读
    技术干货驿站 ▏解锁C语言高效编程秘诀:深入解析<b class='flag-5'>运算符</b>与优先级

    技术干货驿站 ▏深入理解C语言:编程高手必备,全方位解析运算符的核心技能!

    在C语言的编程领域中,运算符是实现数据处理与逻辑操作的关键工具。无论是在处理简单的数值计算,还是在构建复杂的逻辑结构时,运算符的使用贯穿始终。作为编程语言的基础组成部分之一,
    的头像 发表于 09-18 15:56 307次阅读
    技术干货驿站 ▏深入理解C语言:编程高手必备,全方位解析<b class='flag-5'>运算符</b>的核心技能!

    c语言从右到左的运算符有哪些

    用在变量之后时,它们会先返回变量的原始值,然后再进行递增或递减。 三元条件运算符 ( ?: ):这个运算符的求值顺序是从右到左。首先计算第三个表达式,然后根据第一个表达式的结果选择第二个或第三个表达式。 赋值运算符 ( = ):
    的头像 发表于 08-20 11:39 690次阅读

    FPGA学习笔记---基本语法

    3、信号类型:wire, reg, tri等 4、参数定义:parameter 5、运算操作符:各种逻辑操作符、移位操作符、算数操作符
    发表于 06-23 14:58

    二维PDMA可以使用描述符链吗?

    我正在尝试使用二维描述符连锁。 编写了一些二维描述符链的代码。 但我有一些疑问,比如 1.二维 PDMA 可以使用描述符链吗? 2.如果 1 是,请附上一些
    发表于 05-31 08:16

    Golang为何舍弃三元运算符

    golang中不存在?:运算符的原因是因为语言设计者已经预见到三元运算符经常被用来构建一些极其复杂的表达式。虽然使用if进行替代会让代码显得更长,但这毫无疑问可读性更强。
    的头像 发表于 04-03 15:13 664次阅读

    鸿蒙TypeScript入门学习第5天:【TypeScript 运算符

    运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算
    的头像 发表于 04-01 16:18 436次阅读
    鸿蒙TypeScript入门学习第5天:【TypeScript <b class='flag-5'>运算符</b>】

    加法运算电路和减法运算电路的区别

    加法运算的电路如下图所示,输出电压为若干个输入电压的比例和
    的头像 发表于 02-19 09:52 6683次阅读
    <b class='flag-5'>加法</b><b class='flag-5'>运算</b>电路和减法<b class='flag-5'>运算</b>电路的区别

    什么是反相加法运算电路?反相加法运算电路与减法运算电路

    在电子技术的海洋中,有一种电路如同数学中的加法器一样,能够将不同的信号进行相加处理。这就是被广泛应用于信号处理领域的反相加法运算电路。
    的头像 发表于 02-17 15:34 4212次阅读
    什么是反相<b class='flag-5'>加法</b><b class='flag-5'>运算</b>电路?反相<b class='flag-5'>加法</b><b class='flag-5'>运算</b>电路与减法<b class='flag-5'>运算</b>电路

    反相加法运算电路原理介绍

    反相加法运算电路利用运算放大器(通常简称为Op-Amp)的特性来实现多个输入信号的加法运算。每个输入信号都通过一个电阻连接到
    的头像 发表于 01-31 15:53 3275次阅读
    反相<b class='flag-5'>加法</b><b class='flag-5'>运算</b>电路原理介绍

    “+”操作符的使用技巧

    这篇写个平时易被忽略的小知识点,一元 + 操作符的使用技巧。
    的头像 发表于 12-28 13:27 506次阅读

    逻辑运算符两侧运算对象的数据类型是

    逻辑运算符是编程中常用的运算符之一,用于判断两个表达式之间的关系,并返回布尔值结果。在逻辑运算中,两侧运算对象的数据类型可以是任意类型。 首先,我们需要了解逻辑
    的头像 发表于 11-30 14:15 1640次阅读

    python中运算符的优先级大小

    Python中运算符的优先级决定了表达式中各个运算符的计算顺序。了解运算符的优先级对于正确理解和编写复杂的表达式非常重要。本文将详细介绍Python中运算符的优先级,并给出一些示例来帮
    的头像 发表于 11-29 16:21 3215次阅读