数字IC后端实现之Innovus specifyCellEdgeSpacing和ICC2 set_placement_spacing_rule的应用

devtools/2024/11/17 2:40:51/

昨天帮助社区IC训练营学员远程协助解决一个Calibre DRC案例。通过这个DRC Violation向大家分享下Innovus和ICC2中如何批量约束cell的spacing rule。

数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案

下图所示为T12nm A55项目的Calibre DRC Violation M1.EN.9。通过查找T12nm的design manual,我们可以很清晰看到这个DRC Violation的本质是VIA到包边Metal的间距不够。

TSMC12nm A55 Calibre <a class=DRC Violation" />

但是通过Calibre RVE高亮后发现这个VIA1和Metal1都是标准单元内部的pin shape。所以换孔是行不通的。因此只能通过打破DRC Violation的触发条件来解决。

数字IC后端笔试面试真题串讲(Cut_EOL_Spacing DRC Violation自动化修复方案)

我们可以尝试改变并行走线长度L,间距D1和D1’。所以,我们可以把相邻的这两个cell间距拉大即可实现。

传统的做法是通过给DRC Violation Marker所在位置的cell添加cell padding来解决。

今天我们要分享的是通过设置placement spacing rule来约束工具做符合咱们预期的placement。这样做的好处是可以更精准针对某两类cell来设置space rule约束,对整体density或timing的影响相对来说更小。

Innovus中可以对任意cell进行cell edge type定义,并对不同的cell edge设置spacing约束。

在这里插入图片描述

specifyCellEdgeSpacing GROUP1 GROUP2 2

specifyCellEdgeType -cell A -top GROUP1 -range 0 0.2

specifyCellEdgeType -cell A -bottom GROUP2 -range 0.4 0.6

specifyCellEdgeType -cell B -top GROUP2 -range 0.4 0.6

specifyCellEdgeType -cell B -bottom GROUP1 -range 0 0.2

当我们给Cell A和Cell B设置如上约束后,工具在做refinePlace时就会遵守我们约束的spacing rule。当出现第二种图形时工具会检查出checkPlace的violation。

在这里插入图片描述

在这里插入图片描述

Innovus工具不仅支持对cell的bottom,top,也支持对left和right edge进行设置。当工具发现无论如何做refinePlace都无法修复这类placement violation就会报告Context placement violation。

在这里插入图片描述

本案例的Calibre DRC Violation,经过详细分析得知所有这类DRC都位于IND1和DF1这两款cell之间。所以,我们可以针对这两颗cell进行cell edge spacing的约束,只要这个它们之间的间距大于D1即可。

foreach cell [dbGet head.libCells.name -e] { specifyCellEdgeType -cell $cell -reset }

report_cell_edge_spacing

report_cell_edge_type

deleteCellEdgeSpacing

在这里插入图片描述
在这里插入图片描述

ICC2中设置placement space rule相关命令如下。命令中的{1 1}代表工具做placement时不能出现两个cell间距为1个site的场景。如果把{1 1}改成{0 1}则表示任何两个标准单元的间距不能为0(abut)和1个site。

remove_placement_spacing_rules -all

set_placement_spacing_label -name X -side both -lib_cells [get_lib_cells /]

set_placement_spacing_rule -labels {X X} {1 1}

而Innouvs中则可以通过设置如下的placeMode来实现这个效果。

setPlaceMode -place_detail_legalization_inst_gap 2

此外,我们还可以针对特定的cell来约束特殊的spacing rule约束。比如对设计中pin数量大于等于4的DF1寄存器进行spacing约束。

set cells [get_object_name [get_lib_cells -filter “number_of_pins >=4&& name=~DF1]

set_placement_spacing_label -name X -side both -lib_cells [get_lib_cells $cells]

set_placement_spacing_rule -label {X X} {0 1}


http://www.ppmy.cn/devtools/134598.html

相关文章

Python学习------第八天

函数 函数的传入参数 掌握函数返回值的作用 掌握函数返回值的定义语法 函数的嵌套调用&#xff1a; 函数的局部变量和全局变量 局部变量的作用&#xff1a;在函数体内部&#xff0c;临时保存数据&#xff0c;即当函数调用完成后&#xff0c;则销毁局部变量。 money 5000000 n…

MTU-内核态(数据链路层或网络接口上能够传输的最大数据包大小)

MTU&#xff08;最大传输单元&#xff0c;Maximum Transmission Unit&#xff09;是网络中用于表示数据链路层或网络接口上能够传输的最大数据包大小。 1. 工作原理 MTU 决定了一个数据包&#xff08;包括头部和数据部分&#xff09;的最大长度。它影响到数据的传输&#xff…

力扣589:N叉树的先序遍历

给定一个 n 叉树的根节点 root &#xff0c;返回 其节点值的 前序遍历 。 n 叉树 在输入中按层序遍历进行序列化表示&#xff0c;每组子节点由空值 null 分隔&#xff08;请参见示例&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [1,null,3,2,4,null,5,6] 输出&…

SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

文章目录 一、配置 RabbitMQ二、自动配置的核心组件三、发送消息至指定 Stream四、接收消息与 RabbitListener 注解五、实现自定义 RabbitListenerContainerFactory六、消息重试机制七、总 结 消息队列在分布式系统中起着至关重要的作用&#xff0c;它能够解耦系统、削峰填谷&a…

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议&#xff0c;和HTTP类似&#xff0c;因为轻量简单&…

UE5材质篇 4 材质表面雨滴打落

materials 101的教程的灵感&#xff0c;特此记录一下 教程里本质上其实是先实验确定了湿滑表面的roughness和specular的值metallic这些&#xff0c;然后根据time来给表面的某些点这几个属性进行变换&#xff0c;主要是roughness和normal的变化 具体的变化是依赖了一张noise&a…

k8s拓扑域 :topologyKey

主要用于定义Pod亲和性或反亲和性规则中的拓扑域&#xff0c;从而控制Pod在集群中的调度。 参数描述&#xff1a;仅支持在工作负载亲和/工作负载反亲和调度策略中使用。先圈定拓扑域&#xff08;topologyKey&#xff09;指定的范围&#xff0c;然后再选择策略定义的内容。 to…

macOS sw_vers 查看当前系统版本

macOS 命令行 查看当前系统版本 sw_vers ProductName: macOS ProductVersion: 15.1