| |
一.跨边界综合概述
一个hdl顶层设计一般是由若干个一级模块组成,而一级模块又可能包含若干个二级模块,每一级模块都可能包含更低层次的模块,由此形成设计的层次化。HDL代码综合的时候,可以选择是跨边界综合还是保持设计单元的原有层次结构。
综合时可以保持设计的原有层次,以模块为单位进行优化,可以减少综合所用的时间,因为单个模块的复杂程度是有限的。同时,对某些特别重要的模块(如要跑在更高的时钟频率),可以通过设置层次保持属性让这个模块与设计的其他部分隔离开,让它在每次综合中都保持一样的综合结果。改动设计的其他部分不会影响到该部分的综合结果。综合时应用层次保持属性,结合后续实现过程(如Xilinx的MAP和PAR)中的设计分块(Partition)设置,只要不改变设计分块(Partition)的代码,改变其他部分的代码时,可以重复使用设计分块的上一次实现结果。这种做法可以保证某些重要的模块每一次的实现结果都是一样的,减少实现时间的同时又保证了实现结果每次都能满足时序要求。FPGA的部分重配置功能也要求相应模块在综合时保证层次不改变。设计分块(Partition)的相关内容,Xilinx用户可参考《Hierarchical Design Methodology Guide》(UG748),Atera用户可参考《quartusii handbook》第一卷中第二章《Quartus II Incremental Compilation for Hierarchical and Team-Based Design》。
综合时也可以打破模块的边界,在整个设计范围内进行逻辑优化,虽然综合过程会花费更长的时间,却可以获得更好的综合结果(通过逻辑的整合优化,可以减少资源的使用,同时提高时钟频率)。跨边界综合的目的是充分利用FPGA内部逻辑资源,让资源的利用效率最大化,是根据FPGA资源的特征(如Xilinx的Slice),在wire和reg层面(或者说是LUT/FF层面)进行整合和优化。在下图中,二级模块I2设置了保持原有层次的属性(使用的是XST支持的语法),因此综合后I2的层次得以保留,而I1、I3、I7、I8、I4、I5的层次就被打破。其中I4、I5为I2的内部模块,I2的保持原有层次属性保证的是I2在I0中的层次结构不受破坏,但是I2内部层次会被打破。I4、I5想保持在I2中的层次,必须各自分别设置保持层次属性。
二.跨边界综合的语法和命令
针对不同的综合工具,跨边界综合的命令和语法是不一样的,下面synplify和Xilinx的XST为例,介绍跨边界综合的命令与语法。其中synplify使用的层次保持属性为syn_hier,XST使用的层次保持属性为keep_hierarchy。详细介绍敬请点击以下链接进入:
更多精彩内容,请关注我的主博客,多谢支持
http://blog.163.com/fpga_ip/