8421BCD码加法器.docx

上传人:b****8 文档编号:8875262 上传时间:2023-02-02 格式:DOCX 页数:10 大小:808.60KB
下载 相关 举报
8421BCD码加法器.docx_第1页
第1页 / 共10页
8421BCD码加法器.docx_第2页
第2页 / 共10页
8421BCD码加法器.docx_第3页
第3页 / 共10页
8421BCD码加法器.docx_第4页
第4页 / 共10页
8421BCD码加法器.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

8421BCD码加法器.docx

《8421BCD码加法器.docx》由会员分享,可在线阅读,更多相关《8421BCD码加法器.docx(10页珍藏版)》请在冰豆网上搜索。

8421BCD码加法器.docx

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模板 > 图表模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1