EDA常用电路设计程序讲课讲稿_第1页
EDA常用电路设计程序讲课讲稿_第2页
EDA常用电路设计程序讲课讲稿_第3页
EDA常用电路设计程序讲课讲稿_第4页
EDA常用电路设计程序讲课讲稿_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Good is good, but better carries it.精益求精,善益求善。EDA常用电路设计程序-用VHDL进行基本逻辑电路设计总结组合逻辑电路设计、时序逻辑电路设计、状态机设计、存储器设计(调用宏功能模块进行设计)1组合逻辑电路设计常见组合逻辑电路设计主要有:基本门电路、3-8译码器、8-3线优先编码器、比较器、多路选择器、三态门电路、单向总线驱动器、双向总线缓冲器等。1.1基本门电路基本门电路用VHDL语言来描述十分方便。为方便起见,在下面的两输入模块中,使用VHDL中定义的逻辑运算符,同时实现一个与门、或门、与非门、或非门、异或门及反相器的逻辑。LIBRARYIEEE;

2、USEIEEE.STD_LOGIC_1164.ALL;ENTITYGATEISPORT(A,B:INSTD_LOGIC;YAND,YOR,YNAND,YNOR,YNOT,YXOR:OUTSTD_LOGIC);ENDGATE;ARCHITECTUREARTOFGATEISBEGINYAND=AANDB;-与门输出YOR=AORB;-或门输出YNAND=ANANDB;-与非门输出YNOR=ANORB;-或非门输出YNOT=ANOTB;-反相器输出YXOR=AXORB;-异或门输出ENDART;1.23-8译码器下面我们分别以2种方法描述一个3-8译码器。方法1:使用CASE_WHEN语句LIBRA

3、RYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDECODERISPORT(SEL:INSTD_LOGIC_VECTOR(2DOWNTO0);EN:INSTD_LOGIC;-加使能控制端Y:OUTSTD_LOGIC_VECTOR(7DOWNTO0);END;ARCHITECTUREART1OFDECODERISBEGINPROCESS(SEL,EN)BEGINYY(0)Y(1)Y(2)Y(3)Y(4)Y(5)Y(6)Y(7)NULL;ENDCASE;ELSEY=”11111111”;ENDIF;ENDPROCESS;ENDART1;方法2:使用条件选择WHENE

4、LSE语句ARCHITECTUREART2OFDECODERISBEGINY(0)=0WHEN(EN=1ANDSEL=000)ELSE1;Y(1)=0WHEN(EN=1ANDSEL=001)ELSE1;Y(2)=0WHEN(EN=1ANDSEL=010)ELSE1;Y(3)=0WHEN(EN=1ANDSEL=011)ELSE1;Y(4)=0WHEN(EN=1ANDSEL=100)ELSE1;Y(5)=0WHEN(EN=1ANDSEL=101)ELSE1;Y(6)=0WHEN(EN=1ANDSEL=110)ELSE1;Y(7)=0WHEN(EN=1ANDSEL=111)ELSE1;ENDART2

5、;注意:使用了8条WHENELSE语句1.38-3线优先编码器8-3线优先编码器输入信号为y0、y1、y2、y3、y4、y5、y6和y7,输出信号为OUT0、OUT1和OUT2。输入信号中y0的优先级别最低,依次类推,y7的优先级别最高。下面我们用两种方法设计8-3线优先编码器。方法1:使用条件赋值语句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYENCODERISPORT(y0,y1,y2,y3,y4,y5,y6,y7:INSTD_LOGIC;OUT0,OUT1,OUT2:OUTSTD_LOGIC);ENDENCODER;ARCHITECTUREA

6、RT1OFENCODERISSIGNALOUTS:STD_LOGIC_VECTOR(2DOWNTO0);BEGINOUTS(2DOWNTO0)=111”WHENy7=1ELSE110WHENy6=1ELSE101WHENy5=1ELSE100WHENy4=1ELSE011WHENy3=1ELSE010WHENy2=1ELSE001WHENy1=1ELSE000WHENy0=1ELSEXXX;OUT0=OUTS(0);OUT1=OUTS(1);OUT2=OUTS(2);ENDART1;方法2:使用IF语句LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYE

7、NCODERISPORT(IN1:INSTD_LOGIC_VECTOR(7DOWNTO0);OUT1:OUTSTD_LOGIC_VECTOR(2DOWNTO0);ENDENCODER;ARCHITECTUREART2OFENCODERISBEGINPROCESS(IN1)BEGINIFIN1(7)=1THENOUT1=111;ELSIFIN1(6)=1THENOUT1=110;ELSIFIN1(5)=1THENOUT1=101;ELSIFIN1(4)=1THENOUT1=100;ELSIFIN1(3)=1THENOUT1=011;ELSIFIN1(2)=1THENOUT1=010;ELSIFI

8、N1(1)=1THENOUT1=001;ELSIFIN1(0)=1THENOUT1=000;ELSEOUT1=XXX;ENDIF;ENDPROCESS;ENDART2;1.4加法器带进位的4位加法器方法1:用FOR-LOOP语句实现LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYADDER4ISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);CIN:INSTD_LOGIC;SUM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4;ARCHITECTUREAR

9、TOFADDER4ISSIGNALC:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(A,B,CIN,C)BEGINC(0)=CIN;FORIIN0TO3LOOP-用FOR循环语句实现多位相加SUM(I)=A(I)XORB(I)XORC(I);C(I+1)=(A(I)ANDB(I)OR(C(I)AND(A(I)OR(C(I)ANDB(I);ENDLOOP;COUT=C(4);-总的进位输出ENDPROCESS;ENDART;方法2:直接使用加法“+”函数LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGI

10、C_UNSIGNED.ALL;-运算符重载ENTITYADDER4_OPISPORT(A,B:INSTD_LOGIC_VECTOR(3DOWNTO0);CIN:INSTD_LOGIC;SUM:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDADDER4_OP;ARCHITECTUREARTOFADDER4_OPISSIGNALC:STD_LOGIC_VECTOR(4DOWNTO0);SIGNALAA,BB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINAA=0&A;-4位扩展成5位,提供进位空间BB=0&B;C=AA+B

11、B+CIN;SUM=C(3DOWNTO0);COUNTB时,YA=1;当AB)THENYA=1;YB=0;YC=0;ELSIF(AB)THENYA=0;YB=1;YC=0;ELSEYA=0;YB=0;YCQQQQ=D;ENDCASE;ENDPROCESS;ENDRTL;1.6多路选择器选择器常用于信号的切换,用IF语句、CASE语句、条件赋值语句、选择信号赋值语句都可以描述多路选择器。思考:用选择信号赋值语句如何进行描述?LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYMUX4TO1ISPORT(A,B,C,D:INSTD_LOGIC;SEL:INST

12、D_LOGIC_VECTOR(1DOWNTO0);Q:OUTSTD_LOGIC);ENDMUX4TO1;ARCHITECTURERTLOFMUX4TO1ISBEGINWITHSELSELECTQ=AWHEN00“,BWHEN01,CWHEN10,DWHENOTHERS;ENDRTL;1.7总线驱动器设计:单向总线驱动器设计在微型计算机的总线驱动中经常要用单向总线缓冲器,它通常由多个三态门组成,用来驱动地址总线和控制总线。一个8位的单向总线缓冲器如图所示。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYTR1_BUF8ISPORT(DIN:INSTD_L

13、OGIC_VECTOR(7DOWNTO0);EN:INSTD_LOGIC;DOUNT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);ARCHITECTUREARTOFTR1_BUF8ISBEGINPROCESS(EN,DIN)IF(EN=1)THENDOUT=DIN;ELSEDOUT=ZZZZZZZZ;ENDIF;ENDPROCESS;ENDART;:双向总线缓冲器设计双向总线缓冲器用于数据总线的驱动和缓冲,典型的双向总线缓冲器如图所示。图中的双向总线缓冲器有两个数据输入输出端A和B,一个方向控制端DIR和一个选通端EN。EN=0时双向缓冲器选通DIR=0,则A=B(B送A)DI

14、R=1,则B=A(A送B)LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYBIDIRISPORT(A,B:INOUTSTD_LOGIC_VECTOR(7DOWNTO0);EN,DIR:INSTD_STD_LOGIC);ENDBIDIR;ARCHITECTUREARTOFBIDIRISSIGNALAOUT,BOUT:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(A,EN,DIR)BEGINIFEN=0ANDDIR=1THENBOUT=A;ELSEBOUTZZZZZZZZ;ENDIF;B=BOUT;ENDPROCESS;P

15、ROCESS(B,EN,DIR)BEGINIFEN=0ANDDIR=1THENAOUT=B;ELSEAOUTZZZZZZZZ;ENDIF;A=AOUT;ENDPROCESS;ENDART;2时序逻辑电路设计时序电路设计主要有:触发器、寄存器、计数器、分频器、序列信号发生器、序列信号检测器2.1D触发器的设计设计如图所示的D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF2ISPORT(CLK,CD,SD,D:INSTD_LOGIC;Q,NOTQ:OUTSTD_LOGIC);ENDDFF2;ARCHITECTURERTLOFDFF2ISBEG

16、INPROCESS(CLK,SD,CD)BEGINIFCD=0THENQ=0;NOTQ=1;ELSIFSD=0THENQ=1;NOTQ=0;ELSIFCLKEVENTANDCLK=1THENQ=D;ENDIF;ENDPROCESS;ENDRTL;2.2移位寄存器的设计下面给出一个8位的移位寄存器,其具有左移一位或右移一位、并行输入和同步复位的功能。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHIFTERISPORT(DATA:INSTD_LOGIC_VECTOR(7DOWNTO0);SHIFT_LEFT:INSTD_LOGIC;SHIFT_RIG

17、HT:INSTD_LOGIC;RESET:INSTD_LOGIC;MODE:INSTD_LOGIC_VECTOR(1DOWNTO0);QOUT:BUFFERSTD_LOGIC_VECTOR(7DOWNTO0);ENDSHIFTER;ARCHITECTUREARTOFSHIFTERISBEGINPROCESSBEGINWAITUNTILRISING_EDGE(CLK);IFRESET=1THENQOUTQOUTQOUTQOUTNULL;ENDCASE;ENDIF;ENDPROCESS;ENDART;2.3计数器例:模为60具有异步复位、同步置数功能的8421BCD码计数器LIBRARYIEEE;

18、USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYClock60ISPORT(CI,RESET,LOAD,CLK:INSTD_LOGIC;D:INSTD_LOGIC_VECTOR(7DOWNTO0);CO:OUTSTD_LOGIC;Q10,Q1:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ENDCNTM60;ARCHITECTUREARTOFCNTM60ISSIGNALQH,QL:STD_LOGIC_VECTOR(3DOWNTO0);BEGINCO=1WHEN(QH=0101“ANDQL=1001“A

19、NDCI=1)ELSE0;-进位输出的产生PROCESS(CLK,RESET)BEGINIFRESET=0THENQH=0000;QL=0000;-异步复位ELSIFCLKEVENTANDCLK=1THEN-同步置数IFLOAD=1THENQH=D(7DOWNTO4);QL=D(3DOWNTO0);ELSIFCI=1THEN-模60的实现IFQL=9THENQL=0000;IFQH=5THENQH=0000;ELSEQH=QH+1;-计数功能的实现ENDIFELSEQL=QL+1;ENDIF;ENDIF;-ENDIFLOADENDIF;ENDPROCESS;Q10=QH;Q1=QL;ENDAR

20、T;2.4N分频器的设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYFREDIVNISPORT(CLK:INSTD_LOGIC;OUTCLK:OUTSTD_LOGIC);ENDFREDIVN;ARCHITECTURERTLOFFREDIVNISCONSTANTN:INTEGER:=9;SIGNALCOUNT:INTEGERRANGENDOWNTO0;BEGINPROCESS(CLK)BEGINIF(CLKEVENTANDCLK=1)THENIF(COUNT=N-1)THENCOUNT=0

21、;ELSECOUNT=COUNT+1;IFCOUNT(INTEGER(N/2)THENOUTCLK=0;ELSEOUTCLK=1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDRTL;2.5序列信号发生器在数字信号的传输和数字系统的测试中,有时需要用到一组特定的串行数字信号,产生序列信号的电路称为序列信号发生器。如产生“01111110”序列的序列信号发生器(序列可任意)该电路可由计数器与数据选择器构成,其VHDL描述如下:LIBRARYIEEE;-“01111110”序列信号发生器USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UN

22、SIGNED.ALL;ENTITYSENQGENISPORT(CLK,CLR,CLK1:INSTD_LOGIC;-两个时钟信号ZO:OUTSTD_LOGIC);ENDSENQGEN;ARCHITECTUREARTOFSENQGENISSIGNALCOUNT:STD_LOGIC_VECTOR(2DOWNTO0);-序列发生器的关键是计数器,COUNT的宽度决定序列的长度,此为8位SIGNALZ:STD_LOGIC:=0;-赋初值仅对仿真有用BEGINPROCESS(CLK,CLR)-8进制计数器进程BEGINIFCLR=1THENCOUNT=000;ELSIFCLK=1ANDCLKEVENTTH

23、ENIFCOUNT=111“THENCOUNT=000;-此处可不要ELSECOUNTZZZZZZZZ=0;ENDCASE;ENDPROCESS;PROCESS(CLK1,Z)-消除毛刺的锁存器进程BEGINIFCLK1EVENTANDCLK1=1THENZO=Z;-把中间信号通过一个触发器寄存输出ENDIF;ENDPROCESS;ENDART;2.6序列信号检测器:检测”01111110”序列LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDETECT_SISPORT(DATAIN,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);EN

24、DDETECT_S;ARCHITECTUREARTOFDETECT_SISSIGNALREG:STD_LOGIC_VECTOR(7DOWNTO0);BEGINPROCESS(CLK)BEGINIFCLKEVENTANDCLK=1THEN-第一个IF语句REG(0)=DATAIN;-被检测数据打入第一个寄存器的0位REG(7DOWNTO1)=REG(6DOWNTO0);-内部寄存器进行向(左)高位的移位操作ENDIF;IFREG=”01111110”THENQ=1;第二个IF语句是判断检测到”01111110”序列时把标志置1ELSEQ=0;ENDIF;ENDPROCESS;ENDART;-也可

25、设计一个状态机进行检测3状态机的VHDL设计一般状态机结构框图包含四个部分:1、说明部分、2、主控时序进程、3、主控组合进程、4、辅助进程设计一个状态机对序列数进行检测,当这一串序列数高位在前(左移)串行进入检测器后,若此数与预置的密码“11100101”数相同,则输出“A”,否则输出“B”。LIBRARYIEEE;-单进程,符号化状态机USEIEEE.STD_LOGIC_1164.ALL;ENTITYschk_2ISPORT(DIN,clk,clr:INSTD_LOGIC;-串行输入数据位/工作时钟/复位信号AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0);-检测结果输出EN

26、Dschk_2;ARCHITECTUREbehavOFschk_2ISTYPEstateIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8);SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);-8位待检测预置数SIGNALC_ST:state;BEGIND=11100101;-8位待检测预置数PROCESS(CLK,CLR,DIN)BEGINIFCLR=1THENC_ST=ST0;ABIFDIN=D(7)THENC_ST=ST1;ELSEC_ST=ST0;ABIFDIN=D(6)THENC_ST=ST2;ELSEC_ST=ST0;ABIFDIN=D

27、(5)THENC_ST=ST3;ELSEC_ST=ST0;ABIFDIN=D(4)THENC_ST=ST4;ELSEC_ST=ST0;ABIFDIN=D(3)THENC_ST=ST5;ELSEC_ST=ST0;ABIFDIN=D(2)THENC_ST=ST6;ELSEC_ST=ST0;ABIFDIN=D(1)THENC_ST=ST7;ELSEC_ST=ST0;ABIFDIN=D(0)THENC_ST=ST8;ELSEC_ST=ST0;ABAB=1010;C_STC_ST=ST0;ENDCASE;ENDIF;ENDPROCESS;ENDbehav;LIBRARYIEEE;-符号化状态机,双进程U

28、SEIEEE.STD_LOGIC_1164.ALL;ENTITYschk_2_pISPORT(DIN,clk,clr:INSTD_LOGIC;-串行输入数据位/工作时钟/复位信号AB:OUTSTD_LOGIC_VECTOR(3DOWNTO0);-检测结果输出ENDschk_2_p;ARCHITECTUREbehavOFschk_2_pISTYPEstateIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6,ST7,ST8);SIGNALD:STD_LOGIC_VECTOR(7DOWNTO0);-8位待检测预置数SIGNALC_ST,N_ST:state;BEGIND=11100101;-8位待检测预置数REG:PROCESS(CLR,clk)BEGINIFCLR=1THENC_ST=ST0;-AB=1011;ELSIFCLKEVENTANDCLK=1THEN-时钟到来时,判断并处理当前输入的位C_STIFDIN=D(7)THENN_ST=ST1;ELSEN_ST=ST0;ABIFDIN=D(6)THENN_ST=ST2;ELSEN_ST=ST0;ABIFDIN=D(5)THENN_ST=ST3;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论