二进制转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
三:实现方式
- 位权实现(对10求余法)
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求余。
- 大4加3算法
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算法实现(设计架构)

六:二进制转BCD综合资源和测试结果
- 对10求余

- 测试结果

- 大4加3

- 测试结果

Loading...