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】欢迎添加关注!文章转载请注明出处。

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

    关注

    10493

    文章

    10764

    浏览量

    557144
  • HDL
    HDL
    +关注

    关注

    8

    文章

    332

    浏览量

    49040
  • 代码
    +关注

    关注

    30

    文章

    4975

    浏览量

    74349

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    74F583 4位BCD加法器:高速运算的理想之选

    74F583 4位BCD加法器:高速运算的理想之选 在电子设计领域,加法器是实现数字运算的基础组件。今天要给大家介绍的是Fairchild Semiconductor推出的74F583
    的头像 发表于 04-10 16:40 98次阅读

    十进制计算机算术运算器“加法器”专利申请解析

    讲述了十进制计算机必须的十进制加法器结构及原理,以及对加法器改进的方法和方向。该方法的创新之处在于,它将传统上需通过时间步骤或复杂多值逻辑门处理的“串行”逻辑值,转化为在空间上“并行”展开的物理线路
    的头像 发表于 03-25 09:41 788次阅读
    十进制计算机算术<b class='flag-5'>运算</b>器“<b class='flag-5'>加法</b>器”专利申请解析

    如何在TensorFlow Lite Micro中添加自定义操作符(1)

    来支持各种神经网络层的计算。也就是说,我们不仅可以使用内嵌的算子运算,还可以自己注册一个新的算子,更加的灵活。本期就将用两期的文章以 `reshape.cpp` 为例,详细说明如何在 TensorFlow Lite Micro 中添加一个新的操作符
    的头像 发表于 12-26 10:34 5716次阅读

    布尔表达式和零值比较处理

    ==0,x!=0(或者x>0)。 C代码中每次关系运算符的调用,编译器都会发出一个比较指令。 如果操作符是上面提到的,编译器便会优化掉比较指令。例如: int aFunction
    发表于 12-12 06:16

    飞凌嵌入式ElfBoard-文件I/O的了解探究之复制文件描述符

    open返回得到的文件描述符fd可以进行复制,复制成功之后可以得到一个新的文件 描述符,使用新的文件描述符和旧的文件描述符都可以对文件进行IO操作
    发表于 11-26 15:36

    C语言位操作符

    C 语言位操作符包括按位与( )、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。 按位与( ) 只有当两个二进制位
    发表于 11-21 07:52

    飞凌嵌入式ElfBoard-文件I/O的了解探究之文件描述符和FILE指针转换

    *fdopen(int fd, const char *mode);3)参数fd:要操作的文件描述符。mode:表示打开文件操作(1-6必选其一,7和8可以省略)⚫\"r\":以
    发表于 11-20 09:24

    C语言宏拼接运算符典型使用

    在C语言中,##运算符(称为[size=16.002px]标记拼接运算符)用于宏定义中将两个标记(token)拼接成一个新的标记。它在预处理阶段处理,常用于动态生成变量名、函数名或类型名,以提高代码
    发表于 11-20 08:27

    看似简单的自动泊车需要哪些技术支撑?

    [首发于智驾最前沿微信公众号]要实现自动泊车,背后需要哪些技术作为支撑?自动泊车作为现在很多车主应用非常多的一项功能,看似只是简单的入库操作,但想要完美入库,其实需要非常多的技术支持。   感知
    的头像 发表于 10-30 09:09 821次阅读
    <b class='flag-5'>看似</b><b class='flag-5'>简单</b>的自动泊车需要哪些技术支撑?

    复杂的软件算法硬件IP核的实现

    中的运算符有对应关系。 结构域负责将功能域中的各个基本功能单元按特定的顺序和方式连接起来,通常被实现为一个由有限状态机控制的数据通路,该结构与C 语言的流程控制语句相对应。 以一个简单加法组合逻辑为例
    发表于 10-30 07:02

    使用Simulink自动生成浮点运算HDL代码(Part 1)

    引言 想要实现浮点运算功能,如果自己写Verilog代码,需要花费较多的时间和精力。好在Simulink HDL Coder工具箱提供了自动代码生成技术。下图展示了
    发表于 10-22 06:48

    如何使用 GDMA 描述符模式吗?

    如何使用 GDMA 描述符模式吗?
    发表于 08-29 06:00

    如何确定 M483 HSUSB 描述符

    我们使用M843SIDAE对于USB 2.0设备,时钟和寄存器等的初始化是正确的,但是在与主机通信时,发生了错误: “ USB 1-6:设备描述符读取/64,错误 -71 USB 1-6:设备
    发表于 08-28 06:46

    为什么光刻要用黄光?

    进入过无尘间光刻区的朋友,应该都知道光刻区里的都是黄灯,这个看似很简单的问题的背后却蕴含了很多鲜为人知的道理,那为什么实验室光刻要用黄光呢? 光刻是微流控芯片制造中的重要工艺之一。
    的头像 发表于 06-16 14:36 1444次阅读

    cx3提示未知的描述符是怎么回事?

    我通过配置生成一个新的工程 运行起来总是提示 未知的描述符
    发表于 06-04 07:08