《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年4月5日星期三.

Slides:



Advertisements
Similar presentations
练一练: 在数轴上画出表示下列各数的点, 并指出这些点相互间的关系: -6 , 6 , -3 , 3 , -1.5, 1.5.
Advertisements

Tool Command Language --11级ACM班 金天行.
实验四 利用中规模芯片设计时序电路(二).
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月19日星期日.
VHDL 编 程 基 础.
第4章 VHDL设计初步.
Oracle数据库 Oracle 子程序.
§5.3 定积分的换元法 和分部积分法 一、 定积分的换元法 二、 定积分的分部积分法 三、 小结、作业.
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
第7章 VHDL结构与要素 主要内容 EDA技术实用教程 ■ 子程序 ■ VHDL库、程序包和配制 ■ VHDL文字规则 ■ 数据类型
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
VHDL數位電路實習與專題設計 文魁資訊-UE301
8.9二进制振幅键控(ASK) 调制器与解调器设计
VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.
使用VHDL設計—4位元減法器 通訊一甲 B 楊穎穆.
EDA原理及应用 何宾
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
使用VHDL設計—向上&向下計數器 通訊一甲 B 楊穎穆.
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
管理信息结构SMI.
CH8 VHDL结构与要素 CH8.8 & CH8.9.
走进编程 程序的顺序结构(二).
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
使用VHDL設計--Moore Machine
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
第一章 函数 函数 — 研究对象—第一章 分析基础 极限 — 研究方法—第二章 连续 — 研究桥梁—第二章.
第二章 Java语言基础.
第五章 VHDL设计基础 本章重点: 本章难点: VHDL程序结构 VHDL的基本数据类型 VHDL的基本描述语句 基本组合逻辑电路设计
第六章 VHDL设计共享.
第五章 VHDL主要描述语句.
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
第一章 函数与极限.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
学习目标 1、什么是字符集 2、字符集四个级别 3、如何选择字符集.
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
1.2 有理数 第1课时 有理数 伏家营中学 付宝华.
數位邏輯設計 VHDL.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
第4章 Excel电子表格制作软件 4.4 函数(一).
实验三 16位算术逻辑运算实验 不带进位控制的算术运算 置AR=1: 设置开关CN 1 不带进位 0 带进位运算;
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
C++语言程序设计 C++语言程序设计 第四章 数组及自定义数据类型 C++语言程序设计.
第九节 赋值运算符和赋值表达式.
3.16 枚举算法及其程序实现 ——数组的作用.
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
第4课时 绝对值.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
ASP.NET实用教程 清华大学出版社 第4章 C#编程语言 教学目标 教学重点 教学过程 2019年5月5日.
第四章 VHDL编程基础.
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第7章 VHDL设计应用实例 7.1 8位加法器的设计 7.2 分频电路 7.3 数字秒表的设计.
第二章 Java基本语法 讲师:复凡.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
基本知识 数据类型、变量、常量、运算符.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
Programmable Logic System Design
数据表示 第 2 讲.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
顺序结构程序设计 ——关于“字符串”和数值.
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
编译原理实践 6.程序设计语言PL/0.
第二章 简单数据类型 §2.1 数据类型概述 §2.2 变量和常量 §2.3 简单数据类型 §2.4 简单数据类型的相互转换
学习目标 1、什么是列类型 2、列类型之数值类型.
Presentation transcript:

《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年4月5日星期三

第 二 讲 VHDL程序基本结构及语言要素 教学目的:使学生掌握VHDL程序基本结构及语言要素相关使用方法。 教学难点:常量、变量、信号的用法。 教学方法:讲授法、计算机辅助法。 课时计划:2学时 使用教材:EDA技术及应用.谭会生等.西安:西安电子科技大学出版社 主要参考文献: [1] 徐光辉等.CPLD/FPGA的开发和应用[M].北京:电子工业出版社 [2] 侯伯亨等.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社 [3] http://www.altera.com [4] 周立功等.SOPC嵌入式系统基础教程[M].北京:北京航空航天大学出版社

二、 VHDL语言要素 三、课堂小结 四、作业

一、 VHDL程序基本结构 1. VHDL简介 2. VHDL程序设计约定 VHDL的英文全名是Very-High-Speed Integrated Circuit Hardware Description Language,诞生于1982年。1987年底,VHDL被IEEE 和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本。现在,VHDL作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。 2. VHDL程序设计约定 为了便于程序的阅读和调试,对VHDL程序设计作如下约定: 1)语句结构描述中方括号“[ ]”内的内容为可选内容。 2)VHDL的编译器和综合器对程序文字的大小写是不加区分的。 3)程序中的注释使用双横线“- -”。在VHDL程序的任何一行中,双横线“- -”后的 文字都不参加编译和综合。 4)为了便于程序的阅读和调试,书写和输入程序时,使用层次缩进格式,同一层 次的对齐,低层次的较高层次的缩进两个字符。 5)考虑到MAX+plusll要求源程序文件的名字与实体名必须一致,因此为了使同 一 个VHDL源程序文件能适应各个EDA开发软件上的使用要求,建议各个源程 序文件的命名均与实体名一致。

一、 VHDL程序基本结构 3. VHDL程序基本结构 LIBRARY 库名; USE 库名.程序包名.ALL; ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);] END [ENTITY] [实体名]; ARCHITECTURE 结构体名 OF 实体名 IS [说明语句;] BEGIN [功能描述语句;] END [ARCHITECTURE] [结构体名]; - -类属表说明用于确定设计实体和其外部环境通信的参数,传递静态的信息。其一般书写格式如下: GENERC([常数名:数据类型[:设定值] {;常数名:数据类型[:设定值]}); 例: GENERIC(WIDTH:INTEGER=8); - -端口模式是指这些通道上的数据流动方式,如:IN(输入)、OUT(输出)、BUFFER(具有读功能的输出模式,可以读或写,只能有一个驱动源)、INOUT(双向 )。 - -结构体中的说明语句是对结构体的功能描述语句中将要用到的信号(SIGNAL)、数据类型(TYPE)、常数(CONSTANT)、元件(COMPONENT)、函数(FUNCTION)和过程(PROCEDURE)等加以说明的语句。 - -功能描述语句结构可以含有块、进程、信号赋值、子程序调用、元件例化五种不同类型的,以并行方式工作的语句结构。而在每一语句结构的内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句。

一、 VHDL程序基本结构 3. VHDL程序基本结构 - - 与门的逻辑描述AND2.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC-1164.ALL; ENTITY AND2 IS PORT(A,B:IN STD_LOGIC; Y:OUT STD_LOGIC); END ENTITY AND2; ARCHITECTURE ART1 OF AND2 IS BEGIN Y<=A AND B; END ARCHITECTURE ART1; - - 或门的逻辑描述OR2.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC-1164.ALL; ENTITY OR2 IS PORT(A,B:IN STD_LOGIC; Y:OUT STD_LOGIC); END ENTITY OR2; ARCHITECTURE ART1 OF OR2 IS BEGIN Y<=A OR B; END ARCHITECTURE ART1; - - 非门的逻辑描述NOT1.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC-1164.ALL; ENTITY NOT1 IS PORT(A:IN STD_LOGIC; Y:OUT STD_LOGIC); END ENTITY NOT1 ; ARCHITECTURE ART1 OF NOT1 IS BEGIN Y<= NOT A ; END ARCHITECTURE ART1; - - 与非门的逻辑描述NAND2.VHD LIBRARY IEEE; USE IEEE.STD_LOGIC-1164.ALL; ENTITY NAND2 IS PORT(A,B:IN STD_LOGIC; Y:OUT STD_LOGIC); END ENTITY NAND2 ; ARCHITECTURE ART1 OF NAND2 IS BEGIN Y<=A NAND B; END ARCHITECTURE ART1;

二、 VHDL语言要素 1. VHDL文字规则 1)数字型文字 数字型文字的值有多种表达方式,现列举如下: (1)整数文字:整数文字都是十进制的数。 如:4、578,0,156E2(=15600),45_234_287(=45234287)。数字间的下 划线仅仅是为了提高文字的可读性,相当于一个空的间隔符。 (2)实数文字:实数文字也都是一种十进制的数,但必须带有小数点。 如:18.993,1.0,0.0,88_670_551_909(=88670551.453909)。 (3)以数制基数表示的文字:用这种方法表示的数由五个部分组成。 第一部分,用十进制数标明数制进位的基数; 第二部分,数制隔离符号“#”; 第三部分,表达的文字; 第四部分,指数隔离符号“#”; 第五部分,用十进制表示的指数部分,这一部分的数如果是0可以省去不写。 如:10#170# - -(十进制数表示,等于170); 2#1111 _ 1110# - -(二进制数表示,十进制数等于是254); 16#F.01#E+2 - -(十六进制数表示,二进制数等于2#1111 _ 0000 _ 0001#,十进制数等于3841.00)。 (4)物理量文字(VHDL综合器不接受此类文字) 如:50s(50秒),200m(200米),177A(177安培)。

二、 VHDL语言要素 1. VHDL文字规则 2)字符及字符串型文字 3)标识符 字符:是用单引号引起来的ASCII字符,可以是数值,也可以是符号或字母。 如:‘R’,‘A’,‘*’,‘Z’。 字符串:是一维的字符数组,须放在双引号中。 (1)文字字符串:它是用双引号引起来的一串文字。 如:“BB$CC” ,“ERROR”,“BOTH S AND Q EQUAL TO L”,“X”。 (2)数位字符串:数位字符串也称位矢量,是预定义的数据类型BIT的一位数组,它们所 代表的是2进制、8进制、16进制的数组,其位矢量的长度即为等值的二进制数的位数。 数位字符串的表示首先要有计算基数, 然后将该基数表示的值得放在双引号中,基数 符分别以“B”、“O”、和 “X”表示2进制、8进制、16进制,并放在字符串的前面。 例如:B“1_1101_1110”- - 二进制数数组,位矢数组长度是9; X“AD0”- - 十六进制数数组,位矢数组长度是12。 3)标识符 标识符用来定义常数、变量、信号、端口、子程序或参数的名字。VHDL的基本标识符是以英文字母开头,不连续使用下划线“_”,不以下划线“_”结尾的,由26个大小写英文字母、数字0~9以及下划线“_”组成的字符串。VHDL’93标准还支持扩展标识符,但是目前仍有许多VHDL工具不支持扩展标识符。标识符中的英语字母不分大小写。VHDL的保留字不能用于作为标识符使用。如:DECODER_1,FFT,Sig_N,NOT_ACK,State0,Idle是合法的标识符。而_DECOER_1,2FFT,SIG_#N,NOT—ACK,RYY_RST_ ,data_ _ BUS,RETURN则是非法的标识符。

二、 VHDL语言要素 1. VHDL文字规则 4)下标名及下标段名 下标段名:用于指示数组型变量或信号的某一段元素; 下标名:用于指示数组型变量或信号的某一元素。 语句格式如下:数组类型符号名或变量名(表达式1 [TO/DOWNTO 表达式2]); 注:表达式的数值必须在数组元素下标号范围以内,并且是可计算的。 TO表示是数组下标序列由低到高,如“3 TO 8”; DOWNTO表示数组下标序列由高到低,如“9 DOWNTO 2”。 如果表达式是一个可计算的值,则此操作可很容易地进行综合。 如果是不可计算的,则只能在特定情况下综合,且耗费资源较大。 示例: SIGNAL A,B,C: BIT_VECTOR(0 TO 5); SIGNAL M:INTEGER RANGE 0 TO 5; SIGNAL Y,Z:BIT; Y〈=A(M): --M是不可计算型下标表示 Z〈=B(3): --3是可计算型下标表示 C(0 TO 3)〈=A(4 TO 7): --以段的方式进行赋值 C(4 TO 7)〈=A(0 TO 3): --以段的方式进行赋值

二、 VHDL语言要素 2. VHDL数据对象 1)常量(CONSTANT):(全局量,恒定不变的值) 定义语法格式: CONSTANT 常量名:数据类型:=表达式; 如:CONSTANT DELY:=25ns; 2)变量(VARIABLE):(局部量,只能在进程和子程序中使用,不可列入敏感量) VARIABLE 常量名:数据类型:=初始值; 赋值语法格式: 目标变量名:=表达式; 如:VARABLE A: INTEGER; A:=3; 3)信号(SIGNAL) :(全局量,类似连接线,可列入敏感量) SIGNAL 常量名:数据类型<=初始值; 目标变量名<=表达式; 如: SIGNAL S1:STD_LOGIG; S1 <= ‘1’;

二、 VHDL语言要素 2. VHDL数据对象 4)三者的使用比较 (1)从硬件电路系统来看,常量相当于电路中的恒定电平,如GND或VCC接口,而变量和信号则相当于组合电路系统中门与门间的连接及其连线上的信号值。 (2)从行为仿真和VHDL语句功能上看,变量和信号的区别主要表现在接受和保持信号的方式、信息保持与传递的区域大小上。例如信号可以设置延时量,而变量则不能;变量只能作为局部的信息载体,而信号则可作为模块间的信息载体。变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。 (3)从综合后所对应的硬件电路结构来看,信号一般将对应更多的硬件结构,但在许多情况下,信号和变量并没有什么区别。例如在满足一定条件的进程中,综合后它们都能引入寄存器。这时它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性。 (4)虽然VHDL仿真器允许变量和信号设置初始值,但在实际应用中,VHDL综合器并不会把这些信息综合进去。这是因为实际的FPGA/CPLD芯片在上电后,并不能确保其初始状态的取向。因此,对于时序仿真来说,设置的初始值在综合时是没有实际意义的。

二、 VHDL语言要素 3. VHDL数据类型 1)VHDL的预定义数据类型 (1)布尔(BOOLEAN)数据类型 程序包STANDARD中定义布尔数据类型的源代码如下: TYPE BOOLEAN IS (FALES,TRUE); 布尔数据类型实际上是一个二值枚举型数据类型,它的取值有FALSE和TRUE两种。综合器将用一个二进制位表示BOOLEAN型变量或信号。 例如,当A大于B时,在IF语句中的关系运算表达式(A>B)的结果是布尔量TRUE,反之为FALSE。综合器将其变为1或0信号值,对应于硬件系统中的一根线。 (2) 位(BIT)数据类型 位数据类型也属于枚举型,取值只能是1或0。位数据类型的数据对象,如变量、信号等,可以參与逻辑运算,运算结果仍是位的数据类型。VHDL综合器用一个二进制位表示BIT。在程序包STANDARD中定义的源代码是: TYPE BIT IS(‘0’,‘1’); (3) 位矢量(BIT_VECTOR)数据类型 位矢量只是基于BIT数据类型的数组,在程序包STANDARD中定义的源代码是: TYPE BIT_VETOR IS ARRAY(NATURAL RANGE<>)OF BIT; 使用位矢量必须注明位宽,即数组中的元素个数和排列,例如: SIGNAL A:BIT_VECTOR(7 TO 0);

二、 VHDL语言要素 3. VHDL数据类型 1)VHDL的预定义数据类型 (4)字符(CHARACTER)数据类型 字符类型通常用单引号引起来,如‘A’。字符类型区分大小写,如‘B’不同于‘b’。字符型已在STANDARD程序包中作了定义。 (5)整数(INTEGER)数据类型 整数类型的数代表正整数、负整数和零。在VHDL中,整数的取值范围是 -2 147 483 647~ -2 147 483 647,即可用32位有符号的二进制数表示。在实际应用中,VHDL仿真器通常将INTEGER类型作为有符号数处理,而VHDL综合器将INTEGER作为无符号数处理。在使用整数是,VHDL综合器要求用RANGE子句为所定义的数限定范围,然后根据所限定的范围来决定表示此信号或变量的二进制的位数,因为VHDL综合器无法综合未限定的整数类型的信号或变量。 如语句“SIGNAL TYPEI:INTEGER RANGE 0 TO 15;”规定整数TYPEI的取值范围是0~5共16个值,可用4位二进制数来表示,因此,TYPEI将被综合成由四条信号线构成的信号。 整数常量的书写方式示例如下: - - 十进制整数 ;10E4 - - 十进制整数;16#D2# - - 十六进制整数; 2#11011010# - - 二进制整数。 (6)自然数(NATURAL)和正整数(POSITIVE)数据类型 自然数是整数的一个子类型,非负的整数,即零和正整数;正整数也是一个子类型,它包括整数中非零和非负的数值。它们在STANDARD程序包中定义的源代码如下: SUBTYPE NATURAL IS INTEGER RANGE0 TO INTEGER’HIGH; SUBTYPE POSITIVE IS INTEGER RANGE1 TO INTEGER’HIGH;

二、 VHDL语言要素 3. VHDL数据类型 1)VHDL的预定义数据类型 (7)实数(REAL)数据类型 实数常量的书写方式举例如下: 65971.333333 - - 十进制浮点数; 8#43.6#E+4 - - 八进制浮点数; 43.6E-4 - - 十进制浮点数。 (8)字符串(STRING)数据类型 字符串数据类型是字符数据类型的一个约束型数组,或称为字符串数组。 字符串必须用双引号标明。如: VARIABLE STRING_VAR:STRING(1 TO 7); … STRING_VAR:“A B C D”;

二、 VHDL语言要素 3. VHDL数据类型 1)VHDL的预定义数据类型 (9)时间(TIME)数据类型 VHDL中唯一预定义物理类型是时间。完整的时间类型包括整数和物理量单位两部分,整数和单位之间至少留一个空格,如50 ms ,30 ns. STANDARD程序包中也定义了时间。定义如下: TYPE TIME IS RANGE -2 147 483 647 TO -2 147 483 647 units fs: --飞秒,VHDL中的最小时间单位 ps=1000 fs : --皮秒 ns=1000 ps: --纳秒 us=1000 ns: --微秒 ms=1000 us: --毫秒 sec=1000 ms: --秒 min=60 sec: --分 hr=60 min: --时 end untis: (10)错误等级(SEVERITY_LEVEL) 在VHDL仿真器中,错误等级用来指示设计系统的工作状态,共有四种可能的状态值:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。在仿真过程中,可输出这四种值来提示被仿真系统当前的工作情况。其定义如下: TYPE SEVERITY _LEVEI IS(NOTE ,WARNING,ERROR,FAILURE);

二、 VHDL语言要素 3. VHDL数据类型 2)IEEE预定义标准逻辑位与矢量 (1)标准逻辑位STD_LOGIC数据类型 TYPE STD_LOGIC IS(‘U’,‘X’,‘O’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’); 各值的含义是; ‘U’- - 未初始化,‘X’ - - 强未知的,‘O’ - - 强O,‘1’ - - 强1,‘Z’ - - 高阻态, ‘W’ - - 弱未知的,‘L’ - - 弱O,‘H’ - - 弱1,‘_’ - - 忽略。 在程序中使用此数据类型前,需加入下面的语句: LIBRARY IEEE: USE IEEE.STD_LOGIC_1164.ALL;--程序包STD_LOGIC_1164中还定义了STD_LOGIC型逻辑运算符AND,NAND,OR,NOR,XOR和NOT的重载函数,以及两个转换函数,用于BIT与STD_LOGIC的相互转换。 (2)标准逻辑矢量(STD_LOGIC_VECTOR)数据类型 STD_LOGIC_VECTOR类型定义如下: TPYE STD_LOGIC_VECTOR IS ARRAY(NATURAL RANGE<>) OF STD_LOGIC ; 显然, STD_LOGIC_VECTOR是定义在STD_LOGIC_1164程序包中的标准一维数组,数组中的每一个元素的数据都是以上定义的标准逻辑位STD_LOGIC。 数据对象赋值的原则是:同位宽,同数据类型的矢量间才能进行赋值。

二、 VHDL语言要素 3. VHDL数据类型 3)其它预定义标准数据类型矢量 VHDL综合工具配备的扩展程序包中,定义了一些有用的类型。如 Synopsys公司在IEEE库中加入的程序包STD_LOGIC_ARITH中定义了的数据类型有:无符号型(UNSIGNED),有符号型(SIGNED),小整型(SMALL_INT)。 在程序包STD_LOGIC_ARITH中的类型定义如下: TYPE UNSIGNED IS ARRAY(NATURAL RANGE <> )OF STD_LOGIC; TYPE SIGNED IS ARRAY(NATURAL RANGE<> = 0F STD_LOGIC; SUBTYPE SMAIL_INT IS INTEGER RANGE 0 TO 1; 如果将信号或变量定义为这几个数据类型,就可以使用本程序包中定义的运算符。在使用之前,请注意必须加入下面的语句: LIBRARY IEEE; USE IEEE.STD_LOGIC_ARITH.ALL ; (1)无符号数据类型(UNSIGNED TYPE) UNSIGNED数据类型代表一个无符号的数值,在综合器中,这个数值被解释为一个二进制数, 这个二进制数最左位是其最高位。例如: VARIABLE VAR:UNSIGNED(0 TO 10);- -变量VAR有11位数值,最高位是VAR(0),而非VAR(10) SIGNAL SIG:UNSIGNED(5 TO 0);- -信号SIG有6位数值,最高位是SIG(5)。 (2)有符号数据类型(SIGNED TYPE) SIGNED数据类型代表一个无符号的数值,综合器将其解释为补码, 此数的最高位是符号位,例如:SIGNED (“0101”)代表+5,5;SIGNED (“1101”)代表-5。 若将上例的VAR定义为SIGNED数据类型,则数值意义就不同了,如: VARIABLE VAR:SIGNED(0 TO 10);- -变量VAR有11位,最左位VAR(0)是符号位。

二、 VHDL语言要素 3. VHDL数据类型 4)用户自定义数据类型方式 (1)TYPE语句用法 TYPE语句语法结构如下: TYPE 数据类型名 IS 数据类型定义[ OF 基本数据类型 ]; 其中,数据类型名由设计者自定;数据类型定义部分用来描述定义数据类型的表达方式和表达内容;关键词OF后的基本数据类型是指数据类型定义的元素的基本数据类型,一般都是取已有的预定义数据类型,如BIT,STD_LOGIC或INTEGER等。 以下列出了两种不同的定义方式: TYPE ST1 IS ARRAY(0 TO 15)OF STD_LOGIC; TYPE WEEK IS(SUN,MON,WED,THU,FRI,SAT); (2)SUBTYPE语句用法 子类型SUBTYPE只是由TYPE所定义的原数据类型的一个子集,它满足原始数据类型的所有约束条件,原数据类型称为基本数据类型。子类型SUPTYPE的语句格式如下: SUBTYPE 子类型名 IS 基本数据 RANGE 约束范围; 子类型的定义只在基本数据类型上作一些约束,并没有定义新数据类型。子类型定义 中的基本数据类型必须在前面已通过TYPE定义的类型。如下例: SUBTYPE DIGITS INTEGER RANGE 0 TO 9;

二、 VHDL语言要素 3. VHDL数据类型 5)枚举类型 【例】 TYPE M_STATE IS(STATE1,STATE2,STATE3,STATE4,STATE5); SIGNAL CURRENT_STATE,NEXT_STATE:M_STATE; 在这里,信号CURRENT_STATE和NEXT_STATE的数据类型定义为M_STATE,它们的取值范围是可枚举的,即从STATE1~STATE5共5种,而这些状态代表5组惟一的二进制数值。 在综合过程中,枚举类型文字元素的编码通常是自动的,编码顺序是默认的,一般将第一个枚举量(最左边的量)编码为0,以后的依次加1。综合器在编码过程中自动将第一枚举元素转变成位矢量,位矢的长度将取所需表达所有枚举元素的最小值。如上例中用于表达5个状态的矢位长度应该为3,编码默认值为如下方式: STATE1=‘000’;STATE2=‘001’;STATE3=‘010’;STATE4=‘011’;STATE5‘100’ 于是它们的数值顺序便成为STATE1<STATE2<STATE3<STATE4<STATE5。

二、 VHDL语言要素 3. VHDL数据类型 6)整数类型和实数类型 因这两种非枚举的数据类型的取值定义范围太大,综合器无法进行综合;故定义为整数或实数的数据对象的具体的数据类型必须由用户根据实际的需要重新定义,并限定其取值范围,以便综合器所接收,从而提高芯片资源的利用率。 如:    数据类型定义           综合结果 TYPE N1 IS RANGE 0 TO 100         - - 7位二进制原码 TYPE N2 IS RANGE 10 TO 100        - - 7位二进制原码 TYPE N3 IS RANGE -100 TO 100       - - 8位二进制补码 SUBTYPE N4 IS N3 RANGE 0 TO 6     - - 3位二进制原码 7)数组类型 数组类型属复合型类型,是将一组具有相同数据类型的元素集合在一起,作为一个数据对象来处理的类型。数组可以是一维(每个元素只有一个下标)数组或多维数组(每个元素有多个下标)。VHDL仿真器支持多维数组,但综合器只支持一维数组。 a.限定性数组定义语句格式如下: TYPE 数组名IS ARRAY(数组范围)OF 数据类型;- -数组范围明确指出数组元的定义数量和排序方式 b.非限制性数组的定义语句格式如下: TYPE 数组名 IS ARRAY( 数组下标名 RANCE<> ) OF 数据类型; - -“<>”是下标范围待定符号

二、 VHDL语言要素 3. VHDL数据类型 8)记录类型 由已定义的、数据类型不同的对象元素构成的数组称为记录类型的对象。定义记录类型的语句格式如下: TYPE记录类型名 IS RECORD 元素名 : 元素数据类型; … END  RECORD [记录类型名]; 记录类型定义示例如下: TYPE RECDATA IS RECORD - - 将RECDATA定义为四元素记录类型 ELEMNT1;TIME; - - 将元素ELEMENT1定义为时间类型 ELEMENT2:TIME; - - 将元素ELEMENT2定义为时间类型 ELEMENT3:STD_LOGIC; - - 将元素ELEMENT3定义为标准位类型 END RECORD RECDATA ;

二、 VHDL语言要素 3. VHDL数据类型 9) 数据类型转换 (1)类型转换函数方式 类型转换函数的作用就是将一种属于某种数据类型的数据对象转换成属于另一种数据类型的数据对象。 LIERARY IEEE: USE IEEE STD_LOGIC_1164,ALL; ENTTTY CNT4 IS PORT(CLK:IN STD_LOGIC; P:INOUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ENTTTY CNT4;   LIBRAY DATAIO; USE DATAIO.STD_LOGIC_OPS.ALL; ARCHITECTURE ART OF CNT4IS BEGIN PROCESS(CLK) IS IF CLK=“1”AND CLK`EVENT THEN P<=TO_VECTOR(2,TO_INTEGER(P)+1);-- TO_VECTOR将INTEGER转换成STD_LOGIC_VECTOR TO_INTEGER将STD_LOGIC_VECTOR转换成INTEGER END IF; END PROCESS; END ARCHITECTURE ART;

二、 VHDL语言要素 3. VHDL数据类型 9) 数据类型转换 (2)直接类型转换方式 直接类型转换的一般语句格式是: 数据类型标识符(表达式) 一般情况下,直接类型转换仅限于非常关联(数据类型相互间的关联性非常大)的数据类型之间,必须遵守以下规则: ① 所有的抽象数字类型是非常关联的类型(如整型、浮点型),如果浮点数转换为整数,则转换结果是最近的一个整型数。 ② 如果两个数组有相同的维数、两个数组的元素是同一类型,并且在各处的下标范围内索引是同一类型或非常接近的类型,那么这两个数组是非常关联类型。 ③ 枚举型不能被转换。 如果类型标识符所指的是非限定数组,则结果会将被转换的数组的下标范围去掉,即成为非限定数组。如果类型标识符所指的是限定性数组,则转换后的数组的下标范围与类型标识符所指的下标范围相同。转换结束后,数组中元素的值等价于原数组中的元素值。 【例】 VARIABLE DATAC,PARAMC:INTEGER; DATAC:=INTEGER(74.94*REAL(PARAMC)); 在类型于其子类型之间无须类型转换.即使两个数组的下标索引方向不同,这两个数组仍有可能是非常关联类型的.

二、 VHDL语言要素 4. VHDL操作符 在VHDL中,有四类操作符,即逻辑操作符(Logical Operator),关系操作符(Relational Operator) 、算术操作符(Arithmetic Operator)和符号操作符(Sign Operator)。

二、 VHDL语言要素 4. VHDL操作符 在VHDL中,有四类操作符,即逻辑操作符(Logical Operator),关系操作符(Relational Operator) 、算术操作符(Arithmetic Operator)和符号操作符(Sign Operator)。

二、 VHDL语言要素 4. VHDL操作符 在VHDL中,有四类操作符,即逻辑操作符(Logical Operator),关系操作符(Relational Operator) 、算术操作符(Arithmetic Operator)和符号操作符(Sign Operator)。 VHDL操作符优先级

课堂小结 一、 VHDL程序基本结构 二、 VHDL语言要素 三、 VHDL顺序语句(课外预习) (文字规则、数据对象、数据类型、操作符) 1.赋值语句(信号、变量赋值 ) 2.转向控制语句(IF、CASE、LOOP、NEXT和EXIT) 3.等待语句 4.子程序调用语句 (过程调用、函数调用) 5.返回语句 6.空操作语句 7.其它语句和说明( 属性描述)

课外作业: 教材P209 3.2 、3.5