您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 第3章 VHDL快速入门
第3章VHDL快速入门【学习目标】通过本章学习应掌握VHDL体系结构、库与程序包、实体部分结构、结构体部分结构;数据选择器的VHDL描述中的相关语法现象;触发器的VHDL描述中的时钟信号的不同描述方法和相关语法现象。3.1VHDL体系结构3.1.1VHDL体系结构相对完整的VHDL设计由以下几个部分组成:(1)库、程序包;(2)实体;(3)结构体;(4)配置。VHDL程序基本结构如图3.1所示,图中显示了其各自的作用3.1VHDL体系结构图3.1VHDL程序基本结构3.1VHDL体系结构从图3.1中可以看出VHDL程序结构由4个部分组成,这4个部分并不是每一个VHDL程序都必须具备的,其中只有实体和与之对应的结构体是必须的,其余两部分根据实际情况可选择。3.1VHDL体系结构【例3.1】3.1VHDL体系结构【例3.1】3.1VHDL体系结构需要说明的是,以上例子的实体和结构体分别是以“ENDENTITYxxx”和“ENDARCHITECTURExxx”语句结尾的,这是符合VHDL的IEEESTDl076-1993版的语法要求的。若根据VHDL’87版本,即IEEESTDl076-1987的语法要求,这两条结尾语句只需写成“END;”或ENDxxx;”。3.1VHDL体系结构3.1.2库、程序包(1)库(Library)在VHDL设计中,为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,有必要将有用的信息汇集在一个或几个库中以供调用。主要包括,预先定义好的数据类型,子程序设计单元的集合体(程序包),或预先设计好的各种设计实体等,库的说明总是放在设计单元的最前面。3.1VHDL体系结构库的格式如下:LIBRARY〈设计库名〉;USE〈设计库名〉·〈程序包名〉·ALL;---打开某库USE语句的使用有两种常用格式:1)Use库名·程序包名·项目名;这种方式使用库中某个程序包中某个具体的项目。2)Use库名.程序包名.ALL;使用库中某个程序包中所有的项目3.1VHDL体系结构(2)程序包(Package)在设计实体中定义的数据类型,子程序或数据对象对于其他的设计实体是不同的,为了使已定义的常数,数据类型,元件调用说明以及子程序能被多个VHDL设计实体方便地访问和共享,可以将它们收集在一个VHDL程序包中。3.1VHDL体系结构3.1.3实体部分实体(ENTITY):实体的格式如下:ENTITY实体名IS[GENERIC(常数名:数据类型[:设定值])]---本书中均用[]表示可选项;PORT(列出设计的所有输入/输出信号);END实体名;3.1VHDL体系结构【例3.1】3.1VHDL体系结构例3.1中计数器的实体对应的原理图符号如图3.2所示。图3.2实体对应的原理图符号3.1VHDL体系结构类属参量(GENERIC):是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。和常数的区别:常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。此例中cntwidth宽度为4,也可容易地改变GENERIC(cntwidth:integer:=8)。3.1VHDL体系结构端口信号名:端口信号名在实体中必须是唯一的,信号名应是合法的标识符。端口模式:端门模式有以下几种类型:IN:规定数据只能通过此端口被读入实体中。OUT:规定数据只能通过此端口从实体向外流出,或者说可以将实体中的数据向此端口赋值。3.1VHDL体系结构INOUT:输入输出双向端口。可以通过此端口读入外部的数据信息,也可以向此端口输入信号。如RAM的数据端口、单片机的I/O口。BUFFER:缓冲端口,与INOUT区别在于当需要输入数据时,只允许内部回读输出的信号,即允许反馈。如计数器设计,可将计数器输出的计数信号回读,以作下一计数值的初值。与INOUT模式相比,BUFFER回读的信号不是由外部输入的,而是由内部产生、向外输出的信号。3.1VHDL体系结构各种端口模式可用图3.3表示。端口类型:定义端口的数据类型。常用的有integer、std_logic和std_logic_vector等。3.1VHDL体系结构3.1.4结构体部分所有能被仿真的实体都由结构体(ARCHITECTURE)描述,即结构体描述实体的结构或行为。—个实体可以有多个结构体,每个结构体分别代表该实体功能的不同实现方案。结构体一般由图3.4所示各子部分构成。3.1VHDL体系结构图3.4结构体基本结构3.1VHDL体系结构结构体的语法格式如下:ARCHITECTURE结构体名OF实体名IS[说明语句]BEGIN功能描述语句;--并行处理语句;END结构体名;--结构体名可以任意,但当一个实体具有多个结构体时,取名不可重复。3.1VHDL体系结构例3.1中计数器的结构体如下:3.1VHDL体系结构3.1.5配置部分配置可以把特定的结构体关联到(指定给)一个确定的实体。配置语句用来为较大的系统设计提供管理和工程组织的。通常在大而复杂的VHDL工程设计中,配置语句可以为实体指定或配属一个结构体。CONFIGURATION配置名OF实体名IS配置说明END配置名;3.2数据选择器的VHDL描述3.2.12选1数据选择器的VHDL描述2选1多路选择器的电路模型或元件图如图3.5和3.6所示。图3.5mux21a实体图3.6mux21a结构体3.2数据选择器的VHDL描述【例3.2】2选1多路选择器的VHDL描述ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy=aWHENs='0'ELSEb;ENDARCHITECTUREone;实体部分结构体部分3.2数据选择器的VHDL描述例3.22选1多路选择器的仿真波形3.2数据选择器的VHDL描述3.2.22选1数据选择器的VHDL相关语法分析1.实体实体描述的是电路器件的端口构成和信号属性,它的最简表达式如下:ENTITY实体名ISPORT(端口名:端口模式数据类型;…端口名:端口模式数据类型);ENDENTITY实体名;3.2数据选择器的VHDL描述2.实体名实体名是一个标识符,具体取名由设计者自定。由于实体名实际上表达的是该设计电路的器件名,所以最好根据相应电路的功能来确定,如4位二进制计数器的实体名可取为counter4b,8位二进制加法器的实体名可取为adder8b。3.2数据选择器的VHDL描述3.端口语句和端口信号名描述电路的端口及其端口信号必须用端口语句PORT()引导,并在语句结尾处加分号“;”。如例3.2中的端口信号名分别是a、b、s和y。3.2数据选择器的VHDL描述4.端口模式定义端口上数据的流动方向和方式。一般地,可综合的(即能将VHDL程序编译成可实现的电路)端口模式有四种,它们分别是“IN”、“OUT”、“INOUT‘’和“BUFFER”,3.2数据选择器的VHDL描述5.数据类型VHDL中传输或存储的数据的类型要做明确的界定,因此,在VHDL设计中必须预先定义好要使用的数据类型,相关的数据类型有INTEGER类型、BOOLEAN类型、STD_LOGIC、STD_LOGIC_VECTOR和BIT类型等。3.2数据选择器的VHDL描述6.结构体结构体的一般表达:ARCHITECTURE结构体名OF实体名IS[说明语句]BEGIN(功能描述语句)ENDARCHITECTURE结构体名;3.2数据选择器的VHDL描述“说明语句”包括在结构体中,用以说明和定义数据对象、数据类型、元件调用声明等。“说明语句”并非是必须的。“功能描述语句”则不同,结构体中必须给出相应的电路功能描述语句,可以是并行语句、顺序语句或它们的混合。3.2数据选择器的VHDL描述7.数据比较符号条件判断语句WHEN_ELSE通过测定表达式s=‘0’的比较结果,以确定由哪一端口向y赋值。表达式中的等号“=”没有赋值的含义,只是一种数据比较符号。3.2数据选择器的VHDL描述8.信号赋值符号表达式y=a表示输入端口a的数据向输出端口y传输,“=”称为信号赋值符;但也可以解释为信号a向信号y赋值。VHDL要求赋值符“=”两边的信号的数据类型必须一致。3.2数据选择器的VHDL描述9.文件取名和存盘一般地,文件名可以由设汁者任意给定,但文件后缀扩展名必须是“.vhd”,如adder_f.vhd。但考虑到某些EDA软件的限制和VHDL程序的特点,以及调用的方便性,建议程序的文件名尽可能与该程序的实体名一致。3.3触发器的VHDL描述D触发器的元件图如图3.8所示,D触发器的功能表如表3.1所示。表3.1D触发器的功能表图3.8D触发器3.3触发器的VHDL描述1.上升沿D触发器的VHDL描述【例3.3】使用信号属性函数描述D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDEF1ISBEGINPROCESS(CLK)BEGINIFCLK’EVENTANDCLK=‘1’--使用信号属性函数THENQ=D;ENDIF;ENDPROCESS;ENDbhv;3.3触发器的VHDL描述信号属性函数描述时序逻辑电路是一种常用的方法,本例中的CLK’EVENTANDCLK=‘1’是用于检测时钟信号的上升沿,即如果检测到CLK的上升沿,此表达式将输出为真。关键词EVENT是信号属性函数,用来获得信号行为信息的函数称为信号属性函数。在VHDL中,用表达式信号名’EVENT来测定某个信号的跳变情况。3.3触发器的VHDL描述例3.3功能仿真波形如图3.9所示。图3.9信号属性函数描述D触发器功能仿真波形3.3触发器的VHDL描述【例3.4】使用WAIT语句描述D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFFlISPORT(D,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFFl;ARCHITECTUREbhvOFDEF1ISBEGINPROCESSBEGINWAITUNTILCLK=‘1’;--使用WAIT语句Q=D;ENDPROCESS;ENDbhv;3.3触发器的VHDL描述本例中使用了WAITUNTIL语句实现时序电路,含义是如果CLK当前值不是“1”,就等待并保持Q的原值不变,直到CLK变为“1”时才对Q进行赋值更新。在VHDL中,当进程中使用WAIT语句后,就不必列出敏感信号。3.3触发器的VHDL描述【例3.5】使用上升沿检测函数描述D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFFlISPORT(D,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFFl;ARCHITECTUREbhvOFDEF1ISBEGINPROCESS(CLK)BEGINIF(rising_edge(clk))THEN--使用上升沿检测函数Q=D;ENDIF;ENDPROCESS;ENDbhv;3.3触发器的VHDL描述本例中使用了rising_edge(clk)上升沿检测函数,该函数已在STD_LOGIC_1164程序包中做了预定义,因此,使用时需要使用时必须打开STD_LOGIC_1164程序包。3.3触发器的VHDL描述【例3.6】使用进程的启动特性描述D触发器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFFlISPORT(D,CLK:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFFl;ARCHITECTUREbhvOFDEF1ISBEGINPR
本文标题:第3章 VHDL快速入门
链接地址:https://www.777doc.com/doc-4898850 .html