VHDL 硬件描述语言一

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

上一页下一页3.6VHDL硬件描述语言VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage),诞生于1982年。1987年底,VHDL被IEEE美国国防部确认为标准硬件描述语言。上一页下一页3.6VHDL硬件描述语言VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的主要优点是:上一页下一页VHDL的优点1)与其它硬件描述语言相比,VHDL具有更强的行为描述能力。2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。3)VHDL的移植性很强。因为它是一种标准语言,所以它的设计描述可以被不同的工具所支持。4)VHDL本身的生命周期长。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。上一页下一页看两个例子:LIBRARYieee;USEieee.std_logic_1164.all;USEieee.std_logic_arith.all;ENTITYhalf_adderISPORT(a,b:INbit;s,c:OUTbit);ENDhalf_adder;ARCHITECTUREaaOFhalf_adderISBEGINs=axorb;c=aandb;END;上一页下一页•libraryIEEE;•useIEEE.STD_LOGIC_1164.ALL;•useIEEE.STD_LOGIC_ARITH.ALL;•useIEEE.STD_LOGIC_UNSIGNED.ALL;•entityadder1is•port(a,b:instd_logic;•ci:instd_logic;•sum:outstd_logic;•co:outstd_logic•);•endadder1;•architectureBehavioralofadder1is•begin•sum=axorbxorci;•co=(aandb)or((axorb)andci);•endBehavioral;上一页下一页3.6.1VHDL的模型结构完整的VHDL语言程序通常包含:•实体(Entity)•结构体(Architecture)•配置(Configuration)•包集合(Package)•库(Library)上一页下一页•实体用于描述所设计的系统的外部接口信号;•结构体用于描述系统内部的结构和行为;•配置用于从库中选取所需单元来组成系统;•包集合存放各设计模块能共享的数据类型、常数、程序等;•库用于存放已编译的实体、构造体、包集合、配置。上一页下一页1.实体(ENTITY)实体是设计的基本模块和设计的初级单元.在分层次设计中,顶层有顶层实体,含在顶层实体中的较低层次的描述为低层实体。依靠配置把顶层实体和底层实体连接起来。上一页下一页实体的一般格式ENTITY实体名IS[GENERIC(类属表);]PORT(端口表);END上一页下一页端口信息和类属信息•端口信息表示该设计单元与其它设计单元相连接的端口名、端口模式和信号取值的类型;•类属信息表示该设计单元的默认类属参数值,例如规定端口的大小、实体中子元件的数目、实体的定时特性等参数。下面举几个简单的实体设计例子加以说明。上一页下一页实体设计例题例:如图所示半加器的VHDL描述(只有端口说明的实体描述)ENTITYhalf_adderISPORT(a,b:INBit;s,c:OUTBit);ENDhalf_adder;半加器absc端口名端口模式端口类型上一页下一页说明:实体类似于原理图中的模块符(Symbol),它并不描述模块的具体功能。端口名:在实体中必须是唯一的.端口模式:是用来说明数据传输通过该端口的方向。端口类型:是端口所采用的数据类型.上一页下一页端口模式的类型输入(IN):输入模式仅允许数据流入端口。输出(OUT):输出模式仅允许数据流从内部流向实体输出端口。缓冲(Buffer):缓冲用于有内部反馈需求时。缓冲模式不允许用作双向端口使用。双向(Inout):对于双向信号,设计时必须定义端口为双向模式。上一页下一页端口类型布尔型(Boolean):布尔类型可以取值“TRUE”(真)或“FALSE”(假)。位(Bit):位可以取值“0”或“1”。位矢量(Bit_Vector):位矢量由IEEE库中的标准包Numeric_Bit支持。该程序包中定义的基本元素类型为Bit类型,而不是Std_logic类型。上一页下一页整数(Integer):整数可以用作循环的指针或常数,通常不用于I/O信号。非标准逻辑(Std_ulogic)和标准逻辑(Std_logic):非标准逻辑和标准逻辑由IEEE.std_logic_1164支持。程序包预先在IEEE库中编译,该程序包中定义的数据类型包括Std_ulogic,Std_ulogic_vector,Std_logic,Std_logic_vector。包中还定义了一些转换函数。访问IEEE.std_logic_1164程序包中的项目需要由LIBRARY子句和USE子句.Libraryieee;Useieee.std_logic_1164.all;上一页下一页Std_logic:工业标准的逻辑类型,取值如下:‘0’(强0);‘1’(强1);‘Z’(高阻态)‘X’(强未知);‘W’(弱未知);‘L’(弱0);‘H’(弱1)‘-’(忽略);‘U’(未初始化的);其中只有前4种取值具有实际物理意义,其他的是为了和模拟环境相容才保留的。上一页下一页用户自定义类型用户自定义类型是VHDL语言的一大特色,是普通编程语言所不具备的。语法如下:TYPE数据类型名{,数据类型名}数据类型定义例:TYPEBYTEISarray(7downto0)ofbit;Variableadder:BYTE;上一页下一页实体的表述方法例3.31对3-35所示3位全加器的实体描述。3位全加器abciSiCi+1图3-353位全加器方框图上一页下一页实体的表述方法例3.31如图3-35所示3位全加器的实体描述。Libraryieee;Useieee.std_logic_1164.all;Entityadder3isport();Endadder3;a,b:instd_logic_vector(2downto0);Ci:instd_logic;Si:outstd_logic_vector(2downto0);Ci+1:outstd_logic上一页下一页类属声明语法如下:Generic(常数名称:类型[:=值]{;常数名称:类型[:=值]);例:定义一个名为COMP的实体,它有两个Nbit输入和一个布尔型输出。EntityCOMPisgeneric(N:INTEGER:=8);port(X,Y:BIT_VECTOR(0TON-1);EQUQL:OUTBOOLEAN);EndCOMP;上一页下一页2.结构体(Architecture)结构体描述主要用来描述实体的内部结构,即描述一个实体的功能。一般格式:ARCHITECTURE(结构体名)OF(实体名)IS[常量定义][信号定义][类型定义][元件定义][子程序定义]BEGIN[并行信号赋值语句][进程语句][生成语句][元件例化语句]END[结构体名];上一页下一页VHDL允许采用3种描述格式:•行为描述:描述该设计单元的功能,即该硬件能做什么,主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送。•结构描述:描述该设计单元的硬件结构,即该硬件是如何构成的。主要使用配置指定语句及元件例化语句描述元件的类型和元件的互连关系。•数据流:主要使用并行的信号赋值语句,既显式表示了该设计单元的行为,也隐式表示了该设计单元的结构。上一页下一页例:一个一位等值比较器的设计实体描述:libraryieee;useieee.std_logic_1164.all;entityeqcompisport(a,b:instd_logic;equals:outstd_logic);end;上一页下一页行为描述方式:architecturebehavioralofeqcompisbegincomp:process(a,b)beginifa=bthenequals='1';elseequals='0';endif;endprocesscomp;endbehavioral;进程语句(process)顺序语句(if)上一页下一页结构描述方式:architecturestructofeqcompiscomponentxnor2port(a,b:instd_logic;equals:outstd_logic);endcomponent;beginu0:xnor2portmap(a,b,equals);endstruct;根据以上代码可以看出结构描述是采用元件例化语句来描述元件的类型及元件的互连关系。上一页下一页数据流描述方式:architecturedataflowofeqcompisbeginequals='1'when(a=b)else'0';enddataflow;根据以上给出的VHDL代码可知,数据流描述是采用并行的信号赋值语句来描述它的功能的上一页下一页3.6.2VHDL语言要素•标识符(Identifier)•数据对象(DataObjects)•保留字及运算符上一页下一页1.标识符(Identifier)标识符由英文字母“a”~“z”、“A”~“Z”、数字“0”~“9”以及下划线“__”组成。使用时应注意以下几点:1)VHDL不区分大小写;2)标识符一定要以字母开头;3)下划线不能放在结尾;4)下划线不能连用如:a_h_1、show_new_state、COUNTER_Aa%h_1、show-new-state、COUNTER_、T__1有效标识符无效标识符上一页下一页2.数据对象VHDL的数据对象包括信号、常量、变量和文件4类。信号常量变量上一页下一页1)信号信号代表连线,也可内连元件。端口也是信号。格式如下:SIGNALsignal_name:signaltype[:=initial_value]例子如下:(1)signalcount:bit_vector(3downto0);(2)signalenable,clk:bit:=’0’;上一页下一页2)常量常量是指那些设计描述中不会变化的值,这个值通常用来赋值,而且只能赋值一次。说明格式为:CONSTANTconstant_name{,constant_name}:type_name[:=value](1)constantfifo_width:integer:=8;(2)constantdelay1,delay2:Time:=10ns;(3)constantadd:std_logic_vector(2downto0):=“000”;上一页下一页3)变量变量用于进程语句和子程序(函数和过程)中作局部数据存储。和信号不同,分配给信号的值必须经过一段时间延迟后才能成为当前值,而分配给变量的值则立即成为当前值;信号与硬件中的“连线”相对应,而变量不能表达连线或存储元件。上一页下一页变量的说明格式为:VARIABLEvariable_name{,variable_name}:variable_type[:=value]变量的赋值是直接的。变量不具有像信号的值必须进过一段时间延迟后,才能成为当前值的赋值,即“=”符号用来表示信号赋值。变量在某一时刻仅包含一个值,变量赋值和初始化的符号“:=”表示立即赋值。上一页下一页变量说明的例子如下:(1)variabletep:bit;(2)variableaddress:std_logic_vector(31downto0);(3)variablea,b:bit_vector(0towidth-1

1 / 41
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功