集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 1994|回复: 2

雾盈FPGA笔记之(三十)六位四则运算计算器(6)小算法实现BCD转二进制

[复制链接]
雾盈 发表于 2016-8-28 13:11:33 | 显示全部楼层 |阅读模式
本帖最后由 雾盈 于 2016-8-28 13:37 编辑

六位四则运算计算器(6)小算法实现BCD转二进制

       
雾盈        2016-8-27


雾盈FPGA笔记汇总目录

一、写在前面

        这一篇文章讲BCD码转二进制,这个模块是为了将数码管移位后的操作数(BCD码)转为二进制后送往计算模块(alu1)去参与加减乘除四则运算。
这里,我们用了小算法去实现BCD转二进制。

二、框图

       

三、小算法介绍

        这里有一个BCD码 123456 ,想把它转为十进制显示,我们先前通常的想法就是,让其每个位得数字乘上相对应位的10方权重。于是,这个123456 BCD码转成十进制的方法就是                                  1*100000+2*10000+3*1000+4*100+5*10+6
        这样确实可以将BCD码转为二进制,但是却用了很多个乘法,这在FPGA设计里是十分不可取的,因为这样一个小公式消耗了太多的加法器来综合出一乘法器。
        所以,我们用下面的这个小算法去实现BCD 码转二进制。
 
        我们知道一个二进制数向左移一位,就相当于乘上二

        例如: 0010<<1 = 0100  2变成了4   0010 << 2 = 1000  2变成了8
所以,我们让a扩大十倍就等于a<<3 + a<< 1
扩大一百倍就等于a << 6 + a << 5)  + a << 2
        以此类推,我们可以很容易的扩大一千倍,一万倍,十万倍。
        最后,我们达到的效果和1*100000+2*10000+3*1000+4*100+5*10+6
        这个公式是一样的,但我们比那个公式省下了更多的硬件资源。这是一个非常好的方法。

下面,我们来 看代码:
       
               

这一步,是将24位BCD的每四位赋给一个寄存器,六个数码管就有六个寄存器来存放。然后进行下一步。
&#8195;
               

这一步就是我们上面讲的算法了,将个,十,百,千,万,十万存放起来,最后相加用。

       

至此,我们这个BCD转二进制模块就完成了。
下面附上源代码:

       


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
芙蓉王 发表于 2016-8-29 10:49:25 | 显示全部楼层
                       
雷磊 发表于 2021-5-9 15:48:05 | 显示全部楼层
六位四则运算计算器(6)小算法实现BCD转二进制
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-16 19:01 , Processed in 0.060505 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表