〈EDA技术教程〉第7章基本逻辑电路设计第7章EDA技术的应用7.1组合逻辑电路设计应用1.基本与非门电路2.运算电路设计3.编码器设计4.译码器设计5.数据选择器设计6.数据比较器设计7.ROM的设计〈EDA技术教程〉第7章基本逻辑电路设计1.基本与非门电路&YABY=A•B逻辑式逻辑符号真值表ABY001011101110〈EDA技术教程〉第7章基本逻辑电路设计(1).LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYnand2ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDnand2;ARCHITECTUREnand-1OFnand2ISBEGINy=aNANDb;ENDnand2-1;1.基本与非门电路〈EDA技术教程〉第7章基本逻辑电路设计ARCHITECTUREnand-2OFnand2ISBEGINPROCESS(a,b)VARIABLEcomb:STD_LOGIC_VECTOR(1DOWNTO0);BEGINcomb:=a&b;CASEcombISWHEN“00”=y=‘1’;WHEN“01”=y=‘1’;WHEN“10”=y=‘1’;WHEN“11”=y=‘0’;ENDCASE;ENDPROCESS;ENDnand2-2;(2)ABY001011101110〈EDA技术教程〉第7章基本逻辑电路设计常用的运算电路有加法器、减法器和乘法器,下面以8位乘法器为例,介绍运算电路的设计。A,B是被乘数和乘数输入端,Q是乘积输出端。源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmulISPORT(a,b:INintegerrange0to255;q:outintegerrange0to65535);endmul;architectureoneofmulisbeginq=a*b;endone;2.运算电路设计〈EDA技术教程〉第7章基本逻辑电路设计编码器分为普通编码器和优先编码器两种。在普通编码器中之允许一个输入信号有效,否则输出将发生混乱。下面以十六进制编码键盘为例,介绍普通编码器的设计。在编码器中,X[3..0]是行输入端,Y[3..0]是列输入端,没有键按下时,信号线呈高电平,有键按下时,相应信号线呈低电平,S[3..0]为编码器输出端。3.编码器〈EDA技术教程〉第7章基本逻辑电路设计libraryieee;useieee.std_logic_1164.all;entityhcoderisport(x,y:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0));endhcoder;3.编码器3.编码器〈EDA技术教程〉第7章基本逻辑电路设计architecturestrucofhcoderisbeginprocess(x,y)variablexy:std_logic_vector(7downto0);beginxy:=(x&y);casexyis3.编码器3.编码器〈EDA技术教程〉第7章基本逻辑电路设计whenB11101110=s=B0000;whenB11101101=s=B0001;whenB11101011=s=B0010;whenB11100111=s=B0011;whenB11011110=s=B0100;whenB11011101=s=B0101;whenB11011011=s=B0110;whenB11010111=s=B0111;whenB10111110=s=B1000;whenB10111101=s=B1001;3.编码器3.编码器〈EDA技术教程〉第7章基本逻辑电路设计whenB10111011=s=B1010;whenB10110111=s=B1011;whenB01111110=s=B1100;whenB01111101=s=B1101;whenB01111011=s=B1110;whenB01110111=s=B1111;whenothers=s=B0000;endcase;endprocess;endstruc;3.编码器〈EDA技术教程〉第7章基本逻辑电路设计表6-28线-3线优先编码器真值表输入输出din0din1din2din3din4din5din6din7output0output1output2xxxxxxx0000xxxxxx01100xxxxx011010xxxx0111110xxx01111001xx011111101x011111101101111111111注:表中的“x”为任意,类似VHDL中的“-”值。〈EDA技术教程〉第7章基本逻辑电路设计【例】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(0TO7);output:OUTSTD_LOGIC_VECTOR(0TO2));ENDcoder;ARCHITECTUREbehavOFcoderISSIGNALSINT:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(din)BEGINIF(din(7)='0')THENoutput=000;ELSIF(din(6)='0')THENoutput=100;ELSIF(din(5)='0')THENoutput=010;ELSIF(din(4)='0')THENoutput=110;ELSIF(din(3)='0')THENoutput=001;ELSIF(din(2)='0')THENoutput=101;ELSIF(din(1)='0')THENoutput=011;ELSEoutput=111;ENDIF;ENDPROCESS;ENDbehav;〈EDA技术教程〉第7章基本逻辑电路设计译码器的逻辑功能是将每个输入的二进制代码译成对应的输出高、低电平信号。4.译码器3线-8线译码器Y0A2A1A0Y1Y2Y3Y4Y5Y6Y7二进制代码高低电平信号〈EDA技术教程〉第7章基本逻辑电路设计二进制输入译码输出端cbay0y1y2y3y4y5y6y700001111111001101111110101101111101111101111100111101111011111101111011111101111111111104.译码器〈EDA技术教程〉第7章基本逻辑电路设计libraryieee;useieee.std_logic_1164.all;entitydecode38isport(a,b,c:instd_logic;y:outstd_logic_vector(7downto0));enddecode38;architecturebehaveofdecode38issignalindata:std_logic_vector(2downto0);beginIndata=c&b&a;process(indata)begincaseindatais4.译码器〈EDA技术教程〉第7章基本逻辑电路设计when000=y=11111110;when001=y=11111101;when010=y=11111011;when011=y=11110111;when100=y=11101111;when101=y=11011111;when110=y=10111111;when111=y=01111111;whenothers=y=“XXXXXXXX”;endcase;endprocess;endbehave;4.译码器〈EDA技术教程〉第7章基本逻辑电路设计4.译码器〈EDA技术教程〉第7章基本逻辑电路设计用VHDL设计7段16进制译码器用CASE语句完成真值表的功能向7段数码管输出信号,最高位控制小数点〈EDA技术教程〉第7章基本逻辑电路设计注意,此语句必须加入4位加法计数器7段译码器8位总线输出信号输出〈EDA技术教程〉第7章基本逻辑电路设计5.数据选择器从一组数据中选择一路信号进行传输的电路,称为数据选择器。A0A1D3D2D1D0W控制信号输入信号输出信号数据选择器类似一个多投开关。选择哪一路信号由相应的一组控制信号控制。〈EDA技术教程〉第7章基本逻辑电路设计地址输入输出sel0sel1Y00input001input110input211input35.数据选择器例1四选一数据选择器〈EDA技术教程〉第7章基本逻辑电路设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmulti_4vISPORT(sel:INSTD_LOGIC_VECTOR(1DOWNTO0);Input0,input1,input2,input3:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDmulti_4v;ARCHITECTUREaOFmulti_4vISBEGIN5.数据选择器〈EDA技术教程〉第7章基本逻辑电路设计PROCESS(sel,input0,input1,input2,input3)BEGINIF(sel=00)THENY=input0;ELSIF(sel=01)THENY=input1;ELSIF(sel=10)THENY=input2;ELSIF(sel=11)THENY=input3;ENDIF;ENDPROCESS;ENDa;5.数据选择器〈EDA技术教程〉第7章基本逻辑电路设计5.数据选择器〈EDA技术教程〉第7章基本逻辑电路设计ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy=aWHENs='0'ELSEb;ENDARCHITECTUREone;例22选1多路选择器的4种VHDL描述〈EDA技术教程〉第7章基本逻辑电路设计ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd=aAND(NOTS);e=bANDs;y=dORe;ENDARCHITECTUREone;...ARCHITECTUREoneOFmux21aISBEGINy=(aAND(NOTs))OR(bANDs);ENDARCHITECTUREone;〈EDA技术教程〉第7章基本逻辑电路设计ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy=a;ELSEy=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;〈EDA技术教程〉第7章基本逻辑电路设计mux21a功能时序波形〈EDA技术教程〉第7章基本逻辑电路设计数据比较器是一种运算电路,它可以对两个二进制数或二-十进制编码的数进行比较,得出大于、小与或相等的结果。下面以8位二进制数据比较器为例,介绍数据比较器的设计。A[7..0]和B[7..0]是两个数据输入端,FA是“大于”输出端,FB是“小于”输出端,FE是“等于”输出端。当A[7..0]大于B[7..0]时,FA=1;当A[7..0]小于B[7..0]时,FB=1;A[7..0]等于B[7..0]时,FE=1。6.数据比较器〈E