Formality:参数化设计的命名规则
相关阅读
Formality
https://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基础:简单标识符和转义标识符
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)
#-----------------------------------------------------------------------------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文件简介
https://chenzhang.blog.csdn.net/article/details/144069207
相关文章:
Formality:参数化设计的命名规则
相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时,一个参数化的设计(或者说模块)可能因为其参数覆盖而出现不同…...
xss-labs关卡记录8-14
第八关 还是常规方法,先上传我们常用的试试,onfocus <script> <a hrefjavascript:alert()> 查看源码发现,value这里应该是对我们的<>进行了 处理,然后在href这里,对常用的关键词进行了替换处理&…...
SPSS实现中介效应与调节效应
1. 中介效应 SPSS 实现 本例研究的自变量(X) “工作不被认同”;中介变量(M)为“焦虑”,因变量(Y)为“工作绩效”。探讨焦虑是否在工作不被认同与工作绩效间的作用。 (2&…...
计算机的错误计算(二百零三)
摘要 利用两个大模型化简计算 其中一个大模型是数学解题器,它通过化简得出了正确结果;另外一个大模型给出了 Python代码。 例1. 化简计算摘要中算式。 下面是一个数学解题器大模型给的回答。 以上是数学解题器大模型给的回答。 下面是与另外一个大模型…...
【计算机网络】什么是AC和AP?
在现代的无线网络中,AC(Access Controller,接入控制器)和AP(Access Point,无线接入点)是两个至关重要的设备,它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…...
python3中函数的参数
一. 简介 前面学习了Python3中函数的语法规则,文章如下: python3中函数的语法规则-CSDN博客 本文继续学习python中函数的参数。调用函数时可使用的正式参数类型: 必需参数,关键字参数,默认参数,不定长参…...
数据仓库建设方案和经验总结
在做数据集成的过程中,往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中,对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理,造成资源和人力的浪费。同时,目前的系统架构,无…...
Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models
诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名:LoRA: Low-Rank Adaptation of Large Language Models ArXiv网址:https://arxiv.org/abs/2106.09685 官方GitHub网站(包含在RoBERTa、DeBERTa、GPT-2上用Lora微调…...
曲波系数 curvelet transform
Curvelet 变换后的系数涵义 曲波变换(Curvelet Transform)是一种多尺度、多方向的变换工具,能够有效地表示信号中的几何特征(如边缘、曲线等)。曲波变换后的系数具有明确的物理意义,反映了信号在不同尺度、…...
OS的随机数生成过程中的内核熵池
内核熵池(Kernel Entropy Pool)是操作系统内核中用于收集和管理熵(随机性来源)的机制 ,在操作系统的随机数生成过程中发挥关键作用。 以下从其原理、作用、工作方式方面详细介绍: 原理:熵在信…...
数据结构:双向循环链表
双向循环链表(Doubly Circular Linked List) 双向循环链表是双向链表的一种变体,其特点是链表的头节点和尾节点相连,形成一个闭环。这种结构允许在链表中进行无缝的双向遍历,并且由于循环特性,可以从任何节…...
IP网和传输网区别(以访问百度为例!)
1. IP网和传输网的关系 IP网:是基于IP协议的网络,负责数据的逻辑传输,包括数据包的路由、寻址和转发。IP网是“虚拟”的,它依赖于底层的传输网来实际传递数据。 传输网:是物理网络基础设施,负责数据的物理…...
STM32裸机开发转FreeRTOS教程
目录 1. 简介2. RTOS设置(1)分配内存(2)查看任务剩余空间(3)使用osDelay 3. 队列的使用(1)创建队列(1)直接传值和指针传值(2)发送/接收…...
FreeSWITCH dialplan/default.xml 之释疑
准备花时间好好研究下,一直都是一知半解 sip_looped_call 通俗地说,就是自己呼叫自己 查文档,是这样讲的:如果调用已通过 ACL 以外的方式进行身份验证,并且当前请求 IP/port 与配置文件 IP/port 匹配,那…...
lambda用法及其原理
目录 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 习题解题 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]:[捕捉列表]用于捕捉函数外的参数,可以为空,但不能省略;(parameters) &am…...
Go Ebiten随机迷宫生成示例
引言 迷宫生成是计算机科学中一个经典的问题,常用于算法教学和游戏开发。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎实现一个基于深度优先搜索(DFS)的随机迷宫生成算法,并通过可视化的方式展示迷宫的生成过程。 技术栈 Go …...
前端学习DAY31(子元素溢出父元素)
.box1{width: 200px;height: 200px;background-color: chocolate;} 子元素是在父元素的内容区中排列的,如果子元素的大小超过了父元素,则子元素会从 父元素中溢出,使用overflow属性设置父元素如何处理溢出的子元素 可选值:visible…...
『SQLite』表的创建、修改和删除
本节摘要:主要讲述SQLite中创建、删除、修改表等操作。 创建表 CREATE TABLE 语句来创建表。 修改表 ALTER TABLE 语句来修改表名称、已有表字段,或者新增字段。 删除表 DROP TABLE 语句用来删除表. 注意: 上述内容详细讲解见文章&#…...
可持久化数据结构-线段树(主席树)
可持久化数据结构-线段树(主席树) (与可持久化字典树差不多) 概念:可持久化线段树是基本线段树的一个简单拓展, 是使用函数式编程思想的线段树; 作用: 可以存下来数据结构的所有历史版本 特点: 拓扑结构…...
如何利用PHP爬虫按关键字搜索淘宝商品
在当今的电商时代,获取淘宝商品信息对于市场研究、价格监控和竞争分析等方面具有重要意义。手动搜索和整理大量商品信息不仅耗时耗力,而且容易出错。幸运的是,PHP爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
