SDC命令详解:使用相对路径访问设计对象(current_instance命令)

相关阅读

SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm=1001.2014.3001.5482


        在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。

相对路径

        使用相对路径来访问设计对象时,该对象必须位于当前设计(Current Design)中,且路径相对当前实例(Current Instance)指定,当前实例是当前设计中的一个层次单元,默认情况下当前实例就是当前设计,可以使用current_instance命令设置当前实例。

图1 一个简单的层次设计

        以图1为例,如果想在当前设计中Multiplier_Booth_STG_0中设置单元M1/C150的dont_touch属性,可以使用下面两种方法:

// 方法一
prompt> current_design      // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> set_dont_touch [get_cells M1/C150]
// 方法二
prompt> current_design      // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> current_instance .  // 确认当前实例,注意点的添加
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.
prompt> current_instance M1 // 设置当前实例
Current instance is '/Multiplier_Booth_STG_0/M1'.
/Multiplier_Booth_STG_0/M1
prompt> set_dont_touch [get_cells C150]

        在方法一中,路径相对当前设计(即顶层设计)指定;在方法二中,路径相对实例M1指定。若想将当前实例重置为当前设计,只需要使用不带参数的current_instance命令即可,如下所示。

prompt> current_instance
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.

        需要注意的是,如果使用current_design重新设置了当前设计,则当前实例也会被重置为当前设计,如下所示。

prompt> current_design            // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> current_design Datapath  // 设置当前设计
Current design is 'Datapath'.
{Datapath}
Current design is 'Datapath'.
prompt> current_instance .      // 确认当前实例,注意点的添加
Current instance is the top-level of design 'Datapath'.

        顺带一提,除了使用current_instance命令设置当前实例,current_instance变量也可以设置和查询当前实例,如下所示。

prompt> current_design            // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> current_instance .        // 确认当前实例,注意点的添加
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.
prompt> set current_instance M1   // 设置当前实例
Current instance is '/Multiplier_Booth_STG_0/M1'.
/Multiplier_Booth_STG_0/M1
prompt> printvar current_instance // 直接查看变量值
current_instance = "/Multiplier_Booth_STG_0/M1"

        当使用report_cell等命令时,如果不指定对象作为参数,默认以当前实例为参数,如下所示。 

prompt> current_design            // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> current_instance .        // 确认当前实例,注意点的添加
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.
prompt> report_cell               // 报告当前实例内的单元
****************************************
Report : cell
Design : Multiplier_Booth_STG_0
Version: W-2024.09-SP2
Date   : Sat Apr 12 13:17:57 2025
****************************************Attributes:b - black box (unknown)h - hierarchicaln - noncombinationalr - removableu - contains unmapped logicCell                      Reference       Library             Area  Attributes
--------------------------------------------------------------------------------
M1                        Datapath                        0.000000  h, n, u
M2                        Controller                      0.000000  h, n, u
--------------------------------------------------------------------------------
Total 2 cells                                             0.000000
prompt> set current_instance M1   // 设置当前实例
Current instance is '/Multiplier_Booth_STG_0/M1'.
/Multiplier_Booth_STG_0/M1
prompt> report_cell               // 报告当前实例内的单元
****************************************
Report : cell
Design : Multiplier_Booth_STG_0/M1 (Datapath)
Version: W-2024.09-SP2
Date   : Sat Apr 12 13:21:17 2025
****************************************Attributes:b - black box (unknown)c - control logich - hierarchicaln - noncombinationalr - removables - synthetic operatoru - contains unmapped logicCell                      Reference       Library             Area  Attributes
--------------------------------------------------------------------------------
B_0                       GTECH_BUF       gtech           0.000000  c, u
B_1                       GTECH_BUF       gtech           0.000000  c, u
C128                      *SELECT_OP_5.1_5.1_1            0.000000  s, u
C129                      *SELECT_OP_2.8_2.1_8            0.000000  s, u
C130                      *SELECT_OP_2.4_2.1_4            0.000000  s, u
C131                      *SELECT_OP_5.1_5.1_1            0.000000  s, u
C132                      *SELECT_OP_3.8_3.1_8            0.000000  s, u
C142                      GTECH_OR2       gtech           0.000000  c, u
C143                      GTECH_OR2       gtech           0.000000  c, u
C144                      GTECH_OR2       gtech           0.000000  c, u
C147                      GTECH_AND2      gtech           0.000000  c, u
C148                      GTECH_AND2      gtech           0.000000  c, u
C150                      GTECH_AND2      gtech           0.000000  c, u
C152                      GTECH_AND2      gtech           0.000000  c, u
C153                      GTECH_AND2      gtech           0.000000  c, u
C154                      GTECH_AND2      gtech           0.000000  c, u
C156                      GTECH_AND2      gtech           0.000000  c, u
C157                      GTECH_AND2      gtech           0.000000  c, u
C158                      GTECH_AND2      gtech           0.000000  c, u
I_0                       GTECH_NOT       gtech           0.000000  u
I_1                       GTECH_NOT       gtech           0.000000  c, u
I_2                       GTECH_NOT       gtech           0.000000  c, u
I_3                       GTECH_NOT       gtech           0.000000  c, u
I_4                       GTECH_NOT       gtech           0.000000  c, u
add_28_S2                 *ADD_UNS_OP_8_8_8               0.000000  s, u
multiplicand_reg[0]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[1]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[2]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[3]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[4]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[5]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[6]       **SEQGEN**                      0.000000  n, u
multiplicand_reg[7]       **SEQGEN**                      0.000000  n, u
multiplier_reg[0]         **SEQGEN**                      0.000000  n, u
multiplier_reg[1]         **SEQGEN**                      0.000000  n, u
multiplier_reg[2]         **SEQGEN**                      0.000000  n, u
multiplier_reg[3]         **SEQGEN**                      0.000000  n, u
product_reg[0]            **SEQGEN**                      0.000000  n, u
product_reg[1]            **SEQGEN**                      0.000000  n, u
product_reg[2]            **SEQGEN**                      0.000000  n, u
product_reg[3]            **SEQGEN**                      0.000000  n, u
product_reg[4]            **SEQGEN**                      0.000000  n, u
product_reg[5]            **SEQGEN**                      0.000000  n, u
product_reg[6]            **SEQGEN**                      0.000000  n, u
product_reg[7]            **SEQGEN**                      0.000000  n, u
sub_31_S2                 *SUB_UNS_OP_8_8_8               0.000000  s, u
--------------------------------------------------------------------------------
Total 46 cells                                            0.000000

current_instance命令

        除了不带参数和使用当前实例下的层次单元作为参数,current_instance命令还可以接受其他类型的参数,就像Linux中的相对路径那样,可以接受.以表示当前实例和..表示上层实例,如下所示。

prompt> current_design        // 确认当前设计
Current design is 'Multiplier_Booth_STG_O'.
(Multiplier_Booth_STG_0}
prompt> current_instance .    // 确认当前实例,注意点的添加
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.
prompt> current_instance ./M1 // 设置当前实例,与current_instance M1等价
Current instance is '/Multiplier_Booth_STG_0/M1'.
/Multiplier_Booth_STG_0/M1
prompt> current_instance ..   // 设置当前实例
Current instance is the top-level of design 'Multiplier_Booth_STG_0'.
prompt> current_instance ../../../M1   // 设置当前实例
Current instance is '/Multiplier_Booth_STG_0/M1'.

        上例还有两点细节可以注意:1、参数末尾加不加/效果相同,这与Linux中作为参数的目录类似;2、如果索引超出了当前设计,则视为当前设计。

类似概念

        在低功耗设计(UPF)中也存在类似当前实例的概念,叫做当前范围(Current Scope),使用set_scope命令可以设置当前范围,实际上使用本文的current_instance命令和current_instance变量也可以设置当前范围,它们之间的差别很小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【问题记录】记录2个安装Centos/Anolis系统卡死在安装包阶段的问题?(硬盘分区?换设备)

背景 问题就不详细记录了,本文记录的是Centos/Anolis安装中卡主的问题。这个问题遇到过几十次了,尝试过各种方法。最近一个偶然因素找到了原因。然后翻看历史上出现这个问题的照片居然是相同的地方卡死。。。 有点意思。特此记录,希望未来遇…

微信小程序中的openid的作用

微信小程序中的openid的作用 引言 在当今数字化时代,用户体验成为了产品成功与否的关键因素之一。微信小程序作为连接用户与服务的重要桥梁,在提升用户体验方面发挥着重要作用。其中, openid(开放身份标识符)是微信小…

《Python星球日记》第25天:Pandas 数据分析

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 订阅专栏:《Python星球日记》 目录 一、引言二、数据分组与聚合1. 分组操…

分布式系统-脑裂,redis的解决方案

感谢你的反馈!很高兴能帮到你。关于你提到的“脑裂”(split-brain),这是一个分布式系统中的常见术语,尤其在像 Redis Cluster 这样的高可用集群中会涉及。既然你问到了,我会从头解释“脑裂”的含义、Redis …

重构艺术 | 如何优雅地“提炼函数“

在工作中总数遇到非常多的长代码,俗称“屎山”,这类代码读起来特别费劲。自己想重构一遍,但是总感觉缺乏经验指导,因此,多读书,读好书可能是最优解之一。读《重构改善即有代码的设计》有感,便写…

每天学一个 Linux 命令(13):touch

Linux 文件管理命令:touch touch 是 Linux 中一个简单但高频使用的命令,主要用于创建空文件或修改文件的时间戳(访问时间、修改时间)。它是文件管理和脚本操作的实用工具。 1. 命令作用 创建空文件:快速生成一个或多个空白文件。更新时间戳:修改文件的访问时间(Access …

STM32HAL库学习笔记

目录 定时器 一些小细节 输入捕获计算信号频率 输入捕获计算占空比与频率 使用定时器不改变占空比的同时改变频率的方法 串口 重定向原理 重定向代码 怎么从串口接收到的字符串数据中解析出float型的数据 strchr sscanf memset 第一种实现方法 RTC实时时钟 LCD显…

Docker 镜像、容器与数据卷的高效管理:最佳实践与自动化脚本20250411

Docker 镜像、容器与数据卷的高效管理:最佳实践与自动化脚本 引言 在现代软件开发中,容器化技术正变得越来越重要。Docker 作为容器化的代表工具,在各大企业中得到了广泛的应用。然而,随着容器化应用的增多,如何高效…

Selenium之Actions事件

鼠标、键盘组合键 在使用selenium的时候,有的时候我们需要鼠标单击、双击、拖动;或者是按下键盘的某个键,松开某个按键,以及组合键的使用;今天我们就来看一看,怎么样实现上面的操作 先把准备工作做好&…

如何在 CentOS 7 系统上以容器方式部署 GitLab,使用 ZeroNews 通过互联网访问 GitLab 私有仓库,进行代码版本发布与更新

第 1 步: 部署 GitLab 容器​ 在开始部署 GitLab 容器之前,您需要创建本地目录来存储 GitLab 数据、配置和日志: #创建本地目录 mkdir -p /opt/docker/gitlab/data mkdir -p /opt/docker/gitlab/config mkdir -p /opt/docker/gitlab/log#gi…

.py文件和.ipynb文件的区别:完整教程

一、概述 Python开发者常用的两种文件格式.py和.ipynb各有特点,本教程将通过对比分析、代码示例和场景说明,帮助开发者全面理解二者的区别与联系。 二、核心区别对比 1. 文件格式本质 特性.ipynb文件.py文件文件类型JSON结构化文档纯文本文件存储内容…

Go 字符串四种拼接方式的性能对比

简介 使用完整的基准测试代码文件,可以直接运行来比较四种字符串拼接方法的性能。 for 索引 的方式 for range 的方式 strings.Join 的方式 strings.Builder 的方式 写一个基准测试文件 echo_bench_test.go package mainimport ("os""stri…

从代码学习深度学习 - Bahdanau注意力 PyTorch版

文章目录 1. 前言为什么选择Bahdanau注意力本文目标与预备知识2. Bahdanau注意力机制概述注意力机制简述加性注意力与乘性注意力对比Bahdanau注意力的数学原理与流程图数学原理流程图可视化与直观理解3. 数据准备与预处理数据集简介数据加载与预处理1. 读取数据集2. 预处理文本…

19【动手学深度学习】卷积层

1. 从全连接到卷积 2. 图像卷积 3. 图形卷积代码 互相关操作 import torch from torch import nn from d2l import torch as d2ldef corr2d(X, K):"""计算2维互相关运算"""h, w K.shapeY torch.zeros((X.shape[0]-h1, X.shape[1]-w 1))for …

Linux xorg-server 解析(一)- 编译安装Debug版本的xorg-server

一:下载代码 1. 配置源,以Ubuntu24.04 为例( /etc/apt/sources.list.d/ubuntu.sources): 2. apt source xserver-xorg-core 二:编译代码 1. sudo apt build-dep ./ 2. DEB_BUILD_OPTIONS="nostrip" DEB_CFLAGS_SET="-g -O0" dpkg-buildpac…

大模型SFT用chat版还是base版 SFT后灾难性遗忘怎么办

大模型SFT用chat版还是base版 进行 SFT 时,基座模型选用 Chat 还是 Base 模型? 选 Base 还是 Chat 模型,首先先熟悉 Base 和 Chat 是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。 在训练数据方面&#xf…

【图像生成之21】融合了Transformer与Diffusion,Meta新作Transfusion实现图像与语言大一统

论文:Transfusion: Predict the Next Token and Diffuse Images with One Multi-Modal Model 地址:https://arxiv.org/abs/2408.11039 类型:理解与生成 Transfusion模型‌是一种将Transformer和Diffusion模型融合的多模态模型,旨…

动态多目标进化算法:基于知识转移和维护功能的动态多目标进化算法(KTM-DMOEA)求解CEC2018(DF1-DF14)

一、KTM-DMOEA介绍 在实际工程和现实生活中,许多优化问题具有动态性和多目标性,即目标函数会随着环境的变化而改变,并且存在多个相互冲突的目标。传统的多目标进化算法在处理这类动态问题时面临着一些挑战,如收敛速度慢、难以跟踪…

部署NFS版StorageClass(存储类)

部署NFS版StorageClass存储类 NFS版PV动态供给StorageClass(存储类)基于NFS实现动态供应下载NFS存储类资源清单部署NFS服务器为StorageClass(存储类)创建所需的RBAC部署nfs-client-provisioner的deployment创建StorageClass使用存储类创建PVC NFS版PV动态供给StorageClass(存储…

Vue使用el-table给每一行数据上面增加一行自定义合并行

// template <template><el-table:data"flattenedData":span-method"objectSpanMethod"borderclass"custom-header-table"style"width: 100%"ref"myTable":height"60vh"><!-- 订单详情列 -->&l…