不使用加减号,使用verilog实现多位加法器功能

本文介绍如何在不使用加减号的情况下,利用Verilog语言实现多位加法器的功能。核心思想是通过异或运算实现加法操作,并通过与运算结合左移位处理进位。文章提供了一个简洁高效的实现方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何在不使用加减号的情况下,用verilog实现多位加法器的功能呢?

  • 其实这一道FPGA面试的的题目,原理很简单,希望能对即将毕业想从事FPGA的小伙伴能起到一定的帮助(大马猴表示想和很多小伙伴交流共同成长)。

  • 拿到这道题的时候首先想到不用加减号,那沾边的可能是“异或”,或者是“移位”,因为在编写verilog时候若出现乘法(除法)的时候,是通过移位实现的。举个例子:a x10(表示的是a与10进行相乘),若不使用乘号,则可以这样表示:ax10=ax(8+2)=ax8+ax2=a<<3+a<<1,8表示2的三次方,左移三位,2表示2的一次方,左移一位,然后进行相加,但是记住:在verilog中移位的优先级比较低,通常要在移位的位置打上小括号进行优先计算(除法同理)。

  • 回归正题,思路走到这个位置,已经完成了一大半。先贴答案,其实就是两句话,很容易,先上答案:
    1.a = a ^ b
    2.b = (a & b) << 1
    3.重复1、2步骤直到进位值为0

  • 完事,相信很多小伙伴已经明白了(没错,一开始我就是那很少的不明白的小伙伴。)没事,咱来一步一步分析举例子呗,反正今天不加班 :)

  • 首先相异或,无非就是四种结果,0^0 = 0, 0^1=1, 1^0=1,这三种是不产生进位的, 1^1=0 是产生进位的,这个时候在没有进位(也可以说不考虑进位的时候),a+b就可以用a^b来进行计算,结果为d。如 d=0010^0011=0001。

  • 接着就要考虑进位了,这时候也是四种结果,0&0=0,0&1=0,1&0=0,这三种是没有进位的情况,1&1=1,所以只有在a和b其中的某位同时为1有进位的时候,结果才会为1,这个时候产生了进位,0010 & 0011=0010,这个进位是要往高位进的,但是仅用&的话,进位就留在了原位上,这个时候用<<1,即左移一位,将进位移到高一位上变成e=0100

  • 重复1、2步骤直到进位值为0就可以完成功能。

  • 希望能帮到小伙伴,还请各位老铁及时交流,共同进步,感谢你的阅读。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

pose_Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值