电路和电子技术(下册)-第八章_第1页
电路和电子技术(下册)-第八章_第2页
电路和电子技术(下册)-第八章_第3页
电路和电子技术(下册)-第八章_第4页
电路和电子技术(下册)-第八章_第5页
已阅读5页,还剩151页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

8.1可编程逻辑器件8.1.1PLD发展历程在过去的20年,专用集成电路(ApplicationSpecificlntegratedCircuit,AS1C)和可编程逻辑器件(ProgrammableLogicDevice,简称PLD)是电子设计领域的主流技术。AS1C的设计和制造都离不开生产厂商,用户只能根据芯片的功能加以应用。随着PLD的出现,电子工程师们可以在数字集成电路中通过自己编程来实现所需逻辑功能。已封装完毕的可编程逻辑器件的芯片由集成电路制造厂商向市场提供,其逻辑功能却可以由用户自己使用PLD开发工具对其进行“编程”的办法来确定。由于这种方式对厂家和用户都带来了好处,因而发展得特别迅速。在半导体技术进步的推动下,可编程逻辑器件的规模、密度、性能有了飞速的发展,在集成电路设计、数字系统设计、工业自动控制、仪器仪表等领域得到了广泛应用。下一页返回8.1可编程逻辑器件

可编程逻辑器件的发展历程:从早期的可编程只读存储器(PROM)、紫外线可擦除只读存储器(EPROM)和电可擦除只读存储(EEPROM)3种存储器,发展到可编程逻辑阵列(PLA),可编程阵列逻辑(PAL)和通用阵列逻辑(GAL)、可擦除的可编程逻辑器EPLD(ErasableProgrammableLogicDevice)。然后进一步发展为复杂可编程逻辑器件CPLD(ComplexProgrammableLogicDevice)和现场可编程门阵列FPGA(FieldProgrammableGateArray)。上一页下一页返回8.1可编程逻辑器件

PROM是20世纪70年代初期出现的第1代PLD,它由全译码的与阵列和可编程的或阵列组成,由于结构的限制,它们只能实现以最小项形式表示的各种组合逻辑。PROM采用熔丝工艺编程,只能写一次,不可擦除或重写。随着技术发展和新的需求的推动出现了EPROM,EEROM(E2-ROM)。由于阵列规模大,它们的用途以存储器为主。

PLA是20世纪70年代中期推出的可编程逻辑器件,由可编程的与阵列和可编程的或阵列组成的一次性编程器件。该器件阵列规模大为减小,芯片的利用效率得到很大的提高。但是,PLA器件速度较慢而且成本较高,因此,实际工作中很少使用。上一页下一页返回8.1可编程逻辑器件

PAL是20世纪70年代末期由AMD公司推出的PLD,与PROM相反,PAL的与阵列可编程,而或阵列却是固定不可编程的,故又称固定或阵列。PAL器件与PROM相比,阵列规模大大减少,能更灵活地实现各种逻辑功能,是首先得到普遍应用的PLD。

GAL是Lattice公司于20世纪80年代初推出的电可擦写、可重复编程及可设置加密位的PLD。GAL是在PAL的基础上,增加了一个可编程的输出逻辑宏单元(OutputLogicMicroCell,OLMC),可通过对OLMC的配置得到多种形式的输出和反馈。GAL兼容PAL,所以GAL几乎完全代替了PAL,得到了广泛应用。PAL和GAL的优点是结构简单,易于编程,但规模小,无法实现复杂的逻辑功能。上一页下一页返回8.1可编程逻辑器件

EPLD是Altera公司于20世纪80年代中期推出的一种大规模可编程逻辑器件。EPLD的基本结构同CAL并无本质差别,但其集成度远远高于CAL,因此,在一块EPLD芯片上可以实现更多的逻辑功能。EPLD的结构特点是大量增加输出宏单元的数目,提供了更大的与阵。随着与阵的扩大和输出宏单元的增加而过渡到复杂可编程器件CPLD(ComplexProgrammableLogicDevice)。

CPLD是20世纪90年代初期推出的EPLD改进型器件。同EPLD相比,CPLD增加了内部连线,改进了内部结构体系,提高了性能,设计更加灵活,得到了非常迅速的发展。上一页下一页返回8.1可编程逻辑器件

FPGA是1985年由美国Xilinx公司首先推出的一种新型的PLD。其结构特点是由逻辑功能模块排列成阵列,并由可编程的内部连线将这些功能模块连接起来实现一定的逻辑功能。FPGA的功能由逻辑结构的配置数据决定,这些配置数据存放在片外的EPROM或其他存储器上。工作时,需要将芯片外部的存储器中的数据加载配置到片内的SRAM上,在现场实现修改器件的逻辑功能。

CPLD和FPGA这两种器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很灵活。目前,几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。因此,它们已逐步成为复杂数字硬件电路设计的首选。上一页下一页返回8.1可编程逻辑器件

目前生产PLD的厂商很多,其PLD产品的种类也很多,包括Altera公司的MAX和FLEX系列、Xilinx公司的XC系列、TI公司的TPC系列和Lattice公司的ispLSI系列等。各个公司的PLD结构不同,设计方法不同,其应用范围也有所不同,但其共同的特点是:可以在实验室中将大量的数字电路设计到一个单芯片中,从而实现系统的微型化和高可靠性。在上述各公司的PLD产品中,Altera公司的PLD器件在结构上很具代表性。Altera公司是20世纪90年代以后发展起来的最大可编程逻辑器件供应商之一,其产品包括MAX3000A,MAXⅡ且等CPLD系列,CycloneArria,Stratix等多个FPGA系列,能够满足用户不同层次的需求。上一页下一页返回8.1可编程逻辑器件8.1.2CPLD/FPGA的基本结构8.1.2.1CPLD的基本结构

CPLD是在CAL的基础上发展起来的,其主体仍是基于乘积项的与或阵列。它的基本结构主要由可编程逻辑单元、可编程连线阵列和可编程输入/输出(I/O)单元组成,如图8.1所示。

1.可编程逻辑单元

CPLD的可编程逻辑单元被称为宏单元(Macrocell),其中主要包括与阵列、或阵列、触发器和多路选择器。其中与或阵列和多路选择器用于实现组合逻辑功能,触发器用于实现时序逻辑功能。上一页下一页返回8.1可编程逻辑器件

2.可编程连线阵列

CPLD的可编程连线阵列用于实现宏单元之间的互联。采用集中式的布线结构,用单一的可编程开关矩阵构成。由于CPLD的连线阵列结构固定,所以CPLD的输入引脚到输出引脚具有固定的标准延时。在CPLD中,通常将整个逻辑分为几个逻辑块。每个逻辑块相当于若干个CAL的组合,各个逻辑块之间用互联资源实现连接。连线资源包括各种长度的连线线段和一些可编程的连接开关。在CPLD中,通过编程将某些逻辑块互连,且连好以后就不会改变,除非将编程的内容擦去重编。上一页下一页返回8.1可编程逻辑器件

3.可编程I/O单元

CPLD的集成度在千门宏单元/每片以上,但其I/O引脚不过几百。在CPLD中,不再像早期PLD器件那样,将其I/O引脚与器件内部的宏单元一一对应直接相连,而是在芯片中设置了若干I/O单元,它们可直接与引脚相连,然后通过另一组连线连到所需的宏单元上。因此,通过对芯片中设置的可编程I/O单元的编程,来实现宏单元与I/0引脚连接,并完成不同电气特性下对输入/输出信号的驱动和匹配。除了上述介绍的基本结构外,CPLD还配有一些辅助功能块:JTAG编程模块,用于系统编程;全局复位/置位及全局使能模块、全局时钟;有些型号还配置了片内RAM,锁相环电路、高速计数器和高速乘法器模板。上一页下一页返回8.1可编程逻辑器件

需要说明的是,CPLD中普遍设有多个时钟输入端,并可以利用芯片中产生的乘积项作为时钟,同早期PLD器件中只有一个时钟输入端相比,给系统的设计带来了很大的灵活性。在CPLD中使用的编程方式有EPROM(ErasableProgrammableROM)工艺、E2ROM(ElectricalErasableROM)工艺和Flash工艺。EPROM工艺对ROM中存放的数据可通过紫外线照射的方法加以擦除。E2ROM工艺是可电擦除(或电改写)的ROM,其存储数据的擦除不需用紫外线照射,而是直接用一定幅度的电压脉冲完成。Flash工艺的擦写过程与E2ROM基本一致,但其擦除不是逐点地进行,而且一次全部擦除,然后再逐点改写。因而其编程速度比E2ROM高。这是较新的工艺。上一页下一页返回8.1可编程逻辑器件8.1.2.2FPGA的基本结构

FPGA的电路结构与CPLD不同,是基于查找表(LookUpTable,LUT)加寄存器的结构,由若干独立的排列方式类似门阵列的可编程逻辑模块组成。可编程逻辑模块由门、触发器等组成,又称逻辑单元,或称逻辑元胞(Cell))。FPGA不是门阵列,而是逻辑单元阵列。通过编程,即安排逻辑单元与这些连线之间的连接关系,依靠连接点的合适配置,实现各逻辑单元之间的互联。FPGA的基本结构由可编程逻辑单元、可编程连线资源和可编程I/O单元组成,如图8.2所示。上一页下一页返回8.1可编程逻辑器件

1.可编程逻辑单元

FPGA的可编程逻辑单元一般由查找表和寄存器组成。查找表结构主要为2Nx1位SRAM,用来存储具有2N个状态的N个输入的组合逻辑函数的真值表,其输出为所期望的组合逻辑。可编程逻辑单元的寄存器可配置为触发器或锁存器。因此,用查找表和寄存器的组合可以实现任意组合逻辑和时序逻辑的设计。

2.可编程连线资源

FPGA的连线方式与CPLD存在很大的差异。同CPLD集中式布线方式相比,FPGA配置的连线资源更加丰富,连线分布于FPGA内部所有单元与逻辑单元之间,以及器件各分区之间。根据工艺、长度、宽度和分布位置的不同连线资源被划分为全局专用连线、长连线、短连线等不同的级别。上一页下一页返回8.1可编程逻辑器件

3.可编程I/O单元

FPGA与CPLD的可编程I/O单元的功能相同,用于实现可编程逻辑单元与I/O引脚的互联,以及不同电气特性下对输入/输出信号的驱动和匹配。与CPLD相比,FPGA支持更多的I/O标准。除了上述三种基本资源外,随着工艺的进步和应用系统需求的发展,FPGA有时也包含一些可选资源,如存储器资源、数字时钟管理单元、算术运算单元、多电平标准兼容的I/O接口、高速串行I/O接口、特殊功能模块及微处理器等。上一页下一页返回8.1可编程逻辑器件

FPGA中使用的编程工艺有反熔丝和SRAM两类:(1)反熔丝工艺

Actel公司的FPGA采用反熔丝工艺。因其编程时不是将熔丝熔断,而是将其熔连,故名反熔丝。显然,它与熔丝工艺一样,属一次性编程,设计者须承担一定风险。但此种工艺成本很低,且非常稳定可靠,因而在产品定型以后使用是较合适的上一页下一页返回8.1可编程逻辑器件

(2)RAM工艺

Xilinx公司的FPGA采用的是另一种工艺,每个连接点代替熔丝的是一个受SR静态触发器控制的开关,当触发器被置1时,开关接通,否则开关断开。由于SR静态触发器在芯片掉电时其存储的数据将丢失,所以这类FPGA必须与一块EPROM或E2ROM连用,将各点的编程数据存储在E2ROM(或EPROM中)。芯片上电时,首先将各编程点的触发器按照E2ROM中存储的数据置位,则EPGA芯片就能执行所设计的功能。因为在这种方式中,各实际的连接器件并未像CPLD那样编程时被固化,换用其他编程数据即可按其他的设计结果工作,所以常将这种方式称为配置(Configure)。上一页下一页返回8.1可编程逻辑器件8.1.3CPLD/FPGA的比较

CYLD与FPGA在很大程度上具有类似之处,但由于内部结构上的差异导致了它们在功能与性能上的差别。主要表现在如下几方面:①布线能力。CPLD独特的内连线结构使其内连率很高,不需要人工布局布线来优化速度和面积。这与FPGA有限的布线线段相比,更适合于电子系统设计自动化(ESDA)中芯片设计的可编程器件验证。②CPLD的速度比FPGA快。因为FPGA是门级编程,并且逻辑单元模块之间采用分布式互连;而CPLD是逻辑块级编程,其逻辑块之间的互联是集总式的。上一页下一页返回8.1可编程逻辑器件③延迟可预测能力。CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的(即设计输入不变的情况下每次布局布线后其时序延迟是一定的)。这与FPGA分段式布线结构导致的不可预测延迟相比,更加方便了电路设计人员设计电路。④适用场合。虽然CPLD与FPGA都可集成成千上万门的数字逻辑电平完成时序较多的逻辑电路。CPLD更适合于完成各种算法和组合逻辑,而FPGA更适合于完成时序较多的逻辑电路。⑤便性性和保密性。CPLD无须外部存储器芯片,使用简单,比FPGA使用起来更方便,并可对程序进行加密,保密性更强。

FPGA比CPLD在编程上具有更大的灵活性。CPLD编程次数可达上万次,系统断电时编程信息也不丢失。FPGA基于SRAM编程,编程信息在系统断电时丢失,每次上电都需将编程数据重新写入SRAM。FPGA可编程任意次,可在工作中快速编程,实现板级和系统级的动态配置。上一页返回8.2可编程逻辑器件的开发环境

对于PLD的设计来说,成功与否在很大程度上取决于EDA开发软件。Altera公司推出了MAX+PLUSⅡ和QuartusⅡ等完全集成化、易学易用的可编程逻辑设计环境,可以在多种平台上运行。QuartusⅡ是Altera公司主推的最新可编程逻辑器件开发环境,目前已经发布到8.0版本。它所提供的灵活性和高效性是无可比拟的。其丰富的图形界面,辅之以完整的、可即时访问的在线文档,使设计者能够轻松、愉快地掌握和使QuartusⅡ软件。利用QuartusⅡ软件的开发流程可概括为:设计输入、设计编译、设计定时分析、设计仿真和器件编程等几部分。返回下一页8.2可编程逻辑器件的开发环境8.2.1设计输入1.创建QuartusⅡ工程在QuartusⅡ软件中可以利用创建工程向导(NewProjectWizard)创建一个新的工程。在QuartusⅡ软件中,选择“File|NewProjcetWizard..”选项,弹出“NewProjectWizard”对话框如图8.3所示。分别在3行对话框中指定工程目录、工程名以及顶层设计名。注意:工程名和顶层设计名必须相同。单击“Next”按钮继续。如果工程目录不存在,QuartusⅡ软件将弹出一个对话框提示,这时只要单击“是”按钮,软件将自动创建一个目录用来保存工程。上述工作完成后,单击“Next”按钮进行下一步,打开“向工程加入文件”对话框,如图8.4所示。上一页下一页返回8.2可编程逻辑器件的开发环境

该对话框用来向工程中添加本工程中将使用的一些已经完成的文件。如果没有已经完成的文件.可以单击“Next”按钮.进入下一步.选择本工程要用的目标芯片.如图8.5所示。下一步进入如图8.6所示的EDA工具设定对话框,可以选择工程中所需的综合器,仿真器等EDA工具软件,可以不作修改,选用QuartusⅡ软件自带的工具。下一步后会显示“工程设置总结对话框”,列出了本项工程的设置情况,单击“Finish”按钮,完成此次工程创建,如图8.7所示,一个新建的工程将在QuartusⅡ软件中显示出来。上一页下一页返回8.2可编程逻辑器件的开发环境

通过上述流程建立工程后,如果我们想要对工程的设置进行修改,可以使用“Assignments”菜单下的“Settings”对话框,对工程的设计文件进行添加或删除,并且可以更改器件类型、添加用户库和EAD工具的相关设置。在执行QuartusⅡ软件的分析和综合过程期间,软件按“Settings”对话框中的“Files”页面显示的文件按顺序处理文件。“Settings”对话框还包括与综合、适配、仿真相关的设置,如图8.8所示。对于以前用MAX+PlusⅡ设计的工程,可以利用QuartusⅡ软件“File”菜单下的“ConvertMax+PlusⅡProject”将MAX+PlusⅡ配置文件(.acf)转换为QuartusⅡ工程,并自动为新转化的工程建立配置文件和相关的一些设置。上一页下一页返回8.2可编程逻辑器件的开发环境

2.文件的输入在QuartusⅡ软件的窗口选择“File|New...”选项,出现如图8.9所示的“新建文件选择”对话框。该对话框上的“DeviceDesignFiles”标签显示了5种设计输入方法。“BlockDiagramSchematicFile”为图形输入方式,利用电路结构图和原理图来输入设计信息。“EDIFFile”支持EDIF网表编辑器产生的网表文件的输入。“AHDLFile”、“VerilogHDLFile”和“VHDLFile”都是文本输入方式,它们支持不同的硬件描述语言。上一页下一页返回8.2可编程逻辑器件的开发环境

同Max+PlusⅡ中类似,原理图输入法是类似于传统电子设计中绘制电路图的输入方式。而硬件描述语言具有行为描述的特点,同时改变设计比采用电路图描述更加简便,因而在实际应用领域得到了更为广泛的应用。本书主要介绍文本输入方式的过程。在标签上选择“VHDLFile”,然后点击OK,将会出现一个文件编辑器窗口,默认标题名称为VHDL1.vbd,VHDL语言的输入格式如图8.10所示。在文本编辑窗口的空自处点击右键,在弹出的下拉菜单中选择“InsertTemplate”项,可以选择需要插入的语法结构,然后点击OK按钮确定完成语法模板的插入操作。利用插入模板的方式,可以有效地提高输入文件的效率。当文本输入编辑完成后,选择“File|Saveas...”来完成文件保存,以便于在工程中使用。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.2设计编译

QuartusⅡ软件的编译器包括多个独立的模块,各个模块可以单独运行,也可以启动全编译过程。在QuartusⅡ软件工作窗口中,工程的编译可以通过使用菜单“Processing|CompilerTool”打开编译器窗口.如图8.11所示。编译器窗口显示出了编译器的所有模块。点击每个模块的按钮可以逐步完成编译过程,编译过程中进程表将显示工作进度。编译完成之后将显示花费的时间和是否出现错误。每一步完成以后通过单击右下角的“Report”按钮来打开编译报告。单击左下角“Start”按钮可以启动全编译过程。上一页下一页返回8.2可编程逻辑器件的开发环境

编译器中各个模块的功能不同,“Analysis&Synthesis”(分析综合)主要是创建工程数据库,对设计文件进行逻辑综合以及设计逻辑到器件资源的映射。当分析综合完成后,才能进行“Fitter”(适配),完成设计逻辑在器件中的布局和布线,选择适当的器件内部互连路径,进行引脚和逻辑单元的分配。“Assembler”过程中产生多种形式的可编程器件的编程映像文件。“TimingAnalyzer”主要分析设计对于设定器件的延时,进行时序分析和逻辑性能分析。启动全编译过程之后,QuartusⅡ工作窗口左边的状态窗口将显示编译的进度。下面的信息窗口在编译的过程中不断显示编译信息。编译过程结束以后,窗口将显示编译是否成功,是否有错误信息,是否有警告信息。如果有错误,编译将不会成功。编译报告中还会显示所设计的系统占用所使用器件的资源情况,如图8.12所示。上一页下一页返回8.2可编程逻辑器件的开发环境

8.2.3功能仿真完成了设计的输入和编译,还需要利用仿真工具对设计进行仿真,因为编译过程只检查了设计是否具有规则错误和所选择器件的资源是否满足设计要求,并没有检查功能是否满足设计的要求。仿真的过程就是让计算机根据一定的算法和一定的仿真库对设计进行模拟,以验证设计是否正确,查找排除设计中的错误。上一页下一页返回8.2可编程逻辑器件的开发环境1.创建仿真波形文件在进行系统仿真之前,需要创建仿真波形文件,也叫矢量波形文件(.vwf),该文件以波形图的形式在仿真输入信号的作用下产生的系统输出仿真信号。在QuartusⅡ软件的工作窗口中选择菜单“File|New...”,弹出新建文件对话框。在该对话框中,选择“OtherFiles”标签,从中选择“VectorWaveformFile”,然后点击OK打开波形文件编辑器窗口,如图8.13所示。

QuartusⅡ软件中波形编辑器默认的仿真结束时间为,我们可以根据需要修改仿真文件结束时间。通过选择“Edit|EndTime”命令,弹出结束时间对话框,在“Time”框内输入仿真结束时间,单位可以是然后按“OK”键确认,就可以完成仿真结束时间的设置。上一页下一页返回8.2可编程逻辑器件的开发环境2.在文件中加入输入输出节点在进行系统功能仿真前需要加入系统的输入节点和希望检查的输入输出节点。在波形编辑器窗口“Name”列的空白处单击鼠标右键,在弹出的菜单中选择“InsertNodeorBus..”,在弹出的新对话框中单击“NodeFinder”按钮就可以打开“加入节点”对话框。在列表中选择希望观察的节点进行添加,然后点击“OK”,保存文件,并且在“保存为”的对话框中要选中“Addfiletocurrentproject”复选框,使得这个文件加入到当前的工程之中。如图8.14所示在QuartusⅡ软件中使用菜单“View|UtilityWindows|NodeFinder”也可以在波形编辑器窗口加入希望观察的节点。这时在“NodeFinder”列出的节点中选择要加入波形编辑器的节点,然后按住鼠标左键,拖动到波形编辑器的“Name”列的空自处放开即可。上一页下一页返回8.2可编程逻辑器件的开发环境3.编辑输入节点波形在QuartusⅡ软件的波形编辑器中编辑输入节点的波形,即指定输入节点的逻辑电平变化。对于时间节点名,如“clk”,可以在其节点名上单击鼠标右键,然后从弹出的菜单中选择“Value|Clock”命令,打开时钟信号设置对话框。可以选择在“TimingSetting”中设置的时钟“ClockSetting”,或者直接输入所需要的时钟周期、相位以及占空比,如图8.15所示;

在总线节点名,如“data”上单击鼠标右键,然后选择“Value|Count”命令,便可以设置总线为计数输入;也可以通过选择“Value|ArbitraryValue”命令,设置总线为任意固定值输入。对于任意波形信号,可以采用鼠标拖动的方法在波形编辑区中选中需要编辑的区域,然后在选中的区域单击右键。在“Value”菜单中选择需要设置的波形。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.4时序仿真

QuartusⅡ软件提供系统功能仿真工具和时序仿真工具,因此在仿真之前需要对仿真器进行设置。在QuartusⅡ软件的工作窗口中使用“Assignment|settings…”打开“setting”对话框,在对话框的“Category”列表中选择“Simulator”选项就可以打开“仿真器设置对话框。上一页下一页返回8.2可编程逻辑器件的开发环境

在“仿真器设置”对话框中,“Simulationmode”框中的下拉菜单用来设置仿真类型,如果要进行设计的功能仿真,选择“Functional”,在仿真开始前应该选择“Processing|GenerateFunctionalSimulationNetlist”选项,产生功能仿真网表文件;如果要完成时序仿真,则在仿真类型中选择“Timing”选项,在仿真开始前必须编译设计产生时序仿真的网表文件。仿真器的窗口如图8.16所示。上一页下一页返回8.2可编程逻辑器件的开发环境

完成仿真器的设置以后,在窗口中使用菜单“Processing|StartSimulation”就可以启动仿真器。在仿真过程中,仿真器报告窗口自动打开,并在状态窗口中显示仿真进度以及仿真时所用时间。仿真结束之后,在仿真报告窗口将显示输出节点的仿真波形。通过仿真器报告窗口左边的文件夹可以打开各种仿真器报告。也可以通过点击上图右下角的“Report”按钮来打开仿真器的报告。仿真结果的波形如图8.15所示,可以使用工具条上的缩放工具对波形进行放大和缩小操作。也可以在需要观察的节点上单击鼠标右键,选择“Properties”命令,选择显示数据的数制,如十六进制、十进制等。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.5时序分析

QuartusⅡ软件的时序分析器(TimingAnalyzer)运行用户分析设计中的所有逻辑性能,并协助引导“Fitter”满足设计中的时序分析要求。默认情况下,在QuartusⅡ软件执行全编译过程中,时序分析器自动执行,并在编译报告中给出时序分析结果和报告时序信息,包括建立时间、保持时间、时钟至输出延时、引脚至引脚延时、最大时钟频率等设计中的时序特征。可以使用“TimingAnalyzer”生成的信息分析、调试和验证时序性能。通过选择“Assignments|TimingAnalyzerSetting”菜单,可以弹出时序设定的对话框,如图8.17所示。上一页下一页返回8.2可编程逻辑器件的开发环境

进行了时序设定后,就可以通过全编译过程运行时序分析,在完成全编译过程之后,也可以单独启动时序分析过程。比如选择“Processing|Start|StartTimingAnalyzer”命令,QuartusⅡ软件会自动打开编译器报告窗口,并重新单独进行时序分析。选择“Processing|Start|StartMinimumTimingAnalyzer”命令,可以进行最少时序分析过程。在运行完时序分析之后,可以在编译报告窗口的“TimingAnalyzer”文件夹中查看时序分析结果。然后可以列出时序路径以验证电路性能,确定关键速度路径以及限制设计性能的路径进行另外的时序分配。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.6编程和配置使用QuartusⅡ软件成功编译设计工程之后,就可以对Altera器件进行编程或配置了。Altera公司的编程器硬件包括MasterBlaster、ByteBlaster-MV、ByteBlasterⅡ,USB-Blaster和Ethernet-Blaster5种下载电缆或者Altera编程单元APU方式。其中比较常用的ByteBlaster-MV用于并口,USB-Blaster电缆用于USB口。

QuartusⅡ软件允许建立包含设计所用器件名称和选项的链式描述文件(.cdf)对于允许对多个器件进行编程或配置的一些编程模式,链式描述文件中还指定了sof、pof、jam等文件和设计所用器件的从上到下的顺序以及链中器件的顺序。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.6.1打开编程器窗口选择“Tools|Programmer”窗口,编程器窗口自动打开一个名为“工程文件名.cdf”的新链式描述文件,其中包括当前工程的编程文件以及所选器件等信息,保存该文件,见图8.18。8.2.6.2建立被动串口配置链首先在编程器窗口的“Mode”列表中选择“PassiveSerial”模式。然后单击“HardwareSetup”按钮,弹出硬件设置对话框,通过单击“AddHardware”按钮,在弹出的对话框中,在“Hardwaretype”下拉列表中选择一种硬件类型,例如“ByteBlasterMV”,根据需要选择端口波特率等,然后单击“OK”,返同“HardwareSetup”对话框。上一页下一页返回8.2可编程逻辑器件的开发环境

在“HardwareSetup”对话框的“Availablehardwareitems”栏中选中要用的下载电缆,然后单击“SelectHardware”按钮,再单击“close”按钮,关闭硬件设置对话框。最后保存.cdf文件。如果要同时对多个器件进行编程,可以单击“AddFile”按钮,添加编程文件。硬件电路和计算机通过下载电缆连接好以后,单击“Start”按钮即可进行器件下载工作,当出现提示编程完成的对话框时,单击“OK”按钮完成器件编程。如果实际工程应用中需要修改编程模式,可以在编程器窗口“Mode”列表中选择其他方式来实现。上一页下一页返回8.2可编程逻辑器件的开发环境8.2.6.1打开编程器窗口

选择“Tools|Programmer”窗口,编程器窗口自动打开一个名为“工程文件名.cdf”的新链式描述文件,其中包括当前工程的编程文件以及所选器件等信息,保存该文件,见图8.18。8.2.6.2建立被动串口配置链

首先在编程器窗口的“Mode”列表中选择“PassiveSerial”模式。然后单击“HardwareSetup”按钮,弹出硬件设置对话框,通过单击“AddHardware”按钮,在弹出的对话框中,在“Hardwaretype”下拉列表中选择一种硬件类型,例如“ByteBlasterMV”,根据需要选择端口波特率等,然后单击“OK”,返同“HardwareSetup”对话框。上一页返回8.3硬件描述语言8.3.1概述硬件描述语言的发展至今已有几十年的历史,并已成功地应用到系统的仿真、验证和设计、综合等方面。随着电子系统设计自动化的发展,开始越来越多地采用形式化方法来描述电路,即用HDL硬件描述语言进行电路设计。国际上越来越多的EDA工具都接受HDL语言作为设输入,如Altera的MAX+PLUSⅡ、QuartusⅡ,Xilinx的Foundation等都可以解决从系统的高层次行为描述直接生成ASIC器件的一系列技术问题。下一页返回8.3硬件描述语言

在HDL领域,目前得到广泛应用的产品有VHDL、VerilogHDL及AHDL。本节将对VHDL作总体介绍,讨论VHDL的特点及其文件结构,介绍VHDL语言的基本法则。

VHDL(VeryHighSpeedIntergratedCircuitHardwareDescriptionLanguage)即超高速集成电路硬件描述语言。20世纪80年代美国国防部制定了VHDL,以作为各承包商之间提交复杂电路设计文档的一种标准方案。1987年,VHDL被正式接受为国际标准,编号为IEEEStd1076-1987,即VHDL,87。1993年被更新为IEEEStd1164-1993,即VHDL,93。目前VHDL已被广泛应用。上一页下一页返回8.3

硬件描述语言VHDL有以下主要优点:①功能强大,描述力强。可用于门级、电路级甚至系统级的描述、仿真和设计。②可移植性好。对于设计和仿真工具采用相同的描述,对于不同的平台也采用相同的描述。③研制周期短、成本低。这主要是由于VHDL支持大规模设计的分解和对已有设备的利用,因此加快了设计流程。④可以延长设计的生命周期。因为VHDL的硬件描述与工艺技术无关,不会因工艺变化而使描述过时。目前,在大规模复杂电路与系统设计中,VHDL等标准化描述语言将逐步取代门级描述、逻辑电路图和布尔方程等级别较低的硬件描述语言从而成为主要的硬件描述工具。因此,对所有正在和将要从事电子电路和系统设计的入而言,学习和掌握VHDL是十分必要的。上一页下一页返回8.3

硬件描述语言上一页下一页返回8.3.2VHDL语言程序的基本结构

VHDL的程序设计采用自顶向下的模块化设计方法。一个完整的VHDL包括实体(Entity)、结构体(Architecture),配置(Configuration)、包集合(Package)和库(Library)5个部分。 其中,实体和结构体是VHDL设计文件的两个基本组成部分。实体部分描述设计系统的外部接口信号;结构体用于描述系统的内部的结构和行为。配置用于从库中选取所需元件安装到设计单元的实体中;包集合存放各设计模块能共享的数据类型、常数、子程序等;库用于存放已编译的实体、结构体、包集合和配置。库可由用户生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。8.3

硬件描述语言上一页下一页返回例8.1或门的逻辑描述。8.3

硬件描述语言上一页下一页返回

其中,第1行是库说明语句,第2行是程序包说明语句,这两句的作用是声明要引用IEEE库中的STD_LOGIC.1164程序包中的所有项目。第3行至第6行是实体部分,利用Port端口语句说明此模块有两个输入引脚a和b,一个输出引脚y,其数据类型均为STD_LOGIC,IN,OUT说明引脚方向;第7行至第10行是结构体部分,说明模块内部的数据传输和变换关系,“<=”表示传送或赋值,"OR”是VHDL定义的逻辑运算符。 一个电路系统的程序设计只能有一个实体,可以有多个结构体.系统设计中的实体提供该系统的公共信息;结构体定义了各个模块内的操作特性。8.3

硬件描述语言上一页下一页返回1.实体一个硬件单元在VHDL中称为设计实体(DesignEntity),简称实体。实体所代表的对象几乎没有限制,可以将任意复杂的系统抽象成一个实体,也可以将一块电路板、一个芯片、一个电路单元甚至一个门电路看作一个实体。

实体在VHDL程序设计中描述一个元件或一个模块与设计系统其余部分(其余元件、模块)之间的连接关系,可以看做一个电路图的符号。在层次化系统设计中,实体是整个模块或整个系统的输入/输出;在一个器件级的设计中,实体是一个芯片的输入/输出。8.3

硬件描述语言上一页下一页返回

关于设计实体的描述构成VHDL主要的程序单元。一个具有一定功能的实体应有一个确定的外观,或叫界面(Interface)如该实体的名称,它的输入、输出端口说明等,均属实体的外观。实体说明用以说明实体的外观,其一般形式为 其中Entity,Is和End均为关键字。Entity是实体说明的开始,End是实体说明的结束。

VHDL中有多种语句从不同角度说明实体的外观,但最常用的是端口说明。 以一个四位加法器为例,add4是它的名称,共有4个端口:两个输入端X,Y,两个输出端S,Cout,每个输入、输出端都是一位信号。对此,VHDL有如下说明。8.3

硬件描述语言上一页下一页返回例8.2

该例中X,Y,S都是BIT_VECTOR类型,而Cout是BIT数据类型,(3DOWNTO0)表示X,Y,S端口是一个4位端口,由位构成。位矢量长度为4位。 上述的Port语句就是端口说明语句。括号中所列为端口表,含端口名、端口数据流方向(输入In或输出Out)及端口信号的数据类型(Bit)。表8.1列出了端口方向的说明8.3

硬件描述语言上一页下一页返回

关于端口表说明如下:①端口信号名是赋给每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字来命名。各端口信号名在实体中必须是唯一的,不能重复。②端口数据流方向又称端口模式用来说明信号的方向。定义了外部引脚的信号方向是输入还是输出。凡是用“IN”进行方向说明的端口,其信号自端口输入到结构体,而结构体内部的信号不能从该端口输出,而用“OUT”进行方向说明的端口则正好相反。"INOUT”说明该端口是双向的,可以输入也可以输出;"BUFFER”说明该端口可以输出信号,同时在结构体内部也可以利用该输出信号。其中需要强调的是,BUFFER是INOUT的子集,但作输入用时,信号不是由外部驱动,而是从输出反馈得到。"OUT”和“BUFFER”都可以定义输出端口,但是它们之间是有区别的。如果结构体内部要使用该信号,则输出端必须说明为“BUFFER",而不能用“OUT”说明。8.3

硬件描述语言上一页下一页返回③数据类型是端口信号的取值类型。在VHDL语言中有10种数据类型,但是在逻辑电路设计中只用到两种:BIT和BIT_VECTOR)常用的数据类型有以下几种。

BIT:位类型,取值0,1,由STANDARD程序包定义; BIT_VECTOR:位向量类型,是BIT的组合,该端口的取值可能是一组二进制位的值; STD_LOGIC:IEEE标准的逻辑类型,取值如下:8.3

硬件描述语言上一页下一页返回

"STD_LOGIC",和“STD_LOGIC_VECTOR”是IEEE新制订的标准化数据类型,也是在VHDL语法以外添加的数据类型。当使用该类型数据时,在程序中必须写出库说明语句和使用包集合的说明语句。"STD_LOGIC_VECTOR”是逻辑向量类型,是STD_LOGIC的组; INTEGER:整数类型,可用作循环的指针或常数,通常不用作I/O信号; BOOLEAN:布尔类型,取值FALSE,TRUE。8.3

硬件描述语言上一页下一页返回2.结构体(Architecture)

结构体是实体所定义的设计实体的组成部分,是对实体功能的具体描述。结构体描述设计实体的内部结构和实体端口间的逻辑关系。 结构体对其实体的输入/输出关系描述有3种方式:行为描述方式(Behavioral)、数据流描述方式(Dataflow)和结构描述方式(Btructure)最常用的是结构描述方式。不同的描述方式,只体现在描述语句上,而结构体的结构是完全一样的。8.3

硬件描述语言上一页下一页返回结构体的一般形式为 其中Architecture是构造语句的开始。实体名是由实体说明语句定义的某实体的名称,它必须是所在设计实体的名字结构体名标志该实体的某一种具体实现,可以由设计者自己选择,但当一个实体具有多个结构体时,结构体的取名不可相同。8.3

硬件描述语言上一页下一页返回当电路设计规模较大时,电路设计者总希望可以将整个电路分成若干个独立的模块来进行电路的描述)这样,一个结构体可以用几个子结构,即相对比较独立的几个模块来构成,VHDL语言可以有以下3种形式的子结构描述语句:Block语句结构进程(Process)语句结构子程序(Subprograms)语句结构8.3

硬件描述语言上一页下一页返回(1)Block语句结构

Block是VHDL中具有的一种划分机制,这种机制允许设计者将一个模块分成数个区域,在每个块中都能对其局部信号、数据类型和常量进行描述和定义。任何能在结构体的说明部分进行说明的对象都能在Block说明部分中进行说明。

Block语句的表达格式如下:

块结构名:BlockBegin

并行语句EndBlock块结构名;采用Block语句来描述一对四多解任务器电路的VHDL语言书写为:8.3

硬件描述语言上一页下一页返回例8.38.3

硬件描述语言上一页下一页返回上述程序的结构体中只有一个Block块,当电路较复杂时就可以由几个Block块组成。Block块相当于电路原理图中的子原理图。如同在计算机辅助设计中采用多张子原理图进行电路的输入和存档一样,在VHDL语言中也采用多个Block块来分割结构体,从而对编程、查错、仿真及再利用都带来好处。8.3

硬件描述语言上一页下一页返回(2)进程(Process)语句结构

Process语句结构包含了一个代表着设计实体中部分逻辑行为的、独立的顺序语句描述的过程。与Block语句不同的是,在系统仿真时,Process结构中的语句是按顺序逐条向下执行的,而不像Block中的语句可以并行执行。Process语句的表达格式如下:8.3

硬件描述语言上一页下一页返回例8.48.3

硬件描述语言上一页下一页返回

其中,当只有一个进程时,进程名可以省略。Process语句中的信号量,是Process的输入信号,在Process结构的语句中被使用。在VHDL中,又被称作敏感量。Process语句执行的条件是其中某一个信号量发生变化。这种条件又称启动Process语句的条件。一旦启动Process语句,则其中的语句就会被执行一遍。当结构体内有多个进程时,只要满足各进程启动的条件,各进程就可以并行地同步工作。即当各进程互相产生其他进程启动的条件时,就可以使各进程循环工作。8.3

硬件描述语言上一页下一页返回 (3)子程序(Subprograms)结构 和高级语言中的子程序概念类似,子程序结构就是在主程序调用它以后能够将处理结果返回主程序的程序模块。它可以反复调用,使用非常方便)由于子程序在调用时首先要进行初始化,执行结束后子程序就终止。因此子程序内部的值不能保持,子程序返回以后才能被再调用。 在VHDL中,子程序有两种类型:

过程(Procedure)和函数(Function)。①过程语句格式如下:8.3

硬件描述语言上一页下一页返回

在Procedure结构中,参数可以是输入也可以是输出。也就是 说,过程体的输入输出参数都应列在紧跟过程名的括号中。过程体是 顺序语句组成的,过程的调用即启动了对过程体中的顺序语句的执 行。调用者在调用过程前,应先将初始值传递给过程的输入参数,然 后过程语句按顺序自上而下执行过程结构中的语句,执行结束,将输 出值拷贝到调用者的“OUT”和“INOUT”所定义的变量或信号中过程 语句相当于高级语言中的子程序。8.3

硬件描述语言上一页下一页返回例8.5②函数语句的表达格式如下:8.3

硬件描述语言上一页下一页返回例8.68.3

硬件描述语言上一页下一页返回

在Function语句中,括号内所有参数都是输入参数或称输入信号。因此在括号内指定端口方向的“IN”可以省略。Function语句中的输入值由调用者拷贝到输入参数中,如果没特别指定,在Function语句中按常数处理通常,各种功能的Function语句的程序都被集中在包集合(Package)中。 在VHDL语言中,函数语句可以在结构体的语句中直接调用,但需要在实体说明之前包含调用相关包集合的说明。对于例子中定义的函数,假如构造体中有如下所示的语句: maxdata<=max(input1,input2);

此语句就是调用Function,的语句,在包集合中的参数a,b,在这里分别由input1,input2代替函数返回值赋给了maxdata.8.3

硬件描述语言上一页下一页返回3.包集合 包集合(Package)是VHDL语言的一类程序结构单元。许多基本的或公共的数据类型、变量、常量、信号、子程序和元件说明等均可定义在一个或几个包集合中,供实际设计时共用。跟C语言中的include语句类似。包集合由包集合标题(Header)和包集合体(Body)两部分组成。包集合标题的形式为8.3

硬件描述语言上一页下一页返回例8.7这个名为Logic的包中定义了一个表示二值逻辑的数据类型Three_level_logic的常数U与函数Invert。对于一个子程序,子程序说明定义在包说明中,而该子程序的子程序体则应定义在包体中,所以Logic包中的函数Invert的函数体应在Logic包体中进一步定义。Logic包的包体可定义为8.3

硬件描述语言上一页下一页返回8.3

硬件描述语言上一页下一页返回4.库 库(Library)是经编译后的数据的集合,它存放包集合定义、实体定义构造体定义和配置定义。在VHDL语言中,库的说明总是放在设计单元的最前面。格式为:Library库名;

这样,在设计单元内的语句就可以使用库中的数据)库的利用使设计者可以共享已经编译过的设计结果。在VHDL语言中可以存在多个不同的库,但是库和库之间是独立的,不能互相嵌套。8.3硬件描述语言上一页下一页返回

目前在VHDL语言中存在的库大致可以归纳为5种:IEEE库、STD库、面向ASIC的库、用户定义的库和WORK库。前面提到的5类库除WORK库和STD库之外.其他3类库在使用前都首先要作说明,第一个语句是“Library库名”,表明使用什么库。另外还要说明设计者要使用的是库中哪一个包集合以及包集合中的项日名(如过程名、函数名等)。例如:LibraryIEEE;UseIEEE.STD_LOGIC_1164.ALL;

上式表明,在该VHDL语言程序中要使用IEEE库中STD_LOGIC_1164包集合的所有项目。8.3硬件描述语言上一页下一页返回5.配置 配置(Configuration)语句描述层与层之间的连接关系以及实体与结构之间的连接关系。它主要用来为顶层设计实体选择不同的结构体,使设计者可以比较不同结构体的仿真差别或形成一个所希望的元件层次设计实体。配置语句的一般格式如下:Configration配置名of实体名Is[语句说明]End配置名;

例8.8是一个配置的简单方式应用,即在一个描述与非门NAND的设计实体中会有两个以不同的逻辑描述方式构成的结构体.用配置语句来为特定的结构体需求作配置指定.8.3硬件描述语言上一页下一页返回8.3硬件描述语言上一页下一页返回在上例中若指定配置名为seconed,则为实体NAND配置的结构体为two;若指定配置名为first,则为实体NAND配置的结构体为one。这两种结构的描述方式是不同的,但具有相同的逻辑功能。8.3硬件描述语言上一页下一页返回8.3.3VHDL语言的数据类型及运算操作符1.VHDL中的对象 程序中数值的载体称为对象(Object)。VHDL中有三类对象:常数(Constant)、变量(Variable)和信号(Signal)常数只能进行一次赋值,它对应电子电路设计中的电源和地。变量和信号则可多次赋值。信号与硬件中的连线(信号线)相联系,因此信号的赋值必须经一段时间延迟才能生效;而变量的赋值是立即生效,在电路设计中,变量没有直接的对应关系,通常 只代表暂存某些值的载体。8.3硬件描述语言上一页下一页返回(1)常数 常数是一个恒定的值,常数的定义和设置主要是为了使设计实体中的常数更容易阅读和修改。常数的说明的一般格式如下: Constant:常数名:数据类型:=表达式;

需要指出,常数是一个全局量,一旦被赋值就不能改变。同时,常数所赋的值应和定义的数据类型一致。8.3硬件描述语言上一页下一页返回(2)变量 变量是一个局部量,只能在进程语句、函数语句和过程语句结构中使用。变量的赋值是一种理想化的数据传输,是立即发生,不存在任何延时的行为。变量的说明语句格式如下: Variable:变量名:数据类型约束条件:=表达式;

例如:8.3硬件描述语言上一页下一页返回(3)信号 信号是电子电路内部硬件连接的抽象。除了没有方向说明以外,信号与实体的端口概念是一致的。信号通常在结构体、包集合和实体中说明。信号说明语句格式如下: Singal:信号名:数据类型约束条件:=表达式;

例如:

信号是一个全局量,它可以用于进程之间的通信。在程序中,信号值的代入不同于变量赋值时所用的“:=”符,而是采用代入符“<=”。同时,信号代入时可以附加延时。 例如:y<=xAfter5ns;

上例表明,x和y都是信号,x的值经5ns延时后传递给y,8.3硬件描述语言上一页下一页返回2.VHDL中的数据类型 对象的另一个重要特征是数据类型,即该对象可以保存何种类型的数值VHDL提供了多种标准的数据类型,此外,还允许用户自定义数据类型。标准的数据类型有10种,如表8.2所示。 下面对表中所列的数据类型作一说明。

(1)整数 在VHDL中的整数的定义同数学中的整数的定义相同。在VHDL中整数的表示范围是从。由于VHDL是一个强类型语言,所以在赋值语句中的数据类型必须匹配。整数变量只能赋一个整数。8.3硬件描述语言上一页下一页返回(2)实数(Real)

实数书写时一定要带有小数点,而且有正负之分)实数的定义值范围是:-1.OE+38—+1.OE+38。在应用时,要注意有些数虽然既可以表示为整数,也可以表示为实数,但具体表示出来只能属于一种确定的数据类型。比如,任意一个整数,表示为实数时,小数点后为零。用两种方法表示,数值大小不变,但类型不同。

(3)位(Bit)

在数字系统中,位是用来表示信号的。位只有两种取值,即`0’和‘1'。需要注意位的值与布尔量的值的区别:位的值表示信号的状态,而布尔量的值`0’和‘1’分别表示“真”和“假’。

(4)位矢量(Bit_Vector)

位矢量是用双引号括起来的一组位数据,每位只有‘0’和‘1’两种取值。在其前面可以加数值标记,例如:X(十六进制),B(二进制),0(八进制)等。位矢量常用于表示总线的状态。8.3硬件描述语言上一页下一页返回(5)布尔量(Boolean)

布尔量用于表示信号的状态或者总线上的情况。一个布尔量具有两种状态,“真”或者“假”。虽然布尔量也是二值枚举量,但它和位不同,没有数值的含义,也不能进行算术运算。它能进行关系运算。

(6)字符(Character)

字符也是一种数据类型,所定义的字符量通常用单引号括起来,如‘A'。一般情况下,VHDL语言对大小写不敏感,但是对字符量中的大小写字符则认为是不一样的。例如,`B’不同于‘b'。字符量中的字符可以是a一z中的任一个字母,0—9中的任一个数以及空自或者特殊字符,如MYM,@,%等。8.3硬件描述语言上一页下一页返回(7)字符串(String) 字符串是由双引号括起来的一个字符序列,它也称字符矢量或字符串数组)例如:"week"。)字符串常用于程序的提示和说明。(8)时间(Time) 时间是一个物理量数据。完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置。例如:20ns,10sec,2min,等。在系统仿真时,利用时间数据表示信号延时,可以使模型系统能更逼近实际系统的运行环境。(9)错误等级(SeverityLevel)

错误等级类型数据用来表征系统的状态,它共有4种:NOTE(注意),WARNIN(警告),ERROR(错误),FAILURE(失败)。在系统仿真过程中通过利用这4种状态来提示系统当前的工作情况。8.3硬件描述语言上一页下一页返回(10)大于等于零的整数(Natural),正整数(Positive)

这两类数据是整数的子类,Natural类数据(又称自然数)只能取值0和0以上的正整数;而Positive则只能为正整数。 上述10种数据类型是VHDL语言中标准的数据类型,在编程时可以直接引用。如果需要使用这10种以外的数据类型,则必须进行自定义。由于VHDL语言属于强类型语言,因此对信号和变量的赋值既有类型的要求,还有约束区间的要求。在仿真过程中,首先要检查赋值语句中的类型和区间,也就是赋值要在有效数值的范围内约束区间的说明通常跟在数据类型说明的后面例如:

这里DOWNT0表示下降;而TO表示上升。8.3硬件描述语言上一页下一页返回3.VHDL语言的运算操作符 在VHDL中,有4类操作符,分别进行逻辑(Logical)运算、关系(Relational)运算、算术(Arithmetic)运算和并置(Concatenation)运算。首先需要注意操作数与操作符所要求的类型应保持一致。其次需要注意操作符之间是有优先级别的。(1)逻辑运算符 在VHDL语言中逻辑运算符共有6种,如表中所列,它们分别是: NOT——取反;AND——与;OR——或;NAND——与非;NOR—或非;XOR——异或。8.3硬件描述语言上一页下一页返回

上述6种逻辑运算符可以对“STD_LOGIC”和“BIT"等逻辑型数据、"STD_LOGIC_VECTOR”逻辑型数组及布尔型数据进行逻辑运算。需要注意的是,运算符的左边和右边,以及代入的信号的数据类型必须一致。 在VHDL语言中,左右没有优先级差别。在所有逻辑运算符中NOT的优先级最高。如果想区别先后次序,需适当地增加括号。例外的情况是:当一个逻辑表达式中只有“AND","OR","XOR”中任意一种运算符,那么改变运算顺序不会导致逻辑的改变。也就是说,增加括号与否,逻辑不会改变。此时,可以省略括号。8.3硬件描述语言上一页下一页返回(2)算术运算符VHDL有10种算术运算符,它们分别是: +——加;———减;*——乘;/——除;MOD——求模;

REM——取余;+——正(一元运算)———负;(一元运算) **——指数;ABS——取绝对值。

一元运算的操作数(正、负)可以为任何数值类型(整数、实数、物理量)。加法和减法的操作数范围同一元运算的操作数相同,也可为任何数值类型。同时,在具体的运算中,参加加法和减法运算的操作数的类型必须相同。乘除法的操作数可以同为整数和实数。物理量可以同整数或实数相乘或相除,其结果仍为一个物理量。8.3硬件描述语言上一页下一页返回

物理量除以同一类型的物理量可以得到一个整数量。求模和取余的操作数必须是同一整数类型数据。一个指数运算符的左操作数可以是任意整数或实数,而右操作数应为一个整数(只有在左操作数是实数时,右操作数才可以是负整数)。另外,在对“STD_LOGIC_VECTOR”进行加减运算时,要求两边的操作数和代入的变量位长相同,否则会产生语法错误。“*”运算符两边的位长相加后的值和要代入的变量的位长也要求相同,否则也会出现语法错误。8.3硬件描述语言上一页下一页返回(3)关系运算符VHDL语言中有6种关系运算符,它们分别是:=——等于;/=——不等于;<——小于;<=——小于等于;>——大于;>=——大于等于。8.3硬件描述语言上一页下一页返回

上述6种关系运算符对其两边的操作数的数据类型的要求是不同 的。其中等号“=”和不等号“/=”适用所有类型的数据。其他关系运算 符可使用的数据类型有整数(INTEGER)和实数(REAL)、 位(STD_LOGIC)等枚举类型以及位矢量(STD_LOGIC_VECTOR)等 数组类型的关系运算。在进行关系运算时,要求左右两边的操作数的 数据类型必须相同,但是位长度不一定相同。但是,在对位矢量数据 进行比较时,比较过程是从最左边的位开始,自左至右按位进行比较。如果位长不同,则会出现错误结果。对此,在包集合“STD_ LOGIC_UNSIGNED”中对“STD一LOGIC_VECTOR”关系运算重 新作了定义,使其可以正确地进行关系运算。在使用时要首先调用该 包集合此时位矢量还可以和整数进行关系运算。 在关系运算符中,小于等于符“<=”和代入符“<=”是相同的,在读VHDL语句时,要根据语言环境判断其具体的含义。8.3硬件描述语言上一页下一页返回(4)并置运算符并置运算符“&”用于位的连接。利用它可以将位连接起来构成位矢量。将位矢量连接起来构成位数更多的位矢量。比如,将4个位用并置运算符“&”连接起来就可以构

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论