首页 > 代码库 > 二进制转BCD

二进制转BCD

什么是BCD码?

BCD码称为二进码十进数或BCD码(Binary-Coded Decimal‎)亦称二进码十进数或二-十进制代码。用4位二进制数来表示1位十进制数中的0~9这10个数码。

BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。这种编码技巧,最常用于会计系统的设计里,因为 会计制度经常需要对很长的数字串作准确的计算。相对于一般的浮点式记数法,采用BCD码,既可保存数值的精确度,又可免却使电脑作浮点运算时所耗费的时 间。此外,对于其他需要高精确度的计算,BCD编码亦很常用。

Bin转BCD比较常见的方法是:除法取余的方法来实现

技术分享

这种方法虽然能够实现功能,达到bin2bcd的目的,但是占用的逻辑资源确实相当的多,所以为了对其进行优化,就要考虑到运用移位的方法来实现这个目的。

Bin2bcd移位算法原理:

此处要介绍的是二进制转BCD码的硬件实现,采用左移加3的算法,具体描述如下:

(此处以8-bit 二进制码为例)

1、左移要转换的二进制码1位

2、左移之后,BCD码分别置于百位、十位、个位

3、如果移位后所在的BCD码列大于或等于5,则对该值加3

4、继续左移的过程直至全部移位完成

举例:将十六进制码0xFF转换成BCD码

技术分享

实现代码:

module  bin2bcd(                input [7:0] binary,//最多能表示255                output reg [3:0] Hundreds,                output reg [3:0] Tens,                output reg [3:0] Ones                );integer i;always @(binary)begin    Hundreds = 4d0;    Tens         = 4d0;    Ones         = 4d0;    for( i=7; i>=0 ;i=i-1)    begin        if(Hundreds >=5)            Hundreds = Hundreds+3;        if(Tens >=5)            Tens = Tens+3;        if(Ones >=5)            Ones = Ones+3;                Hundreds = Hundreds <<1;        Hundreds [0] = Tens[3];        Tens = Tens <<1;        Tens [0] = Ones[3];        Ones = Ones <<1;        Ones [0] = binary[i];                endendendmodule

 

二进制转BCD