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爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详…...
飞书文档转Markdown的终极解决方案:feishu2md完整指南
飞书文档转Markdown的终极解决方案:feishu2md完整指南 【免费下载链接】feishu2md 一键命令下载飞书文档为 Markdown(寻找维护者) 项目地址: https://gitcode.com/gh_mirrors/fe/feishu2md 在数字化协作时代,飞书已成为众多…...
MQTT安全实战:用Mosquitto配置带身份验证的物联网消息服务(2023最新版)
MQTT安全实战:用Mosquitto配置带身份验证的物联网消息服务(2023最新版) 在物联网设备数量呈指数级增长的今天,MQTT协议因其轻量级和高效性成为设备通信的首选方案。但默认配置的MQTT服务往往像敞开的城门,任何设备都能…...
# 发散创新:基于CQRS模式的高并发订单系统架构设计与实现在现代分布式系统中,**读写分离**和**性能优化**是绕
发散创新:基于CQRS模式的高并发订单系统架构设计与实现 在现代分布式系统中,读写分离和性能优化是绕不开的核心命题。传统的单体架构在面对海量请求时逐渐暴露出瓶颈,而 CQRS(Command Query Responsibility Segregation࿰…...
ESXi 虚拟机与 QNAP NAS Virtualization Station 部署 Ubuntu 并安装 OpenClaw 完整指南
发布日期: 2026-04-13 标签: [OpenClaw, Ubuntu, ESXi, QNAP, NAS, 虚拟机, AI助手, 部署指南] 分类: [技术实践] 提要: 本文详细介绍了在ESXi虚拟机和QNAP NAS Virtualization Station上部署Ubuntu 24.04并完整安装配置OpenClaw AI助手平台的完整步骤。涵盖硬件要求、系统安装…...
MySQL 自增列的分布式实现
MySQL自增列的分布式实现:突破单机限制的解决方案 在分布式系统中,MySQL自增列的单机实现面临严峻挑战。传统的自增ID依赖于单机序列,难以满足高并发、高可用的分布式场景需求。如何实现全局唯一、有序递增的ID,成为架构设计的关…...
Relm与GTK+深度集成:如何利用原生GUI组件构建现代化界面
Relm与GTK深度集成:如何利用原生GUI组件构建现代化界面 【免费下载链接】relm Idiomatic, GTK-based, GUI library, inspired by Elm, written in Rust 项目地址: https://gitcode.com/gh_mirrors/re/relm Relm是一个基于Rust语言的GUI库,深受Elm…...
别再死记硬背ESP32 BLE API了!用这个“事件驱动”思维导图,5分钟理清GAP/GATT回调逻辑
用事件驱动思维重构ESP32 BLE开发:从API记忆到逻辑推演的艺术 在物联网设备开发中,BLE(低功耗蓝牙)技术因其低功耗特性成为连接智能设备的首选方案。ESP32作为集成BLE功能的明星芯片,其开发门槛却让不少工程师望而生畏…...
从零适配OV5640:为i.MX6ULL定制1024x600分辨率与30FPS帧率
1. OV5640与i.MX6ULL的硬件适配基础 在嵌入式视觉系统中,摄像头与处理器的搭配就像咖啡与咖啡机的组合——需要完美匹配才能产出理想效果。OV5640这颗500万像素的传感器与i.MX6ULL处理器的联姻,首先要解决的就是物理层面的"对话协议"问题。 硬…...
亲测口碑好的物联网开发生产厂家分享
亲测口碑好的物联网开发生产厂家分享行业痛点分析在当前物联网开发领域,存在着诸多技术挑战。首先,设备兼容性难题突出,不同品牌、型号的物联网设备通信协议和接口各异,导致系统集成困难。数据表明,约 60%的物联网项目…...
怎样排查Laravel中Scout全文搜索导致的数据同步报错_队列与底层状态
Scout同步失败主因是底层驱动非2xx响应被静默忽略:启用SCOUT_DEBUGtrue查日志,检查failed_jobs中Guzzle/MeiliSearch异常,精简toSearchableArray字段,避免413/409错误,并手动补同步批量操作数据。Scout 同步失败时队列…...
