1、8421BCD码加法器8421BCD码加法器D 13 10111101在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相加时,必须由三部分组成:一部
2、分进行加数和被加数相加;第二部分是修正判别,判别是否要加以修正,即产生修正控制信号;第三部分完成加6修正。第一部分和第三部分均由4位全加器实现。第二部分修正判别电路应在8421BCD码相加有进位信号CO产生时,或者和数在1015的情况下产生修正控制信号F,所以F应为利用图3.2.14所示的卡诺图将和大于9的部分化简得出F:根据上述分析及F信号产生的逻辑表达式可得到两个一位8421BCD码相加的电路。四、quartus仿真类似方案方案二五、拓展思考方案3用加法器实现两个四位二进制数相加并输出为8421BCD码。同样也可以实现两位8421BCD码相加并且输出为8421BCD码。两个四位二进制数相加
3、,若考虑到低位向高位的进位,则其结果为0000 11110 ,显然从1010开始就不符合8421BCD码的要求,如需8421BCD码输出则要进行修订。考虑到输出可能是两位8421BCD码,则输出为六位,除加法器的四位输出外,增加两位输出D11,D22若和小于10则结果正确,输出即为,若和大于9而小于20则结果错误,若要得到正确结果,则需加6(0110)修正若和大于19而小于30则结果错误,若要得到正确结果,则需加12(1100)修正若和大于29则结果错误,若要得到正确结果,则需加0010(0110+1100= 1 0010)修正。利用真值表列式得:实现方式二:VHDL硬件描述设计思路:A和B是
4、两个8421BCD码,它们相加后产生的进位为C,输出的8421BCD码为D。S1和S分别为信号S=A+B,如果S10,则产生进位,c=1;由于S是二进制的,所以最后取S的后四位加6就好。但是为防止S的后四位加6,仍然大于10,故先用S1等于S的后四位加6,然后再取S1的后四位。附代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity fhomework1 isport(a,b:in std_logic_vector(3 downto 0); c:out bit; d:out std_l
5、ogic_vector(3 downto 0) );end fhomework1;architecture ars of fhomework1 issignal s,s1:std_logic_vector(4 downto 0);beginprocess(a,b)begins=(0&a)+(0&b); /两个相加,保证位数相同if(s(4)=1or(s(3)=1and(s(2)=1or s(1)=1)then /s4大于等于10c=1; /c=1;s1=(0&s(3 downto 0)+(00110); /s1取 S的后四位加6d=s1(3 downto 0); /d取s1后四位else /如果相加和小于10c=0; /c=0d=s(3 downto 0);/d直接取S的后四位end if;end process;end ars; 所得到的电路实验结果:满足设计要求。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1