DC逻辑综合及优化
构级优化设计结构的选择在DW中选择最合适的结构或算法实现电路功能数据通路的优化选择CSA等算法优化数据通路设计共享共同的子表达式算术电路减少比较器数目资源共享算术运算资源共享的默认策略是约束驱动可以使用DC的面积优化策略set hlo_resource_allocation areaset hlo_resource_allocation none不使用资源共享此时需要在RTL代码中写出相应代码一般让工具自行综合进行资源共享重新排序运算符号HDL编译器从左到右解析表达式括号的优先级更高为了使电路的延迟减少可以改变表达式的次序或用括号强制电路使用不同的拓扑结构eg. 将SUM A*BC*DEFG改为SUM EFGC*DA*B或SUM A*B(C*D((EF)G))逻辑级优化结构优化 → 可用于速度和面积优化结构优化是DC默认的逻辑级优化策略在电路中加入中间变量和逻辑结构寻找设计中的共用子表达式门级电路与约束有关可能改变时序路径延时逻辑级结构优化不会改变设计层次命令set_structure true展平优化 → 主要用于速度优化面积会很大展平优化将组合逻辑路径减少为两级减去中间结构变为乘积之和sum of productsSOP的电路即先与后或命令set_flatten true -effort low|medium|high与约束无关拓扑不变只进行布尔化简门级优化延迟优化映射组合功能与时序功能组合功能映射选择满足时间与面积要求的组合单元进行设计。对每个逻辑表达式进行多个变形优化时选择一个能够达到要求的逻辑表达式。当器件有多个驱动且驱动中有关键路径那么DC就会把关键路径分割出来以达到时序要求面积换速度时序功能映射选择满足时间与面积要求的时序单元进行设计为了提高速度和减少面积DC会选择较复杂的时序单元。DFT当设计中有DFT插入扫描寄存器时为保证时序要求编译时加上扫描寄存器选项看是否违规。DRC修整尝试在不影响面积和速度的情况下修整映射时DC检查电路是否满足设计规则的约束若有违反DC会通过插入缓冲器buffers和修改单元的驱动能力resizes cells进行设计规则修整。以时序为代价的DRC修整面积优化if加上了面积优化在最后阶段会进行面积优化其他优化情况当一个寄存器驱动多个寄存器时DC将驱动寄存器进行复用同时将驱动进行分割。使用DC拓扑模式加上-timing选项自动开启寄存器复制优化模块多个例化名字唯一化DC在为设计综合时会自动的为每一个模块产生一个唯一的有名字的拷贝。变量uniquify_naming_style可以用来控制多次例化子模块每个拷贝的命名方式man uniquify_naming_style避免命名冲突可以对不同实例分别优化。时序优化综合后查看报告一般会出现时序问题当时序违规在时钟周期的25%以上需要重新修改RTL代码时序违规在25%以下时有以下时序优化方法使用compile_ultra命令包括各种时间优化算法的开关选项使用compile_ultra命令时使用以下变量实现DW层次的自动取消set compile_ultra_ungroup_dw true #默认值为true使用compile_ultra命令时使用以下变量当设计中一些模块的规模小于或等于变量的值模块层次被自动取消set compile_auto_ungroup_delay_num_cells 100 #默认值500为了设计结果最优化建议将compile_ultra命令和DW library一起使用边界优化在综合时DC会对传输常数、没有连接的引脚和补码信息进行优化。compile_ultra命令中默认选项为-no_boundary_optimization不作边界优化BRT技术behavioral re-timing通过对门级网表进行管道传递或称为流水线使设计的传输量throughout更快。BRT两个命令optimize_registers适用于包含寄存器的门级网表不是compile_ultra的开关选项可单独使用也可在compile_ultra命令中加上-retime选项set optimize_registers true -design Pipeline转移前后级寄存器的组合逻辑从而使路径时序满足约束不会插入新寄存器该命令首先对时序作优化接着优化面积compile_ultra命令的-retime选项当有一个路径不满足而相邻的路径满足要求时DC会进行路径间的逻辑迁移以同时满足两条路径的要求也称为adaptive retiming。重排时对寄存器重新命名且改变寄存器位置此类信息存储在SVF文件中当不需要迁移某些器件例如输出流水线寄存器时使用以下命令set_dont_retime xxx truepipeline_design适用于纯组合电路的门级网表pipeline_design -period 10 -stage 3会新增流水线寄存器帮助时序收敛注意使用此命令时需要在RTL设计中将寄存器预置好对组合逻辑进行分割工具可以知道哪些逻辑可以合法切分此命令会在组合逻辑中再插入寄存器以进行优化。使用compile -scan -inc命令进行支持可测性设计的增量编译编译时DC只做门级编译加入-map high选项将会迫使DC尽最大努力使用更多算法去达到设计目标。使用自定义路径组合关键范围自定义路径组综合时工具只对一个路径组的最差路径作独立的优化但并不阻碍另外自定义路径组的路径优化。产生自定义路径组可以帮助综合器在做时序分析时采用各自击破divide-and-conquer的策略。设置不同路径组优化权重进行着重优化关键范围DC默认只对一个路径组内的关键路径进行时序优化可以设置关键范围使DC在关键路径的延时下面某个延时值之内的路径进行优化当set_critical_range命令后优化时使关键路径时序变差DC将不改进次关键路径时序。建议关键范围的值不要超过关键路径总值的10%。重新划分模块对于一般设计好的模块划分应该做到模块的输出边界是寄存器的输出端从而使每个模块除时钟端口外的所有输入端口的延时是相同的等于寄存器的时钟引脚CLK到输出引脚Q的延时。在顶层集成中避免使用胶合逻辑使用DC修改划分自动修改划分compile -auto_ungroup area|delay #面积和延时之中选一个手动修改group -design_name NEW -cell_name U12 {U1 U2} ungroup -all -flatten