给在校学生的科普文:数字芯片后端工程师的日常

122 篇文章 152 订阅

芯片后端设计,看似只是将网表中的晶体管摆放好。但并不是如同砖头砌墙那样简单粗暴。它是一门兼具形式美和工程实践需求的技术。形式美,直接来源于功能内容和需求,在后端设计的环节中,数以万计的标准单元如散乱的点点繁星,却在功能、时序等满足的前提下,寻求各个Block之间的依赖关系,进而使芯片内部之间呈现出和谐与稳定。

数字芯片后端工程师主要工作就是接收数字前端提交的代码,最终交付一个完整的芯片布局布线结果。

数字芯片后端设计环节一般都是芯片项目驱动。芯片也分很多种,大小不同,难度不同。简单按功能划分,主要类型有 WIFI芯片、BLE芯片、RFID芯片、音频芯片、传感器芯片、汽车电子、手机芯片等等。

这里就拿一个比较小的芯片举个例子,让大家大概了解设计一个芯片的前前后后的工作,整个项目大概三个月时间。

项目一般分三个阶段,因为每个阶段的数据质量不一样,所以每个阶段的目的也不一样。

1.0阶段:

前端数据:

给一个初始的网表,这个网表要求包含了所有的IP,包含了所有的PAD,有基本的CLOCK结构。

在这里插入图片描述

后端工作:

根据PAD和IP调整出大概的布局情况,对于IP的形状和出pin的位置给出具体的建议和IP团队协商。
在这里插入图片描述

对于布局做POWER和GROUND的规划,PG的宽度,间距,全局PG怎么走,PG的设计是否满足对于最大电压降的要求?
在这里插入图片描述

PAD的摆放是否满足ESD的要求,PAD RING的走线怎么设计?
在这里插入图片描述

尝试不同的布局,得到最小的可以绕线绕通的布局,追求极限。
在这里插入图片描述
检查后端时序工具和前端时序工具的一致性(有的时候库有问题,有的时候sdc有问题)。

2.0阶段:

前端数据:

这个网表所有要用的IP和PAD数量都已经freeze,时钟结构(包括DFT)都已经完成,前端工具在合理的uncertain下面,时序干净。

后端工作:

​根据这版网表确定最终的布局,PAD摆放和IP的custom routing需要开会进行初步review。

开始做时序收敛,仔细分析时钟结构(不断的和前端进行沟通),分析绕线结果,做到时序收敛(包括setup和hold),进入signoff工具查看时序一致性。
在这里插入图片描述
开始看physical verification的结果,确保base layer(即metal层以下的,例如poly AA等)没有问题,所有的问题都可以在最终版修复。
在这里插入图片描述
布局布线前的网表和布局布线后的网表进行一致性检查。

3.0阶段:

前端数据:

网表数据基本freeze,时钟结构不会再进行变化,可以有微小的调整,但仅限于ECO实现。ECO一般分为两大类。

Function ECO:

局部的改动逻辑功能,例如将cell的连接关系改掉,或者增加删除inverter等。

Timing ECO:PT/Tempus优化分析后吐出的timing优化脚本。

后端工作:

做时序收敛,并且保证在时序signoff工具中时序收敛,然后开始清所有的错误(DRC/LVS/TIMING/IR/ERC …),没日没夜的进行迭代,直到最终的流片。

文章来源于:知乎Forever snow

零基础的理工科生千万不要错过,现在正是入行的最好时机,未来的门槛只会越来越高,早报名早入行~

如果你想要快速入门、转行做数字前端设计,不妨到移知官网学习这些课程,给自己一次蜕变的可能。芯片东西还是挺多的,要讲的也太多。慢慢学吧。祝好运!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } else if (strcmp(key, "physics") == 0) { if (students[j].physics < students[j + 小朋友们好,今天我要给大家介绍一种微生物,它叫做芽孢。芽孢1].physics) { temp = students[j]; students[j] = students[j + 1]; students[j + 1在我们的生活中很常见,可能你们还不知道它是什么,但是相信你们一] = temp; } } else if (strcmp(key, "english") == 0) { if (students[j].english定见过它。那么,芽孢是什么样子的呢?我们来一起看看吧! 首先, < students[j + 1].english) { temp = students[j]; students[j] = students[j + 1]; students[j + 1] = temp; } } else { printf("Invalid field!\n"); return; } 我们需要知道芽孢的形态和结构。芽孢是一种微小的细胞,通常只有几 } } printf("Students sorted by %s:\n", key); print_students(students, count); } ``` 其中微米到几十微米的大小。芽孢通常呈现出圆形或卵圆形的形态,有一,`read_students` 函数从件中读取学生信息,`save_students` 函数将学生信息保存到件中,`print_students` 函数输出所有学生信息,`find_student` 函数根据学号或姓名查找学生信息,`层厚厚的壳囊包裹着整个细胞。这个壳囊可以保护芽孢在外界环境的max_score` 函数查找某门课程的最高分学生信息,`insert_student` 函数插入一个新的学影响下存活下来。 芽孢的壳囊是由多层膜组成的。这些膜可以保护芽生信息,`delete_student` 函数删除一个学生信息,`sort_students` 函数按照指定字段排序所有学生信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值