校外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的启动文件synopsys_dc.setup,目标
库选择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 0 compile report_timing report_constraint
change_names -rule verilog –hier set_fix_multiple_ports_net –all
write -format verilog -hier -output mux.sv //输出网表,自动布局布线需要 write -format ddc -hier -output mux.ddc //输出ddc
write_sdf mux.sdf //输出延时文件,静态时序分析时需要 write_sdc mux.sdc //输出约束信息,自动布局布线需要 3) 逻辑综合
启动design_vision。Read->mux.v
输入约束文件。File->excute script->verti.con
之后会产生mux.sv,mux.sdc,mux.sdf,mux.ddc等文件 4) 时序分析
综合以后我们需要分析一下时序,看时序是否符合我们的要求,综合实际上是一个setup时间的满足过程,但是我们综合的时候,连线的负载只是库提供的(即上面的wire_load),并不是实际的延时,所以一般做完综合以后,时间余量(slack)应该为时钟的30%(经验值),以便为后面实际布局布线留下充足的延时空间。因为如果slack太小,甚至接近于0,
虽然我们看起来是没有时序违规的,但是实际布局以后,时序肯定无法满足。 使用report_timing命令,可以查看时序分析报告: **************************************** Report : timing -path full -delay max -max_paths 1 -sort_by group Design : mux
Version: D-2010.03-SP1
Date : Fri Jul 2 12:29:44 2010
****************************************
Operating Conditions: typical Library: typical(模型库) Wire Load Model Mode: enclosed
Startpoint: data2[4] (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
-------------------------------------------------------------------------- clock clk (rise edge) 0.00 0.00 clock network delay (ideal) 0.00 0.00 input external delay 0.50 0.50 f data2[4] (in) 0.01 0.51 f mult_14/b[4] (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_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/product[15] (mux_DW_mult_uns_0) 0.00 4.47 f dataout_reg_15_/RN (DFFTRXL) 0.00 4.47 f data arrival time 4.47
clock clk (rise edge) 10.00 10.00 clock network delay (ideal) 0.30 10.30 clock uncertainty -0.10 10.20 dataout_reg_15_/CK (DFFTRXL) 0.00 10.20 r library setup time -0.19 10.01 data required time 10.01
-------------------------------------------------------------------------- data required time 10.01 data arrival time -4.47
-------------------------------------------------------------------------- slack (MET) 5.55
我们来看以上报告,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
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库IC后端流程(初学必看)在线全文阅读。
相关推荐: