版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1.3可编程逻辑器件的设计1.2可编程逻辑器件概述1.1EDA技术的发展概况第1章概述1.4EDA的应用及发展趋势1.1EDA技术的发展概况1.1.1EDA的概念和发展历史1.1.2PLD的发展概况广义EDA技术指的是以计算机硬件和系统软件为基本工作平台,继承和借鉴前人在电路和系统、数据库、图形学、图论和拓扑逻辑、计算数学、优化理论等多学科的最新科技成果而研制的商品化EDA通用支撑软件和应用软件包,旨在帮助电子设计工程师在计算机上完成电路的功能设计、逻辑设计、性能分析、时序测试及PCB(印刷电路板)的自动设计。1.1.1EDA的概念和发展历史广义EDA技术的范畴应包括电子工程设计师开发产品的全过程,以及电子产品生产过程中期望由计算机提供的各种辅助功能。
狭义EDA技术是以大规模可编程逻辑器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,以计算机、大规模可编程逻辑器件的开发软件及实验开发系统为设计工具,通过有关的开发软件,自动完成用软件的方法设计电子系统到硬件系统的逻辑编译、逻辑化简、逻辑分割、逻辑综合及优化、逻辑布局布线、逻辑仿真,直至对于特定目标芯片的适配编译、逻辑映射、编程下载等工作,最终形成集成电子系统或专用集成芯片的一门新技术。回顾近40年电子设计技术的发展历程,可将EDA技术分为3个阶段。1.20世纪70年代的计算机辅助设计(CAD)阶段2.20世纪80年代的计算机辅助工程设计(ComputerAidedEngineering,CAE)阶段3.20世纪90年代电子系统设计自动化(EDA)阶段目前PLD的单片集成度达1000万系统门以上,速度达420MHz以上,线宽达90nm,属深亚微米技术。简单地讲,PLD是这样一种ASIC,内部有大量的门电路,通过用软件编程可以来实现这些门电路不同的连接关系,从而整个PLD就完成了不同的功能,并且这些门电路的连接关系可以用软件来改变。PLD与分立元件相比,具有速度快、容量大、功耗小和可靠性高等优点。1.1.2PLD的发展概况1.2可编程逻辑器件概述1.2.1简单PLD的基本结构1.2.2CPLD的基本结构1.2.3FPGA的基本结构1.2.4可编程逻辑器件的主要厂商1.2.5Altera公司可编程逻辑器件综述1.2.6ISP1.按可编程逻辑器件集成度分类图1.1可编程逻辑器件分类2.按可编程逻辑器件结构分类目前常用的可编程逻辑器件都是从“与-或阵列”和“门阵列”两类基本结构发展起来的,所以又可从结构上将其分为两大类:
●PLD器件——基本结构为与-或阵列的器件;
●FPGA器件——基本结构为门阵列的器件。3.按可编程逻辑器件编程工艺分类①熔丝(Fuse)或反熔丝(Antifuse)编程器件。
②EPROM编程器件,即紫外线擦除可编程器件。
③EEPROM编程器件,即电擦写可编程器件。
④SRAM编程器件。Xilinx公司的FPGA是这一类器件的代表。图1.2PLD器件基本结构1.2.1简单PLD的基本结构图1.3PLD阵列线连接表示和逻辑图形符号图1.4PROM阵列结构早期的PLD主要是可编程只读存储器(ProgrammableReadOnlyMemory,PROM)。图1.5PLA阵列结构后来,出现了PLA器件,PLA是在PROM结构的基础上发展而来的。图1.6PAL阵列结构20世纪70年代末期,AMD公司率先推出可编程阵列逻辑(ProgrammableArrayLogic,PAL)器件,在PAL中与门阵列是可编程的,而或阵列是固定的。表1.1 PLD结构汇总表阵列输出ANDORPROM固定的可编程的TS、OCPLA可编程的可编程的TS、OC、H、LPAL可编程的固定的TS、I/O、寄存器型GAL可编程的固定的由用户定义复杂可编程逻辑器件(ComplexProgrammableLogicDevice,CPLD)是由PAL和GAL发展而来的,其结构与PAL和GAL器件基本相同,它通常是由可编程逻辑的功能块围绕一个位于中心的、延时固定的可编程互连矩阵构成的。典型的复杂可编程逻辑器件有Altera公司的MAX系列和Lattice公司的ispLSI/PLSI系列等。1.2.2CPLD的基本结构MAX7000S系列器件结构中主要包含3个主要部分,分别是逻辑阵列块(LogicArrayBlock,LAB)、可编程连线阵列(ProgrammableInterconnectArray,PIA)和I/O控制块(I/OControlBlocks,IOC)。1.逻辑阵列块图1.7MAX7000S系列器件的内部结构(1)宏单元图1.8MAX7000S系列器件的宏单元的结构(2)扩展乘积项图1.9利用共享扩展项实现多个宏单元之间的连接①共享扩展项。②并联扩展项。图1.10利用并联扩展项实现多个宏单元之间的连接2.可编程连线阵列图1.11PIA连接到LAB的方式3.I/O控制块图1.12MAX7000S系列器件的I/O控制块
FPGA(FieldProgrammableGateArray,现场可编程门阵列)器件及其开发系统是开发大规模数字集成电路的新技术。
本节以Altera公司的FLEX10K产品为例,介绍PFGA器件的结构以及性能特点。FLEX10K系列器件主要由嵌入式阵列块、逻辑阵列块、快速通道(FastTrack)互连和I/O单元四部分组成。
逻辑阵列由一系列逻辑阵列块(LAB)构成。1.2.3FPGA的基本结构图1.13FLEX10K器件的结构示意图1.嵌入式阵列嵌入式阵列(EAB)是输入输出口上带有寄存器的灵活RAM块,用于实现一般阵列宏(Mega)功能。图1.14EAB中不同RAM的配置图1.15EAB的驱动和控制时钟2.逻辑阵列块逻辑阵列块(LAB)由8个LE以及它们的进位链、级联链、LAB控制信号与LAB局部互连组成。图1.16LAB的结构示意图逻辑单元(LE)是FLEX10K结构中的最小单元,它很紧凑,能有效实现逻辑功能。图1.17LE的方框图FLEX10K的LE有4种工作模式,即正常模式、运算模式、加减计数模式和可清除计数模式。图1.18LE的4种工作模式3.快速通道互连在FLEX10K器件中,快速通道互连提供LE与器件I/O引脚之间的互连。快速通道是遍布整个器件长、宽的一系列水平和垂直的连续式布线通道。图1.19快速通道互连4.I/O单元I/O单元(IOE)由一个双向缓冲器和一个寄存器组成。图1.20IOE的结构图1.Altera公司2.Xilinx公司3.Lattice公司4.Actel公司5.ATMEL公司1.2.4可编程逻辑器件的主要厂商1.2.5Altera公司可编程逻辑器件综述(1)MAXⅡ系列(2)MAX系列1.CPLD器件系列产品2.FPGA器件系列产品(1)FLEX系列(2)ACEX系列(3)Cyclone/CycloneII系列(4)Stratix/StratixII系列3.FPGA的配置器件系列产品Altera的FPGA器件主要有两类配置方式:主动配置和被动配置。
主动配置:由FPGA器件引导配置工作完成,它控制外部存储器和初始化过程。
被动配置:由外部计算机或控制器控制配置过程。1.2.6ISPISP(In-SystemProgramming,在系统可编程)是指用户可把已编译好的用户代码直接写入目标电路板上的器件,并且不管器件是空白的还是被编程过的,而不需要从电路板上取下器件,已经编程的器件也可以用ISP方式擦除或再编程。1.ISP简介ISP技术的优势是不需要编程器就可以进行系统的实验和开发,可编程芯片可以直接焊接到电路板上,调试结束即成成品,免去了调试时由于频繁地插入取出芯片对芯片和电路板带来的不便。
ISP的整个工作分为三部分,第一是引导程序(BOOT程序);第二是升级程序(update程序);第三是正常程序(normal程序)。2.JTAG简介JTAG是IEEE的联合测试行动小组(JointTestActionGroup)所制定的测试标准(IEEE1149.1—1990),使得用户可以测试器件的逻辑和相互之间的连接。IEEE1149.1标准定义了一个串行协议。无论封装约束怎样,该协议都要求每个符合标准的器件上有4个(也可以是5个)引脚。图1.26Altera的10芯JTAG管脚排列图3.下载电缆Altera公司常见的下载电缆有3种:ByteBlasterMV、ByteBlasterII和USBBlaster。(1)ByteBlasterMV下载电缆图1.27ByteBlasterMV下载电缆实物连接图图1.28ByteBlasterMV下载电缆电路原理图图1.29USB-Blaster下载电缆实物连接图(2)USBBlaster下载电缆图1.30USBBlaster下载电路结构框图1.3可编程逻辑器件的设计1.3.1一般设计流程1.3.2基本设计方法1.3.3EDA的软件系统图1.31EDA设计流程图1.3.1一般设计流程(1)原理图输入方式(2)HDL程序的文本输入方式(3)状态图(波形图)输入方式2.逻辑综合和优化综合器就是能够自动将一种设计表示形式向另一种设计表示形式转换的计算机程序。图1.32编译器和综合器的功能比较图1.33综合器工作示意图3.目标器件的适配4.目标器件的编程/下载5.设计过程中的有关仿真6.硬件仿真和硬件测试电子线路设计采用的基本方法主要有3种:直接设计、自顶向下(Top-to-Down)设计、自底向上(Buttom-to-Up)设计。
直接设计就是将设计看成一个整体,将其设计成为一个单电路模块,它适合小型、简单的设计。1.3.2基本设计方法1.自顶向下的设计方法自顶向下的设计方法就是从设计的总体要求入手,自顶向下地将设计划分为不同的功能子模块,每个模块完成特定的功能,这种设计方法首先确定顶层模块的设计,再进行子模块的详细设计,而在子模块的设计中可以调用库中已有的模块或设计过程中保留下来的实例。
自顶向下设计方法的主要有以下特点。(1)电路设计更趋合理
(2)采用系统早期仿真
(3)降低了硬件电路设计难度
(4)主要设计文件是用HDL语言编写的源程序2.基于IP的设计方法FPGA厂家及第三方预先设计好这些通用单元并根据各种FPGA芯片的结构对布局和布线进行优化,从而构成具有自主知识产权的功能模块,称为IP(IntellectualProperty)模块,也可称为IP核(IPCore)。
IP模块可分为硬件IP(HardIP)模块、软件IP(SoftIP)模块和固件IP(FirmIP)模块3种。EDA技术的核心是利用计算机完成电子设计全程自动化,因此基于计算机环境的EDA软件的支持是必不可少的。EDA工具大致可以分为5个模块:设计输入编辑器、HDL综合器、仿真器、适配器(或布局布线器)和下载器。
另外,每个FPGA/CLPD生产厂家为了方便用户,往往都提供集成开发环境,基本都可以完成所有的设计输入(原理图或HDL)、仿真、综合、布线、下载等工作。1.3.3EDA的软件系统
比较优秀的第三方EDA软件有以下几种。
Synplicity公司的SynplifyPro是公认的比较好的综合器。Synopsys公司是较早推出综合器的,它的FPGACompiler也不错。
而仿真器要首推的是ModelTechnology公司的ModelSim软件。对于集成EDA开发环境,目前比较流行的、主流的EDA软件工具有Altera的QuartusII、Lattice的ispLEVER、Xilinx的ISE。QuartusII:支持原理图、VHDL和Verilog语言文本文件,以及以波形与EDIF等格式的文件作为设计输入,并支持这些文件的任意混合设计。ispLEVER:Lattice公司最新推出的一套EDA软件。ISE:Xilinx公司最新集成开发的EDA工具。1.4数字通信系统的性能新器件的发展主要表现在以下几方面。①大规模。②低功耗。③模拟可编程。1.新器件2.新工具软件3.在FPGA中植入嵌入式系统处理器4.基于FPGA的DSP系统设计5.计算机处理器设计6.与ASIC市场的竞争技术2.4VHDL结构体的描述方式2.3VHDL的语法要素2.2VHDL程序的基本结构2.1VHDL简介第2章硬件描述语言VHDL用来实现硬件电路结构的描述语言称为硬件描述语言(HardwareDescribeLanguage,HDL)。它是一种人工语言,主要用于从多种抽像层次上进行数字系统的建模。2.1VHDL简介2.1.1VHDL的发展及特点2.1.2传统设计与VHDL设计对照2.1.1VHDL的发展及特点VHDL的英文全名是(VeryHighSpeedIntegratedCircuit,VHSIC)HardwareDescriptionLanguage,VHDL是20世纪80年代中期,由美国国防部资助的VHSIC项目开发的产品。1.VHDL的发展2.VHDL的主要特点(1)功能强大,灵活性高(2)器件无关性(3)可移植性(4)自顶向下的设计方法(5)数据类型丰富(6)建模方便(7)运行库和程序包丰富2.1.2传统设计与VHDL设计对照传统硬件设计方法有如下几个特征。(1)采用自下而上的设计方法
(2)采用通用逻辑元器件(3)在系统硬件设计的后期进行调试和仿真(4)设计结果是一张电路原理图1.传统硬件设计方法2.使用VHDL的硬件设计方法(1)支持自顶向下的设计方法所谓自顶向下的设计方法就是从系统的总体要求出发,自顶向下分3个层次对系统硬件进行设计。第1个层次是行为描述。第2个层次是数据流描述。第3个层次为逻辑综合。(2)采用大量的ASIC芯片(3)早期仿真,以确定系统的可行性(4)设计更容易(5)只需写出系统的HDL源程序文件
在进行较复杂可编程逻辑电路设计时,通常建议采用原理图和VHDL结合的方法来设计。2.2VHDL程序的基本结构2.2.1VHDL程序的基本单元与构成2.2.2实体2.2.3结构体2.2.4库、程序包和配置图2.1VHDL程序结构示意图2.2.1VHDL程序的基本单元与构成VHDL中的所有设计均与实体有关,实体是设计中最基本的模块。
设计的最顶层是顶层实体。如果设计分层次,那么在顶级实体中将包含较低级别的实体。
实体中定义了该设计所需的输入/输出信号、信号的输入/输出类型(即端口模式),同时,实体中还定义他们的数据类型。2.2.2实体实体的格式如下:entity<entity_name实体名>isport<portlistforyourdesign,列出设计的输入/输出信号端口>end<entity_name>;图2.2实体所对应的符号每个端口必须进行如下定义:端口信号名、端口模式及端口数据类型。图2.3端口模式示意图所有能被仿真的实体都由一个结构体描述,结构体描述实体的行为功能,即设计的功能。2.2.3结构体图2.4结构体构成示意图结构体的一般格式如下:architecture<architecture_name结构体名>of<entity_name>is--结构体声明区域-声明结构体所用的内部信号及数据类型--如果使用元件例化,则在此声明所用的元件begin--以下开始结构体,用于描述设计的功能--concurrentsignalassignments并行语句信号赋值
--processes进程(顺序语句描述设计)--componentinstantiations元件例化end<architecture_name>;2.2.4库、程序包和配置程序包定义了一组数据类型说明、常量说明、元件说明和子程序说明,以供其他多个设计实体引用。1.程序包--包头说明packagelogicistypethree_level_logicis('0','l','z');constantunknown_value:three_level_logic:='0';functioninvert(input:three_level_logic)returnthree_level_logic;endlogic;--包体说明packagebodylogicis--如下是函数invert的子程序体:functioninvert(input:three_level_logic)returnthree_level_logic;begincaseinputiswhen'0'=>return'1';when'1'=>return'0';when'z'=>return'z';endcase;endinvert;endlogic;2.库库是专门存放预先编译好的程序包的地方,这样这些程序包就可以在其他设计中被调用。
在VHDL中,可以存在多个不同的库,但是库与库之间是独立的,不能相互嵌套。目前VHDL中使用的库有STD库、IEEE库、Work库、ASIC的Vital库和用户定义库。表2.1 IEEE库及程序包说明库名程序包名包中预定义内容StdstandardVHDL类型,如bit,bit_vectorIeeestd_logic_1164定义std_logic,std_logic_vector等Ieeenumeric_std定义了一组基于std_logic_1164中定义的类型的算术运算符,如“+”,“−”,SHL,SHR等Ieeestd_logic_arith定义有符号与无符号类型,及基于这些类型上的算术运算Ieeestd_logic_signed定义了基于std_logic与std_logic_vector类型上的有符号的算术运算Ieeestd_logic_unsigned定义了基于std_logic与std_logic_vector类型上的无符号的算术运算3.配置一个实体可用多个结构体描述,在具体综合时选择哪一个结构体来综合,则由配置来确定。图2.5一个设计实体的配置2.3VHDL的语法要素2.3.1VHDL的文字规则2.3.2VHDL的数据对象2.3.3VHDL的数据类型2.3.4运算操作符2.3.1VHDL的文字规则标识符是描述VHDL中端口、信号、常数、变量以及函数等名称的字符串。1.标识符VHDL'87标识符书写规则如下。
①使用的字符:26个英文字母,数字0~9以及下划线。②标识符必须以英文字母开始。
③下划线的前后必须是英文字母。
④VHDL中用于标识符的英文字母不区分大小写。
⑤标识符中不能有空格。
⑥标识符不能与VHDL的关键字重名。VHDL'93标识符基本部分的定义规则与VHDL'87标准的相同,但除了基本部分的定义外,VHDL'93标准还支持扩展标识符。2.数字(1)整数文字整数文字都是十进制的数。(2)实数文字实数文字也是十进制的数,但必须带有小数点。(3)以数制基数表示的文字用这种方式表示的数字由5个部分组成。
①十进制数标明数制进位的基数。
②数制隔离符号“#”。
③表达的文字(实际要表达的具体数字)。
④指数隔离符号“#”。
⑤用十进制表示的指数部分,如果这一部分为0,则可以略去。3.字符串(1)字符字符是用单引号括起来的ASCII字符,可以是数值,也可以是符号或字母(2)文字字符串文字字符串是用双引号括起来的一串文字(3)数字字符串
数字字符串称为矢量,分别代表二进制、八进制、十六进制的数组。VHDL语言常用的数据对象为常量(Constant)、信号(Signal)、变量(Variable)。2.3.2VHDL的数据对象1.常量常量在设计描述中保持某一规定类型的特定值不变。2.信号信号用于声明内部信号,而非外部信号(外部信号对应为in,out,inout,buffer),它在元件之间起互连作用,可以赋值给外部信号。3.变量变量只在给定的进程中用于声明局部值或用于子程序中。表2.2 VHDL语言数据对象定义位置和作用范围数据对象作用范围定义或说明部位信号全局architecture,package,entity变量局部process,function,procedure常数全局上面两种场合下,均可存在4.信号与变量的区别①说明的位置不同
②赋值符号不同
③赋值后的结果不同④信号在整个结构体内有效,变量只在定义的进程或子程序内有效。表2.3 信号与变量赋值语句功能比较信号变量基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元赋值符号<=:=适用范围在整个结构体内的任何地方都能使用只能在所定义的进程中使用行为特性在进程的最后才对信号赋值立即赋值2.3.3VHDL的数据类型VHDL本身标准(VHDL预定义)的数据类型有10种。它们都是在VHDL标准程序包Standard中定义的。1.标准的数据类型(1)整数(2)实数(3)位(4)位矢量(5)布尔量(6)字符(7)字符串(8)时间(9)错误等级(10)自然数和正整数2.std_logic和std_logic_vector类型(IEEE预定义)
3.用户自定义的数据类型(1)type语句用法type语句的语法结构如下:type数据类型名is数据类型定义of基本数据类型;或type数据类型名is数据类型定义;(2)subtype语句用法subtype语句的语法格式如下:subtype子类型名is基本数据类型range约束范围;4.数据类型转换(1)调用预定义的类型转换函数表2.4 数据类型转换表函数名功能std_logic_1164程序包to_stdlogicvector(a)由bit_vector转换为std_logic_vectorto_bitvector(a)由std_logic_vector转换为bit_vectorto_stdlogic(a)由bit转换为std_logicto_bit(a)由std_logic转换为bitstd_logic_arith程序包conv_std_logic_vector(a,位长)将整数integer转换成std_logic_vector类型,a是整数conv_integer(a)由unsigned,signed转换为integerstd_logic_unsigned程序包conv_integer(a)由std_logic_vector转换为integer(2)调用算符重载函数为了方便各种不同数据类型间的运算操作,VHDL允许用户对原有的基本操作符重新定义,赋予新的含义和功能,从而建立一种新的操作符。这种附有新的含义的操作符叫做算符重载函数。2.3.4运算操作符1.操作符的种类及其对应的操作数类型表2.5 VHDL操作符列表类型操作符功能操作数数据类型算术操作符+加整数−减整数*乘整数和实数/除整数和实数**乘方整数mod求模整数rem求余整数abs求绝对值整数sll逻辑左移bit或布尔型一维数组srl逻辑右移bit或布尔型一维数组sla算术左移bit或布尔型一维数组sra算术右移bit或布尔型一维数组rol逻辑循环左移bit或布尔型一维数组ror逻辑循环右移bit或布尔型一维数组+正整数−负整数表2.5 VHDL操作符列表续表类型操作符功能操作数数据类型并置连接运算符&并置连接符一维数组关系操作符=等于任何数据类型/=不等于任何数据类型<小于枚举与整数类型,及对应的一维数组<=小于或等于枚举与整数类型,及对应的一维数组>大于枚举与整数类型,及对应的一维数组>=大于或等于枚举与整数类型,及对应的一维数组逻辑操作符and逻辑与bit,boolean和std_logicor逻辑或bit,boolean和std_logicnand与非bit,boolean和std_logicnor或非bit,boolean和std_logicxor异或bit,boolean和std_logicxnor同或bit,boolean和std_logicnot逻辑非bit,boolean和std_logic2.各种操作符的使用说明①严格遵循在基本操作符间操作数是相同数据类型的规则;严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致的规则。②注意操作符之间的优先级别。③VHDL共有7种基本逻辑操作符,对于数组型(如std_logic_vector)数据对象的相互作用是按位进行的。表2.6 VHDL操作符优先级④关系操作符的作用是将相同数据类型的数据对象进行数值比较(=、/=)或关系排序判断(<、<=、>、>=),并将结果以布尔类型(boolean)的形式表示出来,即TRUE或FALSE两种。⑤并置运算符的操作数的数据类型是一维数组,可以利用并置运算符将普通操作数或数组组合起来形成各种新的数组。⑥表2.5中所列的16种算术操作符可以分为求和操作符、求积操作符、混合操作符、移位操作符等四类操作符。图2.6移位操作示例图2.4VHDL结构体的描述方式2.4.1顺序描述语句2.4.2并行描述语句2.4.3属性描述语句数字电路的工作方式是系统各单元电路同时上电工作,单元电路内部按顺序工作。这种特点决定了VHDL语句有顺序(Sequential)描述语句和并行(Concurrent)描述语句两种。●顺序描述语句。顺序描述语句为行为描述方式,包括if语句、case语句、loop语句、wait语句、null语句、assert语句。●并行描述语句。并行描述语句有三种描述方式,分别是结构描述方式、数据流描述方式和行为描述方式。结构(Structural)描述语句:所谓结构描述,是指描述该设计单元的硬件结构,即该硬件是如何构成的。数据流(Dataflow)描述语句:它以类似于寄存器传输级的方式描述数据的传输和变换,以规定设计中的各种寄存器形式为特征,然后在寄存器之间插入组合逻辑。对应的语句有简单信号赋值语句、条件信号赋值语句、选择信号赋值语句。行为(Behavioral)描述语句:行为描述只表示输入与输出间转换的行为,它不包含任何结构信息。进程语句具有顺序和并行两个特征。图2.7进程语句的构成进程语句的语法描述格式如下:<optional_label>:process<sensitivitylist敏感信号表>--此处声明局部变量,数据类型及其他局部声明(用于进程中)begin --进程开始--进程中为顺序语句signalandvariableassignments --信号与变量的赋值ifandcasestatements --if-then-else语句case-when语句whileandforloops --loop循环语句functionandprocedurecalls --函数,过程调用endprocess<optional_label)>; --进程结束
要深刻理解进程,就要掌握以下几点。①结构体中多个进程之所以能并行运行,一个很重要的原因就是进程之间的通信是通过传递信号来实现的。
②虽然同一结构体中的进程之间是并行运行的,但同一进程中的逻辑描述语句则是顺序运行的,因而在进程中只能设置顺序语句。
③进程的激活必须由敏感信号表中定义的敏感信号的变化来启动,否则必须由一个显式的wait语句来激活。
④一个进程中只允许描述对应于一个时钟信号的同步时序逻辑。而异步时序逻辑必须由多个进程来表达。VHDL有如下6类基本顺序语句:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句。2.4.1顺序描述语句1.赋值语句(1)信号赋值语句信号赋值语句格式为 信号赋值目标:<=赋值源(2)变量赋值变量赋值格式为 变量赋值目标:=赋值源2.流程控制语句(1)if语句①if的门闩控制。if条件then顺序语句;endif;②if的选择控制。格式二:if条件1then顺序语句elsif条件2then顺序语句……else顺序语句endif;格式一:if条件then顺序语句else顺序语句endif;(2)case语句case语句的结构如下:case表达式iswhen选择值=>顺序语句;when选择值=>顺序语句;…[whenothers=>顺序语句;]endcase;(3)loop语句①单loop语句语法格式:[标号:]loop顺序语句endloop [标号];②for-loop语句语法格式:[标号:]for循环变量in循环次数范围loop顺序语句;endloop[标号];③while-loop语句的语法格式:
[标号:]while循环控制条件loop顺序语句endloop[标号]:(4)next语句next[loop标号][when条件表达式];(5)exit语句exit[loop标号][when条件表达式];
3.等待语句wait;waiton信号表;waituntil条件表达式;waitfor时间表达式;
第一种表示永远挂起。第二种类似于process(敏感表格式)。
第三种需满足下列条件。①在条件表达式中的信号发生了变化。②此信号改变后,且满足wait语句所设的条件。两个条件同时满足,才能解除挂起,继续执行wait后的顺序语句。第四种:等到时间到。4.子程序调用子程序调用有两种方式,即顺序语句方式和并行语句方式。子程序包括过程(procedure)和函数(function)。函数的格式:function函数名(参数1,参数2…)return数据类型名is
[定义变量语句]begin[顺序语句]return[返回变量名];end函数名;过程的格式:procedure过程名(参数1,参数2…)is[定义变量语句]begin[顺序语句]end过程名;5.返回语句其格式有两种:(1)return;(2)return表达式;
6.空操作语句其语句格式如下:null;1.声明包装:并行语句在结构体中的使用格式如下:architecture结构体名of实体名is说明语句;begin并行语句;endarchitecture结构体名;2.4.2并行描述语句1.并行信号赋值语句(1)简单信号赋值语句信号赋值目标<=表达式;(2)条件信号赋值语句赋值目标<=表达式when赋值条件else表达式when赋值条件else
…表达式;(3)选择信号赋值语句with选择表达式select赋值目标信号<=表达式when选择值,表达式when选择值,…,表达式when选择值,[表达式whenothers];2.元件例化语句元件例化是一种连接关系,它将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前设计实体中的端口相连接,从而为当前设计实体引入一个新的低层的设计单元。元件例化语句由两部分组成:前一部分是将一个现成的设计实体定义为一个元件(元件声明);第二部分是对此元件输入、输出与当前设计实体中端口或信号的连接说明(元件连接)。其格式如下:--第一部分component元件名generic(类属表)port(端口名表);endcomponent;--第二部分例化名:元件名portmap([端口名=>]连接端口名,……);3.生成语句生成(generate)语句具有复制作用,用来产生多个相同的结构,它有for
…generate和if…generate两种形式。其格式如下:[标号:]for变量in取值范围generate说明部分;并行语句endgenerate[标号];[标号:]if条件generate说明部分并行语句endgenerate[标号];4.子程序调用
5.块语句当一个构造体所描述的电路比较复杂时,可以通过块(block)结构将构造体划分为几个模块,每个模块都可以有独立的结构,这样可以减小程序的复杂性,同时使构造体的结构清晰易懂。采用block语句描述局部电路的书写格式如下所示:[块结构名:]block块内定义语句;--定义block内部使用的信号或常数的名称及类型begin block块内的并行描述语句;endblock[块结构名]属性指的是关于实体、结构体、类型、信号的一些特征。2.4.3属性描述语句1.值类属性2.信号类属性3.范围类属性3.7引脚锁定及器件编程3.6模拟仿真和时序分析3.5设计项目的编译3.4设计输入3.3QuartusII菜单简要说明3.2QuartusII的安装3.1QuartusII简介第3章QuartusII开发软件3.1QuartusII简介图3.1QuartusII设计典型流程图QuartusII软件是一个全面的、易于使用的、既提供图形化输入界面又提供命令行输入界面的、具有独立解决方案能力的软件,可以完成软件设计流程中的所有阶段。图3.2QuartusII图形界面流程功能3.2QuartusII的安装
①运行速度为400MHz或更快的PentiumPC,并采用以下操作系统之一:●MicrosoftWindowsNT4.0(SP4或更新);
●MicrosoftWindows2000;
●MicrosoftWindowsXP。②速度为400MHz或更快的PentiumIII或4PC,运行以下Linux操作系统之一:
●RedHatLinux7.3或8.0;
●RedHatLinuxEnterprise3;
●仅对AMD64/EM64T的RedHatLinuxEnterprise3.0WS。
③运行Solaris8或9版本或Solaris8或9版本(64位)的SunUltra工作站。④HP9000系列700/800工作站,运行HP-UX11.0版,ACE日期为1999年11月或更新。①在光驱中插入QuartusII7.2的安装盘,或者在硬盘中或可移动的存储设备中找到QuartusII7.2的安装文件。图3.3QuartusII7.2的解压缩界面图3.4安装欢迎界面图3.5安装协议②单击“Next”按钮,进入如图3.5所示的界面,阅读安装协议,选择第一项。图3.6填写公司和个人信息③单击“Next”按钮,进入填写公司和个人信息界面,如图3.6所示。图3.7选择安装目录④单击“Next”按钮,进入下一步——选择安装目录,如图3.7所示,你可以按Browse…按钮选择QuartusII7.2安装后存放目录。图3.8在开始菜单中所有程序的名字⑤单击“Next”按钮,进入下一步——选择设计文档在“开始”→“所有程序”中保存的名字(可以利用默认的名字),如图3.8所示。图3.9选择安装类型⑥单击“Next”按钮,进入下一步——选择安装类型:完全安装(Complete)和自定义安装(Custom),如图3.9所示。图3.10自定义安装选项如果选择自定义安装,用户可以选择安装自己所需的器件系列,以节省磁盘空间,如图3.10所示。图3.11安装信息总界面⑦单击“Next”按钮,进入安装信息总界面,如图3.11所示。图3.12安装进程界面⑧单击“Next”按钮,进入安装进程,QuartusII7.2就开始安装了,如图3.12所示。图3.13软件请求授权界面图3.14设置授权文件界面3.3QuartusII菜单简要说明图3.15打开工程时的默认界面1.“File”菜单图3.16“File”菜单2.“Edit”菜单图3.17“Edit”菜单3.“View”菜单图3.18“View”菜单4.“Project”菜单图3.19“Project”菜单5.“Assignments”菜单图3.20“Assignments”菜单6.“Processing”菜单图3.21“Processing”菜单图3.22开始菜单内容7.“Tools”菜单图3.23“Tools”菜单8.“Window”菜单图3.24“Window”菜单9.“Help”菜单图3.25“Help”菜单3.4设计输入3.4.1文本法3.4.2图形法3.4.3混合输入的层次化设计方法QuartusII支持的设计输入方法很多,如文本法和图形法。
文本法使用硬件描述语言进行设计,控制灵活,适用于复杂逻辑控制和子模块的设计。
图形法形象直观、简单易用,使用起来非常方便,适用于顶层和高层次实体的构造及已有器件的调用。如果仅是单纯建立文本文件,例如利用VHDL语言构建60进制(十进制)计数器,可以这样做:执行“File”→“New”→“Vhdl文件”→“OK“操作,进入VHDL文件输入界面,输入60进制(十进制)计数器的VHDL源程序。完成后浏览QuartusII的各个菜单下的项目,看看有什么发现。3.4.1文本法源程序编好后,观察QuartusII的菜单,可以发现“Project”、“Assignments”、“Processing”、“Tools”等菜单下的各个项目大多是灰色的,也就说是不能用,即不能对这个设计文件进行综合、布局布线、时序分析、仿真,来验证设计是否正确。QuartusII规定这些操作必须在工程下面才能做,需要建立一个工程(Project)。建立工程的步骤如下。图3.27工程向导首界面图3.28为工程选择文件夹和名字图3.29加入工程已存在的设计文件图3.30选择芯片图3.31选择第三方工具图3.32工程向导总信息界面工程设置好后,就可以进行编译、仿真、时序分析、配置(下载)等工作验证设计是否正确。假设通过验证60进制计数器的设计文件jishuqi_60.vhd是正确的,这时最好为jishuqi_60生成一个图元符号,方法是执行“File”→“Create/Update...”→“Createsymoblefilesforcurrentfile”操作。注意这时jishuqi_60.vhd文件是当前文件。经过这样操作后工程所在的文件夹将出现jishuqi_60.bsf的文件,这就是你设计的60进制的计数器的图元符号,以备图形设计界面下调用。图形法与模拟电路和数字电路学的设计电路的方法一样,找到所用的图元然后用导线连接起来。下面以时钟产生模块为例介绍该设计方法。时钟产生模块分析:16MHz的外部时钟要分频为1Hz,需要对输入16MHz的时钟做224分频,由数字电路可知,可以利用计数器分频,计数器的第N比特位对应的是时钟的2N分频。所以我们可以构建一个有24位的计数器。利用前面介绍的建立工程的方法,建立一个命名为fenpin的工程。3.4.2图形法图3.33新建弹出菜单图3.34在原理图设计界面中添加元件图3.35加入元件界面图3.36分频模块图图3.37BCDto7seg译码器3.4.3混合输入的层次化设计方法此种方法就是把其他设计方法输入的设计都转化为bsf文件,然后在原理图法中调入这几个模块,调用的方法同原理图方法。1.原理图法图3.38加入4个模块的设计文件后的图图3.39数字钟总设计图2.模块设计法模块设计法和原理图法有相近之处,但也有不同。图3.40原理图工具栏图3.41模块符号图3.42模块属性设置图3.434个模块的设置图3.44端口映射属性图3.45完成设置和映射的输入文件3.VHDL法
这种方法是利用元件例化语句把每个模块作为一个元器件在VHDL中调用。
①新建工程,并加入4个模块的设计源文件。②新建VHDL设计输入文件。③输入VHDL的顶层设计文件。④编译、仿真、配置等其他工作。3.5设计项目的编译3.5.1项目(工程)的管理3.5.2运行编译器3.5.3观察适配结果3.5.4功耗分析工程更改管理的步骤如下。①完整编译之后,使用ChipEditor(“Tools”→“ChipPlanner(Floorplanandchipeditor”))查看设计适配和布局布线详细信息,并确定要更改的资源。3.5.1项目(工程)的管理图3.46ChipEditor界面②建立、移动以及删除ChipEditor中的基元。③选定基元后,双击此基元,或者单击右键,在弹出菜单中选择“Locate”→“LocateResourceResourcePropertyEditor”,使用ResourcePropertyEditor(其界面见图3.47)编辑资源内部属性、编辑或删除连接。图3.47ResourcePropertyEditor窗口④重复步骤②和③,直到完成全部更改。⑤执行“Edit”→“CheckResourceProperties”操作,检查资源更改的合法性。⑥在ChangeManager中可以查看更改的摘要和状态,控制要对资源属性做什么更改,并保存,还可以添加备注,说明每个更改。⑦执行“Edit”→“CheckandSaveAllNetlistChanges”操作,检查网表中所有其他资源更改的合法性。⑧运行Assembler,生成新的编程文件,或再次运行EDANetlistWrite,生成新网表。如果要验证时序更改,可以运行TimingAnalyzer。
如果要验证仿真是否正确,可以运行Simulator。QuartusII全程编译集成了以下7个编译器(Complier)模块(标有星号的模块表示根据设置,在全程编译时可选择使用):Analysis&Synthesis(分析和综合)、PartitionMerge*(分区合并)、Fitter(适配器)、Assembler*(汇编器)、TimingAnalyzer*(时序分析仪)、DesignAssistant*(设计助手)、EDANetlistWriter*(EDA网表编写程序)和HardCopyNetlistWriter*(HardCopy网表编写程序)。3.5.2运行编译器图3.48全程编译界面全程编译通过菜单“Processing”→“StartCompilation”来运行,也可以打开编译工具来运行,方法是执行“Processing”→“CompilerTool”操作从图3.48中可以看到,全程编译主要包括4个过程:分析和综合、布局布线、汇编、时序分析。全程编译完成后(如果有错误要排除错误,继续进行编译,直到成功),会产生一个编译报告,通过执行“Processing”→“CompilationReport”操作可以阅读编译报告。图3.49编译报告3.5.3观察适配结果1.使用Messages窗口和Report窗口查看适配结果图3.50Messages窗口2.通过ChipEditor查看适配结果图3.46ChipEditor界面3.通过RTLViewer和TechnologyMapViewer查看适配后的设计原理图图3.51RTLViewer界面图3.52TchnologyMapViewer窗口4.使用设计助手检查设计的可靠性
5.设计资源分析图3.53DesignAssistant界面图3.54功耗分析设置界面3.5.4功耗分析3.6模拟仿真和时序分析
利用QuarQuartusII软件进行仿真的步骤如下。①建立波形文件。
②设置节点(或者引脚)的时序。
③设置仿真的类型,生成相应类型的Netlist文件,运行仿真。
④分析仿真结果。1.建立波形输入文件图3.55波形文件建立步骤1图3.56波形文件建立步骤2图3.57波形文件建立步骤3图3.58波形文件建立步骤4图3.59波形文件建立步骤52.设置节点(或者引脚)的时序①设置仿真的时间长度,方法为执行“Edit”→“Endtime”操作。
②设置栅格长度,方法为执行“Edit”→“GridSize”操作。
③设置节点时序,注意不能设置输出脚的时序,输出脚的时序由输入节点的时序和工程设计的功能共同决定。图3.60波形输入工具图3.61时序设置完成图3.设置仿真类型,运行仿真仿真分为功能仿真和时序仿真,用户可根据需要设置仿真类型,生成相应的网表文件。图3.62仿真参数设置方法1图3.63仿真参数设置方法2图3.64功能仿真图图3.65时序仿真图4.分析仿真结果仿真结束后,在仿真结果的报告文件(包括仿真的概述,参数设置,资源使用率等结果)中,可以观察仿真输出波形以及时序是否满足设计要求,逻辑是否正确。3.7引脚锁定及器件编程3.7.1引脚锁定3.7.2器件编程图3.66引脚分配方法13.7.1引脚锁定
下面总结一下利用QuartusII进行设计的流程。①建立工程。
②建立设计文件(原理图文件,文本文件)。
③选定器件(若在建立工程时已经选定器件,此步可以略去)。
④运行Analysis&Elaboration(或者Analysis&Synthesis或者完整编译)。
⑤锁定引脚。⑥完整编译。
⑦仿真(不是必须)。
⑧配置(编程)。图3.67引脚分配方法2①硬件连接,把下载电缆的一端连接到实验板上,另一端连接到计算机的并口上。②选择下载电缆和端口。打开QuartusII编程器。执行“Tools”→“Programmer”操作,只在弹出窗口上单击“HardwareSetup”→“AddHardware”按钮,指定电缆类型和端口。这里选择ByteBlasterII下载电缆和LP1端口,如图3.68所示。3.7.2器件编程图3.68指定下载电缆和端口图3.69选择配置模式③选择配置模式。根据电路板上的器件连接方式,选择合适的模式,如图3.69所示。④添加配置(编程)的文件。单击“AddFile”按钮添加要配置(编程)的文件,就会自动建立一个器件链描述文件(.cdf)。⑤开始配置(编程)文件。完成以上4步后,单击“Start”按钮,开始运行配置,如图3.70所示。图3.70下载运行中4.2常用逻辑电路的VHDL实现4.1VHDL设计逻辑电路的基本思想和方法第4章VHDL设计提高4.1VHDL设计逻辑电路的基本思想和方法4.1.1逻辑函数表达式方法4.1.2真值表方法4.1.3电路连接描述方法4.1.4不完整条件语句方法4.1.5层次化设计方法利用VHDL中的逻辑运算就可以实现任何组合逻辑电路的设计。4.1.1逻辑函数表达式方法在数字逻辑电路设计中,利用真值表来表达组合电路是非常常用的手段,其特点是直观、明了,将真值表用VHDL描述出来也是硬件语言常用的方法之一。4.1.2真值表方法所谓电路连接描述方法,就是将给定的电路原理图用portmap语句来实现。在电路中,某些元件不是基本元件,无法用逻辑函数表达式来表示,也就是说,无法用逻辑运算来实现。4.1.3电路连接描述方法图4.1电路连接描述法的图例libraryieee;useieee.std_logic_1164.all;entitydff1isport(clk:instd_logic;d:instd_logic;q:outstd_lgoic);end;architecturebhvofdff1issignalq1:std_logic;beginprocess(clk,q1)beginifclk'eventandclk='1'thenq1<=d;endif;endprocess;q<=q1;endbhv;4.1.4不完整条件语句方法图4.2QuartsII综合后的RTL电路图层次化设计方法是自顶向下设计方法的最好体现。自顶向下的设计方法将系统分解为各个模块的集合后,可以对设计的每个独立模块分别设计,最后将不同的模块集成为最终的系统,并对其进行综合测试和评价。4.1.5层次化设计方法图4.312位全加器电路原理图1.子模块设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityadder4bisport(clr,cin:instd_logic;a,b:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0);cout:outstd_logic);endadder4b;architectureartofadder4bissignalsint:std_logic_vector(4downto0);signalaa,bb:std_logic_vector(4downto0);beginprocess(clr)beginifclr='1'thensint<="00000";elseaa<='0'&a;bb<='0'&b;sint<=aa+bb+cin;endif;s<=sint(3downto0);cout<=sint(4);endprocess;endart;a2.顶层模块设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityadder12bisport(clr,cin:instd_logic;a,b:instd_logic_vector(11downto0);s:outstd_logic_vector(11downto0);cout:outstd_logic);endadder12b;architectureartofadder12biscomponentadder4bisport(clr,cin:instd_logic;a,b:instd_logic_vector(3downto0);s:outstd_logic_vector(3downto0);cout:outstd_logic);endcomponent;signalcarry_out0,carry_out1:std_logic; beginu1:adder4bportmap(clr=>clr,cin=>cin,a=>a(3downto0),b=>b(3downto0),s=>s(3downto0),cout=>carry_out0);u2:adder4bportmap(clr=>clr,cin=>carry_out,a=>a(7downto4),b=>b(7downto4),s=>s(7downto4),cout=>carry_out1);u3:adder4bportmap(clr=>clr,cin=>carry_out,a=>a(11downto8),b=>b(11downto8),s=>s(11downto8),cout=>cout);endart;4.2常用逻辑电路的VHDL实现4.2.1基本组合逻辑电路设计4.2.2基本时序逻辑电路设计4.2.3状态机的设计4.2.1基本组合逻辑电路设计1.基本逻辑门图4.4基本逻辑门2.三态门图4.58位三态控制门电路3.数据选择器
4.3线-8线译码器图4.63线-8译码器端口图下面用VHDL语言分别以两种方法描述3线-8线译码器,其源程序如下。方法一:用case语句描述,利用真值表辅助,很容易编写程序。libraryieee;useieee.std_logic_1164.all;entitydecoder3_8isport(a,b,c,g1,g2a,g2b:instd_logic;y:outstd_logic_vector(7downto0));end;architectureaofdecoder3_8issignaldz:std_logic_vector(2downto0);begindz<=c&b&a;process(dz,g1,g2a,g2b)beginif(g1='1'andg2a='0'andg2b='0')thencasedziswhen"000"=>y<="11111110";when"001"=>y<="11111101";when"010"=>y<="11111011";when"011"=>y<="11110111";when"100"=>y<="11101111";when"101"=>y<="11011111";when"110"=>y<="10111111";when"111"=>y<="01111111";whenothers=>y<="××××××××";endcase;elsey<="11111111";endif;endprocess;end;方法二:利用移位操作符SLL和程序包std_logic_unsigned中的数据类型转换函数conv_integer可以十分简洁地完成3线-8线译码器的设计。(略去实体部分)architectureaofdecoder3_8isbeginoutput<="00000001"SLLCONV_INTEGER(input);end;方法三:也是利用移位操作符SLL,只不过是每次进程的启动只改变一个端口的输出。architecturebehaveofdecoder3_8isbeginprocess(input)beginoutput<=(others=>'0');output(conv_integer(input))<='1';endprocess;endbehave;5.优先编码器表4.2 8-3优先编码器的真值表输入输出din0din1din2din3din4din5din6din7output0output1output2×××××××0000××××××01100×××××011010××××0111011×××01111100××011111101×011111111001111111111libraryieee;useieee.std_logic_1164.allentitycoderisport(din:instd_logic_vector(0to7);output:outstd_logic_vector(0to2));end;architecturebehaveofcoderissignalsint:std_logic_vevtor(4downto0);beginprocess(din)beginif(din(7)='0')thenoutput<="000";elsif(din(6)='0')thenoutput<="100";
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 2 Friendship说课稿2025学年高中英语冀教版必修一-冀教版2004
- 初中生命意识2025说课稿
- 小学消防知识说课稿2025
- 第4课 畅游互联网说课稿2025学年小学信息技术滇人版四年级第3册-滇人版
- 上饶卫生健康职业学院《Android 高级应用开发》2025-2026学年第一学期期末试卷(A卷)
- 初中2025情绪控制说课稿
- 上海音乐学院《安全人机工程》2025-2026学年第一学期期末试卷(A卷)
- 上海音乐学院《Access 数据库技术》2025-2026学年第一学期期末试卷(B卷)
- 3.3 网络资源的生成与分享说课稿2025学年高中信息技术粤教版2019选修2 网络基础-粤教版2019
- 胸外科护理工作考核标准
- MOOC 材料成形技术基础-西安交通大学 中国大学慕课答案
- 翻译服务劳务合同范本
- 社会工作综合能力(初级)课件
- 成人癌性疼痛护理-中华护理学会团体标准2019
- 马原第七章共产主义崇高理想及其最终实现
- 培训testlab中文手册modal impact1 Test Lab模态锤击法软件布局
- 安徽华塑股份有限公司年产 20 万吨固碱及烧碱深加工项目环境影响报告书
- GB/T 22237-2008表面活性剂表面张力的测定
- 十一 英语的搭配
- 业财一体化财务对接解决方案
- 《动物病理》课程设计课件
评论
0/150
提交评论