VHDL程序的基本结构.ppt
可编程逻辑器件应用,主讲人:刘文怡,第五讲 VHDL程序的基本结构,VHDL语言设计的基本单元及其构成结构体的子结构描述包集合、库及配置要求:掌握硬件描述语言的基本框架结构;了解硬件描述语言的库、程序包和配置;,前节内容回顾,EDA,CPLD,FPGA,HDL,VHDLVHDL,VERILOG,AHDL FPGA芯片公司Altera,Xilinx,Microsemi(Actel),latticeFPGA,CPLD,单片机,DSP,ARM,如果把这个电路做成一个元件,别人使用的时候,只需知道两件事:一是封装!二是功能!,漂亮的程序(回顾),Fengzhuang_kaishiport(IN1:in;IN2:in;IN3:in;IN4:in;OUT4:out)Fengzhuang_jieshuGongneng_kaishisignal T1,T2;OUT4=T1 or T2;T2=IN3 and IN4;T1=IN1 and IN2;Gongneng_jieshu,1、为了用起来像个函数的样子,不妨加个port关键词,把输入输出引脚象参数一样排列起来。2、很好地表达了4个输入引脚,1个输出引脚。3、提供给别人调用。,1、内部功能实现的细节2、T1、T2似乎有点奇怪,哪来的?3、那我们也规定先定义,后使用!,Library IEEE;Use IEEE.STD_LOGIC_1164.ALL;ENTITY mux IS PORT(d0,d1,sel:in bit;q:out bit);END mux;,Architecture dataflow of mux issignal tmp1,tmp2,tmp3:bit;Begintmp1=d0 and sel;tmp2=d1 and(not sel);tmp3=tmp1 or tmp2;q=tmp3;End dataflow;,VHDL语言如何做的?,一个完整的VHDL语言程序通常包含5个部分:库(Library)包集合(Package)实体(Entity)结构体(Architecture)配置(Configuration),必备部分,VHDL程序的基本构成,实体:描述所设计系统的外部接口信号,是可见的;结构体:描述系统内部的结构和行为,是不可见的;配置:选取所需单元组成系统设 计的不同版本;包集合:存放各种设计模块都能共享的数据类型、常数、子程序和函数等;库:存放已经编译的实体、结构体、包集合和 配置。,VHDL程序的基本单元解释,实体声明,实体声明语法:ENTITY 实体名 IS 类属参数说明;端口说明;END 实体名;举例:ENTITY mux ISPORT(d0,d1,sel:IN BIT;q:OUT BIT);END mux;,实体的声明,实体名必须与文件名相同,否则编译时会出错。实体用于定义电路的输入输出引脚,但并不描述电路的具体结构和实现的功能。大小写不敏感。,实体声明注意事项,实体的类属参数说明(了解),类属参数说明是实体说明中的可选项,必须放在端口说明之前,用于指定参数,如端口大小、总线宽度、时间等;其一般书写格式为:GENERIC(常数名:数据类型:设定值,);举例:GENERIC(m:TIME:=1 ns);这个参数说明是指在VHDL程序中,结构体内的参数m的值为1ns。,实体的端口说明,端口说明是对基本设计实体(单元)与外部接口的描 述,也可以说是对外部引脚信号的名称,数据类型和 输入、输出方向的描述;其一般书写格式为:PORT(端口名,端口名n:方向 数据类型名;端口名,端口名m:方向 数据类型名);举例:PORT(d0,d1,sel:IN BIT;q:OUT BIT;bus:OUT BIT_VECTOR(7 DOWNTO 0);,(1)端口名:赋予每个外部引脚名称,通常用一个或几个英文字母,或者用英文字母加数字命名之,例如:d0,d1,sel。(2)端口方向:用来定义外部引脚的信号方向。,请注意OUT与BUFFER的区别,ENTITY test IS PORT(a:IN STD_LOGIC;b1,c1:OUT STD_LOGIC;b2:BUFFER STD_LOGIC;c2:OUT STD_LOGIC);END test;ARCHITECTURE a of test ISBEGIN b1=not(a);c1=b1;-Error b2=not(a);c2=b2;END a;,端口数据类型,标准类型:BIT和BIT_VECTOR扩展类型:STD_LOGIC和STD_LOGIC_VECTOR 单点多点(总线)扩展类型需要库和程序包的支持,并且需要在程序中指明使用时需要加入以下两个语句:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;,练习:,试写出半加器的实体描述:如右图所示a,b为半加器的输入端口s,co为输出信号,s为和信号,co为进位信号。,结构体ARCHITECTURE,结构体的描述方法:行为级描述、RTL(数据流)级描述、结构描述(逻辑元件连接),结构体是用于描述设计实体的内部结构(元件及内部的连接关系)以及实体端口间的逻辑关系(实体的行为)。,注意:结构体一定要跟在实体说明的后面。,结构体的一般书写格式,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句内部信号,常数,数据类型,函数等的定义;BEGIN 功能描述语句并行处理语句;END 结构体名;,实体名必须是所在设计实体的名字,结构体名由设计者定义,但当一个实体具有多个结构体时,结构体的取名不可重复。,结构体名称的命名,结构体名称由设计者自由命名,是结构体的唯一名称。OF后面的实体名称表明该结构体属于哪个设计实体,有些设计实体中可能含有多个结构体。这些结构体的命名可以从不同侧面反映结构体的特色,让人一目了然。例如:ARCHITECTURE behavioral OF mux IS 用结构体行为命名 ARCHITECTURE dataflow OF mux IS 用结构体数据流命名 ARCHITECTURE structural OF mux IS 用结构体组织结构命名 ARCHITECTURE bool OF mux IS 用结构体的数学表达方式命名 ARCHITECTURE latch OF mux IS 用结构体的功能来命名.,定义语句,定义语句位于ARCHITECTURE 和BEGIN之间,用于对结构体内部所使用的信号、常数、数据类型和函数进行定义。举例:ARCHITECTURE behave OF mux IS SIGNAL tmp:BIT;BEGIN END behave;结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,不用说明信号方向,因为是结构体内部连接用信号。,结构体的语法格式,结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的实体或结构体中,则需要将其作为程序包来处理。,结构体的语法格式,结构体的并行处理语句,具体描述结构体的行为及其连接关系。在结构体中的语句都可以是并行执行的,语句的书写顺序不决定语句的执行顺序。所谓“并行”,指的是这些并行语句之间没有执行顺序的先后之分。,并行处理语句的局部化,在实际逻辑设计时,我们不一定希望所有的逻辑语句同时工作,怎么办?换句话:如何能让不同部分的语句“有条件地”起作用?解决办法:挑出来、加条件!使用条件语句吗?不行!用适当的语法来表达:就引入了进程语句,PROCESS语句的书写格式,进程名:PROCESS(敏感信号表)IS变量说明语句变量说明语句BEGIN 进程内逻辑语句 END PROCESS 进程名;,process语句使用的类型、常量、变量、子程序声明、子程序体、属性声明等,但不能有信号声明*,可有可无,区分不同进程,process(A,B)begin Output=A or B;end process;,processbegin Output=A or B;wait on A,B;end process;,PROCESS语句的工作机理,任何一个敏感信号发生变化都将启动process内部的所有并行语句执行一次。Process语句可以不带敏感表,但是要在end process;前加入wait on 信号1,信号2,;注意:process语句敏感表 和wait on语句只能有一个。,ENTITY mux ISPORT(d0,d1,sel:in bit;q:out bit);END mux;Architecture dataflow of mux is SIGNAL tmp1,tmp2,tmp3:bit;Beginq=tmp3;process(d0,d1,sel)begin tmp1=d0 and sel;tmp2=d1 and(not sel);tmp3=tmp1 or tmp2;end process;End dataflow;,敏感信号d0,d1,sel任一信号发生变化就执行,28,进程语句举例,进程里面的语句,可以放置任何信号代入语句;可以放置一般并行语句;可以放置条件、分支、循环语句;不可以放置进程语句(嵌套);,结构体三种描述方式,行为描述:对设计实体按算法的路径来描述。采用进程语句顺序描述设计实体的行为和功能。寄存器传输描述(数据流描述):通过描述数据流程的运动路径、方向和运动结果,实现设计实体的行为和功能。结构描述(逻辑元件连接描述):采用并行处理语句描述设计实体内的结构组织和元件互连关系。通常用于层次式设计。,结构体描述的三种方法,例 二选一数据选择器,ENTITY mux IS PORT(d0,d1:IN BIT;sel:IN BIT;Q:OUT BIT);END mux;ARCHITECTURE behave OF mux IS BEGIN PROCESS(d0,d1,sel)BEGINIF sel=0 THENq=d0;ELSEq=d1;END IF;END PROCESS;END behave;,1)行为级描述:只表示输入和输出间转换的行为,它不包含任何结构的信息(硬件特性、连线方式、逻辑行为方式)。,ENTITY mux IS PORT(d0,d1:IN BIT;sel:IN BIT;q:OUT BIT);END mux;ARCHITECTURE behave OF mux IS SIGNAL tmp1,tmp2,tmp3,nsel:BIT;BEGIN cale:PROCESS(d0,d1,sel)BEGIN Nsel=NOT sel;tmp1=d0 AND sel;tmp2=d1 AND nsel;tmp3=tmp1 OR tmp2;q=tmp3;END PROCESS;END behave;,2)以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。数据流描述方式能比较直观地表达底层逻辑行为。,RTL级描述(数据流描述方式),ARCHITECTURE stru OF mux ISBEGINEND structral;,SIGNAL tmp1,tmp2,tmp3,nsel:BIT;COMPONENT and2PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;COMPONENT invPORT(a:IN BIT;c:OUT BIT);END COMPONENT;COMPONENT or2 PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;,定义信号tmp1,tmp2,tmp3,nsel,U1:inv PORT MAP(a=sel,c=nsel);U2:and2 PORT MAP(d0,sel,tmp1);U3:and2 PORT MAP(d1,nsel,tmp2);U4:or2 PORT MAP(tmp1,tmp2,tmp3);q=tmp3;,3)结构描述,本节课小结,1、VHDL语言的五个基本部分:库,包,实体,结构体和配置;2、结构体的三种描述方法:行为描述,数据流描述和结构描述;,