电子设计自动化EDA_第1页
电子设计自动化EDA_第2页
电子设计自动化EDA_第3页
电子设计自动化EDA_第4页
电子设计自动化EDA_第5页
已阅读5页,还剩410页未读 继续免费阅读

下载本文档

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

文档简介

1电子设计自动化

(EDA)ElectronicDesignAutomation主讲:王成义办公室:文理大楼411Email:CYWANG@SDAU.EDU.CN电子与通信工程系2第0章引论第1章可编程逻辑器件(PLD)的原理与应用第2章VHDL程序编程基础第5章电路仿真工具Multisim及其应用第3章VHDL程序设计进阶第4章印制电路板(PCB)设计及其工具3第0章引论

0.1、电子设计自动化概述

0.2、电子系统的仿真、综合与实现40.1、电子设计自动化概述

电子设计的历史:

追溯至19世纪20世纪50年代:手工,设计效率、设计水平低20世纪60年代:IC出现,计算机的应用,大规模集成电路设计、复杂电子系统设计20世纪70年代:CAD工具、逻辑综合与优化、

SPLD(Simple)

Computer

Aided

Design,

Programable

Logic

Device

1958年9月12日

,杰克·基尔比发明集成电路

(锗)1959年7月

,罗伯特·诺伊斯也发明了集成电路

(硅)520世纪80年代:印制电路板PCB(Printed

Circuit

Board)自动布局布线工具、HDL

(Hardware

Description

Language)

(VHDL、

Verilog

HDL)及其仿真工

具、CPLD(ComplexPLD)20世纪90年代:PAC(ProgramableAnalogCircuit)标准HDL的综合工具以上设计技术统称:电子设计自动化(ElectronicDesignAutomation)21世纪:SoPC

(可编程片上系统)

SystemonProgrammableChip

6电子设计的层次:(由上至下)集成电路技术、计算机技术与EDA的关系系统级、功能级、逻辑级、电路级、物理级集成电路技术和计算机技术是EDA技术发展的基础。反过来,EDA技术为电子设计提供了强有力的支持,不仅使电子系统的规模日益复杂,而且使电子产品的周期不断缩短,从而又推到了集成电路和计算机技术以更快的速度发展。70.2、电子系统的仿真、综合与实现

★仿真(又称模拟)(Simulation):

用计算机模仿电子系统的实际工作情况。

一般来说,仿真有问题,设计一定有问题;仿真没有问题,设计不一定没有问题。★综合(Synthesis):将高层次的设计描述转换成由低层次便于实现的模块所装配成的统一实体。分为:自然语言综合

、高层(行为)综合、逻辑综合、版图综合。8★实现(Implementation):电子系统的最终载体。实现方式:通用IC、PLD、定制IC。★PCB制作:9第1章PLD的原理与应用1.1、SPLD的原理与组成1.2、CPLD的结构与工作原理1.3、FPGA的结构与工作原理1.4、CPLD/FPGA生产商1.5、CPLD与FPGA的编程与配置1.6、CPLD/FPGA的开发工具1.7、FPGA/CPLD设计流程1.8、ALTERA开发工具QUARTUSII10数字集成电路:通用集成电路、专用集成电路(ASIC)Application-SpecificIntegratedCircuit通用集成电路:74/54、C4000专用集成电路:为特定用途而设计和制造的器件,是用户定制的IC。分为:全定制、

半定制11半定制电路门阵列(GA)可编程逻辑器件(PLD)门海(SoG)SPLDHDPLDPROMPLAPALGALCPLDFPGAPLD特点:高密度、高速度、高开发效率121.1、SPLD的原理与组成

PLD的核心结构1.1.1PLD的基本结构数据输入输入电路与门阵列或门阵列输出电路数据输出}互补输入与项与或式}……缓冲互补缓冲提供不同输出结构(课本P27)131.1.2PLD内部电路的表示方法常用逻辑门符号与现有国标符号的对照14PLD的互补缓冲器PLD的互补输入PLD中与阵列表示PLD中或阵列的表示阵列线连接表示

PLD中的逻辑符号表示方法15PLD中的逻辑符号表示方法16PROM基本结构:地址译码器输出逻辑函数是:1.1.3PROM17存储单元逻辑函数表示:18PROM的逻辑阵列结构:19PROM表达的PLD阵列图用PROM完成半加器逻辑阵列20PLA逻辑阵列示意图1.1.4PLA21PLA与PROM的比较22PAL结构:PAL的常用表示形式:1.1.5PAL23一种PAL16V8的部分结构图241.1.6GAL24GAL16V8的结构图输入口可编程与阵列24时钟信号输入输入/输出口输出逻辑宏单元三态控制固定或阵列25OLMC的内部结构图262728293031321.2、CPLD的结构与工作原理SPLD器件基本上已被淘汰,只有GAL还在应用。原因:1.阵列规模小,资源不够用于设计数字系统。2.片内寄存器资源不足,难以构成丰富的时序电路。3.I/O不够灵活,限制了片内资源的利用率。4.编程不便,需用专用的编程工具。所以:GALCPLD典型CPLD:ALTERAMAX7000系列33MAX7000包含32到256个宏单元,每16个宏单元组成一个逻辑阵列块(LogicArrayBlock,LAB)。MAX7000结构中包含5部分:1.逻辑阵列块2.宏单元3.扩展乘积项(共享和并联)4.可编程连线阵列5.I/O控制块34(1)逻辑阵列块(LAB)EPM7256S的LAB结构35MAX7000系列的单个宏单元结构PRNCLRNENA逻辑阵列全局清零共享逻辑扩展项清零时钟清零选择寄存器旁路并行扩展项通往I/O模块通往PIA乘积项选择矩阵来自I/O引脚全局时钟QDEN来自PIA的36个信号快速输入选择2(2)宏单元VCC3637(3)扩展乘积项共享扩展乘积项结构3839并联扩展项馈送方式4041(4)可编程连线阵列

不同的LAB通过在可编程连线阵列(PIA)上布线,以相互连接构成所需的逻辑。PIA信号布线到LAB的方式42(4)可编程连线阵列

不同的LAB通过在可编程连线阵列(PIA)上布线,以相互连接构成所需的逻辑。PIA信号布线到LAB的方式43(5)I/O控制块EPM7128S器件的I/O控制块44(5)I/O控制块EPM7128S器件的I/O控制块451.3.1查找表1.3、FPGA的结构与工作原理FPGA:现场可编程门阵列(FieldProgrammableGateArray)

查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。46FPGA查找表单元内部结构MUXF471.3.2Cyclone/CycloneII系列器件的结构与原理Cyclone/CycloneⅡ系列器件是Altera公司的一款低成本的、高性价比的FPGA,它的结构和工作原理在FPGA中具有典型性。

Cyclone与CycloneⅡ系列器件的基本结构、原理类似。Cyclone系列器件主要有以下部分组成:

逻辑阵列块LAB、嵌入式存储器块、I/O单元、嵌入式硬件乘法器、锁相环PLL等。48CycloneLE结构图4950CycloneLE普通模式

5152CycloneLE动态算术模式

5354CycloneLAB结构

5556LAB阵列

5758LAB控制信号生成

5960快速进位选择链

6162LUT链和寄存器链的使用

63LVDS连接

Low-VoltageDifferentialSignaling低压差分信号641.4、CPLD/FPGA生产商ALTERACPLD:MAX7000/S/A/B系列:EPM7128SMAX9000/A系列MAX3000系列:MAXII系列:EPM240(570,1270,2210)/GMAXIII系列:EPM240(570,1270,2210)/GFPGA:FLEX系列:10K、10A、10KE,EPF10K30EAPEX系列:20K、20KEEP20K200EACEX系列:1K系列EP1K30、EP1K100STRATIX系列:EP1S10(20,25,30,40,50,60,80,120)CYCLONE系列:EP1C3(4,6,12,20)StratixGX系列CYCLONEII系列:EP2C5(8,20,35,50,70)STRATIXII系列:EP2S15(30,60,90,130,180)CYCLONEIII系列:EP3C5(10,16,25,40,55,80,120)STRATIXIII系列:EP3SL15(50,70,110,150,200,340)65XILINXCPLD:FPGA:XC9500系列:XC95108、XC95256XC3000系列,XC4000系列,XC5000系列Virtex系列,VirtexII系列SPARTAN系列:XCS10、XCS20、XCS30SPARTANII系列LATTICECPLD:FPGA:ispMACH4000V/B/C/Z系列MachX0系列ispLSI系列LatticeEC/ECP系列LatticeXP系列66其他PLD公司:ACTEL公司:ACT1/2/3、40MXATMEL公司:ATF1500AS系列、40MXCYPRESS公司QUIKLOGIC公司SOMUCHIC!FPGACPLD671.5、CPLD与FPGA的编程与配置ALTERAByteBlaster(MV)下载接口此接口既可作编程下载口,也可作JTAG接口JTAG:JointTestActionGroup68此接口既可作编程下载口,也可作JTAG接口ALTERAUSBBlaster下载接口691.6、CPLD/FPGA的开发工具集成的FPGA/CPLD开发环境:MAXPLUSII10.23QUARTUS

II10.0ALTERA:XILINX:FOUNDATION3.1ISE10.1iISEDesignSuite12.1LATTICE:ispEXPERT7.01ispLEVER7.2PACDesigner

ispLEVERClassic1.4

由PLD/FPGA芯片厂家提供,基本都可以完成所有的设计输入(原理图或HDL),仿真,综合,布线,下载等工作。70HDL逻辑综合软件:

这类软件将把HDL语言翻译成最基本的与或非门的连接关系(网表),输出edif(ElectronicDesignInterchangeFormat)文件,导给PLD/FPGA厂家的软件进行适配和布线。为了优化结果,在进行复杂HDL设计时,基本上都会使用这些专业的逻辑综合软件,而不使用PLD/FPGA厂家的集成开发软件中自带的逻辑综合功能。Synplify/SynplifyProLeonardoSpectrumSynplicity:Mentor:FPGAComplierIISynopsys:71ModelTech:ModelsimAldec:ActiveHDLCadence:NC-Verlog/NC-VHDL/NC-SIMHDL仿真软件

对设计进行校验仿真,包括布线以前的功能仿真(前仿真)和布线以后包含延时的时序仿真(后仿真),对于一些复杂的HDL设计可能需要这些软件专业的仿真功能。721.7、FPGA/CPLD设计流程应用FPGA/CPLD的EDA开发流程:原理图/VHDL文本编辑综合FPGA/CPLD适配FPGA/CPLD编程下载FPGA/CPLD器件和电路系统时序与功能门级仿真1、功能仿真2、时序仿真逻辑综合器结构综合器1、isp方式下载2、JTAG方式下载3、针对SRAM结构的配置4、OTP器件编程

功能仿真(课本P13)731.7.1设计输入(原理图/HDL文本编辑)1.图形输入

图形输入

原理图输入

状态图输入

波形图输入742.HDL文本输入

这种方式与传统的计算机软件语言编辑输入基本一致。就是将使用了某种硬件描述语言(HDL)的电路设计文本,如VHDL或VerilogHDL的源程序,进行编辑输入。

可以说,应用HDL的文本输入方法克服了上述原理图输入法存在的所有弊端,为EDA技术的应用和发展打开了一个广阔的天地。75

整个综合过程就是将设计者在EDA平台上编辑输入的HDL文本、原理图或状态图形描述,依据给定的硬件结构组件和约束控制条件进行编译、优化、转换和综合,最终获得门级电路甚至更底层的电路描述网表文件。由此可见,综合器工作前,必须给定最后实现的硬件结构参数,它的功能就是将软件描述与给定的硬件结构用某种网表文件的方式对应起来,成为相互的映射关系。1.7.2综合76

适配器也称结构综合器,它的功能是将由综合器产生的网表文件配置于指定的目标器件中,使之产生最终的下载文件,如JEDEC、Jam格式的文件。适配所选定的目标器件(FPGA/CPLD芯片)必须属于原综合器指定的目标器件系列。

逻辑综合通过后必须利用适配器将综合后网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、逻辑布局布线操作。适配完成后可以利用适配所产生的仿真文件作精确的时序仿真,同时产生可用于编程的文件。1.7.3适配77时序仿真功能仿真

是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求的过程,仿真过程不涉及任何具体器件的硬件特性。1.7.4时序仿真与功能仿真

就是接近真实器件运行特性的仿真,仿真文件中己包含了器件硬件特性参数,因而,仿真精度高。78

通常,将对CPLD的下载称为编程(Program),对FPGA中的SRAM进行直接下载的方式称为配置(Configure),但对于OTPFPGA的下载和对FPGA的专用配置ROM的下载仍称为编程。

FPGA与CPLD的辨别和分类主要是根据其结构特点和工作原理。通常的分类方法是:将以乘积项结构方式构成逻辑行为的器件称为CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。将以查表法结构方式构成逻辑行为的器件称为FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。1.7.5编程下载79

最后是将含有载入了设计的FPGA或CPLD的硬件系统进行统一测试,以便最终验证设计项目在目标系统上的实际工作情况,以排除错误,改进设计。1.7.6硬件测试801.8、ALTERA开发工具QuartusII1位全加器设计向导原理图输入设计方法基本设计流程为本项工程设计建立文件夹(必须有)注意:文件夹名不能用中文,且不可带空格。(课本P955.1,5.2)(课本P1165.4)81CLICKCLICK82CLICKCLICK83CLICKCLICK84CLICK8586CLICK8788CLICKLibrariesprimitiveslogic89DOUBLECLICK90CLICKCLICKCLICK9192CLICK9394CLICKCLICK95CLICKCLICK9697CLICK98MouseRightClick99CLICK100CLICKCLICKCLICK101CLICK102CLICK103CLICK在此区域连续单击鼠标右键104CLICK105CLICKCLICK106保存107108第2章VHDL程序编程基础2.1、简介--背景2.2、VHDL语言程序的基本结构2.3、VHDL语言的数据类型及运算操作符

2.4、VHDL语法基础

2.5、属性的描述与定义109传统数字电路设计方法不适合设计大规模的系统。工程师不容易理解原理图设计的功能。众多软件公司开发研制了具有自己特色的电路硬件描述语言HDL(HardwareDescriptionLanguage),这些语言之间存在着很大的差异,工程师一旦选用某种硬件描述语言作为输入工具,就被束缚在这个硬件设计环境之中。因此,硬件设计工程师需要一种强大的、标准化的硬件描述语言,作为可相互交流的设计环境。2.1、简介--背景110描述复杂的数字电路系统成为国际的硬件描述语言标准美国国防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)计划,其目标之一是为下一代集成电路的生产,实现阶段性的工艺极限以及完成10万门级以上的设计,建立一项新的描述方法。1981年提出了一种新的HDL,称之为VHSICHardwareDescriptionLanguage,简称为VHDL,这种语言的成就有两个方面:InstituteofElectricalandElectronicsEngineers1987,“IEEE标准1076”,最新,IEEE1076-2008111VHDL的优点:用于设计复杂的、多层次的设计。支持设计库和设计的重复使用与硬件独立,一个设计可用于不同的硬件结构,而且设计时不必了解过多的硬件细节。有丰富的软件支持VHDL的综合和仿真,从而能在设计阶段就能发现设计中的Bug,缩短设计时间,降低成本。更方便地向ASIC过渡。VHDL有良好的可读性,容易理解。112VHDL与计算机语言的区别★运行的基础

▼计算机语言是在CPU+RAM构建的平台上运行

▼VHDL设计的结果是由具体的逻辑、触发器组成的数字电路★执行方式

▼计算机语言基本上以串行的方式执行

▼VHDL在总体上是以并行方式工作★验证方式

▼计算机语言主要关注于变量值的变化

VHDL要实现严格的时序逻辑关系113--eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entity

eqcomp4

isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbegin

equal<=‘1’whena=belse‘0’;Enddataflow;VHDL大小写不敏感eqcomp4.vhd包实体结构体文件名和实体名一致每行;结尾关键字begin关键字end后跟实体名关键字end后跟结构体名库类型设计实体1142.2、VHDL语言程序的基本结构一个完整的VHDL语言程序通常包含五个部分:实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library)(课本P225)115前面的例子

设计实体是VHDL语言设计的基本单元,是最重要的系统抽象。设计实体由实体说明和结构体两部分组成定义了设计单元的具体构造和操作

规定了设计单元的输入输出接口信号或引脚EntityDeclarationArchitectureBody2.2.1设计实体(designentity)

116实体说明的一般格式如下:文件名和实体名一致!ENTITY实体名

IS[GENERIC(类属参数说明);][PORT(端口说明);]

实体说明部分;[BEGIN

实体语句部分;]END[ENTITY][实体名];2.2.2实体说明

117ENTITY实体名IS[GENERIC(类属参数说明);]PORT(端口说明);END[实体名];实体说明的常用格式如下:<EntityDeclaration>::=ENTITYIdentifierIS <EntityHeader> <EntityDeclarativePart> [BEGIN <EntityStatementPart>] END[ENTITY][<EntitySimpleName>];1181.类属参数说明

类属参数说明用于说明设计实体和其外部环境通信的对象、通信的格式约定和通信通道的大小。

GENERIC([CONSTANT]名字表:[IN]子类型标识[:=静态表达式],…);

GENERIC(名字表:子类型标识[:=静态表达式],…);例如:GENERIC(m:TIME:=3ns)

一般书写格式为:常用书写格式为:GENERIC(m:TIME:=5ns,n:INTEGER:=75)GENERIC(n:INTEGER:=15)1192.端口说明

端口为设计实体和其外部环境的动态通信提供通道,是对基本设计实体与外部接口的描述。PORT([SIGNAL]端口名:[模式]子类型标识[BUS][:=静态表达式],…);PORT(端口名:模式子类型标识[BUS],…);(1)端口名端口名是赋予每个外部引脚的名称一般书写格式为:常用书写格式为:120(2)端口模式

端口模式用来说明数据、信号通过该端口的方向。LINKAGE(不指定方向,无论哪个方向都可连接)。

VHDL语言提供了下述端口模式:IN

(流入实体),OUT

(流出实体),INOUT

(双向端口:既可流入,又可流出),BUFFER

(信号输出到外部,但同时也可在实体内部反馈),121(3)数据类型

VHDL语言中有10种数据类型,IEEE1076/93标准规定,EDA综合工具提供的数据类型为布尔型(Boolean)、位型(Bit)、位矢量型(Bit_vector)和整数型(Integer)。

但在实际中,常用的数据类型为:

STD_LOGICSTD_LOGIC_VECTOR

要使用这2种类型,须在程序开始加入以下两语句:

LIBRARY

IEEE;USEIEEE.STD_LOGIC_1164.ALL;例如:‘U’Uninitialized‘X’ForcingUnknown‘0’Forcing0‘1’Forcing1‘Z’HighImpedance‘W’WeakUnknown‘L’Weak0‘H’Weak1‘-’Don’tcareTRI_STATE122LIBRARY

IEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoIS

PORT(clock:IN

STD_LOGIC;

q:OUT

STD_LOGIC_VECTOR(7

DOWNTO0)

);ENDdeco;前面的例子无;123结构体描述一个设计的结构或行为

用VHDL语言描述结构体功能有3种方法:(1)行为描述法(behavioral):(2)数据流描述法(RTLordataflow):(3)结构描述法(structural):2.2.3结构体

124例如:architectureoneofmux21isbeginy<=awhens=‘0’elseb;end

architectureone;结构体的常用书写格式为:ARCHITECTURE结构体名OF实体名IS--定义语句BEGIN--并行处理语句END[ARCHITECTURE][结构体名];125ARCHITECTUREoneOFdecoISBEGINWITHnumSELECT q<="00111111"WHEN"0000", "00000110"WHEN"0001", "01011011"WHEN"0010", "01001111"WHEN"0011", "01100110"WHEN"0100", "01101101"WHEN"0101", "01111101"WHEN"0110", "00100111"WHEN"0111", "01111111"WHEN"1000", "01101111"WHEN"1001", "00000000"WHENOTHERS;ENDone;1261.结构体名称的命名

结构体的名称可自由命名,但通常命名为

behavioraldataflowstructuralARCHITECTUREbehavioralOFmuxIS用结构体行为命名ARCHITECTUREdataflowOFmuxIS用结构体的数据流命名ARCHITECTUREstructuralOFmuxIS用结构体的组织结构命名2.定义语句

用于对结构体内部所使用的信号、常数、数据类型和函数进行定义。127例:计数器的VHDL描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYcnt10ISPORT(clock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ca:OUTSTD_LOGIC);ENDcnt10;128ARCHITECTURErtlOFcnt10IS

SIGNALqs:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clock)VARIABLEq10:INTEGER

range0to15:=0;

BEGINIF(clock'EVENTANDclock='1')THEN IF(q10=9)THEN q10:=0;ca<='1'; ELSEq10:=q10+1;ca<='0';ENDIF;ENDIF;

qs<=CONV_STD_LOGIC_VECTOR(q10,4);

q<=qs;ENDPROCESS;ENDrtl;返回类型转换返回整数1295LEsSKIP13073LEs1312.3、VHDL语言的数据类型及运算操作符

VHDL语言的标识符是遵守以下规则的字符序列:(1)有效字符:(A~Z,a~z)、(0~9)和(_)。(2)必须以英文字母打头。(3)下划线前后必须都有英文字母或数字。(4)标识符不区分大小写。下面是合法的标识符:pulse_100msPulse_100msPULSE_100MS下面是不合法的标识符:pulse-100ms2pulse_100ms_pulse_100mspulse_100ms_2.3.1标识符

(课本P127)132

在VHDL语言中对象包括以下3种:信号(Signal)、变量(Variable)和常数(Constant)。

(课本P127)1.常数(Constant)CONSTANT常数名:数据类型:=表达式;例如:CONSTANTDELAY:time:=100ns;常数说明的一般格式如下:常数是一个全局量。2.3.2VHDL语言的对象及其分类

SYNconstantwriteDDRAM:std_logic_vector(4downto0):="10001";1332.变量(Variable)VARIABLE变量名:数据类型约束条件:=表达式;例如:VARIABLEx,y,z:INTEGER;变量说明语句的一般格式为:

变量只能在进程语句、函数语句和过程语句结构中使用,是一个局部量。变量在赋值时不能产生附加延时。通常暂存一些信号。variablecount:integerrange0to255:=10;SYN1343.信号(Signal)

SIGNAL信号名:数据类型约束条件:=表达式;例如:SIGNALground:std_logic:=‘0’;信号说明语句的一般格式为:用于VHDL中元件之间的通讯通常对应实际系统中的连线信号赋值需要延时周期后才生效信号不能在process内声明信号是一个全局量SYN135变量和信号的区别:signald:std_logic_vector(3downto0);process(a,b,c,d)begind<=a;x<=b+d;d<=c;y<=b+d;endprocess;process(a,b,c)variabled:std_logic_vector(3downto0);begind:=a;x<=b+d;d:=c;y<=b+d;endprocess;x<=b+c;y<=b+c;x<=b+a;y<=b+c;1361372.3.3VHDL语言的数据类型

VHDL语言标准定义了10种标准的数据类型还可以由用户自定义数据类型

VHDL语言的数据类型的定义相当严格,不同类型之间的数据不能直接代入,数据类型相同,而位长不同时也不能直接代入。1.VHDL语言标准所定义的标准数据类型

.整数(Integer).实数(Real).位(Bit).位矢量(Bit_Vector).布尔量(Boolean)(课本P249)138.字符(Character).字符串(String).时间(Time).错误等级(SeverityLevel).自然数(Natural)、正整数(Positive)(1)整数(Integer)整数的表示范围从-(231-1)到(231-1)VARIABLEA:INTEGER

RANGE–127TO127;(2)实数(Real)定义值范围为-1.0E+38到+1.0E+38例如:+2.0,-2.5,+1.0E38SYN例子139(3)位(Bit)

位值的表示方法是,用字符'0'或者'1'(将值放在单引号中)表示(4)位矢量(Bit_Vector)

位矢量是用双引号括起来的一组位数据。

例如:"001010"(5)布尔量(Boolean)

它能进行关系运算。一个布尔量常用来表示信号的状态或者总线上的情况。

一般这一类型的数据的初始值总为FALSE。SYNSYNSYN140(6)字符(Character)

字符量通常用单引号括起来,如'T','I'。(7)字符串(String)

字符串是由双引号括起来的一个字符序列,也称字符矢量或字符串数组

例如:“STRING”,“INTEGERRANGE”(8)时间(Time)

时间是一个物理量数据。时间类型一般用于仿真,而不用于逻辑综合。

例如:55sec,2minSYNSYN141

错误等级类型数据用来表示系统的状态。它分为四种:NOTE(注意)、WARNING(警告)、ERROR(出错)、FAILURE(失败)。在仿真过程中可以用这四种状态来提示系统当前的工作情况。(9)错误等级(SeverityLevel)(10)自然数(Natural)、正整数(Positive)

自然数和正整数是整数的子类,Natural类数据只能取值0和0以上的正整数,Positive只能为正整数。SYN1422.用户定义的数据类型

TYPE数据类型名[,数据类型名]数据类型定义;

可由用户定义的数据类型有:.枚举(Enumerated)类型.整数(Integer)类型.实数(Real)、浮点数(Floating)类型.数组(Array)类型.存取(Access)类型.文件(File)类型.记录(Record)类型.时间(Time)类型(物理类型)书写格式为:143(1)枚举(Enumerated)类型

格式:TYPE数据类型名IS(元素,元素,…);例如:TYPEBooleanIS(false,true);SYN(2)整数(Integer)类型格式:TYPE数据类型名IS数据类型定义约束范围;例如:TYPEdigitISINTEGERrange0TO9;SYN(3)数组(Array)类型格式:TYPE数据类型名ISARRAY范围OF原数据类型名;

例如:TYPEwordISARRAY(1TO16)OFSTD_LOGIC;SYN(一维)144(4)实数(Real)、浮点数(Floating)类型(5)存取(Access)类型(6)文件(File)类型

(7)记录(Record)类型

记录是将不同类型的数据和数据名组织在一起而形成数据类型。TYPE数据类型名ISRECORD

元素名:数据类型名;元素名:数据类型名;┆

ENDRECORD;格式:SYN145TYPEPCI_BUSISRECORDADDR:STD_LOGIC_VECTOR(31DOWNTO0);

DATA:STD_LOGIC_VECTOR(31DOWNTO0);┆

ENDRECORD;

SIGNALDECODE1:PCI_BUS;

SIGNALDECODE2:PCI_BUS;

PCI_DEVICE1<=DECODE1.ADDR;

PCI_DEVICE1RAM<=DECODE1.DATA;(8)时间(Time)类型(物理类型)在从记录数据类型中提取元素数据类型时应使用“.”。例如:146

在VHDL语言中,不同类型的数据是不能进行运算和代入的。为了实现正确的代入操作,必须要将代入的数据进行类型转换。一般是用函数转换法实现类型转换。例如:2.3.4类型转换

STD_LOGIC_VECTOR与INTEGER相互转换的函数,其对应的转换函数在程序包IEEE.STD_LOGIC_UNSIGNED和IEEE.STD_LOGIC_ARITH中定义。functionconv_integer(arg:std_logic_vector)returninteger;functionconv_std_logic_vector(arg:integer;size:integer)returnstd_logic_vector;例子(课本P254,例9-18,例9-19)1472.3.5词法1.程序注释

注释从“--”符号开始,到该行末尾结束。2.数字

VHDL语言数字表示法有十进制表示法、二进制表示法和八进制表示法。(课本P247)148整数举例:010,1,345_67,3e8浮点数举例:10.0,3.1415,1.2E-3,2.1e+5其中:整数::=

数字或下划线连接的数字指数::=E[+]整数或E[-]整数(1)十进制数表示法书写格式为:十进制文字::=

整数.[整数][指数](2)基表示二、八、十六进制数的方法用“基”表示数的书写格式为:149举例:

2#10110101#--二进制表示法

8#267#--八进制表示法

16#8F#--十六进制表示法

30=3E1=16#1E#=2#11_11#E130.0=300.0e-1=16#1E.0#=2#11.11#E+3上式中:基::=

整数基于基的整数::=

扩展数字{[下划线]扩展数字}

扩展数字::=

数字/字母以基表示的数::=

基#基于基的整数.[基于基的整数]#指数1503.字符

VHDL中的字符为被单引号括起来的ASCII字符。其书写格式为:字符文字::=‘图形字符’例如:‘A’‘’‘*’1514.字符串

VHDL中的字符串为被双引号括起来的图形字符序列,可以为空。其书写格式为:字符串::=“图形字符”例如:“A”“”“string”152

位串是被双引号括起来的扩展数字序列,在数字序列前冠以基数说明符。其书写格式为:

位串文字::=基数说明符“位值”B为二进制基说明符,O为八进制基说明符,X为十六进制基说明符例如:B“1111_1101”X“DFC”O“257”5.位串

位串的长度等价于二进制数的长度。位值::=扩展数字{或下划线扩展数字}1532.3.6运算操作符

VHDL语言的操作符有5种:★逻辑运算符(LOGICAL)★关系运算符(RELATIONAL)★算术运算符(ARITHMETIC)★并置运算符(CONCATENATION)1.逻辑运算符

在VHDL语言中,逻辑运算符有7种:(课本P256)★移位运算符(SHIFT)SYN154◆NOT——取反◆AND——与◆

OR——或◆

NAND——与非◆

NOR——或非◆

XOR——异或◆

XNOR——同或

在一个VHDL语句中存在两个逻辑表达式时,左右没有优先级差别(不包括NOT)。一个逻辑式中,先做括号里的运算,再做括号外运算。逻辑运算符的书写格式为:(1)a<=bANDcANDdANDe;(2)a<=bORcORdORe;(3)a<=(bANDc)OR(dANDe);1552.算术运算符

VHDL语言有10种算术运算符:●+——加运算●

-——减运算●

*

——乘运算●

/——除运算●

REM——取余运算●MOD——求模运算●

+——正●

-——负●

**

——指数运算●

ABS——取绝对值SYN156算术运算符的使用规则如下:◆一元运算的操作数(正、负)可以是任何数值类型(整数、实数、物理量)。◆加减运算的操作数可以是整数、实数。对于加、减运算的两个操作数必须类型相同。◆乘除的操作数可以同为整数和实数,物理量乘或除以整数仍为物理量,物理量除以同一类型的物理量即可得到一个整数量。◆求模和取余的操作数必须是同一整数类型数据。◆一个指数的运算符的左操作数可以是任意整数或实数,而右操作数应为一整数。1573.关系运算符

VHDL语言中6种关系运算:(1)=

——等于(2)/=

——不等于(3)<

——小于(4)<=

——小于等于(5)>

——大于(6)>=

——大于等于在VHDL程序设计中运算符有如下规则:SYN158▼等号“=”和不等号“/=”可以适用所有类型的数据。▼小于“<”、小于等于“<=”、大于“>”、大于等于“>=”适用于整数、实数、位矢量及数组类型的比较。▼两个位矢量类型的对象比较时,自左至右,按位比较。▼小于等于“<=”和代入“<=”是相同的,在读VHDL语言的语句时,要根据上下文关系来判断。▼在进行关系运算时,左右两边的操作数的数据类型必须相同.1594.并置运算符

并置运算符“&”用于位的连接。并置运算符有如下使用规则:◆并置运算符可用于位的连接,形成位矢量.◆并置运算符可用于两位矢量的连接构成更大的位矢量.◆位的连接也可以用集合体的方法,即将并置符换成逗号.例如:DATA_C<=D0&D1&D2&D3;DATA_C<=(D0,D1,D2,D3);SYN1605.移位运算符

(1)SLL

——逻辑左移(2)SRL ——逻辑右移(3)SLA ——算术左移(4)SRA

——算术右移(5)ROL ——循环左移(6)ROR ——循环右移SYN数据类型为BIT,BIT_VECTOR,BOOLEAN条件:1616.操作符的运算优先级

NOTABS***/MODREM+(positive)-(negative)+-&SLLSRLSLASRAROLROR=/=<<=>>=ANDORNANDNORXORXNOR高低1622.4、VHDL语法基础

2.4.1并行语句

VHDL语言是并行处理语言,能够进行并行处理的语句有:Process-进程语句ConcurrentSignalAssignment-并行信号赋值语句Block-块语句ComponentInstantiation

-元件(例化)调用语句Generate-生成语句ConcurrentProcedureCall-并行过程调用语句ConcurrentStatements(课本P289)1631.进程语句(Process)

进程语句是并行处理语句,即各个进程是同时处理的,在一个结构体中多个Process语句是同时并发运行的。Process语句具有如下特点:(1)进程结构中的所有语句都是按顺序执行的。(2)多进程之间,是并行执行的,并可存取结构体或实体中所定义的信号。(3)为启动进程,在进程结构中必须包含一个显式的敏感信号量表或者包含一个WAIT语句。(4)进程之间的通信是通过信号量传递来实现的。164Process语句的一般书写结构、组织形成为:[进程名:]PROCESS[敏感信号表]

变量说明语句:┆

BEGIN┆顺序说明语句┆

ENDPROCESS[进程名];165[例:]由时钟控制的进程语句设计。ENTITYsync_deviceISPORT(ina,inb,clk:INBit;Outb:OUTBit);ENDsync_device;ARCHITECTUREexampleOFsync_deviceISBEGIN

P1:PROCESS(clk)

BEGIN

Outb<=inaandinb;

ENDPROCESSP1;ENDexample;166

GENERIC语句用于不同层次设计模块之间信息的传递和参数的传递,可用于位矢量的长度、数组的位长等参数的传递。这些参数都是整数类型,其他数据类型不能综合。libraryieee;useieee.std_logic_1164.all;entitycntm16isgeneric(cntwidth:integer:=4);port(en:instd_logic;nreset:instd_logic;clk:instd_logic;co:outstd_logic;qcnt:buffer

std_logic_vector(cntwidth-1

downto0));endcntm16;167architecturebehaveofcntm16isbeginco<='1'when(qcnt="1111"anden='1')else'0';process(clk,nreset)beginif(nreset='0')thenqcnt<=(others=>'0');--qcnt<="0000";elsif(clk'eventandclk='1')thenif(en='1')thenqcnt<=qcnt+1;endif;endif;endprocess;endbehave;1681692.并行信号赋值语句(CONCURRENTSIGNALASSIGNMENT)并行信号赋值语句有三种形式:(1)简单信号赋值语句(2)条件信号赋值语句(3)选择信号赋值语句170(1)简单信号赋值语句简单信号赋值(信号代入)语句的格式如下:信号量<=敏感信号量表达式;

信号代入语句在进程内部使用时,它作为顺序语句的形式出现;信号代入语句在结构体的进程之外使用时,它作为并发语句的形式出现。一个并发信号代入语句是一个等效进程的简略形式。例如:q<=c+d;process(c,d)beginq<=c+d;endprocess;171条件信号赋值语句的格式为:目标信号<=表达式1WHEN

条件1ELSE

表达式2WHEN

条件2ELSE

表达式3WHEN

条件3ELSE┆

表达式nWHEN

条件nELSE

表达式n+1;

(2)条件信号赋值语句172libraryieee;useieee.std_logic_1164.all;entitymux4isport(a0,a1,a2,a3:instd_logic;s:instd_logic_vector(1downto0);y:outstd_logic);endmux4;architecturedataflowofmux4isbeginy<=a0whens=“00”elsea1whens=“01”elsea2whens=“10”elsea3;enddataflow;173TechnologyMap174RTL175libraryieee;useieee.std_logic_1164.all;entityencoder_1isport(a,b,c,d,e,f,g,h:instd_logic;codeout:outstd_logic_vector(2downto0));endencoder_1;architecturebehavioralofencoder_1isbegincodeout<="111"whenh='1'else"110"wheng='1'else"101"whenf='1'else"100"whene='1'else"011"whend='1'else"010"whenc='1'else"001"whenb='1'else"000"whena='1'else"ZZZ";endbehavioral;IF语句176177选择型信号赋值语句的格式为:WITH

表达式

SELECT目标信号<=表达式1WHEN

条件1,

表达式2WHEN

条件2,

表达式3WHEN

条件3,┆

表达式nWHEN

条件n;注意!(3)选择信号赋值语句178libraryieee;useieee.std_logic_1164.all;entitymux4isport(a0,a1,a2,a3:instd_logic;s:instd_logic_vecter(1downto0);y:outstd_logic);endmux4;architecturedataflowofmux4isbegin

withs

select

y<=a0

when“00”,

a1

when

“01”,

a2

when

“10”,

a3

when

others;enddataflow;179TechnologyMap180RTL1813.块语句

(Block)

块(Block)是将结构体中的并行语句组合在一起,其目的是改善并行语句及其结构的可读性,一般用于较复杂的VHDL程序中。但从综合角度看,该语句没有实用价值。标号:Block[(保护表达式)][块说明部分]

BEGIN

并行语句A;

并行语句B;┆

ENDBlock[块标号];标号必须有!182libraryieee;useieee.std_logic_1164.all;entitytest_blockisport(a,b:instd_logic;aequalb,agreatb,alessb:outstd_logic);endtest_block;architecturebehaveoftest_blockisbegin

comp:block

beginaequalb<='1'whena=belse'0';agreatb<='1'whena>belse'0';alessb<='1'whena<belse'0';

endblock;endbehave;

183TechnologyMap184RTL1854.元件例化语句(ComponentInstantiation)

一般把设计好的设计实体称为一个元件或一个模块。VHDL中基本的设计层次是元件,它可作为其它模块或更高层次模块引用的底层模块。

元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他模块中被调用。元件声明可放在程序包中,也可放在某个设计的结构体中进行。

元件例化是指元件的调用,是将现成元件的端口信号映射成高层次设计电路中的信号。元件声明及元件例化的语法分别如下:186元件声明语句

(元件定义语句):元件例化语句:COMPONENT

元件名[IS]

GENERIC(类属表);

PORT(端口名表);ENDCOMPONENT

[元件名];例化名:元件名PORTMAP([端口名=>]连接端口名,...);位置关联、名称关联1875.生成语句(GENERATE)GENERATE语句用来产生多个相同的结构和描述规则结构,如块阵列,元件例化或进程。GENERATE语句的两种形式分别为:[标号:]FOR

循环变量IN

取值范围GENERATE

说明

BEGIN

并行语句

ENDGENERATE[标号];[标号:]IF

条件

GENERATE

说明

Begin

并行语句

ENDGENERATE[标号];1886.并发过程调用语句(CONCURRENTPROCEDURECALL

温馨提示

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

评论

0/150

提交评论