1、VHDL与数字电路设计与数字电路设计主讲:崔主讲:崔 刚刚 北京工业大学电控学院电工电子中心北京工业大学电控学院电工电子中心2005年年9月月11高级教学目录目录 概述概述第一章第一章 VHDL的程序结构和软件操作的程序结构和软件操作 第二章第二章 数据类型与数据对象的定义数据类型与数据对象的定义第三章第三章 并行赋值语句并行赋值语句第四章第四章 顺序赋值语句顺序赋值语句第五章第五章 组合逻辑电路的设计组合逻辑电路的设计第六章第六章 时序逻辑电路的设计时序逻辑电路的设计第七章第七章 子程序、库和程序包子程序、库和程序包第八章第八章 CPLD和和FPGA的结构与工作原理的结构与工作原理 第九章第
2、九章 数字钟电路的设计数字钟电路的设计 2高级教学本节主要内容本节主要内容传统数字电路设计方法传统数字电路设计方法EDA设计方法设计方法PLD器件器件 PLD器件设计流程器件设计流程文本设计输入文本设计输入VHDL程序设计程序设计3高级教学数字电子技术的基本知识回顾数字电子技术的基本知识回顾组合逻辑电路组合逻辑电路 编码器、译码器、数据选择器、加法器、数值比较器等编码器、译码器、数据选择器、加法器、数值比较器等时序逻辑电路时序逻辑电路同步时序逻辑电路同步时序逻辑电路异步时序逻辑电路异步时序逻辑电路寄存器、移位寄存器、计数器、序列信号发生器寄存器、移位寄存器、计数器、序列信号发生器4高级教学一、
3、传统设计方法一、传统设计方法(1)首先确定可用的元器件;)首先确定可用的元器件;(2)根据这些器件进行逻辑设计,完成各模块;)根据这些器件进行逻辑设计,完成各模块;(3)将各模块进行连接,最后形成系统;)将各模块进行连接,最后形成系统;(4)而后经调试、测量观察整个系统是否达到规定)而后经调试、测量观察整个系统是否达到规定的性能指标。的性能指标。传统的设计方法是基于传统的设计方法是基于中小规模集成电路器件进中小规模集成电路器件进行设计(如行设计(如74系列及其改进系列、系列及其改进系列、CC4000系列、系列、74HC系列等都属于通用型数字集成电路),系列等都属于通用型数字集成电路),而而且是
4、采用自底向上进行设计:且是采用自底向上进行设计:5高级教学EDA(Electronics Design Automation)即电子设计)即电子设计自动化技术,是利用计算机工作平台,从事电子系自动化技术,是利用计算机工作平台,从事电子系统和电路设计的一项技术。统和电路设计的一项技术。EDA技术为电子系统设计带来了这样的变化:技术为电子系统设计带来了这样的变化:(1)设计效率提高,设计周期缩短;)设计效率提高,设计周期缩短;(2)设计质量提高;)设计质量提高;(3)设计成本降低;)设计成本降低;(4)能更充分地发挥设计人员的创造性;)能更充分地发挥设计人员的创造性;(5)设计成果的重用性大大提高
5、,省去了不必要的)设计成果的重用性大大提高,省去了不必要的重复劳动。重复劳动。二、二、EDA设计方法设计方法 6高级教学自顶向下的设计方法自顶向下的设计方法数字电路的数字电路的EDA设计是基于设计是基于PLD进行设计的,支持自进行设计的,支持自顶向下的设计方法:顶向下的设计方法:(1)首先从系统设计入手,在顶层进行功能划分和)首先从系统设计入手,在顶层进行功能划分和结构设计;结构设计;(2)然后再逐级设计底层的结构;)然后再逐级设计底层的结构;(3)并在系统级采用仿真手段验证设计的正确性;)并在系统级采用仿真手段验证设计的正确性;(4)最后完成整个系统的设计,实现从设计、仿真、)最后完成整个系
6、统的设计,实现从设计、仿真、测试一体化。测试一体化。7高级教学传统设计方法传统设计方法 vs EDA设计方法设计方法 传统设计方法传统设计方法EDA设计方法设计方法自底向上自底向上手动设计手动设计软硬件分离软硬件分离原理图设计方式原理图设计方式系统功能固定系统功能固定不易仿真不易仿真难测试修改难测试修改模块难移植共享模块难移植共享设计周期长设计周期长自顶向上自顶向上自动设计自动设计打破软硬件屏障打破软硬件屏障原理图、原理图、HDL等设计方式等设计方式系统功能易改系统功能易改易仿真易仿真易测试修改易测试修改模块可移植共享模块可移植共享设计周期短设计周期短8高级教学三、三、PLD器件器件 (一)出
7、现的背景(一)出现的背景 如果能把所设计的数字系统做成如果能把所设计的数字系统做成一片大规模集成一片大规模集成电路电路,则不仅能减小电路的,则不仅能减小电路的体积体积、重量重量、功耗功耗,而且,而且会使电路的会使电路的可靠性可靠性大为提高。大为提高。为某种专门用途而设计的集成电路叫做专用集成为某种专门用途而设计的集成电路叫做专用集成电路,即所谓的电路,即所谓的ASIC(Application Specific Integrated Circuit的缩写)。的缩写)。在用量不大的情况下,设计和制造这样的专用集成在用量不大的情况下,设计和制造这样的专用集成电路成本很高,而且设计、制造的周期也较长。
8、电路成本很高,而且设计、制造的周期也较长。可编程逻辑器件的研制成功为解决上述问题提供了可编程逻辑器件的研制成功为解决上述问题提供了比较理想的途径。比较理想的途径。9高级教学(二)(二)PLD概述概述PLD是可编程逻辑器件(是可编程逻辑器件(Programmable Logic Device)的英文缩写。的英文缩写。可编程逻辑器件是一种可编程逻辑器件是一种数字集成电路的半成品数字集成电路的半成品,在其,在其芯片上芯片上按一定排列方式按一定排列方式集成了集成了大量的逻辑门大量的逻辑门和和触发器触发器等基本逻辑元件。等基本逻辑元件。通过编程可以设置其逻辑功能。通过编程可以设置其逻辑功能。PLD编程编
9、程:利用利用开发工具开发工具对对PLD进行加工,即按设计要求将进行加工,即按设计要求将这些这些片内的元件连接片内的元件连接起来,使之完成某个逻辑电路或系统起来,使之完成某个逻辑电路或系统的功能,成为一个专用集成电路(的功能,成为一个专用集成电路(ASICApplication Specific Integrated Circuit)。)。10高级教学PLD开发系统开发系统PLD开发系统包括硬件和软件两部分。开发系统包括硬件和软件两部分。硬件部分:计算机、下载电缆或编程器;硬件部分:计算机、下载电缆或编程器;软件部分:集成开发系统。软件部分:集成开发系统。Altera公司:公司:Maxplus、
10、Quartus Xilinx公司:公司:Foundation、ISE Lattice公司:公司:Synario System、ispEXPERT System11高级教学四、四、PLD设计流程设计流程设计准备设计准备设计输入设计输入设计处理设计处理器件编程器件编程功能仿真功能仿真时序仿真时序仿真器件测试器件测试12高级教学PLD设计准备设计准备在设计之前,首先要进行方案论证和器件选择等设计在设计之前,首先要进行方案论证和器件选择等设计准备工作。准备工作。设计者首先要根据任务要求,判断系统的可行性。设计者首先要根据任务要求,判断系统的可行性。系统的可行性要受到逻辑要求合理性、成本、开发条系统的可
11、行性要受到逻辑要求合理性、成本、开发条件、器件供应等方面的约束。件、器件供应等方面的约束。若系统可行,则根据系统所完成的功能及复杂程若系统可行,则根据系统所完成的功能及复杂程度,对器件本身的资源和成本、工作速度及连线的可度,对器件本身的资源和成本、工作速度及连线的可布性等方面进行权衡,选择合适的设计方案和合适的布性等方面进行权衡,选择合适的设计方案和合适的器件类型。器件类型。13高级教学设计输入设计输入 将所设计的电路的逻辑功能按照开发系统要求的形将所设计的电路的逻辑功能按照开发系统要求的形式表达出来的过程称为设计输入。式表达出来的过程称为设计输入。通常,设计输入有如下三种方式:通常,设计输入
12、有如下三种方式:(1)原理图输入方式)原理图输入方式 适用于对系统及各部分电路很熟悉的场合。适用于对系统及各部分电路很熟悉的场合。(2)硬件描述语言输入方式)硬件描述语言输入方式 硬件描述语言是用文本方式描述设计,硬件描述语硬件描述语言是用文本方式描述设计,硬件描述语言有言有ABEL、AHDL、VHDL、Verilog等,其中等,其中VHDL和和Verilog已成为已成为IEEE标准。标准。(3)波形输入方式)波形输入方式14高级教学设计处理设计处理n逻辑优化逻辑优化 把逻辑描述转变为最适合在器件中实现的形式,把逻辑描述转变为最适合在器件中实现的形式,优化使设计所占用的资源最少。优化使设计所占
13、用的资源最少。n逻辑综合逻辑综合 根据设计描述,对给定的硬件结构组件,最终获根据设计描述,对给定的硬件结构组件,最终获得门级电路甚至更底层的电路描述文件,即将多得门级电路甚至更底层的电路描述文件,即将多个模块化设计文件合并为一个网表文件。个模块化设计文件合并为一个网表文件。n适配适配 确定优化后的逻辑能否与器件中的宏单元和确定优化后的逻辑能否与器件中的宏单元和I/O单单元适配。元适配。n分割分割 将大的设计分割为多个便于器件内部资源实现的将大的设计分割为多个便于器件内部资源实现的逻辑小块的形式。逻辑小块的形式。15高级教学设计校验设计校验设计校验过程包括功能仿真和时序仿真。设计校验过程包括功能
14、仿真和时序仿真。n功能仿真功能仿真n时序仿真时序仿真16高级教学器件编程器件编程 器件编程就是将开发系统生成的目标文件下载器件编程就是将开发系统生成的目标文件下载到可编程逻辑器件中,到可编程逻辑器件中,来定义内部模块的逻辑来定义内部模块的逻辑功能以及它们的相互连接关系。功能以及它们的相互连接关系。两种编程方式:两种编程方式:n编程器编程器n下载电缆下载电缆17高级教学PLD开发系统开发系统PLD开发系统包括硬件和软件两部分。开发系统包括硬件和软件两部分。硬件部分:计算机、下载电缆或编程器;硬件部分:计算机、下载电缆或编程器;软件部分:集成开发系统。软件部分:集成开发系统。Altera公司:公司
15、:Maxplus、Quartus Xilinx公司:公司:Foundation、ISE Lattice公司:公司:Synario System、ispEXPERT System18高级教学设计举例设计举例设计内容:设计内容:十进制计数器电路设计。十进制计数器电路设计。PLD器件:器件:ACEX1K系列的系列的EP1K30QC208。开发系统:开发系统:MAX+plus系统。系统。编程方式:下载电缆。编程方式:下载电缆。实验下载板实验下载板19高级教学设计过程设计过程1、设计输入、设计输入 VHDL 演示演示12、逻辑验证、逻辑验证 演示演示23、设计处理、设计处理 引脚设定引脚设定 演示演示3
16、4、器件编程、器件编程 连接下载电缆连接下载电缆 演示演示420高级教学三、三、PLD电路设计的特点电路设计的特点1、设计简单,方便;、设计简单,方便;2、电路系统可以集成在一片芯片上;、电路系统可以集成在一片芯片上;3、电路设计不依赖于器件进行设计;、电路设计不依赖于器件进行设计;4、电路系统很容易完善和升级。、电路系统很容易完善和升级。器件选择:(器件选择:(1)电路系统所完成的功能及复杂程度;)电路系统所完成的功能及复杂程度;(2)器件本身的资源和成本、性能参数、)器件本身的资源和成本、性能参数、器件编程工艺等方面进行权衡。器件编程工艺等方面进行权衡。21高级教学 VHDL是非常高速集成
17、电路硬件描述语言是非常高速集成电路硬件描述语言 (Very High speed Integrated Circuit Hardware Description Language)的英文缩写。的英文缩写。五、文本设计输入五、文本设计输入VHDL程序设计程序设计语法和风格语法和风格:(1 1)类似与现代高级编程语言,如)类似与现代高级编程语言,如C语言。语言。(2)VHDL描述的是硬件,它包含许多硬件特描述的是硬件,它包含许多硬件特有的结构。有的结构。22高级教学VHDL设计设计 VS 电路图设计电路图设计VHDL与电路图设计电路的方式不同,与电路图设计电路的方式不同,和电路图设计方式相比:和电
18、路图设计方式相比:(1)易于修改;)易于修改;(2)设计能力更强;)设计能力更强;(3)VHDL语言很方便:独立于器件设计;语言很方便:独立于器件设计;相同的程序代码可以用于不同厂家生产的相同的程序代码可以用于不同厂家生产的器件。器件。23高级教学VHDL程序的基本结构程序的基本结构include“stdio.h”;include“math.h”;int main(void)int a,b,c;a=8;b=9;c=a+b;return c;Library std;Use std.standard.all;Entity and2 is Port(a,b:in bit;c:out bit);End
19、 and2;Architecture a1 of and2 is Begin c=a and b;End a1;VHDL程序程序 C程序程序 24高级教学VHDL程序的基本结构程序的基本结构n(1)LIBRARY和和PACHAGE声明区;声明区;n(2)ENTITY定义区;定义区;n(3)ARCHITECTURE定义区;定义区;25高级教学Library(库)是用于存放预先编译好的(库)是用于存放预先编译好的Package(程序(程序包)。包)。Package(程序包)中定义了基本(程序包)中定义了基本的常数,数据类型,的常数,数据类型,元件及子程序等元件及子程序等。作用:声明在实体和结构体定
20、义中将用到的作用:声明在实体和结构体定义中将用到的 数据类型、元件或子程序等。数据类型、元件或子程序等。声明格式:声明格式:Library 库名库名;Use 库名库名.PACKAGE名名.All;(1)LIBRARY和和PACKAGE声明区声明区26高级教学 作用:作用:ENTITY(实体)用于定义电路的(实体)用于定义电路的外观,即外观,即I/O端口的类型和数量。端口的类型和数量。定义格式:定义格式:Entity 实体名 is Port(a:in bit;b:in bit;c:out bit);End 实体名;(2)ENTITY定义区定义区端口名端口名数据类型数据类型端口模式端口模式27高级
21、教学端口模式端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)IN OUT BUFFER INOUT(2)ENTITY定义区定义区28高级教学(3)ARCHITECTURE定义区定义区 实体的实现。即实体的实现。即说明电路执行什么动作或实现功能。说明电路执行什么动作或实现功能。定义格式:定义格式:Architecture 结构体名结构体名 of 实体名实体名 is 声明语句;声明语句;(内部信号、变量、常数,元件,子程序声明内部信号、变量、常数,元件,子程序声明)Begin并行描述语句;并行描述语句;End 结构体名;结
22、构体名;29高级教学二输入与门电路设计范例二输入与门电路设计范例 abc电路真值表电路真值表abc00010001011130高级教学二输入与门电路设计范例二输入与门电路设计范例Library std;Use std.standard.all;Entity and2 is Port(a:in bit;b:in bit;c:out bit);End and2;-实体定义结束。实体定义结束。双减号双减号-为为VHDL程序的注释符,类似程序的注释符,类似C语言中的语言中的/注释符。注释符。31高级教学二输入与门电路设计范例二输入与门电路设计范例Architecture Na of and2 is B
23、egin c=0 when a=0 and b=0 else 0 when a=1 and b=0 else 0 when a=0 and b=1 else 1;符号符号=为信号直接赋值符。为信号直接赋值符。End Na;-结构体结构体Na Architecture Nb of and2 is Begin c=a and b;-and 为逻辑与操作为逻辑与操作End Nb;-结构体结构体Nb32高级教学第一章第一章 VHDL的程序结构和软件操作的程序结构和软件操作 1-1 VHDL程序的基本结构程序的基本结构1-2 Max+plus的操作的操作33高级教学1-1 VHDL程序的基本结构程序的基
24、本结构include“stdio.h”;include“math.h”;int main(void)int a,b,c;a=8;b=9;c=a+b;return c;Library std;Use std.standard.all;Entity and2 is Port(a,b:in bit;c:out bit);End and2;Architecture a1 of and2 is Begin c=a and b;End a1;VHDL程序程序 C程序程序 34高级教学1-1 VHDL程序的基本结构程序的基本结构n(1)LIBRARY和和PACHAGE声明区;声明区;n(2)ENTITY定义
25、区;定义区;n(3)ARCHITECTURE定义区;定义区;n(4)CONFIGURATION定义区。定义区。35高级教学Library(库)是用于存放预先编译好的(库)是用于存放预先编译好的Package(程序(程序包)。包)。Package(程序包)中定义了基本(程序包)中定义了基本的常数,数据类型,的常数,数据类型,元件及子程序等元件及子程序等。作用:声明在实体和结构体定义中将用到的作用:声明在实体和结构体定义中将用到的 数据类型、元件或子程序等。数据类型、元件或子程序等。声明格式:声明格式:Library 库名库名;Use 库名库名.PACKAGE名名.All;(1)LIBRARY和和
26、PACKAGE声明区声明区36高级教学 作用:作用:ENTITY(实体)用于定义电路的(实体)用于定义电路的外观,即外观,即I/O端口的类型和数量。端口的类型和数量。定义格式:定义格式:Entity 实体名 is Port(a:in bit;b:in bit;c:out bit);End 实体名;(2)ENTITY定义区定义区端口名端口名数据类型数据类型端口模式端口模式37高级教学(2)ENTITY定义区定义区标识符的定义原则:标识符的定义原则:(1)标识符由字母、数字和下划线组成,)标识符由字母、数字和下划线组成,a7_a7_;(2)在标识符不区分大小写,)在标识符不区分大小写,ab和和AB
27、是一样的;是一样的;(3)第一个字符必须是字母,即)第一个字符必须是字母,即a666a666;(4)不允许有两个连续的下划线,)不允许有两个连续的下划线,a_ba_b错误;错误;(5)末尾不能是下划线,)末尾不能是下划线,mname_mname_错误;错误;(6)标识符不能和关键字相同)标识符不能和关键字相同,如如EntityEntity,isis等。等。38高级教学端口模式端口模式(MODE)有以下几种类型:IN;OUT;INOUT;BUFFER 端口模式可用下图说明:(黑框代表一个设计或模块)IN OUT BUFFER INOUT(2)ENTITY定义区定义区39高级教学(3)ARCHIT
28、ECTURE定义区定义区 定义了实体的实现。即电路的具体描述定义了实体的实现。即电路的具体描述,说明电路执,说明电路执行什么动作或实现功能。行什么动作或实现功能。定义格式:定义格式:Architecture 结构体名结构体名 of 实体名实体名 is 声明语句;声明语句;(内部信号、变量、常数,元件,子程序声明内部信号、变量、常数,元件,子程序声明)Begin并行描述语句;并行描述语句;End 结构体名;结构体名;40高级教学(4)CONFIGURATION定义区定义区 一个完整一个完整VHDL电路设计必须有电路设计必须有一个实体一个实体和和对应的结构体对应的结构体,即,即实体和结构体对实体和
29、结构体对构成一个构成一个完整的完整的VHDL设计。设计。一个实体可对应一个结构体或多个结构体,一个实体可对应一个结构体或多个结构体,即一个实体可以有不同的描述方式。即一个实体可以有不同的描述方式。作用:作用:当实体有多个结构体时,当实体有多个结构体时,系统默认实体选系统默认实体选用最后一个结构体,用最后一个结构体,利用利用CONFIGURATION语句可以任意选择采用语句可以任意选择采用哪一个结构体。哪一个结构体。41高级教学(4)CONFIGURATION定义区定义区定义格式:定义格式:Configuration 配置名配置名 of 实体名实体名 isfor 选用的结构体名选用的结构体名en
30、d for;end configuration 配置名配置名;42高级教学二输入与门电路设计范例二输入与门电路设计范例 abc电路真值表电路真值表abc00010001011143高级教学二输入与门电路设计范例二输入与门电路设计范例Library std;Use std.standard.all;Entity and2 is Port(a:in bit;b:in bit;c:out bit);End and2;-实体定义结束。实体定义结束。双减号双减号-为为VHDL程序的注释符,类似程序的注释符,类似C语言中的语言中的/注释符。注释符。44高级教学二输入与门电路设计范例二输入与门电路设计范例A
31、rchitecture Na of and2 is Begin c=0 when a=0 and b=0 else 0 when a=1 and b=0 else 0 when a=0 and b=1 else 1;符号符号=为信号直接赋值符。为信号直接赋值符。End Na;-结构体结构体Na Architecture Nb of and2 is Begin c=a and b;-and 为逻辑与操作为逻辑与操作End Nb;-结构体结构体Nb45高级教学二输入与门电路设计范例二输入与门电路设计范例Configuration s1 of and2 isfor naend for;end con
32、figuration s1;-结构体配置结束。结构体配置结束。46高级教学1-2 Max+plus系统的操作系统的操作 Max+plus开发工具是美国开发工具是美国Altera公司自行设公司自行设计的一种软件工具,其全称为计的一种软件工具,其全称为Multiple Array Matrix and Programmable Logic User System。它具有它具有原理图输入原理图输入和和文本输入文本输入(采用硬件描述(采用硬件描述语言)两种输入手段,利用该工具所配备的语言)两种输入手段,利用该工具所配备的编辑编辑、编译编译、仿真仿真、时序分析时序分析、芯片编程芯片编程等功能,将设计等功
33、能,将设计电路图或电路描述程序变成基本的逻辑单元写入到电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中(如可编程的芯片中(如CPLD或或FPGA芯片),作成芯片),作成ASIC芯片。它是芯片。它是EDA设计中不可缺少的一种工具。设计中不可缺少的一种工具。47高级教学下面我们介绍利用下面我们介绍利用Max+plus 系统如何实现如下操作:系统如何实现如下操作:(1)如何编写)如何编写VHDL程序(使用程序(使用Text Editor););(2)如何编译)如何编译VHDL程序(使用程序(使用Compiler););(3)如何仿真验证)如何仿真验证VHDL程序(使用程序(使用Wavefo
34、rm Editor,Simulator););(4)如何进行芯片的时序分析(使用)如何进行芯片的时序分析(使用Timing Analyzer););(5)如何安排芯片脚位(使用)如何安排芯片脚位(使用Floorplan Editor););(6)如何下载程序至芯片(使用)如何下载程序至芯片(使用Programmer)。)。1-2 Max+plus系统的操作系统的操作48高级教学(1)如何编写)如何编写VHDL程序程序a.打开文本编辑器;打开文本编辑器;File/new/Text editor fileb.编写编写VHDL程序;程序;c.保存文件,保存文件,文件名和定义的实体名必文件名和定义的实
35、体名必须相同,须相同,文件扩展名为文件扩展名为VHD,文件文件存盘的目录不应是根目录或桌面,建议存存盘的目录不应是根目录或桌面,建议存放在放在Max2work或或Maxplus2目录,或其子目录,或其子目录目录。49高级教学(2)如何编译)如何编译VHDL程序程序a.打开需要编译的文件;打开需要编译的文件;b.设置工程到目前打开的文件设置工程到目前打开的文件;File/Project/Set Project to Current File,c.c.打开编译器;打开编译器;点击主菜单点击主菜单MAX+plus/Compiler选项。选项。d.选定选定VHDLVHDL源文件的版本源文件的版本;In
36、terfaces/VHDL Netlist Reader Settings e.打开编译器进行编译。打开编译器进行编译。50高级教学(3)如何仿真验证)如何仿真验证VHDL程序程序a.打开波形编辑器(打开波形编辑器(Waveform Editor Waveform Editor);b.确定仿真持续时间(确定仿真持续时间(File/End Time););c.将输入输出端口名选入将输入输出端口名选入波形编辑器;波形编辑器;d.编辑输入信号波形编辑输入信号波形;e.保存仿真波形文件保存仿真波形文件;f.打开仿真器打开仿真器MAX+plusSimulator进行仿真。在进行仿真。在仿真结束后打开仿真
37、波形文件(点击右下角的仿真结束后打开仿真波形文件(点击右下角的Open SCF按钮)即可以显示仿真结果。按钮)即可以显示仿真结果。51高级教学(4)如何进行芯片的时序分析)如何进行芯片的时序分析a.选择要下载的器件型号选择要下载的器件型号;点击主菜单的点击主菜单的Assign/Device项得到项得到Device对对话框。在话框。在Device Family框中选择芯片系列,框中选择芯片系列,在在Devices选择框下选择具体的芯片名,最后选择框下选择具体的芯片名,最后点击点击OK按钮按钮。b.再编译一次;再编译一次;c.打开时序分析器(打开时序分析器(Timing Analyzer););d
38、.点击点击Start进行时序分析。进行时序分析。52高级教学(5)如何安排芯片脚位)如何安排芯片脚位a.打开芯片脚位设置窗口;点击主菜单打开芯片脚位设置窗口;点击主菜单Assign/Pin/Location/Chip,出现脚位设置对话框;,出现脚位设置对话框;b.将实体定义的端口名字和下载芯片的管脚进行具体对将实体定义的端口名字和下载芯片的管脚进行具体对应;在应;在Node Name框中输入我们定义的实体端口名字,框中输入我们定义的实体端口名字,然后在然后在Pin列表选项框中输入下载芯片的管脚序号,再列表选项框中输入下载芯片的管脚序号,再点击对话框右下角的点击对话框右下角的Add按钮,将所有端
39、口设置完成按钮,将所有端口设置完成以后,点击以后,点击Ok按钮,则实现实体端口和下载芯片的管按钮,则实现实体端口和下载芯片的管脚的对应;脚的对应;c.再编译一次,将生成可以下载的文件(再编译一次,将生成可以下载的文件(And2.Sof)。)。53高级教学(6)如何下载程序至芯片)如何下载程序至芯片a.将下载电缆与计算机并口相连,然后给芯片通电将下载电缆与计算机并口相连,然后给芯片通电;b.打开编程器打开编程器Programmer;Options/Hardware Setup,在,在Hardware Type选择选择ByteBlaster(MV)方式,则在)方式,则在Parallel Port处
40、显处显示示LPT1,单击,单击OK钮返回钮返回Programmer窗口。窗口。c.下载方式选择下载方式选择;d.选择下载的芯片类型和要下载的文件(选择选择下载的芯片类型和要下载的文件(选择JTAG/Muti Devic JTAG Chain Setup)。)。e.点击点击Configure进行下载,进行下载,将程序写入芯片中将程序写入芯片中。54高级教学第二章第二章 数据类型与数据对象的定义数据类型与数据对象的定义n2-1 数据类型数据类型n2-2 数据对象的定义数据对象的定义n2-3 信号运算符信号运算符n2-4 信号属性信号属性55高级教学2-1 数据类型数据类型在在VHDL程序中,我们经
41、常会遇到这样的语句:程序中,我们经常会遇到这样的语句:Signal A :std_logic;Variable B :std_logic_vector(7 downto 0);Constant C :integer;数据对象类型数据对象类型数据类型数据类型数据对象名数据对象名56高级教学2-1-1 逻辑数据逻辑数据类型类型(1)布尔代数()布尔代数(Boolean)型)型;(2)位()位(Bit););(3)位数组类型()位数组类型(Bit_Vector)在在std库的库的standard程序包中进行定义。程序包中进行定义。type BIT_VECTOR is array(NATURAL ra
42、nge)of BIT;type BIT is(0,1);type BOOLEAN is(FALSE,TRUE);57高级教学(4)标准逻辑型()标准逻辑型(Std_Logic););Type STD_LOGIC is(U,-Uninialized;未初始化;未初始化 X,-Forcing unknown;浮接不定;浮接不定 0,-Forcing 0;低电位;低电位 1,-Forcing 1;高电位;高电位 Z,-High Impedance;高阻抗;高阻抗 W,-Weak Unknown;弱浮接;弱浮接 L,-Weak 0;弱低电位;弱低电位 H,-Weak 1;弱高电位;弱高电位 -,-Do
43、nt care;不必理会;不必理会);(5)标准逻辑数组类型()标准逻辑数组类型(Std_Logic_vector););在在ieee库的库的std_logic_1164程序包中定义。程序包中定义。TYPE std_logic_vector IS ARRAY(NATURAL RANGE)OF std_logic;58高级教学2-1-2 数值数据数值数据类型类型(1)整数()整数(Integer););a.正整数(正整数(POSITIVE)b.自然数(自然数(NATURAL)在在std库的库的standard程序包中进行定义。程序包中进行定义。subtype POSITIVE is range
44、1 to INTEGERHigh;Type INTEGER is range 2147483648 to 2147483647;subtype NATURAL is range 0 to INTEGERHigh;59高级教学(2)实数()实数(Real)(3)有符号数()有符号数(Signed)无符号数(无符号数(Unsigned)在在ieee库的库的std_logic_arith程序包中定义。程序包中定义。type REAL is range 1.7E38 to 1.7E38;type UNSIGNED is array(NATURAL range)of STD_LOGIC;type SIG
45、NED is array(NATURAL range)of STD_LOGIC;SIGNED 的最高位为符号位,其余位为数值位,数值位为的最高位为符号位,其余位为数值位,数值位为补码形式。如:符号数补码形式。如:符号数”1001”表示表示-7。60高级教学library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;entity data isport(a,b:in unsigned(3 downto 0);-a,b:in signed(3 downto 0);c:out std_logic);end data;ar
46、chitecture m1 of data isbegin c=1 when ab else 0;end m1;当定义成无符号类型时,若当定义成无符号类型时,若a=”1000”,b=0001,即即a=8,b=1则结果则结果c=0;当定义成有符号类型时,若当定义成有符号类型时,若a=”1000”,b=0001,则则a=-8,b=1,则结果,则结果c=1。61高级教学2-1-3 列举和数组数据类型列举和数组数据类型 (1)列举数据类型()列举数据类型(Enumerated Types)定义格式:定义格式:Type 列举名称列举名称 is(元素(元素1,元素,元素2,););(2)数组数据类型()数
47、组数据类型(Array Types)定义格式:定义格式:Type 数组名称数组名称 is Array(range)of 数据类型;数据类型;62高级教学2-1-4 数据类型的转换数据类型的转换 在在VHDL语言里,不同类型的数据信号之间不能语言里,不同类型的数据信号之间不能互相赋值。当需要不同类型数据之间传递信息时,就互相赋值。当需要不同类型数据之间传递信息时,就需要需要类型转换函数类型转换函数将其中的一种类型数据转换为另一将其中的一种类型数据转换为另一中数据类型后,再进行信号的传递。中数据类型后,再进行信号的传递。例如:例如:Signal Y:Std_logic_vector(7 downt
48、o 0);Signal X:Integer range 0 to 255;Y=CONV_STD_LOGIC_VECTOR(X,8);转换函数有两个参数,转换函数有两个参数,被转换的对象被转换的对象和和转换后转换后的位数的位数。63高级教学常用的数据类型转换函数常用的数据类型转换函数nCONV_INTEGER 将数据类型将数据类型 UNSIGNED,SIGNED转换为转换为INTEGER 类型类型.nCONV_UNSIGNED 将数据类型将数据类型INTEGER,SIGNED转换为转换为UNSIGNED 类型类型.nCONV_SIGNED 将数据类型将数据类型INTEGER,UNSIGNED转换
49、为转换为SIGNED类型类型.nCONV_STD_LOGIC_VECTOR 将数据类型将数据类型INTEGER,UNSIGNED,SIGNED,STD_LOGIC转换为转换为STD_LOGIC_VECTOR 类型类型.在库在库ieee的程序包的程序包std_logic_arith中定义中定义64高级教学2-2 数据对象的定义数据对象的定义常用的数据对象有三种:常用的数据对象有三种:常数(常数(Constant)信号(信号(Signal)变量(变量(Variable)65高级教学2-2-1 常数的定义常数的定义(1)将数据对象定义为常数,一方面希望该数据)将数据对象定义为常数,一方面希望该数据对
50、象的值不会被改变;另一方面,为了提高程序对象的值不会被改变;另一方面,为了提高程序的可读性。的可读性。(2)常数为全局量。)常数为全局量。(3)常数在程序包说明、实体说明、结构体描述、)常数在程序包说明、实体说明、结构体描述、过程说明、函数调用中使用。过程说明、函数调用中使用。(4)常数的定义格式:)常数的定义格式:Constant 常数名:数据类型常数名:数据类型 :=常数值常数值;如:如:Constant D1:Integer:=3;注意!常数定义的同时进行赋初值。注意!常数定义的同时进行赋初值。66高级教学常数的应用示例常数的应用示例library ieee;use ieee.std_l