资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第3章 硬件描述语言VHDL,组合电路设计,时序逻辑电路设计,第3章 硬件描述语言VHDL组合电路设计,1,3.1多路选择器的VHDL描述,一个完整的VHDL语言程序包括五部分:,(1)实体(entity):用于描述设计电路的外部输入、输出接口信号;,(2)结构体(architecture):用于描述电路内部的结构和行为;,(3)程序包(package):用于存放各设计模块能共享的数据类型、常量和子程序;,(4)配置(configuration):用于从库中选取所需单元,组成系统设计的不同版本;,(5)库(library):用于存放已经编译的实体、结构体、程序包和配置。,多路选择器是典型的组合电路。,3.1多路选择器的VHDL描述 一个完整的VHDL语,2,3.1多路选择器的VHDL描述,2选1多路选择器的电路模型或元件图如图所示,例3-1是其VHDL的完整表述,即可使用VHDL综合器直接综合出实现既定功能的逻辑电路,对应的逻辑电路如图和波形图如下所示,因而可以认为是多路选择器的内部结构。,3.1多路选择器的VHDL描述 2选1多路选择器的电,3,3.1多路选择器的VHDL描述,3.1多路选择器的VHDL描述,4,3.1多路选择器的VHDL描述,例3-1,library ieee;-库的使用说明,use ieee.std_logic_1164.all;,entity T_mux2 is -实体说明;,Port(a,b,sel:in bit;,q:out bit);-端口说明,用以描述器件的输入、输end end T_mux2;出引脚;,architecture rtl of T_mux2 is -结构体说明;,begin,process(sel,a,b)-进程语句;,begin,if sel=0 then -if语句;,q=a;,else,q=b;,end if;,end process;,end rtl;,3.1多路选择器的VHDL描述例3-1,5,3.1多路选择器的VHDL描述,例3-2,library ieee;-库的使用说明,use ieee.std_logic_1164.all;,entity T_mux2 is -实体说明;,Port(a,b,sel:in bit;,q:out bit);-端口说明,用以描述器件的输入、输end end T_mux2;出引脚;,architecture rtl of T_mux2 is -结构体说明;,signal d,e:bit;,begin,d=a and(not sel);,e=b and sel;,y=d or e;,end rtl;,3.1多路选择器的VHDL描述例3-2,6,3.1多路选择器的VHDL描述,例3-3,library ieee;-库的使用说明,use ieee.std_logic_1164.all;,entity T_mux2 is -实体说明;,Port(a,b,sel:bit;,q:out bit);-端口说明,用以描述器件end end T_mux2;出引脚;,architecture rtl of T_mux2 is -结构体说明;,begin,y=a when sel=0 else b;,end rtl;,3.1多路选择器的VHDL描述例3-3,7,3.1多路选择器的VHDL描述,注意:,电路的功能是可以唯一的;但是其电路的结构方式不是唯一的,它决定于综合器的基本元件库的来源、优化方向和约束的选择、以及目标器件(如FPGA)的结构特点等。,3.1多路选择器的VHDL描述 注意:,8,3.1多路选择器的VHDL描述,库的说明:,库是经过编译后的数据的集合,它存放包集合定义、实体定义、构造体定义和配置定义。它的目的是:,(1)提高设计效率,而且多组多人可以同时工作;,(2)便于使设计遵循某些统一的语言标准或数据格式;,(3)可以利用已有的设计成果。,3.1多路选择器的VHDL描述库的说明:,9,3.1多路选择器的VHDL描述,库的功能类似于DOS操作系统的目录,库中存放设计的数据。在VHDL语言中,库的说明总是放在设计单元的最前面:,LIBRARY 库名;,这样,在设计单元内的语言就可以使用库中的数据。由此可见,库的好处在于使设计者可以共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,而且库与库之间是独立的,不能互相嵌套。,3.1多路选择器的VHDL描述 库的功能类似于DOS,10,3.1多路选择器的VHDL描述,库的种类有五种:IEEE库、STD库、ASIC 矢量库、用户定义的库和WORK库;,(1)IEEE库:IEEE中有一个“STD_LOGIC_1164”的包集合,它是IEEE正式认可的标准库,(2)STD库:VHDL的标准库,在库中存放有”standard“的 包集合是VHDL的标准配置;,(3)ASIC库:在VHDL中,为了进行门级的仿真,各公司提供了面向ASIC的逻辑门库。该库中存放有与逻辑门一一对应的实体。,(4)WORK库:现行作业库,在使用时不需加以说明;,(5)用户定义库:使用时需要加以说明。,3.1多路选择器的VHDL描述 库的种类有五种:IEEE,11,3.1多路选择器的VHDL描述,一、库的使用:,(1)库的说明:五种库除了WORK库和标准库以外,其他的库在使用时均需要加以说明,第一个语句是:LIBRARY 库名,表明是使用的哪一个库,另外需要说明用的是库中的哪个包集合以及项目名,第二句的使用格式如下:LIBRARY 库名.包集合名.项目名;例如,library ieee;use ieee.std_logic_1164.all;,(2)库说明作用范围:,从实体的说明开始到该实体所属的结构体为止,整个设计都可以对库的资源进行调用。当一个VHDL源程序出现两个以上的实体时,每一实体的前面都需要有自己完整的库的使用说明语句。,3.1多路选择器的VHDL描述一、库的使用:,12,3.1多路选择器的VHDL描述,二、实体说明:,实体描述的是电路器件的端口构成和信号属性,书写格式如下:,entity 实体名 is;,generic(类属表);-可没有;,port(端口名,端口名.:方向 端口数据类型;,端口名,端口名.:方向 端口数据类型);,End 实体名;,1.generic 提供静态参数或是数据宽度等静态特征,说明设计实体内、外通信的参数;必须放在实体端口说 明之前,用于指定参数。其书写格式如下:generic(常量名:数据类型:设定值);例如:,generic(m:time:=1 ns),3.1多路选择器的VHDL描述二、实体说明:,13,3.1多路选择器的VHDL描述,2.端口说明:,端口说明是对基本设计实体(单元)与外部接口的描述,也可是说是对外部引脚信号的名称,数据类型和输入输出方向的描述,其一般书写格式如下:,port(端口名,端口名.:方向 端口数据类型;,端口名,端口名.:方向 端口数据类型);,1)端口名:赋予每个外部引脚的名称;,2)端口方向:用来定义外部的引脚是输入还是输出。,3.1多路选择器的VHDL描述2.端口说明:,14,3.1多路选择器的VHDL描述,表示方向的说明符及其含义如下所示:,Out和buffer的区别:,(1)out不可以在构造体内部使用,buffer可以;,(2)当一个构造体用buffer 说明输出端口时,与其相连的另一个构造体的端口也需要用buffer来说明。,3.1多路选择器的VHDL描述表示方向的说明符及其含义如下所,15,3.1多路选择器的VHDL描述,3.端口的输出类型:VHDL语言中共有10种数据类型。,例如:bit,bit_vector,4.实体名:由于实体名表达的是设计电路的功能,最好根据相应的功能来来确定。,注意:不应用数字或中文名字来定义实体名,也不应用与EDA工具库中已定义好的元件名作为实体名,例如or2等,而且不能用数字起头的实体名。,3.1多路选择器的VHDL描述3.端口的输出类型:VHDL语,16,3.1多路选择器的VHDL描述,三、结构体,结构体对输入、输出关系可以用三种方式进行描述,即行为描述(数学模型描述),寄存器传输描述(数据流描述),结构描述(逻辑器件连接描述)。结构体的书写格式如下:,architecture 结构体名 of 实体名 is,定义语句;,begin,功能描述语句;,end 结构体名;,3.1多路选择器的VHDL描述三、结构体,17,3.1多路选择器的VHDL描述,“定义语句”包括在结构体中,用以说明和定义数据对象、数据类型、元件调用声明等。但“定义语句”不是必须的,“功能描述语句”则不同,结构体中必须给出相应的电路功能描述语句,可以是并行语句、顺序语句或它们的混合。,四、程序包(package):,为了共享函数(function)、过程(procedure),元件(component)等,设计师为使用者提供了一些公共的资源,放在程序包里。还可以自己定义程序包。程序包的说明格式如P28所示。,3.1多路选择器的VHDL描述 “定义语句”包括在结,18,3.1多路选择器的VHDL描述,五、配置(configuration),配置语句描述层与层之间的连接关系以及实体与结构体之间的连接关系。我们可以利用配置语句说明为这个实体指定一个结构体。书写格式如下:,configuration 配置名 of 实体名 is,语句说明;,end 配置名;,3.1多路选择器的VHDL描述五、配置(configurat,19,3.2 VHDL的数据对象,在VHDL中凡是可以赋予一个值的对象都称为客体,客体主要包括以下三种:信号、常数和变量(signal、constant、variable)。在电子电路的设计中,这三类客体都有一定的物理含义:信号对应地代表某一条硬件连接线,常数相应地代表数字电路中的电源和地,变量的对应关系不是很直接,通常是一些暂存量的载体。,常数是一个固定的值,定义语句:,constant:常量名:数据类型:=表达式,例如:constant Vcc:real:=5.0 V;,常数一旦赋值以后就不能改变,他不像信号和变量,可以任意带入不同的值;而且常数所赋的值必须和定义的数据类型一致。,3.2 VHDL的数据对象 在VHDL中凡是可以赋予,20,3.2 VHDL的数据对象,变量:,变量的只能在进程语句、过程语句和函数语句中使用,它是一个局部量,它的作用相当于是作为临时的数据存储单元,是中间媒介,在实际的硬件电路中不存在,而且变量的赋值是立即生效的。变量的语句格式如下:,variable 变量名:数据类型 约束条件:=表达式,例如 variable count:integer range 0 to 25;,变量的赋值如下 变量名:=表达式;,变量不能产生任何的延时。例如 temp1,temp2,temp3都是变量,那么下式产生延时的方法是不合法的:,temp3:=temp1+temp2 after 10 ns;,3.2 VHDL的数据对象变量:,21,3.2 VHDL的数据对象,信号:,信号表达电子电路内部的实际硬件接线,它除了没有数据流动方向的说明,和“端口”的概念几乎一致,是全局 变量通常在结构体、包集合和实体说明中使用。,语句格式如下:,signal 信号名:数据类型 约束条件:=表达式;,例如:signal ground bit:=1;,信号的赋值语句 信号名=表达式;,信号带入时可以附加延时;,程序如3-2所示,3.2 VHDL的数据对象信号:,22,3.2 VHDL的数据对象,信号和变量的异同主要有以下几点:,(1)赋值符号不同 信号和变量可以相互赋值;,(2)使用的场合不同;,(3)仿真的赋值时间不同。在仿真时信号和变量的赋值时间是不相同的,如在一个进程语句中,变量是立即赋值的,而信号的赋值是在变量执行完才赋值的。,例
展开阅读全文