二进制转BCD

AI summary
文档讨论了二进制转BCD(十进制编码)的过程,包括二进制和BCD码的定义、实现方式(如对10求余法和大4加3算法),以及具体的步骤和示例。最后提供了设计架构和测试结果的概述。
Last edited time
Sep 24, 2024 02:47 PM
Last edited by
Tags
BinaryToBCD
BCDEncoding
ConversionMethods

一:二进制

二进制有0/1这两种状态,可以表示0/1这两个状态的电子器件有很多。
比如LED的亮灭(0:亮 1:灭),独立按键按下和抬起(0:按下 1:抬起)…
二极管导通与截止(0/1)。
由于二进制运算比较简单,使得计算机运算结构会大大简化;在电子器件中,所有的数据都是由二进制来进行表示的。
表示:4’b0111---->4’o7----->4’d7---->4’h7。

二:BCD码

BCD(Bin-Code-Decimal)码:也可以称为二进制码十进制数/二-十进制代码。
使用4位二进制数表示1个十进制数(0~9)这10个数码;BCD码也属于一种二进制的数码编码形式,用二进制编码的十进制代码。BCD码这样的编码方式利用4个位元来存储1个二进制的数码,使用BCD码就可以使得二进制和十进制之间的转换得以快捷的进行。
表示:8’b1111_1111----->8’d255----->8’hff
8’b1111_1111=8’d255---->12’b0010_0101_0101; //二进制和BCD表示
10’d999----->12’b1001_1001_1001

三:实现方式

  1. 位权实现(对10求余法)
    1. 8’b1111_1111=8’d255
      255=2*100+5*10+5*1 //加权
      高位(百位):255/100%10=2
      中间位(十位):255/10%10=5
      低位(个位):255/1%10=5
      该方式实现BCD转码比较简单,但是会产生较多的逻辑资源(除法器…),在逻辑资源足够允许情况下,可以采用对10求余。
  1. 大4加3算法
    1. 0 1 2 3 4 5 6 7 8 9 10 11 12  13 14 15 16…
      0 1 2 3 4 5 6 7 8 9 a  b  c  d  e  f 10
      >4+3也可以写成>=5+3,等式左右两边都乘以2,也可以写成>=10+6。
      举例:计算5+8
      (1):将5和8以8421码表示,进行运算
      (2):5:0101(8421码表示) 8:1000(8421码表示)
      (3):0101 + 1000 = 1101(结果大于9)
      (4):如果大于9,则加6修正
      (5):1101 + 0110 = 10011=8’b0001_0011(即13)

四:大4加3算法推导

例:8’b1111_1111----->12’b0010_0101_0101
实现过程:首先准备一个全新序列(20位数据:12位BCD+8位BIN),初始BCD部分全部为0,然后先对BCD进行a操作(大4加3比较),再进行b操作(判断完成后需要对序列整体左移),重新a,b操作,直到将二进制部分全部移空(8次移位),在第8次移位后取20位序列中高12位数据即就是BCD码。
操作步骤 a:大4加3比较 b:整体序列左移
BCD码(高位)
BCD码(中间位)
BCD码(低位)
输入二进制部分
说明
初始序列
0000
0000
0000
1111_1111
全新序列:BCD_BIN
1a:大4加3
0000(不变)
0000(不变)
0000(不变)
1111_1111
1a:对BCD进行大4加3比较
1b:整体左移
0000
0000
0001
1111_1110
1b:20位序列整体左移第一次
2a:大4加3
0000(不变)
0000(不变)
0001(不变)
1111_1110
2a:对BCD进行大4加3比较
2b:整体左移
0000
0000
0011
1111_1100
2b:20位序列整体左移第二次
3a:大4加3
0000(不变)
0000(不变)
0011(不变)
1111_1100
3a:对BCD进行大4加3比较
3b:整体左移
0000
0000
0111
1111_1000
3b:20位序列整体左移第三次
4a:大4加3
0000(不变)
0000(不变)
1010(加3)
1111_1000
4a:对BCD进行大4加3比较
4b:整体左移
0000
0001
0101
1111_0000
4b:20位序列整体左移第四次
5a:大4加3
0000(不变)
0001(不变)
1000(加3)
1111_0000
5a:对BCD进行大4加3比较
5b:整体左移
0000
0011
0001
1110_0000
5b:20位序列整体左移第五次
6a:大4加3
0000(不变)
0011(不变)
0001(不变)
1110_0000
6a:对BCD进行大4加3比较
6b:整体左移
0000
0110
0011
1100_0000
6b:20位序列整体左移第六次
7a:大4加3
0000(不变)
1001(加3)
0011(不变)
1100_0000
7a:对BCD进行大4加3比较
7b:整体左移
0001
0010
0111
1000_0000
7b:20位序列整体左移第七次
8a:大4加3
0001(不变)
0010(不变)
1010(加3)
1000_0000
8a:对BCD进行大4加3比较
8b:整体左移
0010
0101
0101
0000_0000
8b:20位序列整体左移第八次
BCD码取第8次移位后数据的高12位
2
5
5
BCD码转换过程完结
假设采用输入二进制数不是8位的,是下述数据:
例:10’d999
全新序列=BCD部分+BIN部分(12位+10位)=22位
先进行a步骤(大4加3需要10次),再进行b步骤(整体左移10次),最后取第10次左移后数据的高12位就是转出的BCD码。

五:大4加3算法实现(设计架构)

notion image

六:二进制转BCD综合资源和测试结果

  1. 对10求余
    1. notion image
  1. 测试结果
    1. notion image
  1. 大4加3
    1. notion image
  1. 测试结果
    1. notion image
Loading...