8421BCD码加法器.docx
- 文档编号:8875262
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:10
- 大小:808.60KB
8421BCD码加法器.docx
《8421BCD码加法器.docx》由会员分享,可在线阅读,更多相关《8421BCD码加法器.docx(10页珍藏版)》请在冰豆网上搜索。
8421BCD码加法器
8421BCD码加法器
D
………… …………
13 1011
1101在8421BCD码中是非法码,结果错误,如果加6修正后,则产生了进位信号,且本位
1101
+0110
…………
1,0011
“0011”也是正确的。
③若和产生进位,则结果错误,也需加6修正。
如
8 1000
+ 9 → +1001
………… …………
17 1,0001
虽产生了进位,但本位和不正确,若加6修正
1,0001
+ 0110
…………
1,0111
得到正确结果。
产生错误的原因是8421BCD码为十进制,逢十进一,而四位二进制数是逢十六进一,故二者进位关系不同。
其中刚好相差6,故需加6进行修正。
这样,构成两个一位8421BCD相加时,必须由三部分组成:
一部分进行加数和被加数相加;第二部分是修正判别,判别是否要加以修正,即产生修正控制信号;第三部分完成加6修正。
第一部分和第三部分均由4位全加器实现。
第二部分修正判别电路应在8421BCD码相加有进位信号CO产生时,或者和数在10~15的情况下产生修正控制信号F,所以F应为
利用图3.2.14所示的卡诺图将和大于9的部分化简得出F:
根据上述分析及F信号产生的逻辑表达式可得到两个一位8421BCD码相加的电路。
四、quartus仿真
类似方案
方案二
五、拓展思考——方案3
用加法器实现两个四位二进制数相加并输出为8421BCD码。
同样也可以实现两位8421BCD码相加并且输出为8421BCD码。
两个四位二进制数相加,若考虑到低位向高位的进位,则其结果为0000~11110,显然从
1010开始就不符合8421BCD码的要求,如需8421BCD码输出则要进行修订。
考虑到输出可能是两位8421BCD码,则输出为六位,除加法器的四位输出外,增加两位输出D11,D22
若和小于10则结果正确,输出即为,
若和大于9而小于20则结果错误,若要得到正确结果,则需加6(0110)修正
若和大于19而小于30则结果错误,若要得到正确结果,则需加12(1100)修正
若和大于29则结果错误,若要得到正确结果,则需加0010(0110+1100=10010)修正。
利用真值表列式得:
实现方式二:
VHDL硬件描述
设计思路:
A和B是两个8421BCD码,它们相加后产生的进位为C,输出的8421BCD码为D。
S1和S分别为信号
S=A+B,如果S>10,则产生进位,c=1;
由于S是二进制的,所以最后取S的后四位加6就好。
但是为防止S的后四位加6,仍然大于10,故先用S1等于S的后四位加6,然后再取S1的后四位。
附代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityfhomework1is
port(a,b:
instd_logic_vector(3downto0);
c:
outbit;
d:
outstd_logic_vector(3downto0)
);
endfhomework1;
architecturearsoffhomework1is
signals,s1:
std_logic_vector(4downto0);
begin
process(a,b)
begin
s<=('0'&a)+('0'&b);//两个相加,保证位数相同
if(s(4)='1'or(s(3)='1'and(s
(2)='1'ors
(1)='1')))then//s4大于等于10
c=’1’;//c=1;
s1<=('0'&s(3downto0))+("00110");//s1取S的后四位加6
d<=s1(3downto0);//d取s1后四位
else//如果相加和小于10
c=’0’;//c=0
d<=s(3downto0);//d直接取S的后四位
endif;
endprocess;
endars;
所得到的电路
实验结果:
满足设计要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8421 BCD 加法器