前面1-3介绍了Vivado综合技术中的各个方面,这里做个总结:Vivado综合支持使用多种策略(Strategy)和全局设置(Setting)。在RTL或XDC文件中,可以用综合属性(attribuite)来改写某些设置选项。但是目前设计越复杂,全局设置方式限制了设计的潜在性能,同一设计中不同层次结构可能在不同设置下才能获得最佳表现;
针对此问题,一个解决方法便是Out-of-context(OOC)模式。OOC模式下的层次结构会脱离设计中的其它部分独立运行,但这样也增加了设计流程的复杂度。比如一个设计中需要运行多次综合、OOC模块必须要独立的约束等;
本文将介绍Vivado提供的块级综合流程(Block Synthesis Flow),允许设计者将某些全局设置和策略应用于特定的层次结构中,且可以与设计中的其它模块不同;
设置块级流程(Setting a block-level flow )
块级流程的必须在XDC文件中使用BLOCK_SYNTH属性设置,语法如下 :
set_property BLOCK_SYNTH.<option name> <value> [get_cells <instance_name>]
For example:
set_property BLOCK_SYNTH.MAX_LUT_INPUT 4 [get_cells fftEngine]
option_name和value为设置的选项名称和值;instance_name为设置作用的模块实例化名称(不是模块名称);
这样提供了更大的灵活性,比如一个模块可能会实例化多次,不同的实例之间也可以采用不同的设置;
设置之后,选项会应用于该实例和内部所有电路(包括内部调用的其它模块)。一个实例可以设置多个BLOCK_SYNTH属性,没有设置的选项采用默认值;
如果仅希望将设置应用于该实例,而不应用于其中的子模块,需要做额外的设置,如:
set_property BLOCK_SYNTH.MAX_LUT_INPUT 6 [get_cells fftEngine/newlevel]
使用该命令将子模块的选项设置为默认值(当然也可以设置为其他值)。当使用块级综合流程时,Vivado会采用自顶向下综合模式。首先综合顶层模块,确保不会影响到设置了其它选项的层次结构;
块级流程选项(block-level flow option)
Vivado同样也提供了一些预定义的块级流程策略,包括DEFAULT、AREA_OPTIMIZED、ALTERNATE_ROUTABILITY和PERFORMANCE_OPTIMIZED。可以使用如下命令设置块级综合策略:
set_property BLOCK_SYNTH.STRATEGY {<value>} [get_cells <inst_name>]
Vivado支持设置的块级综合策略选项如下所示: