当前位置: 首页 > article >正文

数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)

上篇回顾

上一篇文章需要讨论了net,pin的基础用法,让我们来看一下高级一点的用法

instance

current_instance

current_instance 是 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中用于在设计层次结构中导航的关键命令。它允许用户设置当前的工作实例(即设计中的某个子单元或模块),从而使得其他命令可以相对于该实例执行操作。

以下是对 current_instance 命令的详细说明和用法介绍:


1. 基本功能

  • 作用

    • 设置当前工作实例(instance)。
    • 定义命令执行的上下文(context),以便后续命令(如 get_cells, get_nets, report_timing 等)能够针对特定的实例范围运行。
  • current_design 的区别

    • current_design:设置当前的设计(design)并自动将上下文重置到设计的顶层。
    • current_instance:仅设置当前实例,而不改变设计本身。

2. 语法

current_instance [instance]
  • 参数
    • instance
      • 指定要切换到的目标实例路径。
      • 如果未指定 instance 参数,则返回到当前设计的顶层(top-level)。
      • 支持多种格式的路径表达方式(见下文)。

3. 参数详解

(1) 不指定参数
  • 效果
    • 返回到当前设计的顶层(top-level)。
  • 示例
    current_instance
    
    • 输出可能为:
      Current instance is the top-level of block 'TOP.design'.
      
(2) 使用 "."
  • 效果
    • 保持当前实例不变。
  • 示例
    current_instance .
    
    • 当前实例不会发生变化。
(3) 使用 ".."
  • 效果
    • 将上下文向上移动一级(类似于 UNIX 中的 cd ..)。
  • 示例
    current_instance ..
    
    • 如果当前实例是 TOP/U1/U2,则切换到 TOP/U1
(4) 使用具体实例名称
  • 效果
    • 切换到指定的子单元实例。
  • 示例
    current_instance U1
    
    • 如果当前设计是 TOP,则切换到 TOP/U1
(5) 多级路径
  • 效果
    • 可以通过使用斜杠 / 遍历多级层次结构。
  • 示例
    current_instance U1/U2
    
    • 如果当前设计是 TOP,则切换到 TOP/U1/U2
(6) 使用绝对路径
  • 效果
    • 路径以 / 开头时,会同时设置当前设计和实例。
  • 示例
    current_instance /TOP/U1
    
    • 将当前设计设置为 TOP,并将实例切换到 TOP/U1
(7) 使用相对路径
  • 效果
    • 结合 ".." 和具体实例名称,可以在当前上下文中灵活导航。
  • 示例
    current_instance "../../U3"
    
    • 如果当前实例是 TOP/U1/U2,则切换到 TOP/U3

4. 示例场景

(1) 查看当前实例
current_instance
  • 输出:
    Current instance is the top-level of block 'TOP.design'.
    
(2) 切换到子单元
current_instance U1
  • 输出:
    U1
    
(3) 返回到上一级
current_instance ..
  • 输出:
    Current instance is the top-level of block 'TOP.design'.
    
(4) 遍历多级层次
current_instance U1/U2
  • 输出:
    U1/U2
    
(5) 使用绝对路径
current_instance /TOP/U1
  • 输出:
    U1
    
(6) 返回到顶层
current_instance /
  • 输出:
    Current instance is the top-level of block 'TOP.design'.
    
(7) 查询所有实例

结合 all_instances 查询当前层级的所有实例:

query_objects [all_instances]
  • 输出:
    {"U1", "U2", "U3", "U4"}
    

5. 注意事项

  1. 实例路径的正确性

    • 确保指定的实例路径存在。如果路径错误,工具会报错:
      Error: Nothing matched for instance (SEL-005)
      
  2. 设计加载状态

    • 确保设计已正确加载(通过 linkreport_design 检查)。
  3. 区分大小写

    • 实例名称通常是区分大小写的,请确保拼写正确。
  4. 多线程环境

    • 在多线程环境中,不同线程可能会有不同的 current_instance 上下文,需注意隔离。

6. 总结

current_instance 是一个强大的命令,用于在设计层次结构中导航。以下是常用的用法总结:

  • 返回到顶层:

    current_instance
    
  • 切换到子单元:

    current_instance U1
    
  • 返回到上一级:

    current_instance ..
    
  • 遍历多级层次:

    current_instance U1/U2
    
  • 使用绝对路径:

    current_instance /TOP/U1
    

redirect

要在 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中将某个命令的输出结果保存到 .txt 文件中,可以使用 redirect 命令。以下是完整的命令和步骤。


完整命令

假设你要对 get_nets 命令的输出结果进行重定向,并保存到 nets_output.txt 文件中:

redirect /home/nets_output.txt {get_nets}

解释

  1. redirect

    • 这是 Synopsys 提供的一个专门用于重定向输出的命令。
    • 它会将指定命令的输出保存到文件中。
  2. /home/nets_output.txt

    • 输出文件的路径和名称。
    • 如果文件已存在,默认会被覆盖。
    • 如果目录不存在,请先创建它:
      mkdir -p /home/result
      
  3. {get_nets}

    • 要执行的命令及其输出将被重定向。
    • {} 用于包裹命令,确保复杂命令能够正确解析。

追加模式(可选)

如果你希望将输出追加到现有文件中,而不是覆盖文件内容,可以使用 -append 选项:

redirect -append /home/result/nets_output.txt {get_nets}

验证输出

  1. 执行上述命令后,检查文件是否生成:

    ls /home/result/nets_output.txt
    
  2. 查看文件内容:

    cat /home/result/nets_output.txt
    

注意事项

  1. 目录权限

    • 确保 /home/result 目录存在,并且当前用户对该目录有写权限。
    • 如果没有权限,可以尝试以下命令更改权限:
      chmod 755 /home/result
      
  2. 路径格式

    • 使用绝对路径(如 /home/result/nets_output.txt)以避免路径问题。
    • 如果使用相对路径,请确保当前工作目录

reference

Reference(引用)

Reference 通常指的是对库单元或模块的引用。它代表了一个特定类型的单元或模块定义,该定义存在于库中。例如,在标准单元库中,AND2X1 可能是一个逻辑门的定义,这个定义可以被多次引用以创建多个实例。

  • 特点

    • 唯一性:每个参考(Reference)通常是唯一的,表示一种特定类型的设计单元。
    • 复用性:一个参考可以在设计中被多次使用,每次使用都会创建一个新的实例。
    • 定义性:它包含了关于单元的功能、时序模型等信息,但并不包含具体的位置或连接信息。
  • 示例
    如果你有一个名为 AND2X1 的标准单元库中的逻辑门,那么 AND2X1 就是这个逻辑门的 reference。无论你在设计中放置了多少个这样的逻辑门,它们都引用同一个 AND2X1 reference。

Instance(实例)

Instance 是基于某个 reference 创建的具体对象。它是 reference 在设计中的具体实现,具有明确的位置、连接和其他物理属性。换句话说,instance 是 reference 在设计中的具体化。

  • 特点

    • 多样性:同一 reference 可以有多个 instance,每个 instance 都可能有不同的位置、名称、参数设置等。
    • 具体性:instance 包含了具体的物理布局信息,如坐标位置、连线关系等。
    • 命名:每个 instance 都有一个唯一的名称,用于区分设计中的其他 instances。
  • 示例
    假设你在设计中放置了三个 AND2X1 的逻辑门,这三个逻辑门将分别成为独立的 instances,比如 u1, u2, u3。尽管它们都是基于同一个 AND2X1 reference 创建的,但在设计中它们是独立的对象,可能位于不同的位置,并且与不同的信号相连。

总结

  • Reference:是对库中某种类型单元的定义或模板,它定义了单元的功能、特性等信息。
  • Instance:是基于 reference 创建的具体对象,具有明确的位置、连接等物理属性。

在实际操作中,当你查看设计时,report_reference 命令会显示所有使用的 references(即设计中引用的不同单元),而 current_instance 则允许你在设计的层次结构中导航,聚焦于特定的 instance 上进行更详细的操作或检查。理解这两者之间的关系有助于更好地管理和优化你的设计。

如何检查并确认设计是否已正确加载所有部分

1. 使用 report_reference 查找未解析的引用
report_reference
  • 这个命令会列出所有单元及其状态。查找是否存在任何标记为 unresolved 的单元。
2. 正确使用 check_design

为了确保全面检查设计,可以尝试如下命令:

check_design -checks {all}

或者更具体地:

check_design -checks {unresolved_references unconnected_ports}

这将帮助识别设计中存在的潜在问题,如未解析的引用或未连接的端口。

3. 验证 current_instance 的路径

既然 link 已经确认设计已加载,接下来需要确保你尝试切换到的实例路径是正确的。基于你之前的描述,如果 reuse_wrapper_dummy_tile_t 存在于设计中,你应该使用其完整路径进行切换:

current_instance reuse_wrapper/reuse_wrapper_dummy_tile_t

确保路径是从顶层设计开始的完整路径。

  1. link 命令的输出

    • 输出表明设计已经链接(“Block ‘TileBuilderIntFX_Apr-20-2025_37.nlib:reuse_wrapper.design’ is already linked.”),这意味着 link 命令确认设计已经被正确加载。
    • 但是,这并不直接说明设计中的所有实例都能被正确解析。它仅表示库和设计之间的基本连接没有问题。
  2. report_reference 的输出

    • 你提到的输出实际上是库中不同单元的信息,而不是 report_reference 命令的结果。这些信息显示了当前设计引用的不同单元及其面积等属性。
    • 要检查未解析的引用,应该使用 report_reference 命令,并关注是否有任何标记为 unresolved 的条目。
  3. check_design 命令的错误

    • 错误提示 -checks 参数是必需的。这是因为 check_design 需要指定具体要执行的检查类型。例如,你可以通过以下方式运行 check_design 来检查特定方面的问题:
      check_design -checks {all}
      
    • 或者针对特定类型的检查,如未连接端口、未解析的引用等:
      check_design -checks {unresolved_references unconnected_ports}
      

pitch

在 Fusion Compiler 的布局布线领域,pitch 是一个非常重要的参数,它用于定义设计元素之间的间距。这个概念贯穿于多个方面,包括标准单元的排列、电源网格的设计、以及信号线的布线等。理解 pitch 的含义及其在不同场景下的应用对于优化设计性能和确保物理实现的成功至关重要。

Pitch 的基本定义

  • Pitch:指的是两个相邻结构(例如金属线条、晶体管栅极、标准单元或电源条带)中心点之间的距离。它可以是水平方向上的间距(x_pitch),也可以是垂直方向上的间距(y_pitch)。Pitch 决定了这些结构在物理层面上的密度和分布方式。

在布局布线中的具体应用

1. 标准单元布局
  • 在标准单元布局中,pitch 可以指一行或一列标准单元之间的距离。这直接影响到芯片的面积利用率和布线复杂度。
  • 通过调整 pitch,设计师可以优化单元之间的间距,确保有足够的空间进行信号线的布线,同时尽量减少芯片的整体面积。
2. 电源网格设计
  • 在电源网格设计中,pitch 指的是电源/地线之间的间距。合理的电源网格 pitch 对于保证电源分配网络(PDN)的质量至关重要。
  • 例如,在创建电源环 (create_pg_ring) 或电源网 (create_pg_mesh) 时,pitch 参数决定了电源条带或过孔之间的距离,从而影响电源传输效率和电压降(IR Drop)。
3. 自动布线
  • 在自动布线过程中,pitch 可能涉及到设定导线之间的最小间隔,以满足制造工艺的要求,并防止短路或其他电气问题。
  • 调整 pitch 值可以帮助工具更好地处理拥挤区域,提高布线成功率。

总结

在 Fusion Compiler 的布局布线流程中,pitch 参数主要用于控制设计元素之间的间距,无论是标准单元、电源网格还是信号线。合理设置 pitch 值可以帮助优化设计的性能指标,如面积利用率、电源完整性、布线成功率等。理解并正确使用 pitch 对于实现高效且可靠的物理设计至关重要。

相关文章:

数字ic后端设计从入门到精通2(含fusion compiler, tcl教学)

上篇回顾 上一篇文章需要讨论了net,pin的基础用法,让我们来看一下高级一点的用法 instance current_instance current_instance 是 Synopsys 工具(如 Fusion Compiler 或 Design Compiler)中用于在设计层次结构中导航的关键命令。它允许用…...

STM32---外部中断EXTI

目录 一、中断向量表 二、EXTI工作原理图 三、NVIC模块 四、GPIO设置为EXTI的结构 五、C语言示例代码 在STM32中,中断是一个非常重要的结构,他能让我们在执行主函数的时候,由硬件检测一些外部或内部产生的中断信号,跳转到中断…...

Itext进行PDF的编辑开发

这周写了一周的需求,是制作一个PDF生成功能,其中用到了Itext来制作PDF的视觉效果。其中一些功能不是很懂,仅作记录,若要学习请仔细甄别正确与否。 开始之前,我还是想说,这傻福需求怎么想出来的&#xff0c…...

Hibernate的组件映射

在实际的开发中,使用的是非常多的,还有几种比较特殊的关系映射: 组件映射继承映射 先看一下组件映射: 组件映射中, 组件也是一个类, 但是这个类它不独立称为一个实体, 也就是说, 数据库中没有一个表格单独的和它对应, 具体情况呢, 看演示:...

C++ 操作符重载Operator

C可以重载大多数操作符&#xff0c;如算术运算符号&#xff0c;-号。 位操作符<<,>> 下标符号[]等都可以重载。 重载的意思&#xff0c;是让这些符号&#xff0c;按你定义的行为来执行代码&#xff0c;但是这种自定义&#xff0c;是有限制的&#xff0c;必须有一…...

Docker 镜像、容器和 Docker Compose的区别

前言&#xff1a;Docker 的镜像、容器和 Docker Compose 是容器化技术的核心组件&#xff0c;以下是对它们的详细解析及使用场景说明。 ​​1、Docker 镜像&#xff08;Image&#xff09;​​ ​​定义​​&#xff1a; 镜像是只读模板&#xff0c;包含运行应用程序所需的代码、…...

Linux深度探索:进程管理与系统架构

1.冯诺依曼体系结构 我们常见的计算机&#xff0c;如笔记本。我们不常见的计算机&#xff0c;如服务器&#xff0c;大部分都遵守冯诺依曼体系。 截至目前&#xff0c;我们所认识的计算机&#xff0c;都是由⼀个个的硬件组件组成。 输入设备&#xff1a;键盘&#xff0c;鼠标…...

一段式端到端自动驾驶:VAD:Vectorized Scene Representation for Efficient Autonomous Driving

论文地址&#xff1a;https://github.com/hustvl/VAD 代码地址&#xff1a;https://arxiv.org/pdf/2303.12077 1. 摘要 自动驾驶需要对周围环境进行全面理解&#xff0c;以实现可靠的轨迹规划。以往的方法依赖于密集的栅格化场景表示&#xff08;如&#xff1a;占据图、语义…...

17.整体代码讲解

从入门AI到手写Transformer-17.整体代码讲解 17.整体代码讲解代码 整理自视频 老袁不说话 。 17.整体代码讲解 代码 import collectionsimport math import torch from torch import nn import os import time import numpy as np from matplotlib import pyplot as plt fro…...

把dll模块注入到游戏进程的方法_基于文件修改的注入方式

1、概述 本文主要是介绍两种基于文件修改的注入方式,一种是“DLL劫持”,另一种是“修改导入表”。这两种注入方式都是利用操作系统加载PE时的特点来实现的,我们在实现这两种注入方式时只需专注于注入dll的实现,而不用花费额外的精力去关注注入器的实现。要想深入了解这两种…...

4月21日星期一今日早报简报微语报早读

4月21日星期一&#xff0c;农历三月廿四&#xff0c;早报#微语早读。 1、女子伸腿阻止列车关门等待同行人员&#xff0c;被深圳铁路警方行政拘留&#xff1b; 2、北理工再通报&#xff1a;开除宫某党籍&#xff0c;免去行政职务&#xff0c;解除聘用关系&#xff1b; 3、澳门…...

Spark(20)spark和Hadoop的区别

Apache Spark 和 Apache Hadoop 都是广泛使用的开源大数据处理框架&#xff0c;但它们在设计理念、架构、性能和适用场景等方面存在显著区别。以下是它们的主要区别&#xff1a; ### **1. 架构设计** - **Hadoop**&#xff1a; - **HDFS&#xff08;Hadoop Distributed File…...

Kubeflow 快速入门实战(二) - Pipelines / Katib / KServer

承接前文博客 Kubeflow 快速入门实战(一) Kubeflow 快速入门实战(一) - 简介 / Notebooks-CSDN博客文章浏览阅读441次&#xff0c;点赞19次&#xff0c;收藏6次。本文主要介绍了 Kubeflow 的主要功能和能力&#xff0c;适用场景&#xff0c;基本用法。以及Notebook&#xff0c…...

【JavaEE初阶】多线程重点知识以及常考的面试题-多线程进阶(一)

本篇博客给大家带来的是多线程中常见的所策略和CAS知识点. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; 要开心要快…...

ECA 注意力机制:让你的卷积神经网络更上一层楼

ECA 注意力机制&#xff1a;让你的卷积神经网络更上一层楼 在深度学习领域&#xff0c;注意力机制已经成为提升模型性能的重要手段。从自注意力&#xff08;Self-Attention&#xff09;到各种变体&#xff0c;研究人员不断探索更高效、更有效的注意方法。今天我们要介绍一种轻…...

基于定时器查询模式的LED闪烁(STC89C52单片机)

#include <reg52.h> sbit LED P0^0; sbit ADDR0 P1^0; sbit ADDR1 P1^1; sbit ADDR2 P1^2; sbit ADDR3 P1^3; sbit ENLED P1^4; void main() { unsigned char cnt 0; //定义一个计数变量&#xff0c;记录T0溢出次数 ENLED 0; //使能U3&#xff0c;选择…...

SAP系统生产跟踪报表入库数异常

生产跟踪报表入库数异常 交库21820,入库43588是不可能的 原因排查: 报表的入库数取值,是取移动类型321 (即系检验合格后过账到非限制使用)的数. 查凭证,101过账2次21807,321过账了2次21794,然后用102退1次21794.就是说这批物料重复交库了. 解决&#xff1a; 方案一:开发增强设…...

Kubernetes控制平面组件:调度器Scheduler(一)

云原生学习路线导航页&#xff08;持续更新中&#xff09; kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计&#xff08;一&#xff09;Kubernetes架构原则和对象设计&#xff08;二&#xff09;Kubernetes架构原则和对象设计&#xff08;三&#xff09;Kubernetes控…...

08-DevOps-向Harbor上传自定义镜像

harbor创建完成&#xff0c;往harbor镜像仓库中上传自定义的镜像&#xff0c;包括新建项目、docker配置镜像地址、镜像重命名、登录harbor、推送镜像这几个步骤&#xff0c;具体操作如下&#xff1a; harbor中新建项目 访问级别公开&#xff0c;代表任何人都可以拉取仓库中的镜…...

Vue v-for 循环DOM 指定dom个数展示一行

在Vue.js中&#xff0c;如果想根据v-for循环的结果来控制哪些元素应该在一行中展示&#xff0c;你可以通过计算属性或者方法来实现。这里使用CSS改变样式和js脚本两种方式做到这一点&#xff0c;根据你的具体需求选择适合的方法。 方法1&#xff1a;使用计算属性 如果你想要基…...

mysql控制单表数据存储及单实例表创建

1. 单表数据存储不要过大 主流建议 保守建议。100万以内保持最佳性能其他。不超过2000万 理论依据。 B树层级可能变多。从3增加到4。导致索引查询路径边长&#xff0c;增加IO开销 优化 加索引。对高频查询字段增加索引。避免全表扫描低频历史数据通过分区表或归档隔离。足够的…...

极验4滑块笔记:整理思路--填坑各种问题

最近在研究某验4逆向分析&#xff0c;以前没弄过这种&#xff0c;所以爬了很多坑&#xff0c;就是把分享给大家~ 1.这个gcaptcha4.js需要逆向&#xff0c;我的方法很笨就是将_ᕶᕴᕹᕶ()这个蝌蚪文打印处来&#xff0c;全局替换一下&#xff0c;然后Unicode这种代码&#xff0…...

LX3-初识是单片机

初识单片机 一 什么是单片机 单片机:单片微型计算机单片机的组成:CPU,RAM(内存),flash(硬盘),总线,时钟,外设…… 二 Coretex-M系列介绍 了解ARM公司与ST公司ARM内核系列: A 高性能应用,如手机,电脑…R 实时性强,如汽车电子,军工…M 超低功耗,如消费电子,家电,医疗器械 三…...

2025年渗透测试面试题总结-拷打题库10(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 2025年渗透测试面试题总结-拷打题库10 1. CSRF成因及防御措施 | 非Token防御 2. XSS Worm原理 3. Co…...

Linux系统下docker 安装 MySQL

踩坑解决&#xff1a; 1、docker安装mysql&#xff0c;不需要执行search 2、pull时&#xff0c;需要指定版本号 3、连接Navicat需要看阿里云端口号是否开启 在拉取镜像的时候&#xff0c;如果不使用代理服务器&#xff0c;docker search mysql不需要执行 本人在未使用代理服…...

配置 VS Code 使用 ESLint 格式化

1、在设置里面搜索Default Formatter&#xff0c;下拉框里选择eslint 2、并勾选Enables ESlint as a formatter 3、再在settings.json文件中添加配置代码&#xff0c;如下所示&#xff1a; 1&#xff09; 、打开 VS Code 设置 快捷键&#xff1a;Ctrl ,&#xff08;Mac: ⌘ ,…...

从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析

从代码实现理解Vision Permutator&#xff1a;WeightedPermuteMLP模型解析 随着人工智能的快速发展&#xff0c;视觉识别任务变得越来越重要。最近提出的Vision Permutator架构为这一领域带来了新的思路&#xff0c;它通过可学习的排列操作重新定义了特征交互的方式。 今天我…...

Web开发:ABP框架10——使用数据库存储文件,完成文件的下载和上传

一、简要介绍 字节数组&#xff1a;字节数组是存储数据的字节序列&#xff0c;常用于二进制数据&#xff08;如图片、音视频、文档等&#xff09;的表示。 文件和字节的关系&#xff1a;文件是由字节构成&#xff0c;字节是文件内容的基本单位。 文件以字节形式存储在服务器数…...

SystemVerilog语法之内建数据类型

简介&#xff1a;SystemVerilog引进了一些新的数据类型&#xff0c;具有以下的优点&#xff1a;&#xff08;1&#xff09;双状态数据类型&#xff0c;更好的性能&#xff0c;更低的内存消耗&#xff1b;&#xff08;2&#xff09;队列、动态和关联数组&#xff0c;减少内存消耗…...

NestJS-Knife4j

文章目录 前言✅ 一、什么是 Knife4j&#xff1f;✅ 二、Knife4j 与 Swagger 对比✅ 三、NestJS-Knife4j 集成1. 安装依赖2. 配置 Swagger 与 Knife4j3. 启动应用并访问接口文档 ✅ 四、功能增强1. **接口分组**2. **请求/响应示例**3. **接口文档的美化** ✅ 五、总结 前言 N…...