设计一个把6位二进制码转换成8421BCD码的组合电路。

大学 电路,正确答案 已帮助 人

设计一个把6位二进制码转换成8421BCD码的组合电路。

请帮忙给出正确答案和分析,谢谢!

热搜:bcd码转换成十进制程序函数

答案解析

难度★★☆ 搜索
  • 正确答案:×
    [解法1]用MSI器件设计。设6位二进制码为B5B4B3B2B1B0,其十进制值范围N:0-63,需要两位BCD码。设计方法有多种,而且还有专门集成芯片(如74185A)。下面介绍用加法器实现的方法,其思想是从二进制的按权展开式找出按十进制权相加的规律。推导如下:N=B5×32+B4×16+B3B2B1B0=B5×30+B4×10+B5×2+B4×6+B3B2B1B0)=(00B5B5+000B4)×10+(00B50+0B4B40+B3B2B1B0)式中,第一个括号中的和数为BCD码高位的一部分,第二个括号中的和数是一个最大值为23的5位二进制数,由于B0可以直通,所以可用一片4位加法器实现。设其和为S13S12S10S10B0,上式可进一步演化式中,第三行第二个括号可用第二片4位加法器实现,输出为S23S22S21S20,其最大值为13,还需要视其是否大于9进行修正。第五行中的F为修正指令,第二个括号可用第三片加法器实现,第一个括号可用第4个加法器和一个半加器实现,修正电路可用4位比较器或F=S23S22+S23S1逻辑实现。逻辑图如图5.2.2所示。[解法2]用VHDL程序设计。采用结构描述实现图5.2.2所示的电路。其顶层的VHDL程序如下:LIBRARYieee;USEieee.Std_logic_1164.ALL;USEieee.Std_logic_arith.ALL;USEieee.Std_logic_unsigned.ALL;ENTITYxiti502cISPORT(b:INStd_logic_vector(5downto0);d1,d0:OUTStd_logic_vector(3dowmo0));ENDxiti502c;ARCHITECTURExiti502c_arOFxiti502cISSIGNALf0,f1,n1,n2,n3,n4:Std_logic;S1GNALmO,m1,m2:Std_logic_vector(3downto0);COMPONENTv74x283PORT(a,b:INStd_logic_vector(3downto0);ci:INStd_logic;s:OUTStd_logic_vector(3downto0);co:OUTStd_logic);ENDCOMPONENT;BEGINf0<=(m1(3)ANDm1(2))0R(m1(3)ANDm1(1));u1:v74x283PORTMAP(‘0’&b(3downto1),“00”&b(4)&b(4),b(5),m0,n1);u2:v74x283PORTMAP(m0(2downto0)&b(0),‘0’&m0(3)&m0(3)&‘0’,‘0’,m1,n2);u3:v74x283PORTMAP(‘0’&f0&f0&‘0’,m1,‘0’,d0(3downto0),f1);u4:v74x283PORTMAP(“00”&(b(4)ANDm0(3))&(b(4)XORm0(3)),“00”&b(5)&b(5),f1,m2,n3);dl(2downto0)<=m2(2downto0);dl(3)<=‘0’;ENDxiti502c_ar;6位二进制数和十进制数的对应关系如表5.2.1所示。利用这种转换关系,在VHDL程序中,可以用行为描述的方法实现设计。其VHDL程序如下:LIBRARYieee;USEieee.Std_logic_1164.ALL;USEieee.Std_logic_arith.ALL;USEieee.Std_logic_unsigned.ALL;ENTITYxiti502ISPORT(b:INStd_logic_vector(5downto0);d1,dO:OUTStd_logic_vector(3doWnto0));ENDxiti502:ARCHITECTURExiti502_arOFxiti502ISSIGNALm:Integerrange64downto0;BEGINm<=CONV_INTEGER(b);PROCESS(b)BEGINIFm<=9THENd1<=“0000”;d0<=b(3downto0);ELSIF10<=mANDm<=19THENd1<=“0001”;d0<=b(3downto0)+“0110”;ELSIF20<=rrtANDm<=29THENd1<=“0010”;d0<=b(3downto0)+“1100”;ELSIF30<=mANDm<=39THENd1<=“0011”;d0<=b(3downto0)+“0010”;ELSIF40<=mANDm<=49THENd1<=“0100”;d0<=b(3downto0)+“1000”;ELSIF50<=mANDm<=59THENd1<=“0101”;d0<=b(3downto0)+“1110”;ELSIF60<=mANDm<=63THENd1<=“0110”;d0<=b(3downto0)+“0100”;ENDIF;ENDPROCESS:ENDxiti502_ar;