ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Formality:参数化设计的命名规则

Formality:参数化设计的命名规则 相关阅读Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482目录template_naming_styletemplate_parameter_styletemplate_separator_style举例说明与Design Compiler保持一致情况一情况二在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时一个参数化的设计或者说模块可能因为其参数覆盖而出现不同的结构此时原来的设计名无法进行区分该设计将会根据其参数名和参数值进行重命名注意是设计名而不是实例名。这行为不仅仅出现在Formality中Design Compiler也是如此在这两个工具中都是由以下三个变量控制该行为。变量名默认值template_naming_style%s_%ptemplate_parameter_style%s%dtemplate_separator_style_template_naming_style该变量决定设计名与参数名和值的分隔字符串值必须包含%s表示原始设计名和%p表示参数名和值。例如对于具有值为1的参数parm的名为DesignName的设计默认的%s_%p将生成名称DesignName_parm1而%s$%p、%s_*_%p和%s%p将分别生成名称DesignName$parm1、DesignName_*_parm1和DesignNameparm1。template_parameter_style该变量决定参数名与值的分隔字符串值必须包含%d表示参数值可以包含%s表示参数名。例如对于具有值为1的参数parm的名为DesignName的设计默认的%s%d将生成名称DesignName_parm1而%s$%d、%s%d和%s_%d将分别生成名称DesignName_parm$1、DesignName_parm1和DesignName_parm_1。template_separator_style该变量决定多个参数/值的分隔需要注意的是参数/值在名中的顺序与其定义的顺序一致。例如对于一个名为DesignName的设计其参数名为a、b和c对应的值分别是1、2、3默认的_将生成名称DesignName_a1_b2_c3而%将生成名称DesignName_a1%b2%c3。对于以上变量如果设计有一个非整数参数或者template_naming_style为空这些变量的以下定义将被锁定变量名默认值template_naming_style%s_%ptemplate_parameter_style%dtemplate_separator_style_举例说明假设有以下的Verillog代码实例u1重定义了参数WIDTHA和WIDTHB而实例u2重定义了参数WIDTHB。module param_module #(parameter WIDTHA 8, parameter WIDTHB 8, parameter WIDTHSUM 8)( input [WIDTHA-1:0] a, input [WIDTHB-1:0] b, output [WIDTHSUM-1:0] sum ); assign sum a b; endmodule module top_module ( input [3:0] a1, b1, output [7:0] sum1, input [15:0] a2, b2, output [20:0] sum2 ); param_module #(.WIDTHA(4), .WIDTHB(4)) u1 ( .a(a1), .b(b1), .sum(sum1) ); param_module #(.WIDTHB(16)) u2 ( .a(a2), .b(b2), .sum(sum2) ); endmodule在Formality读取RTL代码后容器中只存在两个设计名为top_module和param_module如图1所示。图1 未展开的设计在点击Set Top进行展开后此时容器中出现了额外的两个设计名为param_module_WIDTHA4_WIDTHB4和param_module_WIDTHB16这符合默认情况。图2 展开后的设计当进行以下变量设置时展开后的设计情况如图3所示。变量名设置值template_naming_style%s-%ptemplate_parameter_style%s%dtemplate_separator_style^图3 一种自定义的风格大部分情况下保持这三个变量的初值即可因为如果变量中包含了除字母、数字、下划线和美元符外的其他字符时会导致转义标识符的出现这可能会给一些EDA工具的识别带来困难如下文所示。Verilog基础简单标识符和转义标识符https://blog.csdn.net/weixin_45791458/article/details/140436528?ops_request_misc%257B%2522request%255Fid%2522%253A%252281da22721a1b9285e5fdcaba0f750691%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_id81da22721a1b9285e5fdcaba0f750691biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-140436528-null-null.nonecaseutm_term%E8%BD%AC%E4%B9%89spm1018.2226.3001.4450与Design Compiler保持一致如果在Design Compiler中进行了这三个变量的设置为了与Formality保持一致性Design Compiler会通过SVF文件将参数设计重命名的信息传递给Formality如下两种情况所示。情况一# Active SVF file /home/zhangchen/Desktop/2222/default.svf #----------------------------------------------------------------------------- # This file is automatically generated by Design Compiler # Filename : /home/zhangchen/Desktop/2222/default.svf # Timestamp : Mon Jan 6 22:16:44 2025 # DC Version: O-2018.06-SP1 (built Jul 19, 2018) #----------------------------------------------------------------------------- guide guide_environment \ { { cwd /home/zhangchen/Desktop/2222 } } guide_instance_map \ -design { top_module } \ -instance { u1 } \ -linked { param_module-WIDTHA8^WIDTHB8 } guide_mark \ -type { svfMarkTypeBegin } \ -phase { svfMarkPhasePresto } guide_info \ -version { /home/zhangchen/Desktop/2222/test.v 15.078 } guide_mark \ -type { svfMarkTypeEnd } \ -phase { svfMarkPhasePresto } guide_instance_map \ -design { top_module } \ -instance { u2 } \ -linked { param_module-WIDTHA16^WIDTHB16 } guide_mark \ -type { svfMarkTypeBegin } \ -phase { svfMarkPhasePresto } guide_info \ -version { /home/zhangchen/Desktop/2222/test.v 15.078 } guide_mark \ -type { svfMarkTypeEnd } \ -phase { svfMarkPhasePresto } guide_environment \ { { elaborate { -library DEFAULT -architecture verilog top_module } } \ { current_design top_module } \ { target_library fast.db } \ { current_design top_module } } guide_transformation \ -design { param_module-WIDTHA16^WIDTHB16 } \ -type { map } \ -input { 16 src1 } \ -input { 16 src2 } \ -output { 16 src3 } \ -pre_resource { { 16 } add_6 UADD { { src1 } { src2 } } } \ -pre_assign { src3 { add_6.out.1 } } \ -post_resource { { 16 } add_6 ADD { { src1 } { src2 } } } \ -post_assign { src3 { add_6.out.1 } } guide_transformation \ -design { param_module-WIDTHA8^WIDTHB8 } \ -type { map } \ -input { 8 src4 } \ -input { 8 src5 } \ -output { 8 src6 } \ -pre_resource { { 8 } add_6 UADD { { src4 } { src5 } } } \ -pre_assign { src6 { add_6.out.1 } } \ -post_resource { { 8 } add_6 ADD { { src4 } { src5 } } } \ -post_assign { src6 { add_6.out.1 } } guide_environment \ { { current_design top_module } } #---- Recording stopped at Mon Jan 6 22:17:23 2025 setup情况一中的guide_instance_map命令将会在preverify模式处理并进行设计重命名。情况二# Active SVF file /home/zhangchen/Desktop/2222/default.svf #----------------------------------------------------------------------------- # This file is automatically generated by Design Compiler # Filename : /home/zhangchen/Desktop/2222/default.svf # Timestamp : Mon Jan 6 22:21:03 2025 # DC Version: O-2018.06-SP1 (built Jul 19, 2018) #----------------------------------------------------------------------------- guide guide_environment \ { { dc_product_version O-2018.06-SP1 } \ { dc_product_build_date { Jul 19, 2018 } } \ { bus_dimension_separator_style ][ } \ { bus_extraction_style %s\[%d:%d\] } \ { bus_multiple_separator_style , } \ { bus_naming_style %s[%d] } \ { bus_range_separator_style : } \ { dc_allow_rtl_pg false } \ { hdlin_allow_4state_parameters TRUE } \ { hdlin_enable_hier_naming FALSE } \ { hdlin_enable_upf_compatible_naming FALSE } \ { hdlin_generate_naming_style %s_%d } \ { hdlin_generate_separator_style _ } \ { hdlin_infer_enumerated_types FALSE } \ { hdlin_optimize_enum_types FALSE } \ { hdlin_preserve_sequential none } \ { hdlin_sverilog_std 2012 } \ { hdlin_sv_packages enable } \ { hdlin_sv_union_member_naming FALSE } \ { hdlin_vhdl_std 2008 } \ { hdlin_vrlg_std 2005 } \ { hdlin_while_loop_iterations 4096 } \ { link_portname_allow_period_to_match_underscore false } \ { link_portname_allow_square_bracket_to_match_underscore false } \ { port_complement_naming_style %s_BAR } \ { simplified_verification_mode FALSE } \ { template_naming_style %s-%p } \ { template_parameter_style %s%d } \ { template_separator_style ^ } \ { upf_iso_filter_elements_with_applies_to ENABLE } \ { upf_isols_allow_instances_in_elements true } \ { target_library fast.db } \ { search_path { . /opt/Synopsys/syn2018/syn/O-2018.06-SP1/libraries/syn /opt/Synopsys/syn2018/syn/O-2018.06-SP1/minpower/syn /opt/Synopsys/syn2018/syn/O-2018.06-SP1/dw/syn_ver /opt/Synopsys/syn2018/syn/O-2018.06-SP1/dw/sim_ver } } \ { synopsys_root /opt/Synopsys/syn2018/syn/O-2018.06-SP1 } \ { cwd /home/zhangchen/Desktop/2222 } \ { current_design top_module } } guide_transformation \ -design { param_module-WIDTHA16^WIDTHB16 } \ -type { map } \ -input { 16 src1 } \ -input { 16 src2 } \ -output { 16 src3 } \ -pre_resource { { 16 } add_6 UADD { { src1 } { src2 } } } \ -pre_assign { src3 { add_6.out.1 } } \ -post_resource { { 16 } add_6 ADD { { src1 } { src2 } } } \ -post_assign { src3 { add_6.out.1 } } guide_transformation \ -design { param_module-WIDTHA8^WIDTHB8 } \ -type { map } \ -input { 8 src4 } \ -input { 8 src5 } \ -output { 8 src6 } \ -pre_resource { { 8 } add_6 UADD { { src4 } { src5 } } } \ -pre_assign { src6 { add_6.out.1 } } \ -post_resource { { 8 } add_6 ADD { { src4 } { src5 } } } \ -post_assign { src6 { add_6.out.1 } } guide_environment \ { { current_design top_module } } #---- Recording stopped at Mon Jan 6 22:21:09 2025 setup情况二中的第一条guide_environment命令将会在setup阶段读取SVF文件时就处理并将Formality中这三个变量的值设置为与Design Compiler一致。有关SVF文件的更详细内容请参考下文。Design Compilerset_svf命令以及SVF文件简介https://chenzhang.blog.csdn.net/article/details/144069207
返回列表