基于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所示。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档