尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Design Compiler:边界优化(Boundary Optimization)

Design Compiler:边界优化(Boundary Optimization) 相关阅读Design Compilerhttps://blog.csdn.net/weixin_45791458/category_12738116.html?spm1001.2014.3001.5482前言默认情况下Design Compiler在综合时不会跨越层次结构进行优化这会导致一些关键路径的逻辑无法得到简化。边界优化(Boundary Optimization)技术允许在保留层次结构的同时跨设计层次进行优化本文就将对此进行讨论。边界优化的分类跨层次结构常量传播如上图所示当不使用边界优化时Design Compiler无法使用通过引脚传播的常量信息这里的常量指的是设计中存在的固定值如使用set_logic_one等命令创建的常量逻辑单元(TIE0)set_case_analysis命令直接影响静态时序分析而只能间接影响综合对子设计中的逻辑进行优化而使用边界优化时通过引脚传播的常量信息将被用于优化逻辑但常量引脚还是被保留了。跨层次结构等价与反向等价信息传播如上图所示当不使用边界优化时Design Compiler无法识别引脚之间的等价与反向等价关系从而对子设计中的逻辑进行优化而使用边界优化时引脚之间的等价与反向等价将被用于优化逻辑但引脚还是被保留了。跨层次结构未连接不可读信息传播如上图所示当不使用边界优化时Design Compiler无法识别未连接的输入/输出引脚从而对子设计中的冗余逻辑进行优化而使用边界优化时与未连接的输入/输出引脚连接的冗余逻辑将被消除但引脚还是被保留了。跨层次结构相位反转如上图所示当不使用边界优化时Design Compiler无法识别跨层次结构的反相器对从而对子设计中的逻辑进行优化而使用边界优化时反相器将可以被移动并穿越层次结构并进行优化。控制边界优化允许边界优化的情况1、使用compile_ultra命令边界优化是自动开启的。2、使用compile -boundary_optimization命令。3、使用compile命令前使用set_boundary_optimization命令将需要进行边界优化的单元或设计的boundary_optimization属性设置为true。4、使用compile_ultra -no_boundary_optimization命令但使用set_boundary_optimization命令将需要进行边界优化的单元或设计的boundary_optimization属性设置为true。注意set_boundary_optimization属性优先级高于compile_ultra命令的-no_boundary_optimization选项。禁止边界优化的情况1、使用compile_ultra -no_boundary_optimization命令使用该选项将禁止所有自动解组即设置-no_autoungroup选项。2、使用compile命令。3、使用compile -boundary_optimization命令前使用set_boundary_optimization命令将需要禁止边界优化的单元或设计的boundary_optimization属性设置为false这也会导致该设计被禁止自动解组。4、使用compile_ultra命令前使用set_boundary_optimization命令将需要禁止边界优化的单元或设计的boundary_optimization属性设置为false这也会导致该设计被禁止自动解组。5、使用compile/compile_ultra命令前使用set_compile_directives命令将需要禁止边界优化的引脚、单元或设计的相应属性设置为false。对于禁止“跨层次结构常量和等价与反向等价信息传播”的特殊处理使用compile命令时使用compile命令或使用compile -boundary_optimization命令前使用set_boundary_optimization命令将需要禁止边界优化的单元或设计的boundary_optimization属性设置为false这两种禁止边界优化的方法只能阻止常量/等价与反向等价信息从父设计传播到子设计而子设计的常量/等价与反向等价信息还是能传播到父设计如果想禁止所有情况下的传播需要将compile_preserve_subdesign_interfaces变量设置为true默认为false如下图所示。使用compile_ultra命令时使用compile_ultra -no_boundary_optimization命令使用-no_boundary_optimization选项将自动把compile_preserve_subdesign_interfaces变量设置为true或使用compile_ultra命令前使用set_boundary_optimization命令将需要禁止边界优化的单元或设计的boundary_optimization属性设置为false并将compile_preserve_subdesign_interfaces变量设置为true等这两种禁止边界优化的方法只能禁止等价与反向等价信息的传播而不足以禁止常量传播需要将compile_enable_constant_propagation_with_no_boundary_opt变量设置为false默认为true。在上面两种情况下Design Compiler在综合时会提示以下信息。Information: Starting from 2013.12 release, constant propagation is enabled even when boundary optimization is disabled. (OPT-1318)举例说明跨层次结构常量传播module top_module ( input wire a, input wire c, output wire out ); wire b 0; logic_circuit uut ( .a(a), .b(b), .c(c), .out(out) ); endmodule module logic_circuit ( input wire a, input wire b, input wire c, output wire out ); assign out ((a | b) c); endmodule图1为RTL代码的GTECH表示图2为不使用边界优化的结果图3为使用边界优化的结果。图1 未综合网表图2 不使用边界优化的结果图3 使用边界优化的结果跨层次结构等价与反向等价信息传播module top_module ( input wire a, input wire b, input wire c, output wire out ); wire d !a; logic_circuit uut ( .a(a), .b(b), .c(c), .d(d), .out(out) ); endmodule module logic_circuit ( input wire a, input wire b, input wire c, input wire d, output wire out ); assign out ((!a b) | (c d)); endmodule图4为RTL代码的GTECH表示图5为不使用边界优化的结果图6为使用边界优化的结果。图4 未综合网表图5 不使用边界优化的结果图6 使用边界优化的结果跨层次结构未连接不可读信息传播​module top_module ( input wire a, input wire b, input wire c, output wire out ); logic_circuit uut ( .a(a), .b(b), .c(c), .out1(), .out2(out) ); endmodule module logic_circuit ( input wire a, input wire b, input wire c, output wire out1, output wire out2 ); assign out1 (a c) | b; assign out2 (a | b) c; endmodule图7为RTL代码的GTECH表示图8为不使用边界优化的结果图9为使用边界优化的结果。图7 未综合网表图8 不使用边界优化的结果图9 使用边界优化的结果跨层次结构相位反转module top_module ( input wire clk, input wire rst, input wire In1, output wire out ); wire D, Q, QB; D_flip_flop dff ( .clk(clk), .rst(rst), .D(In1), .Q(Q), .QB(QB) ); logic_gate lg ( .Q(Q), .out(out) ); endmodule module D_flip_flop ( input wire clk, input wire rst, input wire D, output reg Q, output wire QB ); assign QB ~Q; always (posedge clk or posedge rst) begin if (rst) Q 0; else Q D; end endmodule module logic_gate ( input wire Q, output wire out ); assign out !Q; endmodule图10为RTL代码的GTECH表示图11为不使用边界优化的结果图12为使用边界优化的结果。图10 未综合网表图11 不使用边界优化的结果图12 使用边界优化的结果
返回列表