《基于vhdl的复杂可编程逻辑器件(cpld)应用技术.doc》由会员分享,可在线阅读,更多相关《基于vhdl的复杂可编程逻辑器件(cpld)应用技术.doc(109页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、基于vhdl的复杂可编程逻辑器件(cpld)应用技术基于VHDL的复杂可编程逻辑器件(CPLD)应用技术绪论CPLD/FPGA/ASIC诞生与发展概述一常见英文缩写解释(按字母顺序排列):ASIC: Application Specific Integrated Circuit. 专用ICCPLD: Complex Programmable Logic Device. 复杂可编程逻辑器件EDA: Electronic Design Automation. 电子设计自动化FPGA: Field Programmable Gate Array. 现场可编程门阵列GAL: Generic Array
2、 Logic. 通用阵列逻辑HDL: Hardware Description Language. 硬件描述语言 IP: Intelligent Property. 智能模块 PAL: Programmable Array Logic. 可编程阵列逻辑 RTL: Register Transfer Level. 寄存器传输级(描述) SOC: System On a Chip. 片上系统 SLIC: System Level IC. 系统级IC VHDL: Very high speed integrated circuit Hardware Description Language. 超高速
3、集成电路硬件描述语言二硬件描述语言的诞生与发展: 1.硬件描述语言的起源: 人们 为了把复杂的电子电路用文字文件方式描述并保存下来,方便他人了解电路内容,就诞生了最初的硬件描述语言。经过多种硬件描述语言诞生与淘汰的演变,当前国内外普遍使用的主流硬件描述语言只有两种:VHDL和Verilog HDL。还有ABEL和AHDL等。2.VHDL : 以ADA语言为基础,由美国国防高级研究计划局(DARPA)开发。1985年完成第一版,1987年成为IEEE标准(IEEE1076),1993年增修为IEEE1164标准并使用至今。1996年又加入电路合成标准程序和规格,成为IEEE1076.3标准。美国
4、国防部规定其为官方ASIC设计语言。 1995年,中国国家技术监督局出版的CAD通用技术规范中,推荐VHDL为我国硬件描述语言的国家标准。 3.Verilog HDL: 以C语言为基础,由GDA(Gateway Design Automation)公司的Phil Moorby创建于1983年。1989年CADENCE公司收购了GDA公司,拥有了Verilog HDL的独家专利。于1990年正式发表了Verilog HDL,并成立OVI(Open Verilog International)组织推进其发展。1995年CADENCE公司放弃了Verilog HDL专利,使之成为IEEE标准(IEE
5、E1364)。 4.关于VHDL与Verilog HDL的比较: 不存在优劣之分。相同电路用这两种硬件描述语言分别编码,长度也大体相同。现在常用的各种仿真/综合工具均为二者通用。在日本,VHDL用户略多于Verilog HDL,例如:NEC,日立,福田电子,丸文等公司通常习惯使用VHDL;而松下,CASIO等公司习惯使用Verilog HDL。和习惯有关,一个公司通常习惯于使用其中一种。VHDL与其他HDL比较l VHDL“告诉我你想要电路做什么,我给你提供能实现这个功能的硬件电路”l VerilogHDL和VHDL类似l ABEL、AHDL“告诉我你想要什么样的电路,我给你提供这样的电路”5
6、.国内硬件描述语言书籍的常见问题: 往往片面夸大某一种硬件描述语言的长处。 书中的例子尽管都声称通过了仿真合成验证,但仍常见一些语法错误,合成时会出现“错误”或“警告”。请大家不要过分相信教科书上的语法。 脱离实际应用,仅仅介绍最基本的概念和语法规定,虽有较复杂的例子但却少有解释,难于理解。对实际应用中至关重要的编码技巧和避免出错的注意事项,却往往只字不提。因此,新手入门往往要走很长的弯路。6.硬件描述语言的近期发展: 目前及今后若干年内,VHDL和Verilog HDL仍将是硬件描述语言主角。因为它们已经经过无数应用实例的验证,能够满足各类复杂的逻辑功能要求,各种配套工具软件也非常成熟完善。
7、至于Spec C, System C等新型硬件描述语言,将来成为主流还是被淘汰出局,则与语言本身以及各种配套工具软件是否功能更加强大,使用更加简便,更易于学习掌握,以及与人们已经习惯的语言及工具是否有相似性和延续性等因素有关。 三电子设计自动化(EDA)技术的发展: 上世纪80年代,EDA还只能代替手工,画原理图和流程图,设计生产机器可以读懂的印刷电路板图。到了90年代,出现了Altera公司的Maxplus 等CPLD/FPGA工具软件,人们可以用Maxplus 在PC机上设计由众多标准逻辑芯片(如74系列等)组成的电路原理图,然后再用它直接进行波形图仿真测试,观察验证电路在各种输入情况下的
8、输出信号波形,及内部各点波形,并得到各点的延时信息,和电路“正常”,“警告”,“出错”等信息。 最后,将经过Maxplus 将验证无误的电路写入CPLD/FPGA芯片,放入电路板中进行整机测试,如发现问题,修改原理图,波形仿真后重写CPLD/FPGA ,重新进行整机测试,直至完全正确为止。整机中既可以使用CPLD/FPGA也可以制成ASIC芯片(视批量大小而定)。Maxplus 的出现,使电子设计自动化(EDA)技术大大向前推进了一步。 Maxplus 不仅支持原理图输入,而且还支持VHDL、 Verilog HDL、以及AHDL等文本输入方式,是目前应用比较广泛的可编程逻辑器件开发软件。Qu
9、artus 是ALTERA公司推出的另一个可编程逻辑器件开发软件,它支持原理图输入、VHDL、 Verilog HDL 和AHDL输入方式。到了90年代后期,由于硬件描述语言的完善,尤其是相应的编译,测试,合成,布线等电子设计自动化(EDA)工具软件的发展与完善,硬件描述语言(HDL)终于进入了成熟实用阶段。这无疑是(数字)电路设计史上最具革命性的飞跃。自此,人们实现了用简明易懂的高级编程语言设计复杂硬件电路的梦想。只要具备一定的硬件专门知识,就能随心所欲地设计出功能十分强大的专用智能电路,实现了“以软代硬”。 四、VHDL编程实例:以真值表为依据,采用数据流描述方式编写的BCD七段显示译码器
10、的VHDL源代码如下所示,其按总线显示方式的仿真波形如图所示。 五、硬件描述语言(VHDL)的突出优点: 1.打破了IC设计者与使用者的界线,使原先的IC使用者在掌握了VHDL之后,都变成了IC设计者,都能够随心所欲地设计出具备多个CPU功能的复杂专用芯片。 2. VHDL及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。 3.极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争力。 4. 大大缩小电路板面积和整机体积,提高产品可靠性,增强产品功能,实现技术保密。 5. 可实现电路设计的模块化和积木式多级组合。各模块均可在今后被重复再利用(调用
11、)。 6 . 完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。这一点对目前我国尤为重要。六、可编程器件的发展: PROM (EPROM, EEPROM) PAL/GAL芯片(几十个门/20Pin)FPGA/CPLD(八十年代中期,Xilinx和Altera公司推出几十几千个通用IC规模的FPGA芯片。目前已发展到数千万门/3000Pin/IC的规模)。 系统芯片SOC (集模拟信号采集/转换/存储/处理/接口/各种 IP电路于一体,包含模拟/数字信号处理电路,存储器,CPU等。) 注:IP(也称“核”core) 是指由硬件描述语言(HDL)设计,经过实践证明
12、正确无误的“通用”硬件功能模块。用户可以直接使用而不需进行设计/验证。 例如:SDRAM(DDR)读写控制电路;以太网数据收发电路等等。 七、HDL/ASIC/EDA的现存问题与未来发展方向: 1.硬件描述语言(HDL) 的现存问题与未来发展方向: VHDL或Verilog HDL目前尚无法用于描述模拟电路,跟不上系统芯片SOC(集模/数于一身)的发展要求。人们正期待一种模/数电路兼容的硬件描述语言(HDL) 诞生。 2. ASIC的现存问题与未来发展方向: (1) 简化工艺,降低成本:如今,随着ASIC制造工艺朝着小于0.1um的方向快速推进(NEC已宣称达到了0.1um, SONY和东芝也
13、在共同投入15亿美圆争取尽早实现0.07um0.1um的目标),ASIC的集成度和制造成本都在直线上升。而实际应用的ASIC中,78%的ASIC的门数不超过100万门,无须采用7级到8级金属工艺,3到4级足矣。 (2)缩短ASIC设计周期: ASIC设计周期一般为112个月,制造周期亦需大致相同的时间。HDL编码一般需1/41/3时间,其余为合成/仿真(局部/总体/实机)/后仿真的时间。随着产品市场竞争的加剧,更新换代速度加快,缩短设计制造周期的呼声日益增强;而另一方面,ASIC的功能和复杂程度也在日益提高,又使得缩短周期变得更加困难。现在,很多著名公司都已投入巨资,致力于这方面的研究开发工作
14、,力求明显缩短ASIC设计及制作周期。为缩短设计周期,设计时尽可能多地采用IP模块也是趋势之一。目前,NEC,富士通,IBM,TI等公司都已有很丰富的IP库,并且可以将其直接集成到用户ASIC芯片中去。不过,一般国内用户却未必能承受得起在这些公司购买IP和定制ASIC的费用。 另外,有关IP的知识产权保护以及国际标准化等问题也尚在探讨之中,阻碍了IP应用普及的步伐。 3.EDA的现存主要问题: 主要是无法对模拟/数字/各种IP混合的ASIC(SOC)进行设计,编译,仿真,合成。另外,需要更加简单高效的设计/编译/仿真/合成工具,以缩短研发周期。第一章 VHDL基本结构1.1 实体1.2 结构体
15、1.3 块、子程序和进程 1.4 库和程序包 1.5 配置 一个完整的VHDL程序,或者说设计实体,通常要求最低能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。在VHDL程序中,通常包含实体(ENTITY)、结构体(ARCHITECTURE)、配置(CONFIGURATION)、包集合(PACKAGE)和库(LIBRARY)5个部分。其中实体和结构体这两个基本结构是必需的,他们可以构成最简单的VHDL程序。 1.1 实体 设计实体是VHDL语言设计的基本单元,简单的可以是一个与门,复杂的可以是一个微处理器或一个数字系统,其结构基本是一致的,都是由实体说明
16、和结构体两部分组成。实体说明是对这个设计实体与外部电路进行接口的描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体对外的一个通信界面。结构体用于描述此设计实体的逻辑结构和逻辑功能。 实体语句结构如下:ENTITY 实体名 IS GENERIC(类属表); PORT(端口表);END ENTITY 实体名; 例:ENTITY or2 IS PORT(a,b:IN STD_LOGIC; C: OUT STD_LOGIC); END ENTITY or2; 注意:实体应以语句“ENTITY 实体名 IS”开始,语句“END ENTITY 实体名;”结束。 在层次化系统设计中,实体说明是整个模
17、块或整个系统的输入输出(I/O)接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(I/O)。1.1.1类属参量(GENERIC)类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:GENERIC CONSTANT 名字表:IN 子类型标识 := 静态表达式, 类属参量是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。它和常数不同,常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。因此设计者可以从外面通过类属参量的重新设定而容易的改变一个设计实体或一个元件的内部电路结构和规模。例:GENERIC (trise,t
18、fall:TIME:=1ns; Addrwidth:INTEGER:=16);PORT(a0, a1 : IN STD_LOGIC; Add_bus:OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0); 这里类属参量中参数trise为上升沿宽度,tfall为下降沿宽度,用于仿真模块的设计;定义地址总线的宽度为Addrwidth位,类属值Addrwidth的改变将使结构体中所有相关的总线定义同时改变,由此使整个设计实体的硬件结构发生变化。 1.1.2 端口说明(PORT) 端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当
19、电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。其一般书写格式为:PORT (端口名 :端口模式 数据类型; 端口名 :端口模式 数据类型; ); 其中端口名是设计者为实体的每一个对外通道所取的名字,通常为英文字母加数字,名字的定义有一定的惯例,如clk 表示时钟,D开头的端口名表示数据,A开头的端口名表示地址。端口模式是指这些通道上的数据流动的方式,如输入或输出等。 端口模式有以下几种类型: 1输入(IN) 允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。 2输出(OUT
20、) 输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。 3双向模式(INOUT)双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。 4缓冲(BUFFER) 缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。 端口模式可用图下说明,图中方框代表一个设计实体或模块。 在VHDL设计中
21、,通常将输入信号端口指定为输入模式,输出信号端口指定为输出模式,而双向数据通信信号,如计算机PCI总线的地址/数据复用总线,DMA控制器数据总线等纯双向的信号采用双向端口模式。从端口的名称、模式就能一目了然地指导信号的用途、性质、来源和去向。 1.2 结构体 结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。
22、结构体是对实体功能的具体描述,因此它一定要跟在实体的后面 。结构体一般由两大部分组成:1对数据类型、常数、信号、子程序和元件等因素进行说明的部分;2描述实体的逻辑行为、以各种不同的描述风格表达的功能描述语句,包括各种顺序语句和并行语句。结构体的语句格式为: ARCHITECTURE 结构体名 OF 实体名 IS 定义语句 BEGIN 功能描述语句 END 结构体名; 1.2.1 结构体名 结构体名由设计者自行定义,OF后面的实体名指明了该结构体所对应的是哪个实体。有些设计实体有多个结构体,这些结构体的结构体名不可相同,通常用dataflow(数据流)、behavior(行为)、structur
23、al(结构)命名。这3个名称体现了3种不同结构体的描述方式,使得阅读VHDL语言程序时,能直接了解设计者采用的描述方式。 1.2.2 结构体信号定义语句 结构体信号定义语句必须放在关键词ARCHITECTURE和BEGIN之间,用于对结构体内部将要使用的信号、常数、数据类型、元件、函数和过程加以说明。需要注意的是实体说明中定义的信号是外部信号,而结构体定义的信号为该结构体的内部信号,它只能用于这个结构体中。 结构体中的信号定义和端口说明一样,应有信号名称和数据类型定义。因为它是内部连接用的信号,因此不需要方向说明。 例:结构体的信号定义实例。ARCHITECTURE rtl OF muj IS
24、 -rtl:结构体名,muj实体名 SIGNAL s1:BIT -结构体信号定义语句 SIGNAL s2,s3:STD_LOGIC_VECTOR (0 TO 3); BEGIN . -功能描述语句END rtl; 1.2.3 结构体功能描述语句 结构体功能描述语句位于BEGIN和END之间,具体地描述了构造体的行为及其连接关系。结构体的功能描述语句可以含有5种不同类型的并行语句,如图所示。每一语句结构内部可以使用并行语句,也可以是顺序语句。 结构体构造图: 图中5种功能描述语句的基本组成和功能分别是:1块语句(BLOCK)是由一系列并行语句构成的组合体,它的功能是将结构体中的并行语句组成一个或
25、多个子模块。2进程语句定义顺序语句模块,用以将从外部获得的信号值或内部运算数据向其他的信号进行赋值。3信号赋值语句将设计实体内的处理结果向定义的信号或界面端口进行赋值。4子程序调用语句可以调用进程或参数,并将获得的结果赋值于信号。5元件例化语句对其他的设计实体做元件调用说明,并将此元件的端口与其他元件、信号或高层实体的界面端口进行连接。 例: 2选1数据选择器ENTTITY mux2 ISPORT (d0,d1:IN BIT; sel:IN BIT; s:OUT BIT);END mux2;ARCHITECTURE dataflow OF mux2 IS SIGNAL sig:BIT; -信号
26、定义语句(内部信号,无方向)BEGINSig = (d0 AND sel) OR (NOT sel AND d1);S=sig; -功能描述语句END dataflow; 1.3 块、子程序和进程 1.3.1块语句(BLOCK) 在较大规模的电子系统设计中,传统的硬件电路设计通常包括一张系统总电路原理图和若干张子原理图。在VHDL程序设计中,结构体是由多个BLOCK块构成的,如果将结构体比做总电路原理图,那么,每个BLOCK块则相当于一张子原理图。 BLOCK块语句的结构: 块标号:BLOCK 接口说明 类属说明 BEGIN 并行块语句 END BLOCK(块标号); 例: B1: BLOCK
27、 SIGNAL s1:BIT; BEGIN s1 = a AND b; B2: BLOCK SIGNAL s2:BIT; BEGIN s2= c AND d; B3: BLOCK BEGIN Z = s2; END BLOCK B3; END BLOCK B2; y y y y y y b) THEN tmp := a; ELSE tmp := b; END IF; RETURN tmp; END; END bpac;1.4 库和程序包 库和程序包用来描述和保留元件、类型说明函数、子程序等,以便在其它设计中可以随时引用这些信息,提高设计效率。 1.4.1 库(LIBRARY) 库是经编译后的数
28、据的集合,它存放包集合定义、实体定义、结构定义和配置定义。 库语句的格式为: LIBRARY 库名; USE语句指明库中的程序包。一旦说明了库和程序包,整个设计实体都可以进入访问或调用,但其作用范围仅限于所说明的设计实体。USE语句的使用将使所说明的程序包对本设计实体部分或全部开放。 USE语句有以下两种常用的格式:USE 库名.程序包名.项目名;USE 库名.程序包名.ALL; 第一种语句格式的作用是向本设计实体开放指定库中的特定程序包内的所选定的项目。第二种语句格式的作用是向本设计实体开放指定库中的特定程序包内的所有内容。 例如: LIBRARY IEEE; USE IEEE.STD_LO
29、GIC_1164.ALL; USE IEEE.STD_LOGIC_1164.STD_ULOGIC; 此例中,第一个USE语句表明打开IEEE库中的STD_LOGIC_1164程序包,并使程序包中的所有公共资源对本语句后面的VHDL设计实体程序全部开放,关键词ALL代表程序包中的所有资源。第二个USE语句开放了程序包STD_LOGIC_1164中的STD_ULOGIC数据类型。 STD_ULOGIC :可枚举数据类型注意:库说明语句的作用范围从一个实体说明开始到它所属的结构体、配置为止,当一个源程序中出现两个以上实体时,两条作为使用库的说明语句应在每个设计实体说明语句前重复书写。 例:LIBRA
30、RY IEEE; -库使用说明USE IEEE.STD_LOGIC_1164.ALL;ENTITY and IS END and;ARCHITECTURE dataflow OF and IS END dataflow;CONFIGURATION c1 OF and IS - CONFIGURATION(配置) AND c1;LIBRARY IEEE; -库使用说明 USE IEEE.STD_LOGIC_1164.ALL;ENTITY or ISCONFIGURATION c2 OF and IS AND c2;1.4.2 程序包程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、子程序
31、说明、属性说明和元件说明等部分。设计者使用时只要用USE子句进行说明即可。 程序包由两部分组成:程序包首和程序包体。 程序包的一般书写格式如下:PACKAGE 程序包名 ISEND PACKAGE 程序包名; -程序包首PACKAGE BODY 程序包名 IS -程序包体 END PACKAGE BODY 程序包名; 例:USE STD.STD_LOGIC.ALL;PACKAGE math IS TYPE tw16 IS ARRAY(0 TO 15)OF T_WLOGIC; FUNCTION add (a,b:IN tw16)RETURN tw16; FUNCTION sub (a,b:IN
32、tw16)RETURN tw16;END math;PACKAGE BODY math ISFUNCTION vect_to_int(s:tw16); RETURN INTEGER IS VARIBLE result:INTEGER :=0; BEGIN FOR i IN 0 TO 7 LOOP result := result*2; IF s(i)=1THEN result := result+1 END IF; END LOOP;RETURN result;END vect_to_int;FUNCTION int_to_tw16(s:INTEGER); RETURN tw16 IS VARIBLE result: tw16; VARIBLE digit: INTEGER:=2*15; VARIBLE local: INTEGER; BEGIN local := s; FOR i IN 15 DOWNTO 0 LOOP IF local/ digit=1 THEN Local := local- di