数字后端——布图规划

        布图规划(floorplan)与布局(place)在芯片设计中占据着重要的地位,它的合理与否直接关系到芯片的时序收敛、布线通畅、电源稳定以及良品率。所以在整个芯片设计中,从布图规划到完成布局一般需要占据整个物理实施1/3的时间

        芯片设计中,在布图规划后需要进行电源设计;对于较小的芯片,它的过程是建立一些简单的电源网线,因此,电源设计常常被认为是布图规划所捎带的一部分工作。随着芯片的尺寸增大,电源设计也更为复杂,它已不仅仅局限于“网格”设计,拟称它为“电源(地)规划”则更能反映出当代设计的实际情况。因此,在物理实施的过程中,从数据输入到时钟树综合之前,内容上可分成三大项内容,即布图规划电源规划布局。其中布局又称标准单元放置,它实际上包括对I/O单元的排序放置、大模块(block)放置和标准单元放置的规划。而布图规划与电源规划和布局三项任务通常是连续进行的,但在工程中往往是穿插反复进行。 

一、布图规划概述

        布图规划开始时,首先要准备好各种基本设计数据和相应的物理库、时序库文件,并输人到布图规划的工具环境中来,为其后的布局和布线做好准备。需要准备的文件如下:

  • 设计网表,一般是门级网表,如chip_design.v
  • 设计约束文件,包括时序约束文件,如chip_design.sdc
  • 物理库文件,一般是LEF文件
  • 时序库文件,一般是LIB文件
  • I/O文件,一般是I/O的约束文件
  • 布图要求文件

        布图规划的主要内容包含了对芯片大小(die size)的规划、芯片设计输入输出(I/O)单元的规划、大量硬核或模块(hard core, block)的规划等。在某些不规则的设计中,需要对布线通道进行一些特殊的设置,这些参数的设定也是布图规划中的组成部分。在一些较为复杂的超大规模集成电路设计中,为了尽量减少时钟信号线的偏差、提高芯片的性能,在布局之前便需要对时钟网络进行规划,此时的时钟网络分布与普通的时钟树不同,它也是布图规划的重要组成部分。可见,布图规划的内容是对芯片内部结构的完整规划与设计。

       布图规划的主要内容为:

  1. 确定芯片的面积。出于成本的考虑,芯片的面积越小,每张硅片(wafer)上产出的裸片(die)数量将增大,从而平均到每个芯片上的成本会降低,但是如果布图规划设定的裸片面积太小,则会造成拥塞程度高,难以布线,从而会导致长周期的设计迭代,一个合理的面积设定是在保证布线的同时尽量节约产品成本,所以布局的最初目标是估计芯片面积的大小。
  2. 确保时序的收敛。在数字集成电路设计中,所有的工作都是在时钟节拍的控制下完成,所以从一个寄存器到达另外一个寄存器的路径长短决定了芯片的性能。在芯片设计的布图规划阶段,设计者就要考虑到最终芯片是否能满足设计的标准时序约束(SDC)的要求,实现时序的收敛,满足芯片所需要实现的性能,因此在布图规划阶段需要对芯片的延迟进行预估。
  3. 保证芯片的稳定。芯片能稳定地工作是芯片价值的重要组成部分,芯片输入输出单元的静电保护和输入输出单元的供电设计都是保证芯片输人输出稳定的重要条件。电源规划也是保证芯片内部电源分布均匀、供电充足、芯片工作稳定的必要条件。
  4.  满足布线的要求。布图规划与布局完成了芯片的器件摆放,而芯片功能的实现需要将所有的器件按照要求连线,故布图规划的目的是为了方便走线,在保证布线通畅的同时,尽量缩短走线的长度,也即减小互连线的延迟,从而有效地提高芯片的性能。这耑要设计者对逻辑设计及其功能有一定的了解,如各个模块之间的连接关系、数据通路结构等,一个好的布图规划和一个差的布图规划在时序上的差别甚大。

二、I /O单元的规划

1、I /O 单元的类型和布局

        作为连接芯片内部信号与封装管脚的桥梁,I /O 单元的分配要综合考虑印制板走线、封装形式、供电情况以及内部模块结构,从而保证信号从芯片内部传递到外部时其路径最短,同时要求从I/O单元关键引线到封装点时,避免信号交叉,方便封装基板的制作,减少基板上的走线层数,从而降低封装的成本。当芯片为通用芯片时,需要参考现有的类似芯片的封装形式,从而方便产品的应用,如果芯片是专用于某个设计,则芯片的封装可以以印制板走线为基础,从而确定I /O 单元的位置。

        I /O 单元可分大致为信号接口和电源两种类型信号I /O 单元的关键是选择驱动的大小,而电源I /O单元需要重点考虑的是供电电源的数量计算和摆放。I /O 单元的类型有:数字输入单元、数字输出单元、数字双向输入输出单元、静电保护单元、给I /O 接口单元供电的单元、给芯核供电的单元、数字填充单元、模拟供电单元、模拟输入单元、模拟输出单元、模拟填充单元、专用输入输出单元、角填充单元等。在输入输出单元中,又分为普通输入、带上拉输人、带下拉输入、带施密特整形等多种类型,按照驱动能力(以0.18um为例)可以分别有1mA、2mA、4mA、6mA、8mA、12mA、16mA等。设计者需要根据实际情况选择单元的类型以及驱动能力。在基于标准单元的数字集成电路设计中,I /O 单元都是厂家提供,工程师可以参考设计文档,从而完成I /O 单元的选型.

        厂家所提供的库中,往往具有多种宽度的I /O 单元。如SMIC的0. 18um 1P6M工艺中,就有普通宽度、狭窄宽度、宽宽度3种类型。当芯片的输入输出单元较多,而内部逻辑单元较少且一般为I /O 单元限制型设计时,一般选用狭窄的I /O 单元;当芯片的输入输出单元较少,而内部逻辑单元较大时,则一般选用宽的I /O 单元。在同样条件下狭窄型I /O 单元比宽型I /O单元的高度要高。当设计为子模块时,I /O单元的形式为接点(pin)而不是接口(pad)。芯片设计中I /O单元为最常见下图(b)。在ASIC设计中,为了提高利用率,每一边的所有单元可以事先做成一块模块。芯片的pin和pad的物理特征和形状与封装中的pin和pad是不一样的

芯片中pin指芯片内部各子模块或cell逻辑连接的接点;封装中的pin指芯片封装好后的管脚,即用户能够看到的管脚。IO pad是与芯片外部连接的。

        此外,当芯片面积较大、芯片时序较为紧张时,则采用倒置封装(flip chip)设计,即I /O 单元的分布不是四边摆放,而是均匀分布在芯片的内部,让芯片的接触点与基板、载体、电路板相连,在相连的过程中,由于芯片的凸点是朝下连接,因此称为倒装。常见的如电脑中的内存条:

       flip chip 优点在于其封装简单、封装与晶片尺寸相当、成本低、便携、芯片倒装焊减少传统引线的寄生电容,有利于提高频率、改善热特性;而其缺点为芯片裸露、还需要进行二次封装、二次布线设计复杂。

        在布图规划和布局工具中,对采用倒置封装的面积I /O(area I/O)的摆放通过以下步骤完成:

  1. 在LEF技术文件中,需要用CLASS PAD和PAD SITE将I /O单元定义为特定的类型。
  2. 将flip chip的I /O 单元库导入设计。
  3. 加载版图规划文件和I /O 单元设置文件。
  4. 放罝 flip chip 的 I/O 单元。

2、I /O单元的供电

        在数模混合的标准I/O单元库中,电源I /O 单元可以大致分为3类:

  1. 给模拟器件供电的I /O 单元
  2. 给数字器件供电的I /O 单元
  3. 隔离数字供电I /O 单元和模拟供电I /O 单元的隔离I /O 单元

(1)模拟器件供电

        给模拟器件供电的I /O 单元在布局上有其特殊的要求,一般情况下,一个模拟器件采用一对供电I / O单元便可以满足要求,如果芯片的I / O单元比较宽松,则最好使用“双绑定”(即将die上两个I /O 单元绑定bonding到一个焊盘上),从而保证器件的稳定工作。

(2)数字器件供电

        数字I /O 单元也分为两大组,一组是给I /O 单元供电,一组是给核内的标准单元供电,因此在设计I /O 单元供电时,需要计算两组电源的数量以及其分布。

        1、给核内单元供电的I /O单元的数量m 根据芯片的功耗I /O单元的供电电压以及供电电流来估算,公式如下:

m=\frac{P_{avg}}{V_{pad}\cdot I_{pad}}\cdot k

        式中,P_{avg}是芯片的平均功耗

                 V_{pad}是供电I /O单元正常正常条件下的供电电压

                 I_{pad}是供电I /O 单元的最大电流

                k是调整因子,最小取1〜2,域大可取5〜10,根据芯片的实际情况而定

       2、给I /O单元供电的供电单元数量也由多种因素来决定,I /O 单元的功耗、输出I /O 单元的驱动能力、同步开关噪声(SSN,simultaneous switching noise; SSO, simultaneous switching output noise)等都影响了此类I /O 单元的数值,经验做法是给I /O单元供电的单元数量与给输出信号端口的比例为1 : (5〜10)的关系,与给内核供电的I /O 单元的数量是1 : 2 的关系。 

三、延迟预估

        在布图规划与布局之前,常规条件下会对芯片的时序进行理想情况下的零线负载模型(zero WLM,wire load model)做延迟分析,从而验证当前使用的、刚综合出来的网表是否有较好的时序(通常在逻辑综合结束时,应当产生用零线负载模型进行延迟分析报告)。如果在理想情况下,时序已经很紧张,建立时间的实际值与要求值之差,即剩余时间(slack)比较大,则应当重新优化网表,或者从RTL代码着手,缩短关键路径的延迟。

        以层次化设计为例,下面说明在布图规划阶段的延迟预估的方法。

        层次化设计大致可分为三个步骤:芯片顶层设计规划子模块分割(partition)与实现以及芯片顶层组装实现。层次化设计的时序预估有两部分内容,在芯片规划阶段对整个芯片的延迟预估和时序分析以及子模块约束的产生,子模块约束的产生是在芯片延迟预估和时序收敛的前提下进行的。在时序预算(time budgeting)时,首先需要对整个芯片的时序进行分析,分析方法为:实验多种布图规划后,根据其标准单元布局,采用静态时序分析方法,对整个芯片的延迟做出估算,用时序违例(即负值剩余时间,negative slack)来评估哪种布图规划更为合理。得到时序分析的结果后对时序进行预算。

        在层次设计时进行时序预算的方法是:首先确认穿过各个分割区域的时钟,并产生时钟路径上的传播延迟;然后确定各个分割区域的所有边界接点,对每一分割区域的边界接点,根据通路延迟的大小,对应其所属的时钟域,输入接点生成输入延迟(set_input_delay),输出接点生成输出延迟(set_output_delay)等时序约束。

        一个输入输出单元可能有多条路经通过,多条路径经过一个单点时会产生时序竞争。在处理这些多时钟端口时,设计工具会选择用户指定的路径来解决竞争问题,并且还会把该路径设为时序预算分配中的考虑对象,可以用时序预算给出的参数选项(option)来完成路径的选择。

  • -min:选用最小周期时间的路径进行时序预算。
  • -max:选用最大周期时间的路径进行时序预算。
  • -critical:选择具有最坏slack值的路径进行时序预算。
  • -muilticlock:对时钟边沿分割区域的端口产生多输入和输出延迟约束。
  • -normalized::用slack值与需求时间的比值进行时序预算。
  • -combined :多种路径组合进行时序预算。

        另外,以路径延迟(set_max_delay,set_min_delay)的约束通过一个多时钟域端口时,
该约束与输人输出延迟等约束相比,具有优先权。

        在层次化设计中,需要对时钟树上的延迟进行预估和分配,在芯片进行逻辑综合时,应根据时钟周期,计算时钟在芯片内的延迟。在展平式设计时,布图规划和布局阶段一般以定义的时钟延迟和时钟不确定性来模拟时钟,在时钟树综合阶段才分析时钟的真实属性。但是在层次化设计中,因为在子模块级才进行时钟树综合,故在顶层布图规划和布局阶段,需要对时钟树上的延迟进行预估和分配

        上图所示的层次化设计,时钟clk1从顶层穿过了子模块1、子模块2、子模块3,最后又回到了顶层。该时钟树上的时钟延迟分配主要从模块之间的时序预估,以及时钟树穿过区域的面积从而确定时钟树上延迟的大小。clk1总的时钟树的延迟理想值为1.2ns,子模块1的面积较小,且逻辑较为宽松,则时钟树上的延迟分配了 0. 2ns,子模块2的面积跟子模块3 的面积相仿,但是clk1在子模块2中所挂接的寄存器较模块3多,时序较为紧张,故而分配给子模块2的时钟树延迟为0. 5ns,分配给子模块3 的时钟树延迟为0.3ns。从顶层到子模块1之间的时钟延迟为0.1ns,从子模块3 到输出的延迟为0. 1ns,故分配的(指令)结果如下:

create_clock -name "clk1" -period 10 -waveform {0 5} [get_ports {xtall}]
set_clock_latency 1.2 [get_clocks {clk1}]
create_clock-name "sub1_clk1" -period 10 -waveform {0 5} [get_ports {module1/A}]
set_clock_latency -source 0.1 [get_clocks {sub1_clk1}]
set_clock_latency 0.2 [get_clocks {sub1_clk1}]
create_clock-name "sub2_clk1" -period 10 -waveform {0 5} [get_ports {module2/B}]
set_clock_latency -source 0.305 [get_clocks {sub1_clk1}]
set_clock_latency 0.5 [get_clocks {sub2_clk1}]
create_clock-name "sub3_clk1" -period 10 -waveform {0 5} [get_ports {module3/A}]
set_clock_latency -source 0.9 [get_clocks {sub1_clk1}]
set_clock_latency 0.3 [get_clocks {sub3_clk1}]

         从上面的图中我们看出,时钟树上的延迟分为两种:一种即-source定义的是从时钟的源头到达所定义的时钟树根节点的延迟;另一种则是直接对时钟树上延迟的定义,通过两者来确定一个时钟树的延迟信息。   

 四、模块布放与布线通道

        模块或宏模块的布放是布图规划中比较繁琐但是很重要的工作,进人纳米设计技术之前,大多采用半自动布放。和I /O单元的布放方法类似,模块的布放属于布局,但它又是在布图规划阶段完成的。由于占据空间很大,它们的布局完成后,电源规划才有实际意义。当代SoC设计可以包含数百或更多个模块,如下图所示,这时必须借助EDA工具来实现模块的自动布局。

        模块布放位置是建立在布图规划基础上的,模块布局的结果又会对前期布图规划的期望目标产生直接影响,其中,能否保证布线的完成是通过布线通道的分析来进行的。

        当读入设计数据和用户定义芯片的面积(即die size)之后,EDA 工具根据LEF(或其他工艺文件)工艺内容中布线间距(pitch)的大小,在整个芯片内部自动生成各金厲层连续、规则的布线轨道。布线轨道(routing track)是指芯片内部专门用于布线的路径,布线通道(routing channel)是每两条或多条布线轨道的空间,它们的上面是不可以摆放标准单元的。在模块(如RAM)四周通常还预留不允许摆放标准单元仅供专门布线的晕道(halo)。这是因为在基于标准单元的设计中,标准单元在布局阶段完成了整个芯片内部的摆放,由于标准单元占据了底层金属的绝大多数布线轨道,当芯片局部出现拥塞时,采用布线晕道的定义会增添更多底层的布线通道。RAM之间预留了很多不放置标准单元的底层布线通道。当然这种预留底层布线通道的做法,解决了当前局部拥塞的问题,但也会产生其他区域的拥塞问题,因此,在布图规划和布局中,需要多次迭代分析,从而实现最佳效果。

        在层次化设计中,对各个预计分割的区域之间也需要进行布线通道的定义。通道宽度估算会考虑模块布局的拓扑约束,这些约束包括子模块到子模块的界限及它们之间的距离、顺序和排列,以及它们的表面比率、网络权重和子模块隔离区。如下图所示 。  

        在层次化设计中,布线通道按照形状分有典型的T 形通道L 形通道两种。需要通过对这两种类型的通道进行均衡、排序以及切割等方法,从而保证模块之间的布线通道能够满足芯片的布通性。当两个子模块在芯片内部的空间跨度比较大时,有时还需要定义直通(feedthrough)布线通道,从而满足时序和布线的要求。由于基于行的子模块内的布线一般比子模块间的布线更节约布线空间,因此展平式设计可以减少布线面积。这样,在层次化的方法中也引入了满足基于行的布线方法,称作无通道(charmel-less)分割法如下图(b)所示。下图(a)为基于布线通道的分割,下图图(c)为混合法。图中每个“模块(block)”为层次化设计中从顶层分割而成的子模块,每个子模块可以包含一个或多个逻辑模块(module)。

         

        当每个子模块实现了布局布线并满足时序要求后,可以产生自己的物理单元(LEF)和时序单元( lib或1LM),这时它就成为一个硬核模块,它可以被看成是展平式设计中基于模块的设计(BBD,block-based design)类型。   

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

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

相关文章

利用SSH传输文件

在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件scp usernameservername:/path/filename /var/www/local_dir(本地目录) 2、上传本地文件到服务器scp /path/filename usernameservername:/path 例如scp /var/www/test.php root19…

App WebView实例化

a,高级设置里的环境变量 jdk的配置 b,下载Google的sdk,里面直接包含eclipse 1,新建一个项目 2,起个名字 3,设么走不做,next 4,只操作选择显示的三种方式 5,next什么都不做…

[动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现

前言 关于动态代理的系列文章,到此便进入了最后的“一出好戏”。前俩篇内容分别展开了:从源码上,了解JDK实现动态代理的原理;以及从动态代理切入,学会看class文件结构的含义。 如果还没有看过这俩篇文章的小伙伴&#…

数字后端——电源规划

电源规划是给整个芯片的供电设计出一个均勻的网络,它是芯片物理设计中非常关键的一部分。电源规划在芯片布图规划后或在布图规划过程中交叉完成,它贯穿于整个设计中,需要在芯片设计的不同阶段对电源的供电网络进行分析并根据要求进行修改。,主…

逆向project实战--Acid burn

0x00 序言 这是第二次破解 crackme 小程序,感觉明显比第一次熟练。破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程。以下将具体介绍。 0x01 初次执行 刚開始拿到 crackme 先执行程序。看看有哪些明显…

PyCharm使用技巧(六):Regullar Expressions的使用

2019独角兽企业重金招聘Python工程师标准>>> PyCharm v2018.2最新版本下载 使用正则表达式查找和替换文件中的文本 示例代码 使用正则表达式查找和替换字符串 假设您想用扩展标记<title> </title>替换元素&#xff08;title&#xff09;中的属性&#x…

jQuery笔记总结

来源于&#xff1a;http://blog.poetries.top/2016/10/20/review-jQuery/ http://www.jianshu.com/p/f8e3936b34c9 首先&#xff0c;来了解一下jQuery学习的整体思路 第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑&#xff0c;通…

芯片生产流程

每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。 一、晶圆加工 所有半导体工艺都始于一粒沙子&#xff01;因为沙子所含的硅是生产晶圆所需要的原材料。晶圆是将硅(Si)或砷…

GRE Sub math 报名

Step1 注册ETS帐号 Step2 登录帐号&#xff0c;点击Register/Find Test Centers, Dates Step3 按照提示查询考场 如果没有结果而是出现了如下提示&#xff0c;意味着这个地方没有考位了&#xff0c;需要选择其他地方的考位 Step 4 接下来就和GRE general test的过程一样了&…

示例解读 Python 2 和 Python 3 之间的主要差异

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 每门编程语言在发布更新之后&#xff0c;主要版本之间都会发生很大的变化。 在本文中&#xff0c;Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异&#xff0c;以帮助说明…

数字后端——时钟树综合

在数字集成电路设计中&#xff0c;时钟信号是数据传输的基准&#xff0c;它对于同步数字系统的功能、性能和稳定性起决定性作用&#xff0c;所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必…

52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)

MySQL创建用户以及授权 默认用户是root用户&#xff0c;不可能所有人员都用root用户&#xff0c;创建用户防止误删除&#xff0c;因为mysql里边有多个库每个库里有很多表&#xff0c;所以需要给单独的用户做一些授权我只需要它对某一个数据库有权限&#xff0c;或者说对某个数据…

20145225 《信息安全系统设计基础》第14周学习总结

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一&#xff0c;它是对主存的一个抽象 三个重要能力&#xff1a; 它将主存看成是一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xf…

数字后端——布线

布线是继布局和时钟树综合之后的重要物理实施任务&#xff0c;其内容是将分布在芯片核内的模块、标准单元和输入输出接口单元( I /O pad&#xff09;按逻辑关系进行互连&#xff0c;其要求是百分之百地完成它们之间的所有逻辑信号的互连&#xff0c;并为满足各种约束条件进行优…

streamsets 集成 minio s3测试

具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考&#xff1a; https://www.cnblogs.com/rongfengliang/p/9197315.html 创建bucket &#xff08;crate 集成使用&#xff09; 测试的csv 文件从https://www.s…

【codecombat】 试玩全攻略 第十四关 已知敌人

第十四关 已知敌人 在这一关里&#xff0c;我们的英雄获得了一副可以看见敌人的眼镜&#xff0c;所以他很强势的学会了“发现敌人”的技能。 hero.findNearestEnemy()命令&#xff0c;单词多了&#xff0c;首字母都要大写了&#xff0c;不然分不出来。玩过wow的小伙伴用过 宏命…

数字后端——信号完整性分析

随着光刻和集成电路制造工艺的不断进步&#xff0c;以及芯片的特征尺寸从深亚微米到纳米的迅速采用&#xff0c;人们一方面因为芯片的功能极大提高而受益&#xff0c;另一方面&#xff0c;当逻辑门的沟道长度减小时&#xff0c;门的开关时间会减小&#xff0c;这意味着输出驱动…

CMOS图像传感器——TDI CIS

一、面阵与线阵图像传感器 人们在日常生活中见到的相机大多基于普通的面阵图像传感器,这种相机多用来拍摄静止的物体。即使用它们來拍摄运动的物体,也仅仅是缩短了相邻两次拍摄的时间间隔,无需对所拍摄图像进行额外操作,对物体的运动方向和速度也没有限定条件。 除此之外,…

做好数据挖掘模型的9条经验总结

爱数据学习社 welcome数据挖掘是利用业务知识从数据中发现和解释知识(或称为模式)的过程&#xff0c;这种知识是以自然或者人工形式创造的新知识。当前的数据挖掘形式&#xff0c;是在20世纪90年代实践领域诞生的&#xff0c;是在集成数据挖掘算法平台发展的支撑下适合商业分析…

数字后端——低功耗设计物理实施

一、低功耗设计方案综述 为了实现集成电路的低功耗设计目标&#xff0c;我们需要在系统设计阶段就采用低功耗设计方案&#xff0c;因为随着设计流程的逐步推进&#xff0c;到了芯片设计实现阶段&#xff0c;降低芯片功耗的方法将越来越少&#xff0c;可节省功耗的百分比将不断下…