二进制转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 = 4'd0;
    Tens         = 4'd0;
    Ones         = 4'd0;
    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];
            
    end
end
endmodule

 

posted on 2016-08-31 22:48  Crazy_body_01  阅读(1969)  评论(0编辑  收藏  举报

导航