VHDL程序结构介绍.ppt
目录123VHDL设计概念VHDL简介VHDL程序结构VHDL简介 VHDL全名Very-High-Speed Integrated Circuit Hardware Very-High-Speed Integrated Circuit Hardware Description LanguageDescription Language,超高速集成电路硬件描述语言,VHDL语言是一种用于电路设计的高级语言。最初是源于美国国防部1980年开始启动的超高速集成电路计划,在这一计划执行过程中,专家们认识到需要有一种标准的语言来描述集成电路的结构和功能,由此,美国国防部便开发出VHDL设计语言供美军用来提高设计的可靠性和缩减开发周期的设计语言。VHDL设计概念 采用VHDL进行设计的方法为高层设计,即“概念驱动模式”设计。设计人员无需通过门级原理图描述,而是针对设计目标进行功能描述。VHDL并不十分关心一个具体逻辑是靠何种方式实现的,而是把开发者的精力集中到逻辑所实现的功能上。由于高层设计只定义系统的行为特性,因此可以不涉及工艺。采用VHDL进行设计的具体过程为:1、以VHDL语言描述设计概念;2、用VHDL仿真与调试工具分析此概念的“行为”,检查是否满足初始要求。这一过程与普通的编程语言,如C语言的编译、运行、调试是类似的。3、VHDL设计VHDL综合工具。利用集成电路厂商或EDA厂家提供的被充分验证过的工艺库,以面积、功耗、速度等为目标进行优化,将电路映射成网表,得到门级电路后,还要进行仿真来验证门电路的行为和时序特性。4、物理设计。得到可供生产的文件,进行延时、故障、热分析等,保证系统的稳定工作,满足设计指标。VHDL程序结构程序结构实体和结构体实体和结构体 是是VHDL设计文件的两个基设计文件的两个基本组成部分本组成部分实体实体说明说明 描述设计实体描述设计实体(黑盒)(黑盒)的外部的外部接口信号(即输入接口信号(即输入/输出信号);输出信号);结构体结构体说明说明 用于描述设计实体用于描述设计实体(黑(黑盒)盒)的内部电路。的内部电路。包集合包集合 存放各设计模块能共享的数存放各设计模块能共享的数据类型、常数、子程序等;据类型、常数、子程序等;库库 用于存放已编译的实体、结构体、包用于存放已编译的实体、结构体、包集合和配置。集合和配置。配置配置 用于从库中选取所需元件安装用于从库中选取所需元件安装到设计单元的实体中。到设计单元的实体中。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux21 IS PORT(a,b:IN STD_LOGIC;s:IN STD_LOGIC;y:OUT STD_LOGIC );END mux21;ARCHITECTURE behavior OF mux21 IS BEGIN PROCESS(a,b,s)BEGIN IF s=0 THEN y=a;ELSE y=b;END IF;END PROCESS;END one;程序包程序包实体说明实体说明结构体结构体实体实体说明说明的一般格式为:的一般格式为:ENTITY 实体名实体名 IS GENERIC类属参数说明类属参数说明;PORT端口端口说明说明;END;ayand2b 实体中的每一个实体中的每一个I/OI/O信号被称为端口,其功信号被称为端口,其功能对应于电路图符号的一个引脚。端口说明则是能对应于电路图符号的一个引脚。端口说明则是对一个实体的一组端口的定义,即对基本设计实对一个实体的一组端口的定义,即对基本设计实体与外部接口的描述。体与外部接口的描述。端口是设计实体和外部环端口是设计实体和外部环境动态通信的通道。实体类似一个境动态通信的通道。实体类似一个“黑盒黑盒”,实,实体描述了体描述了“黑盒黑盒”的输入输出口。的输入输出口。ENTITY、IS、GENERIC、PORT、END是是VHDL的关键字(保留字)。的关键字(保留字)。实体名、端口名实体名、端口名(端口说明)(端口说明)等均应为符合等均应为符合VHDL命名规则的标识符。命名规则的标识符。实体说明实体说明类属信息类属信息1 1、作用、作用 为设计实体和其外部环境通信的静态信息提供通道,可以定义端口的大小、实体中元件的数目以及实体的定时特性等。2 2、一般格式、一般格式 GENERIC(CONSTANT 名字表:IN 子类型标识:=静态表达式,);端口说明端口说明端口说明的一般格式为:端口说明的一般格式为:PORT(端口名(端口名,端口名,端口名:端口模式:端口模式 数据类型;数据类型;端口名端口名,端口名,端口名:端口模式:端口模式 数据类型)数据类型);例如:例如:PORT(a,b:IN STD_LOGIC;y :OUT STD_LOGIC);端口名端口模式数据类型端口模式端口模式 用来说明数据传输通过该端口的方向。用来说明数据传输通过该端口的方向。ININ:数据只能从端口流入实体数据只能从端口流入实体OUTOUT:数据只能从端口流出实体数据只能从端口流出实体INOUTINOUT:数据从端口流入或流出实体数据从端口流入或流出实体BUFFERBUFFER:数据从端口流出实体,同时可被数据从端口流出实体,同时可被内部反馈内部反馈内部反馈内部反馈。构造体内部也要使用构造体内部也要使用构造体内部也要使用构造体内部也要使用输出输出输出输出信号时,只能定义成信号时,只能定义成信号时,只能定义成信号时,只能定义成“buffer”“buffer”“buffer”“buffer”。端口数据类型端口数据类型 常用的有布尔型(boolean)、位型(bit)、位矢量型(bit-vector)、整数型(integer)、非标准逻辑和标准逻辑类型(Std_ulogic和Std_logic)。1)boolean:布尔型,可取值“TRUE(真)”或“FALSE(假)”。2)bit:为位逻辑数据类型,信号取值是逻辑值“1”和“0”。3)bit_vector:取值是一组二进制位的值。如:如:如:如:8 8 8 8位数据总线数端口位数据总线数端口位数据总线数端口位数据总线数端口Port(d0,d1,sel:in bit;Port(d0,d1,sel:in bit;Port(d0,d1,sel:in bit;Port(d0,d1,sel:in bit;q:out bit;q:out bit;q:out bit;q:out bit;bus:out bit_vector(7 downto 0)bus:out bit_vector(7 downto 0)bus:out bit_vector(7 downto 0)bus:out bit_vector(7 downto 0);4 4)IntegerInteger:整数,用作循环技术或常数,通常不用于:整数,用作循环技术或常数,通常不用于I/OI/O信号。信号。5 5)Std_ulogicStd_ulogic和和Std_logicStd_logic:非标准逻辑和标准逻辑类型,由IEEE:Std_logic_1164支持,程序包中定义了有关的数据类型,访问该程序包中的项目需要使用LIBRARY子句和USE子句。Library IEEELibrary IEEELibrary IEEELibrary IEEE;Use IEEE.STD_Logic_1164.all;Use IEEE.STD_Logic_1164.all;Use IEEE.STD_Logic_1164.all;Use IEEE.STD_Logic_1164.all;Entity mu isEntity mu isEntity mu isEntity mu is Port(d0,d1,sel:in STD_Logic;Port(d0,d1,sel:in STD_Logic;Port(d0,d1,sel:in STD_Logic;Port(d0,d1,sel:in STD_Logic;q:out STD_Logic;q:out STD_Logic;q:out STD_Logic;q:out STD_Logic;bus:out STD_Logic_vector(7 downto 0)bus:out STD_Logic_vector(7 downto 0)bus:out STD_Logic_vector(7 downto 0)bus:out STD_Logic_vector(7 downto 0);END mu;END mu;END mu;END mu;练习练习编写包含以下内容的实体代码:编写包含以下内容的实体代码:编写包含以下内容的实体代码:编写包含以下内容的实体代码:端口端口端口端口 D D 为为为为1212位输入总线位输入总线位输入总线位输入总线;端口端口端口端口 OE OE 和和和和CLK CLK 都是都是都是都是1 1位输入位输入位输入位输入;端口端口端口端口 AD AD 为为为为7 7位双向总线位双向总线位双向总线位双向总线;端口端口端口端口 A A为为为为7 7位输出总线位输出总线位输出总线位输出总线;端口端口端口端口 INT INT 是是是是1 1位输出位输出位输出位输出;端口端口端口端口 AS AS 是一位输出同时被用作内部反馈。是一位输出同时被用作内部反馈。是一位输出同时被用作内部反馈。是一位输出同时被用作内部反馈。d11.0 d11.0 clkclkoeoeadad7 7.0.0 a a7 7.0.0 int int as as my_designmy_design练习练习答案答案Library ieee;Use ieee.std_logic_1164.ALL;Entity my_design isPORT(d:in std_logic_vector(11 downto 0);oe,clk:in:std_logic;ad:inout std_logic_vector(7 downto 0);a:out std_logic_vector(7 downto 0);int:out std_logic;as:buffer std_logic);End my_design;d11.0 d11.0 clkclkoeoead7.0ad7.0 a7.0 a7.0 int int as asmy_designmy_design结构体结构体 结构体是用来描述一个设计的具体结构,建立一个设计中输入和输出之间的关系,即描述实体的功能,对黑盒子的内部进行具体描述。VHDL允许采用三种描述格式来进行具体的设计构造,行为描述、数据流描述和结构描述。具体描述时,可以是以上三种中的一种或几种的任意组合。一个设计实体可以有多个结构体。结构体一般格式为:结构体一般格式为:ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 定义语句定义语句:内部信号,常数,数据类型,函数定义内部信号,常数,数据类型,函数定义 BEGIN 并行处理语句并行处理语句;进程语句进程语句;END 结构体名;结构体名;ARCHITECTURE、OF、IS、BEGIN、END是是VHDL的关键字(保留字)。的关键字(保留字)。结构体名称由设计者自由命名,是结构体的唯一名称,该结构体名可反映结构体名称由设计者自由命名,是结构体的唯一名称,该结构体名可反映结构体的特色。结构体的特色。例如:architecture behavior of mux is 用结构体行为命名architecture dataflow of mux is 用结构体的数据流命名architecture structural of mux is 用结构体组织结构命名architecture latch of mux is 用结构体的功能命名 以上命名举例说明,几个结构体都属于设计实体mux,结构体名由设计者自行定义,OF后面的实体名指明了该结构体所对应的是哪个实体。由于一个设计有行为描述、数据流描述和结构描述3种方式,一般建议用behave,dataflow,structure为结构体命名。用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。最常见的是对内部流动的信号的定义。但不能定义变量。实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。因为它是内部连接用的信号,因此不需要方向说明。结构体的结构体的三三种描述形式种描述形式:1、行为描述2、结构描述3、数据流描述1 1、行为描述、行为描述描述该设计单元的功能,即该硬件做什么,主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送。即只描述所希望电路的功能或者电路行为(输入输出间转换的行为),而没有指明或涉及实现这些行为的硬件结构。ARCHITECTURE behavior OF mux21 IS BEGIN PROCESS(a,b,s)BEGIN IF s=0 THEN y=a;ELSE y=b;END IF;END PROCESS;END one;2 2、结构描述、结构描述描述该设计单元的硬件结构,即该硬件是如何构成的。主要使用配置指定语句及元件例化语句描述元件的类型及元件的互联关系。3 3、数据流描述、数据流描述也称为寄存器传输描述形式。是对信也称为寄存器传输描述形式。是对信号到信号的数据流的路径形式进行描述,因号到信号的数据流的路径形式进行描述,因此要求设计者不但要对设计实体的功能实现此要求设计者不但要对设计实体的功能实现有一定的了解,而且还需要对内部的逻辑电有一定的了解,而且还需要对内部的逻辑电路结构有清楚的认识。路结构有清楚的认识。设计库设计库设计设计库(库(LibraryLibrary)1 1、设计、设计库是经编译后的数据的集合,存放包集合库是经编译后的数据的集合,存放包集合定义、实体定义、结构体定义和配置定义。定义、实体定义、结构体定义和配置定义。2 2、VHDLVHDL中,中,设计设计库的说明总放在设计单元的最前库的说明总放在设计单元的最前面。面。3 3、设计、设计库中的各个设计单元可以用作进行其他设库中的各个设计单元可以用作进行其他设计的资源,一个设计可以使用多个库中的设计单元。计的资源,一个设计可以使用多个库中的设计单元。设计库的使用设计库的使用 首先在设计的开头说明要引用的库,然后使用首先在设计的开头说明要引用的库,然后使用use子句指子句指明要使用库中的哪一个设计单元,其书写格式为:明要使用库中的哪一个设计单元,其书写格式为:Library 库名;库名;Use 库名库名.程序包名程序包名.all;其中:程序包名就是实际设计要使用的库中的设计单元;其中:程序包名就是实际设计要使用的库中的设计单元;all表示使用程序包中的所有项目。表示使用程序包中的所有项目。常用设计库常用设计库1、STD库2、WORK库 WORK库是VHDL语言工作库,用户在项目设计中设计成功、正在验证、和未仿真的中间件都放在WORK库中。以上两个库对当前设计是永远可见的,不需在程序开头对它们进行说明。即下面的LIBRARY子句隐含存在于任何设计单元之前。library std;library work;3、资源库 除STD和WORK库以外所有的库均为资源库。这些资源库的使用必须用LIBRARY显式的说明出来。如常用的资源库IEEE库(Std_logic_1164)和VITAL库。程序包程序包 在VHDL中,设计的实体和结构体中定义的数据类型、常量、子程序说明和元件说明等只能在该设计实体中使用,而对其他设计实体是不可见的。程序包说明用来单纯地罗列VHDL中所要用到的信号定义、常量定义、数据类型、子程序说明和元件说明等,是一个可编译的设计单元。要使用程序包中的某些说明和定义,要用use语句说明。各种VHDL编译系统都含有多个标准程序包,如Std_Logic_1164和Standard程序包。用户也可以自行设计程序包。常用程序包常用程序包1 1、s standardtandard 预先在std库中编译,主要定义了布尔类型、bit类型、character类型、出错级别、实数类型、整数类型、时间类型、延迟长度子类型、自然数子类型、正整数子类型、string类型、bit_vector子类型、文件打开方式类型和文件打开状态类型。对所有设计模块可见对所有设计模块可见。2 2、textiotextio 预先在std库中编译,定义了line类型、text类型、side类型、操作宽度width子类型、文件input、文件output、readline过程、对应于不同数据类型的read过程、writeline过程和对应于不同数据类型的write过程。对所有设计模块都对所有设计模块都不可见,使用时要进行说明不可见,使用时要进行说明。use std.textio.all;use std.textio.all;3 3、Std_logic_1164Std_logic_1164 预先在ieee库中编译,是使用最广泛的程序包,定义了设计人员长采用的一些数据类型和函数。定义了std_ulogic类型、std_ulogic_vector类型、std_logic类型、std_logic_vector类型等。4 4、Numeric_stdNumeric_std 预先在ieee库中编译,已被定义为标准程序包,定义了用于综合的数据类型和算术函数。定义了两种数据类型:unsigned和signed,其中unsigned表示无符号的位矢量,signed表示带符号的位矢量。