ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:77.42KB ,
资源ID:4851696      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4851696.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(IC后端流程初学必看.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

IC后端流程初学必看.docx

1、IC后端流程初学必看 校外IC后端实践陈述之巴公井开创作创作时间:贰零贰壹年柒月贰叁拾日本教程通过对synopsys公司给的lab进行培训,从verilog代码到版图的整个流程(当然只是基本流程,因为真正一个大型的设计不是那么简单就完成的),此教程的目的就是为了让大家尽快了解数字IC设计的大概流程,为以后学习建立一个基础。此教程只是自己探索实验的结果,其实不代表内容都是正确的,只是为了说明大概的流程,里面一定还有很多未完善而且有错误的地方,我在今后的学习当中会对其逐一完善和修正。此后端流程大致包含一下内容:1.逻辑综合(工具DC 逻辑综合是干吗的就不必解释了把?)2.设计的形式验证(工具for

2、mality)形式验证就是功能验证,主要验证流程中的各个阶段的代码功能是否一致,包含综合前RTL代码和综合后网表的验证,因为如今IC设计的规模越来越大,如果对门级网表进行动态仿真的话,会花费较长的时间(规模大的话甚至要数星期),这对于一个对时间要求严格(设计周期短)的asic设计来说是不成容忍的,而形式验证只用几小时即可完成一个大型的验证。另外,因为版图后做了时钟树综合,时钟树的拔出意味着进入布图工具的原来的网表已经被修改了,所以有需要验证与原来的网表是逻辑等价的。3.静态时序分析(STA),某种程度上来说,STA是ASIC设计中最重要的步调,使用primetime对整个设计布图前的静态时序分

3、析,没有时序违规,则进入下一步,否则重新进行综合。(PR后也需作signoff的时序分析)4.使用cadence公司的SOCencounter对综合后的网表进行自动规划布线(APR)5.自动规划以后得到具体的延时信息(sdf文件,由寄生RC和互联RC所组成)反标注到网表,再做静态时序分析,与综合类似,静态时序分析是一个迭代的过程,它与芯片规划布线的联系非常紧密,这个操纵通常是需要执行许多次才干满足时序需求,如果没违规,则进入下一步。6.APR后的门级功能仿真(如果需要)7.进行DRC和LVS,如果通过,则进入下一步。8.用abstract对此lab实验进行抽取,发生一个lef文件,相当于一个h

4、ard 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_la

5、tency -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

6、 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 /定义建模连线负载相关模

7、式set_max_area 0compile report_timingreport_constraint change_names -rule verilog hierset_fix_multiple_ports_net all /输出网表,自动规划布线需要 /输出ddc /输出延时文件,静态时序分析时需要 /输出约束信息,自动规划布线需要3)逻辑综合启动design_vision。R输入约束文件。F4)时序分析综合以后我们需要分析一下时序,看时序是否符合我们的要求,综合实际上是一个setup时间的满足过程,但是我们综合的时候,连线的负载只是库提供的(即上面的wire_load),其实不是实

8、际的延时,所以一般做完综合以后,时间余量(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: typica

9、l(模型库)Wire Load Model Mode: enclosed Startpoint: data24 (input port clocked by clk) Endpoint: dataout_reg_15_ (rising edge-triggered flip-flop clocked by clk) Path Group: clk Path Type: max Des/Clust/Port Wire Load Model Library - mux tsmc18_wl10 typical(线载模型及库)Point Incr Path - input external delay

10、 0.50 0.50 f data24 (in) 0.01 0.51 f mult_14/b4 (mux_DW_mult_uns_0) 0.00 0.51 f mult_14/U131/Y (INVX1) 0.54 1.05 r mult_14/U161/Y (NOR2X1) 0.14 1.18 f mult_14/U39/S (CMPR42X1) 0.68 1.87 f mult_14/U12/CO (ADDFX2) 0.32 2.19 f mult_14/U11/CO (ADDFX2) 0.23 2.42 f mult_14/U10/CO (ADDFX2) 0.23 2.65 f mult

11、_14/U9/CO (ADDFX2) 0.23 2.88 f mult_14/U8/CO (ADDFX2) 0.23 3.10 f mult_14/U7/CO (ADDFX2) 0.23 3.33 f mult_14/U6/CO (ADDFX2) 0.23 3.56 f mult_14/U5/CO (ADDFX2) 0.23 3.79 f mult_14/U4/CO (ADDFX2) 0.23 4.02 f mult_14/U3/CO (ADDFX2) 0.23 4.25 f mult_14/U2/CO (ADDFX2) 0.22 4.47 f mult_14/product15 (mux_D

12、W_mult_uns_0) 0.00 4.47 f dataout_reg_15_/RN (DFFTRXL) 0.00 4.47 f dataout_reg_15_/CK (DFFTRXL) 0.00 10.20 r -我们来看以上陈述,dc陈述的时候会显示出关键路径,即延时最大的路径,时序分析包含两段,前面一段是信号的延迟时间,即data arrival time 为4.47,下面是计算要求时间,也即相对于时钟,设计所能忍受的最大延时,由于到达寄存器clk端延时,即clock network delay,所以设计增加了0.30的余量,同样由于时钟的不确定度(可能提前也可能延后0.1),我们取

13、最坏情况,就是时钟超前0.1,则时间余量减去0.1,最后一个是门的建立时间要求,是0.19,最后得到数据的要求时间。Slack是要求时间减去到达时间的差值,slack越大越好。越大说明留给规划布线的时序越宽松。从陈述中我们看出,时序余量为5.55,说明时序达到了要求,足够满足我们以后规划布线的时序要求。当然,我们有专门的时序分析工具,primetime,下面会稍微介绍。2.形式验证1)怎么包管综合前和综合后的网表逻辑功能是一致的呢,对门级网表进行动态仿真,又太浪费时间,于是,一款强大的验证工具formality,给了我们很好的帮忙。2)形式验证数据准备:综合前RTL代码,综合后的网表,综合所用

14、到的库。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名同样的方法对网表进行设置(第二个菜单

15、栏implementation)然后转到第四栏,点击run matching最后转到第五栏,verify,如果网表无错,会显示验证通过。3 静态时序分析静态时序分析主要针对大型ASIC设计,4 自动规划布线1)数据准备第一:需要综合后的网表以及时序约束第二:需要自动规划布线的物理库(lef文件,这里用到tsmc18_6lm_cic.lef, tsmc18_6lm_antenna_cic.lef)为了能够了解lef文档的作用,这里对lef做简单的介绍,lef一般分为两种:一种是技术物理库,主要包含工艺信息,设计规则信息,金属通孔信息等。下例是对金属一层的定义,TYPE指明METAL1是可布线层,

16、WIDTH定义的是METAL1的默认布线宽度,SPACING用于设定METAL1布线间距。DIRECTION HORIZONTAL指明METAL1是用于水平走线,当然这其实不料味着它不克不及垂直走线,在一些布线资源较少的区域,还是可以选择垂直布线的。具体介绍,可以参考相关技术文档。LAYER METAL1 TYPE 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 ; ED

17、GECAPACITANCE 9.1090e-05 ;END METAL1另外一种就是单元物理库,定义了单元库中各单元的信息,文件又有两部分一种是SITE语句对规划(placement)最小单位的定义,另一部分是采取MACRO语句对单元属性及几何形状的描述,下例是对一个与门为例来看看lef是如何描述它的。MACRO是单元定义的关键字,每一个MACRO代表一个单元。CLASS core说明该单元是用于芯片的核心区,SIZE确定了单元的面积大小,比方5.04是代表该单元的高度,后面我们做单元供电route的时候,可以看到它们的宽度就是这个数值。再后面就是定义引脚A,B,Y,VDD,VSS等。MACR

18、O AND2X1 CLASS 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 Y DIRECTION OUTPUT ; PORT LAYER METAL1 ; RECT 2.355 2.380 2.500 2.660 ; END END Y PIN B DIRECTION INPUT ; PORT LAYER METAL1 ; RECT 0.800 2.315 1.215 2.895 ; E

19、ND END B PIN A DIRECTION INPUT ; PORT LAYER METAL1 ; RECT 0.150 1.820 0.565 2.315 ; END END A PIN VSS DIRECTION INOUT ; USE ground ; SHAPE ABUTMENT ; PORT LAYER 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 ; END END VSS PIN VDD DIRECTION INOU

20、T ; USE power ; SHAPE ABUTMENT ; PORT LAYER METAL1 ; RECT 1.755 4.640 2.640 5.440 END END VDD OBS LAYER METAL1 ; RECT 1.835 1.935 1.885 2.355 ; ENDEND AND2X1第三:时序库文件,typical.lib,也就是时序文件,定义了门的各种时序信息,某种意义来讲,这个和综合使用的db库是等价的。2)规划布线过程:第一步:打开encounter 把数据输入,另外在advanced栏的Power相应位置填上VDD,和VSS。如下图,设置完以后,记得把设置

21、的配置文件做一个save以便于下次使用第二步:打开以后,我们可以看到芯片区域,左边粉红色的就是尺度单元,中间那个就是我们要设计的区域,64%是指cell面积的占有率,一般来说控制在70%左右,布线的时候不会引起拥塞。另外我们需要对芯片进行稍微的更改,Floorplan-specify floorplan.,将core to IO那些项都填上45,留给电源环的放置。第三步:添加电源环设置如下图,NET填写VDD和VSS,layer选择顶层的两层金属,宽度设置为20(这个不定,可以根据实际设计来定),offset选择center in channel,则电源环会被设置在IO与core之间。之后电源

22、环就加进去了,当然这是一个小电路,电源规划比较简单,对于一个复杂的电路,还需要横竖添加stripes,降低IRdrop。第四步:自动规划以及安插尺度单元,因为此设计较小,并没有block,所以可以直接进行尺度单元的放置。Place-standard cells and blocaks-OK然后我们发现尺度单元已经被加进去了:第五步:安插好了以后,我们需要将电源,地,等接口先连接起来,首先我们在floorplan中选择global net connection,分别将VDD,VSS等都连接起来。然后我们需要specify route将电源和地线先连接起来,选择route-specify rout

23、e因为我们这个设计只有尺度单元,所以我们只要选择尺度单元的布线即可:完成以后,点击OK,会得到下面的图:每行的row都有线连接到外面的电源环第六步:时钟树综合(CTS),这是一个APR设计中最重要的一环,为什么要进行时钟树综合呢,简单地说,因为信号传输的延时,我们需要让相应路径的时钟路径的也具有同样的延时,通过添加时钟缓冲器的方法,来消除各路径的建立时间,具体请参考相关书籍和资料。添加好时钟树以后的版图如下:加了时钟树以后的版图密集了很多,因为加了很多buf。时钟树的脚本:AutoCTSRootPin clkPeriod 10nsMaxDelay 500ps # set_clock_laten

24、cyMinDelay 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

25、 CLKINVX1 CLKINVX2 CLKINVX3 CLKINVX4 CLKINVX8 CLKINVX12 CLKINVX16 CLKINVX20 END然后将脚本选中,并进行时钟树综合。第七步:优化设计,命令optDesign postCTS,然后report_timing检查时序陈述,确定无违规,再进行完全布线。第八步:完全布线,route -nanoroute-route之后得到的版图如下所示:第九步:保管设计,提取需要的数据。这里特别注意提取gds文件的时候,需要指定库文件中的streamOut.map文件,和merge gds(tsmc18_core.gds)文件,如图所示保管网

26、表,并将此版图提取的网表做一次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然后将版图信息

27、和技术文件填入:导入成功以后会出现我们所做的库,mux就是我们encounter中所画的版图。我们把版图打开:这就是我们所画的版图然后在此进行drc,和lvs,通过以后再进行下面的工作。第二步:drc检查此处有错,其实不是逻辑有问题,是因为密度不敷的问题,需要在encounter阶段加FILLER,FILLER是与逻辑无关的,因为代工厂的流片加工要求,需要加的,密度不敷,加工容易引起问题。所以如果DRC报类似错误,如果是需要流片的版图,除非代工厂同意,否则必须清除这些错误。第三步:lvs检查1)Lvs检查之前,我们需要把综合后的verilog文件转换成网表文件,用于lvs,方法如下:终端下执行

28、: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第一步:创建一个新

29、的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图

30、中label,然后点击Q检查Properity。看看是什么层,然后看看下面的net的Properity是什么层,以及是什么purpose。层:METAL3,Purpose:pin。具体含义主要看abstract UG。 点击,输入Map text labels to pins Map text labels to pins 的书写格式及含义参考abstract UG。 点击 点击 Export lef之后我们得到一个该模块的lef文件,下面我们就用这个模块做一次调用。9将此macro作为一个模块在另外一个top设计中进行调用。第一步:首先我们还是回到综合,我们重新设计一个top,这个top将包含新的逻辑功能,之前的mux模块,还有PAD模块。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1