账号:
密码:
最新动态
产业快讯
CTIMES / 文章 /
FPGA系统之增量设计
毕其功于一役的FPGA设计

【作者: Fred Wickersham】2005年12月03日 星期六

浏览人次:【5785】

FPGA设计工程师总是希望其设计能够“毕其功于一役”,但由于复杂的大型系统中牵涉到各种复杂功能、性能要求,以及数量庞大的系统闸,因此,不管花费多少的时间和精力,通常都需要更改设计、修正一些逻辑问题或做进一步的优化。


与传统的设计流程相比较,为支持设计/合成及布局布线实体实现而开发的增量设计流程(incremental design flow),却非常适用于对设计中的特定部分进行修改或优化,而且不会影响到其他已经达到设计要求的部分。如果因为系统内存受限或外延的运行时间,而不适合采用从上而下的严密方法时,设计工程师还可采用增量设计流程完成一项大型的设计。


此外,在增量设计流程中还采用了一些其他的设计策略,以便在继续且独立地开发设计中某些部分的同时,可以将该设计中另外的一些部分冻结。


传统设计的建立和实体实现

一般的FPGA开发流程有以下几个步骤:


  • ●用HDL语言建立设计;


  • ●执行合成前(pre-synthesis)仿真;


  • ●设定约束;


  • ●合成设计;


  • ●执行合成后(post-synthesis)仿真;


  • ●进行布局布线;


  • ●以及分析设计的时序性能。



若能满足功能和时序性能的要求,则可产生编程档案并对组件进行编程。Libero IDE(Integrated Design Environment;整合设计环境)白金版工具配备了Actel及其合作伙伴所提供的一流开发工具,可成功地管理“一次性成功”的设计。为了改善性能,SmartTime时序分析和约束管理工具更提供了识别和分析设计中关键路径的功能。此外,Magma PALACE实体合成工具一般都能提升Fusion可编程系统芯片(PSC)和ProASIC3组件的整体性能。


但若在初始布局完成后,还需要进一步将设计的某些部分优化,那该怎么办?若性能还不稳定,或有些区块 (block) 还有功能问题时,又该怎么办?


增量设计概述

增量设计流程(图一)与传统的合成/实体实现流程非常相似。不过,该流程在初始合成计划设定和编译之后,增加了一些编译点(compile point)。这些编译点是设计的一部分,但以相对独立的合成单元存在;它们有自己的约束档案,并个别优化;而且只在必要时,才需根据设计相依性(design dependency)分析和设计变更性质进行重新合成。


为确保增量设计的稳定性,以及实现具有多个输出网表的阶层化布局布线(每个编译点有一个输出网表,每个设计的顶层有一个网表),这些编译点会被锁定。锁定编译点是指在合成该编译点的上一层时,不对该点重新优化,其阶层接口(hierarchical interface)保持不变,且不对其边界进行优化。这意味着同一个被锁定的编译点的所有范例,都将采用相同的实体实现,在合成中均获得相同的对待。


另外,设计团队可同时在各个编译点独立展开工作。每个编译点均视为可进行增量修改和个别映像的单独区块。设计中可识别和套迭任意数目的编译点。采用编译点后,就可管理设计变更,且不影响设计的其他部分。


增量设计流程中采用一种“基于差异”的增量合成方法,记录设计的变化和相依性。这样,只有那些直接受增量变更影响的设计部分,才会重新合成。这种合成方法也可确保网表中所作的增量变更,能被相对应的网表导入和编译功能所识别。设计工程师可用Layout Options(布局选项)菜单中的Incremental Mode(增量模式)和Lock Existing Layout(锁定现有布局)选项来尽可能地保持原有的布局布线。只有那些与合成工具产生的编译点变更直接相关的布局部分,才会被更新和修改。


Synplify Pro合成工具的MultiPoint功能和Actel的Libero整合设计环境(IDE)一起提供有效的增量设计方法,管理真正的工程设计变更通知(engineering change order;ECO)需求。两者的结合使设计工程师能对原设计作模块级变更,即只更改那些需要变更的部分。这种设计流程可将变更对那些原已成熟设计部分的影响降到最低,因此能够节省时间和资源。


例如,可用Synplify Pro中的MultiPoint为日后设计或重新设计预留多个编译点。也可将设计分成一些较小的合成对象,以便对其中一些区块进行修改,同时又不影响另一些区块。在特大型设计中,MultiPoint还能对增量区块进行设计和合成,以避免发生系统内存或运行时间方面的问题。


Libero可接受Synplify Pro的MultiPoint合成所产生的更新网表。Libero中增量布局布线流程提供ECO方法,而且,只更新那些需要更新的布局部分,原布局中(由用户选择)的其余部分将不受影响。显然地,用增量布局方法比重新进行整个布局快许多。


在许多情况下,可能需要回到最初的设计,进行功能和性能修改,使其达到设计的要求。此时,若使用Synplify Pro中的MultiPoint合成和Libero IDE中的布局布线选项,设计工程师就可用有效的增量ECO模式方法,以最短的时间完成设计更新,且不会影响到那些已经完成的宝贵设计和开发工作。


而且,Libero IDE中的设计视图可以在同一设计计划中,独立保存设计的不同版本。这个功能可让设计工程师保存先前约束和布局布线的档案,进而在增量设计布局与原来的布局间进行比较。这样,就能轻松判断增量修改后的设计是否能满足设计要求,或原来的方案是否更好些。有了这些视图,就能轻松地在原始布局上进行修正,或以各增量布局为起点,逐一逐次地进行更改,并比较每次迭代的结果。


《图一 利用Synplify Pro和Libero IDE实现的增量设计流程》
《图一 利用Synplify Pro和Libero IDE实现的增量设计流程》

增量设计流程具有许多优点:


  • ●可将大型设计分解成一些较小的区块,减少合成和布局布线的整体执行次数和内存需求;


  • ●可在Synplify Pro中标示出网表或布局中感兴趣的区域,以增量方法进行修改,并且将对原布局的影响降到最低,同时还能节省重新合成和布局运行时间;


  • ●传统从下到上的设计需要设计工程师编写和维护一些费时且易出错的脚本,用于引导合成和记录设计的相依性。增量流程采用基于差异的增量合成方法,不需要这类脚本;



设计课程

准备采用增量流程的设计

建立设计后,使用Synplify Pro合成工具中MultiPoint的第一步是,在启动Synplify Pro时建立实现选项。该选项包含组件、速度级别、全局频率以及其他设计和优化参数。之后,也可以建立一些采用不同参数或包含设计变更的实现方案,来测试设计的变更效果。例如可为初始参数和HDL设计代码建立名为“实现方案 1”的实现方案。


Synplify Pro的Compile Only(纯编译)功能有助于Synplify Pro的SCOPE约束编辑器理解设计中的阶层结构。Synplify Pro中的SCOPE约束编辑器管理合成和布局布线的约束条件,同时也用于定义各编译点及其相对应的约束条件。编译点和约束条件都保存在约束档案中,作为该实现方案的一部分,且约束条件已设定为编译点定义的一部分。编译点被定义在新的顶层约束档案中,或者说,编译点的定义被添加到已有的顶层约束档案(.sdc)中。


然后,从Synplify Pro的工具栏中启动SCOPE,并从Select File Type(选择文件类型)对话框中选择Top Level Module(顶层模块)。使用这个菜单命令,可根据设计识别出的模块列表建立各编译点。用户可锁定某些感兴趣的模块或功能区块。这些被锁定的区块将被Synplify Pro识别为编译点,并同时设定好其他的一些顶层约束,例如:输入/输出延迟、频率频率或多周期路径等。


必须在相对应的.sdc档案中为每个编译点规定其约束条件,并在顶层.sdc档案中为整个设计添加单独的顶层约束条件。设计环境提供名为Create SCOPE File(建立SCOPE档案)的对话框,让用户可以轻松地建立编译点和约束条件。


在SCOPE中完成编译点和约束的设定后,就可以对顶层设计进行合成处理。合成设计可分为三个步骤︰


  • (1)从最底层向上合成编译点;即从该设计阶层架构的最底层的编译点开始合成。每个编译点被独立合成。Synplify Pro为每个编译点建立子目录,目录按编译点命名。该目录储存编译点的一些中间档案,如RTL网表、映像网表以及模型建立档案。模型建立档案包含合成下一层时所需的阶层界面时序和资源讯息。该档案一旦生成,就不需要更新,除非出现界面变更或用户有特殊要求需要更改。


  • (2)所有编译点都合成后,Synplify Pro将根据各编译点的模型建立讯息,从上而下合成整个设计。


  • (3)然后为整个设计产生单一网表和约束档案。



分析Synplify Pro的结果

评估合成结果的方法有好几种。Synplify Pro将时序和区域写入实现方案目录中的日志档案。可在Synplify Pro的HDL Analyst RTL和Technology schematic views中评估设计;确定其是否已达到设计目的。也可检视和隔离某些关键路径,搜索和标示出某些重点设计目标,在源文件间进行交叉探测(cross-probe)。在这个层面上发现的任何错误都应当予以修正。


合成或以增量方式重新合成

Synplify Pro可以让用户以增量方式合成设计或对整个设计进行合成。如果某一编译点从未改变,Synplify Pro便会使用前次合成执行时产生的模型建立档案。可选择以增量方式合成设计(即执行run incrementally指令),该指令只合成编译点;而且,只有那些已经出现原始码(source code)、约束或实现变更的编译点才会改变。也可用re-synthesize all(重新合成所有)指令重新合成整个设计。一般来说,选择以增量方式合成设计比较省时。


实体实现:将更新的网表导入Libero

一旦Synplify Pro产生网表,就自动成为Libero IDE档案管理器的一部分,并且可用于布局布线(即可被布局功能使用)。在设计流程和档案管理器与Libero之间的用户接口上,很容易就可以找到和选出Synplify Pro所建立的网表实现方案,如(图二)。


《图二 在Libero IDE中识别和选择网表的用户接口》
《图二 在Libero IDE中识别和选择网表的用户接口》

假设该网表是更新后的网表,包含设计和合成过程中产生的增量变更,用户可能首先希望保护Libero初始布局布线过程中所产生的原始布局。在Libero中,可将原始布局保存为实体设计View(也称为implementation)档案,可按使用的方便性为该视图命名,例如命名为Design_Layout_1。Libero不会用更新的网表结果覆盖Design_Layout_1这个档案,它可以在同一计划中建立新的View。例如,可将名为Design_Layout_2的档案用于存放更新网表的实现和测试结果。这个功能让用户能够比较用Synplify Pro产生增量网表变化前后的结果。


接下来,在Libero中打开实体实现工具Designer,将更新的网表用新的实现方案名称导入Libero,并编译设计。


编译设计后,在Libero的布局选项中完成设计布局。该菜单的默认选项(default selection)会对整个布局进行重新布局布线。对于包含已经MultiPoint更新后的网表,建议采用完全布局布线。


完全布局布线的布局效率最高,但需要对所有时序进行重新验证。从增量修改策略的角度来看,只对那些直接受增量变化影响的布局部分进行重新布局布线也许更为有利。布局选项菜单包括Place Incrementally(放置增量)、Lock Existing Placement(Fix;锁定现有放置或修正)和Route Incrementally(布线增量)。


Place Incrementally(没有锁定)使用现有的组件布局作为参考起始点,但大多数情况下,会得到不同的布局结果。Place Incrementally采用针对组件增量布局的高级算法,以尽可能地满足时序要求。用Lock Existing Placement(Fix)锁定现有的布局,可降低布局结果因增量变更而引起的不可预测性,这是因为Libero的布局过程没有涉及到所有的固定(不改变的)区块。


若加入增量变更,用户需要确保FPGA数组具有足够的设计空间。如果增量变更大,而且设计空间已经非常紧张,布局便可能不会成功。如果事先知道以后会进行增量变更,可使用Libero IDE的平面空间规划工具(Chipplanner)在芯片上为变更保留一些区域。该方法与锁定初始布局配合,就可快速、有效地将增量变更加入,而且能按要求保留原布局中的某些部分。


增量布线企图保留设计的现有布线,但并不能保证其不会受到影响,因为这取决于网表变更的性质。


《图三 Libero IDE布局选项菜单》
《图三 Libero IDE布局选项菜单》

评测更新后的布局

完成布局后,使用Libero的静态时序分析工具SmartTime来验证新的实现方案之整体组件性能;必要时,分析关键路径。比较Design_Layout_1和Design_Layout_2增量布局流程的性能结果,并确定增量更新是否已达到设计目标,如(图三)。


组件编程和除错

在采用ECO流程达到设计目标后,就可使用Libero IDE提供的FlashPro系统内编程(ISP)工具、Silicon Sculptor编程工具,以及Synplicity的 Identify及Actel的Silicon Explorer组件除错工具和验证工具。


结论

在采用ECO流程达到设计目标后,就可使用Libero IDE提供的FlashPro系统内编程(ISP)工具、Silicon Sculptor编程工具,以及Synplicity的 Identify及Actel的Silicon Explorer组件除错工具和验证工具。


Synplify Pro MultiPoint合成和Libero IDE开发工具为管理ECO需求提供了一有效的增量设计流程。两者结合后,使设计工程师能对原设计进行模块级的变更,而且只更改那些需要变更的部分。这种设计流程可将变更对那些原已成熟设计部分的影响降到最低;由于不需要对整个设计重新布局,因而节省了时间。用户可使用Synplify和 Libero中的实现选项和视图,建立起不同设计的选项方案,进而分析和比较这些方案,并选出性能最佳的方案。


相关文章
专攻低功耗工业4.0应用 可程式化安全功能添防御
以设计师为中心的除错解决方案可缩短验证时间
移动演算法 而非巨量资料
最大限度精减电源设计中输出电容的数量和尺寸
Nexus技术平台:重新定义低功耗、小尺寸FPGA
comments powered by Disqus
相关讨论
  相关新闻
» 美光针对用户端和资料中心等市场 推出232层QLC NAND
» 摩尔斯微电子在台湾设立新办公室 为进军亚太写下新里程碑
» 爱德万测试与东丽签订Micro LED显示屏制造战略夥伴关系
» 格斯科技携手生态系夥伴产学合作 推出油电转纯电示范车
» Arm:因应AI永无止尽的能源需求 推动AI资料中心工作负载


刊登廣告 新聞信箱 读者信箱 著作權聲明 隱私權聲明 本站介紹

Copyright ©1999-2024 远播信息股份有限公司版权所有 Powered by O3  v3.20.1.HK84SB6N9C4STACUKE
地址:台北数位产业园区(digiBlock Taipei) 103台北市大同区承德路三段287-2号A栋204室
电话 (02)2585-5526 #0 转接至总机 /  E-Mail: webmaster@ctimes.com.tw