基于ICC的数字后端ic'设计

合集下载

IC后端设计

IC后端设计

IC后端设计ic后端设计IC(“集成电路”)产业是全球高新技术产业的前沿与核心,是最具活力和挑战性的战略产业。

自2000年来,在国家政策的大力支持下,我国集成电路产业得到了长足的发展,而作为集成电路产业最前沿的设计业更是呈现出“百花齐放”的繁荣景象,作为产业命脉的IC 设计人才,在IC产业最集中的长三角地区也仅仅只有几千人。

所以拥有一定工作经验的设计工程师,目前已成为人才猎头公司,比如烽火猎聘公司争相角逐的“宠儿”。

IC后端设计是指将前端设计产生的门级网表通过EDA设计工具进行布局布线和进行物理验证并最终产生供制造用的GDSII数据的过程。

其主要工作职责有:芯片物理结构分析、逻辑分析、建立后端设计流程、版图布局布线、版图编辑、版图物理验证、联络代工厂并提交生产数据。

作为连接设计与制造的桥梁,合格的版图设计人员既要懂得IC设计、版图设计方面的专业知识,还要熟悉制程厂的工作流程、制程原理等相关知识。

正因为其需要掌握的知识面广,而国内高校开设这方面专业比较晚,IC后端设计工程师的人才缺口更为巨大。

数字后端设计流程1. 数据准备。

对于CDN 的Silicon Ensemble而言后端设计所需的数据主要有是Foundry厂提供的标准单元、宏单元和I/O Pad的库文件,它包括物理库、时序库及网表库,分别以.lef、.tlf和.v 的形式给出。

前端的芯片设计经过综合后生成的门级网表,具有时序约束和时钟定义的脚本文件和由此产生的.gcf约束文件以及定义电源Pad的DEF(DesignExchange Format)文件。

(对synopsys 的Astro 而言,经过综合后生成的门级网表,时序约束文件SDC是一样的,Pad的定义文件--tdf ,.tf 文件--technology file,Foundry厂提供的标准单元、宏单元和I/OPad 的库文件就与FRAM, CELL view, LM view 形式给出(Milkway 参考库and DB, LIB file)2. 布局规划。

数字IC后端流程

数字IC后端流程

2020/10/16
7
西安邮电大学微电子学系
Data Setup
CMOS集成电路版图
逻辑单元库:一个完整的单元库由不同的功能电路所组 成,种类和数量很多,根据其应用可分为三类:
标准单元(standard cells)
组合逻辑
时序逻辑
模块宏单元(macro block)
ROM
RAM
专用模块(如ASSP、DSP等)
Black box商业IP(如ARM、标准单元等)
模拟模块(如PLL、振荡器等)
输入输出单元(I/O pad cell)
输入
输出
三态
考虑ESD
双向
2020/10/16
8
西安邮电大学微电子学系
Data Setup
CMOS集成电路版图
Physical Reference Libraries
2020/10/16
2020/10/16
5
西安邮电大学微电子学系
Data Setup
CMOS集成电路版图
后端设计数据准备
设计网表
gate-level netlist
设计约束文件 SDC file
物理库文件 sc.lef/io.lef/macro.lef
时序库文件 sc.lib/io.lib/macrand name designations for each layer/via Physical and electrical characteristics of each layer/via Design rules for each layer/Via (Minimum wire widths and wire-to-wire spacing, etc.) Units and precision for electrical units Colors and patterns of layers for display …

数字后端设计知识点

数字后端设计知识点

数字后端设计知识点数字后端设计是指用于处理数字信号的电子系统的设计。

这些系统可以是用于通信、计算、图像处理等领域的硬件或软件系统。

数字后端设计是数字系统设计的重要组成部分,它涉及到多个技术领域和知识点。

本文将介绍数字后端设计的一些主要知识点。

一、数字信号处理数字信号处理是数字后端设计的核心内容之一。

它涉及到对数字信号进行采样、量化、编码、滤波和解调等一系列处理步骤。

在数字信号处理中,需要使用一些数学方法和算法来实现信号的处理和分析。

常见的数字信号处理算法包括快速傅里叶变换、数字滤波器设计、自适应滤波等。

二、数字系统设计数字系统设计是数字后端设计的另一个关键知识点。

它涉及到使用数字逻辑门、触发器、寄存器等组件来设计和构建数字系统。

数字系统设计需要考虑系统的功能需求、性能要求和资源限制,并应用相应的设计方法和工具进行系统综合、优化和验证。

常用的数字系统设计方法包括VHDL、Verilog等硬件描述语言的使用。

三、片上系统设计片上系统设计是数字后端设计中的一个重要技术领域。

它指的是将整个数字系统或数字信号处理功能集成在一个芯片上。

片上系统设计需要考虑电路的功耗、面积和性能等因素,并进行电路和物理布局的优化。

常见的片上系统设计技术包括可编程逻辑器件(FPGA)的设计、应用特定集成电路(ASIC)的设计等。

四、时序设计与时钟管理时序设计是数字后端设计中的一个重要环节。

它指的是在数字系统中对信号传输的时间和顺序进行控制和管理。

时序设计包括时钟的生成、分配和同步等。

时钟管理是保证数字系统时序性能的关键。

在时序设计中,需要考虑时钟频率、时钟延迟和时钟抖动等因素,并应用相应的时序设计技术来满足设计要求。

五、功耗优化与集成电源设计功耗优化是数字后端设计中的一个重要问题。

在数字系统设计中,电路和系统的功耗是需要考虑和优化的因素之一。

功耗优化方法包括电源管理、低功耗设计和节能算法等。

集成电源设计是为数字系统提供电源电压和电流的设计。

IC后端流程(初学必看)

IC后端流程(初学必看)

校外IC后端实践陈说之迟辟智美创作本教程通过对synopsys公司给的lab进行培训,从verilog代码到邦畿的整个流程(固然只是基本流程,因为真正一个年夜型的设计不是那么简单就完成的),此教程的目的就是为了让年夜家尽快了解数字IC 设计的年夜概流程,为以后学习建立一个基础.此教程只是自己探索实验的结果,其实不代表内容都是正确的,只是为了说明年夜概的流程,里面一定还有很多未完善而且有毛病的处所,我在今后的学习傍边会对其逐一完善和修正.尔后端流程年夜致包括一下内容:1.逻辑综合(工具DC 逻辑综合是干吗的就不用解释了把?)2.设计的形式验证(工具formality)形式验证就是功能验证,主要验证流程中的各个阶段的代码功能是否一致,包括综合前RTL代码和综合后网表的验证,因为如今IC设计的规模越来越年夜,如果对门级网表进行静态仿真的话,会花费较长的时间(规模年夜的话甚至要数星期),这对一个对时间要求严格(设计周期短)的asic设计来说是不成容忍的,而形式验证只用几小时即可完成一个年夜型的验证.另外,因为邦畿后做了时钟树综合,时钟树的拔出意味着进入布图工具的原来的网表已经被修改了,所以有需要验证与原来的网表是逻辑等价的.3.静态时序分析(STA),某种水平上来说,STA是ASIC设计中最重要的步伐,使用primetime对整个设计布图前的静态时序分析,没有时序违规,则进入下一步,否则重新进行综合.(PR后也需作signoff 的时序分析)4.使用cadence公司的SOCencounter对综合后的网表进行自动规划布线(APR)5.自动规划以后获得具体的延时信息(sdf文件,由寄生RC和互联RC所组成)反标注到网表,再做静态时序分析,与综合类似,静态时序分析是一个迭代的过程,它与芯片规划布线的联系非常紧密,这个把持通常是需要执行许屡次才华满足时序需求,如果没违规,则进入下一步.6.APR后的门级功能仿真(如果需要)7.进行DRC和LVS,如果通过,则进入下一步.8.用abstract对此lab实验进行抽取,发生一个lef文件,相当于一个hard macro.9.将此macro作为一个模块在另外一个top设计中进行调用.10.设计一个新的ASIC,第二次设计,我们需要添加PAD,因为没有PAD,就不是一个完整的芯片,具体把持下面会说.11.重复第4到7步1.逻辑综合1)设计的verilog代码2)综合之前,我们要选取库,写好约束条件,修改dc的启动文件,目标库选择TSMC(此设计都是用TSMC18的库)的typical.db.(选择max库会比力好)Dc的命令众多,可是最基本的命令差未几,此设计的约束文件命令如下:create_clock -period 10 [get_ports clk] //用于时钟的创立set_clock_latency -source -max 0.2 [get_ports clk] //外部时钟到core的clk 连线延时set_clock_latency -max 0.1 [get_ports clk] //core的clk到寄存器clk真个net连线延时set_clock_uncertainty -setup 2[get_ports clk] //时钟延时的不确定性,求setup违规时会被计算进去set_clock_uncertainty –hold 1 【all_clocks】set_input_delay -max 0.5 -clock clk[get_ports [list [remove_from_coll [all_inputs] clk] ] //输入延时,外部信号到input真个连线延时set_output_delay -max 0.5 -clock clk [all_outputs] //输出延时set_driving_cell -lib_cell INVX4 [all_inputs] //输入真个驱动强度set_load -pin_load 0.0659726 [all_outputs] //输出真个驱动力set_wire_load_model -name tsmc18_wl10 -library typical //内部net的连线模型set_wire_load_mode enclosed //界说建模连线负载相关模式set_max_area 0compilereport_timingreport_constraintchange_names -rule verilog –hierset_fix_multiple_ports_net –all//输出网表,自动规划布线需要//输出ddc//输出延时文件,静态时序分析时需要//输出约束信息,自动规划布线需要3)逻辑综合启动design_vision.R输入约束文件.F4)时序分析综合以后我们需要分析一下时序,看时序是否符合我们的要求,综合实际上是一个setup时间的满足过程,可是我们综合的时候,连线的负载只是库提供的(即上面的wire_load),其实不是实际的延时,所以一般做完综合以后,时间余量(slack)应该为时钟的30%(经验值),以便为后面实际规划布线留下充分的延时空间.因为如果slack太小,甚至接近于0,虽然我们看起来是没有时序违规的,可是实际规划以后,时序肯定无法满足.使用report_timing命令,可以检查时序分析陈说:****************************************Report : timing-path full-delay max-max_paths 1-sort_by groupDesign : muxDate : Fri Jul 2 12:29:44 2010****************************************Operating Conditions: typical Library: typical(模型库)Wire Load Model Mode: enclosedStartpoint: data2[4] (input port clocked by clk)Endpoint: dataout_reg_15_(rising edge-triggered flip-flop clocked by clk)Path Group: clkPath Type: maxDes/Clust/Port Wire Load Model Library------------------------------------------------mux tsmc18_wl10 typical(线载模型及库)Point Incr Path--------------------------------------------------------------------------input external delay 0.50 0.50 fdata2[4] (in) 0.01 0.51 fmult_14/b[4] (mux_DW_mult_uns_0) 0.00 0.51 fmult_14/U131/Y (INVX1) 0.54 1.05 rmult_14/U161/Y (NOR2X1) 0.14 1.18 fmult_14/U39/S (CMPR42X1) 0.68 1.87 fmult_14/U12/CO (ADDFX2) 0.32 2.19 fmult_14/U11/CO (ADDFX2) 0.23 2.42 fmult_14/U10/CO (ADDFX2) 0.23 2.65 fmult_14/U9/CO (ADDFX2) 0.23 2.88 fmult_14/U8/CO (ADDFX2) 0.23 3.10 fmult_14/U7/CO (ADDFX2) 0.23 3.33 fmult_14/U6/CO (ADDFX2) 0.23 3.56 fmult_14/U5/CO (ADDFX2) 0.23 3.79 fmult_14/U4/CO (ADDFX2) 0.23 4.02 fmult_14/U3/CO (ADDFX2) 0.23 4.25 fmult_14/U2/CO (ADDFX2) 0.22 4.47 fmult_14/product[15] (mux_DW_mult_uns_0) 0.00 4.47 fdataout_reg_15_/RN (DFFTRXL) 0.00 4.47 fdataout_reg_15_/CK (DFFTRXL) 0.00 10.20 r----------------------------------------------------------------------------------------------------------------------------------------------------我们来看以上陈说,dc陈说的时候会显示出关键路径,即延时最年夜的路径,时序分析包括两段,前面一段是信号的延迟时间,即data arrival time 为4.47,下面是计算要求时间,也即相对时钟,设计所能忍受的最年夜延时,由于达到寄存器clk端延时,即clock network delay,所以设计增加了0.30的余量,同样由于时钟的不确定度(可能提前也可能延后0.1),我们取最坏情况,就是时钟超前0.1,则时间余量减去0.1,最后一个是门的建立时间要求,是0.19,最后获得数据的要求时间.Slack是要求时间减去达到时间的差值,slack越年夜越好.越年夜说明留给规划布线的时序越宽松.从陈说中我们看出,时序余量为 5.55,说明时序达到了要求,足够满足我们以后规划布线的时序要求.固然,我们有专门的时序分析工具,primetime,下面会稍微介绍.2.形式验证1)怎么保证综合前和综合后的网表逻辑功能是一致的呢,对门级网表进行静态仿真,又太浪费时间,于是,一款强年夜的验证工具formality,给了我们很好的帮手.2)形式验证数据准备:综合前RTL代码,综合后的网表,综合所用到的库.3)验证过程如下:1.首先我们翻开formality,命令为fm_shell(命令行界面),formality(图形界面).初学者一般使用图形界面,使用图形界面的时候,工具会自动发生一个log文件,记录命令,我们可以将这个文件内容做一个fms格式,这样在下次验证的时候可以使用命令界面.2.翻开formality如下第一步:首先我们加入原RTL代码,reference->read_design file->verilog->mux.v,选择好以后load file第三步:设置top名 reference->set top design 我们选择mux为top名同样的方法对网表进行设置(第二个菜单栏implementation)然后转到第四栏,点击run matching最后转到第五栏,verify,如果网表无错,会显示验证通过.3 静态时序分析静态时序分析主要针对年夜型ASIC设计,4 自动规划布线1)数据准备第一:需要综合后的网表以及时序约束第二:需要自动规划布线的物理库(lef文件,这里用到tsmc18_6lm_cic.lef, tsmc18_6lm_antenna_cic.lef)为了能够了解lef文档的作用,这里对lef做简单的介绍,lef一般分为两种:一种是技术物理库,主要包括工艺信息,设计规则信息,金属通孔信息等.下例是对金属一层的界说,TYPE指明METAL1是可布线层,WIDTH界说的是METAL1的默认布线宽度,SPACING用于设定METAL1布线间距.DIRECTION HORIZONTAL指明METAL1是用于水平走线,固然这其实不意味着它不能垂直走线,在一些布线资源较少的区域,还是可以选择垂直布线的.具体介绍,可以参考相关技术文档.LAYER METAL1TYPE ROUTING ;WIDTH 0.230 ;MAXWIDTH 9.9 ;AREA 0.202 ;SPACING 0.230 ;SPACING 0.6 RANGE 10.0 100000.0 ;PITCH 0.560 ;DIRECTION HORIZONTAL ;EDGECAPACITANCE 9.1090e-05 ;END METAL1另外一种就是单位物理库,界说了单位库中各单位的信息,文件又有两部份一种是SITE语句对规划(placement)最小单位的界说,另一部份是采纳MACRO语句对单位属性及几何形状的描述,下例是对一个与门为例来看看lef是如何描述它的.MACRO是单位界说的关键字,每一个MACRO代表一个单位.CLASS core说明该单位是用于芯片的核心区,SIZE确定了单位的面积年夜小,比如5.04是代表该单位的高度,后面我们做单位供电route的时候,可以看到它们的宽度就是这个数值.再后面就是界说引脚A,B,Y,VDD,VSS等. MACRO AND2X1CLASS CORE ;FOREIGN AND2X1 0.000 0.000 ;ORIGIN 0.000 0.000 ;LEQ AND2XL ;SIZE 2.640 BY 5.040 ;SYMMETRY x y ;SITE tsm3site ;PIN YDIRECTION OUTPUT ;PORTLAYER METAL1 ;RECT 2.355 2.380 2.500 2.660 ;ENDEND YPIN BDIRECTION INPUT ;PORTLAYER METAL1 ;RECT 0.800 2.315 1.215 2.895 ;ENDEND BPIN ADIRECTION INPUT ;PORTLAYER METAL1 ;RECT 0.150 1.820 0.565 2.315 ;ENDEND APIN VSSDIRECTION INOUT ;USE ground ;SHAPE ABUTMENT ;PORTLAYER METAL1 ;RECT 1.790 -0.400 2.640 0.400 ;RECT 1.450 -0.400 1.790 0.575 ;RECT 0.000 -0.400 1.450 0.400 ;ENDEND VSSPIN VDDDIRECTION INOUT ;USE power ;SHAPE ABUTMENT ;PORTLAYER METAL1 ;RECT 1.755 4.640 2.640 5.440ENDEND VDDOBSLAYER METAL1 ;RECT 1.835 1.935 1.885 2.355 ;ENDEND AND2X1第三:时序库文件,typical.lib,也就是时序文件,界说了门的各种时序信息,某种意义来讲,这个和综合使用的db库是等价的.2)规划布线过程:第一步:翻开encounter 把数据输入,另外在advanced栏的Power相应位置填上VDD,和VSS.如下图,设置完以后,记得把设置的配置文件做一个save以便于下次使用第二步:翻开以后,我们可以看到芯片区域,左边粉红色的就是标准单位,中间那个就是我们要设计的区域,64%是指cell面积的占有率,一般来说控制在70%左右,布线的时候不会引起拥塞.另外我们需要对芯片进行稍微的更改,Floorplan->specify floorplan.,将core to IO那些项都填上45,留给电源环的放置.第三步:添加电源环设置如下图,NET填写VDD和VSS,layer选择顶层的两层金属,宽度设置为20(这个不定,可以根据实际设计来定),offset选择center in channel,则电源环会被设置在IO与core之间.之后电源环就加进去了,固然这是一个小电路,电源规划比力简单,对一个复杂的电路,还需要横竖添加stripes,降低IRdrop.第四步:自动规划以及安插标准单位,因为此设计较小,并没有block,所以可以直接进行标准单位的放置.Place->standard cells and blocaks->OK然后我们发现标准单位已经被加进去了:第五步:安插好了以后,我们需要将电源,地,等接口先连接起来,首先我们在floorplan中选择global net connection,分别将VDD,VSS等都连接起来.然后我们需要specify route将电源和地线先连接起来,选择route->specify route因为我们这个设计只有标准单位,所以我们只要选择标准单位的布线即可:完成以后,点击OK,会获得下面的图:每行的row都有线连接到外面的电源环第六步:时钟树综合(CTS),这是一个APR设计中最重要的一环,为什么要进行时钟树综合呢,简单地说,因为信号传输的延时,我们需要让相应路径的时钟路径的也具有同样的延时,通过添加时钟缓冲器的方法,来消除各路径的建立时间,具体请参考相关书籍和资料.添加好时钟树以后的邦畿如下:加了时钟树以后的邦畿密集了很多,因为加了很多buf.时钟树的脚本:AutoCTSRootPin clkPeriod 10nsMaxDelay 500ps # set_clock_latencyMinDelay 0ps # set_clock_latencyMaxSkew 100psSinkMaxTran 400psBufMaxTran 400psObstruction NODetailReport YESPadBufAfterGate NORouteClkNet NOPostOpt YESOptAddBuffer YESOptAddBufferLimit 100NoGating NOBuffer CLKBUFX1 CLKBUFXL CLKBUFX2 CLKBUFX3 CLKBUFX4 CLKBUFX8 CLKBUFX12 CLKBUFX16 CLKBUFX20 CLKINVXL CLKINVX1 CLKINVX2 CLKINVX3 CLKINVX4 CLKINVX8 CLKINVX12 CLKINVX16 CLKINVX20END然后将脚本选中,并进行时钟树综合.第七步:优化设计,命令optDesign –postCTS,然后report_timing检查时序陈说,确定无违规,再进行完全布线.第八步:完全布线,route ->nanoroute->route之后获得的邦畿如下所示:第九步:保管设计,提取需要的数据.这里特别注意提取gds文件的时候,需要指定库文件中的streamOut.map文件,和merge gds(tsmc18_core.gds)文件,如图所示保管网表,并将此邦畿提取的网表做一次formality,与原代码匹配胜利.5 第二次静态时序分析用邦畿实际提取的延时文件进行6 APR后仿真用modelsim对邦畿提取的网表和sdf文件进行仿真.7 用calibre对邦畿进行DRC及其LVS验证在做这步之前,我们需要把相关的文档拷贝到icfb的工作目录下Encounter导出的gds文档:这里是mux8.gds(注意merge库的map文件)技术文档如:,可以在厂家提供的库中去找Caliber验证文件:drc,lvs文档第一步:将encounter的邦畿数据导入virtuoso,翻开icfb&,选择file->import->stream然后将邦畿信息和技术文件填入:导入胜利以后会呈现我们所做的库,mux就是我们encounter中所画的邦畿.我们把邦畿翻开:这就是我们所画的邦畿然后在此进行drc,和lvs,通过以后再进行下面的工作.第二步:drc检查此处有错,其实不是逻辑有问题,是因为密度不够的问题,需要在encounter阶段加FILLER,FILLER是与逻辑无关的,因为代工厂的流片加工要求,需要加的,密度不够,加工容易引起问题.所以如果DRC 报类似毛病,如果是需要流片的邦畿,除非代工厂同意,否则必需清除这些毛病.第三步:lvs检查1)Lvs检查之前,我们需要把综合后的verilog文件转换成网表文件,用于lvs,方法如下:终端下执行:v2lvs -v mux.v -l tsmc18_lvs.v -o CHIP.spi -s tsmc18_lvs.spi -c cic_ -ncalibre -lvs -spice layout.spi -hier -auto Calibre-lvs-cur_soce,之后会获得一个的网表文件.()2)用来lvs的网表我们选择之前导出:然后run lvs,匹配胜利!8 用abstract对模块进行抽取我们把8*8乘法器模块用abstract工具导出lef,作为硬核,用于后面自动规划布线的调用,我们可以从此试验中找到模数混合自动邦畿的设计思想.Abstract Def=>Lef第一步:创立一个新的library,并关联一个tf文件.注:(1)不需要输入streamOut.map也不用点上(no merge)不需要更改.Top Cell Name 为空第五步:翻开library manager 在mux库里翻开mux的layout,并选择tools=>layout.第六步:选择 Edit=>Search ,点击 Add Criteria ,如下设置,选择aplly ,在选择 WordStr All.第七步:保管退出第八步:翻开abstract,并翻开mux库.然后把mux模块从core导入到block傍边,方法:点击mux,然后cell=>move=>block=>OK.第九步:点击GDS图中label,然后点击Q检查Properity.看看是什么层,然后看看下面的net的Properity是什么层,以及是什么purpose.层:METAL3,Purpose:pin.具体含义主要看abstract UG.<1> 点击,输入Map text labels to pinsMap text labels to pins 的书写格式及含义参考abstract UG.<2>点击<3>点击<4> Export lef之后我们获得一个该模块的lef文件,下面我们就用这个模块做一次调用.9将此macro作为一个模块在另外一个top设计中进行调用.第一步:首先我们还是回到综合,我们重新设计一个top,这个top将包括新的逻辑功能,之前的mux模块,还有PAD模块.这个设计的年夜概框图如下:PDIDGZ为数字输入IO口PDO04CDG为数字输出IO口PVDD1DGZ 为供电PAD高电端PVSS1DGZ 为供电PAD的地电端Multiple为之前做的宏模块Mux为新加逻辑第二步,代码的改写:我们重新编写过verilog代码(带PAD),带PAD做综合有个好处,可以不用设置输入输出端口的驱动,因为PAD的驱动已经很年夜了,这样综合出的结果更接近实际.新的verilog代码如下:module mux_1 (clk,clr,a,b,y);//(这里我们引用了新的逻辑,注意这个mux_1和之前的没半点关系,只是为了体现调用关系随便加的一个而已)input clk,clr;input [7:0] a,b;output [15:0] y;reg [15:0] y;always @(posedge clk)beginif(!clr)beginy<=0;endelsebeginy<=a*b;endendendmodulemodulePAD(clk_pcb,clk_core,clr_pcb,clr_core,data1_pcb,data1_core,data2_pcb,dat a2_core,dataout_core,dataout_pcb);(这是PAD模块,注意结合前面的框图是想想是如何加的)input clk_pcb,clr_pcb;output clk_core ,clr_core;input [7:0] data1_pcb,data2_pcb;output [7:0] data1_core,data2_core;input [15:0] dataout_core;output [15:0] dataout_pcb;PDIDGZ PAD_CLK (.PAD(clk_pcb),.C(clk_core));PDIDGZ PAD_CLR (.PAD(clr_pcb),.C(clr_core));PDIDGZ PAD_DATA1_0 (.PAD(data1_pcb[0]),.C(data1_core[0])); PDIDGZ PAD_DATA1_1 (.PAD(data1_pcb[1]),.C(data1_core[1])); PDIDGZ PAD_DATA1_2 (.PAD(data1_pcb[2]),.C(data1_core[2])); PDIDGZ PAD_DATA1_3 (.PAD(data1_pcb[3]),.C(data1_core[3]));PDIDGZ PAD_DATA1_4 (.PAD(data1_pcb[4]),.C(data1_core[4])); PDIDGZ PAD_DATA1_5 (.PAD(data1_pcb[5]),.C(data1_core[5])); PDIDGZ PAD_DATA1_6 (.PAD(data1_pcb[6]),.C(data1_core[6])); PDIDGZ PAD_DATA1_7 (.PAD(data1_pcb[7]),.C(data1_core[7])); PDIDGZ PAD_DATA2_0 (.PAD(data2_pcb[0]),.C(data2_core[0])); PDIDGZ PAD_DATA2_1 (.PAD(data2_pcb[1]),.C(data2_core[1])); PDIDGZ PAD_DATA2_2 (.PAD(data2_pcb[2]),.C(data2_core[2])); PDIDGZ PAD_DATA2_3 (.PAD(data2_pcb[3]),.C(data2_core[3])); PDIDGZ PAD_DATA2_4 (.PAD(data2_pcb[4]),.C(data2_core[4])); PDIDGZ PAD_DATA2_5 (.PAD(data2_pcb[5]),.C(data2_core[5])); PDIDGZ PAD_DATA2_6 (.PAD(data2_pcb[6]),.C(data2_core[6])); PDIDGZ PAD_DATA2_7 (.PAD(data2_pcb[7]),.C(data2_core[7]));PDO04CDG PAD_DATAOUT_0 (.I(dataout_core[0]),.PAD(dataout_pcb[0]));PDO04CDG PAD_DATAOUT_1 (.I(dataout_core[1]),.PAD(dataout_pcb[1]));PDO04CDG PAD_DATAOUT_2 (.I(dataout_core[2]),.PAD(dataout_pcb[2]));PDO04CDG PAD_DATAOUT_3 (.I(dataout_core[3]),.PAD(dataout_pcb[3]));PDO04CDG PAD_DATAOUT_4 (.I(dataout_core[4]),.PAD(dataout_pcb[4]));PDO04CDG PAD_DATAOUT_5 (.I(dataout_core[5]),.PAD(dataout_pcb[5]));PDO04CDG PAD_DATAOUT_6 (.I(dataout_core[6]),.PAD(dataout_pcb[6]));PDO04CDG PAD_DATAOUT_7 (.I(dataout_core[7]),.PAD(dataout_pcb[7]));PDO04CDG PAD_DATAOUT_8 (.I(dataout_core[8]),.PAD(dataout_pcb[8]));PDO04CDG PAD_DATAOUT_9 (.I(dataout_core[9]),.PAD(dataout_pcb[9]));PDO04CDG PAD_DATAOUT_10 (.I(dataout_core[10]),.PAD(dataout_pcb[10]));PDO04CDG PAD_DATAOUT_11 (.I(dataout_core[11]),.PAD(dataout_pcb[11]));PDO04CDG PAD_DATAOUT_12 (.I(dataout_core[12]),.PAD(dataout_pcb[12]));PDO04CDG PAD_DATAOUT_13 (.I(dataout_core[13]),.PAD(dataout_pcb[13]));PDO04CDG PAD_DATAOUT_14 (.I(dataout_core[14]),.PAD(dataout_pcb[14]));PDO04CDG PAD_DATAOUT_15(.I(dataout_core[15]),.PAD(dataout_pcb[15]));PVDD1DGZ vdd1 (); (现在不用加的)PVDD1DGZ vdd2 ();PVDD1DGZ vdd3 ();PVDD1DGZ vdd4 ();PVSS1DGZ vss1 ();PVSS1DGZ vss2 ();PVSS1DGZ vss3 ();PVSS1DGZ vss4 ();PCORNERDG c1 ();PCORNERDG c2 ();PCORNERDG c3 ();PCORNERDG c4 ();endmodule#############################顶层模块#########################module top(clock,clear,da1,da2,dataout_out);input clock,clear;input [7:0] da1,da2;output [15:0] dataout_out;wire clk_core,clr_core;wire [7:0] data1_core,data2_core;wire [15:0] dataout_core;wire [15:0] y;PADPAD_TOP(.clk_pcb(clock),.clk_core(clk_core),.clr_pcb(clear),.clr_core(clr_ core),.data1_pcb(da1),.data1_core(data1_core),.data2_pcb(da2),.data2_core( data2_core),.dataout_core(dataout_core),.dataout_pcb(dataout_out));mux_1 mux_1 (.clk(clk_core),.clr(clr_core),.a(data1_core),.b(data2_core),.y(y));mux mutiple (.clk(clk_core),.clr(clr_core),.data1(y[15:8]),.data2(y[7:0]),.dataout(dataout_ core));(这里是对硬核的调用)endmodule第三步:逻辑综合注意的是,我们在逻辑综合之前,需要加如mux的db库文件,此文件由encounter规划布线以后发生的延时文件再经过pt静态时序分析以后发生.我们给顶层模块加如约束:Current_design toplinkcreate_clock -period 10 [get_ports clock]set_clock_latency -source -max 0.2 [get_ports clock]set_clock_latency -max 0.1 [get_ports clock]set_clock_uncertainty -setup 0.01 [get_ports clock]set_input_delay -max 0.5 -clock clock [all_inputs]set_output_delay -max 0.5 -clock clock [all_outputs]#set_driving_cell -lib_cell INVX4 [all_inputs]#set_load -pin_load 0.0659726 [all_outputs]set_wire_load_model -name tsmc18_wl10 -library typicalset_wire_load_mode enclosedset_dont_touch mux(注意此处,就是综合的时候不针对mux进行综合,综合工具会自动跨越鸿沟对其他逻辑进行综合)set_dont_touch_network [all_clocks]compile -boundarychange_names -rule verilog -hier第四步:规划布线用综合获得的网表(top.sv)和约束文件(sdc).并将之前的mux模块的lef文档准备好.这里碰到了一个问题,在逻辑综合之前的代码我已经加如了PAD的VDD ,VSS和corner,可是综合完以后就不见了,原因不明,这时在规划之前就要手动添加上去.数据准备:时序文件:对应于上面的lib文件,typical.lib,block的lib(由PT发生),PAD的libIo文件:可以自己界说顶层端口的位置(下面会介如何做io文件)Sdc文件:综合后发生的约束文件.Io文件的设置,主要由四个方向决定,N,W,S,E就和我们英文里的四个方向的首字母一样,固然还有NW,WS,SE,NE,四个角,是用与corner 的摆放,该设计有34个口,外加8个供电PAD,加上四个CORNER 总共有46个PAD,主要的是42个PAD,我们可以将这42个PAD放到自己想设置的位置,对一个真正的设计,要考虑以后连线的长度,内部模块摆放位置等,来合理安插io的位置.如图所示为该设计的PAD规划图:根据此规划图,我们对此设计的io文件编纂如下,io文件对应实际规划中的规则是,N是由io文件列表的顺序从左到右的放置,W方向是由下到上的放置,S同N,E同W.Pad: PAD_TOP/PAD_DATAOUT_12 NPad: PAD_TOP/PAD_DATAOUT_13 NPad: PAD_TOP/PAD_DATAOUT_14 NPad: PAD_TOP/PAD_DATAOUT_15 NPad: PAD_TOP/PAD_CLK NPad: PAD_TOP/vss2 NPad: PAD_TOP/vdd2 NPad: PAD_TOP/PAD_DATA1_0 NPad: PAD_TOP/PAD_DATA1_1 NPad: PAD_TOP/PAD_DATA1_2 NPad: PAD_TOP/PAD_DATA1_3 NPad: PAD_TOP/c1 NEOrient: R0Pad: PAD_TOP/c2 SWPad: PAD_TOP/PAD_DATAOUT_4 WPad: PAD_TOP/PAD_DATAOUT_5 WPad: PAD_TOP/PAD_DATAOUT_6 WPad: PAD_TOP/PAD_DATAOUT_7 WPad: PAD_TOP/vdd1 WPad: PAD_TOP/vss1 WPad: PAD_TOP/PAD_DATAOUT_8 WPad: PAD_TOP/PAD_DATAOUT_9 WPad: PAD_TOP/PAD_DATAOUT_10 WPad: PAD_TOP/PAD_DATAOUT_11 WPad: PAD_TOP/c3 NWPad: PAD_TOP/PAD_DATAOUT_0 SPad: PAD_TOP/PAD_DATAOUT_1 SPad: PAD_TOP/PAD_DATAOUT_2 SPad: PAD_TOP/PAD_DATAOUT_3 WPad: PAD_TOP/PAD_CLR SPad: PAD_TOP/vdd3 SPad: PAD_TOP/vss3 SPad: PAD_TOP/PAD_DATA2_7 SPad: PAD_TOP/PAD_DATA2_6 SPad: PAD_TOP/PAD_DATA2_5 SPad: PAD_TOP/PAD_DATA2_4 SPad: PAD_TOP/PAD_DATA2_3 EPad: PAD_TOP/PAD_DATA2_2 EPad: PAD_TOP/PAD_DATA2_1 EPad: PAD_TOP/PAD_DATA2_0 EPad: PAD_TOP/vdd4 EPad: PAD_TOP/vss4 EPad: PAD_TOP/PAD_DATA1_7 EPad: PAD_TOP/PAD_DATA1_6 EPad: PAD_TOP/PAD_DATA1_5 EPad: PAD_TOP/PAD_DATA1_4 E一切准备好以后,我们导入所有的准备数据会看到一个有PAD和宏模块的的芯片图因为PAD的面积较年夜,所以其他单位和模块看起来就比力小了.第五步:规划。

数字IC设计

数字IC设计

数字IC设计数字IC设计是指采用数字电路元件和技术,在符合设定功能要求的基础上,实现指定功能的集成电路设计。

数字IC设计是集成电路设计的一个重要分支,该设计应用面广,广泛应用于通信、计算机、工业、家用电器等领域中。

本文将从数字IC设计的概念、发展历程、设计方法、常用的设计工具等方面进行探讨。

一、数字IC设计的概念数字IC设计是指使用数字电路元件及技术,在设定的功能要求的前提下,实现指定功能的集成电路的设计。

数字IC设计是由组合逻辑、时序逻辑、存储器等数字电路元件构成的。

数字IC设计的核心是实现数字电路设计的复杂性,在各种复杂的应用领域中,进行数字电路系统的快速设计和优化。

数字IC设计的关键是实现函数逻辑关系的描述和形式化,使用数字语言,对电路系统的逻辑关系进行严格的描述和方便化的实现。

数字IC设计具有复杂性、可扩展性、可靠性、精度高、功耗低等特点。

二、数字IC设计的发展历程数字IC设计发展历程从20世纪60年代开始,到今天数十年来经历了从基础到高级的一系列发展过程。

其中有一些重要的里程碑事件,大大促进了数字IC设计的发展。

早期的数字IC设计是使用硬件直接链接模拟电路实现,其设计过程比较简单,如模拟计算器。

1971年,美国Texas Instruments公司推出了世界上第一款集成电路计算器TMS0100,该计算器采用了数字IC设计技术进行实现。

在此之后,数字IC设计开始迎来了快速的发展,人们越来越依赖集成电路和数字IC设计技术带来的方便和高效性。

20世纪80年代,数字IC的设计和制造技术日趋成熟,数字IC的速度和芯片的集成度愈加高。

随着数字IC设计技术的不断提高和发展,出现了大规模集成(LSI),超大规模集成(VLSI)和超高规模集成(UHVSI)等技术,这一系列的技术标志着数字IC设计的进一步发展。

21世纪以来,数字IC设计技术与微电子技术的迅速发展,尤其是3D器件、功能扩张技术和生物微型芯片等的出现,有力地推动了数字IC设计技术向更为高级、复杂和智能方向发展,以应对日益复杂的计算和控制技术需求。

IC后端流程

IC后端流程

IC后端流程物理设计是指将逻辑设计的电路转化为实际的二维或三维布局,并进行时序分析和电源规划等工作。

物理设计流程主要包括:1. 高层综合(High-Level Synthesis):将逻辑设计中的高级语言描述(比如Verilog或VHDL)转化为RTL级(Register Transfer Level)的电路描述。

2. 逻辑综合(Logic Synthesis):将RTL级电路描述转换为门级(Gate-Level)的逻辑网表,实现逻辑优化以精简电路规模和提高性能。

3.时序约束:在逻辑综合的基础上,制定时序约束,包括时钟频率、输入输出时序、时钟分频等,以保证电路的正确功能和时序性能。

4. 布局设计(Layout Design):将门级逻辑网表进行物理布局,确定电路中各个元件(比如门、寄存器)的相对位置和连线的走向,以满足电路的性能、功耗和几何约束。

5. 连线设计(Routing Design):根据布局设计结果,进行连线布线,包括选择连线层次、路由器设置、连线规则等,以确保电路的连接和稳定性。

6. 特殊器件布局(Placement of Special Devices):针对一些特殊性能要求的电路元件,进行专门的布局设计和优化,以实现电路性能的最佳化。

验证是指对设计的逻辑正确性、时序性能和功能进行验证和检查。

验证流程主要包括:1. 仿真测试(Simulation Testing):通过对设计的逻辑电路进行仿真验证,对设计进行功能和性能的测试,以保证电路的正确性和稳定性。

2. 时序分析和优化(Timing Analysis and Optimization):对电路设计进行时序分析,确定时钟频率、数据传输速率、时钟延迟等,以优化电路的时序性能。

3. 功耗分析和优化(Power Analysis and Optimization):对电路设计进行功耗分析,确定功耗峰值、功耗分布、功耗控制等,以优化电路的功耗性能。

数字芯片是怎样设计出来的?

数字芯片是怎样设计出来的?

芯片在我们的生活和工作中无处不在。

例如,交通智能卡就嵌入了一颗带有微处理器、储存单元、芯片操作系统的芯片;而手机的主板则集成了数百颗芯片,有的负责无线电收发、有的负责功率放大、还有的负责存储照片和文件、处理音频,完成指纹、虹膜、面部的识别。

当然,手机中最重要,也是价格最昂贵的还属CPU,它是手机的控制中枢和逻辑计算的中心,通过运行存储器内的软件及数据库来操控手机。

根据处理的信号类型不同,芯片可以分为数字芯片和模拟芯片。

要制造出芯片,首先要完成芯片设计。

本文将概要介绍数字芯片设计的十大流程,以及各大流程中使用的主流EDA软件。

iphone13pro的A15芯片芯片设计可以分为前端设计(即逻辑设计)和后端设计(即物理设计)。

前端设计包括以下四个步骤:前端设计(1)算法或硬件架构设计与分析在明确芯片的设计需求之后,系统架构师会把这些市场需求转换成芯片的规格指标,形成芯片的Spec,也就是芯片的规格说明书。

这个说明书会详细描述芯片的功能、性能、尺寸、封装和应用等内容。

系统架构师会根据芯片的特点将芯片内部的规格使用划分出来,规划每个部分的功能需求空间,确立不同单元间联结的方法,同时确定设计的整体方向。

这个步骤对之后的设计起着至关重要的作用,区域划分不够的,无法完成该区域内的功能实现,会导致之前的工作全部推翻重来。

设计出来的东西,必须能够制造出来,所以芯片设计需要与产业链后端晶圆的制造和封装测试环节紧密合作,工程师不但需要考虑工艺是否可以实现相应电路设计,同时需要整合产业链资源确保芯片产品的及时供给。

这里的算法构建会用到编程语言(MATLAB,C++,C,System C, System Verilog等),对于不同类型的芯片,工程师们会有不同的偏好选择。

(2)RTL code(Register Transfer Level,寄存器传输级)实现由于芯片的设计及其复杂,设计人员并不在晶体级进行设计,而是在更高的抽象层级进行设计。

集成电路EDA与验证技术课件:物理层设计工具IC Compiler

集成电路EDA与验证技术课件:物理层设计工具IC Compiler
便后续文件的编写、替换和调用。
物理层设计工具IC Compiler
2.设置逻辑库 ICC中针对逻辑库的设置主要是search_path, target_library,link_library这三个系统变量及命令 set_min_library。其中search_path是一个查找目录,需要包 含所有逻辑库文件所在的目录,这样在设置targe_library和 link_library中的db文件时,只需文件名即可,不需要再加上 其存放的路径。
物理层设计工具IC Compiler
6.读入SDC文件 前面已经介绍过,门级网表只是描述了设计中各个单元 之间的电路连接关系,SDC文件则是保证电路功能正确运行 的约束文件。该步骤就是运行命令行,将SDC文件读入该设 计所使用的命令:
read_sdc $sdc_file check_timing
7.6 布局 7.7 时钟树综合 7.8 布线 7.9 芯片ECO与DFM 7.10 小结
பைடு நூலகம்
物理层设计工具IC Compiler
7.1 IC Compiler(ICC)工具发展历史
ICC与Encounter是两大EDA软件巨头博弈的产物。它们 的发展历史,也可以看作微电子EDA业界风云变幻的历史。
早在20世纪80年代后期,微电子EDA厂商即呈现出两 强对峙的局面:Synopsys基本垄断了前端技术,占有将近六 成市场;Cadence基本垄断了后端技术与验证技术,占有将 近八成的市场。
物理层设计工具IC Compiler
图7.9 读入设计网表
物理层设计工具IC Compiler
通过该步骤,设计的网表就读入到已经打开的 $my_mw_lib设计库中。Layout窗口就会将设计所要用到的 所有单元都堆在坐标原点处。读入设计网表之后的Layout窗 口如图7.10所示。

数字IC后端流程

数字IC后端流程

11.Tape out。在所有检查和验证都正确无误的情况下把最后的版图GDSⅡ文件传递给Foundry厂进行掩膜制造。
2.布局规划。主要是标准单元、I/O Pad和宏单元的布局。I/O Pad预先给出了位置,而宏单元则根据时序要求进行摆放,标准单元则是给出了一定的区域由工具自动摆放。布局规划后,芯片的大小,Core的面积,Row的形式、电源及地线的Ring和Strip都确定下来了。如果必要 在自动放置标准单元和宏单元之后, 你可以先做一次PNA(power network analysis)--IR drop and EM .
6.ECO(Engineering Change Order)。针对静态时序分析和后仿真中出现的问题,对电路和单元布局进行小范围的改动.
7.Filler的插入(pad fliier, cell filler)。Filler指的是标准单元库和I/O Pad库中定义的与逻辑无关的填充物,用来填充标准单元和标准单元之间,I/O Pad和I/O Pad之间的间隙,它主要是把扩散层连接起来,满足DRC规则和设计需要。
8.布线(Routing)。Global route-- rack assign --Detail routing--Routing optimization 布线是指在满足工艺规则和布线层数限制、线宽、线间距限制和各线网可靠绝缘的电性能约束的条件下,根据电路的连接关系将各单元和I/O Pad用互连线连接起来,这些是在时序驱动(Timing driven ) 的条件下进行的,保证关键时序路径上的连线长度能够最小。--Timing report clear
那你可用write_milkway, read_milkway 传递数据。
4.时钟树生成(CTS Clock tree synthesis) 。芯片中的时钟网络要驱动电路中所有的时序单元,所以时钟源端门单元带载很多,其负载延时很大并且不平衡,需要插入缓冲器减小负载和平衡延时。时钟网络及其上的缓冲器构成了时钟树。一般要反复几次才可以做出一个比较理想的时钟树。---Clock skew.

IC设计后端流程初学必看

IC设计后端流程初学必看

基本后端流程(漂流&雪拧)----- 2010/7/3---2010/7/8本教程将通过一个8*8的乘法器来进行一个从verilog代码到版图的整个流程(当然只是基本流程,因为真正一个大型的设计不是那么简单就完成的),此教程的目的就是为了让大家尽快了解数字IC设计的大概流程,为以后学习建立一个基础。

此教程只是本人探索实验的结果,并不代表内容都是正确的,只是为了说明大概的流程,里面一定还有很多未完善并且有错误的地方,我在今后的学习当中会对其逐一完善和修正。

此后端流程大致包括以下内容:1.逻辑综合(逻辑综合是干吗的就不用解释了把?)2.设计的形式验证(工具formality)形式验证就是功能验证,主要验证流程中的各个阶段的代码功能是否一致,包括综合前RTL 代码和综合后网表的验证,因为如今IC设计的规模越来越大,如果对门级网表进行动态仿真的话,会花费较长的时间(规模大的话甚至要数星期),这对于一个对时间要求严格(设计周期短)的asic设计来说是不可容忍的,而形式验证只用几小时即可完成一个大型的验证。

另外,因为版图后做了时钟树综合,时钟树的插入意味着进入布图工具的原来的网表已经被修改了,所以有必要验证与原来的网表是逻辑等价的。

3.静态时序分析(STA),某种程度上来说,STA是ASIC设计中最重要的步骤,使用primetime对整个设计布图前的静态时序分析,没有时序违规,则进入下一步,否则重新进行综合。

(PR后也需作signoff的时序分析)4.使用cadence公司的SOCencounter对综合后的网表进行自动布局布线(APR)5.自动布局以后得到具体的延时信息(sdf文件,由寄生RC和互联RC所组成)反标注到网表,再做静态时序分析,与综合类似,静态时序分析是一个迭代的过程,它与芯片布局布线的联系非常紧密,这个操作通常是需要执行许多次才能满足时序需求,如果没违规,则进入下一步。

6.APR后的门级功能仿真(如果需要)7.进行DRC和LVS,如果通过,则进入下一步。

2024版数字IC设计入门进阶教程推荐

2024版数字IC设计入门进阶教程推荐

数字IC设计入门进阶教程推荐•引言•数字IC设计基础知识•数字IC设计进阶技术•数字IC设计实践案例•数字IC设计挑战与解决方案•数字IC设计学习资源推荐01引言目的和背景培养数字IC设计人才适应市场需求数字IC设计的重要性实现电子系统的核心功能数字IC是数字电子系统的核心组成部分,负责实现各种复杂的逻辑功能,如微处理器、存储器、数字信号处理器等。

提高系统性能优秀的数字IC设计可以显著提高电子系统的性能,包括速度、功耗、可靠性等方面,从而满足各种高性能应用场景的需求。

降低系统成本通过数字IC设计,可以实现电路的高度集成化,减少外部元器件的数量和种类,从而降低整个电子系统的成本和体积。

02数字IC设计基础知识数字电路基本概念数字信号与模拟信号01二进制数与编码02逻辑代数基础03逻辑门电路组合逻辑电路竞争与冒险现象030201时序逻辑电路了解时序逻辑电路的基本原理和实现方式,如触发器、寄存器等。

状态机设计掌握状态机的设计方法和步骤,包括状态转移图、状态表等。

同步与异步时序逻辑了解同步与异步时序逻辑的区别和设计要点。

数字IC设计工具与流程数字IC设计工具设计流程设计规范与标准03数字IC设计进阶技术高级组合逻辑优化技术逻辑代数法卡诺图化简法运用逻辑代数的基本定律和公式,对组合逻辑电路进行优化。

冗余逻辑消除时序图分析法利用时序图分析电路的时序关系,找出时序违规并进行调整。

关键路径法通过分析关键路径,确定时序瓶颈,并进行优化。

时钟域交叉技术解决跨时钟域信号传输问题,确保信号在正确的时间窗口内传输。

时序分析与优化方法低功耗设计技术门控时钟技术多电压设计技术睡眠模式设计可测试性设计技术扫描链设计内建自测试技术边界扫描技术04数字IC设计实践案例二进制计数器4位微处理器设计一个基本的4位微处理器,包括指令集、寄存器组、算术逻辑单元(ALU)等关键部分,实现对简单指令的处理和执行。

8051微控制器深入了解8051微控制器的体系结构和内部工作原理,通过设计实现其关键模块,如中央处理器(CPU)、存储器、I/O端口等,掌握复杂数字IC设计的技巧和方法。

数字IC芯片设计

数字IC芯片设计
CT Insertion
Formal Verification (Scan Inserted Netlist
vs CT Inserted Netlist)
Auto Routing
DRC,LVS,ECO
Formal Verification (ECO Netlist vs
CT Inserted Netlist)

• 综合:

将RTL级设计中所得的程序代码翻
译成实际电路的各种元器件以及他们
之间的连接关系,可以用一张表来表
示,称为门级网表(Netlist)。
• STA(Static Timing Analysis,静态时
序分析): 套用特定的时序模型(
Timing Model),针对特定电路分析
其是否违反设计者给定的时序限制(
30
得到最后的布线图
31
时钟树综合
时钟树综合的目的: 低skew 低clock latency
时钟树和复位树综合为什么要放在APR时再做呢?
32
DFM (Design For Manufacturing)
DFM: 可制造性设计 DFM步骤在整个布局布线流程以后开始,主要目的是通 过一些技术处理防止芯片在物理制造过程中出现问题,造 成芯片不能工作。DFM的目的在于提高良率。
Post-layout STA
Power check
Timing OK? Yes
Tape Out
DC MODELSIM MBISTARCHITECT FORMALITY
PT
Astro AstroRail FORMALITY
PT Hercules Caliber Virtuoso
5

数字IC后端设计实现流程之initialdesign

数字IC后端设计实现流程之initialdesign

数字IC后端设计实现流程之initialdesign1.好了,下面直接进入今天的主题。

前端提供的文件•门级网表(Gate Level Netlist)数字前端工程师或者是R2N的同事在release 东西给后端工程师做PR时,一定会release 一个门级网表,这个netlist是基于RTL或者gtech文件进行逻辑综合后产生的一个门级网表。

这个网表包含了当前block的所有sub-module,通过hierarchy的调用方式,最后有个顶层的设计,这个顶层名字就是我们所说的设计module名字。

另外还有指出了block有哪些输入端口,输出端口,block中用到了标准单元库中的那些cell。

•时序约束文件(Timing Constraint)时序约束文件在整个数字IC设计过程的作用是一样的。

它都是guide 工具基于某个特定的目标去做逻辑和时序的优化。

一个时序约束文件都需要含有以下几个部分:Crete_clock –name CLK -period 10 [get_ports clk]Set_clock_uncertainty -setup 0.1 [all_clocks]Set_max_transition –max 0.2 [current_design]Set_max_transition 0.1 -clock CLKSet load 50 [all_outputs]Set_max_fanout 40 [current_design]Set_dont_touch $cellsSet_input_delay –clock -max [get_ports **]Set_input_delay –clock -min [get_ports **]Set_output_delay -clock -max [get_ports **]Set_output_delay -clock –min [get_ports **]Set_multicycle_path 3 -setup -end -from ***Set_multicycle_path 2 -hold -end -from ***Set_false_path -from ** -to **Set_clock_group –async -name ic-backend -group {A B} -group {C D}•Memory的lef文件前端工程师在compiler 对应memory的时候会产生对应的一些文件,比如LEF,DB和GDS文件等。

模拟集成电路与数字集成电路设计工具实用教程 ICC使用教程

模拟集成电路与数字集成电路设计工具实用教程 ICC使用教程

(最好每做一个步骤,保存一次数据,如:save_mw_cel -as floorplan)ICC实验步骤步骤1:Design Setup1.1数据准备新建后端布局布线目录icc_40,准备好以下文件1)DC导出的网表文件(top_pad.mapped.v)2)DC导出的sdc文件(top_pad.sdc)3)手工编写的tdf文件(/tmp/dig_lab/top_pad.tdf)在icc_40目录内启动终端,在终端下输入:>source /opt/demo/synopsys.env>icc_shell -gui &1.2设置search path、target_library、link_library输入下面的命令:>source -echo /tmp/dig_lab/icc_lib_setup.tcl1.3为设计创建libraryTechnology file为:/home/smic/smic_40/SCC40NLL_HS_RVT_V0p2b/astro/tf/scc40nll_hs_8lm_2tm.tf 两个参考库分别为:/home/smic/smic_40/SCC40NLL_HS_RVT_V0p2b/astro/scc40nll_hs_rvt/home/smic/smic_40/SP40NLLD2RN_3P3V_V0p5/apollo/SP40NLLD2RN_3P3V_V0p1_8 MT_2TM1.4读入verilog网表1.5进行uniquify输入下面的命令:>uniquify_fp_mw_cel#确认当前顶层设计,输入命令:>current_design top_pad#将网表中例化的单元与参考库中的单元做连接,输入命令:>link1.6设置TLU+文件MAX_TLUPLUS_FILE:/home/smic/smic_40/SCC40NLL_HS_RVT_V0p2b/astro/tluplus/TD‐LO40‐XS‐2006v0R_1Px M_2TM9k_ALPA28k/1P8M_2TM/StarRC_40LL_1P8M_2TM_ALPA28K_RCMAX.tluplusMIN_TLUPLUS_FILE:/home/smic/smic_40/SCC40NLL_HS_RVT_V0p2b/astro/tluplus/TD‐LO40‐XS‐2006v0R_1Px M_2TM9k_ALPA28k/1P8M_2TM/StarRC_40LL_1P8M_2TM_ALPA28K_RCMIN.tluplusMAP_FILE:/home/smic/smic_40/SCC40NLL_HS_RVT_V0p2b/astro/tluplus/TD‐LO40‐XS‐2006v0R_1Px M_2TM9k_ALPA28k/1P8M_2TM/StarRC_40LL_1P8M_2TM_cell.map1.7读入SDC文件,设置芯片工作环境1.8 检查设计的合理性依次输入以下命令:>set_zero_interconnect_delay_mode true>report_timing>report_constraint ‐all_violators>set_zero_interconnect_delay_mode false步骤2:Floorplan2.1在设计中添加电源地IO及IO Corner1)I O Corner2)为Core供电的IO(VDD VSS)3)为IO供电的IO(VDD_IO VSS_IO)直接输入以下命令:create_cell {CORNER1 CORNER2 CORNER3 CORNER4} {PCORNERRN} create_cell {VDD} PVDD1RNcreate_cell {VSS} PVSS1RNcreate_cell {VDD_IO} PVDD2RNcreate_cell {VSS_IO} PVSS2RN2.2读入IO约束文件相应的命令为:read_pin_pad_physical_constraints /tmp/dig_lab/top_pad.tdf该文件内容如下:set_pad_physical_constraints -pad_name clk_block -side 1 -order 1set_pad_physical_constraints -pad_name data_in_block -side 1 -order 2 set_pad_physical_constraints -pad_name en_block -side 2 -order 1set_pad_physical_constraints -pad_name fsk_out_block -side 2 -order 2 set_pad_physical_constraints -pad_name VDD -side 3 -order 1set_pad_physical_constraints -pad_name VSS -side 3 -order 2set_pad_physical_constraints -pad_name VDD_IO -side 4 -order 1set_pad_physical_constraints -pad_name VSS_IO -side 4 -order 2set_pad_physical_constraints -pad_name CORNER1 -side 1 -order 0set_pad_physical_constraints -pad_name CORNER2 -side 2 -order 0 set_pad_physical_constraints -pad_name CORNER3 -side 3 -order 0 set_pad_physical_constraints -pad_name CORNER4 -side 4 -order 02.3创建floorplan相应的命令为:>create_floorplan -control_type aspect_ratio \ -core_aspect_ratio 1 \-core_utilization 0.5 \-row_core_ratio 1 \-left_io2core 30 \-bottom_io2core 30 \-right_io2core 30 \-top_io2core 30 \-start_first_row#移除terminal,输入命令:>remove_terminal *该操作之后的效果为:2.4加入pad filler相应的命令为:>insert_pad_filler -cell {PFILL20RN PFILL10RN PFILL5RN PFILL2RN PFILL1RN PFILL01RN PFILL001RN} -overlap_cell {PFILL01RN PFILL001RN}2.5添加Tap Cell>add_tap_cell_array \‐master_cell_name {FILLTIEHS} \ ‐distance 20 \‐pattern stagger_every_other_row \ ‐respect_keepout摆放完毕之后效果如下:2.6进行电源地逻辑连接相应的命令为:>derive_pg_connection ‐power_net {VDD} ‐power_pin {VDD} \‐ground_net {VSS} ‐ground_pin {VSS}derive_pg_connection ‐power_net {VDD} ‐ground_net {VSS} ‐tie 2.7创建Core PG Rings相应的命令为:>create_rectangular_rings ‐nets {VDD VSS} \‐left_segment_layer M6 ‐left_segment_width 4.5 \‐right_segment_layer M6 ‐right_segment_width 4.5 \‐bottom_offset 17 ‐bottom_segment_layer TM1 ‐bottom_segment_width 4.5 \ ‐top_offset 17 ‐top_segment_layer TM1 ‐top_segment_width 4.5 \‐offsets absolute2.8布IO的电源和地线相应的命令为:>preroute_instances -ignore_macros \-ignore_cover_cells \-connect_instances specified \-cells [get_cells -all {VDD VSS}]2.9布PG rail(给标准单元供电的电源和地线)效果为:相应的命令为:>preroute_standard_cells ‐nets {VDD VSS} \‐connect horizontal \‐fill_empty_rows \‐port_filter_mode off \‐cell_master_filter_mode off \‐cell_instance_filter_mode off \‐voltage_area_filter_mode off \‐route_type {P/G Std. Cell Pin Conn}2.10检查电源地网络1)检查IO的电源地连接以及PG Rail/Strap是否存在Floating:相应的命令为:verify_pg_nets ‐error_cel io_pg \‐std_cell_pin_connection ignore \‐macro_pin_connection all \‐pad_pin_connection all2)做电源网络分析(PNA)查看电源规划的IR Drop。

数字IC后端设计实现floorplan及powerplan规划

数字IC后端设计实现floorplan及powerplan规划

数字IC后端设计实现floorplan及powerplan规划估算模块或者chip面积本文暂时只讨论模块级的设计。

根据前端综合release的report (含标准单元standard_cell,memory ,ip的面积信息),数字后端工程师会估算出模块的面积。

这个估算方法建议每个项目都做一个以表格形式来做统计,方便为其他项目提供参考。

需要注意的是,建议将standard cell和memory的利用率分开统计,memory利用率的经验值一般按80%来计算。

数字IC后端设计实现流程之initial design初始化Initial模块形状估算完模块的面积后,block owner会向top负责人报告子模块需要的大概面积,方便顶层top做partition。

模块的boundary一般都是负责top level floorplan的工程师基于全局考虑做partition后,为每个子模块分配的形状。

比较有经验的top负责人往往在partition 时会考虑模块实现难易程度来分配各个模块的boundary。

之所以芯片中有多边形的模块,主要有以下几方面的原因:1.芯片top level floorplan中有些地方top不太好利用(节省面积)2.模块的物理实现比较简单3.负责模块的数字后端工程师能力比较强初始化模块floorplan可以用如下命令实现:Initialize_floorplan在ICC中初始化模块形状时,需要注意的是方形和多边形的初始化命令是不一样的。

方形的初始化命令应该用create_floorplan来实现。

初始化命令主要包含模块的boundary, row, track, core to die等信息,对应gui界面如下图所示。

摆放io port初始化模块boundary后,所有的io port均在原点。

在ICC中是需要将这些port,create出对应的terminal,摆放好它们的位置。

ic的前端设计和后端设计流程

ic的前端设计和后端设计流程

ic的前端设计和后端设计流程根据个人掌握的知识,写写自己的理解。

前端设计(也称逻辑设计)和后端设计(也称物理设计)并没有统一严格的界限,涉及到与工艺有关的设计就是后端设计。

1.规格制定芯片规格,也就像功能列表一样,是客户向芯片设计公司(称为Fabless,无晶圆设计公司)提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。

2.详细设计Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。

3.HDL编码使用硬件描述语言(VHDL,Verilog HDL,业界公司一般都是使用后者)将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL (寄存器传输级)代码。

4.仿真验证仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。

看设计是否精确地满足了规格中的所有要求。

规格是设计正确与否的黄金标准,一切违反,不符合规格要求的,就需要重新修改设计和编码。

设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。

仿真验证工具 Synopsys的VCS。

5.逻辑综合――Design Compiler仿真验证通过,进行逻辑综合。

逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表(netlist)。

综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。

逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。

所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。

一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)逻辑综合工具Synopsys的Design Compiler。

6.STAStatic Timing Analysis(STA),静态时序分析,这也属于验证范畴,它主要是在时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例(violation)。

ICC后端面试题

ICC后端面试题
答案: CTS 的 spec 文件中定义 clka 是 root,clkb 为 through pin,再加上那些应该有的 skew transition,insertion delay 等就好了,其它的事 CTS 会给你做
@@10、假设在 pre-CTS 的时序约束中,setup 的 clock uncertainty 是由 PLL jitter 和 clock tree skew 两部分组成,那么 1)pre-CTS 的时序约束中,hold 的 clock uncertainty 是什么? 2)post-CTS 的时序约束中,setup 和 hold 的 clock uncertainty 要做什么样的修改?难度:2
,当然如果扇出值表中没有,就会用到 slope,例如扇出为 3 时,此时估算的互连线长度为
1*66.667+(3-1)*slope,再计算出 RC 值,然后 DC 由此计算 net 的延时。
@@8、There are source clock clka (create_clock), and generated clock clkb by clka.
2) 阻塞有多种情形,要分别讨论,没有一个统一的解决办法。能够把大部分的阻塞情况列举出来,就已
经够 4 级的水平啦
答案: 1)阻塞在 RAM(macro)之间:可能 RAM 之间的距离没有计算正确,可以加大 RAM 之 间的间距;扭转 RAM 的方向,使得 RAM 的 IO pin 朝向更容易走线的那边;如果是多个 RAM 共用地址或者数据线,尽量把 RAM 的地址数据 pin 对齐 2)阻塞出现在 RAM 和帮助单元交界的地方:在 RAM 周围加一条 halo(keepout);把 RAM 放在四周,尽量把中间留下的空间变成方形;在有阻塞的地方加一些由小的 placement blockage 组成的矩阵 3)阻塞出现在标准单元的某一块:也可以加一些由小的 placement blockage 组成的矩阵; module/instance padding;利用 placement guide 减少那块地方的标准单元个数;scan chain reordering 也会改善一些阻塞;定义 density 上限;使用 congestion driven 的 placement,并且 要求 place 之后做 congestion 优化;在综合是禁止使用那些 pin 太多太密集的标准单元(多半 是那些复杂的组合逻辑单元);请前端使用 RAM 代替触发器矩阵;请前端修改算法 4)应该尽量减少 power route 占有的资源,谨慎选择 power mesh 使用的金属层,VIA 的大 小等。在 detail route 完成之后,你如果已经试了各种解决 signal congestion 的方法,还有少 量 DRC 无法解决时,可以考虑切掉部分 power mesh
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档