INVS利用gatearray实现post-mask的function ECO

随着现代IC的设计发展,设计的规模和复杂度逐步增加,对于验证完备性的挑战越来越大,加之TO的时间压力,芯片设计通常会出现下列的场景:

  • 芯片回片一次点亮
  • 大部分的case都可以顺利通过
  • 小部分的功能需要修正

对于重要的特性三,用户可以选择gatearray的cell高效的完成这一个任务。闲言少叙,ICer GO!

image-20240622194114791

由于·硬件设计天然的特性,大部分芯片都会有reversion的计划,有时候也被称作engineering sample# (ES1,ES2,etc.)。产品的迭代效率通常都是reversion的重要因素,所以基于TO数据的bug高效修复(迭代快,成本可控)的要求就显得极为重要。

TO数据space cell方式

基于前端设计经验,在芯片里边规律性的撒一些spare cell,作为后续版本的bug修复使用,但是这种方法局限性比较大:

  • Spare cell的难以匹配设计修改的要求:
    • 功能不全:对于bug,通常都具有未知性,很难做到有的放矢,spare cell的功能经常被bug fix人员诟病功能不完备
    • 距离不合适:bug修复需求的物理位置和spare cell的位置相去甚远,
      • 绕线挑战大,可能会占用很多的metal 资源,导致postmask metal fix的mask费用很高,周期很长
      • 时序挑战:太远的距离,导致transiton/cap都有新的变化,甚至需要使用更多的器件实现setup/hold的修复,都是潜在的时序挑战
  • Spare cell对资源的浪费
    • 放置资源:spare cell会切实的占用std-cell的某些区域,为保证分布性,spare cell通常位置较为固定,这个对于APR flow的数据优化会产生一定程度上的不利影响
    • 绕线资源:spare cell的input 都需要tie connection(防止栅极浮空被击穿),这些tie connection也是对绕线资源的消耗。

所以,实际芯片的funciton bug ECO的时候,眼睁睁的看着分布式的spare cell,就是用不起来,只能干瞪眼。心里默念,要是当时在某某区域多撒点某某cell该多好啊。像极了学生时代拿到成绩的我们:要是考前把那个啥多看看,这部又能提高几分。永远的如果,永远的下一次,反反复复无穷尽啊!

gatearray方式的特点和用法

为了缓解这种问题,现在的std-cell开发商,在提供标准的std-cell库的基础上,也会提供给用户用于post-mask的ECO 库,由于设计结构的原因,这个库通常被称为:std-cell gatearray 库。是一种类似乐高积木的拼接方式来完成std-cell的构建。

ECO 库的特点

基于gatearray设计的ECO库,所有的cell的版图,都是使用基础单元搭建起来的(gate),然后通过更改metal的方式来实现不同的功能,这个·和传统的std-cell的设计思路是完全不同的。

只要是等宽的ECO cell,cell之间通常只有一层或两层metal不同,意即:只改动metal就可以实现功能变化。譬如下例:等宽度的ECO filler cell 和FILLER cell的GDS比对XOR:

可以看到:ECO filler cell和ECO function cell只有M1不相等(baselayer 是完全一样的),具体XOR区别见下图:

这样就可以通过嗲用芯片里边现有的ECO filler cell,基于用户需求,改变有限的metal层,从而实现任意功能的转化,

  • ECO filler -> ECO function cell
  • ECO function cell -> ECO filler

ECO 库的postmask bug fix 的应用流程

postmask的改版,最麻烦的当属功能修正,如果想更换一个cell的功能,通常要动到baselayer和metallayer。但是基于gatearray的ECO库,则可以有效规避baselayer的改动,从而可以高效的完成postmask function bug fix。

ECO lib VS. std-cell LIB

在使用ECO库之前,先看一下ECO cell和普通std-cell的版图区别

在原本的std-cell和ECO库中挑选相同功能/驱动力的cell

  • INVX2
  • GAINVX2
版图差异

通过XOR,可以看到,这两个cell的画法是不太相同的

包括有源区,POLY区个connect去都不太一样(PS: cell boundary 是一样的)。基本可以判定,这样的cell就是不同设计需求的产物

时序差异

从lib上看,两者的面积是一样的,这个case的时序也是基本类似的:

ECO库的cell特点

为了有效的利用ECO库,通常都会提供各种功能的器件,同时为了降低ECO库的设计难度,通常会弱化对驱动力不要求。以当前case为例,相较std-cell 库,ECO拥有了常规的与或非门,FF等,驱动力有所限制:

FunctionECO lib驱动力Std-cell lib 驱动力
ANDX1/X2X1/X2/X3/X4/X6/X8
AND_into_ORX1X1/X2/X3
DELAYX1/X2X1
MUXX1/X2X1/X2/X3/X4/X6/X8/X12
NANDX1/X2/X3X1/X2/X3/X4/X6/X8
NORX1/X2X1/X2/X3/X4/X6/X8
ORX1/X2X1/X2/X3/X4/X6/X8
XNRX1/X2X1/X2/X3/X4/X6/X8
XORX1/X2X1/X2/X3/X4/X6/X8
INVX1/X2/X3/X4/X8X1/X2/X3/X4/X6/X8/X12/X16/X20
BUFFERX1/X2/X3/X4/X8X1/X2/X3/X4/X6/X8/X12/X16/X20
DFFX1/X2X1/X2/X4
ECO库的使用方法

为了方便GA(gatearray)进行功能替换,ECO 库将所有的cell分成两类:

  • FILLER
  • Function cell

由于所有的cell的base-layer都是一样的,那么这里可以利用这个特性实现postmask的function metal fix方法。

  1. 数据准备:
  • 在TO的数据库上使用ECO FILLER进行填充。
  • 在ECO FILLER不能覆盖的区域,使用common filler进行填充,确保NWELL的连续
  1. 功能修复
  • 基于芯片测试结果,出具bug fix方案
  • 使用ECO function cell构建相关ECO的脚本
  1. ECO cell 置换
  • 在具有ECO FILLER填充的数据库中带入上述ECO脚本
  • 使用ecoPlace方法,完成对与ECO function cell的器件替换

INVS会使用满足ECO function cell宽度的ECO filler区域,完成这个替换

  1. 版层变动验证

导出GDS,使用GDS XOR工具,确保bug fix后的GDS和原始GDS只有metal layer的差异

  1. 完成绕线:在APR工具里边完成绕线

  2. 对数据和进行timing、LV和power的签收验证

  3. 使用最终的数据库再次和原始TO的GDS进行XOR比对:出具版层变动的差异信息。触发新的TO

对于上述流程有以下几点需要注意:

  • 设计人员需要使用ECO lib里的function cell进行bug fix
  • ecoPlace的动作比较关键,用户需要仔细查验这个动作的日志和数据库。步骤如下:
    • 删除现有所有的ECO filler
    • 将ECO function cell放置到相连接cell的附近
    • 恢复之前ECO filler的位置,在改动的区域,对于ECO filler cell做出做适当调整

INVS将原先的GA_FILLERX4置换成:GA_FILLERX2 + GA_INV,完成了一次post-mask的function ECO动作。通过XOR查验。整个芯片只有这里的metal发生变化,其他的部位都没有变化,符合post-mask的metal fix的设计预期

PS:具体INVS的流程脚本会上传到星球,请各位按需取拿

【敲黑板划重点】

image-20240503184222477

利用gatearray修复postmask的function bug,事半功倍!

参考资料

Cadence Innovus User Guide

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

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

相关文章

基于CentOS Stream 9平台 安装/卸载 Redis7.0.15

已更正systemctl管理Redis服务问题 1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下: mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf re…

.NET C# 装箱与拆箱

.NET C# 装箱与拆箱 目录 .NET C# 装箱与拆箱1 装箱 (Boxing)1.1 过程&#xff1a;1.2 示例&#xff1a; 2 拆箱 (Unboxing)2.1 过程&#xff1a;2.2 示例&#xff1a; 3 性能影响4 性能优化4.1 使用泛型集合示例&#xff1a; 4.2 使用Nullable<T>示例&#xff1a; 4.3 避…

速通数学建模 —— 查找数据

目录 百度搜索技巧 完全匹配搜索&#xff1a;查询词的外边加上双引号“ ” 标题必含关键词&#xff1a;查询词前加上intitle: 搜索文档&#xff1a;空格再输入filetype:文件格式 去掉不想要的&#xff1a;查询词后面加空格后加减号与关键字 知网查文献 先看知网的硕博士…

[AIGC] 深度优先搜索(DFS)详解及其在LeetCode问题中的应用

深度优先搜索&#xff08;Depth-First-Search&#xff0c;简称DFS&#xff09;是一种用于遍历或搜索树或图的算法&#xff0c;其思想是从一个顶点 V0 开始&#xff0c;沿着一条路一直走到底&#xff0c;如果发现不能到达目标解&#xff0c;就退回到上一步的状态&#xff0c;转向…

经典游戏案例:愤怒的小鸟

学习目标&#xff1a;愤怒的小鸟核心玩法 游戏画面 项目结构目录 部分核心代码 using System.Collections; using System.Collections.Generic; using birds; using utils; using UnityEngine;public class GameManager : MonoBehaviour {public static GameManager sInstanc…

【C++】优先队列的使用及模拟实现

&#x1f497;个人主页&#x1f497; ⭐个人专栏——C学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读 一、什么是优先队列 二、优先队列的使用 1. 优先队列的构造 2. 优先队列的基本操作 3. 使用示例 三、优先队列模拟实…

【硬件开发】共模电感

为什么电源无论直流还是交流的输入端都需要一个共模电感 图中L1就是共模电感&#xff0c;长下面这个样子&#xff0c;两侧的匝数&#xff0c;线径和材料都是一模一样的 共模电感的作用是为了抑制共模信号 抑制共模信号工作原理 http://【共模电感是如何抑制共模信号的】https…

【免费】中国电子学会2024年03月份青少年软件编程Python等级考试试卷一级真题(含答案)

2024-03 Python一级真题 分数&#xff1a;100 题数&#xff1a;37 测试时长&#xff1a;60min 一、单选题(共25题&#xff0c;共50分) 1. 下列哪个命令&#xff0c;可以将2024转换成2024 呢&#xff1f;&#xff08; A&#xff09;(2分) A.str(2024) B.int(2024) C.fl…

细说AGV的12种导航方式和原理

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》人俱乐部 这十二种导航方式各自具有不同的特点和应用场景&#xff0c;下面我将逐一进行简要介绍&#xff1a; 磁钉导航&#xff1a; 原理&#xf…

Python学习笔记17:进阶篇(六)代码测试

代码测试 代码测试是软件开发过程中的关键环节&#xff0c;旨在确保代码质量、功能正确性以及性能符合预期。 在开发过程中&#xff0c;进行代码测试有很多好处&#xff1a; 提高软件质量&#xff1a;通过发现并修复错误&#xff0c;测试有助于提升软件的功能性、可靠性和稳…

LSTM架构的演进:LSTM、xLSTM、LSTM+Transformer

文章目录 1. LSTM2. xLSTM2.1 理论介绍2.2 代码实现 3. LSTMTransformer 1. LSTM 传统的 LSTM (长短期记忆网络) 的计算公式涉及几个关键部分&#xff1a;输入门、遗忘门、输出门和单元状态。 2. xLSTM xLSTM之所以称之为xLSTM就是因为它将LSTM扩展为多个LSTM的变体&#xff…

【LLVM】‘ffast-math’ and ‘ffp-contract’

最近看到一个issue&#xff0c;修改的核心代码部分并不多&#xff0c;可以参考此处的介绍以及此处的issue。 看起来关键就是判断-ffp-contract会将contract的值设为最后一个此选项的值&#xff0c;否则的话&#xff0c;如果只指定了-ffast-math但是没有通过-ffp-contract设置值…

fffdddd

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all;entity GJL isport(clk, reset: in std_logic;btn_green, btn_red: in std_logic; -- 新增控制按键r1, r2, y1, y2, g1, g2: out std_logic;ledag: out std_logic_…

网络编程--网络理论基础(二)

这里写目录标题 网络通信流程mac地址、ip地址arp协议交换机路由器简介子网划分网关 路由总结 为什么ip相同的主机在与同一个互联网服务通信时不冲突公网ip对于同一个路由器下的不同设备&#xff0c;虽然ip不冲突&#xff0c;但是因为都是由路由器的公网ip转发通信&#xff0c;接…

在Java中使用Apache Kafka进行消息队列处理

在Java中使用Apache Kafka进行消息队列处理 消息队列(Message Queue)是分布式系统中用于异步通信的关键组件,广泛应用于解耦生产者和消费者、平滑流量突增、提高系统弹性等场景。Apache Kafka作为一个高吞吐量、分布式的消息队列系统,已经成为许多企业的首选。本文将介绍如…

Linux 进程管理指令

Linux 进程管理是系统管理的重要部分&#xff0c;通过各种工具和命令&#xff0c;你可以查看、控制、调试和管理进程。以下是一些常用的 Linux 进程管理命令和工具。 查看进程 1. ps ps 命令用于列出当前系统的进程。 查看当前用户的所有进程&#xff1a; ps -u $USER查看…

Python statistics 模块

Python 的 statistics 模块提供了一组用于执行各种统计计算的函数&#xff0c;包括平均值、中位数、标准差、方差以及其他统计量。让我来简单介绍一下。 首先&#xff0c;你可以使用以下方式导入 statistics 模块&#xff1a; python import statistics 接下来&#xff0c;…

主流中间件--Redis

NOSQL 什么是NOSQL NoSQL(NoSQL Not Only SQL )&#xff0c;意即“不仅仅是SQL”&#xff0c;它泛指非关系型的数据库。 关系型数据库&#xff1a;以关系(由行和列组成的二维表)模型建模的数据库。简单理解&#xff1a;有表的就是关系型数据库。 NOSQL分类 Redis 什么是Redi…

内容安全复习 7 - 对抗攻击与防御

文章目录 概述攻击对抗性攻击的目的攻击的损失函数如何攻击FGSM黑盒与白盒真实世界的攻击 防御被动防御主动防御 概述 动机 &#xff08;1&#xff09;不仅要在实验室中部署机器学习分类器&#xff0c;也要在现实世界中部署&#xff1b;实际应用 &#xff08;2&#xff09;分类…

shell jq教程

1. jq 简介 jq 是一款命令行下处理JSON数据的工具。其可以接受标准输入&#xff0c;命令管道或者文件中的JSON数据&#xff0c;经过一系列的过滤器(filters)和表达式的转后形成我们需要的数据结构并将结果输出到标准输出中。jq的这种特性使我们可以很容易地在Shell脚本中调用它…