第五章常用数字逻辑电路与VHDL描述方法5.1组合逻辑电路的设计5.2时序逻辑电路的设计5.3有限状态机的设计5.4存储器5.5仿真方法特点:电路在某一时刻的输出仅取决于该时刻的输入信号状态,与输入信号作用前电路所处的状态无关;功能由基本门电路组合而成,没有触发器(记忆单元);输入和输出无反馈。加法器、编译码器、数据选择器、多路分配器、三态门及数据缓冲器、数值比较器。5.1组合逻辑电路的设计5.1.1加法器全加器表达式:iiiiiiiiiiCBAABABCCABCBABCACoCBAABCCBACBACBAS)(LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.all;ENTITYjiafaqiISPORT(a:INSTD_LOGIC;--加数b:INSTD_LOGIC;--被加数ci:INSTD_LOGIC;--相邻低位来的进位数s:OUTSTD_LOGIC;--全加器的和co:OUTSTD_LOGIC);--向相邻高位的进位数ENDjiafaqi;ARCHITECTUREdatafOFjiafaqiISBEGINs=aXORbXORci;co=(aANDb)or((aXORb)ANDci);ENDdataf;5.1.2编码器、译码器1.编码器8线-3线优先编码器的真值表输入输出eii0i1i2i3i4i5i6i7a2a1a0gseo1××××××××11111011111111111100×××××××0000010××××××01001010×××××011010010××××0111011010×××01111100010××011111101010×01111111100100111111111101ARCHITECTUREv1OFencoder1ISBEGINPROCESS(i)BEGINIFei='1'THEN--使能端无效的情况a=111;gs='1';eo='1';ELSE--使能端有效,进行编码IFi(7)='0'THENa=000;gs='0';eo='1';ELSIFi(6)='0'THENa=001;gs='0';eo='1';ELSIFi(5)='0'THENa=010;gs='0';eo='1';ELSIFi(4)='0'THENa=011;gs='0';eo='1';ELSIFi(3)='0'THENa=100;gs='0';eo='1';ELSIFi(2)='0'THENa=101;gs='0';eo='1';ELSIFi(1)='0'THENa=110;gs='0';eo='1';ELSIFi(0)='0'THENa=111;gs='0';eo='1';ELSEa=111;gs='1';eo='0';ENDIF;ENDIF;ENDPROCESS;ENDv1;2.译码器ARCHITECTUREbehOFyima2ISBEGINPROCESS(a)BEGINCASEaisWHEN0000=y=1111110;--显示数字“0”WHEN0001=y=0110000;--显示数字“1”WHEN0010=y=1101101;--显示数字“2”WHEN0011=y=1111001;--显示数字“3”WHEN0100=y=0110011;--显示数字“4”WHEN0101=y=1011011;--显示数字“5”WHEN0110=y=1011111;--显示数字“6”WHEN0111=y=1110000;--显示数字“7”WHEN1000=y=1111111;--显示数字“8”WHEN1001=y=1111011;--显示数字“9”WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDbeh;5.1.3多路选择器、多路分配器1.多路选择器功能:在n个选择输入信号的控制下,从2n个数据输入信号中选择一个作为输出,究竟选择哪一路由地址码决定。ARCHITECTUREbehOFxuanze1ISBEGINPROCESS(a,d0,d1,d2,d3)BEGINCASEaisWHEN00=y=d0;--当地址端为“00”,选择d0数据输出WHEN01=y=d1;--当地址端为“01”,选择d1数据输出WHEN10=y=d2;--当地址端为“10”,选择d2数据输出WHEN11=y=d3;--当地址端为“11”,选择d3数据输出WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDbeh;2.多路分配器ARCHITECTUREbehOFfenpei1ISBEGINPROCESS(a,d)BEGINy=00000000;CASEaisWHEN000=y(0)=d;WHEN001=y(1)=d;WHEN010=y(2)=d;WHEN011=y(3)=d;WHEN100=y(4)=d;WHEN101=y(5)=d;WHEN110=y(6)=d;WHEN111=y(7)=d;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDbeh;libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityfenpeiqiisPort(d:instd_logic;a:instd_logic_vector(2downto0);y:outstd_logic_vector(7downto0));endfenpeiqi;5.1.4三态门及数据缓冲器1.三态门entitysantaiisPort(din:instd_logic;en:instd_logic;dout:outstd_logic);endsantai;ARCHITECTUREbehOFsantaiISBEGINPROCESS(din,en)BEGINIFen='1'THENdout=din;--当en=1时,输出和输入相等。ELSEdout='Z';--当en=0时,输出是高阻状态ENDIF;ENDPROCESS;ENDbeh;如果需要8位的三态门,如何描述?2.单向总线缓冲器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYzongxian1ISGENERIC(buswidth:INTEGER:=8);--总线宽度默认为8位PORT(en:INSTD_LOGIC;---使能控制端din:INSTD_LOGIC_VECTOR(buswidth-1DOWNTO0);--数据输入端dout:OUTSTD_LOGIC_VECTOR(buswidth-1DOWNTO0));--数据输出端ENDzongxian1;ARCHITECTUREbehOFzongxian1ISBEGINPROCESS(din,en)BEGINIFen='1'THENdout=din;--当en=1时,输出和输入相等ELSEdout=(OTHERS='Z');--当en=0时,输出是高阻状态ENDIF;ENDPROCESS;ENDbeh;3.双向总线缓冲器libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;ntityzongxian2isPort(en:instd_logic;con:instd_logic;--数据传输方向的控制端a:inoutstd_logic_vector(7downto0);b:inoutstd_logic_vector(7downto0));endzongxian2;3.双向总线缓冲器ARCHITECTUREbehOFzongxian2ISBEGINPROCESS(en,con,a)BEGIN--当en=1且con=1时,a为输入端,b为输出端IFen='1'ANDcon='1'THENb=a;ELSEb=(OTHERS='Z');--en=0,a、b都为高阻状态ENDIF;ENDPROCESS;PROCESS(en,con,b)BEGIN--当en=1且con=0时,b为输入端,a为输出端IFen='1'ANDcon='0'THENa=b;ELSEa=(OTHERS='Z');--en=0,a、b都为高阻状态ENDIF;ENDPROCESS;ENDbeh;5.1.5数值比较器libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityct7485isPort(a3,a2,a1,a0:instd_logic;b3,b2,b1,b0:instd_logic;albi,aebi,agbi:instd_logic;albo,aebo,agbo:outstd_logic);endct7485;architectureBehavioralofct7485issignala_signal:std_logic_vector(3downto0);signalb_signal:std_logic_vector(3downto0);begin5.1.5数值比较器process(a3,a2,a1,a0,b3,b2,b1,b0,albi,aebi,agbi)begina_signal=(a3&a2&a1&a0);b_signal=(b3&b2&b1&b0);ifa_signalb_signalthenalbo='0';aebo='0';agbo='1';elsifa_signalb_signalthenalbo='1'aebo='0';agbo='0';elsealbo=albi;aebo=aebi;agbo=agbi;endif;endprocess;endBehavioral;5.2时序逻辑电路触发器、寄存器和计数器5.2.1时钟信号与进程时序逻辑电路在时钟脉冲的上升沿或下降沿的控制下,才能发生状态变化。因此,时钟信号通常是描述时序逻辑电路程序的执行条件。另外,时序电路也总是以时钟进程形式来进行描述。5.2.2触发器的描述与置位、复位方式1.基本RS触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYffrsISPORT(r,s:INSTD_LOGIC;q,qn:OUTSTD_LOGIC);ENDffrs;ARCHITECTUREbehOFffrsISSIGNALrs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINPROCESS(r,s)BEGINrs=r&s;CASErsISWHEN01=q='1';qn='0';WHEN10=q='0';qn='1';WHEN11=q='X';qn='X';WHENOTHERS=null;ENDCASE;ENDPROCESS;ENDbeh;2.同步RS触发器ARCHITECTUREbehOFtbrsISSIGNALrs:STD_LOGIC_VECTOR(1DOWNTO0);BEGINPROCESS(cp,r,s)BEGINrs=r&s;IF(cp'EVENTANDcp='1')THENCASErsISWHEN01=q='1';qn='0';WHEN10=q='0';qn='1';WHEN11=q='X';qn='X';WHENOTHERS=null;ENDCASE;ENDIF;ENDPROCESS;ENDbeh;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtbrsISPORT(r,s:INSTD_LOGIC;cp:inSTD_LOGIC;q,qn:OUTSTD_LOGIC);ENDtbrs;3.具有异步置位/复位控制端的D触发器LIBRARYIEEE;USE