1VHDL设计初步VHDL语言的基本结构2VHDL设计方法•VHDL概述•VHDL的设计单元•VHDL的基本语法结构3VHDL概述VHSIC--VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage4VHDL历史•1982年,诞生于美国国防部赞助的VHSIC项目•1987年,VHDL被IEEE和美国国防部确认为标准硬件描述语言,即IEEE-1076(简称87版)•1993年,IEEE对VHDL进行了修订,公布了新版本的VHDL,即IEEE标准的1076-1993(1164)版本•1996年,IEEE-1076.3成为VHDL综合标准5VHDL特点•VHDL对设计的描述具有相对独立性–设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。•对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。6典型综合设计流程7VHDL的设计单元•VHDL语言的基本结构:–实体(Entity)–结构体(Architecture)–配置(Configuration)–库(Library)、程序包(Package)8库、程序包实体(Entity)结构体(Architecture)进程或其它并行结构配置(Configuration)9VHDL的设计单元•Entity(实体)–用来说明模型的外部输入和输出特征•Architecture(构造体)–用来定义模型的内容和功能•特点:–每一个构造体必须有一个实体与它相对应,所以两者一般成对出现。10Entity(实体)•类似一个“黑盒”,实体描述了“黑盒”的输入输出口。黑盒rstd[7:0]clkq[7:0]co11ENTITYblack_boxISGeneric(constantwidth:integer:=7;);PORT(clk,rst:INstd_logic;d:INstd_logic_vector(widthDOWNTO0);q:OUTstd_logic_vector(widthDOWNTO0);co:OUTstd_logic);ENDblack_box;rstd[7:0]clkq[7:0]co12实体的语法•ENTITY实体名IS–GenericDeclarations;(类属说明)–PortDeclarations;(端口说明)•END实体名;–(1076-1987version)•ENDENTITY实体名;–(1076-1993version)879313Generic(类属说明)•类属说明语句:–是从实体外部获得一些参数,以便改变此实体的内部电路结构和规模(如数据线的位数、加法器的位数)–与常数不同,常数只能从内部赋值而类属参量可以由实体外部赋值。–数据类型通常取Integer或Time14Generic(类属说明)•功能:–实体端口大小(管脚数量);–设计实体的物理特性Time(时钟信号延迟,脉冲宽度);–总线宽度;–元件例化的数量(拷贝数量)15PORT(端口说明)•端口说明语句:–确定实体的输入、输出端口的数目和类型–类似于器件的管脚,主要用于信号的传输。Port(端口名称1{,端口名称N}:端口模式数据类型;端口名称2{,端口名称M}:端口模式数据类型;…端口名称N{,端口名称V}:端口模式数据类型);16端口模式•IN/OUT:–数据只能从端口流入/流出实体•INOUT:–数据从端口流入或流出实体•BUFFER:–数据从端口流出实体,同时可被内部反馈(由内部产生)Entity17OUT与BUFFER的区别18二选一数据选择器•ENTITYmux21ISPORT(a,b,s:INBIT;y:OUTBIT);ENDmux21;19练习一my_designd[11:0]oeclkad[11:0]a[11:0]intas端口OE和CLK都是1位输入端口AS是一位输出同时被用作内部反馈端口D为12位输入总线端口AD为12位输出总线20LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYmy_designISPORT(d:INstd_logic_vector(11DOWNTO0);oe,clk:INstd_logic;ad:INOUTstd_logic_vector(11DOWNTO0);a:OUTstd_logic_vector(11DOWNTO0);int:OUTstd_logic;as:BUFFERstd_logic);ENDmy_design;my_designd[11:0]oeclkad[11:0]a[11:0]intas21Architecture(构造体)•用来描述实体的内部结构和逻辑功能•必须和实体(ENTITY)相联系•一个实体(ENTITY)可以有多个构造体•构造体的运行是并发的•构造体描述方式包括:–行为描述,结构描述,混合描述22Input1InputnOutput1Outputn实体ABCDSelMUX_Out2构造体23构造体的语法•注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。Architecture结构体名of实体名IS[说明语句];Begin[并行处理(功能描述)语句];End[architecture]结构体名;24说明语句和功能描述语句•说明语句:–对结构体中的数据类型、常数、信号、子程序等元素的说明部分。并不是必须的。•功能描述语句:–是必须有的!是对实体功能的描述。以各种不同的描述风格描述系统的逻辑功能实现的部分。252X8InputANDgateENTITYblack_boxISPORT(a,b:INstd_logic_vector(7DOWNTO0);y:OUTstd_logic_vector(7DOWNTO0));ENDblack_box;ARCHITECTUREexampleOFblack_boxISBEGINy=aANDb;ENDexample;26实体与结构体的关系•一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。设计实体结构体1结构体2结构体3结构体n。。。27Configuration(配置)•配置:–把特定的结构体指定给一个确定的实体Configration配置名of实体名ISfor选配结构体名endforEnd配置名;28Library库、Package程序包•Package程序包:–方便公共信息、资源的访问和共享,将已定义的常数、数据类型、元件调用说明、子程序放到一个集合,以供多个设计者使用。•Library库:–多个程序包可以构成库29Library库•STD库:–包含了两个程序包STANDARD和TEXTIO;•WORK库:–是用户的现行工作库•VITAL库:–包括预定义的时序程序包和基本元件程序包,可以提高VHDL门极时序模拟的精度。30Library库•IEEE库:–最常见的库,包含有IEEE标准的程序包和其他一些支持工业标准的程序包。–主要包括STD_LOGIC_1164、NUMERIC_BIT、NUMERIC_STD等程序包。–非IEEE标准如STD_LOGIC_ARITH等程序包31Package程序包USE库名.程序包名.项目名;USE库名.程序包名.ALL;LIBRARY库名;•LIBRARYIEEE;•USEIEEE.STD_LOGIC_1164.ALL;32程序包:STANDARD•定义了若干类型、子类型和函数。•在所有设计单元的开头,已经隐含了LIBRARY子句和USE子句;LIBRARYWORK,STD;USESTD.STANDARD.ALL;33程序包:STD_LOGIC_1164•该程序包所定义的数据类型有:–Std_ulogic;Std_ULogic_Vector;–Std_Logic;Std_Logic_Vector;•特点:–不能直接访问,必须加下面的语句:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;34库、程序包实体(Entity)结构体(Architecture)进程或其它并行结构配置(Configuration)35基本语句•简单信号赋值语句:赋值目标=表达式;•变量的赋值:–是一种理想化的数据传输,是瞬时的,不存在延时行为:目标变量名:=表达式;36二选一数据选择器的结构37ENTITYmux21ISPORT(a,b,s:INBIT;y:OUTBIT);ENDmux21;ARCHITECTUREoneOFmux21ISSIGNALd,e:BIT;BEGINd=aAND(NOTs);e=bANDs;y=dORe;ENDARCHITECTUREone;实体结构体38作为内连使用的信号3940如何用VHDL描述下面电路?orand41三人表决电路的VHDL描述libraryieee;useieee.std_logic_1164.all;entityvoteisport(A,B,C:instd_logic;F:outstd_logic);endentityvote;architectureoneofvoteisbeginF=(AandB)or(AandC)or(BandC);endarchitectureone;42VHDL的逻辑运算符43全加器的VHDL描述和位:Sum=ABCin进位:Cout=AB+ACin+BCinxorandor+44libraryieee;useieee.std_logic_1164.all;entityfulladderisport(A,B,Cin:instd_logic;Sum,Cout:outstd_logic);endentityfulladder;architectureoneoffulladderisbeginSum=AxorBxorCin;Cout=(AandB)or(AandCin)or(BandCin);endarchitectureone;45VHDL设计初步VHDL语言的基本语句46基本语句•条件信号赋值语句:条件信号赋值语句的格式为(可以不在进程里使用!)目标信号=表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE……表达式n;47ENTITYmux21ISPORT(a,b,s:INBIT;y:OUTBIT);ENDmux21;ARCHITECTUREoneOFmux21ISy=aWHENs=‘0’ELSEb;ENDARCHITECTUREone;二选一数据选择器4选1?48用when-else语句描述4选1的MUX问题1:如果00时选a,01时选b,10和11时都选c,怎么办?问题2:信号类型换成STD_LOGIC,怎么办?49基本语句•进程(Process)语句:–进程语句本身是并行语句,但是进程语句内部是由顺序语句组成的。[标记:]process[(敏感信号表)][IS][进程说明项]begin顺序描述语句endprocess[标记];50进程(Process)语句•敏感信号表:–进程内要读取的所有敏感信号(包括端口)的列表。每一个敏感信号的变化,都将启动进程。–敏感信号表中必须是信号,而不能是变量。–Process是VHDL中最重要的语句!51进程语句PROCESS1PROCESSnsignalsignalARCHITECTURE52进程语句的特点•一个构造体可以有多个进程语句•进程和进程之间是并行的•进程和进程之间的数据交换通过信号完成•进程内部是顺序语句53进程(Process)语句•进程的说明部分:–主要定义些局部量,可以包括数据类型、常数、变量、属性、子程序等。–在进程的说明部分不允许定义信号和共享变量。54进程要点•PROCESS(进程)为一无限循环语句•PROCESS(进程)中的顺序语句具有明显的顺序/并行运行双重性•进程必须由敏感信号的变化来启动!•进程语句本身是并行语句55敏感表举例latch