集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 2425|回复: 7

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

[复制链接]
雾盈 发表于 2016-8-29 09:42:45 | 显示全部楼层 |阅读模式
本帖最后由 雾盈 于 2016-8-29 09:47 编辑

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

                       
雾盈        2016-8-28


        雾盈FPGA笔记汇总目录


一、写在前面

        之前写过关于数码管十进制显示的一篇文章,但那个转十进制是用了除法取余的数学公式,像下面这样:

       

但这样的写法在FPGA 里并不可取,因为FPGA 里的硬件资源很宝贵,为了综合出除法器需要消耗大量的加法器,得不偿失,所以我抛弃了那样的写法,用了老师介绍的一个小算法来实现二进制转BCD的


二、 框图


       


三、什么是BCD 码?


        要转BCD码,我们首先应该弄清楚什么是BCD码。
百度百科是这样解释的:

BCD码(Binary-Coded Decimal)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。


BCD码可分为有权码和无权码两类:有权BCD码有8421码、2421码、5421码,其中8421码是最常用的;无权BCD码有余3码,余3循环码等。


8421
        8421 BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8、4、2、1,故称为有权BCD码。和四位自然二进制码不同的是,它只选用了四位二进制码中前10组代码,即用                                                      0000~1001分别代表它所对应的十进制数,余下的六组代码不用。


        简单点说:
BCD码就是使用4位来表达一个十进制数字
        例如,十进制数20’D 999999 = 20’B 1111_0100_0010_0011_1111,原本只有20位,现在我们用BCD码去表示这个十进制数,
就是 24’H 9 9 9 9 9 9 = 20’B1001_1001_1001_1001_1001_1001,
每个十进制9 用十六进制的四位去表示,就变成了24位数据。
示意图如下:

       


四、算法原理
       
        这个算法应用了逐步移位的方式:
        第一步:添加一个20位的移位寄存器用作移位寄存
        因为有6个数码管显示。       

        第二步:二进数逐步左移
将需要转换的十进制数以二进制形式逐步左移。

        第三步:大四加三
每左移一位,就要让BCD位去和4比较,如果大于4就加上3,如果不大于就继续左移,然后继续和4比较。

        第四步:进数全部移完,得到结果。

举个例子:165 (取自教材中的例子)
示意图如下:
       
       


        这样整个算法讲完,我们来看程序。


五、代码解释

        第一段:
这里用状态机写的,闲置状态将待转换十进制存入data_r以备转换之需。
然后跳入下一状态,移位SHIFT

       
       
        第二段:
 
加入了一个移位计数器,当移位未满20次时,每移位一次就跳入判断状态ADD,判断每个BCD位是否大于4,大于则加3,否则跳回移位SHIFT状态,继续左移。当移位满20次时,将结果输出。
       
       

       

讲解完毕,附上源代码:


       





本帖子中包含更多资源

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

x
芙蓉王 发表于 2016-8-29 10:46:43 | 显示全部楼层
                     感谢分享
陈飞龙 发表于 2016-8-30 09:06:49 | 显示全部楼层
不错,格式越来越规范
Blondie 发表于 2016-8-30 09:22:03 | 显示全部楼层
                         挺好的
Esmiamor 发表于 2016-8-30 09:42:49 | 显示全部楼层
                    加油。
Adamancy 发表于 2016-8-30 10:14:45 | 显示全部楼层
             不错。
zhiweiqiang33 发表于 2016-8-31 08:54:59 | 显示全部楼层

支持 同学, 就业班学习笔记整理的很详细,感谢分享。
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-16 18:40 , Processed in 0.078077 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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