资源预览内容
第1页 / 共109页
第2页 / 共109页
第3页 / 共109页
第4页 / 共109页
第5页 / 共109页
第6页 / 共109页
第7页 / 共109页
第8页 / 共109页
第9页 / 共109页
第10页 / 共109页
亲,该文档总共109页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
VHDL语言概述VHDL语言程序的结构 结构组成 1一个完整的VHDL语言程序通常被称为实 体。 VHDL设计VHDL文件程序包(Package):声明在设计或实体中将用到的常数、 数据类型、元件及子程序实体(Entity) 定义端口结构体(Architecture) 描述电路一个设计中通常包括的几个部分 1(1)库(Library) 1(2)程序包(Package) 1(3)实体说明(Entity Declaration) 1(4)结构体(Architecture Body) 1(5)配置(Configuration) 库(Library)1库(Library):用来存放已经编译过的实体 说明、结构体、程序包和配置。 1库中的各元素可以用做其他设计的资源 1若要引用库中已编译好的单元,需在 VHDL设计的程序开始说明引用的库。格式 如下:LIBRARY 库(Library)1说明引用库后,还要说明要使用库中的哪 一个设计单元,用USE语句。USE ALL程序包名就是实际设计要使用的库中的设计 单元。 ALL表示使用程序包中的所有项目。库(Library)1专门存放预先编译好的程序包的地方 库对应着一个目录,在这个目录中有许多预编 译好的程序包 用户自建的库即为设计文件所在的目录,默认 为当前的工作库:WORK库。 库名与目录名的对应关系可在编译软件中指定 1VHDL中的两个符合IEEE的标准库“STD” 和“ieee” 标准库中的程序包库名程序包名包中定义的内容 StdstandardVHDL类型,如BIT,BIT_VECTOR ieeeStd_logic_1164定义Std_logic,Std_logic_vector ieeeNumeric_std定义了一组基于Std_logic_1164中定义的类 型的算术运算符,如“+”,“-”,SHL,SHR ieeeStd_logic_arith定义有符号/无符号数类型,以及基于这些类 型上的算术运算 ieeeStd_logic_signed定义了基于Std_logic与Std_logic_vector类 型上的有符号数的算术运算 ieeeStd_logic_unsigned定义了基于Std_logic与Std_logic_vector类 型上的无符号数的算术运算 关于库的说明1std库是默认的标准库,即默认是可见的 ,因此可以省去库的声明 1ieee库虽得到了IEEE的认可,却常常被认 为是用户的库,因此使用时需要声明LIBRARY ieee;USE ieee.std_logic_1164.all;关于库的说明1在MAX+PLUS II软件系统中,在ALTERA库中 提供了如下两个程序包: maxplus2定义了74系列各模块 megacore定义了如FFT、8255、8251、图象格 式转换等大的模块。 1在Quartus II软件系统中,提供了更丰富的程 序包: Megafunctions Primitives others关于库的说明1LPM库:参数化的模块库 使用不同的端口 指定不同的参数 Library lpm; Use lpm.lpm_components.allLPM库举例LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_signed.all; LIBRARY lpm; USE lpm.lpm_components.all; ENTITY tst_mux IS PORT (a : in std_logic_2d (3 downto 0, 15 downto 0); sel : in std_logic_vector(1 downto 0); y : out std_logic_vector (15 downto 0); END tst_mux; ARCHITECTURE behavior OF tst_mux IS BEGIN u1: lpm_mux GENERIC MAP(lpm_width = 16, lpm_size = 4, lpm_widths = 2) PORT MAP (data = a, sel = sel, result = y); END behavior;实体说明(Entity Declaration) 1描述一个设计的外貌,即定义对外的输入 输出接口以及一些参数定义 1格式如下:ENTITY 实体名 ISGENERIC ( 类属表 );PORT ( 端口表 );END ENTITY 实体名; 实体说明之 类属参数说明 1为设计实体指定参数,如用来定义端口宽度、 器件延时参数等 1格式如下: GENERIC(CONSTANT参数名:数据类型:=静态 表达式,); 1例如:GENERIC(delay : time);表示参数名 delay是时间类型的,在结构体中将delay初始化 成不同的数值从而满足实际的需要。 1例如:GENERIC(n : INTEGER ); 表示参数名n 是整数类型的 实体说明之 PORT(端口)说明1对一个设计实体界面的说明及对设计实体 与外部电路的接口通道的说明,包括对每 一接口的输入输出模式和数据类型的定义 。 1格式如下: PORT ( 端口名 : 端口模式 数据类型 ; 端口名 : 端口模式 数据类型 ) ; 端口名是设计者为实体的每一个对外通道所 取的名字 端口模式用于定义端口上数据的流动方向和 方式 端口模式1IN:IN定义的通道为单向只读模式,规定数据 只能通过此端口被读入实体中。 1OUT:OUT定义的通道为单向输出模式,规定 数据只能通过此端口从实体向外流出,或者说可 以将实体中的数据向此端口赋值。 1INOUT:INOUT定义的通道确定为输入输出双 向端口 即从端口的内部看,可以对此端口进行赋值,也可以 通过此端口读入外部的数据信息 从端口的外部看,信号既可以从此端口流出,也可以向此端口输入信号,如RAM的数据端口,单片机的 I/O口。在实际电路描述中,INOUT模式的正确使用 还应该考虑其它因素。端口模式1BUFFER:BUFFER的功能与INOUT类似,区别 在于当需要输入数据时,只允许内部回读输出的 信号,即允许反馈。如计数器的设计,可将计数 器输出的计数信号回读,以作下一计数值的初值 。与INOUT模式相比,BUFFER回读(输入)的 信号不是由外部输入的,而是由内部产生,向外 输出的信号。 数据类型1VHDL作为一种强类型语言,任何一种数据对象 (信号、变量、常数)必须严格限定其取值范围 ,即对其传输或存储的数据类型作明确的界定。 1常见的数据类型主要有STD_LOGIC(标准逻辑 位)、STD_LOGIC_vector(标准逻辑位向量)、 BIT(逻辑位)、BIT_VECTOR(位向量)。 1BIT数据类型的信号规定的取值范围是逻辑位1 和0。在VHDL中,逻辑位0和1的表达必须加单 引号 ,否则VHDL综合器将0和1解释为整数数 据类型INTEGER。数据类型1BIT数据类型可以参与逻辑运算或算术运算,其结果仍 是位的数据类型。VHDL综合器用一个二进制位表示BIT 。 1BIT数据类型的定义或者说是解释包含在VHDL标准程 序包STANDARD中,而程序包STANDARD包含于 VHDL标准库STD中。这是系统默认的库,在开始处可 以不要说明。 1STD_LOGIC(标准逻辑位)、STD_LOGIC_vector(标准 逻辑位向量)数据类型的定义包含在IEEE库的包集合 STD_LOGIC_1164中,因此需要用包集合的说明语句 说明:USE STD_LOGIC_1164.ALL;“实体说明”的几点说明1以VHD为后缀名的文件名要求与实体名一 致。 1端口定义的每一行以“;”结尾,但最后一行 定义完后没有分号,分号在括号的外面。 1以“-”开始到本行结束为注释行 “实体说明”举例触发器的实体: ENTITY DFF1 IS PORT(CLK:IN STD_LOGIC;D:IN STD_LOGIC;Q:OUT STD_LOGIC );END DFF1;-87标准,也可以写成ENDENTITY DFF1,这是93标准 “实体说明”举例3-8译码器的实体: ENTITY decoder IS PORT(datain: IN STD_LOGIC_VECTOR(2 DOWNTO 0);g1,g2a,g2b: IN STD_LOGIC;y:OUT STD_LOGIC_vector(7 downto 0) ; END decoder;“实体说明”举例1流水线加法器 ENTITY add_lp isGENERIC(WIDTH :integer:=15;WIDTH1:integer:=7;WIDTH2:integer:=8;ONE : integer:=1);PORT(x,y:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0);sum: out STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0);clk:IN std_logic); END ENTITY add_lp;结构体(Architecture Body) 1能被仿真的实体都包含有结构体 1一个实体和其对应的结构体构成一个完整的 VHDL设计,一个实体可以有多个结构体。1不同的结构体可以采用不同的描述方式 1结构体的命名只要符合标识符的规定就可以。 但是结构体一般采用行为/寄存器/结构描述方式 ,因此按照见名知义的要求,其名字一般为 behave/rtl/structure。结构体(Architecture Body)1结构体一般包括声明区(Declarations)和并发语 句区两个部分组成。 声明区用于声明该结构体内使用的类型、常数、元件 、子程序等。 并发语句区用来描述结构体的行为和连接关系。并发 语句的类型主要有块语句、进程语句、信号赋值、子 程序调用、元件例化语句。 1结构体部分包含了VHDL的很多元素,掌握好它 们是灵活应用VHDL的关键。 结构体的一般形式 ARCHITECTURE OF IS-声明区,声明结构体内所用的内部信号及数据类型-若使用元件例化,则声明所用的元件 BEGIN-CONCURRENT SIGNAL ASSIGNMENTS;-PROCESS;-COMPONENT INSTANTIATIONS; END ;结构体举例十进制计数器ARCHITECTURE BEHAVE OF COUNTER ISSIGNAL CNT STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(CLK)BENGINIF(RISING_EDGE(CLK)IF(CNT = ”1001”) THEN CNT yy(大于)和=(大于等于) 1操作结果为BOOLEAN型:TRUE或FALSE 1特别当心“input(i),out1 = output(2*i-1), out2 = output(2*i);end generate end buffer_8;用于结构化描述的语句1(c)参数化的设计 (1)参数化实体:在定义实体时,有些待定参 数只有在被使用时才被指定参数值。待定参数 由参数说明语句GENERIC说明。 (2)参数化元件。例如component invert_linkport(inout:std_logic;output std_logic);generic(n:positive);end component;用于结构化描述的语句1(d)结构与行为混合描述 在一个实体结构中,行为方式和结构方式可以 混合使用。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号