雾盈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转二进制模块就完成了。
下面附上源代码:
:):):):) 六位四则运算计算器(6)小算法实现BCD转二进制
页:
[1]