从零开始的小白pr学习之旅--day2 数字后端流程(一)_数字后端pr_yyeternal99的博客-程序员秘密

技术标签: 数字后端  芯片  后端  

  个人认为,在开始后端工作的时候,抛开别的,首先要思考的就是我有什么,我要做什么,我要怎么做,我要做到什么程度。有了这个思路,下面将描述下我对数字后端工作每个阶段的简单理解。

  1.Data Prepare

  这一阶主要是对手头所拥有的文件,资料做一个整理。个人觉得这是后端工作重中之重的一个环节。大概要整理的内容如下图

  首先是库文件,项目所用到的某一厂家的某一制成,会有相应一套完整的库文件。需要在其中选择项目要用到的,并把它们按照固定的分类规整的放置好。比如要用到的lef,包括tlef,stdcell的lef,mem的lef,ip的lef。根据要跑的corner,选择合适的lib,ss的lib,ff的lib等等。stdcell的gds以及其它ip的gds,日后要做的drc lvs的rule等等等等。

  其次是前端交付的数据,例如网表,sdc。我个人觉得需要将每一版前端交付的数据按照日期放好,既是做个备份,同时也是留个心眼。当第二版数据来的时候也好有个对比。就比如前端告诉我新版本的网表优化了,面积小了。这时候我只需要打开网表看一眼行数,和之前的版本的网表行数做个对比。如果网表行数上新版都比旧版多很多,那我直接就可以反馈给前端网表可能有误,都不需要读入工具跑一下了。

  最后就是积累的各种辅助性的脚本,参考文件之类的。

  上述过程就是对“我有什么”做一个整理。正所谓磨刀不误砍柴工,当把手头的数据规规整整的放置好之后,日后需要什么就在专门的地方去取,会省特别多特别多的时间。可能大公司在这方面做得很完善,根本不需要我们去考虑,但是我还是觉得我这种小白应该“未雨绸缪”一下,万一哪天这些没准备好,我起码有个思路。我去整理的时候可能一次整理的不全面,日后还要返工临时去找一些文件,但经历这样一个过程,经验不就积累下来了么。

2.Initial Design

  Initial design就是把输入文件读入到工具当中。最核心的两个输入件就是网表和物理库lef。只要有这两个输入件,那么就可以开启工具进行fp了。lib库和sdc即是时序方面的输入件,有了它们,时序分析相当于有了依据。基本上这几项内容齐全了,就可以继续后续的所有流程了。

  我有什么?我有这些输入件,我要做什么?我要将这些输入件读入工具。我要怎么做?上一阶段已经把这些数据准备好了,我只需要把具体路径给工具就好了。我要做到什么程度?我需要保证输入件完完整整的读入工具,这时候就要去看log文件了。看看工具报了什么error,什么warning,是不是跟输入文件相关的,是不是报了某些文件缺失的,通过读log的方式可以保证输入件的齐全完整。

  所以你看!当data prepare做的很完善的时候,这一步是不是简单的不能再简单了。网表,sdc,lib,lef都已经分门别类的规整好了,只需要写个路径就OK了。

3.Preplace

  Preplace这一阶段我个人理解是后端工作最难做的两个环节之一。另一个是cts。

  Preplace要做的第一件重要的事就是规划整个设计的布局,也就是floorplan。fp主要是合理规划mem,ip这些macro的位置。fp的好坏影响着后续环节的进行。好的fp会使得后续环节的走线清晰,逻辑分布均匀,时序通畅。糟糕的fp会让每一步寸步难行。

  那么如何做出一个好的fp呢。以我目前的认知来看fp的一个重要依据是数据流。数据流怎么理解呢,其实就是数据从哪里来,到哪里去的一个过程。真正的项目数据不会是简单的从A到B的,而我们后端工程师也不太需要专门去搞清楚整个项目的原理,怎么搞明白数据流这就要和前端交流了。比较难搞的是,有的时候可能没有人给你理清数据流,这时候需要参考一些说明书之类的自己去搞清楚。为什么一定要按数据流摆fp呢?其实就是减少数据来回打折的现象。让路径尽可能短。数据本身由A到B再到C,fp按照moduleA moduleB moduleC的顺序摆,数据是一路通畅的。但是如果按moduleA moduleC moduleB的顺序摆,那么数据从A到B天然就会多走一段路,既造成了绕线资源上的浪费,也造成了时序问题。

  有了数据流就能将整个设计细化。我的一个思路是,先固定那些和端口有交互的module,这些和端口交互的module往往都是数据输入或者输出的地方。把这些moudule的macro放置在相应的端口附近,其实就相当于确定了头和尾。当这些module的位置确定后,再去摆放和这些module有交互的其它module。如果有某个module和其它多个module都有交互,那么肯定倾向于将该module摆在一个到其它module距离均衡的地方去。这样一步一步的每个module都会有个大致的位置了,fp基本也就完成了。

  好的fp不是一步到位的,需要根据后续place的结果,来判断fp的合理性。根据place结果可以发现fp中的不足,再返回到fp,调整module的相对位置。来来回回多次,最终会得到一版完善的fp。fp是个经验性的工作,如果有无限的时间,甚至可以不需要数据流,单纯的一版一版对比place结果就可以选出最好的fp。innovus工具也可以在图形界面,通过看各module间的走线数量确定各模块的位置。但是往往项目时间都很紧,因此需要数据流作为fp的指引,减少迭代的次数。

  我有什么?我有数据流,我迭代的不同版本的数据,innovus工具的飞线信息。我要做什么?我要摆出一版走线短,拥塞低,时序好的fp。我要怎么做?我需要根据数据流确定大致的fp,根据每版结果细调fp,这样一版一版的迭代以达到一个时序,拥塞都相对较好的fp。

  以上只是笼统的说了下fp的过程,具体的细节以后的帖子中会详细的总结的。

  Preplace要做的第二件重要的事就是电源的规划。电源可太重要了,这方面要学习的内容也特别多,这方面的知识我也很是欠缺。我就以我目前所接触到的大致说说电源规划的流程。我会把一个项目的电源分为三个部分,stdcell电源,core区域电源,以及mem,ip的电源。

  首先要明白一点,一个项目的绕线资源用于两个部分,电源的绕线资源,和数据信号的绕线资源。如果电源占用太多绕线资源,那么数据信号将无充足的绕线资源,就会有大量的short问题。如果数据信号占用太多的绕线资源,那么电源可能会不够充足,这将影响到芯片的整体性能。所以电源和数据信号的绕线资源要合理分配。假如说项目总共可使用12层metal,那么一般来说最高层的metal12,metal11,metal10,将会被完完全全用于电源,因为高层金属厚度大电阻小,最适合做电源。最底层的metal1会被用于stdcell电源。stdcell的pin也是metal1,而stdcell pin是通过metal2连接出去的,stdcell又是遍布在整个芯片中的。这样看来用于数据信号绕线资源的只有metal2的一部分以及metal3到metal9。电源都是通过最顶层一层一层传到最底层的,为了保证电源的可靠性,metal3到metal9的一部分也会被用于做power,所以实际上绕线资源会更少。所以规划电源既要保证电源的充足,也要给数据信号留裕量。一般都是开始的时候电源会打的相对密,到后面阶段如果绕线资源足够,那么自然很好,如果绕线资源不够,可以适当删除一些电源线,让给数据信号。

  其次,电源如何去打呢。stdcell的电源不必多说。core区域电源最常见的结构就是ring+stripe。ring如下图,就是连成一个环的电源。一般芯片的电源IO会分布在芯片的每条边上。通过ring环将电由外部输入到芯片内。ring环起到了均衡各点输入,避免某些区域输入点密集某些输入点稀疏造成的IR DROP。ring环一般是由最高层金属构成,我这里用红色和绿色代表最高的两层金属。当然ring环也可以由多层金属构成,这样更强劲。具体的画法日后我也会详细总结。(最近没法在家里打开工作用的服务器,只能用画图来画个简图)

  stripe如下图,就是一根根电源线,画出来就和条纹一般,接在ring环上,然后遍布整个core区域。我这里特意用不同颜色代表不同层的金属,每层都如此一层一层由高层到底层。形成了密布的电源网络。所以电源网络就是由不同层金属线一层层交织而成的网络结构。

  mem和ip的电源其实和core区域电源打法相似。只不过由于mem一直处于存储读写的状态,对电源需求高,所以mem上的电源一般会画的特别密。 mem上的电源层次会根据mem的pin的金属层决定,一般会使用比pin层次高一些的金属。mem的摆放一般都会采用堆叠的形式,所以电源还要考虑mem pin的连线问题,得保证电源线不会阻碍mem pin的连接。一些ip会对电源有特殊要求,比如需要在ip周围也做一个类似ring环的结构。这在ip的使用手册上都有描述,根据手册上的要求指导照着打就好了。

   Preplace的要做的第三件重要的事(其实是杂七杂八好几件事)插入物理cell,包括welltap,boundrycell,gfiller,decap等等。添加blockage,某些区域不能摆放cell要加hard blockage;mem沟道不希望摆除了buffer,inv外的cell需要加soft blockage;根据上一版place结果得知某个区域cell density太高,需要在preplace阶段在这个区域加partial blockgage。某些区域需要预留一部分走线资源添加route blockage。检查fp的摆放是否合理有无摆出core外的macro,有无重叠的macro,等等。检查输入件是否齐全,检查有无drc,有无power的short

  以上内容做完Preplace就算完成了,所以Preplace人工介入的地方特别多,需要注意的细节也特别多,这是需要一次又一次的尝试去积累经验的。

  不知不觉已经码了4000多字了,这次的总结就先到这了,下次再简单说说后续的环节。

  

 

 

  

            

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yyeternal99/article/details/120166759

智能推荐

数据库设计 从零开始系列之一_君望永远的博客-程序员秘密

引言:一直在从事数据库开发和设计工作,也看了一些书籍,算是略有心得。很久之前就想针对关系数据库设计进行整理、总结,但因为种种原因迟迟没有动手,主要还是惰性使然。今天也算是痛下决心开始这项卓绝又令我兴奋的工作。这将是一个系列的文章,我将以讲座式的口吻展开讨论(个人偷懒,这里的总结直接拿去公司培训新人用)。系列的第一讲我们先来回答下面几个问题数据库是大楼的根基大多数程序员都很急

java--io流关闭工具类_dengzi1980的博客-程序员秘密

import java.io.Closeable;import java.io.IOException;public class IOUtils { public static void close(Closeable ...io){ for (Closeable closeable : io) { if(closeable!=null){...

python技术路线_Python新手提升到高手必须背的25条及技术路线资料核心点_weixin_39582656的博客-程序员秘密

Python新手必须知道的25条知识资料核心点1.如何将一个数字转换成一个字符串?你可以使用自带函数str()将一个数字转换为字符串。如果你想要八进制或者十六进制数,可以用oct()或hex()。Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设...

python psutil模块_Python-psutil模块_weixin_39809175的博客-程序员秘密

psutil1.简单介绍2.安装[[email protected]_46_121_centos python]# pip3 install psutil我安装的是ipsutil-5.2.2这个版本!3.基本使用3.1 cpu相关In [1]: import psutilIn [2]: psutil.cpu_times()#使用cpu_times获取cpu的完整信息Out[2]: scputimes(user=769...

脚本执行报错No such file or directory_涛涛zy的博客-程序员秘密

报错:-bash: ./new1.sh: /bin/bash^M: bad interpreter: No such file or directory解决:vi打开脚本执行 :set ff=unix

关系代数运算之笛卡尔积、等值连接、自然连接、内连接的区别_关系代数笛卡尔积_Zcmmma的博客-程序员秘密

1. 笛卡尔积对两个关系R和S进行操作,产生的关系中元组个数为两个关系中元组个数之积。2. 等值联接在笛卡尔积的结果上再进行选择操作,挑选关系第i个分量与第(r+j)个分量值相等的元组3. 自然连接在等值联接(以公共属性值相等为条件)的基础上再行投影操作,去掉S中的公共属性列,当两个关系没有公共属性时,自然连接就转化成笛卡尔积直接上图Student表:Score表:1. 笛卡...

随便推点

Java反射机制:通过反射机制获取类的成员(构造方法,成员变量,成员方法);通过反射越过泛型检查;通过反射运行配置文件内容_y_Engineer的博客-程序员秘密

文章目录Java反射机制一、反射机制概述二、获取class文件对象的三种方式三、通过反射获取构造方法并使用四、通过反射获取成员变量并使用五、通过反射获取成员方法并使用六、通过反射越过泛型检查七、通过反射运行配置文件内容Java反射机制一、反射机制概述反射概述: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法...

【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解_int winapi messagebox(hwnd hwnd,lpctstr lptext,lpc_1_bit的博客-程序员秘密

本篇作为Windows API 系列文章的第一篇,将简要的讲解一下什么是Windows API,Windows API能做些什么,并且尽可能讲解一些新出现的专有名词;本系列博文几乎没有难啃的“专业术语”,尽量让读者能够看明白文章所述内容,是本系列博文的核心宗旨之一。读本系列博文的读者必须具备以下的只是储备:C/C++语言基础语法及了解面向对象概念以上列出的这一个点是最核心的知识储备,因为...

(zt)ACE中的Proactor介绍和应用实例_weixin_30832983的博客-程序员秘密

把这两天做Proactor的一些经验和心得写一下,可能会给一些人帮助。 Proactor是异步模式的网络处理器,ACE中叫做“前摄器”。 先讲几个概念:前摄器(Proactor)-异步的事件多路分离器、处理器,是核心处理类。启动后由3个线程组成(你不需要关心这三个线程,我只是让你知道一下有这回事存在)。 接受器(Acceptor)-用于服务端,监听...

mac、ip、udp头解析_mac udp_叨陪鲤的博客-程序员秘密

一、MAC帧头定义/*数据帧定义,头14个字节,尾4个字节*/typedef struct _MAC_FRAME_HEADER{ char m_cDstMacAddress[6];    //目的mac地址 char m_cSrcMacAddress[6];    //源mac地址 short m_cType;            //上一层协议类型,如0x0800代表上一层是IP...

bytebuffer 与 byte数组 转化_bytebuffer 转byte数组_杨宗卫的爸爸的博客-程序员秘密

更多0javaByteBuffer// Create a byte arraybyte[] bytes = new byte[10];// Wrap a byte array into a bufferByteBuffer buf = ByteBuffer.wrap(bytes);// Retrieve bytes b

【2021年1月新书推荐】Beginning Machine Learning in the Browser_图书分享员的博客-程序员秘密

各位好,此账号的目的在于为各位想努力提升自己的程序员分享一些全球最新的技术类图书信息,今天带来的是2021年1月由Apress出版社最新出版的一本关于机器学习的书。Beginning Machine Learning in the Browser作者:Suryadevara, Nagender 出版社:Apress出版时间:2021-01-10 ISBN:978-1-4842-6842-1图书简介在浏览器中或在资源受限的计算设备上应用人工智能技术。机器学习 (ML) 可能是一个令人望而生

推荐文章

热门文章

相关标签