Vivado使用技巧(25):Block Synthesis技术

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FPGADesigner/article/details/82084629

本系列第22~24篇介绍了Vivado综合技术中的各个方面,这里先概述一下:Vivado综合支持使用多种策略(Strategy)和全局设置(Setting)。在RTL或XDC文件中,可以用综合属性来改写某些设置选项。目前设计越复杂,全局设置方式限制了设计的潜在性能,同一设计中不同层次结构可能在不同设置下才能获得最佳表现。

针对此问题,一个解决方法便是Out-of-context(OOC)模式。OOC模式下的层次结构会脱离设计中的其它部分独立运行,但这样也增加了设计流程的复杂度。比如一个设计中需要运行多次综合、OOC模块必须要独立的约束等等。

本文将介绍Vivado提供的块级综合流程(Block Synthesis Flow),允许设计者将某些全局设置和策略应用于特定的层次结构中,且可以与设计中的其它模块不同。


设置块级流程

块级流程的必须在XDC文件中使用BLOCK_SYNTH属性设置,语法如下 :

set_property BLOCK_SYNTH.<option name> <value> [get_cells <instance_name>]
#举例
set_property BLOCK SYNTH.MAX_LUT_INPUT 4 [get_cells FFT]

option_name和value为设置的选项名称和值;instance_name为设置作用的模块实例化名称(不是模块名称)。这样提供了更大的灵活性,比如一个模块可能会实例化多次,不同的实例之间也可以采用不同的设置。

设置之后,选项会应用于该实例和内部所有电路(包括内部调用的其它模块)。一个实例可以设置多个BLOCK_SYNTH属性,没有设置的选项采用默认值。如果仅希望将设置应用于该实例,而不应用于其中的子模块,需要做额外的设置,如:

set_property BLOCK SYNTH.MAX_LUT_INPUT 6 [get_cells FFT/childLevel]

使用该命令将子模块的选项设置为默认值(当然也可以设置为其他值)。当使用块级综合流程时,Vivado会采用自顶向下综合模式。首先综合顶层模块,确保不会影响到设置了其它选项的层次结构。


块级流程选项

Vivado同样也提供了一些预定义的块级流程策略,包括DEFAULTAREA_OPTIMIZEDALTERNATE_ROUTABILITYPERFORMANCE_OPTIMIZED。可以使用如下命令设置块级综合策略:

set_property BLOCK_SYNTH.STRATEGY {<value>} [get_cells <inst_name>] 

Vivado支持设置的块级综合策略选项如下所示:

选项 类型 描述
RETIMING 整型 0/1 是否启用Retiming功能
ADDER_THRESHOLD 整型 4-128 设置综合加法器时开始使用进位链的阈值,该值大于加法操作数位宽之和时采用进位链;小于时采用LUT组合实现。
COMPARATOR_THRESHOLD 整型 4-128 设置综合比较器时开始使用进位链的阈值
SHREG_MIN_SIZE 整型 3-32 设置综合寄存器链时开始使用SRL的阈值,大小超过此值时用SRL实现;小于时用寄存器实现
FSM_EXTRACTION 字符串 AUTO等 设置状态机的编码方式
LUT_COMBINING 整型 0/1 是否启用查找表组合
CONTROL_SET_THRESHOLD 整型 0-128 设置综合寄存器时开始使用控制信号的阈值,当控制信号扇出大于此值时多采用D输入;小于时多采用控制信号输入
MAX_LUT_INPUT 整型 4-6 4不会使用LUT5/LUT6原语;5不会使用LUT6原语;6会使用所有的LUT
MUXF_MAPPING 整型 0/1 是否启用MUXF7/F8/F9接口
KEEP_EQUIVALENT_REGISTER 整型 0/1 合并/保留等效的寄存器

猜你喜欢

转载自blog.csdn.net/FPGADesigner/article/details/82084629