第5章LogicLock优化技术000001.ppt

上传人:本田雅阁 文档编号:2531909 上传时间:2019-04-05 格式:PPT 页数:149 大小:1.23MB
返回 下载 相关 举报
第5章LogicLock优化技术000001.ppt_第1页
第1页 / 共149页
第5章LogicLock优化技术000001.ppt_第2页
第2页 / 共149页
第5章LogicLock优化技术000001.ppt_第3页
第3页 / 共149页
亲,该文档总共149页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第5章LogicLock优化技术000001.ppt》由会员分享,可在线阅读,更多相关《第5章LogicLock优化技术000001.ppt(149页珍藏版)》请在三一文库上搜索。

1、第5章 LogicLock优化技术,5.1 LogicLock技术的基本内容 5.2 未用LogicLock的数字滤波器设计 5.3 应用逻辑锁定技术 5.4 顶层设计优化,5.1 LogicLock技术的基本内容,5.1.1 LogicLock技术解决系统设计优化 有FPGA开发经验的人都会有这样的体会:原来在硬件测试上十分成功的FPGA设计,在源代码并没有任何改变的情况下,仅仅是增加了一点与原程序毫不相干的电路描述,或甚至只改变了某个端口信号的引脚锁定位置,结果在综合适配后,原来设计的硬件性能将大为下降,如速度降低了,有时甚至无法正常工作。,这时,如果比较改变设计前后的Floorplan图

2、,会发现芯片内部资源的使用情况发生了巨大的变化。这表明,即使对原设计作极小的改变(更不用说对适配约束条件的改变),都会使适配器对原设计的布线(Routing)和布局(Placing)策略作大幅改变和调整。同时,当设计规模比较大时,人为很难直接介入布线/布局的优化。,对于由许多基本电路模块构建成的顶层系统的FPGA开发,类似的问题将更加突出。例如,原来某一基本模块的FPGA硬件测试十分成功,包括工作性能、速度以及资源利用率等,但当将这些基本模块连接到一个顶层设计后,即使在同一FPGA中进行测试,也常发现各模块以及总系统的性能有所下降甚至出现无法工作的情况。事实上,如果能在设计基本模块时,就固定其

3、布线/布局的原方案,即使在顶层文件的总体适配时,也不改变原来基本模块的布线/布局及其原来的优化方案,就能很好地解决上述棘手的问题。,对此,Quartus II提供了一个优秀的设计技术,即逻辑锁定技术。使用这一技术,可以将设计好的电路系统或某一底层模块约束到FPGA中某个指定的区域上,并固定原来的布线/布局方案。这样一来,对于一项较大设计中的某一底层模块,不但在顶层的软件描述上是一个子模块(如例2-1),而且在FPGA芯片的总体适配中,此模块在硬件上便类似于ASIC设计中的一个标准模块,始终能保持自己原来的布线/布局方案,从而在任何大系统中都能保持原有的电路性能,就像一个被调用的独立的元件一样,

4、不会由于顶层系统布线/布局的改变而改变基本模块的布线/布局结构了。,有了逻辑锁定技术,面对大系统的设计,工程师们就可以将构成大系统的各模块进行分别设计,分别优化他们的布线/布局;适配约束,逐个地使它们分别获得最佳的工作性能,逐个优化并锁定它们的布线/布局方案;最后把它们连在一起形成性能优良的顶层系统。显然,逻辑设计锁定技术是SOPC单片系统优化设计及IP核成功拼装应用的有力保证。 大规模系统的设计本身就已十分困难,而对大规模系统的优化将更加困难。优化工作在增加或更改内部设计元件时要进行大量的修改工作。,一般地,对付复杂的大系统的设计的方法有: (1) 使用模型设计、层次设计或递增设计方法; (

5、2) 使用好的EDA工具,使得整个设计和优化更容易; (3) 使用已经优化好的IP核; (4) 使用先前已优化好的被锁定了布局/布线的设计模块。 比较图5-1所示的FPGA的传统设计流程与使用了逻辑锁定(LogiclLock Methodology)优化技术的流程可以发现,,两种设计流程都是把整个设计系统分成若干个模块(这些模块可以是一个单独的电路功能块,或是电路中的部分元件,或是部分设计层次),在对每一模块单独设计好后,再把它们拼起来形成一个完整的系统。所不同的是,前者将系统中的各模块分别设计,并集成为系统,然后对整个系统进行优化和测试;而后者则将系统中的各模块分别设计和优化,并保持优化结果

6、,最后进行模块集成和系统测试。,图5-1 FPGA的传统设计流程与 使用了逻辑锁定优化技术的流程的比较,如上所述,在传统设计流程中常常发生的情况是,对于每个模块来说,它们都能满足设计要求(良好的功能和速度指标等),但当将它们合成系统后,却不能达到原来的要求了。即使有时有的模块的功能满足要求,但当修改其它模块后,整体编译后会导致其它模块性能的改变,甚至下降。这是由于在传统设计流程中,EDA工具并不会对系统中的各模块单独优化及单独布局/布线。,Quartus II的LogicLock技术则能很好地解决这一问题。它能很容易地完成对每一模块的设计、测试和优化,再将这些模块集成为一个系统,进行系统优化设

7、计,同时又能很好地保持原来已设计好的每一单个模块的优化特性。当把这些模块集成为一个系统后,只需对模块之间的逻辑行为进行优化就可以了。显然,LogicLock技术通过允许设计者自主地控制特定模块在FPGA中指定的区域中的布线与布局,以及单独的优化,并能在更高层次的设计中保留模块原有的性能特点,从而大大加强了DSP的SOC设计的优秀性能和灵活性。,5.1.2 LogicLock的基本内容 使用LogicLock设计流程,首先要求建立逻辑锁定区域,这就是设计模块放置的区域,即所谓的LogicLock区。其中应包含能完成此模块电路构成的逻辑资源,如逻辑宏单元LCs、ESBs、EABs等。一旦确定了这个

8、区域,Quartus II就会把指定模块适配在这个区域中。 设定LogicLock区域的方法有3种:, 使用Tcl脚本命令; 使用Quartus II的Floorplan编辑器; 使用LogicLock窗。 LogicLock区域的特性主要有两个标志:“大小”和“位置”。“大小”是指此区域的高和宽,其单位不是距离而是逻辑单元;而“位置”是指在目标器件中锁定区域在Floorplan图上所处的位置。区域的位置状态有两种:“锁定”状态和“浮动”状态。,如果区域是浮动的,则由Quartus II在优化过程中确定具体位置所在。如果区域的大小设定为“自动”,Quartus II将自动调整大小,以便将设计模

9、块正好能放进此区域中。区域是一个长方区域,区域的起点定义为左顶角处,位置状态定义为“锁定”和“浮动”,大小定义为“自动”和“固定”两种,表5-1给出了详细说明。,表5-1 锁定区域分区类型,5.1.3 锁定区域的基本方式 如果将一个基本模块锁定于一个区域中并进行了成功的适配后,还要将其使用于更高层次的设计中,设计者对于此模块的锁定方式有两种选择:,1. 仅锁定区域的大小和位置(包括选取表5-1中的任何一种方式) 在这种情况下,Quartus II在顶层设计的适配中,只负责将原模块放置在所定义的锁定区域中,而在此区域中,此模块的电路放置不固定,即只能保证在更高层的设计锁定区域的大小和位置不变,但

10、不保证原模块在此锁定区域中的电路的布线/布局方式不变,从而无法保证在此后的更高层设计适配后模块的电路性能不变。,2. 对原锁定区域的模块电路布线/布局信息进行“反注”(Back-annotate) 通过“背注”操作,Quartus II根据背注信息完全锁定在指定的LogicLock区域中该模块电路中各元件的电路结构的确定位置。即能很好地保持在锁定区域中各电路元素的适配位置,从而在当将此模块集成到高层乃至顶层设计适配后,能最大程度地保持此锁定模块原来的工作性能。,较好的设计方法可以这样:为了确保锁定区域中的电路模块优化后其特性不致在以后的高层设计适配中发生改变,同时高层设计适配中又有较好的灵活性

11、,以利于系统级适配的优化,可以首先将模块在锁定区域中的电路设置的基本元件的布线/布局固定下来,从而不仅锁定了逻辑区域,同时也锁定了模块的电路性能,然后在高层的设计中令含有此模块的锁定区域为浮动状态。这样以来,在Quartus II对高层的设计将各模块统一进行适配和优化中,为各模块找到了最合适的位置,从而有利于顶层系统的优化。,在系统适配中,虽然原设计模块的锁定区域是浮动的,但在该区域中构成该模块的电路元件与该区域的相对位置是不变的。因此,只要高层电路系统的适配与原低层模块的锁定适配是在同一系列的FPGA中,就能保证原模块的性能不变。 此外,这种保持了原特性的浮动模块的作用类似一个已优化好的独立

12、的电路元件,它不仅能作为原高层设计中的一个电路模块,还能进行多模块例化(同模块复制,或能移植到其它电路系统中)。,这种方式产生的“电路元件”与仅仅以VHDL设计实体代码构成的“元件”是不一样的。前者是一个成熟的、已优化好的电路模块,只要在同种系列的目标器件中实现,不论是单独使用,还是用作更大系统的一个例化元件,都能保证原模块的技术性能不变;而后者不具有这样的特性,因为后者即使在同一系列的目标器件中,由于不同的外部条件和不同的高层次设计,或由于顶层设计的微小改变,它们都会表现出不同的电路特性。,假如一个子区域是浮动状态的,Quartus II就会在优化过程中为此子区域在母区域中确定一个合适的位置

13、;假如一个子区域是锁定状态的,Quartus II也将保持子区域在母区域中的相对位置不变。 设计者必须注意,逻辑锁定区域的层次与工程设计的层次概念是不同的。前者是一组定义了“母子”关系的锁定区域,这个区域只能由Quartus II的区域锁定工具划定逻辑布局位置间的关系,而后者则不同。后者反映的是设计源代码中的结构层次,以及模块间的例化关系。一般地,LogicLock区域不一定反映设计中的逻辑层次。,图5-2和图5-3是两个不同的设计层次示例,其中图5-2的顶层设计是B,它包含两个模块:IP核与A模块。设计者是在定义了设计层次后再确定逻辑锁定层次的。逻辑锁定设计中,可以先建立一个LogicLoc

14、k母模块区域,将顶层设计B定义于此区域中,然后建立两个子区域,把IP模块和A模块分别设定放置在两个子区域中。这样以来,锁定区域的划分正好反映了设计的层次。 但是,设计者也可以将IP核模块放在主区域中,而把顶层设计B放在子区域中,并将模块A中的部分内容放在这个子区域中,这当然也不失为一种锁定区域的定义方法。但最佳的区域定义应根据模块组织情况及电路的特性来具体确定。,图5-2 模块设计层次,图5-3 层次化设计流程,5.1.5 LogicLock技术的不同应用流程 如上所述,在传统的设计流程中,同样一个模块在单独适配与在顶层设计中适配,其性能有可能不一样。为了解决这个问题,LogicLock提供了

15、一种增量适配方法,步骤如下: 1) 由逻辑综合器产生“原子级”网表文件。 原子级网表文件就是该文件中以最基本的元件(如与门、非门、触发器等)和基本连线方式表达的工程设计。所谓“原子级”就是指底层基本逻辑文件在原子级网表文件中,所有的“原子”的结构与名称(如某逻辑门)是不会随着对系统的编译适配而改变的。,2) 使用LogicLock设置确定设计模块在锁定区域中的具体放置位置模块在该区域中的特性以信号节点的设置和层次安排。原子级网表的名称规定了信号节点的设置。于是,在含有这些模块的顶层设计编译适配中,Quartus II将完全遵循原模块中的所有约束条件。在以下叙述的模块化、层次化、增量法和分组法的

16、所有设计流程中,都将使用上述保持模块特性的方式进行适配。,1. 模块化设计流程 以图5-2为例,这里显示的是一个模块化的设计流程。顶层设计B仅仅是对IP和A作了例化,即B只是确定了这两个子模块的连接关系,没有其它的逻辑设计内容。设计者可以首先分别对这两个底层模块进行优化(主要对A模块,因为IP核是一个已被优化了的设计),以便在顶层设计中保持原有的优化特性。,具体方法是,在层次化设计中,设计者首先将IP核与A模块设定为工程,然后再分别对各工程进行设计和优化。优化中利用逻辑锁定技术将各模块放置在LogicLock区域中,或放在设计者决定的锁定区域中的某个锁定层次中,分别使各模块在自己的锁定区域中优

17、化,以便满足原设计的要求。然后,设计者将这些优化并锁定了区域的设计模块所对应的原子级网表文件输入到顶层系统B中,接着由Quartus II在B中确定此2模块的锁定位置(区域)。最后,设计者就可以对整个系统进行编译和测试了。,2. 层次化设计流程 LogicLock技术允许层次化的设计流程。图5-3是一个层次设计流程的示例,其中包含模块D、E和F。模块E还包含来自图5-2的模块B。如果模块D对于整个系统的性能并不很重要,那么可以首先使用硬件描述语言描述这个模块的功能,而在设计中不必专门对此项设计规定什么布线/布局的约束信息。,如果已经确定模块E和F的性能对于总系统来说比较重要,设计者就可以分别对

18、它们进行优化设计。考虑到模块E是由多个模块层次构成的,而模块F比较简单,设计者可以首先对模块F进行逻辑锁定、优化设计和适配,并得到对应于F的原子级网表文件。 为了获得模块E的原子级网表文件,需要分两步来走:第一步,先按上节方法获得B的原子级网表文件,然后将此网表连同C输入模块E中;第二步,对E进行优化设计,最后将E的网表文件连同G和F输入进顶层设计G中进行全系统设计。,3. 增量法设计流程 逻辑锁定技术使得增量法设计流程方便、有效。如图5-4所示,顶层设计G含有4个模块,设计一开始就可以从顶层设计入手,但可以逐个加入模块进行区域锁定、优化和布局/布线。完成以后,再加入下一个模块。如前所述,由于

19、对每一模块都使用了锁定技术,所以,当在顶层中加入新模块后,原来已存在的模块的性能不会由于整个系统的编译、综合和适配优化而有所改变。,图5-4 增量法设计流程,4. 分组法设计流程 分组法设计流程就是允许设计者为系统模块布置建立一个Floorplan(如图5-5),由不同的工程师分别设计各子模块,最后由系统工程师完成集成设计。具体步骤如下: (1) 将设计系统分成模块A、B和C。 (2) 通过例化模块A、B和C建立一个顶层设计工程,此顶层设计中规定各模块间的连接关系,并设定工程的时序要求和布局约束。如果设计者知道每一模块的逻辑资源占用的大致情况,则可将每一模块放置在各自定义的逻辑锁定区域中。,(

20、3) 为每一模块单独设定一个工程,并且对每一工程使用系统级的设计中给定的设置(包括优化要求的设置)。 (4) 分别综合、编译适配和优化这些模块,并仿真测试这些模块的性能,了解是否达到最初的要求。 (5) 如果必要,可以增加一些逻辑锁定的约束条件,以便能在总的系统设计中保持这些模块的优化结果。 (6) 一旦完成对单个模块的设计,就将这些模块连同设定的约束条件输入顶层设计中。 (7) 最后由系统工程师完成对顶层设计进行总体的编译和仿真。,图5-5 分组设计流程,5.1.6 系统性能强化策略 事实上,逻辑锁定技术也能直接改善系统的性能,即这些系统并不必按如前所述的由多个模块组成。对于这种系统,Qua

21、rtus II的逻辑锁定功能通过合理组织放置和固定系统电路中的基本元件,同样能优化系统的性能。利用逻辑锁定技术实现这一目的的方法,就是所谓的系统性能强化策略。这一策略的有效性取决于系统特定的电路结构特点。 具体策略如下(定义锁定区域的原则):,(1) 如果电路结构与设计层次十分相似,锁定区域就可以根据设计层次来设定。通常,这些设计系统是由关系十分紧密的模块构成的,而且其中每一模块的构成逻辑是独立的,模块间的信号联系是由良好的通信界面实现的。 (2) 根据关键通道路径来定义锁定区域。一般地,这些通道路径比较长,且跨越多个其它模块。这要确保被锁定的节点在关键路径上,或者模块包含关键路径。这种设计策

22、略能达到改善系统性能的目的。,(3) 为了降低电路连接处的延时以及连线的密度,可以将具有高扇出和高扇入的电路结构设定为锁定区域。这往往是一种有效的方法。 由上可见,利用逻辑锁定技术是可以选择多种方式的。可单独对各个模块进行优化锁定再集成,也可以将所有的模块一开始就集成在顶层系统,再根据结构情况进行锁定优化。,在实际设计中,可以根据具体情况使用不同类型的锁定技术和锁定流程或是混合方法进行系统适配和布局/布线的控制,达到优化的目的。但一般最好将锁定区域定义为自动大小和浮动位置,这样,Quartus II就能在适配中为系统设计,为锁定区域找到最合适的高宽尺寸和定位。,如果各模块是在单独锁定、优化后输

23、入顶层设计的,就可以按照上述的4个设计流程来进行系统设计。需要注意的是,对于每一优化的模块而设定的逻辑锁定的各项设置包含两个重要内容:一是逻辑锁定区域的信息;二是“背注”后的所谓原子级网表的信息。,另一种利用逻辑锁定技术进行优化设计的方法,就是以上提到的不经过对底层单个模块进行单独锁定优化,而是直接从顶层系统出发,根据具体结构情况确定锁定部分后进行优化。这种方法可使Quartus II将某些特定的节点放在锁定区域中,并可在器件中定义为浮动而允许Quartus II在适配中可移动。利用这种方法,设计者可以将来自不同模块的电路元素(节点、元件、连线)放在锁定区域中,最后由Quartus II对整个

24、系统进行优化设计。,熟悉Max+plusII的读者会发现LogicLock区域十分类似于Max+plusII中的“打包”(Cliques)。因为打包允许LCs(逻辑宏单元)组合在一起应用。设定锁定区域为“自动”时,就类似于Max+plusII中称为“最佳打包”(Best Clique)的功能设置。而标志着对“行”与“列”的锁定区域的固定大小则类似于行或列的打包。此外,LogicLock区域也类似于“定制区域”的概念。因为一个可定义的区域可以被设定为实体和节点。因此,如果LogicLock区域的位置是锁定的,则这个区域便类似于一个定制区域(Custom regin)。,5.1.7 锁定区域的移植

25、与再利用 逻辑锁定技术使得设计模块的移植和有效再利用变得十分方便。这是因为已被优化和布线/布局锁定的模块能很容易地被其它的设计工程调用,并能保持原有的性能。对于那些比较常用的模块,由于已经作了锁定和优化,可以组织一个模块库,用于其它更大系统的设计,提高系统设计的效率和性能。这是由于这些库中包含针对这些模块的原子级网表文件、LogicLock的设置信息,以及详细的使用报告(包括模块的性能指标和逻辑资源的占用情况等)。,需要注意的是,虽然这些优化模块在与其诞生的目标器件同种系列的器件中都能获得好的工作特性,但只有将其用在最初设计的同型号器件中才能获得最好的性能。这是因为,同系列而不同型号的目标器件

26、的结构特点毕竟与原来的器件的结构是有一定差别的。因此,要实现完全相同的布线/布局是不可能的。不过如果在设计中选用的目标器件属于同系列器件,若设定这些加入的模块为浮动状态,则能获得相似的性能指标。这种方式比较适用于一个较大的系统设计在同系列目标器件中的情况。即当用这种目标器件无法获得该模块与在原器件中的完全相同的布线/布局且还有许多模块有待例化连接的情况下,设定这些模块为浮动状态较好。,5.2 未用LogicLock的数字滤波器设计,5.2.1 数字滤波器结构及其VHDL描述 图5-6是一个16阶滤波器的电路框图,它由4个4阶滤波器组成,即由4个4阶滤波器例化而成,其RTL电路图如图5-8所示。

27、其中每一个4阶滤波器的结构如图5-7所示,其RTL电路图如图5-9所示。它们的源代码是例5-1、例5-2、例5-3和例5-4,其中例5-4是滤波器顶层设计,例5-3是4阶滤波器模块的顶层设计。,图5-6 16阶滤波器顶层结构,图5-7 4阶滤波器,图5-8 16阶滤波器RTL电路图,图5-9 4阶滤波器RTL电路图,【例5-1】16位加法器源代码。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity adder is port(clock : in std_logic; r1x :

28、 in std_logic_vector(15 downto 0); r2x : in std_logic_vector(15 downto 0); r3x : in std_logic_vector(15 downto 0); r4x : in std_logic_vector(15 downto 0); y : out std_logic_vector(15 downto 0) );,end; architecture rtl of adder is signal tmp:std_logic_vector(15 downto 0); begin process(clock) begin i

29、f rising_edge(clock) then tmp = (r1x + r2x) + (r3x + r4x); end if; end process; y = tmp; end;,【例5-2】8位乘法器源代码。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity mult is port ( clock : in std_logic; a_in : in std_logic_vector( 7 downto 0); b_in : in std_logic_vector( 7

30、 downto 0); a_out : out std_logic_vector( 7 downto 0);,b_out : out std_logic_vector( 7 downto 0); r : out std_logic_vector(15 downto 0) ); end; architecture rtl of mult is signal tmp_a, tmp_b: std_logic_vector(7 downto 0); begin process(clock) begin if rising_edge(clock) then,tmp_a = a_in; tmp_b = b

31、_in; r = tmp_a * tmp_b; end if; end process; a_out = tmp_a; b_out = tmp_b; end;,【例5-3】4阶滤波器顶层设计代码。 library ieee; use ieee.std_logic_1164.all; entity filter is port ( clock : in std_logic; din0x : in std_logic_vector( 7 downto 0); coef0x : in std_logic_vector( 7 downto 0); din4x : out std_logic_vecto

32、r( 7 downto 0);,coef4x : out std_logic_vector( 7 downto 0); result : out std_logic_vector(15 downto 0) ); end; architecture rtl of filter is component mult port ( clock : in std_logic; a_in : in std_logic_vector( 7 downto 0); b_in : in std_logic_vector( 7 downto 0); a_out : out std_logic_vector( 7 d

33、ownto 0); b_out : out std_logic_vector( 7 downto 0); r : out std_logic_vector(15 downto 0) );,end component; component adder port ( clock : in std_logic; r1x : in std_logic_vector(15 downto 0); r2x : in std_logic_vector(15 downto 0); r3x : in std_logic_vector(15 downto 0); r4x : in std_logic_vector(

34、15 downto 0); y : out std_logic_vector(15 downto 0) );,end component; signal coef1x,coef2x,coef3x,din1x,din2x,din3x:std_logic_vector(7 downto 0); signal r0x,r1x,r2x,r3x: std_logic_vector(15 downto 0); begin,mult_i0:mult port map(clock,din0x,coef0x,din1x,coef1x,r0x); mult_i1:mult port map(clock,din1x

35、,coef1x,din2x,coef2x,r1x); mult_i2:mult port map(clock,din2x,coef2x,din3x,coef3x,r2x); mult_i3:mult port map(clock,din3x,coef3x,din4x,coef4x,r3x); adder_i:adder port map(clock,r0x,r1x,r2x,r3x,result); end;,【例5-4】16阶滤波器顶层设计代码。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all

36、; entity largefilter is port ( clock : in std_logic; din0x : in std_logic_vector( 7 downto 0); coef0x : in std_logic_vector( 7 downto 0); result : out std_logic_vector(15 downto 0) );,end; architecture str of largefilter is component filter port ( clock : in std_logic; din0x : in std_logic_vector( 7

37、 downto 0); coef0x : in std_logic_vector( 7 downto 0); din4x : out std_logic_vector( 7 downto 0); coef4x : out std_logic_vector( 7 downto 0); result : out std_logic_vector(15 downto 0) );,end component; signal coef4x,din4x,coef8x,din8x,coef12x,din12x,coef16x,din16x:std_logic_vector(7 downto 0); sign

38、al r0x,r4x,r8x,r12x :std_logic_vector(15 downto 0); begin filter_i0:filter port map(clock,din0x,coef0x,din4x,coef4x,r0x); filter_i1:filter port map(clock,din4x,coef4x,din8x,coef8x,r4x); filter_i2:filter port map(clock,din8x,coef8x,din12x,coef12x,r8x);,filter_i3:filterport map(clock,din12x,coef12x,di

39、n16x,coef16x,r12x); process(clock) begin if rising_edge(clock) then result = r0x + r4x + r8x + r12x; end if; end process; end;,5.2.2 滤波器设计和结果观察 滤波器设计流程如下: 1. 在Quartus II中输入源文件并建立工程 根据第2章介绍的方法,首先对例5-1、5-2、5-3和5-4进行编辑输入,然后分别存在D:largefilter文件夹中,并设largefilter.vhd为工程。目标器件选为EP20K200EQC240-3。,2. 设定时钟约束并编译

40、在Assignments菜单中选“Settings”,然后在Settings窗中的Timing Settings项中选中“Clocks”,并在“Default required for”栏键入“50”,选择“MHz”,如图5-10所示。最后进行编译,即启动Processing?Start Compilation。,图5-10 设定设计要求最高时钟频率,3. 了解编译结果 编译结束后,可在编译处理信息栏处看到内部寄存器间最高时钟频率fmax=48.5 MHz,不能达到原设定的50 MHz的要求(图5-11)。为进一步了解本项设计的结果,打开菜单Processing中的“Compilatin Re

41、port”窗,首先点击左栏Timing Analyses左侧的“+”号,并点击“fmax”项,于是将显示如图5-12所示的信息,这些信息表明未能达到50 MHz的要求。,图5-11 编译处理信息窗,图5-12 最高时钟频率时序分析窗,4. 观察Floorplan 最后点击编译报告“Compilatin Report”栏的“Floorplan View”,以便了解适配器在FPGA中的版图的资源利用情况(图5-13)。由Floorplan View中可见,本项设计所用的逻辑宏单元在整个Floorplan中都无序地散布着,这显然是没有进行逻辑锁定的结果,这种布局(Placement)方案常常不利于资

42、源和时钟速度的优化。,图5-13 Floorplan中的逻辑资源应用情况,5.3 应用逻辑锁定技术,在此,以上面给出的数字滤波器的结构方案为例,详细说明Quartus II的逻辑锁定技术的使用方法。如上所述,逻辑锁定形成适配布局约束,从而可以分别优化并固定顶层设计中各层次中的模块,以便在后续的设计编译中,或在更高层次的编译调用中,使得设计项目在适配中保持原模块的布局结构以及相应的硬件特性。在利用逻辑锁定技术的过程中,一旦将设计模块以某种方式进行逻辑锁定后,即可以Verilog Quartus Mapping文件形式(*.vqm)将其优化综合的结果存盘,以便在必要时输出给更大(更顶层)的设计调用

43、。,5.3.1 底层模块设计及其VQM文件保存 以下将给出顶层设计Largefilter的底层模块filter的逻辑锁定设计流程,以及以VQM文件方式存盘的方法。最后可以将此VQM文件输入到更顶层的设计Largefilter工程中进行总体优化设计。VQM文件属于原子级网表文件。 1. 建立待优化模块filter为工程 由上节可以知道,filter是大滤波器largefilter的底层基本模块,对这个模块的锁定、优化有利于对整个设计系统的优化。为此,应该首先解决其逻辑锁定方面的适配。,为了设定filter模块为工程,首先将源程序例5-1、例5-2、例5-3存入一单独文件夹中,如D: filter

44、, 然后打开Quartus II,按照第2章介绍的方法设定D:filter中的filter.vhd为工程,并选EP20K200EQC240-3为目标器件,最后的工程设置信息如图5-14所示。 2. 设置默认需求的最高时钟频率 在编译前,需对filter工程作一些设置。这里首先根据上一节介绍的方法设置默认需求的最高时钟频率,即在如图5-15所示的窗口选择Timing Settings项下的“Clocks”,然后在Default required frequency栏键入“50”,并选择“MHz”。,图5-14 filter工程设置信息,图5-15 设定设计要求最高的时钟频率,3. 设置Setti

45、ngs对话框 在Assignments菜单中选择“Settings“,在Settings 对话框的Category栏中选择Compiler Settings项目下的“Fitting”,显示出的“Fitting”框如图5-16所示。在Settings 的“Timing-driven compilation”栏,确认已选定“Opitimize timing”。为了在优化子模块时将寄存器放置于I/O单元中,需关闭“Optimize I/O cell register placement for timing”项。,图5-16 适配设置窗,4. 设置VQM输出文件 在图5-16中同一Compiler

46、Settings项下,选“Synthesis”,然后在Synthesis 框中打开“Save a node-level netlist into a persistene source file”(如图5-17所示),在“File name”栏中填入filter优化设计后输出的VQM文件名,并指定此文件在产生后存入顶层文件largefilter.vhd所在的文件夹中,即输入:d: largefilter fiter.vqm,以便输出给顶层文件的优化设计(假设d: largefilter为顶层设计所在目录,且其中含有顶层设计文件largefilter .vhd ),最后点击“OK”,关闭Sett

47、ings 框。,图5-17 设置VQM文件存储路径,5. 对设计进行分析与综合 现在开始对设计文件进行分析、排错和综合。在Processing菜单中选择Start?Start Analysis & Synthesis,进入逻辑综合。注意此综合是在未进行逻辑锁定的情况下进行的。,5.3.2 确定逻辑锁定区域及其特性 被逻辑锁定的区域是一种布局/布线的约束,设计者可以在大规模的FPGA中的物理资源区域中任意定义一矩形区域,方法是在Timing Closure floorplan或current Assignments floorplan中,或甚至在已指定的逻辑锁定区域中设定一个逻辑锁定区。设计者可

48、以通过上述方式将设计模块的端口节点或设计实体(设计模块)指定在它设定的逻辑锁定区,使编译器在综合与适配过程中将指定的节点或设计实体放入逻辑锁定区域中。,设定后,可以在floorplan中看到逻辑锁定的确切位置。如5.1节所述,所有的逻辑锁定区域都由两个参数定义,即大小和状态。表5-2给出了三种不同类型的逻辑锁定区域。,表5-2 不同类型的逻辑锁定区域,1. 定义逻辑锁定主区域 定义逻辑锁定主区域(母区域)的步骤如下: 1) 打开逻辑锁定区域定义窗 在Assignments菜单中打开“Timing Closure Floorplan”窗,以便及时观察被锁定区域的大小和位置。然后在同一菜单下打开逻

49、辑锁定区域定义窗“Logiclock Regions Window”(如图5-18)。,图5-18 逻辑锁定区域定义窗,2) 建立一个逻辑锁定主区域 为了建立一个逻辑锁定主区域,双击图5-18中的new,便产生一个可编辑框。在此区域键入待锁定的实体名“filter”,作为对此区域的命名,然后按回车键“Enter”,于是一个含有默认大小和状态的逻辑锁定区域就出现在Timing Closure Floorplan中(见图5-19和图5-20)。,图5-19 已定义了锁定主区域的实体名,图5-20 Timing Closure Floorplan中被锁定的filter区域,3) 确定逻辑锁定主区域的大小和状态 双击图5-19所示的逻辑锁定窗中逻辑锁定区域名“filter”左旁的文件夹符号,将弹出逻辑锁定区域特性定义对话框,即设定filter特性的“Logiclock Region Properties”窗口(如图5-21)。点击此窗的“Size”块,选择“Fixed”,即选此锁定区域为固定大小的区域,然后在“Settings”栏中选宽Width为“1”(1个MegaLABs宽),高Height为“5”(行)(如图5-21),再点击“Set size”以确认之。,然后点击“Location”块,在“state”下选择“Fl

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1