《VHDL程序基本结构.ppt》由会员分享,可在线阅读,更多相关《VHDL程序基本结构.ppt(34页珍藏版)》请在金锄头文库上搜索。
1、图2 4VHDL程序设计基本结构 2 2VHDL程序基本结构 一个相对完整的VHDL程序通常包含实体 Entity 结构体 Architecture 配置 Configuration 程序包 Package 和库 Library 5个部分 1 库 程序包使用说明 用于打开 调用 本设计实体将要用到的库 程序包 程序包存放各个设计模块共享的数据类型 常数和子程序等 库是专门存放预编译程序包的地方 2 实体 用于描述所设计的系统的外部接口信号 是可视部分 3 结构体 用于描述系统内部的结构和行为 建立输入和输出之间的关系 是不可视部分 4 配置说明语句 主要用于以层次化的方式对特定的设计实体进行元
2、件例化 或是为实体选定某个特定的结构体 实体 ENTITY 是一个设计实体的表层设计单元 其功能是对这个设计实体与外部电路进行接口描述 它规定了设计单元的输入输出接口信号或引脚 是设计实体经封装后对外的一个通信界面 1 实体语句结构实体说明单元的常用语句结构如下 ENTITY实体名IS GENERIC 类属表 PORT 端口表 END ENTITY 实体名 2 2 1实体 实体说明单元必须以语句 ENTITY实体名IS 开始 以语句 ENDENTITY实体名 结束 实体名是设计者自己给设计实体的命名 可作为其他设计实体对该设计实体进行调用时用 中间在方括号内的语句描述 在特定的情况下并非是必须
3、的 例如构建一个VHDL仿真测试基准等情况中可以省去方括号中的语句 2 类属 GENERIC 说明语句类属 GENERIC 参量是一种端口界面常数 常以一种说明的形式放在实体或块结构体前的说明部分 类属为所说明的环境提供了一种静态信息通道 类属的值可以由设计实体外部提供 类属说明的一般书写格式如下 GENERIC 常数名 数据类型 设定值 常数名 数据类型 设定值 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYAND2ISGENERIC RISEW TIME 1ns FALLW TIME 1ns PORT A1 INSTD LOGIC A0 INST
4、D LOGIC Z0 OUTSTD LOGIC ENDENTITYAND2 例2 2 2输入与门的实体描述 类属说明中定义参数RISEW为上沿宽度 FALLW为下沿宽度 它们分别为1ns 这两个参数用于仿真模块的设计 实体端口说明的一般书写格式如下 PORT 端口名 端口模式数据类型 端口名 端口模式数据类型 端口名是设计者为实体的每一个对外通道 系统引脚 所取的名字 一般用几个英文字母组成 端口模式 端口方向 是指这些通道上的数据流动方式 即定义引脚是输入还是输出 数据类型是指端口上流动的数据的表达格式 3 PORT端口说明 图2 5端口模式符号图 IEEE1076标准包中定义了4种常用的端
5、口模式 各端口模式的功能及符号分别见表2 1和图2 5 表2 1端口模式说明 PORT n0 n1 select INBIT q OUTBIT bus OUTBIT VECTOR 7DOWNTO0 例2 3 端口模式及数据类型定义 说明 n0 n1 select是输入引脚 属于BIT型 q是输出引脚 BIT型 bus是一组8位二进制总线 属于BIT VECTOR LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmmISPORT n0 n1 select INSTD LOGIC Q OUTSTD LOGIC Bus OUTSTD LOGIC VECTOR
6、 7DOWNTO0 ENDENTITYmm 例2 4 端口模式及IEEE库数据类型定义 例中端口数据类型取自IEEE标准库 该库中有数据类型和函数的说明 其中STD LOGIC取值为 0 1 X 和 Z 因为使用了库 所以在实体说明前要增加库说明语句 2 2 2结构体 结构体 ARCHITECTURE 是设计实体的一个重要部分 结构体将具体实现一个实体 结构体不能单独存在 它必须有一个界面说明 即一个实体 对于具有多个结构体的实体 必须用CONFIGURATION配置语句指明用于综合的结构体和用于仿真的结构体 即在综合后的可映射于硬件电路的设计实体中 一个实体只对应一个结构体 在电路中 如果实
7、体代表一个器件符号 则结构体描述了这个符号的内部行为 ARCHITECTURE结构体名OF实体名IS 说明语句 内部信号 常数 数据类型 函数等的定义BEGIN 功能描述语句 END ARCHITECTURE 结构体名 1 结构体语句格式 ENTITYmuxISPORT a0 a1 INBIT Sel INBIT Sh OUTBIT ENDmux ARCHITECTUREdataflowOFmuxISBEGINsh a0ANDsel OR NOTselANDa1 ENDdataflow 例2 5 结构体描述 结构体中的说明语句是对结构体的功能描述语句中将要用到的信号 SIGNAL 数据类型 T
8、YPE 常数 CONSTANT 元件 COMPONENT 函数 FUNCTION 和过程 PROCEDURE 等加以说明的语句 在一个结构体中说明和定义的数据类型 常数 元件 函数和过程只能用于这个结构体中 若希望其能用于其他的实体或结构体中 则需要将其作为程序包来处理 2 结构体说明语句 3 功能描述语句描述设计实体的具体行为 它包含两类语句 1 并行语句 并行语句总是在进程语句 PROCESS 的外部 语句的执行与书写顺序无关 总是同时被执行 2 顺序语句 顺序语句总是在进程语句 PROCESS 的内部 该语句是顺序执行的 一个结构体可以包含几个类型的子结构描述 BLOCK 块 描述 PR
9、OCESS 进程 描述 SUNPROGRAMS 子程序 描述 块语句是由一系列并行执行语句构成的组合体 它的功能是将结构体中的并行语句组成一个或多个模块 进程语句定义顺序语句模块 用于将从外部获得的信号值 或内部的运算数据向其他的信号进行赋值 子程序调用语句用于调用一个已设计好的子程序 信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值 元件例化语句对其他的设计实体作元件调用说明 使用BLOCK语句描述的格式如下 块标号 BLOCKBEGINENDBLOCK 块标号 1 BLOCK块语句 ENTITYmuxISPORT d0 d1 sel INBIT q OUTBIT ENDmu
10、x ARCHITECTUREconnectOFmuxISSIGNALtmp1 tmp2 tmp3 BIT BEGINcale BLOCKBEGINtmp1 d0ANDsel tmp2 d1AND NOTsel tmp3 tmp1ORtmp2 q tmp3 ENDBLOCKcale ENDconnect 例2 6 用块语句实现的二选一电路 进程描述的格式如下 进程名 PROCESS 信号1 信号2 BEGIN ENDPROCESS 进程名 进程语句中总是带有信号变量 敏感变量 只有当信号变量发生变化时 进程才被启动 将进程里的语句从上到下顺序执行一遍 执行完了就回到开始的PROCESS语句 2
11、进程 Process 语句描述 ENTITYmux2ISPORT d0 d1 sel INBIT q OUTBIT ENDmux2 ARCHITECTUREconnectOFmux2ISBEGINcale PROCESS d0 d1 sel VARIABLEtmp1 tmp2 tmp3 BIT BEGINtmp1 d0ANDsel tmp2 d1AND NOTsel tmp3 tmp1ORtmp2 q tmp3ENDPROCESScale ENDconnect 例2 7 用进程语句实现的二选一电路 子程序就是在主程序调用它以后能将处理结果返回给主程序 在VHDL中有2种类型 过程和函数 过程语
12、句PROCEDURE过程名 参数1 参数2 IS 定义语句 BEGIN 顺序处理语句 END过程名 3 子程序语句描述 函数语句FUNCTION函数名 参数1 参数2 RETURN数据类型名IS 定义语句 BEGIN 顺序处理语句 RETURN 返回变量名 END函数名 FUNCTIONmin x y INTEGER RETURNINTEGERISBEGINIFX YTHENRETURN x ELSERETURN y ENDIF ENDmin 例2 8 FUNCTION语句应用举例 PROCEDUREvector to int q ININTEGER x flag OUTBOOLEAN z I
13、NSTD LOGIC VECTOR ISBEGINq 0 x flag FALSE FORiINz RANGELOOPq q 2 IF z i 1 THENq q 1 ELSEIF z i 0 THENx flag TRUE ENDIF ENDLOOP ENDvector to int 例2 9 PROCEDURE语句应用 2 2 3库库是经编译后的数据的集合 它存放包定义 实体定义 构造定义和配置定义 使设计者可以共享已经编译的设计结果 VHDL中常用的库如下 IEEE库IEEE库中包含IEEE标准的程序包 包括STD LOGIC 1164 NUMERIC BIT NUMERIC STD以及
14、其他一些程序包 其中STD LOGIC 1164是最主要的程序包 大部分可用于可编程逻辑器件的程序包都以这个程序包为基础 STD库STD库包含STANDARD和TEXTIO程序包 STANDARD程序包中定义了许多基本的数据类型 子类型和函数 TEXTIO是文件输入 输出程序包 是VHDL语言标准定义的 在VHDL的编译和综合过程中 系统都能自动调用因此不必在程序开始处打开该库及其程序包 WORK库WORK库是VHDL的现行工作库 用于存放用户设计和定义的一些单元和程序包 在使用该库时无需进行任何说明 VITAL库使用VITAL可以提高门级时序仿真的精度 一般在VHDL语言程序进行仿真时使用
15、主要包含两个程序包 VITAL timing 时序仿真包 VITAL primitives 基本单元程序包 现在的EDA开发工具都已将VITAL库的程序包加到IEEE库了 在使用库之前 一定要进行库说明和包说明 库和包的说明格式LIBRARY库名 USE库名 程序包名 项目名 all 2 2 4程序包包中罗列VHDL中用到的信号定义 常数定义 数据类型 元件语句 函数定义和过程定义 它是一个可编译的设计单元 也是库结构中的一个层次 使用包时可以用USE语句说明 例如 USEIEEE STD LOGIC 1164 ALL 程序包分为包首和包体 1 程序包首格式PACKAGE包名IS 说明语句 E
16、ND包名 2 程序包体格式PACKAGEBODY包名IS 说明语句 END PACKAGEBODY 包名 PACKAGElogicISTYPEthree level logicIS 0 1 z CONSTANTunknown value three level logic 0 FUNCTIONinvert input three level logic RETURNthree level logic ENDlogic 例2 10 程序包首 PACKAGEBODYLOGICISFUNCTIONinvert input three level logic returnthree level logicisbenginCaseinputiswhen 0 return 1 when 1 return 0 when z return z Endcase Endinvert Endlogic 例2 11 程序包体 配置用于在多结构体中为一个实体指定一个结构体 例如 在做RS触发器的实体中使用了2个结构体 目的是研究各个结构体描述的RS触发器的行为性能如何 但是究竟在仿真中使用哪一个结构体的问题就是