VHDL编程基础

上传人:cl****1 文档编号:568327685 上传时间:2024-07-24 格式:PPT 页数:288 大小:1.52MB
返回 下载 相关 举报
VHDL编程基础_第1页
第1页 / 共288页
VHDL编程基础_第2页
第2页 / 共288页
VHDL编程基础_第3页
第3页 / 共288页
VHDL编程基础_第4页
第4页 / 共288页
VHDL编程基础_第5页
第5页 / 共288页
点击查看更多>>
资源描述

《VHDL编程基础》由会员分享,可在线阅读,更多相关《VHDL编程基础(288页珍藏版)》请在金锄头文库上搜索。

1、EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社VHDL编程基础编程基础7/24/20241EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第2页第一讲 VHDL编程基础 1.1 1.1 概述概述 1.2 VHDL1.2 VHDL程序基本结构程序基本结构 1.3 VHDL1.3 VHDL语言要素语言要素 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第3页1.1 1.1 概概 述述1.1.1 1.1.1 常用硬件描述语言简介常用硬件描述语言简介7/2

2、4/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第4页1.2 VHDL1.2 VHDL程序基本结构程序基本结构1.2.1 VHDL1.2.1 VHDL程序设计举例程序设计举例1) 1) 或门的逻辑描述或门的逻辑描述 LIBRARY IEEE LIBRARY IEEE;- IEEE- IEEE库的使用说明库的使用说明 USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL; ENTITY OR2 IS ENTITY OR2 IS -实体实体OR2OR2的说明的说明 PORT(A PORT(

3、A,B B:IN STD_LOGICIN STD_LOGIC; C C:OUT STD_LOGIC)OUT STD_LOGIC); END ENTITY OR2END ENTITY OR2; -实体实体OR2OR2的结构体的结构体ART1ART1的说明的说明 ARCHITECTURE ART1 OF OR2 ISARCHITECTURE ART1 OF OR2 IS BEGIN BEGIN C=A OR B C=A OR B; END ARCHITECTURE ART1END ARCHITECTURE ART1; 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程

4、清华大学出版社清华大学出版社第5页2) 2) 半加器的逻辑描述半加器的逻辑描述 - IEEE- IEEE库的使用说明库的使用说明 LIBRARY IEEE LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL; -实体实体H_ADDERH_ADDER的说明的说明 ENTITY H_ADDER ISENTITY H_ADDER IS PROT(A PROT(A,B B:IN STD_LOGICIN STD_LOGIC; COCO,SOSO:OUT STD_LOGIC)OUT STD_LOGIC); END ENT

5、ITY H_ADDEREND ENTITY H_ADDER; - - 实体实体H_ADDERH_ADDER的结构体的结构体ART2ART2的说明的说明 ARCHITECTURE ART2 OF H_ADDER ISARCHITECTURE ART2 OF H_ADDER IS BEGIN BEGIN SO=A XOR B SO=A XOR B; CO=A AND BCO=A AND B; END ARCHITECTURE ART2END ARCHITECTURE ART2; 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第6页1.2

6、.2 VHDL1.2.2 VHDL程序的基本结构程序的基本结构7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第7页1.2.3 1.2.3 库库用来存储预先完成的程序包和数据集合体的仓库。用来存储预先完成的程序包和数据集合体的仓库。语句格式:语句格式:LIBRARY LIBRARY 库名;库名;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第8页种类:种类:IEEEIEEE库、库、STDSTD库、库、WORKWORK库、库、VITALVITAL库库用法:用法:a aUSE

7、USE 库名库名. .程序包名程序包名. .项目名;项目名;b bUSE USE 库名库名. .程序包名程序包名.ALL.ALL;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第9页例:例: LIBRARY IEEELIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALLUSE IEEE.STD_LOGIC_UNSIGNED.ALL;7/24/2024EDA技术及技术及CPLD/FPGA应

8、用简明教程应用简明教程 清华大学出版社清华大学出版社第10页1.2.4 1.2.4 实体实体(ENTITY)(ENTITY)1 1实体语句结构实体语句结构实体说明单元的常用语句结构如下:实体说明单元的常用语句结构如下: ENTITY ENTITY 实体名实体名 ISIS GENERIC( GENERIC(类属表类属表) ); PORT( PORT(端口表端口表) ); END ENTITY END ENTITY 实体名;实体名; 实实体体是是对对设设计计实实体体与与外外部部电电路路进进行行接接口口描描述述,是是设计实体经封装后对外的一个通信界面。设计实体经封装后对外的一个通信界面。7/24/2

9、024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第11页3 3PORTPORT端口说明端口说明书写格式:书写格式: PORT(PORT(端口名:端口模式端口名:端口模式 数据类型;数据类型; 端口名:端口模式端口名:端口模式 数据类型数据类型);端口名端口名:实体的每一个对外通道的名字:实体的每一个对外通道的名字端口模式端口模式:数据流动方式(:数据流动方式(4类)类)数据类型数据类型:数据的表达格式(主要:数据的表达格式(主要2类)类)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第

10、12页1.2.5 1.2.5 结构体结构体(ARCHITECTURE)(ARCHITECTURE) 结构体是用于描述设计实体的内部结构以结构体是用于描述设计实体的内部结构以及实体端口间的逻辑关系。及实体端口间的逻辑关系。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第13页7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第14页 语句格式:语句格式: ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 ISIS 说明语句说明语句

11、BEGIN BEGIN 功能描述语句功能描述语句 END ARCHITECTURE END ARCHITECTURE 结构体名;结构体名;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第15页结构体说明语句:结构体说明语句: 对结构体的功能描述语句中将要用到的信号对结构体的功能描述语句中将要用到的信号(SIGNAL)(SIGNAL)、数据类型数据类型(TYPE)(TYPE)、常数常数(CONSTANT)(CONSTANT)、元件元件(COMPONENT)(COMPONENT)、函数函数(FUNCTION)(FUNCTION)和过程和

12、过程(PROCEDURE)(PROCEDURE)等等加以说明的语句。加以说明的语句。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第16页功能描述语句:功能描述语句: 功能描述语句结构可以含有五种不同类型(功能描述语句结构可以含有五种不同类型(块语块语句、进程语句、子程序调用语句、信号赋值语句和元句、进程语句、子程序调用语句、信号赋值语句和元件例化语句件例化语句)的,以并行方式工作的语句结构。而在)的,以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运

13、行的逻辑描述语句。句或顺序运行的逻辑描述语句。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第17页1.3 VHDL1.3 VHDL语言要素语言要素1.3.1 VHDL1.3.1 VHDL文字规则文字规则7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第18页1 1 数字型文字数字型文字整数文字:整数文字:整数都是十进制的数,如:5,678,0,156E2(=15600),45_234_287(=45234287)实数文字:实数文字:实数也都是十进制的数,但必须带有小数点,

14、如:1.335,88_670_551.453_909(=88670551.453909),1.0,44.99E-2(=0.4499)以数制基数表示的文字:以数制基数表示的文字:用这种方式表示的数由五个部分组成。SIGNAL d1,d2,d3,d4,d5, : INTEGER RANGE 0 TO 255;d1 = 110#170# ; - (十进制表示,等于十进制表示,等于 170)d2 = 16#FE# ; - (十六进制表示,等于十六进制表示,等于 254)d3 = 2#1111_1110#; - (二进制表示,等于二进制表示,等于 254)d4 = 8#376# ; - (八进制表示,等

15、于八进制表示,等于 254)d5=16#E#E1;-(十六进制表示,等于十六进制表示,等于2#1110000#,等于,等于224)物理量文字物理量文字(VHDL综合器不接受此类文字)。如:60s(60秒秒),100m(100米米),k(千欧姆千欧姆),177A(177安培安培)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第19页2 2 字符串型文字字符串型文字(1)文字字符串)文字字符串(2)数位字符串)数位字符串ERROR , Both S and Q equal to 1 , X , BB$CC B:二进制基数符号,表示二进制

16、位二进制基数符号,表示二进制位0或或1,在字符串中的每位表示一个,在字符串中的每位表示一个Bit。O:八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个八进制基数符号,在字符串中的每一个数代表一个八进制数,即代表一个3位位(BIT)的二进制数。的二进制数。X:十六进制基数符号十六进制基数符号(0F),代表一个十六进制数,即一个代表一个十六进制数,即一个4位的二进制数。位的二进制数。data1 = B1_1101_1110 - data1 = B1_1101_1110 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是9 9data2 = O15 - data2 = O1

17、5 - 八进制数数组,位矢数组长度是八进制数数组,位矢数组长度是6 6data3 = XAD0 - data3 = XAD0 - 十六进制数数组,位矢数组长度是十六进制数数组,位矢数组长度是1212data4 = B101_010_101_010 - data4 = B101_010_101_010 - 二进制数数组,位矢数组长度是二进制数数组,位矢数组长度是1212data5 = 101_010_101_010 -data5 = 101_010_101_010 -表达错误,缺表达错误,缺B B。data6 = 0AD0 -data6 = 0AD0 -表达错误,缺表达错误,缺X X。7/24/

18、2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第20页3 3 标识符标识符规则:规则:* *有有效效的的字字符符:包包括括2626个个大大小小写写英英文文字字母母,数数字字包包括括0 09 9 以及下划线以及下划线“_”“_”。* *任何标识符必须以英文字母开头。任何标识符必须以英文字母开头。* *必须是单一下划线必须是单一下划线“_”“_”,且其前后都必须有英文字,且其前后都必须有英文字母或数字。母或数字。* *标识符中的英语字母不分大小写。标识符中的英语字母不分大小写。* *允许包含图形符号允许包含图形符号( (如回车符、换行符等如回车符

19、、换行符等) ),也允许,也允许包含空格符。包含空格符。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第21页4 4 下标名下标名SIGNAL aSIGNAL a,b : BIT_VECTOR (0 TO 3) ;b : BIT_VECTOR (0 TO 3) ;z = b(3) ; z = b(3) ; 语句格式:语句格式: 数数组组类类型型信信号号名名或或变变量量名名( (表表达达式式1 1 TO/DOWNTO TO/DOWNTO 表达式表达式2)2);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教

20、程 清华大学出版社清华大学出版社第22页1.3.2 VHDL1.3.2 VHDL数据对象数据对象7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第23页1 1常量常量(CONSTANT)(CONSTANT)定义形式:定义形式:CONSTANT CONSTANT 常量名:数据类型常量名:数据类型=表达式;表达式;常量定义语句所允许的设计单元有实体、结构体、程常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。序包、块、进程和子程序。常量的使用范围取决于它常量的使用范围取决于它被定义的位置。被定义的位置。7/24/202

21、4EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第24页2 2变量变量(VARIABLE)(VARIABLE)a a变量是一个局部量,只能在进程和子程序中使用变量是一个局部量,只能在进程和子程序中使用b b变量的赋值是一种理想化的数据传输变量的赋值是一种理想化的数据传输c cVHDLVHDL语言规则不支持变量附加延时语句语言规则不支持变量附加延时语句d d变量常用在实现某种算法的赋值语句中变量常用在实现某种算法的赋值语句中7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第25页定义语法格式:

22、定义语法格式:VARIABLE VARIABLE 变量名:数据类型:变量名:数据类型:= =初始值初始值;附值语法格式:附值语法格式:目标变量名目标变量名:=:=表达式;表达式;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第26页3. 3. 信号信号(SIGNAL)(SIGNAL)信号是描述硬件系统的基本数据对象,类似于连接线。信号是描述硬件系统的基本数据对象,类似于连接线。定义语法格式:定义语法格式:SIGNAL SIGNAL 信号名:信号名: 数据类型数据类型=初始值;初始值;附值语法格式:附值语法格式: 目标变量名目标变量名

23、=表达式;表达式;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第27页 4 4三者的使用比较三者的使用比较(2) (2) 从行为仿真和从行为仿真和VHDLVHDL语句功能上看,信号与变量的语句功能上看,信号与变量的区别主要表现在接受和保持信号的方式、信息保持与区别主要表现在接受和保持信号的方式、信息保持与传递的区域大小上。传递的区域大小上。(1) (1) 从硬件电路系统来看,所代表的意义不同。从硬件电路系统来看,所代表的意义不同。(3) (3) 从综合后所对应的硬件电路结构来看,信号一般从综合后所对应的硬件电路结构来看,信号一般将

24、对应更多的硬件结构。将对应更多的硬件结构。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第28页1.3.3 1.3.3 数据类型数据类型标量型标量型( (Scalar Type)Scalar Type)复合类型复合类型( (Composite Type)Composite Type)存取类型存取类型( (Access Type)Access Type)文件类型文件类型( (Files Type)Files Type)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第29页1

25、 1 VHDLVHDL的预定义数据类型的预定义数据类型1. 1. 布尔布尔( (BOOLEAN)BOOLEAN)数据类型数据类型2. 2. 位位( (BIT)BIT)数据类型数据类型3. 3. 位矢量位矢量( (BIT_VECTOR)BIT_VECTOR)数据类型数据类型4. 4. 字符字符( (CHARACTER)CHARACTER)数据类型数据类型5. 5. 整数整数( (INTEGER)INTEGER)数据类型数据类型6. 6. 实数实数( (REAL)REAL)数据类型数据类型7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第

26、30页7. 7. 字符串字符串( (STRING)STRING)数据类型数据类型VARIABLE string_var : STRING (1 TO 7 ) ;string_var:=abcd;8. 8. 时间时间( (TIME)TIME)数据类型数据类型TYPE time IS RANGE 2147483647 TO 2147483647 units fs ; - 飞秒,飞秒,VHDL中的最小时间单位中的最小时间单位 ps = 1000 fs ; - 皮秒皮秒 ns = 1000 ps ; - 纳秒纳秒 us = 1000 ns ; - 微秒微秒 ms = 1000 us ; - 毫秒毫秒

27、sec = 1000 ms ; - 秒秒 min = 60 sec ; - 分分 hr = 60 min ; - 时时end units ;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第31页2 2 IEEEIEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量1. 1. 标准逻辑位标准逻辑位STD_LOGICSTD_LOGIC数据类型数据类型2. 2. 标准逻辑矢量标准逻辑矢量( (STD_LOGIC_VECTOR)STD_LOGIC_VECTOR)数据类型数据类型STD_LOGIC_VECTOR类型定义如下:TYPE TYPE

28、STD_LOGIC_VECTOR STD_LOGIC_VECTOR IS IS ARRAY ARRAY ( ( NATURAL NATURAL RANGE ) OF STD_LOGIC ;RANGE ) OF STD_LOGIC ; TYPE TYPE STD_LOGIC STD_LOGIC IS IS (U(U,XX,00,11,ZZ,WW,LL,HH,-)-);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第32页3 3 其他预定义标准数据类型其他预定义标准数据类型1. 1. 无符号数据类型无符号数据类型( (UNSIGNED

29、TYPE)UNSIGNED TYPE)2. 2. 有符号数据类型有符号数据类型( (SIGNED TYPE)SIGNED TYPE)十进制的8可以作如下表示:UNSIGNED(1000)UNSIGNED(1000)两则无符号数据定义的示例:VARIABLE var : UNSIGNED(0 TO 10) ;VARIABLE var : UNSIGNED(0 TO 10) ;SIGNAL sig : UNSIGNED(5 TO 0) ;SIGNAL sig : UNSIGNED(5 TO 0) ;例如:SIGNED(0101) SIGNED(0101) 代表代表 +5 +5,5 5SIGNED(

30、1011) SIGNED(1011) 代表代表 5 57/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第33页4 4 用户自定义数据类型方式用户自定义数据类型方式类型定义语句类型定义语句TYPE语句格式如下:TYPE TYPE 数组类型名数组类型名 IS IS 数据类型定义数据类型定义 OF OF 基本数据类型基本数据类型 ;子类型定义语句子类型定义语句子类型语句格式如下:SUBTYPE SUBTYPE 子类型名子类型名IS IS 基本数据类型基本数据类型 RANGE RANGE 约束范围约束范围 ;7/24/2024EDA技术及技术

31、及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第34页5 5 枚举类型枚举类型 用文字符号表示一组实际的二进制数的类型,一般将第一个枚举量编码为位矢量0,位矢的长度取所有元素的最小值。TYPE M_STATE IS (STATE1,STATE2,STATE3,STATE4,TYPE M_STATE IS (STATE1,STATE2,STATE3,STATE4,STATE5);STATE5);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第35页6 6 整数类型和实数类型整数类型和实数类型TYPE N1

32、IS RANGE 0 TO 100TYPE N1 IS RANGE 0 TO 100 ; -7-7位二进制原码位二进制原码TYPE N2 IS RANGE 0 TO 6TYPE N2 IS RANGE 0 TO 6 ; -3-3位二进制原码位二进制原码7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第36页7 7 数组类型数组类型限定性数组限定性数组限定性数组定义语句格式如下:TYPE TYPE 数组名数组名IS ARRAY (IS ARRAY (数组范围数组范围) )OF OF 数据类型数据类型 ;非限定性数组非限定性数组非限制性数

33、组的定义语句格式如下:TYPE TYPE 数组名数组名IS ARRAY (IS ARRAY (数组下标名数组下标名RANGE RANGE )OF )OF 数据类型数据类型 ;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第37页8 8 记录类型记录类型记录类型的语句格式如下:记录类型的语句格式如下:TYPE 记录类型名 IS RECORD 元素名 : 元素数据类型; 元素名 : 元素数据类型;END RECORD 记录类型名;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社

34、第38页9 9 数据类型转换数据类型转换1 1)类型转换函数)类型转换函数CONV_STD_LOGIC_VECTORCONV_STD_LOGIC_VECTOR、CONV_INTEGERCONV_INTEGER2 2)直接类型转换)直接类型转换数据类型标识符数据类型标识符( (表达式表达式) )7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第39页1.3.4 VHDL1.3.4 VHDL操作符操作符类型操作符功能操作数数据类型关系操作符= =等于等于任何数据类型任何数据类型/=/=不等于不等于任何数据类型任何数据类型 大于大于枚举与整

35、数类型及其一维数组枚举与整数类型及其一维数组=大于等于大于等于枚举与整数类型及其一维数组枚举与整数类型及其一维数组逻辑操作符ANDAND与与BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGICOROR或或BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGICNANDNAND与非与非BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGICNORNOR或非或非BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGICXORXOR异或异或BITBIT、BOOLEANBOOLEAN,STD_LOGICS

36、TD_LOGICXNORXNOR异或非异或非BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGICNOTNOT非非BITBIT、BOOLEANBOOLEAN,STD_LOGICSTD_LOGIC7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第40页类型操作符操作符功能功能操作数数据类型操作数数据类型算术操作符+ +加加整数整数- -减减整数整数& &并置并置一维数组一维数组* *乘乘整数和实数整数和实数/ /除除整数和实数整数和实数MODMOD取模取模整数整数REMREM取余取余整数整数SLLSLL逻辑左移

37、逻辑左移BITBIT或布尔型一维数组或布尔型一维数组SRLSRL逻辑右移逻辑右移BITBIT或布尔型一维数组或布尔型一维数组SLASLA算术左移算术左移BITBIT或布尔型一维数组或布尔型一维数组SRASRA算术右移算术右移BITBIT或布尔型一维数组或布尔型一维数组ROLROL逻辑循环左移逻辑循环左移BITBIT或布尔型一维数组或布尔型一维数组RORROR逻辑循环右移逻辑循环右移BITBIT或布尔型一维数组或布尔型一维数组*乘方乘方整数整数ABSABS取绝对值取绝对值整数整数+ +正正整数整数- -负负整数整数7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清

38、华大学出版社清华大学出版社第41页运算符优先级NOT、ABS、*最高优先级最低优先级*、/、MOD、REM+(正号)、-(负号)+、-、&SLL、SLA、SRL、SRA、ROL、ROR=、/=、=AND、OR、NAND、NOR、XOR、XNOR7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第42页【例】【例】 SIGNAL a ,b,c : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d,e,f,g : STD_LOGIC_VECTOR (1 DOWNTO 0) ; SIGNAL h,I,j,k :

39、 STD_LOGIC ; SIGNAL l,m,n,o,p : BOOLEAN ; . a=b AND c; -b、c 相与后向相与后向a赋值,赋值,a、b、c的数据类型同属的数据类型同属4位长的位矢量位长的位矢量 d=e OR f OR g ; - 两个操作符两个操作符OR相同,不需括号相同,不需括号 l=(m XOR n)AND(o XOR p); - 操作符不同,必须加括号操作符不同,必须加括号 h=i AND j AND k ; - 两个操作符都是两个操作符都是AND,不必加括号不必加括号 h=i AND j OR k ; - 两个操作符不同,未加括号,表达错误两个操作符不同,未加括号

40、,表达错误 a=b AND e ; - 操作数操作数b 与与 e的位矢长度不一致,表达错误的位矢长度不一致,表达错误 h=i OR l ; - i 的数据类型是位的数据类型是位STD_LOGIC,而而l的数据类型是的数据类型是.-布尔量布尔量BOOLEAN,因而不能相互作用,表达错误。因而不能相互作用,表达错误。1 1 逻辑操作符逻辑操作符7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第43页2 2 关系操作符关系操作符【例】【例】 ENTITY relational_ops_1 IS PORT ( a,b : IN BITVECT

41、OR (0 TO 3) ; m : OUT BOOLEAN) ; END relational_ops_1 ; ARCHITECTURE example OF relational_ops_1 IS BEGIN m ”(“ ”(大于大于) )、“ ”(“=”(“=”(大于等大于等于于) )“=”(“=”(小于等小于等于于) )7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第44页3 3 算术操作符算术操作符类别算术符求和操作符+(加)、-(减)、&(并置)求积操作符*、/、MOD、REM符号操作符+(正号)、-(负号)混合操作符AB

42、S、*移位操作符SLL、SLA、SRL、SRA、ROL、ROR7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第45页4 4 各种操作符的使用说明各种操作符的使用说明(1) (1) 严严格格遵遵循循在在基基本本操操作作符符间间操操作作数数是是同同数数据据类类型型的的规规则则;严严格格遵遵循循操操作作数数的的数数据据类类型型必必须须与与操操作作符符所所要要求的数据类型完全一致的规则。求的数据类型完全一致的规则。(2) (2) 注意操作符之间的优先级别。当一个表达式中有注意操作符之间的优先级别。当一个表达式中有两个以上的算符时,可使用括号

43、将这些运算分组。两个以上的算符时,可使用括号将这些运算分组。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第46页第二讲 VHDL顺序语句2.1 2.1 赋值语句赋值语句 2.2 2.2 转向控制语句转向控制语句 2.3 2.3 空操作语句空操作语句 2.4 2.4 其它语句和说明其它语句和说明 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第47页7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第48页2.1

44、2.1 赋值语句赋值语句变量赋值:变量赋值:局部特征、无延时局部特征、无延时信号赋值:信号赋值:全局特征、有延时全局特征、有延时语法格式:语法格式: 变量赋值目标变量赋值目标:=:= 赋值源;赋值源;语法格式:语法格式: 信号赋值目标信号赋值目标 = 赋值源;赋值源;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第49页【例例】SIGNAL S1SIGNAL S1:STD_LOGICSTD_LOGIC;SIGNAL SVEC SIGNAL SVEC :STD_LOGIC_VECTOR(0 TO 3)STD_LOGIC_VECTOR(

45、0 TO 3);PROCESS(S1)PROCESS(S1)VARIABLE V1VARIABLE V1:STD_LOGICSTD_LOGIC;BEGINBEGIN V1 := 1 V1 := 1; -立即将立即将V1V1置位为置位为1 1 S1 = 1 S1 = 1; -由于在本进程中,这里的由于在本进程中,这里的S1S1不是最后一不是最后一个赋值语句故不作任何赋值操作个赋值语句故不作任何赋值操作7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第50页SVEC(0) = V1SVEC(0) = V1; -将将V1V1在上面的赋值在上

46、面的赋值1 1,赋给,赋给SVEC(0)SVEC(0)SVEC(1) = S1SVEC(1) = S1; -将最下面的赋予将最下面的赋予S1S1的值的值00,赋给,赋给SVEC(1)SVEC(1) V1 := 0 V1 := 0; -将将V1V1置入新值置入新值0 0 S1 = 0 S1 = 0; -由于这是由于这是S2S2最后一次赋值,赋值有效,最后一次赋值,赋值有效,-此此00将上面准备赋入的将上面准备赋入的11覆盖掉覆盖掉SVEC(2) = V1SVEC(2) = V1; -将将V1V1在上面的赋值在上面的赋值0 0,赋给,赋给SVEC(2)SVEC(2)SVEC(3) = S1SVEC

47、(3) = S1; -将将S1S1在上面的赋值在上面的赋值0 0,赋给,赋给SVEC(3)SVEC(3)END PROCESSEND PROCESS;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第51页赋值目标赋值目标段下标元素赋值目标及集合块赋值段下标元素赋值目标及集合块赋值目标目标【例例】 VARIABLE A VARIABLE A,B B:STD_LOGIC_VECTOR (1 TO 4)STD_LOGIC_VECTOR (1 TO 4); A (1 TO 2) :=10 A (1 TO 2) :=10 ; A (4 DOW

48、NTO 1) :=1011 A (4 DOWNTO 1) :=1011;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第52页2.2 2.2 转向控制语句转向控制语句(1 1) IF IF 语句语句(2 2) CASE CASE 语句语句7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第53页(1 1)IFIF语句语句语句结构:语句结构:IF IF 条件句条件句 THEN THEN 顺序语句顺序语句ELSIF ELSIF 条件句条件句 THENTHEN 顺序语句顺序语句 ;

49、ELSEELSE 顺序语句顺序语句 ;END IFEND IF7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第54页【例例】7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第55页LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;ENTITY CONTROL_STMTS ISENTITY CONTROL_STMTS IS PORT (A PORT (A,B B,C

50、C: IN BOOLEAN IN BOOLEAN; OUTPUT OUTPUT:OUT BOOLEAN)OUT BOOLEAN);END CONTROL_STMTSEND CONTROL_STMTS;ARCHITECTURE EXAMPLE OF CONTROL_STMTS ISARCHITECTURE EXAMPLE OF CONTROL_STMTS ISBEGINBEGIN7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第56页 PROCESS(A PROCESS(A,B B,C)C) VARIABLE N VARIABLE N:

51、 BOOLEAN BOOLEAN; BEGIN BEGIN IF A THEN N IF A THEN N:=B=B; ELSE N ELSE N:=C=C; END IF END IF; OUTPUT =N OUTPUT =顺序语句;顺序语句; WHEN WHEN 选择值选择值 =顺序语句;顺序语句; WHEN OTHERS = WHEN OTHERS =顺序语句;顺序语句; END CASE END CASE;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第58页选择值的表达方式:选择值的表达方式: 单个普通数值,如单个普通数值

52、,如4 4; 数值选择范围,如数值选择范围,如(2 TO 4)(2 TO 4),表示取值表示取值2 2、3 3或或4 4; 并列数值,如并列数值,如3 | 53 | 5,表示取值为,表示取值为3 3或者或者5 5; 混合方式,以上三种方式的混合。混合方式,以上三种方式的混合。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第59页注意点:注意点:(1)(1) 条件句中的选择值必须在表达式的取值范围内。条件句中的选择值必须在表达式的取值范围内。(2)(2) 除非所有条件句中的选择值能完整覆盖除非所有条件句中的选择值能完整覆盖CASECA

53、SE语句语句中表达式的取值,否则最末一个条件句中的选择必须中表达式的取值,否则最末一个条件句中的选择必须用用“OTHERS”OTHERS”表示。表示。(3)(3) CASE CASE语句中每一条件句的选择只能出现一次,不语句中每一条件句的选择只能出现一次,不能有相同选择值的条件语句出现。能有相同选择值的条件语句出现。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第60页4 4选选1 1多路选择器多路选择器7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第61页用用CASEC

54、ASE语句描述语句描述4 4选选1 1多路选择器:多路选择器:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX41 IS PORT(S1,S2: IN STD_LOGIC; A,B,C,D:IN STD_LOGIC; Z: OUT STD_LOGIC);END ENTITY MUX41;ARCHITECTURE ART OF MUX41 IS SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第62页BEG

55、INSZZZZZ TMP:= REGA AND REGB; WHEN “101”= TMP:= REGA OR REGB; WHEN “110”= TMP:= NOT REGA; WHEN OTHERS = NULL;END CASE;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第65页2.4 2.4 其他语句和说明其他语句和说明综合器支持的属性有:LEFTLEFT、RIGHTRIGHT、HIGHHIGH、LOWLOW、RANGERANGE、REVERS REVERS RANGERANGE、LENGTHLENGTH、EVENTEV

56、ENT及及STABLESTABLE。一一 属性描述与定义语句属性描述与定义语句语句格式:语句格式: 属性测试项目名属性测试项目名属性标识符属性标识符7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第66页分类分类属性名称属性名称举例举例信号类信号类eventeventclkclkeventevent and and clkclk= =1 1 -检测时钟在上升沿有效检测时钟在上升沿有效clkclkeventevent and and clkclk= =0 0 -检测时钟在下降沿有效检测时钟在下降沿有效两个函数:两个函数:rising_e

57、dge(clkrising_edge(clk) )、falling_edge(clkfalling_edge(clk) )数组类数组类lengthlength若对某数组变量的定义为若对某数组变量的定义为variable bytevariable byte:bit_vector(3 bit_vector(3 downtodownto 0) 0)则变量则变量bytebyte的相关属性如下:的相关属性如下:bytebytelengthlength - -值为值为4 4bytebyteleftleft - -值为值为3 3bytebyterightright - -值为值为0 0bytebytelow

58、low - -值为值为0 0bytebytehighhigh - -值为值为3 3bytebyterangerange - -值为值为3 3 downtodownto 0 0bytebytereverse_rangereverse_range - -值为值为0 to 30 to 3数值类数值类leftleftrightrightlowlowhighhigh范围类范围类rangerange reverse_reverse_rangerange7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第67页第三讲 VHDL并发语句 3.1 3.1

59、 并行信号赋值语句并行信号赋值语句 3.2 3.2 进程语句进程语句 3.3 3.3 块语句块语句 3.4 3.4 元件例化语句元件例化语句 3.5 3.5 生成语句生成语句 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第68页并行语句所在位置:并行语句所在位置:ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 ISIS 说明语句说明语句 BEGINBEGIN 并行语句并行语句END ARCHITECTURE END ARCHITECTURE 结构体名结构体名7/24/2024EDA技

60、术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第69页3.1 3.1 并行信号赋值语句并行信号赋值语句1. 1. 简单信号赋值语句简单信号赋值语句赋值目标赋值目标 = = 表达式表达式ARCHITECTURE curt OF bc1 ISARCHITECTURE curt OF bc1 ISSIGNAL s1, e, f, g, h : STD_LOGIC ;SIGNAL s1, e, f, g, h : STD_LOGIC ;BEGINBEGIN output1 = a AND b ; output1 = a AND b ; output2 = c + d

61、 ; output2 = c + d ; g = e OR f ; g = e OR f ; h = e XOR f ; h = e XOR f ; s1 = g ; s1 = g ;END ARCHITECTURE curtEND ARCHITECTURE curt;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第70页2. 2. 条件信号赋值语句条件信号赋值语句赋值目标赋值目标 = = 表达式表达式 WHEN WHEN 赋值条件赋值条件 ELSEELSE 表达式表达式 WHEN WHEN 赋值条件赋值条件 ELSEELSE .

62、. 表达式表达式 ;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第71页【例】【例】 ENTITY mux IS PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT ); END; ARCHITECTURE behv OF mux IS BEGIN z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; END;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第72页3. 3. 选择

63、信号赋值语句选择信号赋值语句WITH WITH 选择表达式选择表达式 SELECT SELECT 赋值目标信号赋值目标信号 = =表达式表达式 WHEN WHEN 选择值选择值表达式表达式 WHEN WHEN 选择值选择值.表达式表达式 WHEN WHEN 选择值;选择值;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第73页.WITH selt SELECTmuxout = a WHEN 0|1 , b WHEN 2 TO 5 , c WHEN 6 , d WHEN 7 , Z WHEN OTHERS ; .7/24/2024ED

64、A技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第74页3.2 3.2 进程语句进程语句 进程进程(PROCESS)(PROCESS)语句是语句是最具最具VHDLVHDL语言特色语言特色的语句。因为它提供了一种用算法的语句。因为它提供了一种用算法( (顺序语句顺序语句) )描述硬件行为的方法。描述硬件行为的方法。 进程语句是进程语句是VHDLVHDL程序中程序中使用最频繁使用最频繁和最和最能体现能体现VHDLVHDL语言特点的一种语句,其语言特点的一种语句,其原因原因大大概是由于它的并行和顺序行为的双重性,以概是由于它的并行和顺序行为的双重性,以及其行为描

65、述风格的特殊性。及其行为描述风格的特殊性。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第75页语句格式:语句格式: 进程标号:进程标号:PROCESS(PROCESS(敏感信号参数表敏感信号参数表)IS)IS 进程说明部分进程说明部分 BEGINBEGIN顺序描述语句顺序描述语句END PROCESSEND PROCESS进程标号进程标号 ;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第76页(2) (2) 顺序描述语句部分可分为赋值语句、进程启动语句、顺序描述语句部

66、分可分为赋值语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句等。子程序调用语句、顺序描述语句和进程跳出语句等。PROCESS PROCESS 组成:组成:(1) (1) 进程说明部分主要定义一些局部量,可包括数据类型、进程说明部分主要定义一些局部量,可包括数据类型、常数、属性、子程序等。常数、属性、子程序等。注意:注意:在进程说明部分中不允许在进程说明部分中不允许定义信号和共享变量。定义信号和共享变量。(3) (3) 敏感信号参数表列出用于启动本进程的信号名。敏感信号参数表列出用于启动本进程的信号名。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程

67、清华大学出版社清华大学出版社第77页(1) (1) 同一结构体中的进程之间是并行运行的,但同一同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的。进程中的逻辑描述语句则是顺序运行的。 进程设计要点:进程设计要点:(2) (2) 进程的激活必须由敏感信号表中定义的任一敏感进程的激活必须由敏感信号表中定义的任一敏感信号的变化来启动。信号的变化来启动。(3) (3) 结构体中多个进程能并行同步运行的原因是进程结构体中多个进程能并行同步运行的原因是进程之间的通信是通过传递信号和共享变量值来实现的。之间的通信是通过传递信号和共享变量值来实现的。(4) (4) 进程是重要的建模工

68、具。进程是重要的建模工具。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第78页3.3 3.3 块语句结构(块语句结构(BLOCKBLOCK)语句格式:语句格式:块标号块标号 : : BLOCK BLOCK (块保护表达式)块保护表达式) 接口说明接口说明 类属说明类属说明 BEGINBEGIN 并行语句并行语句 END BLOCK END BLOCK 块标号块标号 ; ;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第79页【例】【例】 Half_AdderHalf_A

69、dder : Block : BlockBeginBegin Sum = A Sum = A XorXor B; B;Carry = A and B;Carry = A and B;End Block End Block Half_AdderHalf_Adder; ;Half_SubtractorHalf_Subtractor: Block: BlockBeginBeginDifference = A Difference = A XorXor B; B; Borrow = Not A and B; Borrow = 连连接接端端口口名名,.) ; - - 元件例化语句元件例化语句7/24/2

70、024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第81页接口表达的两种方式:接口表达的两种方式:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第82页7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第83页【例例】LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;ENTITY ND2 ISENTITY ND2 IS P

71、ORT(A PORT(A,B B:IN STD_LOGICIN STD_LOGIC; C C:OUT STD_LOGIC)OUT STD_LOGIC);END ND2END ND2;ARCHITECTURE ARTND2 OF ND2 ISARCHITECTURE ARTND2 OF ND2 IS BEGIN BEGIN Y=A NAND B YC1ND2 PORT MAP (A=C1,C=YC=Y,B=D1)B=D1);-名字关联方式名字关联方式U3U3:ND2 PORT MAP (XND2 PORT MAP (X,Y Y,C=Z1)C=Z1); -混合关联方式混合关联方式END ARCHI

72、TECTURE ARTORD41END ARCHITECTURE ARTORD41;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第86页硬件描述语言硬件描述语言VHDL的编程基础的编程基础l3.1 概述 l3.2 VHDL程序基本结构 l3.3 VHDL语言要素 l3.4 VHDL顺序语句 l3.5 VHDL并行语句 l3.6 子程序(SUBPROGRAM) l3.7 VHDL描述风格 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第3章 硬件描述语言VHDL的编程基础

73、教学目标教学重点教学过程7/24/202487EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第88页第3章教学目标n解解VHDL语言特点和语言特点和VHDL的优点的优点 n掌握掌握VHDL的程序设计约定的程序设计约定 n理解和掌握理解和掌握VHDL描述的语法结构描述的语法结构n掌握掌握VHDL程序的基本结构和设计数字电路特点程序的基本结构和设计数字电路特点n 掌握完整而典型的掌握完整而典型的VHDL设计实例设计实例7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第89页第3章教学重点 l掌握

74、掌握VHDL的程序设计约定的程序设计约定 l理解和掌握理解和掌握VHDL描述的语法结构描述的语法结构l掌握掌握VHDL程序的基本结构和设计数字电路特点程序的基本结构和设计数字电路特点l掌握典型的掌握典型的VHDL实例设计方法实例设计方法7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第90页 数字系统设计分为硬件设计和软件设计数字系统设计分为硬件设计和软件设计, 但是随着计算但是随着计算机技术、超大规模集成电路(机技术、超大规模集成电路(CPLD、FPGA)的发展和硬的发展和硬件描述语言(件描述语言(HDL, Hardware Des

75、cription Language)的出现,软、硬件设计之间的界限被打破,数字系统的硬的出现,软、硬件设计之间的界限被打破,数字系统的硬件设计可以完全用软件来实现,只要掌握了件设计可以完全用软件来实现,只要掌握了HDL语言就可语言就可以设计出各种各样的数字逻辑电路。以设计出各种各样的数字逻辑电路。3.1 概述 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第91页3.1.1 什么是VHDL及VHDL语言的发展历史n 以前很多以前很多ASIC制造商都自己开发了制造商都自己开发了HDL语言,存在着很语言,存在着很大的差异,工程师一旦选用

76、某种硬件描述语言作为输入工具,大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计工程师就被束缚在这个硬件设计环境之中。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。目前常用硬件描述语言有的设计环境。目前常用硬件描述语言有VHDL、Verilog和和ABEL语言,利用硬件描述语言使数字系统设计更加简单和语言,利用硬件描述语言使数字系统设计更加简单和容易。容易。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大

77、学出版社第92页n美国国防部在80年代初提出了VHSIC(Very High Speed Integrated Circuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第93页n1987年底, VHDL被IEEE ( The Institute of

78、 Electrical and Electronics Engineers)和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。n此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第94页n1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1

79、076-1993版本。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog语言将承担起几乎全部的数字系统设计任务。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第95页3.1.2 VHDL的作用n1VHDL打破软硬件的界限n传统的数字系统设计方法是硬件设计由硬件设计者承担,软件设计由软件设计者承担,二者没有交流。VHDL语言是用软件的方式设计系统,即使不懂硬件电路也可以设计出一个硬件系统;所以硬

80、件描述语言是现代电子设计者与EDA工具的桥梁,EDA工具及VHDL语言的流行使电子系统向集成化、大规模、高速度等方向发展。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第96页n2VHDL与C、C+的比较n 正如用C、C+代替汇编语言设计系统软件那样,用VHDL语言代替原理图、逻辑状态图等。n3VHDL与原理图描述的比较n VHDL具有较强的抽象描述能力,可进行系统行为级别的描述。描述简洁,效率更高。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第97页n VHDL描述与

81、实现工艺无关。而电路原理图描述必须给出完整的具体电路结构图,不能进行抽象描述。描述复杂且效率低。电路原理图描述与实现工艺有关(当功能变时必须重新设计,造成资源浪费,效率低)。n VHDL具有较高抽向描述能力7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第98页3.1.3 VHDL语言特点n系统硬件描述能力强,设计效率高,具有较高的抽象描述能力。如:一个可置数的16位计数器原理图是一个很庞大的图,一般用一个人一天才能设计出来,而用VHDL语言设计很简单,仅十几条语句,非常间洁, 效率很高。且对电路的修改非常方便。nVHDL语言可读性强

82、,易于修改和发现错误。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第99页nVHDL具有丰富的仿真语句和库函数,可对VHDL的源代码进行早期的功能仿真,有利于系统的分析与验证。nVHDL设计与硬件的关系不大。(可以不考虑电路器件)nVHDL不依赖于器件,与工艺无关。n移植性好7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第100页n采用自下而上的设计方法,即:Top-Down和CE(并行工程)设计思想。n上市时间快,成本低。n易于ASIC实现nVHDL有以下描述风格n

83、行为描述、数据流(寄存器传输RTL)描述和结构化描述。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第101页n3.1.4 VHDL与其它硬件描述语言的比较行为级RTL级门电路级7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第102页nVHDL起源于美国国防部的VHSIC,Verilog起源于集成电路的设计,ABEL则来源于可编程逻辑器件的设计。下面从使用方面将三者进行对比。n(1) 逻辑描述层次:一般的硬件描述语言可以在三个层次上进行电路描述,其层次由高到低依次可分为行

84、为级、RTL级和门电路级。VHDL语言是一种高级描述语言,适用于行为级和RTL级的描述,最适于描述电路的行为;Verilog语言和ABEL语言是一种较低级的描述语言,适用于RTL级和门电路级的描述,而ABEL最适于描述门级电路。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第103页n(2) 设计要求:VHDL进行电子系统设计时可以不了解电路的结构细节,设计者所做的工作较少;Verilog和ABEL语言进行电子系统设计时需了解电路的结构细节,设计者需做大量的工作。n(3) 综合过程:任何一种语言源程序,最终都要转换成门电路级才能被

85、布线器或适配器所接受。因此,VHDL语言源程序的综合通常要经过行为级RTL级门电路级的转化,VHDL几乎不能直接控制门电路的生成。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第104页n而Verilog语言和ABEL语言源程序的综合过程要稍简单,即经过RTL级门电路级的转化,易于控制电路资源。 n(4) 对综合器的要求:VHDL描述语言层次较高,不易控制底层电路,因而对综合器的性能要求较高,Verilog和ABEL对综合器的性能要求较低。n(5) 支持的EDA工具:支持VHDL和Verilog的EDA工具很多,但支持ABEL的综

86、合器仅仅Dataio一家。n(6) 国际化程度:VHDL和Verilog已成为IEEE标准,而ABEL正朝国际化标准努力 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第105页3.1.5 VHDL的优点nVHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件、一个电路模块或一个系统)分成外部(或称可视部分,即端口)和内部(或称不可视部分),即设计实体的内部功能和算法

87、完成部分。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第106页n在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的,具体如下:n(1) 与其他的硬件描述语言相比,VHDL具有更强的行为描述能力。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社

88、第107页n就目前流行的EDA工具和VHDL综合器而言,将基于抽象的行为描述风格的VHDL程序综合成为具体的FPGA和CPLD等目标器件的网表文件已不成问题,只是在综合与优化效率上略有差异。n(2) VHDL具有丰富的仿真语句和库函数,使得在任何大系统的设计早期,就能查验设计系统的功能可行性,随时可对系统进行仿真模拟,使设计者对整个工程的结构和功能可行性做出判断。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第108页n(3) VHDL语句的行为描述能力和程序结构,决定了它具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求

89、的大规模系统高效、高速的完成必须有多人甚至多个开发组共同并行工作才能实现,VHDL中设计实体的概念、程序包的概念、设计库的概念为设计的分解和并行工作提供了有利的支持。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第109页n(4) 用VHDL完成一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动把VHDL描述设计转变成门级网表(根据不同的实现芯片)。这种方式突破了门级设计的瓶颈,极大地减少了电路设计的时间和可能发生的错误,降低了开发成本。利用EDA工具的逻辑优化功能,可以自动地把一个综合后的设计变成一个更小、更高速的电路系

90、统。反过来,设计者还可以容易地从综合和优化的电路获得设计信息,返回去更新修改VHDL设计描述,使之更加完善。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第110页n(5) VHDL对设计的描述具有相对独立性。设计者可以不懂硬件的结构,也不必管最终设计的目标器件是什么,而进行独立的设计。正因为VHDL的硬件描述与具体的工艺技术和硬件结构无关,所以VHDL设计程序的硬件实现目标器件有广阔的选择范围,其中包括各种系列的CPLD、FPGA及各种门阵列器件。n(6) 由于VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源

91、程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第111页3.1.6 VHDL程序设计约定n为了便于程序的阅读和调试,本书对VHDL程序设计特作如下约定:n(1)VHDL语言由保留关键字组成。每条VHDL语句由一个分号(;)结束。n (2) 语句结构描述中方括号“ ”内的内容为可选内容。n (3) 对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的。本书一般使用大写。例外:、“”所括的字符、字符串大小写意义又别。7/24/2024EDA技术及技术及CPL

92、D/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第112页n(3) 程序中的注释使用双横线“-”。在VHDL程序的任何一行中,双横线“-”后的文字都不参加编译和综合。 n(4) 为了便于程序的阅读与调试,书写和输入程序时,使用层次缩进格式,同一层次的对齐,低层次比较高层次缩进两个字符。n(5) 考虑到MAX+plusII要求源程序文件的名字与实体名必须一致,因此为了使同一个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程序文件的命名均与其实体名一致。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社

93、第113页3.2 VHDL程序基本结构nVHDL语言通常包含实体(Entity),结构体(Architecture),配置(Configuration),包集合(Package),和库(Library)五部分.其中实体用于描述所设计的系统的外部接口信号;结构体用于描述系统内部的结构和行为;建立输入和输出之间的关系;配置语句安装具体元件到实体结构体对,可以被看作是设计的零件清单;包集合存放各个设计模块共享的数据类型、常数和子程序等;库是专门存放预编译程序包的地方。VHDL程序设计基本结构可以用图3. 1表示。下面将详细介绍。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简

94、明教程 清华大学出版社清华大学出版社第114页图 3.1 VHDL程序设计基本结构 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第115页3.2.1 实体n1VHDL设计简述设计简述nVHDL主要用于描述设计系统的结构、行为、功能和主要用于描述设计系统的结构、行为、功能和接口。它将一个设计接口。它将一个设计 (元件、电路、系统)分为:器(元件、电路、系统)分为:器件或件或n子系统子系统ARCHITECTUREn Process ProcessSequentialnProcessCombinationalnProcesscompon

95、entPortsPortsn外部(外部( 可视部分、端口),内部(不可视部分、内部可视部分、端口),内部(不可视部分、内部功能、算法),外部与内部框图可用图功能、算法),外部与内部框图可用图3.2表示。表示。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第116页器件或子系统 ARCHITECTUREARCHITECTURE Process ProcessSequentialProcessCombinationalProcesscomponentPortsPorts图图 3.2 VHDL基本结构框图7/24/2024EDA技术及技术

96、及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第117页2 、实体说明nVHDL的基本设计单元就是实体,无论数字电路复杂还是简单,都是由实体和结构体组成。n实体说明单元的常用语句结构如下:n ENTITY 实体名 ISn GENERIC(类属表);n PORT(端口表); 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第118页nEND 实体名; n其中:n 端口说明是对设计实体中输入和输出接口进行描述,格式如下:n PORT(端口名(,端口名):方向 数据类型名;n 端口名(,端口名):方向 数据类型)

97、;n 端口名是赋予每个系统引脚的名称,一般用几个英文字母组成。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第119页n实体说明单元必须以语句“ENTITY 实体名IS”开始,以语句“END ENTITY 实体名;”结束,其中的实体名是设计者自己给设计实体的命名,可作为其他设计实体对该设计实体进行调用时用。中间在方括号内的语句描述,在特定的情况下并非是必须的。例如构建一个VHDL仿真测试基准等情况中可以省去方括号中的语句。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第1

98、20页3类属(GENERIC)说明语句n类属(GENERIC)参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。类属为所说明的环境提供了一种静态信息通道,类属的值可以由设计实体外部提供。因此,设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。 n类属说明的一般书写格式如下:nGENERIC(常数名;数据类型:设定值n ;常数名:数据类型:设定值 );7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第121页n类属参量以关键词GENERIC引导一个类属参量表,在表中提供

99、时间参数或总线宽度等静态信息。类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。类属说明在所定义的环境中的地位十分接近常数,但却能从环境(如设计实体)外部动态地接受赋值,其行为又有点类似于端口PORT。因此,常如以上的实体定义语句那样,将类属说明放在其中,且放在端口说明语句的前面。 n在一个实体中定义的、可以通过GENERIC参数类属的说明,为它创建多个行为不同的逻辑结构。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第122页n比较常见的情况是选用类属来动态规定一个实体端口的大小,或设计实体的物理特性,或结构体中

100、的总线宽度,或设计实体中、底层中同种元件的例化数量等。一般在结构体中,类属的应用与常数是一样的。例如,当用实体例化一个设计实体的器件时,可以用类属表中的参数项定制这个器件,如可以将一个实体的传输延时、上升和下降延时等参数加到类属参数表中,然后根据这些参数进行定制,这对于系统仿真控制是十分方便的。类属中的常数名是由设计者确定的类属常数名,数据类型通常取INTEGER或TIME等类型,设定值即为常数名所代表的数值。但需注意,综合器仅支持数据类型为整数的类属值。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第123页【例3.2.1】2选

101、1选择器的VHDL语言描述nlibrary ieeenuse ieee.std_logic_1164.all;n entity mux21 ISnPORT(a,b:in std_logic;n S: in std_logicnY: out std_logic);nend mux21.;nARCHITECTURE mux_arch OF mux21 IS7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第124页nBeginn Y=a when s=0 elsenb when s=1 ;nend mux_arch;n上例可分为三部分上例可

102、分为三部分: 第一部分为库和程序包的调用第一部分为库和程序包的调用,第第二部分为端口定义二部分为端口定义,第三部分为结构体部分第三部分为结构体部分,是不不可是不不可见的。见的。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第125页【例例3.2.23.2.2】 2 2输入与门的实体描述。输入与门的实体描述。nlibrary ieeenuse ieee.std_logic_1164.all;n ENTITY AND2 ISn GENERIC(RISEW:TIME:=1 ns;n FALLW:TIME:=1 ns);n PORT( A1

103、:IN STD_LOGIC);n 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第126页n A0:IN STD_LOGIC;n Z0:OUT STD_LOGIC);n END AND2;n这是一个准备作为这是一个准备作为2输入与门的设计实体的实体描述,在输入与门的设计实体的实体描述,在类属说明中定义参数类属说明中定义参数RISEW为上沿宽度,为上沿宽度,FALLW为下沿为下沿宽度,它们分别为宽度,它们分别为 1 ns,这两个参数用于仿真模块的设计。这两个参数用于仿真模块的设计。 7/24/2024EDA技术及技术及CPLD/FPG

104、A应用简明教程应用简明教程 清华大学出版社清华大学出版社第127页4PORT端口说明n由由PORT引导的端口说明语句是对于一个设计实体界引导的端口说明语句是对于一个设计实体界面的说明。实体端口说明的一般书写格式如下:面的说明。实体端口说明的一般书写格式如下:n PORT(端口名:端口模式端口名:端口模式 数据类型;数据类型;n 端口名:端口模式端口名:端口模式 数据类型数据类型); n其中,端口名是设计者为实体的每一个对外通道所取其中,端口名是设计者为实体的每一个对外通道所取的名字;端口模式是指这些通道上的数据流动方式,的名字;端口模式是指这些通道上的数据流动方式,如输入或输出等;数据类型是指

105、端口上流动的数据的如输入或输出等;数据类型是指端口上流动的数据的表达格式。表达格式。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第128页n由于由于VHDL是一种强类型语言,它对语句中的所有操是一种强类型语言,它对语句中的所有操作数的数据类型都有严格的规定。一个实体通常有一作数的数据类型都有严格的规定。一个实体通常有一个或多个端口,端口类似于原理图部件符号上的管脚。个或多个端口,端口类似于原理图部件符号上的管脚。实体与外界交流的信息必须通过端口通道流入或流出。实体与外界交流的信息必须通过端口通道流入或流出。nIEEE 1076标

106、准包中定义了标准包中定义了4种常用的端口模式,各端种常用的端口模式,各端口模式的功能及符号分别见表口模式的功能及符号分别见表3.1和图和图3.3。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第129页n在实际的数字集成电路中,在实际的数字集成电路中,IN相当于只可输入的引脚,相当于只可输入的引脚,OUT相当于只可输出的引脚,相当于只可输出的引脚,BUFFER相当于带输出相当于带输出缓冲器并可以回读的引脚(与缓冲器并可以回读的引脚(与Output类似,但允许该类似,但允许该管脚名作为一些逻辑的输入信号)管脚名作为一些逻辑的输入信号

107、)n,而,而INOUT相当于双向引脚(可代替所有其他模式,相当于双向引脚(可代替所有其他模式,但降低了程序的可读性,一般用于与但降低了程序的可读性,一般用于与CPU的数据总线的数据总线接口)。由图接口)。由图3.3的的INOUT电路可见,此模式的端口是电路可见,此模式的端口是普通输出端口普通输出端口(OUT)加入三态输出缓冲器和输入缓冲器加入三态输出缓冲器和输入缓冲器构成的。构成的。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第130页表表3.1 3.1 端口模式说明端口模式说明n在使用中,端口描述中的数据类型主要有两类:位在使用

108、中,端口描述中的数据类型主要有两类:位(BIT)和位矢量和位矢量(BIT_VECTOR)。若端口的数据类型定义若端口的数据类型定义为为BIT,则其信号值是一个则其信号值是一个1位的二进制数,取值只能位的二进制数,取值只能是是0或或1;若端口数据类型定义为;若端口数据类型定义为BIT_VECTOR,则其则其信号值是一组二进制。信号值是一组二进制。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第131页图3.3 端口模式符号图7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第

109、132页3.2.2 结构体(ARCHITECTURE)nl结构体有三种描述方式结构体有三种描述方式n行为描述行为描述(behavioral)n数据流描述数据流描述(dataflow)n结构化描述结构化描述(structural)n结构体是用于描述设计实体的内部结构以及实体端口结构体是用于描述设计实体的内部结构以及实体端口间的逻辑关系。结构体内部构造的描述层次和描述内间的逻辑关系。结构体内部构造的描述层次和描述内容一般可以用图容一般可以用图3.4来说明。一般地,一个完整的结构来说明。一般地,一个完整的结构体由两个基本层次组成:体由两个基本层次组成:7/24/2024EDA技术及技术及CPLD/F

110、PGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第133页n 对数据类型、常数、信号、子程序和元件等元素的说明部对数据类型、常数、信号、子程序和元件等元素的说明部分。分。n 描述实体逻辑行为的,以各种不同的描述风格表达的功描述实体逻辑行为的,以各种不同的描述风格表达的功能描述语句。能描述语句。n图图3.4 结构体构造图结构体构造图n结构体将具体实现一个实体。每个实体可以有多个结构体,结构体将具体实现一个实体。每个实体可以有多个结构体,每个结构体对应着实体不同结构和算法实现方案,其间的各每个结构体对应着实体不同结构和算法实现方案,其间的各个结构体的地位是同等的,它们完整地实现了实体的

111、行为,个结构体的地位是同等的,它们完整地实现了实体的行为,但同一结构体不能为不同的实体所拥有。结构体不能单独存但同一结构体不能为不同的实体所拥有。结构体不能单独存在,它必须有一个界面说明,即一个实体。在,它必须有一个界面说明,即一个实体。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第134页n对于具有多个结构体的实体,必须用对于具有多个结构体的实体,必须用CONFIGURATION配置语句指明用于综合的结构体配置语句指明用于综合的结构体和用于仿真的结构体,即在综合后的可映射于硬件电和用于仿真的结构体,即在综合后的可映射于硬件电路

112、的设计实体中,一个实体只对应一个结构体。在电路的设计实体中,一个实体只对应一个结构体。在电路中,如果实体代表一个器件符号,则结构体描述了路中,如果实体代表一个器件符号,则结构体描述了这个符号的内部行为。当把这个符号例化成一个实际这个符号的内部行为。当把这个符号例化成一个实际的器件安装到电路上时,则需配置语句为这个例化的的器件安装到电路上时,则需配置语句为这个例化的器件指定一个结构体器件指定一个结构体(即指定一种实现方案即指定一种实现方案),或由编,或由编译器自动选一个结构体。译器自动选一个结构体。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华

113、大学出版社第135页1. 结构体的一般语句格式如下:如下:nARCHITECTURE 结构体名结构体名 OF 实体名实体名 ISn说明语句说明语句 内部信号,常数,数据类型,函数等的定义内部信号,常数,数据类型,函数等的定义nBEGINn 功能描述语句功能描述语句nEND 结构体名;结构体名;n其中,实体名必须是所在设计实体的名字,而结构体名可以由设其中,实体名必须是所在设计实体的名字,而结构体名可以由设计者自己选择,但当一个实体具有多个结构体时,结构体的取名计者自己选择,但当一个实体具有多个结构体时,结构体的取名不可重复。不可重复。7/24/2024EDA技术及技术及CPLD/FPGA应用简

114、明教程应用简明教程 清华大学出版社清华大学出版社第136页2结构体说明语句n结构体中的说明语句是对结构体的功能描述语句中将结构体中的说明语句是对结构体的功能描述语句中将要用到的信号要用到的信号(SIGNAL)、数据类型数据类型(TYPE)、常数常数(CONSTANT)、元件元件(COMPONENT)、函数函数(FUNCTION)和过和过程程(PROCEDURE)等加以说明的语句。但在一个结构体中等加以说明的语句。但在一个结构体中说明和定义的数据类型、常数、元件、函数和过程只说明和定义的数据类型、常数、元件、函数和过程只能用于这个结构体中,若希望其能用于其他的实体或能用于这个结构体中,若希望其能

115、用于其他的实体或结构体中,则需要将其作为程序包来处理。结构体中,则需要将其作为程序包来处理。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第137页n结构体是实体的一个重要部分,每一个实体都有一个或一个以结构体是实体的一个重要部分,每一个实体都有一个或一个以上的结构体。上的结构体。n例:例:n ENTITY nax ISn PORT(a0,a1 : IN BIT;n Sel : IN BIT;n Sh : OUT BIT);n END nax;n ARCHITECTURE dataflow OF nax ISn BEGINn sh=

116、(a0 AND sel) OR (NOT sel AND a1);n END dataflow;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第138页n结构体描述设计实体的具体行为,它包含两类语句:结构体描述设计实体的具体行为,它包含两类语句:n并行语句并行语句 并行语句总是在进程语句(并行语句总是在进程语句(PROCESS)的的外部,该语句的执行与书写顺序无关,总是同时被执外部,该语句的执行与书写顺序无关,总是同时被执行行n顺序语句顺序语句 顺序语句总是在进程语句(顺序语句总是在进程语句(PROCESS)的的内部,从仿真的角度,

117、该语句是顺序执行的内部,从仿真的角度,该语句是顺序执行的n一个结构体包含几个类型的子结构描述,这些描述是:一个结构体包含几个类型的子结构描述,这些描述是:n* BLOCK描述(块描述)描述(块描述)n* PROCESS描述(进程描述)描述(进程描述)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第139页n* SUNPROGRAMS描述(子程序描述)描述(子程序描述)n从前面的设计实例可以看出,一个相对完整的从前面的设计实例可以看出,一个相对完整的VHDL程序程序(或称为设计实体或称为设计实体)具有如图具有如图3.1所示的比较固定的

118、所示的比较固定的结构。至少应包括三个基本组成部分:库、程序包使结构。至少应包括三个基本组成部分:库、程序包使用说明,实体说明和实体对应的结构体说明。其中,用说明,实体说明和实体对应的结构体说明。其中,库、程序包使用说明用于打开库、程序包使用说明用于打开(调用调用)本设计实体将要本设计实体将要用到的库、程序包;实体说明用于描述该设计实体与用到的库、程序包;实体说明用于描述该设计实体与外界的接口信号说明,是可视部分;结构体说明用于外界的接口信号说明,是可视部分;结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,可以含有一个或

119、一个以上的结构体,在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及而在每一个结构体中又可以含有一个或多个进程以及其他的语句。根据需要,实体还可以有配置说明语句。其他的语句。根据需要,实体还可以有配置说明语句。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第140页n配置说明语句主要用于以层次化的方式对特定的设计实体进配置说明语句主要用于以层次化的方式对特定的设计实体进行元件例化,或是为实体选定某个特定的结构体。行元件例化,或是为实体选定某个特定的结构体。 n如何才算一个完整的如何才算一个

120、完整的VHDL程序程序(设计实体设计实体),并没有完全一,并没有完全一致的结论,因为不同的程序设计目的可以有不同的程序结构。致的结论,因为不同的程序设计目的可以有不同的程序结构。通常认为,一个完整的设计实体的最低要求应该能为通常认为,一个完整的设计实体的最低要求应该能为VHDL综合器所接受,并能作为一个独立设计单元,即以元件的形综合器所接受,并能作为一个独立设计单元,即以元件的形式存在的式存在的VHDL程序。这里所谓的元件,既可以被高层次的程序。这里所谓的元件,既可以被高层次的系统所调用,成为该系统的一部分,也可以作为一个电路功系统所调用,成为该系统的一部分,也可以作为一个电路功能块而独立存在

121、和独立运行能块而独立存在和独立运行 .7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第141页3功能描述语句结构n如图如图3.4所示的功能描述语句结构可以含有五种不同类型的,所示的功能描述语句结构可以含有五种不同类型的,以并行方式工作的语句结构。而在每一语句结构的内部可能以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。各语句结构的基本组成和功能分别是:各语句结构的基本组成和功能分别是:n (1) 块语句是由一系列并行执行语句构

122、成的组合体,它的功块语句是由一系列并行执行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或多个模块。能是将结构体中的并行语句组成一个或多个模块。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第142页n(2) 进程语句定义顺序语句模块,用以将从外部获得的信号进程语句定义顺序语句模块,用以将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。值,或内部的运算数据向其他的信号进行赋值。n (3) 信号赋值语句将设计实体内的处理结果向定义的信号信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。或界面端口进

123、行赋值。n (4) 子程序调用语句用于调用一个已设计好的子程序。子程序调用语句用于调用一个已设计好的子程序。n (5) 元件例化语句对其他的设计实体作元件调用说明,并元件例化语句对其他的设计实体作元件调用说明,并将此元件的端口与其他的元件、信号或高层次实体的界面端将此元件的端口与其他的元件、信号或高层次实体的界面端口进行连接。口进行连接。 (CONFIGURATION)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第143页n配置可以把特定的结构体指定给一个确定的实体。通常在大而配置可以把特定的结构体指定给一个确定的实体。通常在大而

124、复杂的复杂的VHDL工程设计中,配置语句可以为实体指定或配置一工程设计中,配置语句可以为实体指定或配置一个结构体。如可利用配置使仿真器为同一实体配置不同的结构个结构体。如可利用配置使仿真器为同一实体配置不同的结构体以使设计者比较不同结构体的仿真差别,或者为例化的各元体以使设计者比较不同结构体的仿真差别,或者为例化的各元件实体配置指定的结构体,从而形成一个所希望的例化元件层件实体配置指定的结构体,从而形成一个所希望的例化元件层次构成的设计实体。次构成的设计实体。nVHDL综合器允许将配置规定为一个设计实体中的最高层设计综合器允许将配置规定为一个设计实体中的最高层设计单元,但只支持对最顶层的实体进

125、行配置。一个设计实体的配单元,但只支持对最顶层的实体进行配置。一个设计实体的配置可用如图置可用如图3.5表示表示7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第144页设计实体结构体2结构体n结构体1结构体3 图 3.5 一个设计实体的配置7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第145页n配置语句的一般格式如下:配置语句的一般格式如下:n CONFIGURATION 配置名配置名 OF 实体名实体名 ISn 配置说明配置说明n END配置名;配置名;n配置主要为顶

126、层设计实体指定结构体,或为参与例化的配置主要为顶层设计实体指定结构体,或为参与例化的元件实体指定所希望的结构体,以层次方式来对元件例元件实体指定所希望的结构体,以层次方式来对元件例化作结构配置。如前所述,每个实体可以拥有多个不同化作结构配置。如前所述,每个实体可以拥有多个不同的结构体,而每个结构体的地位是相同的,在这种情况的结构体,而每个结构体的地位是相同的,在这种情况下,可以利用配置说明为这个实体指定一个结构体。下,可以利用配置说明为这个实体指定一个结构体。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第146页n例例3.2.3

127、是一个配置的简单方式应用,即在一个描述与非门是一个配置的简单方式应用,即在一个描述与非门NAND的设计实体中会有两个以不同的逻辑描述方式构成的的设计实体中会有两个以不同的逻辑描述方式构成的结构体,用配置语句来为特定的结构体需求作配置指定。结构体,用配置语句来为特定的结构体需求作配置指定。n【例例3.2.3】nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.ALL;nENTITY NAND ISn PORT(A:IN STD_LOGIC;n B:IN STD_LOGIC;n C:OUT STD_LOGIC);7/24/2024EDA技术及技术及CPLD/FPGA应用简

128、明教程应用简明教程 清华大学出版社清华大学出版社第147页nEND ENTITY NAND;nARCHITECTURE ART1 OF NAND ISn BEGINn C=NOT (A AND B );nEND ARCHITECTURE ART1;nARCHITECTURE ART2 OF NAND ISnBEGINn C= 1 WHEN (A=0) AND(B=0) ELSEn1 WHEN (A=0) AND(B=1) ELSEn1 WHEN (A=1) AND(B=0) ELSEn0 WHEN (A=1) AND(B=1) ELSEn0;7/24/2024EDA技术及技术及CPLD/FPG

129、A应用简明教程应用简明教程 清华大学出版社清华大学出版社第148页nEND ARCHITECTURE ART2;nCONFIGURATION FIRST OF NAND IS nFOR ART1nEND FOR;nEND FIRST;nCONFIGURATION SECOND OF NAND IS nFOR ART2nEND FOR;nEND SECOND;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第149页n在本例中若指定配置名为SECOND,则为实体NAND配置的结构体为ART2;若指定配置名为 FIRST,则为实体NAND

130、配置的结构体为ART1。这两种结构的描述方式是不同的,但是有相同的逻辑功能。n如果将例3.2.3中的配置语句全部除去,则可以用此具有两个结构体的实体NAND构成另一个更高层次设计实体中的元件,并由此设计实体中的配置语句来指定元件实体NAND使用哪一个结构体。n【例3.2.4】一个对计数器实现多种形式的配置如下7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第150页nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.ALL;nENTITY COUNTER ISn PORT ( CLEAR,CLK:IN BIT

131、;n DATA_OUT:OUT INTEGER);nEND COUNTER;nARCHITECTURE COUNT_255 OF COUNTER IS -8 bit counternBEGIN7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第151页n PROCESSCLKn VARIABLE COUNT:INTEGER:=0;nBEGINn IF CLEAR=1 THENn COUNT:=0nELSIF CLKEVENT AND CLK=1 THENnIF COUNT=255 THENn COUNT:=0n ELSEn COUNT:

132、=COUNT+1nEND IFnEND IF7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第152页nDATA_OUT=COUNT;nEND PROCESS;nEND COUNT_255;nARCHITECTURE COUNT_64K OF COUNTER IS -16 bit counternBEGINn PROCESSCLKn VARIABLE COUNT:INTEGER:=0;nBEGINn IF CLEAR=1 THENn COUNT:=0nELSIF CLKEVENT AND CLK=1 THEN7/24/2024EDA技

133、术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第153页nIF COUNT=65535 THENn COUNT:=0n ELSEn COUNT:=COUNT+1nEND IFnEND IFnDATA_OUT=COUNT;nEND PROCESS;nEND COUNT_64K;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第154页nCONFIGURATION SMALL_COUNT OF COUNTER ISn FOR COUNT_255n END FOR;nEND SMALL_COUNT;nCO

134、NFIGURATION BIG_COUNT OF COUNTER ISn FOR COUNT_64Kn END FOR;nEND BIG_COUNT;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第155页1库(LIBRARY)n在利用在利用VHDL进行工程设计中,为了提高设计效率以进行工程设计中,为了提高设计效率以及使设计遵循某些统一的语言标准或数据格式,有必及使设计遵循某些统一的语言标准或数据格式,有必要将一些有用的信息汇集在一个或几个库中以供调用。要将一些有用的信息汇集在一个或几个库中以供调用。这些信息可以是预先定义好的数据类

135、型、子程序等设这些信息可以是预先定义好的数据类型、子程序等设计单元的集合体计单元的集合体(程序包程序包),或预先设计好的各种设计,或预先设计好的各种设计实体实体(元件库程序包元件库程序包)。因此,可以把库看成是一种用。因此,可以把库看成是一种用来存储预先完成的程序包和数据集合体的仓库。来存储预先完成的程序包和数据集合体的仓库。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第156页n 库库(LIBRARY)的语句格式如下:的语句格式如下:n LIBRARY 库名;库名;n 这一语句即相当于为其后的设计实体打开了以此库名命这一语句即相

136、当于为其后的设计实体打开了以此库名命名的库,以便设计实体可以利用其中的程序包。如语句名的库,以便设计实体可以利用其中的程序包。如语句“LIBRARY IEEE;”表示打开表示打开IEEE库。库。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第157页1)库的种类nVHDL程序设计中常用的库有程序设计中常用的库有5种。种。n(1) IEEE库库nIEEE库是库是VHDL设计中最为常见的库,它包含有设计中最为常见的库,它包含有IEEE标准的程序包和其他一些支持工业标准的程序包。标准的程序包和其他一些支持工业标准的程序包。IEEE库中的

137、标准程序包主要包括库中的标准程序包主要包括STD_LOGIC_1164,NUMERIC_BIT和和NUMERIC_STD等程序包。等程序包。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第158页n其中的其中的STD_LOGIC_1164是最重要的最常用的程序包,大是最重要的最常用的程序包,大部分基于数字系统设计的程序包都是以此程序包中设定的标部分基于数字系统设计的程序包都是以此程序包中设定的标准为基础的。准为基础的。n此外,还有一些程序包虽非此外,还有一些程序包虽非IEEE标准,但由于其已成事实标准,但由于其已成事实上的工业标准

138、,也都并入了上的工业标准,也都并入了IEEE库。这些程序包中,最常库。这些程序包中,最常用的是用的是Synopsys 公司的公司的STD_LOGIC_ARITH(ARITHmetic functions)、STD_LOGIC_SIGNED(SIGNED ARITHmetic functions)和和STD_LOGIC_UNSIGNED(UNSIGNED ARITHmetic functions)程序包。程序包。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第159页n目前流行于我国的大多数目前流行于我国的大多数EDA工具都支持工具

139、都支持Synopsys公司程序包。一般基于大规模可编程逻辑器件的数字公司程序包。一般基于大规模可编程逻辑器件的数字系统设计,系统设计,IEEE库中的库中的4个程序包个程序包STD_LOGIC_1164、STD_LOGIC_ARITH、STD_LOGIC_SIGNED和和STD_LOGIC_UNSIGNED已经足够使用。另外需要注已经足够使用。另外需要注意的是,在意的是,在IEEE库中符合库中符合IEEE标准的程序包并非符合标准的程序包并非符合VHDL语言标准,如语言标准,如STD_LOGIC_1164程序包。因此程序包。因此在使用在使用VHDL设计实体的前面必须以显式表达出来。设计实体的前面必

140、须以显式表达出来。n(2) STD库库7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第160页nVHDL语言标准定义了两个标准程序包,即语言标准定义了两个标准程序包,即STANDARD和和TEXTIO程序包,它们都被收入在程序包,它们都被收入在STD库中。只要在库中。只要在VHDL应应用环境中,可随时调用这两个程序包中的所有内容,即在编用环境中,可随时调用这两个程序包中的所有内容,即在编译和综合过程中,译和综合过程中,VHDL的每一设计都自动地将其包含进去了。的每一设计都自动地将其包含进去了。由于由于STD库符合库符合VHDL语言标

141、准,它定义了最基本的数据类型语言标准,它定义了最基本的数据类型( Bit,bit_vector,Boolean,Integer,Real and Time),在应在应用中不必如用中不必如IEEE库那样以显式表达出来。库那样以显式表达出来。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第161页n(3) WORK库(默认库)库(默认库)nWORK库是用户的库是用户的VHDL设计的现行工作库,用于设计的现行工作库,用于存放用户设计和定义的一些设计单元和程序包。因存放用户设计和定义的一些设计单元和程序包。因此自动满足此自动满足VHDL语言

142、标准,在实际调用中,不必语言标准,在实际调用中,不必以显式预先说明。以显式预先说明。n(4) ASIC的的VITAL库库n使用使用VITAL库,可以提高库,可以提高VHDL门级时序模拟的精度,门级时序模拟的精度,因而只在因而只在VHDL仿真器中使用。库中包含时序程序仿真器中使用。库中包含时序程序包包VITAL_TIMING和和VITAL_ PRIMITIVES。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第162页nVITAL程序包已经成为程序包已经成为IEEE标准,在当前的标准,在当前的VHDL仿仿真器的库中,真器的库中,VI

143、TAL库中的程序包都已经并到库中的程序包都已经并到IEEE库中。实际上,由于各库中。实际上,由于各FPGA/CPLD生产厂商的适配生产厂商的适配工具工具(如如ispEXPERT Compiler)都能为各自的芯片都能为各自的芯片生成带时序信息的生成带时序信息的VHDL门级网表,用门级网表,用VHDL仿真器仿真器仿真该网表可以得到非常精确的时序仿真结果。因仿真该网表可以得到非常精确的时序仿真结果。因此,基于实用的观点,在此,基于实用的观点,在FPGA/CPLD设计开发过程设计开发过程中,一般并不需要中,一般并不需要VITAL库中的程序包。库中的程序包。7/24/2024EDA技术及技术及CPLD

144、/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第163页n(5)用户定义库。)用户定义库。n除了以上提到的库外,除了以上提到的库外,EDA工具开发商为了便于工具开发商为了便于FPGA/CPLD开发设计上的方便,都有自己的扩展库和开发设计上的方便,都有自己的扩展库和相应的程序包,如相应的程序包,如DATAIO公司的公司的GENERICS库、库、DATAIO库等,以及上面提到的库等,以及上面提到的Synopsys 公司的一些公司的一些库。库。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第164页n在在VHDL设计中,

145、有的设计中,有的EDA工具将一些程序包和设计工具将一些程序包和设计单元放在一个目录下,而将此目录名,如单元放在一个目录下,而将此目录名,如“WORK”,作为库名,如作为库名,如Synplicity公司的公司的Synplify。有的有的EDA工具是通过配置语句结构来指定库和库中的程序包,工具是通过配置语句结构来指定库和库中的程序包,这时的配置即成为一个设计实体中最顶层的设计单元。这时的配置即成为一个设计实体中最顶层的设计单元。n此外,用户还可以自己定义一些库,将自己的设计内此外,用户还可以自己定义一些库,将自己的设计内容或通过交流获得的程序包设计实体并入这些库中。容或通过交流获得的程序包设计实体

146、并入这些库中。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第165页2)库的用法n在在VHDL语言中,库的说明语句总是放在实体单元前面,而且语言中,库的说明语句总是放在实体单元前面,而且库语言一般必须与库语言一般必须与USE语言同用。库语言关键词语言同用。库语言关键词LIBRARY,指明所使用的库名。指明所使用的库名。USE语句指明库中的程序包。一旦说明语句指明库中的程序包。一旦说明了库和程序包,整个设计实体都可进入访问或调用,但其作了库和程序包,整个设计实体都可进入访问或调用,但其作用范围仅限于所说明的设计实体。用范围仅限于所说

147、明的设计实体。VHDL要求一项含有多个设要求一项含有多个设计实体的更大的系统,每一个设计实体都必须有自己完整的计实体的更大的系统,每一个设计实体都必须有自己完整的库说明语句和库说明语句和USE语句。语句。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第166页nUSE语句的使用将使所说明的程序包对本设计实体部分全部语句的使用将使所说明的程序包对本设计实体部分全部开放,即是可视的。开放,即是可视的。USE语句的使用有两种常用格式:语句的使用有两种常用格式:n USE 库名库名.程序包名程序包名.项目名;项目名;n USE 库名库名.

148、程序包名程序包名.ALL;n第一语句格式的作用是,向本设计实体开放指定库中的特定第一语句格式的作用是,向本设计实体开放指定库中的特定程序包内所选定的项目。第二语句格式的作用是,向本设计程序包内所选定的项目。第二语句格式的作用是,向本设计实体开放指定库中的特定程序包内所有的内容。实体开放指定库中的特定程序包内所有的内容。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第167页n例如:例如:n LIBRARY IEEE;n USE IEEE.STD_LOGIC_1164.ALL;n USE IEEE.STD_LOGIC_UNSIGNE

149、D.ALL;n USE IEEE.STD_LOGIC_UNSIGNED.ALLn以上的三条语句表示打开以上的三条语句表示打开IEEE库,再打开此库库,再打开此库中的中的STD_LOGIC_1164程序包和程序包和.STD_LOGIC_UNSIGNED.ALL程序包的所有内容。程序包的所有内容。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第168页n【例例3.2.5】nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.STD_ULOGIC;nUSE IEEE.STD_LOGIC_1164.RISING_ED

150、GE;n此例中向当前设计实体开放了此例中向当前设计实体开放了STD_LOGIC_1164程序程序包中的包中的RISING_EDGE函数。但由于此函数需要用到函数。但由于此函数需要用到数据类型数据类型STD_ULOGIC,所以在上一条所以在上一条USE语句中开语句中开放了同一程序包中的这一数据类型。放了同一程序包中的这一数据类型。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第169页2程序包(PACKAGE)n为了使已定义的常数、数据类型、元件调用说明以及子程为了使已定义的常数、数据类型、元件调用说明以及子程序能被更多的序能被更多的

151、VHDL设计实体方便地访问和共享,可以将设计实体方便地访问和共享,可以将它们收集在一个它们收集在一个VHDL程序包中。多个程序包可以并入一程序包中。多个程序包可以并入一个个VHDL库中,使之适用于更一般的访问和调用范围。这库中,使之适用于更一般的访问和调用范围。这一点对于大系统开发,多个或多组开发人员并行工作显得一点对于大系统开发,多个或多组开发人员并行工作显得尤为重要。尤为重要。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第170页n程序包的内容主要由如下四种基本结构组成,因此一程序包的内容主要由如下四种基本结构组成,因此一个程

152、序包中至少应包含以下结构中的一种。个程序包中至少应包含以下结构中的一种。n 常数说明:主要用于预定义系统的宽度,如数据总常数说明:主要用于预定义系统的宽度,如数据总线通道的宽度。线通道的宽度。n 数据类型说明:主要用于说明在整个设计中通用的数据类型说明:主要用于说明在整个设计中通用的数据类型,例如通用的地址总线数据类型定义等。数据类型,例如通用的地址总线数据类型定义等。n 元件定义:主要规定在元件定义:主要规定在VHDL设计中参与元件例化设计中参与元件例化的文件的文件(已完成的设计实体已完成的设计实体)对外的接口界面。对外的接口界面。n子程序说明:用于说明在设计中任一处可调用的子程子程序说明:

153、用于说明在设计中任一处可调用的子程序。序。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第171页1)程序包首n程序包首的说明部分可收集多个不同的程序包首的说明部分可收集多个不同的VHDL设计所需的设计所需的公共信息,其中包括数据类型说明、信号说明、子程序说公共信息,其中包括数据类型说明、信号说明、子程序说明及元件说明等。明及元件说明等。n定义程序包的一般语句结构如下:定义程序包的一般语句结构如下:n-程序包首程序包首nPACKAGE 程序包名程序包名 IS-程程序包首开始序包首开始n 包说明项包说明项7/24/2024EDA技术及

154、技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第172页nEND 程序包名;程序包名;-程序包首结程序包首结束束n程序包说明项可由以下语句组成程序包说明项可由以下语句组成 :nUSE 语句(用来包括其它程序包);语句(用来包括其它程序包);n类型说明;子类型说明;信号说明,子程序说明;元件说明。类型说明;子类型说明;信号说明,子程序说明;元件说明。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第173页2).程序包体n程序包的内容程序包的内容;子程序的实现算法子程序的实现算法.n包体语法包体语法:nP

155、ACKAGE BODY 程序包名程序包名 IS-程程序包体开始序包体开始n 程序包体说明部分以及包体内容程序包体说明部分以及包体内容nEND 程序包名;程序包名;-程序包体程序包体结束结束7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第174页n程序包体用于定义在程序包首中已定义的子程序的子程序程序包体用于定义在程序包首中已定义的子程序的子程序主体。程序包体说明部分的组成可以是主体。程序包体说明部分的组成可以是USE语句语句(允许对其允许对其他程序包的调用他程序包的调用)、子程序定义、子程序体、数据类型说明、子程序定义、子程序体、数

156、据类型说明、子类型说明和常数说明等。对于没有子程序说明的程序包子类型说明和常数说明等。对于没有子程序说明的程序包体可以省去。体可以省去。n程序包常用来封装属于多个设计单元分享的信息,程序包程序包常用来封装属于多个设计单元分享的信息,程序包定义的信号、变量不能在设计实体之间共享。定义的信号、变量不能在设计实体之间共享。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第175页常用的预定义的程序包有4种。n(1) STD_LOGIC_1164程序包程序包n它是它是IEEE库中最常用的程序包,是库中最常用的程序包,是IEEE的标准程的标准程

157、序包。其中包含了一些数据类型、子类型和函数的序包。其中包含了一些数据类型、子类型和函数的定义,这些定义将定义,这些定义将VHDL扩展为一个能描述多值逻扩展为一个能描述多值逻辑辑(即除具有即除具有“0”和和“1”以外还有其他的逻辑量,以外还有其他的逻辑量,如高阻态如高阻态“Z”、不定态不定态“X”等等)的硬件描述语言,的硬件描述语言,很好地满足了实际数字系统的设计需求。很好地满足了实际数字系统的设计需求。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第176页n该程序包中用得最多和最广的是定义了满足工业标准的两该程序包中用得最多和最

158、广的是定义了满足工业标准的两个数据类型个数据类型STD_LOGIC和和STD_LOGIC_VECTOR,它们它们非常适合于非常适合于FPGA/CPLD器件中多值逻辑设计结构。器件中多值逻辑设计结构。n(2) STD_LOGIC_ARITH程序包程序包n它预先编译在它预先编译在IEEE库中,是库中,是Synopsys公司的程序包。此公司的程序包。此程序包在程序包在STD_LOGIC_1164程序包的基础上扩展了三个数程序包的基础上扩展了三个数据类型据类型UNSIGNED、SIGNED和和SMALL_INT,并为其定并为其定义了相关的算术运算符和转换函数。义了相关的算术运算符和转换函数。7/24/

159、2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第177页n(3) STD_LOGIC_UNSIGNED和和STD_LOGIC_SIGNED程程序包序包n这两个程序包都是这两个程序包都是Synopsys公司的程序包,都预先编译在公司的程序包,都预先编译在IEEE库中。这些程序包重载了可用于库中。这些程序包重载了可用于INTEGER型及型及STD_LOGIC和和STD_ LOGIC_VECTOR型混合运算的运算符,型混合运算的运算符,并定义了一个由并定义了一个由STD_LOGIC_VECTOR型到型到INTEGER型的转型的转换函数。这两个程序包

160、的区别是,换函数。这两个程序包的区别是,STD_LOGIC_SIGNED中中定义的运算符考虑到了符号,是有符号数的运算,而定义的运算符考虑到了符号,是有符号数的运算,而STD_LOGIC_UNSIGNED则正好相反。则正好相反。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第178页n程序包程序包STD_LOGIC_ARITH、STD_LOGIC_UNSIGNED和和STD_LOGIC_SIGNED虽然未成为虽然未成为IEEE标准,但已经成为事实上的工业标准,标准,但已经成为事实上的工业标准,绝大多数的绝大多数的VHDL综合器和综合

161、器和VHDL仿真器都支持它们。仿真器都支持它们。 n(4) STANDARD和和TEXTIO程序包程序包n这两个程序包是这两个程序包是STD库中的预编译程序包。库中的预编译程序包。STANDARD程序包中定义了许多基本的数据类型、程序包中定义了许多基本的数据类型、子类型和函数。子类型和函数。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第179页n它是它是VHDL标准程序包,实际应用中已隐性地打开了,故标准程序包,实际应用中已隐性地打开了,故不必再用不必再用USE语句另作声明。语句另作声明。TEXTIO程序包定义了支持文程序包定义

162、了支持文本文件操作的许多类型和子程序。在使用本程序包之前,本文件操作的许多类型和子程序。在使用本程序包之前,需加语句需加语句USE STD.TEXTIO.ALL。nTEXTIO程序包主要供仿真器使用。可以用文本编辑器建立程序包主要供仿真器使用。可以用文本编辑器建立一个数据文件,文件中包含仿真时需要的数据,然后仿真一个数据文件,文件中包含仿真时需要的数据,然后仿真时用时用TEXTIO程序包中的子程序存取这些数据。综合器中,程序包中的子程序存取这些数据。综合器中,此程序包被忽略。此程序包被忽略。n【例例3.2.6】7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华

163、大学出版社清华大学出版社第180页nPACKAGE EXAMPLE IS -程序包首开程序包首开始始nTYPE BYTE IS RANGE 0 TO 255; - 定义数据类定义数据类型型 BYTEnSUBTYPE NIBBLE IS BYTE RANGE 0 TO 15; -定义子定义子类型类型 NIBBLEnCONSTANT BYTE_FF :BYTE :=255; -定义常定义常数数 BYTE_FFnSIGNAL ADDEND :NIBBLE; -定义信号定义信号 ADDENDnCOMPONENT BYTE_ADDER -定义元件定义元件nPORT(A,B:IN BYTE;7/24/20

164、24EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第181页n C:OUT BYTE;n OVERFLOW:OUT BOOLEAN);nEND COMPONENT ; -元件定元件定义结束义结束nFUNCTION MY_FUNCTION(A:IN BYTE )nRETURN BYTE; -函数的返回函数的返回类型为类型为BYTEn-定义函数定义函数nEND EXAMPLE; - 程序包首结束程序包首结束7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第182页n如果要使用这个程序包中的所有定

165、义,可用如果要使用这个程序包中的所有定义,可用USE语句访问此程序包:语句访问此程序包:nLIBRARY WORK; -此句可省去此句可省去nUSE WORK. EXAMPLE.ALL;nENTITYnARCHITECTUREn程序包首与程序包体的关系:程序包体并非必须,只有在程序包中程序包首与程序包体的关系:程序包体并非必须,只有在程序包中要说明子程序时,程序包体才是必须的。程序包首可以独立定义和要说明子程序时,程序包体才是必须的。程序包首可以独立定义和使用。如下:使用。如下:n【例例3.2.7】 在现行在现行WORK库中定义程序包并立即使用的示例。库中定义程序包并立即使用的示例。7/24/

166、2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第183页nPACKAGE SEVEN IS -定义程序包定义程序包n SUBTYPE SEGMENTS IS BIT_VECTOR(0 TO 6);n TYPE BCD IS RANGE 0 TO 9;nEND SEVEN;n 上面仅是对程序包首的定义,程序包定义完之后我上面仅是对程序包首的定义,程序包定义完之后我们对它进行编译处理,编译后会自动地放入们对它进行编译处理,编译后会自动地放入WORK库库(WORK库是一个默认库,只要建立一个项目都会自库是一个默认库,只要建立一个项目都会自动建立此库

167、),下面我们要用这个程序包,必需先调动建立此库),下面我们要用这个程序包,必需先调用用WORK库。库。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第184页nLIBRARY WORK;nUSE WORK.SEVEN.ALL;-调用调用WORK库库SEVEN程序包中的所有数据类型,以便后面使用程序包中的所有数据类型,以便后面使用nENTITY DECODER IS -定义一个名为定义一个名为DECODER(解码器)的实体解码器)的实体n PORT(INPUT:IN BCD; -为自定义的为自定义的BCD码数据类型码数据类型nDRIV

168、E:OUT SEGMENTS); -为自定义的为自定义的SEGMENTS(含有含有7个元素的位矢量)数据类型个元素的位矢量)数据类型7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第185页nEND DECODER;nARCHITECTURE ART OF DECODER ISnBEGINnWITH INPUT SELECT -用后面要讲的选择信号赋用后面要讲的选择信号赋值语句值语句nDRIVE=B“1111110” WHEN 0,n B“0110000” WHEN 1,nB“1101101” WHEN 2,n B“1111001”

169、WHEN 3,7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第186页n B“0110011” WHEN 4,n B“1011011” WHEN 5,n B“1011111” WHEN 6,n B“1110000” WHEN 7,n B“1111111” WHEN 8,n B“1111011” WHEN 9,n B“0000000” WHEN OTHERS;nEND ARCHITECTURE ART;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第187页n此例是一个此例

170、是一个4位位BCD数向数向7段译段译码显示码转换的码显示码转换的VHDL描述。在描述。在程序包程序包SEVEN中定义了两个新中定义了两个新的数据类型的数据类型SEGMENTS和和BCD。在在DECODER的实体描述中使用的实体描述中使用了这两个数据类型。了这两个数据类型。 afbgecd7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第188页3.3 VHDL语言要素3.3.1 VHDL3.3.1 VHDL文字规则文字规则nVHDL文字文字(Literal)主要包括数值和标识符。数值型主要包括数值和标识符。数值型文字主要有数字型、字符

171、串型、位串型。文字主要有数字型、字符串型、位串型。n1数字型文字数字型文字n 数字型文字的值有多种表达方式,现列举如下:数字型文字的值有多种表达方式,现列举如下:n(1) 整数文字:整数文字都是十进制的数,如:整数文字:整数文字都是十进制的数,如:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第189页n 5,678,0,156E2(=15600),45_234_287(=45234287)n 数字间的下划线仅仅是为了提高文字的可读性,数字间的下划线仅仅是为了提高文字的可读性,相当于一个空的间隔符,而没有其他的意义,因而不相当于一个

172、空的间隔符,而没有其他的意义,因而不影响文字本身的数值。影响文字本身的数值。 n(2) 实数文字:实数文字也都是十进制的数,但必须实数文字:实数文字也都是十进制的数,但必须带有小数点,如:带有小数点,如:n 23.34,2.0,44.99E-2(=0.4499),88_67_551.23_909(=8867551.23909),1.335,0.07/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第190页n(3) 以数制基数表示的文字:用这种方式表示的数由五个部以数制基数表示的文字:用这种方式表示的数由五个部分组成。第一部分,用十进制数

173、标明数制进位的基数;第二分组成。第一部分,用十进制数标明数制进位的基数;第二部分,数制隔离符号部分,数制隔离符号“#”;第三部分,表达的文字;第四;第三部分,表达的文字;第四部分,指数隔离符号部分,指数隔离符号“#”;第五部分,用十进制表示的指;第五部分,用十进制表示的指数部分,这一部分的数如果是数部分,这一部分的数如果是0可以省去不写。现举例如下:可以省去不写。现举例如下:n10#170# -(十进制数表示,等于十进制数表示,等于170)n2#1111_1110# -(二进制数表示,等于二进制数表示,等于254)n16#E#E1 -(十六进制数表示,等于十六进制数表示,等于2#1110000

174、0#,等于等于224)或或:(=1416=224)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第191页n16#E#E1 -(十六进制数表示,等于十六进制数表示,等于2#11100000#,等于,等于224)或或:(=1416=224)n16#F.01#E+2 -十六进制数表示,十六进制数表示,(=15+1/(16160)1616=3841.00)n(4) 物理量文字物理量文字(VHDL综合器不接受此类文字综合器不接受此类文字)。如:。如:n60s(60秒秒),100m(100米米),k(千欧姆千欧姆),177A(177安安培培)

175、n注注:整数可综合实现整数可综合实现;实数一般不可综合实现实数一般不可综合实现;物理量不可物理量不可综合实现。综合实现。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第192页2. 字符串型文字n字符是用单引号引起来的字符是用单引号引起来的ASCII字符,可以是数值,也可字符,可以是数值,也可以是符号或字母,如:以是符号或字母,如:R,A,*,Z。而而字符串则是一维的字符数组,须放在双引号中。字符串则是一维的字符数组,须放在双引号中。VHDL中中有两种类型的字符串:文字字符串和数位字符串。有两种类型的字符串:文字字符串和数位字符串。

176、n(1) 文字字符串:文字字符串是用双引号引起来的一串文文字字符串:文字字符串是用双引号引起来的一串文字,如:字,如:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第193页n“ERROR”,“BOTH S AND Q EQUAL TO L”,“X”,“BB$CC”,“ZZZZZZZZ”, “XXXXXXXX”。n(2) 数位字符串:数位字符串也称位矢量,是预定义的数据数位字符串:数位字符串也称位矢量,是预定义的数据类型类型BIT的一位数组,它们所代表的是二进制、八进制或十的一位数组,它们所代表的是二进制、八进制或十六进制的数组,其

177、位矢量的长度即为等值的二进制数的位数。六进制的数组,其位矢量的长度即为等值的二进制数的位数。数位字符串的表示首先要有计算基数,然后将该基数表示的数位字符串的表示首先要有计算基数,然后将该基数表示的值放在双引号中,基数符以值放在双引号中,基数符以“B”、“O”和和“X”表示,并表示,并放在字符串的前面。放在字符串的前面。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第194页n格式:基数符号格式:基数符号“数值数值”n其中基数符号有三种,它们的含义分别是:其中基数符号有三种,它们的含义分别是:n B:二进制基数符号,表示二进制数位二进

178、制基数符号,表示二进制数位0或或1,在字,在字符串中每一个位表示一个符串中每一个位表示一个BIT。n O:八进制基数符号,在字符串中的第一个数代表八进制基数符号,在字符串中的第一个数代表一个八进制数,即代表一个一个八进制数,即代表一个3位位(BIT)的二进制数。的二进制数。n X:十六进制基数符号十六进制基数符号(0F),代表一个十六进制代表一个十六进制数,即代表一个数,即代表一个4位的二进制数。位的二进制数。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第195页n 例如:例如:nB“1_1101_1110” -二进制数数组,长度

179、是二进制数数组,长度是9nO“34” -八进制数数组,长度是八进制数数组,长度是6nX“1AB” -十六进制数数组,长度是十六进制数数组,长度是12 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第196页3标识符n标识符用来定义常数、变量、信号、端口、子程序或参数标识符用来定义常数、变量、信号、端口、子程序或参数的名字。的名字。VHDL的基本标识符的基本标识符(87标准标准)要求以英文字母开要求以英文字母开头,不连续使用下划线头,不连续使用下划线“_”,不以下划线,不以下划线“_”结尾,由结尾,由26个大小写英文字母、数字个大小写

180、英文字母、数字09以及下划线以及下划线“_”组成的组成的字符串。字符串。VHDL 93标准还支持扩展标识符,但是目前仍标准还支持扩展标识符,但是目前仍有许多有许多VHDL工具不支持扩展标识符。工具不支持扩展标识符。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第197页n标识符中的英语字母不分大小写。标识符中的英语字母不分大小写。VHDL的保留字不的保留字不能用于作为标识符使用。如:能用于作为标识符使用。如:MY_COUNTER,DECODER_1,FFT,Sig_N,NOT_ACK,State0,是合法的标识符;而是合法的标识符

181、;而_DECODER_1,2FFT,SIG_#N,NO-ACK,ALL_RST_,data_ _BUS,RETURN,ENTITY则是则是非法的标识符。非法的标识符。ENTITY、entity.。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第198页4下标名及下标段名n下标名用于指示数组型变量或信号的某一元素,而下标段下标名用于指示数组型变量或信号的某一元素,而下标段名则用于指示数组型变量或信号的某一段元素,表达式的名则用于指示数组型变量或信号的某一段元素,表达式的数值必须在数组元素下标号范围以内,并且必须是可计算数值必须在数组

182、元素下标号范围以内,并且必须是可计算的。的。TO表示数组下标序列由低到高,如表示数组下标序列由低到高,如“2 TO 8”;DOWNTO表示数组下标序列由高到低,如表示数组下标序列由高到低,如“8 DOWNTO 2”。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第199页n如果表达式是一个可计算的值,则此操作数可很容易地进如果表达式是一个可计算的值,则此操作数可很容易地进行综合。如果是不可计算的,则只能在特定的情况下综合,行综合。如果是不可计算的,则只能在特定的情况下综合,且耗费资源较大。其语句格式如下:且耗费资源较大。其语句格式如

183、下:n标识符标识符 (表达式)(表达式)n下标段名:用于指示数组型变量或信号的某一段元素。下标段名:用于指示数组型变量或信号的某一段元素。n 格式:标识符格式:标识符 (表达式(表达式to/downto 表达式)表达式)n如:如:a:std_logic_vector(7 downto 0)n a(7) ,a(6)a(0)n a(7 downto o), a(7 downto 4), a(5 downto 3)7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第200页3.3.2 VHDL数据对象 n在在VHDL中,数据对象中,数据对象(

184、Data Objects)类似于一种容器,类似于一种容器,它接受不同数据类型的赋值。数据对象有三种,即常量它接受不同数据类型的赋值。数据对象有三种,即常量(CONSTANT)、变量变量(VARIABLE)和信号和信号(SIGNAL)。前两种可前两种可以从传统的计算机高级语言中找到对应的数据类型,其语以从传统的计算机高级语言中找到对应的数据类型,其语言行为与高级语言中的变量和常量十分相似。但信号是具言行为与高级语言中的变量和常量十分相似。但信号是具有更多的硬件特征的特殊数据对象,是有更多的硬件特征的特殊数据对象,是VHDL中最有特色中最有特色的语言要素之一。的语言要素之一。7/24/2024ED

185、A技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第201页1常量(CONSTANT)n常量代表数字电路中的电源、地、恒定逻辑值等常数;常量代表数字电路中的电源、地、恒定逻辑值等常数;常量的定义和设置主要是为了使设计实体中的常数更常量的定义和设置主要是为了使设计实体中的常数更容易阅读和修改。例如,将位矢的宽度定义为一个常容易阅读和修改。例如,将位矢的宽度定义为一个常量,只要修改这个常量就能很容易地改变宽度,从而量,只要修改这个常量就能很容易地改变宽度,从而改变硬件结构。在程序中,常量是一个恒定不变的值,改变硬件结构。在程序中,常量是一个恒定不变的值,一旦作了

186、数据类型的赋值定义后,在程序中不能再改一旦作了数据类型的赋值定义后,在程序中不能再改变,因而具有全局意义。常量的定义形式如下:变,因而具有全局意义。常量的定义形式如下:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第202页nCONSTANT 常量名:数据类型常量名:数据类型=表达式;表达式;n例如:例如:nCONSTANT DATABIT_VECTOR(3 downto 0)=“1010”;nCONSTANT VCCREAL=5.0;nCONSTANT DELYTIME=25ns;nCONSTANT XNEW_BIT=X;nCON

187、STANT WIDTHINTEGER=8; VHDL要求所定义的要求所定义的常量数据类型必须与表达式的数据类型一致。常量的数据类常量数据类型必须与表达式的数据类型一致。常量的数据类型可以是标量类型或复合类型,但不能是文件类型型可以是标量类型或复合类型,但不能是文件类型(File)或或存取类型存取类型(Access)。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第203页n常量定义语句所允许的设计单元有实体、结构体、程序包、常量定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。在程序包中定义的常量可以暂不设具体块、进

188、程和子程序。在程序包中定义的常量可以暂不设具体数值,它可以在程序包体中设定。数值,它可以在程序包体中设定。n常量的可视性,即常量的使用范围取决于它被定义的位置。常量的可视性,即常量的使用范围取决于它被定义的位置。在程序包中定义的常量具有最大全局化特征,可以用在调用在程序包中定义的常量具有最大全局化特征,可以用在调用此程序包的所有设计实体中;定义在设计实体中的常量,其此程序包的所有设计实体中;定义在设计实体中的常量,其有效范围为这个实体定义的所有的结构体;定义在设计实体有效范围为这个实体定义的所有的结构体;定义在设计实体的某一结构体中的常量,则只能用于此结构体;定义在结构的某一结构体中的常量,则

189、只能用于此结构体;定义在结构体的某一单元的常量,如一个进程中,则这个常量只能用在体的某一单元的常量,如一个进程中,则这个常量只能用在这一进程中。这一进程中。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第204页2变量(VARIABLE) n变量代表暂存某些值的载体,变量常用在实现某种算法的变量代表暂存某些值的载体,变量常用在实现某种算法的赋值语句中;在赋值语句中;在VHDL语法规则中,变量是一个局部量,语法规则中,变量是一个局部量,只能在进程和子程序中使用。变量不能将信息带出对它作只能在进程和子程序中使用。变量不能将信息带出对它作

190、出定义的当前设计单元。变量的赋值是一种理想化的数据出定义的当前设计单元。变量的赋值是一种理想化的数据传输,是立即发生,不存在任何延时的行为。传输,是立即发生,不存在任何延时的行为。VHDL语言语言规则不支持变量附加延时语句。规则不支持变量附加延时语句。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第205页n定义变量的语法格式如下:nVARIABLE 变量名:数据类型 约束条件:=表达式 ;n例如:nVARIABLE A B:BIT; -定义A,B为位型变量nVARIABLE C,D:INTEGER:=2; -定义C和D为整型变量,

191、初始值为2nVARIABLE COUNT:INTEGER RANGE 0 TO 255:=10; -定义变量为整数,范围为0255,赋初值10。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第206页n变量作为局部量,其适用范围仅限于定义了变量的进程或变量作为局部量,其适用范围仅限于定义了变量的进程或子程序中。仿真过程中惟一的例外是共享变量。变量的值子程序中。仿真过程中惟一的例外是共享变量。变量的值将随变量赋值语句的运算而改变。变量定义语句中的初始将随变量赋值语句的运算而改变。变量定义语句中的初始值可以是一个与变量具有相同数据类型的

192、常数值,也可以值可以是一个与变量具有相同数据类型的常数值,也可以是一个全局静态表达式,这个表达式的数据类型必须与所是一个全局静态表达式,这个表达式的数据类型必须与所赋值变量一致。此初始值不是必需的,综合过程中综合器赋值变量一致。此初始值不是必需的,综合过程中综合器将略去所有的初始值。将略去所有的初始值。n变量数值的改变是通过变量赋值来实现的,其赋值语句的变量数值的改变是通过变量赋值来实现的,其赋值语句的语法格式如下:语法格式如下:n目标变量名目标变量名:=表达式;表达式;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第207页3.

193、信号(SIGNAL)n信号代表物理设计中的某一条硬件连接线,包括输入、信号代表物理设计中的某一条硬件连接线,包括输入、输出端口。是描述硬件系统的基本数据对象。信号可输出端口。是描述硬件系统的基本数据对象。信号可以作为设计实体中并行语句模块间的信息交流通道。以作为设计实体中并行语句模块间的信息交流通道。在在VHDL中,信号及其相关的信号赋值语句、决断函中,信号及其相关的信号赋值语句、决断函数、延时语句等很好地描述了硬件系统的许多基本特数、延时语句等很好地描述了硬件系统的许多基本特征。如硬件系统运行的并行性;信号传输过程中的惯征。如硬件系统运行的并行性;信号传输过程中的惯性延时特性;多驱动源的总线

194、行为等。时序电路中触性延时特性;多驱动源的总线行为等。时序电路中触发器的记忆特性。发器的记忆特性。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第208页n信号作为一种数值容器,不但可以容纳当前值,也可信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值。这一属性与触发器的记忆功能有很好以保持历史值。这一属性与触发器的记忆功能有很好的对应关系。信号的定义格式如下:的对应关系。信号的定义格式如下:nSIGNAL 信号名:信号名: 数据类型数据类型 约束条件约束条件=表达式(初表达式(初始值);始值);n信号初始值的设置不是必需的

195、,而且初始值仅在信号初始值的设置不是必需的,而且初始值仅在VHDL的行为仿真中有效。与变量相比,信号的硬件的行为仿真中有效。与变量相比,信号的硬件特征更为明显,它具有全局性特性。例如,在程序包特征更为明显,它具有全局性特性。例如,在程序包中定义的信号,对于所有调用此程序包的设计实体都中定义的信号,对于所有调用此程序包的设计实体都是可见的;在实体中定义的信号,在其对应的结构体是可见的;在实体中定义的信号,在其对应的结构体中都是可见的。中都是可见的。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第209页n事实上,除了没有方向说明以外,

196、信号与实体的端口事实上,除了没有方向说明以外,信号与实体的端口(PORT)概念是一致的。相对于端口来说,其区别只是输出端口不能概念是一致的。相对于端口来说,其区别只是输出端口不能读出数据,只能写入数据;输入端口不能写入数据,只能读读出数据,只能写入数据;输入端口不能写入数据,只能读出数据。信号本身无方向可读可写。信号可以看成是实体内出数据。信号本身无方向可读可写。信号可以看成是实体内部的端口。反之,实体的端口只是一种隐形的信号,端口的部的端口。反之,实体的端口只是一种隐形的信号,端口的定义实际上是作了隐式的信号定义,并附加了数据流动的方定义实际上是作了隐式的信号定义,并附加了数据流动的方向。信

197、号本身的定义是一种显式的定义,因此,在实体中定向。信号本身的定义是一种显式的定义,因此,在实体中定义的端口,在其结构体中都可以看成一个信号,并加以使用义的端口,在其结构体中都可以看成一个信号,并加以使用而不必另作定义。以下是信号的定义示例:而不必另作定义。以下是信号的定义示例:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第210页nSIGNAL A,B:BIT; -定义了两个位定义了两个位BIT的信号的信号A和和S3nSIGNAL S1:STD_LOGIG=0;-定义了一个标准位的定义了一个标准位的单值信号单值信号S1,初始值为低

198、电平初始值为低电平nSIGNAL S2: STD_LOGIC_VECTOR(15 DOWNTO 0); -定义了一个标准位矢的位矢量定义了一个标准位矢的位矢量n-(数组、总线数组、总线)信号,共有信号,共有16个信号元素个信号元素n以下示例定义的信号数据类型是设计者自行定义的,这是以下示例定义的信号数据类型是设计者自行定义的,这是VHDL所允许的:所允许的:nTYPE FOUR IS(X,0,I,Z);nSIGNAL S1FOUR;nSIGNAL S2FOUR=X;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第211页nSIGNA

199、L S3FOUR=L;n其中,信号其中,信号S1的初始值取为默认值,的初始值取为默认值,VHDL规定初始值取值以规定初始值取值以取取LEFTMOST项项(即数组中的最左项即数组中的最左项)为默认值。在此例中是为默认值。在此例中是X(任意状态任意状态)。n信号的使用和定义范围是实体、结构体和程序包。在进程和子信号的使用和定义范围是实体、结构体和程序包。在进程和子程序中不允许定义信号。信号可以有多个驱动源,或者说赋值程序中不允许定义信号。信号可以有多个驱动源,或者说赋值信号源,但必须将此信号的数据类型定义为决断性数据类型。信号源,但必须将此信号的数据类型定义为决断性数据类型。n在进程中,只能将信号

200、列入敏感表,而不能将变量列入敏感表。在进程中,只能将信号列入敏感表,而不能将变量列入敏感表。可见进程只对信号敏感,而对变量不敏感。在进程和子程序中可见进程只对信号敏感,而对变量不敏感。在进程和子程序中只能使用信号而不能说明信号。只能使用信号而不能说明信号。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第212页4三者的使用比较n(1) 从硬件电路系统来看,常量相当于电路中的恒定从硬件电路系统来看,常量相当于电路中的恒定电平,如电平,如GND或或VCC接口,而变量和信号则相当于组接口,而变量和信号则相当于组合电路系统中门与门间的连接及

201、其连线上的信号值。合电路系统中门与门间的连接及其连线上的信号值。n(2) 从行为仿真和从行为仿真和VHDL语句功能上看,二者的区别主语句功能上看,二者的区别主要表现在接受和保持信号的方式、信息保持与传递的要表现在接受和保持信号的方式、信息保持与传递的区域大小上。区域大小上。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第213页n例如信号可以设置延时量,而变量则不能;变量只例如信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是

202、一种过渡,最后的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。信息传输和界面间的通信都靠信号来完成。n(3) 从综合后所对应的硬件电路结构来看,信号一般从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。例如在满足一定条件的进程变量并没有什么区别。例如在满足一定条件的进程中,综合后它们都能引入寄存器。这时它们都具有中,综合后它们都能引入寄存器。这时它们都具有能够接受赋值这一重要的共性,而能够接受赋值这一重要的共性,而VHDL综合器并不综合器并不理会它们在接受赋值

203、时存在的延时特性。理会它们在接受赋值时存在的延时特性。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第214页n(4) 虽然虽然VHDL仿真器允许变量和信号设置初始值,但在仿真器允许变量和信号设置初始值,但在实际应用中,实际应用中,VHDL综合器并不会把这些信息综合进去。综合器并不会把这些信息综合进去。这是因为实际的这是因为实际的FPGA/CPLD芯片在上电后,并不能确芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。的初始值在综合

204、时是没有实际意义的。n三种对象的说明场合:信号是全局量,用于实体、结构三种对象的说明场合:信号是全局量,用于实体、结构体和程序包。变量是局部量,用于进程、函数和子程序。体和程序包。变量是局部量,用于进程、函数和子程序。常量是全局量,可用于上面两种场合。常量是全局量,可用于上面两种场合。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第215页3.3.3 VHDL数据类型nVHDL是一种强类型语言,要求设计实体中的每一个常数、是一种强类型语言,要求设计实体中的每一个常数、信号、变量、函数以及设定的各种参量都必须具有确定的信号、变量、函数

205、以及设定的各种参量都必须具有确定的数据类型,并且相同数据类型的量才能互相传递和作用。数据类型,并且相同数据类型的量才能互相传递和作用。VHDL作为强类型语言的好处是使作为强类型语言的好处是使VHDL编译或综合工具编译或综合工具很容易地找出设计中的各种常见错误。很容易地找出设计中的各种常见错误。VHDL中的数据类中的数据类型可以分成四大类。型可以分成四大类。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第216页n标量型标量型(SCALAR TYPE):属单元素的最基本的数据类型,属单元素的最基本的数据类型,通常用于描述一个单值数据对

206、象,它包括实数类型、整通常用于描述一个单值数据对象,它包括实数类型、整数类型、枚举类型和时间类型。数类型、枚举类型和时间类型。n复合类型复合类型(COMPOSITE TYPE):可以由细小的数据类型复可以由细小的数据类型复合而成,如可由标量复合而成。复合类型主要有数组型合而成,如可由标量复合而成。复合类型主要有数组型(ARRAY)和记录型和记录型(RECORD)。n存取类型存取类型(ACCESS TYPE):为给定的数据类型的数据对象为给定的数据类型的数据对象提供存取方式。提供存取方式。n文件类型文件类型(FILES TYPE):用于提供多值存取类型。用于提供多值存取类型。7/24/2024E

207、DA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第217页n这四大数据类型又可分成在现成程序包中可以随时获得的这四大数据类型又可分成在现成程序包中可以随时获得的预定义数据类型和用户自定义数据类型两个类别。预定义预定义数据类型和用户自定义数据类型两个类别。预定义的的VHDL数据类型是数据类型是VHDL最常用、最基本的数据类型。最常用、最基本的数据类型。这些数据类型都已在这些数据类型都已在VHDL的标准程序包的标准程序包STANDARD和和STD_LOGIC_1164及其他的标准程序包中作了定义,并及其他的标准程序包中作了定义,并可在设计中随时调用。可在设计

208、中随时调用。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第218页n用户自定义的数据类型以及子类型,其基本元素一般仍属用户自定义的数据类型以及子类型,其基本元素一般仍属VHDL的预定义数据类型。尽管的预定义数据类型。尽管VHDL仿真器支持所有的仿真器支持所有的数据类型,但数据类型,但VHDL综合器并不支持所有的预定义数据类综合器并不支持所有的预定义数据类型和用户自定义数据类型。如型和用户自定义数据类型。如REAL、TIME、FILE、ACCES等数据类型。在综合中,它们将被忽略或宣布为等数据类型。在综合中,它们将被忽略或宣布为不支

209、持。不支持。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第219页1VHDL的预定义数据类型n1) 布尔布尔(BOOLEAN)数据类型数据类型n程序包程序包STANDARD中定义布尔数据类型的源代码如下:中定义布尔数据类型的源代码如下:n TYPE BOOLEAN IS(FALES,TRUE);n布尔数据类型实际上是一个二值枚举型数据类型,它布尔数据类型实际上是一个二值枚举型数据类型,它的取值有的取值有FALSE和和TRUE两种,常用与逻辑函数。如两种,常用与逻辑函数。如相等(相等(=),比较(),比较(B)的的结果是布尔量结果是

210、布尔量TRUE,反之为反之为FALSE。综合器将其变为综合器将其变为1或或0信号值,对应于硬件系统中的一根线。信号值,对应于硬件系统中的一根线。n如,如,BIT值转化成值转化成BOOLEAN: BOOLEAN_VAR:=(BIT_VAR=1);n2) 位位(BIT)数据类型数据类型n位数据类型也属于枚举型,放在单引号中,取值只能是位数据类型也属于枚举型,放在单引号中,取值只能是1或或0。位数据类型的数据对象,如变量、信号等,可以参。位数据类型的数据对象,如变量、信号等,可以参与逻辑运算,运算结果仍是位的数据类型。与逻辑运算,运算结果仍是位的数据类型。VHDL综合器用综合器用一个二进制位表示一个

211、二进制位表示BIT。在程序包在程序包STANDARD中定义的源代中定义的源代码是:码是:n TYPE BIT IS (0,1);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第221页n3) 位矢量位矢量(BIT_VECTOR)数据类型数据类型n位矢量只是基于位矢量只是基于BIT数据类型的数组,是用双引号括起来的数据类型的数组,是用双引号括起来的一组位数剧。如:一组位数剧。如:“001100”,X”00B10B”。在程序包在程序包STANDARD中定义的源代码是:中定义的源代码是:nTYPE BIT _VETOR IS ARRAY(

212、NATURAL RANGE)OF BIT;n 使用位矢量必须注明位宽,即数组中的元素个数和排使用位矢量必须注明位宽,即数组中的元素个数和排列,例如:列,例如:n SIGNAL ABIT_VECTOR(7 TO 0);n信号信号A被定义为一个具有被定义为一个具有8位位宽的矢量,它的最左位是位位宽的矢量,它的最左位是A(7),最右位是最右位是A(0)。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第222页n4) 字符字符(CHARACTER)数据类型数据类型n字符类型通常用单引号引起来,如字符类型通常用单引号引起来,如A。字符类型区字

213、符类型区分大小写,如分大小写,如B不同于不同于b。字符类型已在字符类型已在STANDARD程序包中作了定义。程序包中作了定义。nVARIABLE CHARACTER_VAR:CHARACTER; nnCHARACTER_VAR:=A;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第223页n5) 整数整数(INTEGER)数据类型数据类型n整数类型的数代表正整数、负整数和零。在整数类型的数代表正整数、负整数和零。在VHDL中,中,整数的取值范围是整数的取值范围是-21 473 647+21 473 647即即-(-1)+(-1),即

214、可用),即可用32位有符号的二进制数位有符号的二进制数表示。在实际应用中,表示。在实际应用中,VHDL仿真器通常将仿真器通常将INTEGER类型作为有符号数处理,而类型作为有符号数处理,而VHDL综合器则将综合器则将INTEGER作为无符号数处理。作为无符号数处理。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第224页n在使用整数时,在使用整数时,VHDL综合器要求用综合器要求用RANGE子句为所子句为所定义的数限定范围,然后根据所限定的范围来决定表定义的数限定范围,然后根据所限定的范围来决定表示此信号或变量的二进制数的位数,因

215、为示此信号或变量的二进制数的位数,因为VHDL综合综合器无法综合未限定的整数类型的信号或变量。器无法综合未限定的整数类型的信号或变量。n如语句如语句“SIGNAL S INTEGER RANGE 0 TO 15;”规定整数规定整数S的取值范围是的取值范围是015共共16个值,可用个值,可用4位二位二进制数来表示,因此,进制数来表示,因此,S将被综合成由四条信号线构将被综合成由四条信号线构成的信号。成的信号。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第225页n 整数常量的书写方式示例如下:整数常量的书写方式示例如下:n2 -十进

216、制整数十进制整数n10E4 -十进制整数十进制整数n16#D2# -十六进制整数十六进制整数n2#11011010# -二进制整数二进制整数7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第226页n6) 自然数自然数(NATURAL)和正整数和正整数(POSITIVE)数据类型数据类型n自然数是整数的一个子类型,非负的整数,即零和正自然数是整数的一个子类型,非负的整数,即零和正整数;正整数也是整数的一个子类型,它包括整数中整数;正整数也是整数的一个子类型,它包括整数中非零和非负的数值。它们在非零和非负的数值。它们在STANDARD程

217、序包中定程序包中定义的源代码如下:义的源代码如下:n SUBTYPE NATURAL IS INTEGER RANGE 0 TO INTEGER HIGH;n SUBTYPE POSITIVE IS INTEGER RANGE 1 TO INTEGER HIGH;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第227页n7) 实数实数(REAL)数据类型数据类型nVHDL的实数类型类似于数学上的实数,或称浮点数。的实数类型类似于数学上的实数,或称浮点数。实数的取值范围为实数的取值范围为-1.0E38+1.0E38。通常情况下,通常情

218、况下,实数类型仅能在实数类型仅能在VHDL仿真器中使用,仿真器中使用,VHDL综合器不综合器不支持实数,因为实数类型的实现相当复杂,目前在电支持实数,因为实数类型的实现相当复杂,目前在电路规模上难以承受。路规模上难以承受。n 实数常量的书写方式举例如下:实数常量的书写方式举例如下:n 65971.333333 -十进制浮点数十进制浮点数n 8#43.6#E+4 -八进制浮点数八进制浮点数n 43.6E-4 -十进制浮点数十进制浮点数7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第228页n8) 字符串字符串(STRING)数据类型数

219、据类型n字符串数据类型是字符数据类型的一个非约束型数组,字符串数据类型是字符数据类型的一个非约束型数组,或称为字符串数组。字符串必须用双引号括起来。如:或称为字符串数组。字符串必须用双引号括起来。如:nVARIABLE STRING_VARSTRING(1 TO 7);nnSTRING_VAR“Rosebud”;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第229页n9) 时间时间(TIME)数据类型数据类型nVHDL中惟一的预定义物理类型是时间。完整的时间中惟一的预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整

220、数和单位之间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如至少留一个空格,如55 ms,20 ns。nSTANDARD 程序包中也定义了时间。定义如下:程序包中也定义了时间。定义如下:nTYPE TIME IS RANGE -2147483647 TO 2147483647nunits 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第230页n fs; -飞秒,飞秒,VHDL中的中的最小时间单位最小时间单位n ps = 1000 fs; -皮秒皮秒n ns = 1000 ps; -纳秒纳秒n us = 1000 n

221、s; -微秒微秒 n ms = 1000 us; -毫秒毫秒n sec = 1000 ms; -秒秒n min = 60 sec; -分分n hr = 60 min; -时时nend untis; 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第231页10)错误等级错误等级(SEVERITY_LEVEL)n在在VHDL仿真器中仿真器中,错误等级用来指示设计系统的工作状错误等级用来指示设计系统的工作状态态,共有四种可能的状态值共有四种可能的状态值:NOTE(注意注意)、WARNING(警告警告)、ERROR(出错出错)、FAILUR

222、E(失败失败)。在仿真过程中,。在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。其定可输出这四种值来提示被仿真系统当前的工作情况。其定义如下:义如下:nTYPE SEVERITY_LEVEL IS (NOTE,WARNING,ERROR,FAILURE);7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第232页2.IEEE预定义标准逻辑位与矢量预定义标准逻辑位与矢量n在在IEEE库的程序包库的程序包STD_LOGIC_1164中,定义了两中,定义了两个非常重要的数据类型,即标准逻辑位个非常重要的数据类型,即标准逻辑位ST

223、D_LOGIC 和标准逻辑矢量和标准逻辑矢量STD_LOGIC_VECTOR。n1) 标准逻辑位标准逻辑位STD_LOGIC_1164中的数据类型中的数据类型n以下是定义在以下是定义在IEEE库程序包库程序包STD_LOGIC_1164中的中的数据类型。数据类型。STD_LOGIC程序包定义为九值逻辑系统,程序包定义为九值逻辑系统,如下所示:如下所示:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第233页n TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-);n各值的含义是:各值的含义是:n U-未初始化的

224、,未初始化的,X-强未知的,强未知的,0-强强0,1-强强1,Z-高阻态,高阻态,W-弱未知的,弱未知的,L-弱弱0,H-弱弱1, -忽略。忽略。n 在程序中使用此数据类型前,需加入下面的语句:在程序中使用此数据类型前,需加入下面的语句:nLIBRARY IEEE;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第234页nUSE IEEE.STD_LOGIC_1164.ALL;n由定义可见,由定义可见,STD_LOGIC是标准的是标准的BIT数据类型的扩数据类型的扩展,共定义了展,共定义了9种值,这意味着,对于定义为数据类种值,这意

225、味着,对于定义为数据类型是标准逻辑位型是标准逻辑位STD_LOGIC的数据对象,其可能的的数据对象,其可能的取值已非传统的取值已非传统的BIT那样只有那样只有0和和1两种取值,而是如两种取值,而是如上定义的那样有上定义的那样有9种可能的取值。目前在设计中一般种可能的取值。目前在设计中一般只使用只使用IEEE的的STD_LOGIC标准逻辑的位数据类型,标准逻辑的位数据类型,可以完成电子系统的精确模拟,并可实现常见的三态可以完成电子系统的精确模拟,并可实现常见的三态总线电路,总线电路,BIT型则很少使用。型则很少使用。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程

226、清华大学出版社清华大学出版社第235页n由于标准逻辑位数据类型的多值性,在编程时应当特别注由于标准逻辑位数据类型的多值性,在编程时应当特别注意。因为在条件语句中,如果未考虑到意。因为在条件语句中,如果未考虑到STD_LOGIC的所有的所有可能的取值情况,综合器可能会插入不希望的锁存器。可能的取值情况,综合器可能会插入不希望的锁存器。n程序包程序包STD_LOGIC_1164中还定义了中还定义了STD_LOGIC型逻辑型逻辑运算符运算符AND、NAND、OR、NOR、XOR和和NOT的重载函的重载函数,以及两个转换函数,用于数,以及两个转换函数,用于BIT与与STD_LOGIC的相互转的相互转换

227、。换。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第236页n在仿真和综合中,在仿真和综合中,STD_LOGIC值是非常重要的,它值是非常重要的,它可以使设计者精确模拟一些未知和高阻态的线路情况。可以使设计者精确模拟一些未知和高阻态的线路情况。对于综合器,高阻态和对于综合器,高阻态和“-”忽略态可用于三态的描述。忽略态可用于三态的描述。但就综合而言,但就综合而言,STD_LOGIC型数据能够在数字器件型数据能够在数字器件中实现的只有其中的中实现的只有其中的4种值,即种值,即“-”、“0”、“1”和和“Z”。当然,这并不表明其余的当

228、然,这并不表明其余的5种值不存在。这种值不存在。这9种值对于种值对于VHDL的行为仿真都有重要意义。的行为仿真都有重要意义。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第237页2)标准逻标准逻(STD_LOGIC_VECTOR)数据类型数据类型n由由S TD_LOGIC_VECTOR构成的数组。定义如下:构成的数组。定义如下:n TYPE STD_LOGIC_VECTOR IS ARRAY (NATURAL RANGE) OF STD_LOGIC;n显然,显然,STD_LOGIC_VECTOR是定义在是定义在STD_LOGIC_

229、1164程序包中的标准一维数组,数组中的每程序包中的标准一维数组,数组中的每一个元素的数据类型都是以上定义的标准逻辑位一个元素的数据类型都是以上定义的标准逻辑位STD_LOGIC。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第238页nSTD_LOGIC_VECTOR数据类型的数据对象赋值的原则数据类型的数据对象赋值的原则是:相同位宽、相同数据类型的矢量间才能进行赋值。是:相同位宽、相同数据类型的矢量间才能进行赋值。下例描述的是下例描述的是CPU中数据总线上位矢赋值的操作示意情中数据总线上位矢赋值的操作示意情况,注意例中信号数据类

230、型定义和赋值操作中信号的数况,注意例中信号数据类型定义和赋值操作中信号的数组位宽。组位宽。n例例3.3.1】nTYPE T_DATA IS ARRAY(7 DOWNTO 0) OF STD_LOGIC;- 自定义数组类型自定义数组类型nSIGNAL DATABUS,MEMORY:T_DATA;-定义信定义信号号DATABUS,MEMORYnCPUPROCESS -CPU工作进程开始工作进程开始7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第239页nVAR1ABLE REG1T_DATA -定义寄存器变量定义寄存器变量EG1nBEG

231、IN nDATABUS=REG1; -向向8位数据总线赋值位数据总线赋值nEND PROCESS CPU; -CPU工作进程结束工作进程结束nMEMPROCESS -RAM工作进程开始工作进程开始nBEGIN nDATABUS=MEMORY; nEND PROCESS MEM;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第240页3. 其他预定义标准数据类型nVHDL综合工具配带的扩展程序包中,定义了一些有用的综合工具配带的扩展程序包中,定义了一些有用的类型。如类型。如Synopsys公司在公司在IEEE库中加入的程序包库中加入的

232、程序包STD_LOGIC_ARITH中定义了如下的数据类型:无符号中定义了如下的数据类型:无符号型型(UNSIGNED)、n 有符号型有符号型(SIGNED)、小整型小整型(SMALL _INT)。n 在程序包在程序包STD_LOGIC_ARITH中的类型定义如下:中的类型定义如下:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第241页nTYPE UNSIGNED IS ARRAY (NATURAL RANGE ) OF STD_LOGIC;nTYPE SIGNED IS ARRAY (NATURAL RANGE) OF STD_

233、LOGIC;nSUBTYPE SMALL_INT IS INTEGER RANGE 0 TO 1;n如果将信号或变量定义为这几个数据类型,就可以使用如果将信号或变量定义为这几个数据类型,就可以使用本程序包中定义的运算符。在使用之前,请注意必须加本程序包中定义的运算符。在使用之前,请注意必须加入下面的语句:入下面的语句:nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_ARITH.ALL;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第242页nUNSIGNED类型和类型和SIGNED类型是用来设计可综合的数类型是用

234、来设计可综合的数学运算程序的重要类型,学运算程序的重要类型,UNSIGNED用于无符号数的运用于无符号数的运算,算,SIGNED用于有符号数的运算。在实际应用中,大用于有符号数的运算。在实际应用中,大多数运算都需要用到它们。多数运算都需要用到它们。n在在IEEE程序包中,程序包中,UNMERIC_STD和和NUMERIC_BIT程程序包中也定义了序包中也定义了UNSIGNED型及型及SIGNED型,型,NUMERIC_STD是针对于是针对于STD_LOGIC型定义的,而型定义的,而NUMERIC_BIT是针对于是针对于BIT 型定义的。在程序包中还型定义的。在程序包中还定义了相应的运算符重载函

235、数。有些综合器没有附带定义了相应的运算符重载函数。有些综合器没有附带7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第243页nSTD_LOGIC_ARITH程序包,此时只能使用程序包,此时只能使用NUMBER_STD和和NUMERIC_BIT程序包。程序包。n在在STANDARD程序包中没有定义程序包中没有定义STD_LOGIC_VECTOR的运算符,而整数类型一般只的运算符,而整数类型一般只在仿真的时候用来描述算法,或作数组下标运算,因在仿真的时候用来描述算法,或作数组下标运算,因此此UNSIGNED和和SIGNED的使用率是很高

236、的。的使用率是很高的。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第244页1)无符号数据类型无符号数据类型(UNSIGNEDTYPE)nUNSIGNED数据类型代表一个无符号的数值,在综合数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数,这个二进制器中,这个数值被解释为一个二进制数,这个二进制数的最左位是其最高位。例如,十进制的数的最左位是其最高位。例如,十进制的8可以作如可以作如下表示:下表示:n UNSIGNED(“1000)n如果要定义一个变量或信号的数据类型为如果要定义一个变量或信号的数据类型为UN

237、SIGNED,则其位矢长度越长,所能代表的数值就越大。则其位矢长度越长,所能代表的数值就越大。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第245页n如一个如一个4位变量的最大值为位变量的最大值为15,一个,一个8位变量的最大值位变量的最大值则为则为255,0是其最小值,不能用是其最小值,不能用UNSIGNED定义负数。定义负数。以下是两则无符号数据定义的示例:以下是两则无符号数据定义的示例:nVARIABLE VARUNSIGNED(0 TO 10);- VAR(0)是最高位(左边元素为最高位)。是最高位(左边元素为最高位)。

238、nSIGNAL SIGUNSIGNED(5 DOWNTO 0); - SIG(5)是最高位。是最高位。n其中,变量其中,变量VAR有有11位数值,最高位是位数值,最高位是VAR(0),而非而非VAR(10);信号信号SIG有有6位数值,最高位是位数值,最高位是SIG(5)。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第246页2)有符号数据类型有符号数据类型(SIGNEDTYPE)nSIGNED数据类型表示一个有符号的数值,综合器将其解释为补数据类型表示一个有符号的数值,综合器将其解释为补码,此数的最高位是符号位,例如:码,此数的

239、最高位是符号位,例如:SIGNED(“0101”) 代表代表+5,5;SIGNED(“1011”) 代表代表-5。n若将上例的若将上例的VAR定义为定义为SIGNED数据类型,则数值意义就不同了,数据类型,则数值意义就不同了,如:如:n VARIABLE VARSIGNED(0 TO 10);n其中,变量其中,变量VAR有有11位,最左位位,最左位VAR(0)是符号位。是符号位。3)小整型)小整型(SMALL_INT): 0 TO 17/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第247页4. 用户自定义数据类型方式nVHDL允许用

240、户自行定义新的数据类型,它们可以有多种,允许用户自行定义新的数据类型,它们可以有多种,如枚举类型如枚举类型(ENUMERA-nTION TYPE)、整数类型整数类型(INTEGER TYPE)、数组类型数组类型(ARRAY TYPE)、记录类型记录类型(RECORD TYPE)、时间类型时间类型(TIME TYPE)、实数类型实数类型(REAL TYPE)等。用户自定义数等。用户自定义数据类型是用类型定义语句据类型是用类型定义语句TYPE和子类型定义语句和子类型定义语句SUBTYPE实现的,以下将介绍这两种语句的使用方法。实现的,以下将介绍这两种语句的使用方法。7/24/2024EDA技术及技

241、术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第248页1)TYPE语句用法语句用法n TYPE语句语法结构如下:语句语法结构如下:n TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本基本数据类型数据类型;n其中,数据类型名由设计者自定;数据类型定义部分其中,数据类型名由设计者自定;数据类型定义部分用来描述所定义的数据类型的表达方式和表达内容;用来描述所定义的数据类型的表达方式和表达内容;关键词关键词OF后的基本数据类型是指数据类型定义中所定后的基本数据类型是指数据类型定义中所定义的元素的基本数据类型,一般都是取已有的预定义义的元素的基本

242、数据类型,一般都是取已有的预定义数据类型,如数据类型,如BIT、STD_LOGIC或或INTEGER等。等。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第249页n以下列出了两种不同的定义方式:以下列出了两种不同的定义方式:n TYPE ST1 IS ARRAY(0 TO 15)OF STD_LOGIC;n TYPE WEEK IS (SUN,MON,TUE,WED,THU,FRI,SAT);n第一句定义的数据第一句定义的数据ST1是一个具有是一个具有16个元素的数组型个元素的数组型数据类型,数组中的每一个元素的数据类型都是数据类

243、型,数组中的每一个元素的数据类型都是STD_LOGIC型;第二句所定义的数据类型是由一组型;第二句所定义的数据类型是由一组文字表示的,而其中的每一文字都代表一个具体的数文字表示的,而其中的每一文字都代表一个具体的数值,如可令值,如可令SUN=“1010”。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第250页n在在VHDL中,任一数据对象中,任一数据对象(SIGNAL、VARIABLE、CONSTANT)都必须归属某一数据类型,只有同数据类型都必须归属某一数据类型,只有同数据类型的数据对象才能进行相互作用。利用的数据对象才能进行相

244、互作用。利用TYPE语句可以完成语句可以完成各种形式的自定义数据类型以供不同类型的数据对象间的各种形式的自定义数据类型以供不同类型的数据对象间的相互作用和计算。相互作用和计算。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第251页2)SUBTYPE语句用法语句用法n子类型子类型SUBTYPE只是由只是由TYPE所定义的原数据类型的一所定义的原数据类型的一个子集,它满足原数据类型的所有约束条件,原数据类型个子集,它满足原数据类型的所有约束条件,原数据类型称为基本数据类型。子类型称为基本数据类型。子类型SUBTYPE的语句格式如下:的

245、语句格式如下:nSUBTYPE 子类型名子类型名 IS 基本数据类型基本数据类型 RANGEA 约束约束范围;范围;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第252页n子类型的定义只在基本数据类型上作一些约束,并没子类型的定义只在基本数据类型上作一些约束,并没有定义新的数据类型。子类型定义中的基本数据类型有定义新的数据类型。子类型定义中的基本数据类型必须在前面已通过必须在前面已通过TYPE定义的类型。如下例:定义的类型。如下例:n SUBTYPE DIGITS INTEGER RANGE 0 TO 9;n例中,例中,INTEG

246、ER是标准程序包中已定义过的数据类型,是标准程序包中已定义过的数据类型,子类型子类型DIGITS只是把只是把INTEGER约束到只含约束到只含10个值的个值的数据类型。数据类型。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第253页n由于子类型与其基本数据类型属同一数据类型,因此由于子类型与其基本数据类型属同一数据类型,因此属于子类型的和属于基本数据类型的数据对象间的赋属于子类型的和属于基本数据类型的数据对象间的赋值和被赋值可以直接进行,不必进行数据类型的转换。值和被赋值可以直接进行,不必进行数据类型的转换。n利用子类型定义数据对

247、象的好处是,除了使程序提高利用子类型定义数据对象的好处是,除了使程序提高可读性和易处理外,其实质性的好处在于有利于提高可读性和易处理外,其实质性的好处在于有利于提高综合的优化效率,这是因为综合器可以根据子类型所综合的优化效率,这是因为综合器可以根据子类型所设的约束范围,有效地推知参与综合的寄存器的最合设的约束范围,有效地推知参与综合的寄存器的最合适的数目。适的数目。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第254页5. 枚举类型nVHDL中的枚举数据类型是用文字符号来表示一组实际的中的枚举数据类型是用文字符号来表示一组实际的二

248、进制数的类型二进制数的类型(若直接用数值来定义,则必须使用单引若直接用数值来定义,则必须使用单引号号)。例如状态机的每一状态在实际电路虽是以一组触发。例如状态机的每一状态在实际电路虽是以一组触发器的当前二进制数位的组合来表示的,但设计者在状态机器的当前二进制数位的组合来表示的,但设计者在状态机的设计中,为了更便于阅读和编译,往往将表征每一状态的设计中,为了更便于阅读和编译,往往将表征每一状态的二进制数组用文字符号来代表。的二进制数组用文字符号来代表。n【例例3.3.2】7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第255页n TY

249、PE M_STATE IS( STATE1,STATE2,STATE3,STATE4,STATE5);n SIGNAL CURRENT_STATE,NEXT_STATE:M_STATE;n在这里,信号在这里,信号CURRENT_STATE和和NEXT_STATE的数的数据类型定义为据类型定义为M_STATE,它们的取值范围是可枚举的,它们的取值范围是可枚举的,即从即从STATE1STATE5共共5种,而这些状态代表种,而这些状态代表5组惟组惟一的二进制数值。一的二进制数值。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第256页n在

250、综合过程中,枚举类型文字元素的编码通常是在综合过程中,枚举类型文字元素的编码通常是自动的,编码顺序是默认的,一般将第一个枚举自动的,编码顺序是默认的,一般将第一个枚举量量(最左边的量最左边的量)编码为编码为0,以后的依次加,以后的依次加1。综合。综合器在编码过程中自动将第一枚举元素转变成位矢器在编码过程中自动将第一枚举元素转变成位矢量,位矢的长度将取所需表达的所有枚举元素的量,位矢的长度将取所需表达的所有枚举元素的最小值。如上例中用于表达最小值。如上例中用于表达5个状态的位矢长度个状态的位矢长度应该为应该为3,编码默认值为如下方式:,编码默认值为如下方式:7/24/2024EDA技术及技术及C

251、PLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第257页n STATE1=000;STATE2=001;STATE3=010;STATE4=011;STATE5=100;n于是它们的数值顺序便成为于是它们的数值顺序便成为STATE1STATE2STATE3STATE4STATE5。一一般而言,编码方法因综合器不同而不同。为了某些特般而言,编码方法因综合器不同而不同。为了某些特殊的需要,编码顺序也可以人为设置。殊的需要,编码顺序也可以人为设置。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第258页6整数类型和

252、实数类型n整数和实数的数据类型在标准的程序包中已作了定义,但整数和实数的数据类型在标准的程序包中已作了定义,但在实际应用中,特别在综合中,由于这两种非枚举型的数在实际应用中,特别在综合中,由于这两种非枚举型的数据类型的取值定义范围太大,综合器无法进行综合。因此,据类型的取值定义范围太大,综合器无法进行综合。因此,定义为整数或实数的数据对象的具体的数据类型必须由用定义为整数或实数的数据对象的具体的数据类型必须由用户根据实际的需要重新定义,并限定其取值范围,以便能户根据实际的需要重新定义,并限定其取值范围,以便能为综合器所接受,从而提高芯片资源的利用率。为综合器所接受,从而提高芯片资源的利用率。7

253、/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第259页n实际应用中,实际应用中,VHDL仿真器通常将整数或实数类型作仿真器通常将整数或实数类型作为有符号数处理,为有符号数处理,VHDL综合器对整数或实数的编码综合器对整数或实数的编码方法是:方法是:n对用户已定义的数据类型和子类型中的负数,编码对用户已定义的数据类型和子类型中的负数,编码为二进制补码;为二进制补码;n对用户已定义的数据类型和子类型中的正数,编码为对用户已定义的数据类型和子类型中的正数,编码为二进制原码。二进制原码。7/24/2024EDA技术及技术及CPLD/FPGA

254、应用简明教程应用简明教程 清华大学出版社清华大学出版社第260页n编码的位数,即综合后信号线的数目只取决于用户定编码的位数,即综合后信号线的数目只取决于用户定义的数值的最大值。在综合中,以浮点数表示的实数义的数值的最大值。在综合中,以浮点数表示的实数将首先转换成相应数值大小的整数。因此在使用整数将首先转换成相应数值大小的整数。因此在使用整数时,时,VHDL综合器要求使用数值限定关键词综合器要求使用数值限定关键词RANGE,对整数的使用范围作明确的限制。对整数的使用范围作明确的限制。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第26

255、1页7数组类型n数组类型属复合类型,是将一组具有相同数据类型的元素数组类型属复合类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的数据类型。数组集合在一起,作为一个数据对象来处理的数据类型。数组可以是一维可以是一维(每个元素只有一个下标每个元素只有一个下标)数组或多维数组数组或多维数组(每每个元素有多个下标个元素有多个下标)。VHDL仿真器支持多维数组,但仿真器支持多维数组,但VHDL综合器只支持一维数组。综合器只支持一维数组。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第262页n数组的元素可以是任何一种数

256、据类型,用以定义数组元素数组的元素可以是任何一种数据类型,用以定义数组元素的下标范围子句决定了数组中元素的个数,以及元素的排的下标范围子句决定了数组中元素的个数,以及元素的排序方向,即下标数是由低到高,或是由高到低。如子句序方向,即下标数是由低到高,或是由高到低。如子句“0 TO 7”是由低到高排序的是由低到高排序的8个元素;个元素;“15 DOWNTO 0”是由高到低排序的是由高到低排序的16个元素。个元素。nVHDL允许定义两种不同类型的数组,即限定性数组和非允许定义两种不同类型的数组,即限定性数组和非限定性数组。它们的区别是,限定性数组下标的取值范围限定性数组。它们的区别是,限定性数组下

257、标的取值范围在数组定义时就被确定了,而非限定性数组下标的取值范在数组定义时就被确定了,而非限定性数组下标的取值范围需留待随后根据具体数据对象再确定。围需留待随后根据具体数据对象再确定。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第263页n限定性数组定义语句格式如下:限定性数组定义语句格式如下:nTYPE 数组名数组名 IS ARRAY (数组范围数组范围) OF数据类数据类型;型;n其中,数组名是新定义的限定性数组类型的名称,其中,数组名是新定义的限定性数组类型的名称,可以是任何标识符,其类型与数组元素相同;数可以是任何标识符

258、,其类型与数组元素相同;数组范围明确指出数组元素的定义数量和排序方式,组范围明确指出数组元素的定义数量和排序方式,以整数来表示其数组的下标;数据类型即指数组以整数来表示其数组的下标;数据类型即指数组各元素的数据类型。各元素的数据类型。n【例例3.3.3】7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第264页nTYPE STB IS ARRAY(7 DOWNTO 0) OF STD_LOGIC;n这个数组类型的名称是这个数组类型的名称是STB,它有它有8个元素,它的下标排序个元素,它的下标排序是是7,6,5,4,3,2,1,0,各元

259、素的排序是,各元素的排序是STB(7),STB(6),STB(1),STB(0)。n【例例3.3.4】n TYPE X IS (LOW,HIGH);n TYPE DATA_BUS IS ARRAY (0 TO 7,X) OF BIT;n首先定义首先定义X为两元素的枚举数据类型,然后将为两元素的枚举数据类型,然后将DATA_BUS定定义为一个数组类型,其中每一元素的数据类型是义为一个数组类型,其中每一元素的数据类型是BIT。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第265页n非限制性数组的定义语句格式如下:非限制性数组的定义语句

260、格式如下:nTYPE 数组名数组名 IS ARRAY (数组下标名数组下标名 RANGE) OF 数据数据类型;类型;n其中,数组名是定义的非限制性数组类型的取名;数组下标其中,数组名是定义的非限制性数组类型的取名;数组下标名是以整数类型设定的一个数组下标名称;符号名是以整数类型设定的一个数组下标名称;符号“”是下是下标范围待定符号,用到该数组类型时,再填入具体的数值范标范围待定符号,用到该数组类型时,再填入具体的数值范围;数据类型是数组中每一元素的数据类型。围;数据类型是数组中每一元素的数据类型。n以下三例表达了非限制性数组类型的不同用法。以下三例表达了非限制性数组类型的不同用法。7/24/

261、2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第266页n【例例3.3.5】nTYPE BIT_VECTOR IS ARRAY(NATURAL RANE) OF BIT;nVARABLE VA:BIT_VECTOR(1 TO 6); -将数组取值范围定在将数组取值范围定在16n【例例3.3.6】nTYPE REAL_MATRIX IS ARRAY (POSITIVE RANGE) OF REAL;nVARIABLE REAL_MATRIX_OBJECT:REAL_MATRIX(1 TO 8);-限定范围限定范围7/24/2024EDA技术及技

262、术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第267页n【例例3.3.7】nTYPE LOGIC_VECTOR IS ARRAY(NATURAL RANGE,POSITIVE RANGE) OF LOG_4;nVARIABLEL4_OBJECT:LOG_4_VECTOR(0 TO 7,1 TO 2); -限定范围限定范围7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第268页8记录类型n由已定义的、数据类型不同的对象元素构成的数组称为记由已定义的、数据类型不同的对象元素构成的数组称为记录类型的对象。定

263、义记录类型的语句格式如下:录类型的对象。定义记录类型的语句格式如下:nTYPE 记录类型名记录类型名 IS RECORD n 元素名元素名 : 元素数据类型;元素数据类型;n 元素名元素名 : 元素数据类型;元素数据类型;nnEND RECORD 记录类型名记录类型名;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第269页n【例例3.3.8】nTYPE RECDATA IS RECORD -将将RECDATA定义定义为四元素记录类型为四元素记录类型nELEMENT1 TIME; -将元素将元素ELEMENT1定义为时间类型定义为时

264、间类型nELEMENT2 TIME; -将元素将元素ELEMENT2定义为时间类型定义为时间类型nELEMENT3 STD_LOGIC; -将元素将元素ELEMENT3定义为标准位类型定义为标准位类型nEND RECORD;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第270页n对于记录类型的数据对象赋值的方式,可以是整体赋对于记录类型的数据对象赋值的方式,可以是整体赋值也可以是对其中的单个元素进行赋值。在使用整体值也可以是对其中的单个元素进行赋值。在使用整体赋值方式时,可以有位置关联方式或名字关联方式两赋值方式时,可以有位置关联

265、方式或名字关联方式两种表达方式。如果使用位置关联,则默认为元素赋值种表达方式。如果使用位置关联,则默认为元素赋值的顺序与记录类型声明时的顺序相同。如果使用了的顺序与记录类型声明时的顺序相同。如果使用了OTHERS选项,则至少应有一个元素被赋值,如果有选项,则至少应有一个元素被赋值,如果有两个或更多的元素由两个或更多的元素由OTHERS选项来赋值,则这些元选项来赋值,则这些元素必须具有相同的类型。此外,如果有两个或两个以素必须具有相同的类型。此外,如果有两个或两个以上的元素具有相同的子类型,就可以以记录类型的方上的元素具有相同的子类型,就可以以记录类型的方式放在一起定义。式放在一起定义。7/24

266、/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第271页n【例例3.3.9】 利用记录类型定义的一个微处理器命令信息利用记录类型定义的一个微处理器命令信息表。表。nTYPE REGNAME IS (AX,BX,CX,DX);nTYPE OPERATION IS RECORDn OPSTRSTRING(1 TO 10);n OPCODEBIT_VECTOR(3 DOWNTO 0);n OP1,OP2,RES:REGNAME;nEND RECORD;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清

267、华大学出版社第272页nVARIABLE INSTR1,INSTR2:OPERATION;nnINSTR1=(ADD AX,BX,0001,AX,BX,AX);nINSTR2=(ADD AX,BX,“0010,OTHERS=BX);nVARIABLE INSTR3OPERATION;nnINSTR3.MNEMONIC=MUL AX,BX;nINSTR3.OP1=AX;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第273页n本例中,定义的记录本例中,定义的记录OPERATION共有五个元素,共有五个元素,一个是加法指令码的字符串一个

268、是加法指令码的字符串OPSTR,一个是一个是4位操位操作码作码OPCODE,另三个是枚举型数据另三个是枚举型数据OP1、OP2、RES(其中其中OP1和和OP2是操作数,是操作数,RES是目标码是目标码)。例中定义的变量例中定义的变量INSTR1的数据类型是记录型的数据类型是记录型OPERATION,它的第一个元素是加法指令字符串它的第一个元素是加法指令字符串ADD AX,BX;第二个元素是此指令的第二个元素是此指令的4位命令代位命令代码码“0001”;第三、第四个元素为;第三、第四个元素为AX和和BX;AX和和BX相加后的结果送入第五个元素相加后的结果送入第五个元素AX,因此这里的因此这里的

269、AX是目标码。是目标码。 7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第274页n语句语句“INSTR3. OPSTR=MUL AX,BX;”赋给赋给INSTR3中的元素中的元素OPSTR。一般地,对于记录类型的数一般地,对于记录类型的数据对象进行单元素赋值时,就在记录类型对象名后加点据对象进行单元素赋值时,就在记录类型对象名后加点(“.”),再加赋值元素的元素名。,再加赋值元素的元素名。n 记录类型中的每一个元素仅为标量型数据类型构成记录类型中的每一个元素仅为标量型数据类型构成称为线性记录类型;否则为非线性记录类型。只有线性称为

270、线性记录类型;否则为非线性记录类型。只有线性记录类型的数据对象都是可综合的。记录类型的数据对象都是可综合的。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第275页9数据类型转换n由于由于VHDL是一种强类型语言,这就意味着即使对于是一种强类型语言,这就意味着即使对于非常接近的数据类型的数据对象,在相互操作时,也非常接近的数据类型的数据对象,在相互操作时,也需要进行数据类型转换。需要进行数据类型转换。n1) 类型转换函数方式类型转换函数方式n类型转换函数的作用就是将一种属于某种数据类型的类型转换函数的作用就是将一种属于某种数据类型的

271、数据对象转换成属于另一种数据类型的数据对象。数据对象转换成属于另一种数据类型的数据对象。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第276页n【例【例3.3.10】nLIBRARY IEEE;nUSE IEEE.STD_LOGIC_1164.ALL;nENTITY CNT4 ISn PORT(CLKIN STD_LOGIC;n PINOUT STD_LOGIC_VECTOR(3 DOWNTO 0);nEND CNT4;nLIBRARY DATAIO;nUSE DATAIO.STD_LOGIC_OPS.ALL7/24/2024ED

272、A技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第277页nARCHITECTURE BEHV OF CNT4 ISnBEGINnPROCESS(CLK)nBEGINnIF CLK=1AND CLKEVENT THENn PRESULT(I):=0;n WHEN 1|H =RESULT(I):=1;n WHEN OTHERS=RESULT(I):=XMAP;n END CASE;n END LOOP;n RETURN RESULT;nEND;7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第282

273、页n不难看出,转换函数不难看出,转换函数TO_BITVECTOR 的功能就是将的功能就是将STD_LOGIC_VECTOR的数据类型转换成的数据类型转换成BIT_VECTOR的数据类型。的数据类型。n注意,在注意,在STANDARD程序包和程序包和STD_LOGIC_1164程程序包都没有定义序包都没有定义VECTOR与与INTEGER类型之间的转类型之间的转换函数,而换函数,而EDA工具厂商的程序包里含有这些转换类工具厂商的程序包里含有这些转换类型。型。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第283页2)直接类型转换方式直

274、接类型转换方式n直接类型转换的一般语句格式是:直接类型转换的一般语句格式是:n 数据类型标识符数据类型标识符(表达式表达式)n一般情况下,直接类型转换仅限于非常关联一般情况下,直接类型转换仅限于非常关联(数数据类型相互间的关联性非常大据类型相互间的关联性非常大)的数据类型之间,的数据类型之间,必须遵循以下规则:必须遵循以下规则:7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第284页n(1) 所有的抽象数字类型是非常关联的类型所有的抽象数字类型是非常关联的类型(如整型、如整型、浮点型浮点型),如果浮点数转换为整数,则转换结果是最接,

275、如果浮点数转换为整数,则转换结果是最接近的一个整型数。近的一个整型数。n(2) 如果两个数组有相同的维数、两个数组的元素是如果两个数组有相同的维数、两个数组的元素是同一类型,并且在各处的下标范围内索引是同一类型同一类型,并且在各处的下标范围内索引是同一类型或非常接近的类型,那么这两个数组是非常关联类型。或非常接近的类型,那么这两个数组是非常关联类型。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第285页n(3) 枚举型不能被转换枚举型不能被转换n如果类型标识符所指的是非限定数组,则结果会将被如果类型标识符所指的是非限定数组,则结果

276、会将被转换的数组的下标范围去掉,即成为非限定数组。如转换的数组的下标范围去掉,即成为非限定数组。如果类型标识符所指的是限定性数组,则转换后的数组果类型标识符所指的是限定性数组,则转换后的数组的下标范围与类型标识符所指的下标范围相同。转换的下标范围与类型标识符所指的下标范围相同。转换结束后,数组中元素的值等价于原数组中的元素值。结束后,数组中元素的值等价于原数组中的元素值。7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第286页10 属性:n VHDL为多种类型定义了属性,语法如下:为多种类型定义了属性,语法如下:n 对象对象 属性属

277、性n VHDL为数组预先定义的属性:为数组预先定义的属性:n LEFT RIHTn HIGH LOWn LENGTH RANGE7/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第287页n REVERSE_RANGE 等等,在此只是介绍一些常用的等等,在此只是介绍一些常用的属性,其它在后面章节还会提到。属性,其它在后面章节还会提到。n对应变量:对应变量:VARIABLE MY_VECTOR:BIT_VECTOR(5 DOWNTO 5);n各属性如下:各属性如下:n MY_ VECTORLEFT 5n MY_ VECTORRIGHT -

278、5n MY_ VECTORHIGH 5n MY_ VECTORLOW -57/24/2024EDA技术及技术及CPLD/FPGA应用简明教程应用简明教程 清华大学出版社清华大学出版社第288页n MY_ VECTORLENG TH 11n MY_ VECTORRANGE (5 DOWNTO 5)n MY_ VECTORREVERSE_RANGE (-5 TO 5)n3.3.4 VHDL操作符操作符nVHDL的各种表达式由操作数和操作符组成,其中操作的各种表达式由操作数和操作符组成,其中操作数是各种运算的对象,而操作符则规定运算数是各种运算的对象,而操作符则规定运算(算术运算算术运算河逻辑运算河逻辑运算)的方式。的方式。7/24/2024

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 幼儿教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号