Design Compiler:精确映射(-exact_map选项)

📅 2026/8/25 13:38:14
Design Compiler:精确映射(-exact_map选项)
相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482在Design Compiler中使用compile或compile_ultra命令进行综合时可以指定-exact_map选项此时Design Compiler将进行精确映射。当读取RTL设计时Design Compiler内置的HDL Compiler将设计转化为通用时序单元SEQGEN或者称为Generic/Unmapped Sequential Cell和GTECH单元或者称为Generic Technology Cell、可综合操作符等组成的网表如例1和图1所示。// 例1 module simple_register ( input clk, input rst_n, input d, output reg out ); always (posedge clk) begin if (~rst_n) begin out 0; end else begin out d; end end endmodule图1 通用时序单元和GTECH单元组成的网表如果不使用-exact_map选项进行综合Design Compiler会根据设计的实际情况在将通用时序单元映射到具体的触发器或锁存器并可能在考虑与之连接的GTECH单元的情况下将部分组合逻辑功能融入触发器或锁存器的功能。图2和图3都有可能是例1的综合结果。图2 例1的一种综合结果非精确映射图3 例1的一种综合结果非精确映射图3所示的综合结果使用了带同步复位端的触发器代替了图2中数据输入端前的数据选择器功能。如果使用-exact_map选项进行综合Design Compiler在进行映射时不会将与通用时序单元连接的GTECH单元考虑在内配合sync_set_reset、sync_set_reset_local、sync_set_reset_all等综合指令一起使用能使综合结果更加可预测如下所示。// 例2 module simple_register ( input clk, input rst_n, input d, output reg out ); // synopsys sync_set_reset rst_n always (posedge clk) begin if (~rst_n) begin out 0; end else begin out d; end end endmodule图4 通用时序单元和GTECH单元组成的网表精确映射的结果是一个带同步复位端的触发器如图5所示。图5 例2的一种综合结果精确映射但是即使使用了精确映射也无法保证引脚不交换。以例1为例其触发器的下一状态方程为如果令d为1则此时可以令也就是说把重新映射为如图6所示。图6 例1的一种综合结果精确映射下面有几点需要注意。1、精确映射会让Design Compiler在进行时序映射时更加保守这可能会降低结果质量(QoR)。2、如果使用了精确映射-exact_map选项综合时会自动禁止相位反转(Phase Inversion)即自动使用-no_seq_output_inversion选项选项此时不允许Design Compiler将反相器移动并穿过寄存器边界。3、如果在使用精确映射-exact_map选项的同时启动了门控时钟优化-gate_clock选项对于那些参与时钟门控优化的寄存器工具可能无法遵守精确映射的要求。