您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 硬件描述语言AHDL
VHDL语言基础何宾2011.09VHDL语言基础--本章概述本章详细介绍了VHDL语言的基本结构、VHDL语言要素、VHDL语言语句的原理和设计方法。VHDL语言是整个EDA设计中最核心的内容之一。读者必须熟练的掌握VHDL语言,并且通过实验掌握使用VHDL语言对可编程逻辑器件进行编程的方法和技巧。VHDL语言基础--VHDL程序结构一个完整的VHDL程序包含实体(entity)、结构体(architecture)、配置(configuration)、包集合(package)、库(library)5个部分。实体主要是用于描述和外部设备的接口信号;构造体用于描述系统的具体逻辑行为功能;包存放设计使用到的公共的数据类型、常数和子程序等;配置用来从库中选择所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、包集合和配置等。VHDL语言基础--VHDL程序结构VHDL的基本结构是由实体和结构体两部分组成的。实体用于描述设计系统的外部接口信号,结构体用于描述系统的行为、系统数据的流程或者系统组织结构形式。设计实体是VHDL程序的基本单元,是电子系统的抽象。根据所设计的数字系统的复杂度的不同,其程序规模也大不相同。库、程序包实体(Entity)结构体(Architecture)进程或其它并行结构配置(Configuration)VHDL语言基础--VHDL程序结构实体由类属说明和端口说明两个部分组成。根据IEEE标准,实体组织的一般格式为:ENTITYentity_nameISGenericDeclarationsPortDeclarationsENDentity_name;(1076-1987version)ENDENTITYentity_name;(1076-1993version)VHDL语言基础—VHDL实体VHDL语言基础—VHDL实体实体说明在VHDL程序设计中描述一个元件或一个模块与设计系统的其余部分(其余元件、模块)之间的连接关系,可以看作一个电路图的符号。因为在一张电路图中,某个元件在图中与其他元件的连接关系是明显直观的。确定实体或组件中定义的局部常数。模块化设计时多用于不同层次模块之间信息的传递。可从外部改变内部电路结构和规模。类属说明必须放在端口说明之前。generic(generic_name:type:=valueothergenerics...);VHDL语言基础—类属说明类属常用于定义:实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。例:entitymckisgeneric(width:integer:=16);port(add_bus:outstd_logic_vector(width-1downto0));…VHDL语言基础—类属说明VHDL语言基础—端口说明定义实体的一组端口称作端口说明(portdeclaration)。端口说明是对设计实体与外部接口的描述,是设计实体和外部环境动态通信的通道,其功能对应于电路图符号的一个引脚。实体说明中的每一个I/O信号被称为一个端口,一个端口就是一个数据对象。端口可以被赋值,也可以当作变量用在逻辑表达式中。语法格式:Port(port_name:modetype;otherports….)其中:port_name为端口名字;mode为端口模式;type为数据类型。VHDL语言基础—端口说明VHDL语言基础—端口说明(1)输入模式(in)输入仅允许数据流入端口。输入信号的驱动源由外部向该设计实体内进行。输入模式主要用于时钟输入、控制输入(如Load、Reset、Enable、CLK)和单向的数据输入,如地址信号(address)。VHDL语言基础—端口说明(2)输出模式(out)输出仅允许数据流从实体内部输出。输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看作可读的。输出模式常用于计数输出、单向数据输出、设计实体产生的控制其他实体的信号等。VHDL语言基础—端口说明(3)缓冲模式(buffer)缓冲模式的端口与输出模式的端口类似,只是缓冲模式允许内部引用该端口的信号。缓冲端口既能用于输出,也能用于反馈。缓冲端口的驱动源可以是:设计实体的内部信号源;其他实体的缓冲端口。缓冲不允许多重驱动,不与其他实体的双向端口和输出端口相连。VHDL语言基础—端口说明……内部逻辑DQCLK内部逻辑OUT和BUFFER的区别……VHDL语言基础—端口说明(4)双向模式(inout)双向模式可以代替输入模式、输出模式和缓冲模式。在设计实体的数据流中,有些数据是双向的,数据可以流入该设计实体,也有数据从设计实体流出,这时需要将端口模式设计为双向端口。双向模式的端口允许引入内部反馈,所以双向模式端口还可以作为缓冲模式用。由上述分析可见,双向端口是一个完备的端口模式。VHDL语言基础—数据类型数据类型端口说明除了定义端口标识名称、端口定义外,还要标明出入端口的数据类型。由IEEEstd_logic_1164所约定的、由EDA工具支持和提供的数据类型为标准逻辑(standardlogic)类型。标准逻辑类型也分为布尔型、位型、位矢量型和整数型。为了使EDA工具的仿真、综合软件能够处理这些逻辑类型,这些标准库必须在实体中声明或在USE语句中调用。VHDL语言基础—实体举例【例3-1】下面给出一个关于8位计数器的实体说明entitycounterisgeneric(byte:integer:=8);port(clk:instd_logic;rst:instd_logic;counter:outstd_logic_vector(byte-1downto0));endcounter;VHDL语言基础—结构体结构体具体指明了该设计实体的行为,定义了该设计实体的逻辑功能和行为,规定了该设计实体的内部模块及其内部模块的连接关系。VHDL对构造体的描述通常有三种方式进行描述:1)行为描述;2)寄存器传输描述;3)结构描述;VHDL语言基础—结构体一个结构体的VHDL的描述为:architecturearch_nameofentity_nameis--declarative_items(signaldeclarations,componentdeclarations,etc.)begin--architecturebodyendarch_name;VHDL语言基础—结构体其中:arch_name为结构体的名字;entity_name为实体的名字。结构体的begin开始的前面部分为声明项(declarative_items),通常是对设计内部的信号或者元件进行声明;而begin后面一直到结构体的结束,该部分是对实体行为和功能的具体的描述。该部分的描述是由顺序语句和并发语句完成的。VHDL语言基础—结构体内信号定义由结构体的书写格式知道,在关键字ARCHITECTURE和BEGIN之间的部分,用于对结构内部使用的信号、常数、数据类型、函数进行定义。特别需要注意的是,这些声明用于结构体内部,而不能用于实体内部,因为一个实体中可能有几个结构体相对应。另外,实体说明中定义I/O信号为外部信号,而结构体定义的信号为内部信号。VHDL语言基础—结构体内信号定义结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,但不需要定义信号模式(mode),不需要说明信号方向,因为这些结构体的内部信号是用来描述结构体内部的连接关系。VHDL语言基础—结构体内并行语句并行处理语句是结构体描述的主要语句,并行处理语句在begin和end之间。并行处理语句表明,若一个结构体的描述用的是结构描述方式,则并行语句表达了结构体的内部元件之间的互连关系。这些语句是并行的,各个语句之间没有顺序关系。VHDL语言基础—结构体内并行语句若一个结构体是用进程语句来描述的,并且这个结构体含有多个进程,则各进程之间是并行的。但必须声明,每个进程内部的语句是有顺序的,不是并行的。若一个结构体用模块化结构描述,则各模块间是并行的,而模块内部视描述方式而定。VHDL语言基础—结构体内并行语句LIBRARYieee;USEieee.std_logic_1164.all;ENTITYmux4ISPORT(a:instd_logic_vector(3downto0);sel:instd_logic_vector(1downto0);q:outstd_logic);ENDmux4;ARCHITECTURErtlOFmuxISBEGINq=a(0)whensel=”00”elsea(1)whensel=”01”elsea(2)whensel=”10”elsea(3)whensel=”11”else‘X’ENDrtl;VHDL语言基础—描述风格VHDL语言主要有三种描述风格:行为描述;数据流(RTL寄存器传输)描述;结构描述;这三种描述方式从不同角度对硬件系统进行描述。一般情况下,行为描述用于模型仿真和功能仿真;而RTL描述和结构描述可以进行逻辑综合。VHDL语言基础—结构体行为描述行为描述是以算法形式对系统模型、功能的描述,与硬件结构无关。抽象程度最高。行为描述中常用语句的语句主要有:1)进程;2)过程;3)函数;VHDL语言基础—结构体行为描述【例3-4】两输入或门的行为描述。ENTITYor2ISPORT(a,b:instd_logic;c:outstd_logic);ENDor2;ARCHITECTUREbehavofor2isBEGINc=aorbAFTER5ns;ENDbehave;VHDL语言基础—结构体数据流描述数据流描述又称为寄存器传输级RTL描述。RTL级描述是以寄存器为特征,在寄存器之间插入组合逻辑电路。即以描述数据流的流向为特征。VHDL语言基础—结构体数据流描述【例3-5】四选一选择器的数据流(RTL)描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYmux4ISport(x:instd_logic_vector(3downto0);sel:instd_logic_vector(1downto0);y:outstd_logic);ENDmux4;ARCHITECTURErtlofmux4ISBEGINy=x(0)whensel=”00”elsex(1)whensel=”01”elsex(2)whensel=”10”elsex(3);ENDrtl;VHDL语言基础—结构体数据流描述这种基于RTL级的描述,虽然具体了一些,但仍没有反映出实体内的具体结构。使用RTL描述时,应遵循以下几个原则:1、在一个进程中,不允许存在两个寄存器的描述【例3-6】下面是违反规则1的描述PROCESS(clk1,clk2)BEGINifrising_edge(clk1)theny=a;endif;ifrising_edge(clk2)thenz=b;endif;ENDPROCESS;VHDL语言基础—结构体数据流描述2、在描述寄存器时,不允许使用IF语句中的ELSE项【例3-7】下面是违反规则2的描述PROCESS(clk)BEGINifrising_edge(clk)theny=a;elsey=b;endif;ENDPROCESS;VHDL语言基础—结构体数据流描述3、在描述寄存器时,必须带入信号值【例3-8】下面的例子说明了如何带入信号的方法PROCESS(clk)VARIABLEtmp:std_logic;BEGINy=tmp;ifrising_edge(clk)thentmp:=a;endif;ENDPROCESS;VHDL语言基础—结构体结构化描述在多层次的设计中,高层次的设计模块调用低层次的设计模块,构成模块化的设计。从上面的例子可以看出来,全加器由两个半加器和一个或门构成,元件之间,元件与实体端口之间通过信号连
本文标题:硬件描述语言AHDL
链接地址:https://www.777doc.com/doc-3903335 .html