您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 后端流程(初学必看)
基本后端流程(漂流&雪拧)-----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,如果通过,则进入下一步。8.用abstract对此8*8乘法器进行抽取,产生一个lef文件,相当于一个hardmacro。9.将此macro作为一个模块在另外一个top设计中进行调用。10.设计一个新的ASIC,第二次设计,我们需要添加PAD,因为没有PAD,就不是一个完整的芯片,具体操作下面会说。11.重复第4到7步1.逻辑综合1)设计的8*8verilog代码如下modulemux(clk,clr,data1,data2,dataout);inputclk,clr;input[7:0]data1,data2;outputreg[15:0]dataout;always@(posedgeclk)beginif(!clr)begindataout=0;endelsebegindataout=data1*data2;endendendmodule2)综合之前,我们要选取库,写好约束条件,修改dc的启动文件synopsys_dc.setup,目标库选择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_area0compilereport_timingreport_constraintchange_names-ruleverilog–hierset_fix_multiple_ports_net–allwrite-formatverilog-hier-outputmux.sv//输出网表,自动布局布线需要write-formatddc-hier-outputmux.ddc//输出ddcwrite_sdfmux.sdf//输出延时文件,静态时序分析时需要write_sdcmux.sdc//输出约束信息,自动布局布线需要3)逻辑综合启动design_vision。Read-mux.v输入约束文件。File-excutescript-verti.con之后会产生mux.sv,mux.sdc,mux.sdf,mux.ddc等文件4)时序分析综合以后我们需要分析一下时序,看时序是否符合我们的要求,综合实际上是一个setup时间的满足过程,但是我们综合的时候,连线的负载只是库提供的(即上面的wire_load),并不是实际的延时,所以一般做完综合以后,时间余量(slack)应该为时钟的30%(经验值),以便为后面实际布局布线留下充足的延时空间。因为如果slack太小,甚至接近于0,虽然我们看起来是没有时序违规的,但是实际布局以后,时序肯定无法满足。使用report_timing命令,可以查看时序分析报告:****************************************Report:timing-pathfull-delaymax-max_paths1-sort_bygroupDesign:muxVersion:D-2010.03-SP1Date:FriJul212:29:442010****************************************OperatingConditions:typicalLibrary:typical(模型库)WireLoadModelMode:enclosedStartpoint:data2[4](inputportclockedbyclk)Endpoint:dataout_reg_15_(risingedge-triggeredflip-flopclockedbyclk)PathGroup:clkPathType:maxDes/Clust/PortWireLoadModelLibrary------------------------------------------------muxtsmc18_wl10typical(线载模型及库)PointIncrPath--------------------------------------------------------------------------clockclk(riseedge)0.000.00clocknetworkdelay(ideal)0.000.00inputexternaldelay0.500.50fdata2[4](in)0.010.51fmult_14/b[4](mux_DW_mult_uns_0)0.000.51fmult_14/U131/Y(INVX1)0.541.05rmult_14/U161/Y(NOR2X1)0.141.18fmult_14/U39/S(CMPR42X1)0.681.87fmult_14/U12/CO(ADDFX2)0.322.19fmult_14/U11/CO(ADDFX2)0.232.42fmult_14/U10/CO(ADDFX2)0.232.65fmult_14/U9/CO(ADDFX2)0.232.88fmult_14/U8/CO(ADDFX2)0.233.10fmult_14/U7/CO(ADDFX2)0.233.33fmult_14/U6/CO(ADDFX2)0.233.56fmult_14/U5/CO(ADDFX2)0.233.79fmult_14/U4/CO(ADDFX2)0.234.02fmult_14/U3/CO(ADDFX2)0.234.25fmult_14/U2/CO(ADDFX2)0.224.47fmult_14/product[15](mux_DW_mult_uns_0)0.004.47fdataout_reg_15_/RN(DFFTRXL)0.004.47fdataarrivaltime4.47clockclk(riseedge)10.0010.00clocknetworkdelay(ideal)0.3010.30clockuncertainty-0.1010.20dataout_reg_15_/CK(DFFTRXL)0.0010.20rlibrarysetuptime-0.1910.01datarequiredtime10.01--------------------------------------------------------------------------datarequiredtime10.01dataarrivaltime-4.47--------------------------------------------------------------------------slack(MET)5.55我们来看以上报告,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第二步:然后选择库,没加库之前,FM会自动加载与工艺无关的库,所以我们要自己把自己的目标库加
本文标题:后端流程(初学必看)
链接地址:https://www.777doc.com/doc-3367397 .html