数字IC后端设计实现中的Post-mask ECO应该怎么做?

news2024/11/29 4:46:41

在数字IC后端设计实现中,我们经常会涉及到芯片需要做Function ECO。常见的Function ECO可以分为pre mask ECO和post mask ECO两种。因此,作为一个数字IC后端工程师,必须熟练掌握这两种Function ECO的实现流程及其实现技巧。

两者的区别在于,pre mask ECO的晶体管和布线层都还没有开始做出mask,此时可以往netlist里面添加cell。而post mask ECO的晶体管层已经开始进行加工了,但是布线层还没有加工,还能修改,可以通过ECO改变各种已有cell的连线关系,但是不能添加新的cell,有一定局限。

换句话说,从freeze到tapeout之间的ECO叫pre mask ECO;

tapeout之后的ECO叫做post mask ECO。这里包含以下几种情况:

1)芯片已经tapeout base layer后的ECO

2)芯片已经wafer out的ECO

Pre mask ECO:

Pre mask ECO比Post mask ECO要灵活得多。在tapeout之前,如果发现有任何需要修改的地方,都可以用这种方法。它可以改成百上千个单元。该操作主要是针对静态时序分析和后仿真中出现的问题,对电路的网表直接进行修改,待网表修改完毕之后反馈到PR工具中对标准单元的布局和连线进行小范围的改动。当然,直接对网表进行修改是存在风险的,所以之后一定要进行形式验证(formal verification),确保功能实现。

Post mask ECO:

Post mask ECO是利用预先留好的备用单元(Spare Cell或ECO Cell),做的逻辑修改。如果后期发现Timing存在问题(或者想小动Function),可以利用附近的Spare Cell或ECO Cell搭配上层金属连线来修改电路结构。比起Pre mask ECO,这种ECO受限于Spare Cell的位置,所以它的修改规模十分有限。

ECO cell和Spare cell的区别

Spare cell其实就是正常的逻辑功能cell,而ECO Cell则仅仅是把相关的base layer做好了,其他都没有任何连接的cell。也就是说ECO Cell理论上是可以充当library库中常见的逻辑功能cell。

ECO cell是内部晶体管没有链接的cell, 是可以被『编程』的cell, 在做ECO 时,通常用最底层金属如M1 将ECO cell 内部的晶体管链接起来,以实现对应的逻辑功能,如:与或非、选择器、寄存器等等。

Function ECO Cell

所以,Spare cell的优势明显不如ECO Cell。而且更重要的是spare cell是正常的逻辑单元,它们的input都需要接到tie cell上(不允许有任何的input floating情况)。

而且Spare Cell的逻辑功能类型还得备齐,否则需要做ECO时可能会发现没有想要的逻辑功能cell。一般spare cell都是以一系列常见逻辑功能cell堆叠在一起的一个阵列。

当然Spare cell也有一个好处,就是后期ECO时只需要动到Metal layer,而ECO cell是需要动到Contact这一层。

目标需求

做任何ECO的目的是非常明确的,希望把我们功能上的bug修复掉,而且成本越低越好,最好是不花钱。

Pre-mask ECO是不需要额外的mask成本,但Post-mask ECO则大概率是需要额外的mask成本。

比如目前芯片已经tapeout,foundary还在加工base layer,此时如果要做的ECO仅仅需要更改metal layer(因此两个ECO点很近,只需要改连接),那么是可以不花费额外的mask成本的。

【思考题】如果芯片已经tapeout,foundary已经即将完成base layer的加工,此时如果要做的Function ECO需要添加一些逻辑功能cell,是否一定会增加mask的成本?

又比如芯片已经wafer out,芯片封装测试后发现存在功能上的Bug,需要加入一些运算逻辑。此时肯定需要动到Metal layer甚至base layer。所以这时候做ECO的代价是最大的。

那此时为了最大程度减少做ECO带来的成本,在数字后端实现时就需要想办法尽量不动base layer以及少动metal layer来完成我们的Function ECO。

怎么做?

知道数字IC后端实现PR flow的同学,都知道我们在route opt结束后还有一步是chip finish。这步就是插普通Filler和ECO Filler。

在做ECO 之前这类ECO Filler『GA array filler』被放在设计中,在做ECO 时会用GA functional cell 替换GA filler cell. GA Array filler 是physical only cell, 就是只在lef 中有定义在lib 中没有定义,只存在于DEF 中不在netlist 中。GA functional cell 才是真正有逻辑功能的cell.

在实现过程中,先用GA array Filler 占位置,有ECO进来时,需要先将GA array Filler remove 掉,再把GA functional cell放置上去,如果加入的GA functional cell宽度小于原来的GA Filler,我们还需要在剩下的空位上填上新的GA array filler。

GA Filler Layout

GA cell 有多种site, 如1, 3, 5, 10. ECO 时可以根据逻辑功能,将一个GA Filler 映射成多个GA functional cell. 传统的GA cell 内部没有任何预先定义的逻辑功能,所以可以用来组合任何逻辑功能,如一个10-site 的GA filler 可以映射成:10个inverter 或5个MUX 或1个DFF。

这里举一个芯片测试阶段发现的功能Bug例子。下图虚线框内为需要新增的逻辑功能cell。

Function ECO案例

ECO base cell如下图最左侧所示,对应的名字为GFILLER2。通过查看ECO库我们发现这个cell的大小刚好与GA Function CELL Inverter是同等大小。而且发现ECO功能cell Mux的大小与ECO FillerX4大小是一致的。

ECO Cell和GFiller Layout对比

所以,针对这个Post Mask ECO,我们首先需要在driver0,driver1和后面那个AND2这中间找出一个GFILLER2和一个GFILLER4的ECO Filler cell,然后用GA Functional inverter和MUX进行替换。

其次,还需要将对应的逻辑连接好。这里主要涉及到以下几个逻辑连接:

1)driver0和driver1对应的net断开

2)将driver0和inverter的input端连接在一起

3)将mux的两个输入端分别连接到inverter的输出和driver1上

4)将原来load的A1 pin对应的net断开,并把它连接到mux的输出端

最后,设置绕线层次范围约束,做ecoRoute。

如果希望有个实战环境,可以参加咱们社区的IC训练营进行实战演练。

如何检查做的对不对?

比如上面那个ECO,我们设置了只能用M1-M3来绕线。完成绕线后我们肯定无法通过肉眼来看是否有使用M3以上的金属层来绕线,那么我们如何来确保工具按照我们约定的条件来做了呢?

答案是做LVL(Layout比Layout).这个工作通过calibre工具就可以完成。主要原理是通过比对ECO前后两个GDS的差别。

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

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

相关文章

栈和队列【数据结构】

1、栈 &#xff08;1&#xff09;Stack.h #pragma once #include <stdio.h> #include <assert.h> #include <stdlib.h> #include <stdbool.h>typedef int STDataType;typedef struct Stack {STDataType* a;int top;int capacity; }ST;void STInit(ST*…

[JVM] 5. 运行时数据区(2)-- 程序计数器(Program Counter Register)

一、概述 JVM中的程序计数器&#xff08;Program Counter Register&#xff09;是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间&#xff0c;几乎可以忽略不记。也是运行速度最快的存储区域。在 JVM 规范中&#xff0c;每个线程都有它自己的程序计数器&#xff0c;是…

.nvmrc无效

背景 既然你已经使用了nvm那么他的功能我就不介绍了。但是使用场景我与开发小伙伴探讨了一下发现很多问题。你的nvm使用方法真的正确吗&#xff1f; 问题&#xff1a;假设现在有10个项目对应10个不同的node版本&#xff0c;你应该怎么来管理呢&#xff1f; 同学1&#xff1a; …

LT8619C是一款高性能HDMI转TTL/BT656/BT601/BT1120加2PORT LVDS,支持高达4K30HZ的分辨率。

LT8619C • 概述&#xff1a; Lontium的LT8619C是一款高性能的HDMI/双模式DP接收器芯片&#xff0c;符合HDMI 1.4规范&#xff0c;支持HDCP1.4解码&#xff0c;对HDMI的支持分辨率高达4Kx2K30Hz。TTL输出可支持RGB、BT656、BT1120&#xff0c;支持最多24位RGB或BT656/BT1120输…

动手学深度学习——多层感知机(原理解释+代码详解)

目录 一、多层感知机1. 隐藏层1.1 线性模型可能会出错1.2 在网络中加入隐藏层1.3 从线性到非线性1.4 通用近似定理 2. 激活函数2.1 ReLU函数2.2 sigmoid函数2.3 tanh函数 3. 小结 二、多层感知机的从零开始实现2.1 初始化模型参数2.2 激活函数2.3 模型2.4 损失函数2.5 训练 三、…

【数据结构刷题】消失的数字和轮转数组

目录 一.消失的数字 方法一:异或全部元素 方法二:利用等差数列求和-该数组全部元素之和。 二.轮转数组 题型1:实现一个函数&#xff0c;可以左旋字符串中的k个字符。 写法1:暴力求解 根据该题写出右旋转 写法2&#xff1a;三步旋转法(左逆序&#xff0c;右逆序&#xff0c;整体…

2023年7月字节前端青训营入营题目记录(大题)

前言&#xff1a; 不一定是完整的题目内容&#xff0c;但意思差不多是一个意思 1.实现一个url解析成对象的函数&#xff1a; function ParseParams(url: string): Record<string, any> {const paramsstr url.split("?")[1];const paramsArr paramsstr.spl…

IDEA中把导航栏的字体放大

IDEA中如何把导航栏的字体放大&#xff1f; 选择File--Settings--Appearance&#xff0c;找到下面的size,选择自己想要的字体大小后点击 OK 即可。 字体大了果然看的更舒服了~写代码都有动力了哈哈哈哈 服了~

MySQL基本语句

目录 一、MySQL数据库管理 查看数据库信息 查看数据库中的表信息use 数据库名 #切换到书库中 显示数据表的结构&#xff08;字段&#xff09; 二、SQL语句 1.创建新的数据库 2.创建新的表 3.增加&#xff08;insert&#xff09; 4.删除 4.1清空表 4.2删除表 5.修改…

SpringMVC的数据响应-直接回写json字符串

一般我们操作对象&#xff0c;将对象转变为json 这时导入json 转换工具的包 包1 包2-json数据绑定 包3 返回的就是json字符串你直接返回就行了 返回一个json格式的字符串 直接回写就加这个res.... 内部字符串要进行相应的转意 能够看到json字符串 能不能你封装对象&#xff0c…

jenkins+python+pytest+selenium 自动化执行脚本并发送报告

目录 安装jenkins jenkins 安装网址&#xff1a; 傻瓜式安装 配置环境 键path 或者随便填 构建后操作 在jenkins上展示html的报告&#xff0c;需要添加一个HTML Publisher plugin插件 查看报告显示丢失了css样式 加载css样式丢失解决&#xff1a;https://www.cnblogs.com/…

如何使用Dom4J解析XML文档

文章目录 XML解析的方式使用Dom4J解析XML文档Dom4J结合XPath解析XML 最近在手写MyBatis的源码&#xff0c;在写到XMLConfigBuilder的时候&#xff0c;其中要解析xml文件构建Configuration。在MyBatis的早期版本中使用了DOM4J来解析配置文件和映射文件。但是从3.x版本开始,MyBat…

数据结构——绪论

基本概念 数据&#xff1a;数据是信息的载体&#xff0c;对客观事物的字符表示。 数据元素&#xff1a;数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理。 数据项&#xff1a; 一个数据元素由多个数据项组成&#xff0c;数据项是数据元素不可分割的最小单位。 数据…

流程图如何制作?几个流程图实用制作方法教给你

流程图如何制作&#xff1f;流程图是一种重要的图表类型&#xff0c;通常用于描绘系统、流程或程序的步骤和关系。它们在各种领域都有广泛的应用&#xff0c;包括工程、科学、商业和教育等。本文将介绍一些制作流程图的实用方法&#xff0c;以及一些快速、易于使用的工具。 制作…

k8s之Pod容器资源限制

目录 一、Pod 容器的资源限制二、CPU 资源单位三、内存资源单位四、为本地临时性存储设置请求和限制五、总结 一、Pod 容器的资源限制 当定义 Pod 时可以选择性地为每个容器设定所需要的资源数量。 最常见的可设定资源是 CPU 和内存大小&#xff0c;以及其他类型的资源。 当为…

MySQL索引事务与存储引擎

MySQL索引事务与存储引擎 索引概念索引作用副作用索引场景创建索引原则索引分类 事务概念:特性事务隔离级别 MYSQL存储引擎概念常用的存储引擎MyISAMInnoDB 索引 概念 是一个排序的列表&#xff0c;存储着索引值和这个值所对应的物理地址无须对整个表进行扫描&#xff0c;通过…

Vant安装及必坑

vant官网地址 Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 1.通过npm安装&#xff1a; 注意vue2和vue3不同&#xff0c;版本过高会报错 vue2 npm i vantlatest-v2或者npm i vant -Svue3 npm i vant或者npm i vantnext -S 备注&#xff1a…

为什么信创国产化替代 必备 “开放式ETL产品“(下篇)

信创国产化通俗来讲&#xff0c;就是在核心芯片、基础硬件、操作系统、中间件、数据服务器等领域实现信创产业的国产替代。ETL技术 属于基础软件类中间件技术。发展自己研制的安全可靠的能够保证国家信息安全的设备&#xff0c;随着信息安全问题日益突出&#xff0c;信息安全已…

小程序 点击view内部元素 不传参

点击 内部图片和文字 type 得到的是空 无法传递参数 解决办法: 用 currentTarget 代替 target

【LangChain】数据连接(Data connection)

概要 许多LLM申请需要特定于用户的数据&#xff0c;这些数据不属于模型训练集的一部分。 LangChain 为您提供了通过以下方式加载、转换、存储和查询数据的构建块&#xff1a; Document loaders &#xff1a; 从许多不同来源加载文档Document transformers&#xff1a;拆分文档…