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

相关新闻

新手建站避坑指南:网站设计初步规划速查手册

新手建站避坑指南:网站设计初步规划速查手册

新手建站避坑指南:网站设计初步规划速查手册 自己不会代码却想搞定网站?别慌。这份网站设计初步规划速查手册,能帮你把“从零到一”的路径理得清清楚楚,少花冤枉钱。很多新手一上来就找外包,结果被坑了钱还没学到东西;或者自己乱买域名,最后备案都过不了。…

2026/9/17 22:50:05 阅读更多 →
douyin-downloader:4步搞定抖音无水印批量下载,自动归档保存作者主页

douyin-downloader:4步搞定抖音无水印批量下载,自动归档保存作者主页

douyin-downloader:4步搞定抖音无水印批量下载,自动归档保存作者主页 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, a…

2026/9/19 0:54:51 阅读更多 →
答案借鉴PDF怎么用?从Python算法到批量验证的完整实践

答案借鉴PDF怎么用?从Python算法到批量验证的完整实践

简介:这是一份面向浙江省普通高中信息技术课程师生的《算法与程序设计学生活动手册》参考答案PDF,由桐乡第一中学教师整理,覆盖实践一至实践八的全部内容。资源以实践任务为主线,从编程环境搭建、变量使用开始,逐步深入…

2026/9/17 22:49:39 阅读更多 →

最新新闻

Ant Design Result 组件的复杂错误反馈实战:从 Error 示例到源码级解析

Ant Design Result 组件的复杂错误反馈实战:从 Error 示例到源码级解析

Ant Design Result 组件的复杂错误反馈实战:从 Error 示例到源码级解析 【免费下载链接】ant-design An enterprise-class UI design language and React UI library 项目地址: https://gitcode.com/gh_mirrors/ant/ant-design 复杂错误反馈(Comp…

2026/9/19 3:48:40 阅读更多 →
LeetCode 3404 统计特殊子序列:哈希表 + 最简分数 + 倒序枚举完整题解(leetcode 仓库)

LeetCode 3404 统计特殊子序列:哈希表 + 最简分数 + 倒序枚举完整题解(leetcode 仓库)

LeetCode 3404 统计特殊子序列:哈希表 最简分数 倒序枚举完整题解(leetcode 仓库) 【免费下载链接】leetcode LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。) 项…

2026/9/19 3:48:40 阅读更多 →
MybatisPlus代码生成器实战:分页失效与Irepository配置避坑

MybatisPlus代码生成器实战:分页失效与Irepository配置避坑

用 MybatisPlus 代码生成器这半年,我在三个项目里从零到一把它跑通,中间踩了不少坑。最近逛社区又看到有人在问“分页失效”“Irepository 到底怎么用”“单页 500 条限制怎么接触”,这些问题其实都和代码生成器的配置习惯有直接关系。这篇文…

2026/9/19 3:48:40 阅读更多 →
房源智能平台实战:协同过滤推荐与线性回归估价系统设计

房源智能平台实战:协同过滤推荐与线性回归估价系统设计

1. 一个完整的房源智能平台,应该由哪些模块组成聊到这个标题,很多人的第一反应是“又要写一个增删改查的毕设系统”,但实际拆解下来会发现,这个题目比想象中要深得多。它不是一个单纯的Web开发项目,而是一个典型的“算…

2026/9/19 3:48:39 阅读更多 →
AAC编解码器实时通信性能对比:从AAC-LC到AAC-ELD延迟与选型指南

AAC编解码器实时通信性能对比:从AAC-LC到AAC-ELD延迟与选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/19 3:48:39 阅读更多 →
x64dbg scriptcmd 命令完全指南:在脚本上下文中执行任意命令

x64dbg scriptcmd 命令完全指南:在脚本上下文中执行任意命令

x64dbg scriptcmd 命令完全指南:在脚本上下文中执行任意命令 【免费下载链接】x64dbg An open-source user mode debugger for Windows. Optimized for reverse engineering and malware analysis. 项目地址: https://gitcode.com/gh_mirrors/x6/x64dbg scri…

2026/9/19 3:47:39 阅读更多 →

日新闻

BP神经网络时序预测:滑窗长度与多窗口平均策略

BP神经网络时序预测:滑窗长度与多窗口平均策略

简介:面向机器学习、深度学习与数据建模学习者的一份完整研究文献,聚焦BP神经网络在农业产量预测中的应用。文档以1980—2018年全国棉花产量为样本,系统讲解数据归一化处理、激活函数原理、多层神经网络结构搭建及训练流程,展示敏…

2026/9/19 0:00:30 阅读更多 →
Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

Transformer训练实时监控实战:基于MindSpore的损失曲线可视化方案

上个月调一个Deformable DETR模型,在单卡上要跑将近两天。第二天早上我下意识打开终端翻日志,发现loss从凌晨两点就开始往上爬,一路从0.8涨到1.35,整整六个小时没人发现。那六个小时的训练不仅白跑,还霸占着卡——等于…

2026/9/19 0:00:30 阅读更多 →
OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南

OpenCloud 中的 Go 类型安全转换库 spf13/cast:从零值回退到泛型 API 的完整实战指南 【免费下载链接】opencloud 🌤️ OpenCloud is the open source platform for file management, sharing and collaboration. Simple and sovereign. 项目地址: htt…

2026/9/19 0:00:30 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →