IC后端流程初学必看.docx

上传人:b****3 文档编号:4851696 上传时间:2022-12-10 格式:DOCX 页数:18 大小:77.42KB
下载 相关 举报
IC后端流程初学必看.docx_第1页
第1页 / 共18页
IC后端流程初学必看.docx_第2页
第2页 / 共18页
IC后端流程初学必看.docx_第3页
第3页 / 共18页
IC后端流程初学必看.docx_第4页
第4页 / 共18页
IC后端流程初学必看.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

IC后端流程初学必看.docx

《IC后端流程初学必看.docx》由会员分享,可在线阅读,更多相关《IC后端流程初学必看.docx(18页珍藏版)》请在冰豆网上搜索。

IC后端流程初学必看.docx

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文件,相当于一个hardmacro。

9.将此macro作为一个模块在另外一个top设计中进行调用。

10.设计一个新的ASIC,第二次设计,我们需要添加PAD,因为没有PAD,就不是一个完整的芯片,具体操纵下面会说。

11.重复第4到7步

1.逻辑综合

1)设计的verilog代码

2)综合之前,我们要选取库,写好约束条件,修改dc的启动文件,目标库选择TSMC(此设计都是用TSMC18的库)的typical.db。

(选择max库会比较好)

Dc的命令众多,但是最基本的命令差未几,此设计的约束文件命令如下:

create_clock-period10[get_portsclk]//用于时钟的创建

set_clock_latency-source-max0.2[get_portsclk]//外部时钟到core的clk连线延时

set_clock_latency-max0.1[get_portsclk]//core的clk到寄存器clk端的net连线延时

set_clock_uncertainty-setup2[get_portsclk]//时钟延时的不确定性,求setup违规时会被计算进去

set_clock_uncertainty–hold1【all_clocks】

set_input_delay-max0.5-clockclk[get_ports[list[remove_from_coll[all_inputs]clk]]//输入延时,外部信号到input端的连线延时

set_output_delay-max0.5-clockclk[all_outputs]//输出延时

set_driving_cell-lib_cellINVX4[all_inputs]//输入端的驱动强度

set_load-pin_load0.0659726[all_outputs]//输出端的驱动力

set_wire_load_model-nametsmc18_wl10-librarytypical//内部net的连线模型

set_wire_load_modeenclosed//定义建模连线负载相关模式

set_max_area0

compile

report_timing

report_constraint

change_names-ruleverilog–hier

set_fix_multiple_ports_net–all

//输出网表,自动规划布线需要

//输出ddc

//输出延时文件,静态时序分析时需要

//输出约束信息,自动规划布线需要

3)逻辑综合

启动design_vision。

R

输入约束文件。

F

4)时序分析

综合以后我们需要分析一下时序,看时序是否符合我们的要求,综合实际上是一个setup时间的满足过程,但是我们综合的时候,连线的负载只是库提供的(即上面的wire_load),其实不是实际的延时,所以一般做完综合以后,时间余量(slack)应该为时钟的30%(经验值),以便为后面实际规划布线留下充足的延时空间。

因为如果slack太小,甚至接近于0,虽然我们看起来是没有时序违规的,但是实际规划以后,时序肯定无法满足。

使用report_timing命令,可以检查时序分析陈述:

****************************************

Report:

timing

-pathfull

-delaymax

-max_paths1

-sort_bygroup

Design:

mux

Date:

FriJul212:

29:

442010

****************************************

OperatingConditions:

typicalLibrary:

typical(模型库)

WireLoadModelMode:

enclosed

Startpoint:

data2[4](inputportclockedbyclk)

Endpoint:

dataout_reg_15_

(risingedge-triggeredflip-flopclockedbyclk)

PathGroup:

clk

PathType:

max

Des/Clust/PortWireLoadModelLibrary

------------------------------------------------

muxtsmc18_wl10typical(线载模型及库)

PointIncrPath

--------------------------------------------------------------------------

 

inputexternaldelay0.500.50f

data2[4](in)0.010.51f

mult_14/b[4](mux_DW_mult_uns_0)0.000.51f

mult_14/U131/Y(INVX1)0.541.05r

mult_14/U161/Y(NOR2X1)0.141.18f

mult_14/U39/S(CMPR42X1)0.681.87f

mult_14/U12/CO(ADDFX2)0.322.19f

mult_14/U11/CO(ADDFX2)0.232.42f

mult_14/U10/CO(ADDFX2)0.232.65f

mult_14/U9/CO(ADDFX2)0.232.88f

mult_14/U8/CO(ADDFX2)0.233.10f

mult_14/U7/CO(ADDFX2)0.233.33f

mult_14/U6/CO(ADDFX2)0.233.56f

mult_14/U5/CO(ADDFX2)0.233.79f

mult_14/U4/CO(ADDFX2)0.234.02f

mult_14/U3/CO(ADDFX2)0.234.25f

mult_14/U2/CO(ADDFX2)0.224.47f

mult_14/product[15](mux_DW_mult_uns_0)0.004.47f

dataout_reg_15_/RN(DFFTRXL)0.004.47f

 

dataout_reg_15_/CK(DFFTRXL)0.0010.20r

 

--------------------------------------------------------------------------

 

--------------------------------------------------------------------------

我们来看以上陈述,dc陈述的时候会显示出关键路径,即延时最大的路径,时序分析包含两段,前面一段是信号的延迟时间,即dataarrivaltime为4.47,下面是计算要求时间,也即相对于时钟,设计所能忍受的最大延时,由于到达寄存器clk端延时,即clocknetworkdelay,所以设计增加了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_designfile->verilog->mux.v,选择好以后loadfile

第三步:

设置top名reference->settopdesign我们选择mux为top名

同样的方法对网表进行设置(第二个菜单栏implementation)

然后转到第四栏,点击runmatching

最后转到第五栏,verify,如果网表无错,会显示验证通过。

3静态时序分析

静态时序分析主要针对大型ASIC设计,

4自动规划布线

1)数据准备

第一:

需要综合后的网表以及时序约束

第二:

需要自动规划布线的物理库(lef文件,这里用到tsmc18_6lm_cic.lef,tsmc18_6lm_antenna_cic.lef)

为了能够了解lef文档的作用,这里对lef做简单的介绍,lef一般分为两种:

一种是技术物理库,主要包含工艺信息,设计规则信息,金属通孔信息等。

下例是对金属一层的定义,TYPE指明METAL1是可布线层,WIDTH定义的是METAL1的默认布线宽度,SPACING用于设定METAL1布线间距。

DIRECTIONHORIZONTAL指明METAL1是用于水平走线,当然这其实不料味着它不克不及垂直走线,在一些布线资源较少的区域,还是可以选择垂直布线的。

具体介绍,可以参考相关技术文档。

LAYERMETAL1

TYPEROUTING;

WIDTH0.230;

MAXWIDTH9.9;

AREA0.202;

SPACING0.230;

SPACING0.6RANGE10.0100000.0;

PITCH0.560;

DIRECTIONHORIZONTAL;

EDGECAPACITANCE9.1090e-05;

ENDMETAL1

另外一种就是单元物理库,定义了单元库中各单元的信息,文件又有两部分一种是SITE语句对规划(placement)最小单位的定义,另一部分是采取MACRO语句对单元属性及几何形状的描述,下例是对一个与门为例来看看lef是如何描述它的。

MACRO是单元定义的关键字,每一个MACRO代表一个单元。

CLASScore说明该单元是用于芯片的核心区,SIZE确定了单元的面积大小,比方5.04是代表该单元的高度,后面我们做单元供电route的时候,可以看到它们的宽度就是这个数值。

再后面就是定义引脚A,B,Y,VDD,VSS等。

MACROAND2X1

CLASSCORE;

FOREIGNAND2X10.0000.000;

ORIGIN0.0000.000;

LEQAND2XL;

SIZE2.640BY5.040;

SYMMETRYxy;

SITEtsm3site;

PINY

DIRECTIONOUTPUT;

PORT

LAYERMETAL1;

RECT2.3552.3802.5002.660;

END

ENDY

PINB

DIRECTIONINPUT;

PORT

LAYERMETAL1;

RECT0.8002.3151.2152.895;

END

ENDB

PINA

DIRECTIONINPUT;

PORT

LAYERMETAL1;

RECT0.1501.8200.5652.315;

END

ENDA

PINVSS

DIRECTIONINOUT;

USEground;

SHAPEABUTMENT;

PORT

LAYERMETAL1;

RECT1.790-0.4002.6400.400;

RECT1.450-0.4001.7900.575;

RECT0.000-0.4001.4500.400;

END

ENDVSS

PINVDD

DIRECTIONINOUT;

USEpower;

SHAPEABUTMENT;

PORT

LAYERMETAL1;

RECT1.7554.6402.6405.440

END

ENDVDD

OBS

LAYERMETAL1;

RECT1.8351.9351.8852.355;

END

ENDAND2X1

第三:

时序库文件,typical.lib,也就是时序文件,定义了门的各种时序信息,某种意义来讲,这个和综合使用的db库是等价的。

2)规划布线过程:

第一步:

打开encounter把数据输入,另外在advanced栏的Power相应位置填上VDD,和VSS。

如下图,设置完以后,记得把设置的配置文件做一个save以便于下次使用

第二步:

打开以后,我们可以看到芯片区域,左边粉红色的就是尺度单元,中间那个就是我们要设计的区域,64%是指cell面积的占有率,一般来说控制在70%左右,布线的时候不会引起拥塞。

另外我们需要对芯片进行稍微的更改,Floorplan->specifyfloorplan.,将coretoIO那些项都填上45,留给电源环的放置。

第三步:

添加电源环

设置如下图,

NET填写VDD和VSS,layer选择顶层的两层金属,宽度设置为20(这个不定,可以根据实际设计来定),offset选择centerinchannel,则电源环会被设置在IO与core之间。

之后电源环就加进去了,当然这是一个小电路,电源规划比较简单,对于一个复杂的电路,还需要横竖添加stripes,降低IRdrop。

第四步:

自动规划以及安插尺度单元,因为此设计较小,并没有block,所以可以直接进行尺度单元的放置。

Place->standardcellsandblocaks->OK

然后我们发现尺度单元已经被加进去了:

第五步:

安插好了以后,我们需要将电源,地,等接口先连接起来,首先我们在floorplan中选择globalnetconnection,分别将VDD,VSS等都连接起来。

然后我们需要specifyroute将电源和地线先连接起来,选择route->specifyroute

因为我们这个设计只有尺度单元,所以我们只要选择尺度单元的布线即可:

完成以后,点击OK,会得到下面的图:

每行的row都有线连接到外面的电源环

第六步:

时钟树综合(CTS),这是一个APR设计中最重要的一环,为什么要进行时钟树综合呢,简单地说,因为信号传输的延时,我们需要让相应路径的时钟路径的也具有同样的延时,通过添加时钟缓冲器的方法,来消除各路径的建立时间,具体请参考相关书籍和资料。

添加好时钟树以后的版图如下:

加了时钟树以后的版图密集了很多,因为加了很多buf。

时钟树的脚本:

AutoCTSRootPinclk

Period10ns

MaxDelay500ps#set_clock_latency

MinDelay0ps#set_clock_latency

MaxSkew100ps

SinkMaxTran400ps

BufMaxTran400ps

ObstructionNO

DetailReportYES

PadBufAfterGateNO

RouteClkNetNO

PostOptYES

OptAddBufferYES

OptAddBufferLimit100

NoGatingNO

BufferCLKBUFX1CLKBUFXLCLKBUFX2CLKBUFX3CLKBUFX4CLKBUFX8CLKBUFX12CLKBUFX16CLKBUFX20CLKINVXLCLKINVX1CLKINVX2CLKINVX3CLKINVX4CLKINVX8CLKINVX12CLKINVX16CLKINVX20

END

然后将脚本选中,并进行时钟树综合。

第七步:

优化设计,命令optDesign–postCTS,然后report_timing检查时序陈述,确定无违规,再进行完全布线。

第八步:

完全布线,route->nanoroute->route

之后得到的版图如下所示:

第九步:

保管设计,提取需要的数据。

这里特别注意提取gds文件的时候,需要指定库文件中的streamOut.map文件,和mergegds(tsmc18_core.gds)文件,如图所示

保管网表,并将此版图提取的网表做一次formality,与原代码匹配成功。

5第二次静态时序分析

用版图实际提取的延时文件进行

6APR后仿真

用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-vmux.v-ltsmc18_lvs.v-oCHIP.spi-stsmc18_lvs.spi-ccic_-n

calibre-lvs-spicelayout.spi-hier-autoCalibre-lvs-cur_soce,之后会得到一个的网表文件。

()

2)用来lvs的网表我们选择之前导出:

然后runlvs,匹配成功!

8用abstract对模块进行抽取

我们把8*8乘法器模块用abstract工具导出lef,作为硬核,用于后面自动规划布线的调用,我们可以从此试验中找到模数混合自动版图的设计思想。

AbstractDef=>Lef

第一步:

创建一个新的library,并关联一个tf文件。

注:

(1)不需要输入streamOut.map也不必点上(nomerge)

不需要更改。

TopCellName为空

 

第五步:

打开librarymanager在mux库里打开mux的layout,并选择tools=>layout。

第六步:

选择Edit=>Search,点击AddCriteria,如下设置,选择aplly,在选择WordStrAll。

第七步:

保管退出

第八步:

打开abstract,并打开mux库。

然后把mux模块从core导入到block当中,方法:

点击mux,然后cell=>move=>block=>OK。

第九步:

点击GDS图中label,然后点击Q检查Properity。

看看是什么层,然后看看下面的net的Properity是什么层,以及是什么purpose。

层:

METAL3,Purpose:

pin。

具体含义主要看abstractUG。

<1>点击

,输入Maptextlabelstopins

Maptextlabelstopins的书写格式及含义参考abstractUG。

<2>点击

<3>点击

<4>Exportlef

之后我们得到一个该模块的lef文件,下面我们就用这个模块做一次调用。

9将此macro作为一个模块在另外一个top设计中进行调用。

第一步:

首先我们还是回到综合,我们重新设计一个top,这个top将包含新的逻辑功能,之前的mux模块,还有PAD模块。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

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

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