X=M+
=
(式1-2)
其中,N1和N2均为整数。
当N1和N2取不同的正整数时,从
可以得到任意一个小数,就可以从理论上实现任意小数分频比的分频。
由于0
,(ai=0,1),所以从工程的角度可以进一步构造出下列关系:
=
(式1-3)
式1-3有明确的物理意义,它的右边实际上是个多位累加器。
例如,要把13MHz的时钟信号分频为8MHz的时钟信号,则
=
=0.625,a1=1,a2=0,a3=1。
显然,当分频比X为无限小数时,例如把13MHz的时钟信号分频为11MHz的时钟信号时,x=1.18181818…,此时,尽管在理论上可以设计这样的多位累加器,但在实际电路中却是不可实现的。
因此,实际所设计的小数分频器的分频比,有时候与实际期望得到的分频比存在一个微小的偏差;当分频器长时间工作,就会导致累计误差。
利用脉冲删除电路,有规律地删除时钟源中的一些脉冲,从而实现平均意义上的小数分频。
在硬件电路的设计过程中,利用脉冲删除电路,就不会出现上述竞争冒险和毛刺的问题,而且可以很容易地用硬件实现任意小数分频。
吞脉冲原理:
吞脉冲电路通过小数分频器实现吞食脉冲的功能。
在脉冲传输信道上增加一个脉冲删除控制器,脉冲删除器在适当的时候吞掉一个脉冲,脉冲删除时机的选择受脉冲删除控制器的控制。
图1.1给出了脉冲删除电路原理。
该电路主要由三部分组成:
n倍频计数累加器、余数发生器和脉冲删除控制器。
图1.1脉冲删除原理
电路工作原理:
首先设置n倍频计数累加器的模m,在输入基频fr的作用下,每来一个基频脉冲fr,n倍频计数累加器就加n。
当计数值大于计数器的模m时,就产生一个删除脉冲,并传送给脉冲删除控制器。
从而实现了脉冲删除。
设有一个5MHz时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。
采用可变成逻辑器件实现分频系数为2.5的分频器,可采用以下方法:
设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲,就可以得到分频系数为2.5的小数分频器。
采用类似的方法,可以设计分频系数为任意半整数的分频器。
小数分频的基本原理是:
采用脉冲吞吐计数,设计两个不同的分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。
例如,设计一个分频系数为8.7的分频器,可以将分频器设计成3次8分频,7次9分频,这样总的分频值为:
从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动大。
当分频系数为
(N为整数)时,可控制扣除脉冲的时间,使输入为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。
3本课题实现方法
本课题以CPLD/FPGA作为可编程ASIC器件。
其电路可由一个模N计数器、二分频器和一个异或门组成。
如图1.2所示。
最后结果可通过VHDL程序,在MAX+PLUSII环境中进行仿真。
第2章开发环境
1电子系统设计与ASIC技术
随着21世纪的到来,人类正跨入信息时代。
从计算机到移动电话,从家用无了使用的VCD、HDTV、多媒体电脑到军用雷达、医用CT仪器等设备,无不由各种各样的电子系统组成。
在这些电子系统中,数字化技术的应用比比皆是。
由于数字技术在处理和传输信息方面的各种优点,数字技术与数字集成电路的使用已经成为后成现代电子系统的重要标志。
1.1电子系统的设计方法
现代电子系统一般由模拟子系统、数字子系统和微处理器子系统三大部分组成。
从概念上讲,凡是利用数字技术处理和传输信息的电子系统都可以称为数字系统。
像其他电子系统一样,数字系统以往是采用传统的搭积木式的方法进行设计,即由器件搭成电路板,由电路板搭成电子系统。
数字系统最初的“积木块”是木顶功能的标准集成电路。
用户只要根据需要选择合适的器件,并按照器件推荐的电路搭成系统。
在设计时,设计者几乎没有灵活性可言,搭成的电子系统所需的芯片种类多且数目大。
随着半导体技术、集成技术和计算机技术的发展,电子系统的设计方法和设计手段发生了很大的变化。
特别是进入到20世纪90年代以后,EDA技术的发展和普及给电子系统的设计带来了革命性的变化,并已渗透到电子系统设计的各个领域。
在半导体技术方面,可编程技术被广泛地应用到器件的设计上,给数字系统的设计带来了很大的灵活性。
传统的数字系统设计只能对电路板进行设计,通过设计电路板来实现系统功能。
利用EDA工具,采用可编程器件,通过设计芯片来实现系统功能,这种方法称为基于芯片的设计方法。
新的设计方法能够由设计者定义器件的内部逻辑和管脚,将原来由电路板设计完成的大部分工作放在芯片的设计中进行。
这样不仅可以通过芯片设计实现多种数字逻辑系统功能,而且由于管脚定义的灵活性,大大减轻了电路图设计和电路板设计的工作量和难度,从而有效地增强了设计的灵活性,提高了工作效率。
同时,基于芯片的设计可以减少芯片的数量,缩小系统体积,降低能源消耗,提高系统的性能和可靠性。
可编程逻辑器件和EDA技术给今天的硬件系统设计提供了强有力的工具,使得电子系统的设计方法发生了质的变化。
传统的“固定功能集成块+连续”的设计方法正逐步地退出历史舞台,而基于芯片的设计方法正在成为现代电子系统设计的主流。
现在,只要拥有一台计算机、一套相应的EDA软件和空白的可编程逻辑器件芯片,在实验室就可以完成数字系统的设计和生产。
可以说,当今的数字系统设计已经离不开可编程逻辑器件和EDA设计工具。
图2.1所示为电子系统的传统设计方法和基于芯片的设计方法。
“自顶向下”与“自底向上”设计方法:
近10年来,电子系统的设计方法发生很大的变化。
过去,电子产品设计的基本思路一直是先选用标准通用集成电路芯片,再由这些芯片和其他元件自下而上地构成电路、子系统和系统。
这些设计出的电子系统所用元件的种类和数量均较多。
体积与功耗大,可靠性差。
随着集成电路技术的不断进步,现在人们可以把数以亿计的进体管,几万门、几十万门、甚至几百万门的电路集成在一块芯片上。
半导体集成电路已由早期的单元集成、部件电路集成发展到整机电路集成和系统电路集成。
电子系统的设计方法也由过去的那种集成电路厂家提供通用芯片,整机系统用户采用这些芯片组成电子系统的“自底向上”设计方法改变为一种新的“自顶向下”的设计方法。
在这种新的设计方法中,由整机系统用户对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路ASIC来实现,且这些专用集成电路是由系统和电路设计师亲自参与设计的,直至完成电路到芯片版图的设计,再交由IC工厂投片加工,或者是用可编程ASIC现场编程实现。
在“自顶向下”的设计中,首先需要进行行为设计,确定该电子系统或VLSI芯片的功能、性能及允许的芯片面积和成本等。
接着进行结构设计,根据该电子系统或芯片的特点,将其分解为接口清晰、互相关系明确、尽可能简单的子系统,得到一个总体结构。
这个结构可能包括算术运算单元、控制单元、数据通道、各种算法状态机等。
下一步是把结构转换成逻辑图,即进行逻辑设计。
在这一步中,希望尽可能采用规则的逻辑结构或采用自己经过考验的逻辑单元或模块。
接着进行电路设计,逻辑图将进一步转换成电路图,在很多情况下,这时需要进行硬件仿真,以最终确定逻辑设计的正确性。
最后是进行版图设计,即将电路图转换成版图。
“自底向上”的设计,一般是在系统划分和分解的基础上先进行单元设计,在单元的精心设计后逐步向上进行功能块设计,然后再进行子系统的设计,最后完成系统的总体设计。
图2.2所示为电子系统的两种不同设计方法的设计步骤。
2EDA技术的基本特征和工具
EDA可以看作是电子CAD的高级阶段。
在现代电子系统设计领域,EDA技术已经成为电子系统设计的重要手段。
无论是设计逻辑芯片还是数字系统,其设计作业的复杂程度都在不断增加,现今仅仅依靠手工进行数字系统设计已经不能满足要求,所有的设计工作都需要在计算机上借助于EDA软件工具进行。
在EDA软件的支持下,设计者只需完成对系统功能的描述,就可以由计算机软件进行处理得到设计结果,修改设计如同修改程序一样方便。
利用EDA设计工具,设计者可以预知设计结果,减少设计的盲目性,极大地提高设计的效率。
2.1EDA技术的范畴
EDA即电子设计自动化。
EDA技术指的是以计算机硬件和系统软件为基本工作平台,继承和借鉴前人在电路和系统、数据库、图形学、图论和拓扑逻辑、计算数学、优化理论等多学科的最新科技成果而研制成的商品化EDA通用支撑软件和应用软件包,旨在帮助电子设计工程师在计算机上完成电路的功能设计、逻辑设计、性能分析、时序测试直至PCB的自动设计等。
与早期的电子CAD软件相比,EDA软件的自动化程度更高,功能更完善,运行速度更快,而且操作界面友好,有良好的数据开放性和互换性,即不同厂商的EDA软件可相互兼容。
因此,EDA技术很快在世界各大公司、企业和科研单位得到了广泛应用,并已成为衡量一个国家电子技术发展水平的重要标志。
EDA技术的范畴应包括电子工程师进行产品开发的全过程,以及电子产品生产的全过程中期望由计算机提供的各种辅助工作。
从一个角度看,EDA技术可粗略分为系统级、电路级和物理实现级三个层次的辅助设计过程;从另一个角度来看,EDA技术应包括电子电路设计的各个领域:
即从低频电路到高频电路、从线形电路到非线形电路、从模拟电路到数字电路、从分立电路到继承电路的全部设计过程。
EDA技术的范畴和功能如图2.3所示。
2.2EDA技术的基本特征
现代EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。
下面介绍与这些基本特征有关的几个新概念。
1.并行工程和“自顶向下”设计方法
根据美国防卫分析研究所的报告中的定义,所谓并行工程是指“一种系统化的、集成化的、并行的产品及相关过程的开发模式。
这一模式使开发者从一开始就要考虑到产品生存周期的诸多方面,包括质量、成本、开发时间及用户的需求,等等。
”
“自顶向下”的设计方法在前面已做了简单的介绍。
这种方法首先从系统级设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。
“Top-down”设计方法有利于在早期发现结构设计中的错误,提高设计的一次成功率,因而在现代EDA系统中被广泛采用。
2.硬件描述语言(HDL)
用硬件描述语言进行电路与系统的设计是当前EDA技术的一个重要特征。
与传统的原理图输入设计方法相比较,硬件描述语言使得设计者在笔尖抽象的层次上描述设计的结构和内部特征。
它的优点是:
语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的服用和继承等。
目前最常用的硬件描述语言有VHDL和Verilog-HDL,它们都已经成为IEEE标准。
3.逻辑综合与优化
逻辑综合功能将高层次的系统行为设计自动翻译成门级逻辑的电子描述,做到了设计与工艺的独立。
优化则是对于上述综合生成的电路网表,根据布尔方程等效的原则,用更小、更快的综合结果代替一些复杂的逻辑电路单元,根据指定的目标库映射成新的网表。
4.开放性和标准化
框架是一种软件平台结构,它为EDA工具提供了操作环境。
框架的关键在于提供与硬件平台无关的图形用户界面以及工具之间的通信、设计数据和设计流程的管理等,此外还应该包括各种与数据库相关的服务项目。
任何一个EDA系统只要建立了一个符合标准的开放式框架结构,就可以接纳其他厂商的EDA工具一起进行设计工作。
这样,框架作为一套使用和配置EDA软件包的规范,就可以实现各种EDA工具间的优化组合,并集成在一个易于管理的统一环境之下,实现资源共享。
近年来,随着硬件描述语言等设计数据格式的逐步标准化,不同设计风格和应用的要求导致各具特色的EDA工具被集成在同一个工作站上,从而使EDA框架标准化。
新的EDA系统不仅能够实现高层次的自动逻辑综合、版图综合和测试码生成,而且可以使各个仿真器对同一个设计进行协同仿真,进一步提高了EDA系统的工作效率和设计的正确性。
5.库的引入
EDA工具之所以能够完成各种自动设计过程,关键是有各类库的支持,如逻辑模拟时模拟库、逻辑综合时的综合库、版图综合时的版图库、测试综合时的测试库等,这些库都是EDA设计公司与半导体生产厂商紧密合作、共同开发的。
2.3EDA的基本工具
集成电路技术的发展不断对EDA技术提出新的要求,促进了EDA技术的发展。
但是总的来说,EDA系统的设计能力一直难以赶上集成电路技术发展的要求。
EDA工具的发展经历了两大阶段:
物理工具阶段和逻辑工具阶段。
现在EDA和系统设计工具正逐步被理解成一个整体的概念—电子系统设计自动化。
物理工具用来完成设计中的实际物理问题,如芯片布局、印刷电路板布线等,另外它还能提供一些设计的电气性能分析,如设计规则检查。
这些工作现在主要由集成电路厂家来完成。
逻辑工具是基于网表、布尔逻辑、传输时序等概念的。
首先由原理图编辑器或硬件描述语言进行设计输入,然后利用EDA系统完成逻辑综合、仿真、优化等过程。
最后生成物理工具可以接受的网表或VHDL、Verilog-HDL的结构化描述。
在过去30多年中,人们开发了大量的计算机辅助设计工具来帮助集成电路的设计,这些设计工具的分类如图2.4所示。
编辑器:
编辑器包括文字编辑器和图形编辑器。
在系统级设计中,文字编辑器用来编辑器硬件系统的自然描述语言,在其他层次用来编辑电路描述语言文本。
在数字系统中的门级、寄存器以及芯片级,所用的描述语言通常为VHDL和Veril-HDL;在模拟电路级年,硬件描述语言通常为SPICE的文本输入。
图形编辑器可用于硬件设计的各个层次。
在版图级,图形编辑器用来编辑表示硅工艺加工过程的几何图形。
在高于版图层次的其他级,图形编辑器用来编辑硬件系统的方法图、原理图等。
典型的原理图输入工具至少包括以下3个组成部分:
(1)基本单元符号库,主要包括基本单元的图形符号和仿真模型。
在实际应用时,硬件设计者除了采用基本单元和标准单元之外,还应该能够使用原理图编辑器建立自己专用的图形符号以及相应的仿真模型,并加到基本单元符号库中,供下次设计时使用。
(2)原理图编辑器的编辑功能。
(3)产生网表的功能。
仿真器:
仿真器又称模拟器,主要用来帮助设计者验证设计的正确性。
在硬件系统设计的各个层次都要用到仿真器。
在数字系统设计中,硬件系统由数字逻辑期间以及它们之间的互连来表示。
仿真器的用途是确定系统的输入/输出关系,所采用的方法是把每一个数字逻辑器件映射为一个或几个进程,把整个系统映射为由进程互连构成的进程网络,这种由进程互连组成的网络就是设计的仿真模型。
检查/分析工具:
在集成电路设计的各个层次都会用到检查/分析工具。
在版图级,必须用设计规则检查工具来保证版图所表示的电路能被可靠地制造出来。
在逻辑门级,检查/分析工具可以用来检查是否有违反扇出规则的连接关系。
时序分析器一般用来检查最坏情形时电路中的最大和最小延时。
优化/综合工具:
优化/综合工具用来把一种硬件描述转换过程通常伴随着设计的某种改进。
在逻辑门级,可以用逻辑最小化来对布尔表达式进行简化。
在寄存器级,优化工具可以用来确定控制序列和数据路径的最优组合。
各个层次的综合工具可以将硬件的高层次描述转换为低层次描述,也可以将硬件的行为描述转换为结构描述。
3VHDL语言简介
3.1概述
硬件描述语言的发展至少已有几十年的历史,并已成功地应用到系统的仿真、验证和设计、综合等方面。
目前常用的硬件描述语言有AHDL、ABEL、VHDL、VerilogHDL等等。
20世纪80年代后期,美国国防部开发的VHDL语言是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。
VHDL语言覆盖面广,描述能力强,能支持硬件的设计、验证、综合和测试,是一种多层次的硬件描述语言。
其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述。
这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。
运用VHDL语言还可以描述与工艺有关的信息,工艺参数可以通过设计文件语言参数来调整,不会因工艺变化与发展而使VHDL设计过时。
因此,VHDL设计的生命周期与其他设计方法相比是最长的。
3.2VHDL语言的基本结构
实体,构造体、配置、包集合和库是构成一个完整的VHDL语言程序所必备的五个部分。
对VHDL语言来讲,字母的大小写是不加区分的。
VHDL语言基本单元及其构成:
VHDL语言描述的对象称为实体。
实体代表什么几乎没有限制,可以将任意复杂的系统抽象成一个试题,也可以将一块电路板、一个芯片、一个电路单元甚至一个电路看作一个实体。
如果设计时对系统自顶向下分层、划分模板,那么,各层的设计模块都可以看作为实体。
顶层的系统模块是顶级实体,低层次的实际模块是低级实体。
描述时,高级实体可将低级实体当作元件来调用。
至于该元件内部的具体结构或功能可在低一级实体的描述中再详细给出。
在实际的硬件电路设计中,一个实体既可以是简单的门级电路,也可以是复杂的系统,但无论是什么电路,实体的结构是相同的。
实体由两部分组成:
实体说明和构造体。
A.实体说明(Entity)
实体说明的书写格式如下所示;
ENTITY实体名IS
[GENERIC(类属参数说明);]
[PORT(端口说明);]
END实体名;
在实体说明中应给出实体名,并描述实体的外部接口情况。
此时,实体被视为“黑盒”,不管其内部结构功能如何,只给出它的输入/输出接口信号。
例如,一个3位计数器的实体说明可以写为:
[例3-1]
ENTITYCnt3bIS
GENERIC(m:
TIME:
=5ns)
PORT(clock,enable:
INSTD_LOGIC;
qa:
OUTINTEGERRANGE0TO7);
ENDCnt3b;
每个基本设计单元的实体说明必须以“ENTITY实体IS”开始至“END实体名”结束。
例3-1中,Cnt3b是实体名,GENERIC后为类属参数说明,PORT后为端口说明。
1.类属参数说明语言(GENERIC)
类属参数说明语句必须放在端口说明语句之前,用以设定实体或元件的内部电话结构和规模。
其书写格式如下:
GENERIC(常数名:
数据类型:
=设定值;
.
.
.
常数名:
数据类型:
=设定值);
例3-1的程序中GENERIC(m:
TIME:
=5ns)指定了构造体内m值为5ns.
2.端口说明(PORT)
在电路图上,端口对应于元件符号的外部引脚。
端口说明语句是对基本设计实体(单元)与外部接口的描述,也可以说是对引脚信号的名称、数据类型和输入输出方向的描述。
语句的一般格式如下:
PORT(端口信号名,{端口信号名}:
端口模式数据类型;
(1)端口信号名是赋给每个外部引脚的名称,通常用一个或几个英文字,或用英文字母加数字命名之。
各端口信号名在实体中必须是惟一的,不能重复。
(2)端口模式用来说明信号的方向,详细的端口方向说明见表3-1。
需要指出的是,BUFFER是INOUT的子集,但作输入用时,信号不是由外部驱动,而是从输出反馈得到。
方向定义
含义
IN
输入
OUT
输出(构造体内不能再使用)
INOUT
双向(可以输入,也可以输出)
BUFFER
输出(构造体内可再使用),可以读或写
LINKAGE
不指定方向,无论哪一个方向都可以连接
表3.1
(3)数据类型则是端口信号的取值类型,常见的有以下几种:
BIT位类型,取值0、1,由STANDARD程序包定义;
BIT_VECTOR位向量类型,是BIT的组合;
STD_LOGIC工业标准的逻辑类型,取值0、1、X、Z,由STD_LOGIC_1164程序包定义;
INTEGER整数类型,可用作循环的指针或常数,通常不用作I/O信号;
STD_LOGIC_VECTOR工业标准的逻辑向量类型,是STD_LOGIC的组合;
BOOLEAN布尔类型,取值FALSE、TRUE。
在例3—1中,3位计数器作为实体,其端口有2个输入信号(clock, enable)和1个输出信号(qa)。
输入信号和输出信号的类型不同。
B.构造体(Architectre)
实体的名称和外部端口已经定义,下一步就是打开“黑盒”,解释实体内部的具体细节,这就是构造体所要描述的内容。
构造体是一个实体的组成部分,是对实体功能的具体描述。
构造体主要是描述实体的硬件结构、元件之间的互连关系、实体所完成的逻辑功能以及数据的传输变换等方面的内容。
具体编写构造体时,可以从其中的某一方面来描述。
构造体对其实体的输入/输出关系描述有三种方式:
行为描述方式、数据流描述方式和结构描述方式。
最常用的是结构描述方式。
一个构造体的书写格式如下:
ARCHITECTURE构造体名 OF实体名 IS
[定义语句] 内部信号,常数,数据类型,函数等的定义;
BEGIN
[并行处理语句]
END构造体名;
一个实体中可以具有一个构造体,也可以具有几个构造体。
一个实体内部若有几个构造体,则构造体名不能重复。
构造体中的定义语句位于ARCHITECTURE和BRGIN之间,用于对构造体内部所使用的信号(SIGNAL)、常数(CONSTANT)、数据类型、元件(COMPONENT)和过程(PROCEDURE)进行定义。
例如,一个RS触发器的构造体描述可以写成:
[例3—2]
ARCHITECTURErs_behavOFrsffIS
BEGIN
q<=NOT(qbANDresrt);
ENDrs_behav;
在该程序的构造体中所使用的是行为描述方式。
构造体描述以关键字ARCHITECTURE开头