雾盈 发表于 2016-8-28 13:11:33

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

本帖最后由 雾盈 于 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 = 01002变成了4   0010 << 2 = 10002变成了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的每四位赋给一个寄存器,六个数码管就有六个寄存器来存放。然后进行下一步。

               

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

       

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

       


芙蓉王 发表于 2016-8-29 10:49:25

                     :):):):)

雷磊 发表于 2021-5-9 15:48:05

六位四则运算计算器(6)小算法实现BCD转二进制
页: [1]
查看完整版本: 雾盈FPGA笔记之(三十)六位四则运算计算器(6)小算法实现BCD转二进制