当前位置: 首页 > 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

相关文章:

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

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 在Formality中使用set_top命令设置一个容器的顶层设计(elaborate)时,一个参数化的设计(或者说模块)可能因为其参数覆盖而出现不同…...

xss-labs关卡记录8-14

第八关 还是常规方法&#xff0c;先上传我们常用的试试&#xff0c;onfocus <script> <a hrefjavascript:alert()> 查看源码发现&#xff0c;value这里应该是对我们的<>进行了 处理&#xff0c;然后在href这里&#xff0c;对常用的关键词进行了替换处理&…...

SPSS实现中介效应与调节效应

1. 中介效应 SPSS 实现 本例研究的自变量&#xff08;X&#xff09; “工作不被认同”&#xff1b;中介变量&#xff08;M&#xff09;为“焦虑”&#xff0c;因变量&#xff08;Y&#xff09;为“工作绩效”。探讨焦虑是否在工作不被认同与工作绩效间的作用。 &#xff08;2&…...

计算机的错误计算(二百零三)

摘要 利用两个大模型化简计算 其中一个大模型是数学解题器&#xff0c;它通过化简得出了正确结果&#xff1b;另外一个大模型给出了 Python代码。 例1. 化简计算摘要中算式。 下面是一个数学解题器大模型给的回答。 以上是数学解题器大模型给的回答。 下面是与另外一个大模型…...

【计算机网络】什么是AC和AP?

在现代的无线网络中&#xff0c;AC&#xff08;Access Controller&#xff0c;接入控制器&#xff09;和AP&#xff08;Access Point&#xff0c;无线接入点&#xff09;是两个至关重要的设备&#xff0c;它们在网络的管理、连接和优化中扮演着重要角色。理解它们的功能和区别&…...

python3中函数的参数

一. 简介 前面学习了Python3中函数的语法规则&#xff0c;文章如下&#xff1a; python3中函数的语法规则-CSDN博客 本文继续学习python中函数的参数。调用函数时可使用的正式参数类型&#xff1a; 必需参数&#xff0c;关键字参数&#xff0c;默认参数&#xff0c;不定长参…...

数据仓库建设方案和经验总结

在做数据集成的过程中&#xff0c;往往第二步的需求就是建设数仓由于数据分散在不同的存储环境或数据库中&#xff0c;对于新业务需求的开发需要人工先从不同的数据库中同步、集中、合并等处理&#xff0c;造成资源和人力的浪费。同时&#xff0c;目前的系统架构&#xff0c;无…...

Re77 读论文:LoRA: Low-Rank Adaptation of Large Language Models

诸神缄默不语-个人CSDN博文目录 诸神缄默不语的论文阅读笔记和分类 论文全名&#xff1a;LoRA: Low-Rank Adaptation of Large Language Models ArXiv网址&#xff1a;https://arxiv.org/abs/2106.09685 官方GitHub网站&#xff08;包含在RoBERTa、DeBERTa、GPT-2上用Lora微调…...

曲波系数 curvelet transform

Curvelet 变换后的系数涵义 曲波变换&#xff08;Curvelet Transform&#xff09;是一种多尺度、多方向的变换工具&#xff0c;能够有效地表示信号中的几何特征&#xff08;如边缘、曲线等&#xff09;。曲波变换后的系数具有明确的物理意义&#xff0c;反映了信号在不同尺度、…...

OS的随机数生成过程中的内核熵池

内核熵池&#xff08;Kernel Entropy Pool&#xff09;是操作系统内核中用于收集和管理熵&#xff08;随机性来源&#xff09;的机制 &#xff0c;在操作系统的随机数生成过程中发挥关键作用。 以下从其原理、作用、工作方式方面详细介绍&#xff1a; 原理&#xff1a;熵在信…...

数据结构:双向循环链表

双向循环链表&#xff08;Doubly Circular Linked List&#xff09; 双向循环链表是双向链表的一种变体&#xff0c;其特点是链表的头节点和尾节点相连&#xff0c;形成一个闭环。这种结构允许在链表中进行无缝的双向遍历&#xff0c;并且由于循环特性&#xff0c;可以从任何节…...

IP网和传输网区别(以访问百度为例!)

1. IP网和传输网的关系 IP网&#xff1a;是基于IP协议的网络&#xff0c;负责数据的逻辑传输&#xff0c;包括数据包的路由、寻址和转发。IP网是“虚拟”的&#xff0c;它依赖于底层的传输网来实际传递数据。 传输网&#xff1a;是物理网络基础设施&#xff0c;负责数据的物理…...

STM32裸机开发转FreeRTOS教程

目录 1. 简介2. RTOS设置&#xff08;1&#xff09;分配内存&#xff08;2&#xff09;查看任务剩余空间&#xff08;3&#xff09;使用osDelay 3. 队列的使用&#xff08;1&#xff09;创建队列&#xff08;1&#xff09;直接传值和指针传值&#xff08;2&#xff09;发送/接收…...

FreeSWITCH dialplan/default.xml 之释疑

准备花时间好好研究下&#xff0c;一直都是一知半解 sip_looped_call 通俗地说&#xff0c;就是自己呼叫自己 查文档&#xff0c;是这样讲的&#xff1a;如果调用已通过 ACL 以外的方式进行身份验证&#xff0c;并且当前请求 IP/port 与配置文件 IP/port 匹配&#xff0c;那…...

lambda用法及其原理

目录 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 习题解题 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]&#xff1a;[捕捉列表]用于捕捉函数外的参数&#xff0c;可以为空&#xff0c;但不能省略&#xff1b;(parameters) &am…...

Go Ebiten随机迷宫生成示例

引言 迷宫生成是计算机科学中一个经典的问题&#xff0c;常用于算法教学和游戏开发。本文将介绍如何使用 Go 语言和 Ebiten 游戏引擎实现一个基于深度优先搜索&#xff08;DFS&#xff09;的随机迷宫生成算法&#xff0c;并通过可视化的方式展示迷宫的生成过程。 技术栈 Go …...

前端学习DAY31(子元素溢出父元素)

.box1{width: 200px;height: 200px;background-color: chocolate;} 子元素是在父元素的内容区中排列的&#xff0c;如果子元素的大小超过了父元素&#xff0c;则子元素会从 父元素中溢出&#xff0c;使用overflow属性设置父元素如何处理溢出的子元素 可选值&#xff1a;visible…...

『SQLite』表的创建、修改和删除

本节摘要&#xff1a;主要讲述SQLite中创建、删除、修改表等操作。 创建表 CREATE TABLE 语句来创建表。 修改表 ALTER TABLE 语句来修改表名称、已有表字段&#xff0c;或者新增字段。 删除表 DROP TABLE 语句用来删除表. 注意&#xff1a; 上述内容详细讲解见文章&#…...

可持久化数据结构-线段树(主席树)

可持久化数据结构-线段树(主席树&#xff09; (与可持久化字典树差不多&#xff09; 概念&#xff1a;可持久化线段树是基本线段树的一个简单拓展&#xff0c; 是使用函数式编程思想的线段树&#xff1b; 作用&#xff1a; 可以存下来数据结构的所有历史版本 特点: 拓扑结构…...

如何利用PHP爬虫按关键字搜索淘宝商品

在当今的电商时代&#xff0c;获取淘宝商品信息对于市场研究、价格监控和竞争分析等方面具有重要意义。手动搜索和整理大量商品信息不仅耗时耗力&#xff0c;而且容易出错。幸运的是&#xff0c;PHP爬虫技术为我们提供了一种高效、自动化的方式来按关键字搜索淘宝商品。本文将详…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...