当前位置: 首页 > news >正文

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

相关阅读

Formalityicon-default.png?t=O83Ahttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm=1001.2014.3001.5482


        在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; 
endmodulemodule 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基础:简单标识符和转义标识符icon-default.png?t=O83Ahttps://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)
#-----------------------------------------------------------------------------guideguide_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 2025setup

        情况一中的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)
#-----------------------------------------------------------------------------guideguide_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 2025setup

        情况二中的第一条guide_environment命令将会在setup阶段读取SVF文件时就处理并将Formality中这三个变量的值设置为与Design Compiler一致。 

        有关SVF文件的更详细内容,请参考下文。

Design Compiler:set_svf命令以及svf文件简介icon-default.png?t=O83Ahttps://chenzhang.blog.csdn.net/article/details/144069207

http://www.lryc.cn/news/516514.html

相关文章:

  • xss-labs关卡记录8-14
  • SPSS实现中介效应与调节效应
  • 计算机的错误计算(二百零三)
  • 【计算机网络】什么是AC和AP?
  • python3中函数的参数
  • 数据仓库建设方案和经验总结
  • Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models
  • 曲波系数 curvelet transform
  • OS的随机数生成过程中的内核熵池
  • 数据结构:双向循环链表
  • IP网和传输网区别(以访问百度为例!)
  • STM32裸机开发转FreeRTOS教程
  • FreeSWITCH dialplan/default.xml 之释疑
  • lambda用法及其原理
  • Go Ebiten随机迷宫生成示例
  • 前端学习DAY31(子元素溢出父元素)
  • 『SQLite』表的创建、修改和删除
  • 可持久化数据结构-线段树(主席树)
  • 如何利用PHP爬虫按关键字搜索淘宝商品
  • GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator
  • ubuntu开机启动服务
  • 电子电气架构 --- 设计车载充电机的关键考虑因素
  • 2025_0105_生活记录
  • 电池管理系统(BMS)架构详细解析:原理与器件选型指南
  • 用JAVA编写一个简单的小游戏
  • 【SpringSecurity】二、自定义页面前后端分离
  • 小兔鲜儿:头部区域的logo,导航,搜索,购物车
  • 什么是VLAN?
  • WPS计算机二级•数据查找分析
  • 计算机网络 (28)虚拟专用网VPN