基于FPGA的小数分频器设计_第1页
基于FPGA的小数分频器设计_第2页
基于FPGA的小数分频器设计_第3页
基于FPGA的小数分频器设计_第4页
基于FPGA的小数分频器设计_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

1、第1章 本课题内容1 课题目的频率合成技术是现代通讯系统的重要组成局部,是对一个高精度和高稳定度的基准频率进行加、减、乘、除四那么运算,产生具有同样稳定度和基准度的频率。分频器是数字逻辑电路设计中经常使用的一个根本电路。通常,整数分频可以很容易地用计数器或状态机来实现。但在某些场合下,时钟源与所需要的频率并不成整数关系,此时便需要采用小数分频器进行分频。一般来说,小数分频电路可以分为半整数分频电路和非半整数分频电路两类。对于小数分频的FPGA设计,目前广泛采用的方法是双模前置小数分频,以及一种由双模前置小数分频改良而得到的小数分频用一个半整数分频器和一个整数分频器代替双模前置小数分频中的两个整

2、数分频器。虽然这两种方案输出时钟的占空比误差和抖动性能方面有所差异,但其工作原理却是一致的。双模前置小数分频器在理论上可以实现任意小数分频。但在实际的电路设计中,不可能真正实现任意小数分频。小数分频器的精度受控制计数器的影响,而控制计数器的设计会受硬件资源的限制,尽管FPGA有相当丰富的硬件资源。另外,基于FPGA实现的双模前置小数分频器在两个整数分频时钟之间的切换点上,有时候会出现毛刺,而时钟是不应该有毛刺存在的。此时,就要结合脉冲删除技术,设计出一种可以进行任意小数分频且不会出现毛刺的小数分频方案,并通过编程实现。本文利用VHDL硬件描述语言的设计方式,通过MAXPLUS II开发平台,使

3、用Altera公司的FPGA器件,设计并实现了一种不同占空比的任意小数分频器。2 小数分频的根本原理假设时钟源的频率为f0 ,期望得到的频率为f1 ,那么其分频比X为: X= 式1-1 其中,X1。假设MXM+1,M为整数,那么有X=M+= 式1-2 其中,N1和N2均为整数。当N1和N2取不同的正整数时,从可以得到任意一个小数,就可以从理论上实现任意小数分频比的分频。由于0,ai =0,1,所以从工程的角度可以进一步构造出以下关系: = 式1-3 式1-3有明确的物理意义,它的右边实际上是个多位累加器。例如,要把13MHz的时钟信号分频为8MHz的时钟信号,那么=0.625,a1=1,a2=

4、0,a3,此时,尽管在理论上可以设计这样的多位累加器,但在实际电路中却是不可实现的。因此,实际所设计的小数分频器的分频比,有时候与实际期望得到的分频比存在一个微小的偏差;当分频器长时间工作,就会导致累计误差。利用脉冲删除电路,有规律地删除时钟源中的一些脉冲,从而实现平均意义上的小数分频。在硬件电路的设计过程中,利用脉冲删除电路,就不会出现上述竞争冒险和毛刺的问题,而且可以很容易地用硬件实现任意小数分频。吞脉冲原理:吞脉冲电路通过小数分频器实现吞食脉冲的功能。在脉冲传输信道上增加一个脉冲删除控制器,脉冲删除器在适当的时候吞掉一个脉冲,脉冲删除时机的选择受脉冲删除控制器的控制。图给出了脉冲删除电路

5、原理。该电路主要由三局部组成:n倍频计数累加器、余数发生器和脉冲删除控制器。输出脉冲溢出脉冲n倍计数累加器余数发生器脉冲删除控制器步进预置基频fr 图 脉 冲 删 除 原 理电路工作原理:首先设置n倍频计数累加器的模m,在输入基频fr的作用下,每来一个基频脉冲fr ,n倍频计数累加器就加n。当计数值大于计数器的模m时,就产生一个删除脉冲,并传送给脉冲删除控制器。从而实现了脉冲删除。设有一个5MHz时钟源,但电路中需要产生一个2MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。采用可变成逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电

6、路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲,就可以得到分频系数为2.5的小数分频器。采用类似的方法,可以设计分频系数为任意半整数的分频器。小数分频的根本原理是:采用脉冲吞吐计数,设计两个不同的分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。例如,设计一个分频系数为8.7的分频器,可以将分频器设计成3次8分频,7次9分频,这样总的分频值为: 从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动大。当分频系数为N为整数时,可控制扣除脉冲的时间,使输入为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。3 本课

7、题实现方法本课题以CPLD/FPGA作为可编程ASIC器件。其电路可由一个模N计数器、二分频器和一个异或门组成。如下图。异或门模N计数器2分频器图1.2 通用半整数分频器电路组成最后结果可通过VHDL程序,在MAX+PLUS II环境中进行仿真。第2章 开发环境1 电子系统设计与ASIC技术随着21世纪的到来,人类正跨入信息时代。从计算机到移动 ,从家用无了使用的VCD、HDTV、多媒体电脑到军用雷达、医用CT仪器等设备,无不由各种各样的电子系统组成。在这些电子系统中,数字化技术的应用比比皆是。由于数字技术在处理和传输信息方面的各种优点,数字技术与数字集成电路的使用已经成为后成现代电子系统的重

8、要标志。电子系统的设计方法现代电子系统一般由模拟子系统、数字子系统和微处理器子系统三大局部组成。从概念上讲,但凡利用数字技术处理和传输信息的电子系统都可以称为数字系统。像其他电子系统一样,数字系统以往是采用传统的搭积木式的方法进行设计,即由器件搭成电路板,由电路板搭成电子系统。数字系统最初的“积木块是木顶功能的标准集成电路。用户只要根据需要选择适宜的器件,并按照器件推荐的电路搭成系统。在设计时,设计者几乎没有灵活性可言,搭成的电子系统所需的芯片种类多且数目大。随着半导体技术、集成技术和计算机技术的开展,电子系统的设计方法和设计手段发生了很大的变化。特别是进入到20世纪90年代以后,EDA技术的

9、开展和普及给电子系统的设计带来了革命性的变化,并已渗透到电子系统设计的各个领域。在半导体技术方面,可编程技术被广泛地应用到器件的设计上,给数字系统的设计带来了很大的灵活性。传统的数字系统设计只能对电路板进行设计,通过设计电路板来实现系统功能。利用EDA工具,采用可编程器件,通过设计芯片来实现系统功能,这种方法称为基于芯片的设计方法。新的设计方法能够由设计者定义器件的内部逻辑和管脚,将原来由电路板设计完成的大局部工作放在芯片的设计中进行。这样不仅可以通过芯片设计实现多种数字逻辑系统功能,而且由于管脚定义的灵活性,大大减轻了电路图设计和电路板设计的工作量和难度,从而有效地增强了设计的灵活性,提高了

10、工作效率。同时,基于芯片的设计可以减少芯片的数量,缩小系统体积,降低能源消耗,提高系统的性能和可靠性。可编程逻辑器件和EDA技术给今天的硬件系统设计提供了强有力的工具,使得电子系统的设计方法发生了质的变化。传统的“固定功能集成块+连续的设计方法正逐步地退出历史舞台,而基于芯片的设计方法正在成为现代电子系统设计的主流。现在,只要拥有一台计算机、一套相应的EDA软件和空白的可编程逻辑器件芯片,在实验室就可以完成数字系统的设计和生产。可以说,当今的数字系统设计已经离不开可编程逻辑器件和EDA设计工具。图2.1所示为电子系统的传统设计方法和基于芯片的设计方法。固定功能元件电路板设计电子系统可编程器件芯

11、片设计电子系统(a) 传统设计方法(b)基于芯片的设计方法图2.1 电子系统的设计方法“自顶向下 与“自底向上设计方法:近10年来,电子系统的设计方法发生很大的变化。过去,电子产品设计的根本思路一直是先选用标准通用集成电路芯片,再由这些芯片和其他元件自下而上地构成电路、子系统和系统。这些设计出的电子系统所用元件的种类和数量均较多。体积与功耗大,可靠性差。随着集成电路技术的不断进步,现在人们可以把数以亿计的进体管,几万门、几十万门、甚至几百万门的电路集成在一块芯片上。半导体集成电路已由早期的单元集成、部件电路集成开展到整机电路集成和系统电路集成。电子系统的设计方法也由过去的那种集成电路厂家提供通

12、用芯片,整机系统用户采用这些芯片组成电子系统的“自底向上设计方法改变为一种新的“自顶向下的设计方法。在这种新的设计方法中,由整机系统用户对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路ASIC来实现,且这些专用集成电路是由系统和电路设计师亲自参与设计的,直至完成电路到芯片幅员的设计,再交由IC工厂投片加工,或者是用可编程ASIC 现场编程实现。在“自顶向下的设计中,首先需要进行行为设计,确定该电子系统或VLSI芯片的功能、性能及允许的芯片面积和本钱等。接着进行结构设计,根据该电子系统或芯片的特点,将其分解为接口清晰、互相关系明确、尽可能简单的子系统,得到一个总体结构。这

13、个结构可能包括算术运算单元、控制单元、数据通道、各种算法状态机等。下一步是把结构转换成逻辑图,即进行逻辑设计。在这一步中,希望尽可能采用规那么的逻辑结构或采用自己经过考验的逻辑单元或模块。接着进行电路设计,逻辑图将进一步转换成电路图,在很多情况下,这时需要进行硬件仿真,以最终确定逻辑设计的正确性。最后是进行幅员设计,即将电路图转换成幅员。“自底向上的设计,一般是在系统划分和分解的根底上先进行单元设计,在单元的精心设计后逐步向上进行功能块设计,然后再进行子系统的设计,最后完成系统的总体设计。图2.2所示为电子系统的两种不同设计方法的设计步骤。Top-downBottom-up行为设计结构设计逻辑

14、设计电路设计幅员设计系统分解单元设计功能块划分子系统设计系统总成图2.2 “自顶向下与“自底向上设计方法的步骤2 EDA技术的根本特征和工具EDA可以看作是电子CAD的高级阶段。在现代电子系统设计领域,EDA技术已经成为电子系统设计的重要手段。无论是设计逻辑芯片还是数字系统,其设计作业的复杂程度都在不断增加,现今仅仅依靠手工进行数字系统设计已经不能满足要求,所有的设计工作都需要在计算机上借助于EDA软件工具进行。在EDA软件的支持下,设计者只需完成对系统功能的描述,就可以由计算机软件进行处理得到设计结果,修改设计如同修改程序一样方便。利用EDA设计工具,设计者可以预知设计结果,减少设计的盲目性

15、,极大地提高设计的效率。2.1 EDA技术的范畴EDA即电子设计自动化。EDA技术指的是以计算机硬件和系统软件为根本工作平台,继承和借鉴前人在电路和系统、数据库、图形学、图论和拓扑逻辑、计算数学、优化理论等多学科的最新科技成果而研制成的商品化EDA通用支撑软件和应用软件包,旨在帮助电子设计工程师在计算机上完成电路的功能设计、逻辑设计、性能分析、时序测试直至PCB的自动设计等。 与早期的电子CAD软件相比,EDA软件的自动化程度更高,功能更完善,运行速度更快,而且操作界面友好,有良好的数据开放性和互换性,即不同厂商的EDA软件可相互兼容。因此,EDA技术很快在世界各大公司、企业和科研单位得到了广

16、泛应用,并已成为衡量一个国家电子技术开展水平的重要标志。EDA技术的范畴应包括电子工程师进行产品开发的全过程,以及电子产品生产的全过程中期望由计算机提供的各种辅助工作。从一个角度看,EDA技术可粗略分为系统级、电路级和物理实现级三个层次的辅助设计过程;从另一个角度来看,EDA技术应包括电子电路设计的各个领域:即从低频电路到高频电路、从线形电路到非线形电路、从模拟电路到数字电路、从分立电路到继承电路的全部设计过程。EDA技术的范畴和功能如图2.3所示。EDA工具数字系统模块设计数字电路是设计FPGA设计ASIC幅员设计器件模型库系统模拟电路设计混合电路是设计PCB设计图2.3 EDA技术的范畴2

17、.2 EDA技术的根本特征现代EDA技术的根本特征是采用高级语言描述,具有系统级仿真和综合能力。下面介绍与这些根本特征有关的几个新概念。并行工程和“自顶向下设计方法根据美国防卫分析研究所的报告中的定义,所谓并行工程是指“一种系统化的、集成化的、并行的产品及相关过程的开发模式。这一模式使开发者从一开始就要考虑到产品生存周期的诸多方面,包括质量、本钱、开发时间及用户的需求,等等。“自顶向下的设计方法在前面已做了简单的介绍。这种方法首先从系统级设计入手,在顶层进行功能方框图的划分和结构设计;在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述;在功能一级进行验证,然后用逻辑综合优化

18、工具生成具体的门级逻辑电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。“Top-down设计方法有利于在早期发现结构设计中的错误,提高设计的一次成功率,因而在现代EDA系统中被广泛采用。硬件描述语言HDL用硬件描述语言进行电路与系统的设计是当前EDA技术的一个重要特征。与传统的原理图输入设计方法相比拟,硬件描述语言使得设计者在笔尖抽象的层次上描述设计的结构和内部特征。它的优点是:语言的公开可利用性;设计与工艺的无关性;宽范围的描述能力;便于组织大规模系统的设计;便于设计的服用和继承等。目前最常用的硬件描述语言有VHDL和Verilog-HDL,它们都已经成为IEEE标准。逻辑综合

19、与优化逻辑综合功能将高层次的系统行为设计自动翻译成门级逻辑的电子描述,做到了设计与工艺的独立。优化那么是对于上述综合生成的电路网表,根据布尔方程等效的原那么,用更小、更快的综合结果代替一些复杂的逻辑电路单元,根据指定的目标库映射成新的网表。开放性和标准化框架是一种软件平台结构,它为EDA工具提供了操作环境。框架的关键在于提供与硬件平台无关的图形用户界面以及工具之间的通信、设计数据和设计流程的管理等,此外还应该包括各种与数据库相关的效劳工程。任何一个EDA系统只要建立了一个符合标准的开放式框架结构,就可以接纳其他厂商的EDA工具一起进行设计工作。这样,框架作为一套使用和配置EDA软件包的标准,就

20、可以实现各种EDA工具间的优化组合,并集成在一个易于管理的统一环境之下,实现资源共享。近年来,随着硬件描述语言等设计数据格式的逐步标准化,不同设计风格和应用的要求导致各具特色的EDA工具被集成在同一个工作站上,从而使EDA框架标准化。新的EDA系统不仅能够实现高层次的自动逻辑综合、幅员综合和测试码生成,而且可以使各个仿真器对同一个设计进行协同仿真,进一步提高了EDA系统的工作效率和设计的正确性。库的引入EDA工具之所以能够完成各种自动设计过程,关键是有各类库的支持,如逻辑模拟时模拟库、逻辑综合时的综合库、幅员综合时的幅员库、测试综合时的测试库等,这些库都是EDA设计公司与半导体生产厂商紧密合作

21、、共同开发的。2.3 EDA的根本工具集成电路技术的开展不断对EDA技术提出新的要求,促进了EDA技术的开展。但是总的来说,EDA系统的设计能力一直难以赶上集成电路技术开展的要求。EDA工具的开展经历了两大阶段:物理工具阶段和逻辑工具阶段。现在EDA和系统设计工具正逐步被理解成一个整体的概念电子系统设计自动化。物理工具用来完成设计中的实际物理问题,如芯片布局、印刷电路板布线等,另外它还能提供一些设计的电气性能分析,如设计规那么检查。这些工作现在主要由集成电路厂家来完成。逻辑工具是基于网表、布尔逻辑、传输时序等概念的。首先由原理图编辑器或硬件描述语言进行设计输入,然后利用EDA系统完成逻辑综合、

22、仿真、优化等过程。最后生成物理工具可以接受的网表或VHDL、Verilog-HDL的结构化描述。在过去30多年中,人们开发了大量的计算机辅助设计工具来帮助集成电路的设计,这些设计工具的分类如图2.4所示。ASIC设计检查/分析工具编辑器仿真器优化/综合工具文字编辑器图象编辑器统计型编辑器确定型仿真器图2.4 设计工具分类编辑器:编辑器包括文字编辑器和图形编辑器。在系统级设计中,文字编辑器用来编辑器硬件系统的自然描述语言,在其他层次用来编辑电路描述语言文本。在数字系统中的门级、存放器以及芯片级,所用的描述语言通常为VHDL和Veril-HDL;在模拟电路级年,硬件描述语言通常为SPICE的文本输

23、入。图形编辑器可用于硬件设计的各个层次。在幅员级,图形编辑器用来编辑表示硅工艺加工过程的几何图形。在高于幅员层次的其他级,图形编辑器用来编辑硬件系统的方法图、原理图等。典型的原理图输入工具至少包括以下3个组成局部:根本单元符号库,主要包括根本单元的图形符号和仿真模型。在实际应用时,硬件设计者除了采用根本单元和标准单元之外,还应该能够使用原理图编辑器建立自己专用的图形符号以及相应的仿真模型,并加到根本单元符号库中,供下次设计时使用。原理图编辑器的编辑功能。产生网表的功能。仿真器:仿真器又称模拟器,主要用来帮助设计者验证设计的正确性。在硬件系统设计的各个层次都要用到仿真器。在数字系统设计中,硬件系

24、统由数字逻辑期间以及它们之间的互连来表示。仿真器的用途是确定系统的输入/输出关系,所采用的方法是把每一个数字逻辑器件映射为一个或几个进程,把整个系统映射为由进程互连构成的进程网络,这种由进程互连组成的网络就是设计的仿真模型。检查/分析工具:在集成电路设计的各个层次都会用到检查/分析工具。在幅员级,必须用设计规那么检查工具来保证幅员所表示的电路能被可靠地制造出来。在逻辑门级,检查/分析工具可以用来检查是否有违反扇出规那么的连接关系。时序分析器一般用来检查最坏情形时电路中的最大和最小延时。优化/综合工具:优化/综合工具用来把一种硬件描述转换过程通常伴随着设计的某种改良。在逻辑门级,可以用逻辑最小化

25、来对布尔表达式进行简化。在存放器级,优化工具可以用来确定控制序列和数据路径的最优组合。各个层次的综合工具可以将硬件的高层次描述转换为低层次描述,也可以将硬件的行为描述转换为结构描述。3 VHDL语言简介3.1 概述硬件描述语言的开展至少已有几十年的历史,并已成功地应用到系统的仿真、验证和设计、综合等方面。目前常用的硬件描述语言有AHDL、ABEL、VHDL、Verilog HDL等等。20世纪80年代后期,美国国防部开发的VHDL语言是IEEE标准化的硬件描述语言,并且已经成为系统描述的国际公认标准,得到众多EDA公司的支持。VHDL语言覆盖面广,描述能力强,能支持硬件的设计、验证、综合和测试

26、,是一种多层次的硬件描述语言。其设计描述可以是描述电路具体组成的结构描述,也可以是描述电路功能的行为描述。这些描述可以从最抽象的系统级直到最精确的逻辑级,甚至门级。运用VHDL语言还可以描述与工艺有关的信息,工艺参数可以通过设计文件语言参数来调整,不会因工艺变化与开展而使VHDL设计过时。因此,VHDL设计的生命周期与其他设计方法相比是最长的。3.2 VHDL语言的根本结构实体,构造体、配置、包集合和库是构成一个完整的VHDL语言程序所必备的五个局部。对VHDL语言来讲,字母的大小写是不加区分的。VHDL语言根本单元及其构成:VHDL语言描述的对象称为实体。实体代表什么几乎没有限制,可以将任意

27、复杂的系统抽象成一个试题,也可以将一块电路板、一个芯片、一个电路单元甚至一个电路看作一个实体。如果设计时对系统自顶向下分层、划分模板,那么,各层的设计模块都可以看作为实体。顶层的系统模块是顶级实体,低层次的实际模块是低级实体。描述时,高级实体可将低级实体当作元件来调用。至于该元件内部的具体结构或功能可在低一级实体的描述中再详细给出。在实际的硬件电路设计中,一个实体既可以是简单的门级电路,也可以是复杂的系统,但无论是什么电路,实体的结构是相同的。实体由两局部组成:实体说明和构造体。A.实体说明Entity实体说明的书写格式如下所示;ENTITY 实体名 ISGENERIC(类属参数说明);POR

28、T(端口说明);END实体名;在实体说明中应给出实体名,并描述实体的外部接口情况。此时,实体被视为“黑盒,不管其内部结构功能如何,只给出它的输入/输出接口信号。例如,一个3位计数器的实体说明可以写为:例3-1ENTITY Cnt3b ISGENERIC (m:TIME:=5ns) PORT(clock,enable:IN STD_LOGIC;qa:OUT INTEGER RANGE 0 TO 7);END Cnt3b;每个根本设计单元的实体说明必须以“ENTITY实体IS开始至“END实体名结束。例3-1中,Cnt3b是实体名,GENERIC后为类属参数说明,PORT后为端口说明。类属参数说明

29、语言GENERIC类属参数说明语句必须放在端口说明语句之前,用以设定实体或元件的内部 结构和规模。其书写格式如下: GENERIC(常数名:数据类型:=设定值;.常数名:数据类型:=设定值);例3-1的程序中GENERIC(m:TIME:=5ns)指定了构造体内m值为5ns.端口说明PORT在电路图上,端口对应于元件符号的外部引脚。端口说明语句是对根本设计实体单元与外部接口的描述,也可以说是对引脚信号的名称、数据类型和输入输出方向的描述。语句的一般格式如下:PORT(端口信号名,端口信号名:端口模式 数据类型;端口信号名是赋给每个外部引脚的名称,通常用一个或几个英文字,或用英文字母加数字命名之

30、。各端口信号名在实体中必须是惟一的,不能重复。端口模式用来说明信号的方向,详细的端口方向说明见表3-1。需要指出的是,BUFFER是INOUT的子集,但作输入用时,信号不是由外部驱动,而是从输出反应得到。方向定义含 义IN输入OUT输出构造体内不能再使用INOUT双向可以输入,也可以输出BUFFER输出构造体内可再使用,可以读或写LINKAGE不指定方向,无论哪一个方向都可以连接表3.13 数据类型那么是端口信号的取值类型,常见的有以下几种:BIT 位类型,取值0、1,由STANDARD程序包定义;BIT_VECTOR 位向量类型,是BIT的组合;STD_LOGIC 工业标准的逻辑类型,取值0

31、、1、X、Z,由STD_LOGIC_1164程序包定义;INTEGER 整数类型,可用作循环的指针或常数,通常不用作I/O信号;STD_LOGIC_VECTOR 工业标准的逻辑向量类型,是STD_LOGIC的组合;BOOLEAN 布尔类型,取值FALSE、TRUE。在例31中,3位计数器作为实体,其端口有2个输入信号clock,enable和1个输出信号qa。输入信号和输出信号的类型不同。B.构造体Architectre实体的名称和外部端口已经定义,下一步就是翻开“黑盒,解释实体内部的具体细节,这就是构造体所要描述的内容。构造体是一个实体的组成局部,是对实体功能的具体描述。构造体主要是描述实体

32、的硬件结构、元件之间的互连关系、实体所完成的逻辑功能以及数据的传输变换等方面的内容。具体编写构造体时,可以从其中的某一方面来描述。构造体对其实体的输入输出关系描述有三种方式:行为描述方式、数据流描述方式和结构描述方式。最常用的是结构描述方式。一个构造体的书写格式如下:ARCHITECTURE 构造体名OF 实体名IS定义语句内部信号,常数,数据类型,函数等的定义;BEGIN 并行处理语句END 构造体名;一个实体中可以具有一个构造体,也可以具有几个构造体。一个实体内部假设有几个构造体,那么构造体名不能重复。构造体中的定义语句位于ARCHITECTURE和BRGIN之间,用于对构造体内部所使用的

33、信号SIGNAL、常数CONSTANT、数据类型、元件COMPONENT和过程PROCEDURE进行定义。例如,一个RS触发器的构造体描述可以写成:例32ARCHITECTURE rs_behav OF rsff ISBEGINqset, b=qb, c=q);u2:nand2 PORT MAP (a=reset, b=q, c=qb);END re_stru;该例中用到了2输入与非门作元件,构造体中应先对元件进行说明,元件说明类似于实体说明,只需给出外部端口信息。元件的具体安装通过元件例化语句将电路中的实际信号与元件说明中的端口信号关联对应起来。如上所示,元件u1中信号set和qb分别对应n

34、and2的2个输入端口a和b,信号q对应输入端口c。符号“的含义是对应于左边为元件端口信号,右边为电路中的实际信号。这里需要说明能够一点:构造体中所调用的元件实际就是最低一级的实体。所以,如果调用的元件在系统库中可以找到,那么系统可以自己从库中调用,否那么设计者还需对这些元件所对应的实体进行描述,包括实体说明和构造体。采用前面讲过的行为描述方式编写的VHDL程序,在一般的情况下只能用于行为层次的仿真,而不能进行逻辑综合。对于行为描述方式的VHDL语言程序只有改写数据流描述方式才能进行逻辑综合,也就是说数据流描述方式才是真正可以进行逻辑综合的描述方式,数据流描述方式又称为存放器传输描述方式RTL

35、。RTL描述方式是一种明确规定存放器描述的方法。由于受逻辑综合的限制,在采用这种描述方法时,所使用的VHDL语言的语句有一定的限制。对于一个4选1电路,用RTL描述方式编写的程序可以写为:例3-4LIBRARY IEEE;USE IEEE. STD_LOGIC _1164.ALL;USE IEEE. STD_LOGIC _UNSIGNED.ALL;ENTITY mux4 IS PORT(input; IN STD_LOGIC _VECTOR (3 DOWNTO 0);Set: IN STD_LOGIC _VECTOR (1 DOYNTO 0);Y: OUT STD_LOGIC); END mu

36、x;ARCHITECTURE rt1 OF mux ISBEGIN y=input(0) WHEN sel=0 ELSE input(1) WHEN se1=1 ELSE input(2) WHEN sel=2 ELSE input(3);END rt1;使用数据流描述方式时,要注意以下几个方面的问题:X状态的传递;禁止在一个进程总存在两个存放器描述;禁止使用IF语句中的ELSE项;关联性强的信号应放在同一个进程中等等。VHDL语言构造体的子结构描述:在实际的硬件电路设计中,当电路的规模较大时,全部电路用一个模块来描述很不方便。一般情况下,电路设计者总希望将整个电路分成假设干相对独立的子模块来

37、进行描述。VHDL语言的功能描述语句结构可以是含有五种不同类型并以并行方式工作的语句结构,这也就是结构体的五个子结构。VHDL语言中常用的三种子结构描述语句为BLOCK语句结构、PROCESS语句结构和SUBPROGRAM语句结构。下面对这三种结构进行说明。(1) BLOCK块语句结构BLOCK的应用类似于将一个原理图分为几个子模块进行绘制,而其中每个子模块都可以是一个具体的电路原理图。也就是说,按照模块方式对构造体进行划分并不会改变电路的逻辑功能。设计者可以合理地将一个模块划分为整个区域,在每个区域中都能定义或描述局部信号、数据类型和常量。所有能在构造体的说明局部进行说明对象都可以在BLOC

38、K的说明局部进行说明。BLOCK语句的应用只是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性或关闭某些信号。BLOCK语句的书写格式如下:块结构名BLOCK块保护表达式端口说明语句类属参数说明语句BEGIN . . .END BLOCK 块结构名卫式BIOCK语句的书写格式为:BLOCK (卫式表达式)当卫式表达式为真时,BLOCK语句被执行,否那么将跳过BLOCK语句。在BLOCK块中的信号传送语句前都要加个一个前卫关键词GUARDED,以说明只有在条件满足时此语句才会执行。在实际的电路设计中,应用BLOCK语句与否,对于原构造体的逻辑功能的仿真结果不

39、会产生任何影响。从综合的角度来看,BLOCK语句的存在没有任何实际意义,在综合过程中,VHDL综合器会略去所有的块语句。正因为如此,在划分构造体中的功能语句时一般不采用块结构,而是才哟经济能够元件例化的方式,(2)PROCESS(进程)语句结构前面的3-1中的计数器的构造体中就包含一个PROCESS。由此可以看出用PROCESS语句描述电路结构的书写格式为: 进程名:process (信号1,信号2) 进程说明局部 BEGIN . . .END PROCESS进程名是进程的命名,并不是必需的。括号中的信号是进程的敏感信号,任意一个敏感信号改变,进程中由顺序语句定义的行为就会重新执行一遍。进程说

40、明局部对该进程所需的局部数据环境进行定义。BEGIN和END PROCESS之间是由设计者输入描述进程行为的顺序执行语句。进程行为的结果可以赋给信号,并通过信号被其他的PROCESS或BLOCK读取或赋值。当进程中最后一个语句执行完成后,执行过程将返回到进程的第一个语句,以等待下一次敏感信号变化。一个构造体中可以含有多个PROCESS结构,每个进程可以在任何时刻被激活或者启动。而所有被激活的进程都是并行运行的,所以PROCESS结构本身是并行语句。第3章 本课题的实现方案1 任意数分频(包括奇偶数和小数)的各种设计方法众所周知分频器是FPGA设计中使用频率非常高的根本设计之一,尽管在目前大局部

41、设计中,广泛使用芯片厂家集成的锁相环资源,如altera的PLL,Xilinx的DLL来进行时钟的分频,倍频以及相移。但是对于始终要求不高的根本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的琐相环资源,再者,消耗不多的逻辑单元就可以到达对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。下面是介绍各种分频系数进行分频的方法:偶数倍分频偶数倍分频应该是大家都比拟熟悉的分频,通过计数器计数完全可以实现的。如进行N倍偶数分频的时钟触发计数器计数,当计数器从0计数到时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个始终从零开始计

42、数。以此循环下去,这种方法可以实现任意的偶数分频。奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,仿佛如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比方可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为或者。如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比50%的三分频始终。这种方法可以实现任意的奇数分频。归类为一般的方法为:对于

43、实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出始终翻转,然后经过再次进行翻转得到一个占空比非50%奇数n分频时钟,再者同时进行下降沿触发的模N计数,到和上升沿触发输出始终翻转选定值相同值时,进行输出时钟翻转,同样经过时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。另外一种方法:对进行奇数倍n分频时钟,首先进行分频(带小数,即等于),然后再进行二分频得到。得到占空比50%的奇数倍分频。2 小数分频首先介绍如何进行分频,这种分频需要对输入时钟进行操作。根本的设计思想:对

44、于进行分频,首先进行模n的计数,在计数到时,输出时钟赋为1,回到计数0时,又赋为0,因此,可以知道,当计数值为时,输出时钟才为1,因此,只要保持计数值为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数器为时对计数触发时钟进行翻转,那么时钟的下降沿变成了上升沿。即在计数值为只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变成0。因此,每产生一个分频时钟的周期,触发时钟都是要翻转一次。设计思路如下:输出时钟异或模n计数并生成输出二分频分频时钟分频原理框图由上述原理图可知:触发时钟的翻转通过分频信号的二分频,然后与输入时钟相或运算即可。任意整数带小

45、数的分频。这种分频一般来说,可以通过不同分频进行组合实现。比方实现分频,可以通过两个七分频脉冲加上一个五分频实现一个该分频设计,即实现分频,一般而言,这种分频由于分频输出的始终脉冲抖动很大,在设计中使用已经非常少。但是也是可以实现的。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity deccount isport (inclk: in STD_LOGIC;preset: in STD_LOGIC_VECTOR (3 downto

46、 0);outclk: buffer STD_LOGIC);end deccount;architecture rtl of deccount issignal count:std_logic_vector(3 downto 0);signal clk:std_logic;signal divide2:std_logic;begin process(clk) begin if(clkevent and clk=1) then if (count=0000) then count=preset-1; outclk=1; else count=count-1; outclk=0; end if;e

47、nd if;end process; process(outclk) begin if(outclkevent and outclk=1) then divide2=not divide2; end if ; end process; clk=inclk xor divide2; end rtl;3 基于CPLD/FPGA的小数分频器的设计3.1 小数分频的根本原理:小数分频的根本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两个分频比出现的不同次数来获得所需要的小数分频值。如设计一个分频系数为8.7分频器时,可以将分频器设计成3次8分频,7次9分

48、频,这样总的分频值为:从这种实现方法的特点可以看出,由于分频器的分频值不断改变,因此分频后得到的信号抖动较大。当分频系数为(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次分频。3.2 电路组成:分频系数为的分频器电路可由一个异或门、一个模N计数器和一个二分频组成。在实现时,模N计数器可设计成带预制的计数器,这样可以实现任意分频系数为的分频器。如以下图:异或门模N计数器2分频器 通用半整数分频器电路组成成控制计数器控制逻辑图 3.3 小数分频器的原理图 小数分频器设计设计半整数分频器的一般方法和两个分频系数分别为2.7,2+7/13的非半整数分频器的任

49、意小数分频器的VHDL程序设计。 4 举例说明 2.5分频电路的VHDL设计程序占空比为2:3占空比为2:3的2.5分频电路的输出信号CLK_DIV2_5是由占空比为1:1的5分频信号CLK_DIV5_1和CLK_DIV5_2进行异或运算得到的。其输入端口为CLK;输出端口为CLK_DIV2_5。:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_arith.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY clk_2_5div_1 IS PORT(CLK :IN std_logic; C

50、LK_DIV2_5:OUT std_logic);END clk_2_5div_1;ARCHITECTURE rtl OF clk_2_5div_1 IS SIGNAL counter1:std_logic_vector(2 DOWNTO 0); SIGNAL counter2:std_logic_vector(2 DOWNTO 0); SIGNAL CLK_DIV5_temp1:std_logic; SIGNAL CLK_DIV5_temp2:std_logic; SIGNAL CLK_DIV5_temp3:std_logic; SIGNAL CLK_DIV5_temp4:std_logic

51、; SIGNAL CLK_DIV5_1:std_logic; SIGNAL CLK_DIV5_2:std_logic;BEGIN PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN IF(counter1=100)THEN counter10); ELSE counter1=counter1+1; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN IF(counter1=011 OR counter1=100)THEN CLK_DIV5_temp1=1;

52、ELSE CLK_DIV5_temp1=0; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1)THEN CLK_DIV5_temp3=CLK_DIV5_temp1; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=0)THEN IF(counter2=100)THEN counter20); ELSE counter2=counter2+1; END IF; END IF; END PROCESS; PROCESS(CLK) BEG

53、IN IF(CLKevent AND CLK=0)THEN IF(counter2=011 OR counter2=100)THEN CLK_DIV5_temp2=1; ELSE CLK_DIV5_temp2=0; END IF; END IF; END PROCESS; PROCESS(CLK) BEGIN IF(CLKevent AND CLK=0)THEN CLK_DIV5_temp4=CLK_DIV5_temp2; END IF; END PROCESS; CLK_DIV5_1=CLK_DIV5_temp1 OR CLK_DIV5_temp2; CLK_DIV5_2=CLK_DIV5_

54、temp3 OR CLK_DIV5_temp4; CLK_DIV2_5=CLK_DIV5_1 XOR CLK_DIV5_2;END rtl;上面程序经编译时序模拟后,在MAX+PLUS II 可得到如下图的仿真波形。 2.7分频电路的VHDL设计程序占空比为10:27在2.7分频电路中,输入端为clk_in,输出端为clk_out。其中,architecture b是实用累加器计算分频系数选择的时机,architecture a是直接实用已计算好的结果。以下是代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith

55、.all;use ieee.std_logic_unsigned.all;entity clk_2_7div is port(clk_in:in std_logic; clk_out:out std_logic);end clk_2_7div;architecture b of clk_2_7div is signal clkoutQ:std_logic; signal ctrl:std_logic; signal cnt1:integer range 0 to 1; signal cnt2:integer range 0 to 2;begin clk_out=clkoutQ; process

56、(clkoutQ) variable tmp:integer range 0 to 20; begin if(rising_edge(clkoutQ) then tmp:=tmp+7; if(tmp10) then ctrl=1; else ctrl=0; tmp:=tmp-10; end if; end if; end process; process(clk_in) begin if(clk_inevent and clk_in=1) then if (ctrl=1) then if(cnt11) then cnt1=cnt1+1; else cnt1=0; end if; if(cnt1

57、1) then clkoutQ=1; else clkoutQ=0; end if; else if(cnt22) then cnt2=cnt2+1; else cnt2=0; end if; if(cnt21) then clkoutQ=1; else clkoutQ=0; end if; end if; end if; end process;end b;architecture a of clk_2_7div is signal cnt:integer range 0 to 9; signal clkoutQ:std_logic; signal cnt1:integer range 0

58、to 1; signal cnt2:integer range 0 to 2;begin clk_out=clkoutQ; process(clkoutQ) begin if(clkoutQevent and clkoutQ=1) then if(cnt9) then cnt=cnt+1; else cnt if(cnt11) then cnt1=cnt1+1; else cnt1=0; end if; if(cnt11)then clkoutQ=1; else clkoutQ if(cnt22) then cnt2=cnt2+1; else cnt2=0; end if; if(cnt21)

59、 then clkoutQ=1; else clkoutQ=0; end if; end case; end if; end process;end a;configuration cfg of clk_2_7div is for a end for;end cfg; 4.3 2+7/13分频电路的VHDL设计程序占空比为13:33 将小数分频的方法进行扩展,可以得到形如的分数分频的方法,例如,2分频,只要在13次分频中,进行7次3分频,6次2分频就可以得到。同样,为了将两种分频均匀,将分子局部累加,小于分母的,进行M分频,大于等于分母的,进行M+1分频。下面给出2分频的代码:library

60、ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_2_7_13div is port(clk_in:in std_logic; clk_out:out std_logic);end clk_2_7_13div;architecture b of clk_2_7_13div is signal clkoutQ:std_logic; signal ctrl:std_logic; signal cnt1:integer range 0 to

温馨提示

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

评论

0/150

提交评论