VHDL应用实例

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第6章VHDL应用实例2021年1月4日4时53分1第6章VHDL应用实例6.1组合逻辑电路设计6.2时序逻辑电路设计6.3存储器设计6.4状态机设计本章小结第6章VHDL应用实例2021年1月4日4时53分26.1组合逻辑电路设计6.1.1基本门电路基本门电路有与门、或门、非门、与非门、或非门和异或门等,用VHDL语言来描述十分方便。【例6.1】2输入与非门电路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYxx1ISPORT(a,b:INSTD_logic;y:OUTSTD_LOGIC);ENDxx1;ARCHITECTURENAND2PPOFxx1ISBEGINy=aNANDB;ENDNAND2PP;第6章VHDL应用实例2021年1月4日4时53分36.1.23-8译码器【例6.2】实现74LS138三线-八线译码器(输出低电平有效)。三线-八线译码器74LS138的输出有效电平为低电平,译码器的使能控制输入端g1、g2a、g2b有效时,当3线数据输入端cba=000时,y[7..0]=11111110(即y[0]=0);当cba=001时,y[7..0]=11111101(即y[1]=0);依此类推。用VHDL描述的三线-八线译码器74LS138源程序如下:LIBRARYieee;USEieee.std_logic_1164.all;entitydecoder38isport(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0));enddecoder38;architecturebehave38OFdecoder38issignalindata:std_logic_vector(2downto0);beginindata=c&b&a;process(indata,g1,g2a,g2b)beginif(g1='1'andg2a='0'andg2b='0')thencaseindataiswhen000=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;elsey=11111111;endif;endprocess;endbehave38;第6章VHDL应用实例2021年1月4日4时53分46.1.3编码器十六进制编码键盘设计十六进制编码键盘的结构如图6.1所示,它是一个4×4矩阵结构,用x3~x0和y3~y0等8条信号线接收16个按键的信息,相应的编码器元件符号如图6.2所示。图6.1十六进制编码键盘的结构图6.2十六进制编码键盘元件符号第6章VHDL应用实例2021年1月4日4时53分5【例6.3】十六进制编码键盘的VHDL描述源程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhcoderISPORT(x,y:INSTD_LOGIC_VECTOR(3DOWNTO0);S:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDhcoder;ARCHITECTUREstrucOFhcoderISBEGINPROCESS(x,y)VARIABLExy:STD_LOGIC_VECTOR(7DOWNTO0);BEGINxy:=(X&y);CASExyISWHENB11101110=S=B0000;WHENB11101101=S=B0001;WHENB11101011=S=B0010;第6章VHDL应用实例2021年1月4日4时53分6WHENB11100111=S=B0011;WHENB11011110=S=B0100;WHENB11011101=S=B0101;WHENB11011011=S=B0110;WHENB11010111=S=B0111;WHENB10111110=S=B1000;WHENB10111101=S=B1001;WHENB10111011=S=B1010;WHENB10110111=S=B1011;WHENB01111110=S=B1100;WHENB01111101=S=B1101;WHENB01111011=S=B1110;WHENB01110111=S=B1111;WHENOTHERS=S=B0000;ENDCASE;ENDPROCESS;ENDstruc;第6章VHDL应用实例2021年1月4日4时53分76.1.4数值比较器数值比较器可以比较两个二进制是否相等,下面是一个8位比较器的VHDL描述。有两个8位二进制数,分别是A和B,输出为EQ,当A=B时,EQ=1,否则EQ=0。【例6.4】8位数值比较器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_VECTOR(7DOWNTO0);ENTITYCOMPAREISPORT(A,B:INSTD_LOGIC_VECTOR(7DOWNTO0);EQ:OUTSTD_LOGIC);ENDCOMPARE;ARCHITECTUREARTOFCOMPAREISBEGINEQ=‘1’WHENA=BELSE‘0’;ENDART;第6章VHDL应用实例2021年1月4日4时53分86.1.5数据选择器4选1选择器用于四路信号的切换。4选1选择器有4个信号输入端INP(0)~INP(3),两个信号选择端A、B,一个信号输出端Y。当A、B输入不同的选择信号时,就可以使INP(0)~INP(3)中某个相应的输入信号与输出端Y接通。【例6.5】4选1选择器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX41ISPORT(INP:INSTD_LOGIC_VECTOR(3DOWNTO0);A,B:INSTD_LOGIC;Y:OUTSTD_LOGIC);ENDMUX41;ARCHITECTUREARTOFMUX41ISSIGNALSEL:STD_LOGIC_VECTOR(1DOWNTO0);第6章VHDL应用实例2021年1月4日4时53分9BEGINSEL=B&A;PROCESS(INP,SEC)BEGINIF(SEL=00)THENY=INP(0);ELSIF(SEL=01)THENY=INP(1);ELSIF(SEL=11)THENY=INP(2);ELSEY=INP(3);ENDIF;ENDPROCESS;ENDART;第6章VHDL应用实例2021年1月4日4时53分106.1.6算术运算电路1.加法器【例6.6】半加器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYhalfISPORT(a,b:INstd_LOGIC;s,co:OUTstd_LOGIC);ENDhalf;ARCHITECTUREhalf1OFhalfISsignalc,d:std_logic;BEGINc=aORb;d=aNANDb;co=NOTd;s=candd;ENDhalf1;第6章VHDL应用实例2021年1月4日4时53分11【例6.7】全加器,由半加器组成,以元件方式调用。LIBRARYieee;USEieee.std_logic_1164.all;ENTITYhalfISPORT(a,b:INstd_LOGIC;s,co:OUTstd_LOGIC);ENDhalf;ARCHITECTUREhalf1OFhalfISsignalc,d:std_logic;BEGINc=aorb;d=anandb;co=notd;s=candd;endhalf1;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfullISPORT(a,b,cin:INstd_LOGIC;s,co:OUTstd_LOGIC);ENDfull;ARCHITECTUREfull1OFfullISCOMPONENThalfPORT(a,b:INstd_LOGIC;s,co:OUTstd_LOGIC);ENDCOMPONENT;SIGNALu0_co,u0_s,u1_co:std_logic;BEGINu0:halfportmap(a,b,u0_s,u0_co);u1:halfportmap(u0_s,cin,s,u1_co);co=u0_cooru1_co;endfull1;第6章VHDL应用实例2021年1月4日4时53分122.乘法器【例6.8】8位乘法器的设计。8位乘法器的元件符号如图4.4所示,a[7..0]和b[7..0]是被乘数和乘数输入端,q[15..0]是乘积输出端。8位乘法器源程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmulISPORT(a,b:INintegerrange0to255;q:OUTintegerrange0to65535);ENDmul;ARCHITECTUREoneOFmulISBEGINq=a*b;ENDone;图6.48位乘法器元件符号第6章VHDL应用实例2021年1月4日4时53分13【例6.9】对输入操作数A、B作加、减、乘、除运算LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYARITHMETICISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);Q1:OUTSTD_LOGIC_VECTOR(4DOWNTO0);Q2,Q3:OUTSTD_LOGIC_VECTOR(3DOWNTO0);Q4:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDARITHMETIC;ARCHITECTUREARTOFARITHMETICISBEGINPROCESS(A,B)BEGINQ1=(‘0’&A)+('0'&B);--ADDITIONQ2=A-B;--SUBTRACTIONQ3=A/B;--DIVISIONQ4=A*B;--MULTIPLICATIONENDPROCESS;ENDART;第6章VHDL应用实例2021年1月4日4时53分146.1.7三态门及总线缓冲器三态门和总线缓冲器是驱动电路经常用到的器件。1.三态门电路【例6.10】三态门电路的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTRISTATEISPORT(EN,DIN:INSTD_LOGIC;DOUT:OUTSTD_LOGIC);ENDTRISTATE;ARCHITECTUREARTOFTRISTATEISBEGINPROCESS(EN,DIN)BEGINIFEN=‘1’THENDOUT=DIN;ELSEDOUT='Z';ENDIF;ENDPROCESS;ENDART;第6章VHDL应用实例2021年1月4日4时53分152.单向总线驱动器在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。一个8位的单向总线缓冲器如图6.5所示。图6.5单向总线缓冲器DOUT[7..0]ENDIN[7..0]ENTRI_BUF8DOUT[7..0]DIN[7..0]第6章VHDL应用实例2021年1月4日4时53分16【例6.11】单向总线缓冲器的VHDL描述LIBRARYIEEE;USE

1 / 52
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功