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爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
Unity UGUI Button事件流程
场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...
