Formality:参数化设计的命名规则
2026/9/17 22:50:33 网站建设 项目流程

相关阅读

Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


目录

template_naming_style

template_parameter_style

template_separator_style

举例说明

与Design Compiler保持一致

情况一

情况二


在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时,一个参数化的设计(或者说模块)可能因为其参数覆盖而出现不同的结构,此时原来的设计名无法进行区分,该设计将会根据其参数名和参数值进行重命名(注意是设计名而不是实例名)。

这行为不仅仅出现在Formality中,Design Compiler也是如此,在这两个工具中都是由以下三个变量控制该行为。

变量名默认值
template_naming_style%s_%p
template_parameter_style%s%d
template_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_parm@1和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_%p
template_parameter_style%d
template_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-%p
template_parameter_style%s&%d
template_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%257D&request_id=81da22721a1b9285e5fdcaba0f750691&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-140436528-null-null.nonecase&utm_term=%E8%BD%AC%E4%B9%89&spm=1018.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-WIDTHA&8^WIDTHB&8 } 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-WIDTHA&16^WIDTHB&16 } 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-WIDTHA&16^WIDTHB&16 } \ -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-WIDTHA&8^WIDTHB&8 } \ -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-WIDTHA&16^WIDTHB&16 } \ -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-WIDTHA&8^WIDTHB&8 } \ -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 Compiler:set_svf命令以及SVF文件简介https://chenzhang.blog.csdn.net/article/details/144069207

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询