中国民航大学CPLD-EDA课程5第5章-VHDL设计进阶_第1页
中国民航大学CPLD-EDA课程5第5章-VHDL设计进阶_第2页
中国民航大学CPLD-EDA课程5第5章-VHDL设计进阶_第3页
中国民航大学CPLD-EDA课程5第5章-VHDL设计进阶_第4页
中国民航大学CPLD-EDA课程5第5章-VHDL设计进阶_第5页
已阅读5页,还剩43页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

要点回顾1组合电路实现(半加器)2元件例化(全加器)3时序电路实现(触发器)4信号与变量5VHDL语法EDA技术实用教程第5章VHDL设计进阶5.1数据对象DATAOBJECTS5.1.1常数(CONSTANT)常数定义的一般表述:

CONSTANT常数名:数据类型:=表达式;5.1.2变量(VARIABLE)定义变量的一般表述:

VARIABLE变量名:数据类型:=初始值;

5.1.3信号(SIGNAL)定义格式:

SIGNAL信号名:数据类型:=初始值;5.1数据对象DATAOBJECTS5.1.4进程中的信号与变量赋值语句

信号SIGNAL变量VARIABLE基本用法用于作为电路中的信号连线

用于作为进程中局部数据存储单元

适用范围在整个结构体内的任何地方都能适用

只能在所定义的进程中使用

行为特性在进程的最后才对信号赋值

立即赋值

表5-1信号与变量赋值语句功能的比较5.1.4进程中的信号与变量赋值语句【例5-1】使用变量赋值的时序模块设计

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEQQ:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENQQ:=D1;ENDIF;Q1<=QQ;ENDPROCESS;END;5.1.4进程中的信号与变量赋值语句【例5-2】

】使用信号赋值的时序模块设计...

ARCHITECTUREbhvOFDFF3ISSIGNALQQ:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQQ<=D1;ENDIF;ENDPROCESS;Q1<=QQ;

END;【例5-3】使用信号赋值的时序模块设计

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALA,B:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENA<=D1;B<=A;Q1<=B;ENDIF;ENDPROCESS;END;5.1.4进程中的信号与变量赋值语句【例5-4】使用变量赋值的时序模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISBEGINPROCESS(CLK)VARIABLEA,B:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THENA:=D1;B:=A;Q1<=B;ENDIF;ENDPROCESS;END;5.1.4进程中的信号与变量赋值语句5.1.4进程中的信号与变量赋值语句图5-2例5-3的RTL电路图5-1D触发器电路【例5-5】

SIGNALin1,in2,e1,...:STD_LOGIC;...PROCESS(in1,in2,...)VARIABLEc1,...:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFin1='1'THEN...–-第1行

e1<="1010";–-第2行...

IFin2='0'THEN...–-第15+n行...

c1:="0011";–-第30+m行...

ENDIF;ENDPROCESS;【例5-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISsignalmuxval:integerrange7downto0;BEGINprocess(i0,i1,i2,i3,a,b)beginmuxval<=0;if(a='1')thenmuxval<=muxval+1;endif;if(b='1')thenmuxval<=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;【例5-7】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux4ISPORT(i0,i1,i2,i3,a,b:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDmux4;ARCHITECTUREbody_mux4OFmux4ISBEGINprocess(i0,i1,i2,i3,a,b)variablemuxval:integerrange7downto0;beginmuxval:=0;if(a='1')thenmuxval:=muxval+1;endif;if(b='1')thenmuxval:=muxval+2;endif;casemuxvaliswhen0=>q<=i0;when1=>q<=i1;when2=>q<=i2;when3=>q<=i3;whenothers=>null;endcase;endprocess;ENDbody_mux4;图5-3例5-6的错误的工作时序图5-4例5-7的正确工作时序5.2.1含同步并行预置功能的8位移位寄存器设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYSHFTIS

PORT(CLK,LOAD:INSTD_LOGIC;DIN:INSTD_LOGIC_VECTOR(7DOWNTO0);

DOUT:OUTSTD_LOGIC_VECTOR(7DOWNTO0);QB:OUTSTD_LOGIC);ENDSHFT;ARCHITECTUREbehavOFSHFRTISSIGNALREG8:STD_LOGIC_VECTOR(7DOWNTO0);BEGIN

PROCESS(CLK,LOAD)BEGINIFCLK'EVENTANDCLK='1'THENIFLOAD='1'THENREG8<=DIN;--装载新数据

ELSEREG8(6DOWNTO0)<=REG8(7DOWNTO1);ENDIF;ENDIF;ENDPROCESS;QB<=REG8(0);DOUT<=REG8;ENDbehav;【例5-8】5.2VHDL设计实例(1)单个LOOP语句,其语法格式如下:[LOOP标号:]LOOP

顺序语句ENDLOOP[LOOP标号];(2)FOR_LOOP语句,语法格式如下:[LOOP标号:]FOR循环变量,IN循环次数范围LOOP

顺序语句

ENDLOOP[LOOP标号];用法示例如下:...

L2:LOOPa:=a+1;EXITL2WHENa>10;--当a大于10时跳出循环

ENDLOOPL2;...5.2.3位矢中‘1’码个数统计电路设计5.2VHDL设计实例5.2.4三态门设计【例5-12】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtri_sISport(enable:INSTD_LOGIC;datain:INSTD_LOGIC_VECTOR(7DOWNTO0);dataout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtri_s;ARCHITECTUREbhvOFtri_sISBEGINPROCESS(enable,datain)BEGINIFenable='1'THENdataout<=datain;ELSEdataout<="ZZZZZZZZ";ENDIF;ENDPROCESS;ENDbhv;图5-88位3态控制门电路5.2.5双向端口设计【例5-13】libraryieee;useieee.std_logic_1164.all;entitytri_stateisport(control:instd_logic;in1:instd_logic_vector(7downto0);q:inoutstd_logic_vector(7downto0);x:outstd_logic_vector(7downto0));endtri_state;architecturebody_trioftri_stateisbeginprocess(control,q,in1)beginif(control='0')thenx<=q;elseq<=in1;x<="ZZZZZZZZ";endif;endprocess;endbody_tri;5.2.5双向端口设计图5-9例5-13的综合结果5.2.5双向端口设计图5-10例5-13的仿真波形图5.2.5双向端口设计【例5-14】(以上部分同上例)process(control,q,in1)beginif(control='0')thenx<=q;q<="ZZZZZZZZ";elseq<=in1;x<="ZZZZZZZZ";endif;endprocess;endbody_tri;图5-12例5-14的仿真波形图5.2.5双向端口设计图5-11例5-14的综合结果5.2.6三态总线电路设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtristate2ISport(input3,input2,input1,input0:INSTD_LOGIC_VECTOR(7DOWNTO0);enable:INSTD_LOGIC_VECTOR(1DOWNTO0);output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDtristate2;ARCHITECTUREmultiple_driversOFtristate2ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGINIFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="01"THENoutput<=input2;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'Z');ENDIF;IFenable="11"THENoutput<=input0;ELSEoutput<=(OTHERS=>'Z');ENDIF;ENDPROCESS;ENDmultiple_drivers;【例5-15】5.2.6三态总线电路设计图5-13例5-15错误的综合结果5.2.6三态总线电路设计libraryieee;useieee.std_logic_1164.all;entitytriisport(ctl:instd_logic_vector(1downto0);datain1,datain2,datain3,datain4:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endtri;architecturebody_trioftriisbeginq<=datain1whenctl="00"else(others=>'Z');q<=datain2whenctl="01"else(others=>'Z');q<=datain3whenctl="10"else(others=>'Z');q<=datain4whenctl="11"else(others=>'Z');endbody_tri;【例5-16】5.2.6三态总线电路设计图5-14例5-16正确的综合结果5.2.7双边沿触发时序电路设计讨论不存在对时钟的双边沿都响应的基本时序元件5.3顺序语句归纳5.3.1进程语句格式PROCESS语句结构的一般表达格式如下

[进程标号:]PROCESS[(敏感信号参数表)][IS][进程说明部分]

BEGIN

顺序描述语句

ENDPROCESS[进程标号];5.3.2PROCESS组成PROCESS语句结构进程说明顺序描述语句敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句5.3.3进程要点1.PROCESS为一无限循环语句2.PROCESS中的顺序语句具有明显的顺序/并行运行双重性3.进程语句本身是并行语句4.信号是多个进程间的通信线5.一个进程中只允许描述对应于一个时钟信号的同步时序

逻辑

【例5-17】ENTITYmulISPORT(a,b,c,selx,sely:INBIT;data_out:OUTBIT);ENDmul;ARCHITECTUREexOFmulISSIGNALtemp:BIT;BEGINp_a:PROCESS(a,b,selx)BEGINIF(selx='0')THENtemp<=a;ELSEtemp<=b;ENDIF;ENDPROCESSp_a;p_b:PROCESS(temp,c,sely)BEGINIF(sely='0')THENdata_out<=temp;ELSEdata_out<=c;ENDIF;ENDPROCESSp_b;ENDex;5.4并行赋值语句讨论任何一条信号的并行赋值语句都是一个缩略的进程语句【例5-18】SIGNALselect:INTEGERRANGE15DOWNTO0;…Select<=0WHENs0=‘0’ANDs1=‘0’ELSE 1WHENs0=‘1’ANDs1=‘0’ELSE 2WHENs0=‘0’ANDs1=‘1’ELSE 3; X<=aWHENselect=0ELSE bWHENselect=1ELSE cWHENselect=2ELSE d;注意:敏感信号的有效区域5.5IF语句概述(1)IF条件句Then

顺序语句

ENDIF;(2)IF条件句Then

顺序语句

ELSE

顺序语句

ENDIF;(3)IF条件句ThenIF条件句Then...ENDIFENDIF(4)IF条件句Then

顺序语句

ELSIF

条件句Then顺序语句

...

ELSE

顺序语句

ENDIF5.5顺序条件语句IF语句【例5-19】

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcontrol_stmtsISPORT(a,b,c:INBOOLEAN;output:OUTBOOLEAN);ENDcontrol_stmts;ARCHITECTUREexampleOFcontrol_stmtsISBEGINPROCESS(a,b,c)VARIABLEn:BOOLEAN;BEGINIFaTHENn:=b;ELSEn:=c;ENDIF;output<=n;ENDPROCESS;ENDexample;5.5顺序条件语句IF语句【例5-20】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";ELSE

温馨提示

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

评论

0/150

提交评论