Vivado模块化综合技术概述

尽管Vivado提供了不同的综合策略,同时用户还可根据设计需求对每种策略下的选项进行优化,形成用户策略,但毕竟这些选项是全局的,应用于所有模块的。这就意味着某些选项对设计中的某些模块是不合适的。例如,将-no_lc选中以阻止LUT Combining,但在某些模块中如果LUT没有对布线拥塞构成威胁,允许LUT Combining则可以节省LUT资源。类似地,全局设定的-shreg_min_size未必适合于所有模块。Vivado的模块化综合技术则有效解决了这一弊端,实现了对模块的差异化处理,尤其是面对设计日趋复杂的情形下,细粒度地管理每个模块可为加速时序收敛带来好处。

模块化综合技术需要通过Tcl脚本写在XDC文件中,具体格式如下:
set_property BLOCK_SYNTH. \
[get_cells ]
这里,option name和value具体内容可参考ug901 (V2017.4) Table 3-1。需要注意的是get_cells后面跟的是实例化的名字,而非entity或module名字。

模块化综合技术有如下特征:
1. 对同一模块可以使用多个option
例如,当综合策略为ALTERNATE_ROUTABILITY时,-keep_equivalent_register是不勾选的,即等效寄存器会被合并,而这里可通过将KEEP_EQUIVALENT_REGISTER的值设置为1来保留等效寄存器。同样地,通过将FSM_EXTRACTION的值设置为OFF来覆盖原有的值。可见,模块化综合的option优先级高于全局设定的值。

2.模块化综合的option是向下继承的,而且是可以嵌套的
例如,针对模块uart_rx_i0(实例化名字),RETIMING = 1 MAX_LUT_INPUT = 4(不允许工具推断出LUT5和LUT6),则该模块下的所有子模块均遵守这一原则。但如果该模块下的子模块uart_baud_gen_rx_i0(实例化名字)允许工具推断出LUT5和LUT6,则可将MAX_LUT_INPUT值设置为6。从而形成如下约束。


3. 模块化综合技术所涉及到的模块的层次不受全局选项-flatten_hierarchy的影响
这意味着无论-flatten_hierarchy为何值,模块化综合技术中用到的层次会被严格保留,这可能会影响综合质量(QoR),因此,在使用模块化综合技术时要注意层次化对综合的影响。

结论
模块化综合技术使得工具可以对不同模块实现差异化处理,这种差异化处理能够更加匹配设计需求,提高综合后的QoR。
模块化综合技术需要通过Tcl脚本写在.xdc文件中。最好创建一个block_synth.xdc文件专门用于管理工程的模块化综合。
模块化综合技术不用全局综合选项-flatten_hierarchy的影响,其所涉及到的层次会被Vivado保留下来。