DC-PT-FM-ICC学习笔记.doc

上传人:w****2 文档编号:6655417 上传时间:2020-03-01 格式:DOC 页数:38 大小:1.67MB
返回 下载 相关 举报
DC-PT-FM-ICC学习笔记.doc_第1页
第1页 / 共38页
DC-PT-FM-ICC学习笔记.doc_第2页
第2页 / 共38页
DC-PT-FM-ICC学习笔记.doc_第3页
第3页 / 共38页
点击查看更多>>
资源描述
Backend Study NotesDC综合学习笔记- 1 -一、verilog 编写- 1 -二、DC综合注意的地方- 2 -1.在同一个电路中不能同时含有触发器和锁存器两种电路单元。- 2 -2.在电路中不能出现有反馈的组合逻辑。- 2 -3.不能出现用一个触发器的输出作为另一个触发器的时钟。- 2 -4.异步逻辑和模拟电路要单独处理。- 2 -5.使用的单元电路没有映射到工艺库中。- 2 -三、DC综合名词解释及脚本- 2 -1.名词解释- 2 -2.环境脚本说明- 2 -3.约束脚本说明- 2 -4.查看报告命令- 3 -一些综合经验- 4 -附录- 4 -1.DC的启动脚本- 4 -2.组合电路优化脚本- 5 -3.时序电路优化脚本- 5 -PT STA学习笔记- 6 -一、 一些注意的地方- 6 -二、常用的脚本- 7 -附录- 8 -时序分析范例- 8 -分析脚本(worst)- 8 -分析脚本(best)- 9 -Formality学习笔记- 9 -脚本范例- 9 -Encounter学习比较- 10 -一、理论- 10 -1、布图- 10 -1.1、I/O单元- 10 -1.2、层次化设计- 10 -2、布局- 10 -2.1、电源规划- 10 -2.2、标准单元和模块的放置- 12 -3、CTS- 12 -4、布线- 12 -二、脚本运用- 13 -三、需要抽取和保存的文件- 14 -ICC学习笔记- 15 -一、ICC基本流程- 15 -二、文件准备- 15 -三、脚本运用- 16 -附录:脚本范例- 16 -启动脚本范例- 16 -Floorplan脚本范例- 17 -无PAD脚本- 17 -有PAD脚本- 17 -Placement脚本范例- 18 -CTS脚本范例- 18 -Route脚本范例- 19 -文件导出范例- 19 -ECO脚本范例- 19 -VCS学习笔记- 21 -DFT学习笔记- 21 -Tcl语言学习笔记- 21 -4Perl语言学习笔记- 22 -时序学习笔记- 22 -1、基本概念- 22 -2、ON-Chip Variations(OCV)- 29 -3、时间借用(Time Borrowing or cycle stealing)- 30 -4、Data to Data Check- 31 -其他学习笔记- 33 -一、低功耗学习笔记- 33 -1.Clock Gate- 33 -二、信号完整性分析- 33 -名词解释- 34 -后端工程师具备的能力- 35 -附录- 35 -DC综合学习笔记一、verilog 编写 在使用if语句的时候,一定得把条件写全,不然会综合出锁存器。一个if语句只能跟一个表达式。如果一个电路中出现两种时序电路结构(锁存器和触发器),会增加电路的测试难度。If语句对应的是选择器。If语句隐含这优先级别,这和case语句不同。Case和If语句一样,都是用于选择输出的,但是case 语句隐含的是平行的电路结构。当case语句的条件没有完全译码时,会引起具有优先级的电路结构。在使用always语句描述组合电路时,在该语句中读入的所有变量都需要出现在事件列表中,否则可能会得不到期望的结果。(/synopsys full_case parallel_case,如果case语句不写全可以加这个key word)在使用always语句描述时序电路的时候,都会引用触发器,使用” ./reports/power.rptra ./reports/area.rptrt ./reports/timing.rptrc ./reports/constraint.rpt write -format verilog -hierarchy -output ./outputs/adder.vwrite -format ddc -hierarchy -o ./outputs/adder.ddcwrite_sdf ./outputs/adder.sdfwrite_sdc ./outputs/adder.sdc3.时序电路优化脚本linkcreate_clock clk -period 5 -waveform 0 2.5set_dont_touch_network get_clocks clkset_fix_hold get_clocks clkset_clock_uncertainly 0.2 get_clocks clkset_clock_latency -source 0 get_clocks clkset_clock_latency 1 get_clocks clkset_input_transition 0.3 all_inputs #if you want dont a fix value,use set_driving_cell set_clock_transition 0.3 all_clocksset_operating_conditions -min_library fast_1v32c0 -min fast_1v32c0 -max_library slow_1v08c125 -max slow_1v08c125set_wire_load_model -name smic13_wl10 -library slowset_wire_load_mode topset_wire_load reference_area_1000000-library smic13set_drive drive_of slow_1v08c125/BUFX2/Y get_ports clkset_drive drive_of slow_1v08c125/DFFX1/Q remove_from_collection all_inputs get_ports clkset_load load_of slow_1v08c125/DFFX1/D all_outputsset_input_delay -max 1 -clock clk all_inputsset_input_delay -min 0.2 -clock clk all_inputsset_output_delay -max 1 -clock clk all_outputsset_output_delay -min 0.1 -clock clk all_outputs#set_drive 0 reset,clk set_max_area 0set_max_fanout 2 all_inputsset_max_transition 0.3 all_inputsuniquifycompile -boundary_optimizationrp ./report/power.rptra ./report/area.rptrt ./report/timing.rptrc ./report/constraint.rpt write -format verilog -hierarchy -output ./outputs/.vwrite -format ddc -hierarchy -o ./outputs/.ddcwrite_sdf ./outputs/.sdfwrite_sdc ./outputs/.sdcPT STA学习笔记一、 一些注意的地方report_transitive_fanout clock_tree 报告出的”unknown”的clock network可能计算出错误的延迟,report_reference 查看cell的属性也可看使用了多少register。当出现这样的问题我们可以使用Stamp模型来解决或者使用virtual clock旁通clkbuf(create_clock name VCLK p 2 w 0 1 find(pin,U49/NQ)set_clock_latancy 0.2 source VCLKset_ideal_net find(net,VCLK)。在时序分析中,经常会检查setup/hold、removal/recovery和min pulse width。然而有些会是untested。这使用report_analysis_coverage status_details untested sort_by slack check_type setup|hold去查看。报告结果可能会出现”no_clock”,找到原因。一般是时钟没有到达,或者case_analysis分析;上面修复后会有一部分hold也修复了这是因为register的clk没有clock。然后还有一部分hold是untested可能会是对input/output没有min_delay的约束。报告结果可能会出现”no_paths”,这意味着endpoints没有约束。这可能是设置了set_false_path或者set_multicycle_path的原因先使用report_timing查看。二、常用的脚本report_analysis_converage 查看设计所有的setup.hold等情况的比例swap_cell 用这个命令去用相同的cell去代替,这个代替只是虚拟代替。如果设计符合要求了,还得手动去修改netlists。set_disable_timing 禁止个别单元的时序弧有用。有些违例路径共享的共同的叶单元的能力。这称为瓶颈分析且通过使用命令report_bottleneck来进行查看。如果一个时钟延迟是30.5则指令为create_clock -period 10 get_ports CLKset_clock_latency 2.5 -source -early get_clocks CLKset_clock_latency 3.5 -source -late get_clocks CLK 这个指令只能是source clockset_min_pulse_width -high 1.5 all_clocksset_min_pulse_width -low 1.0 all_clocksreport_min_pulse_width 这个主要是在有时钟门控的时候set_clock_gating_check -setup 0.5 -hold 0.4 get_clocks CLKreport_clock_gating_checkset_disable_clock_gating_check to disable specific clock gating checks in a designreport_exceptions ignoredcheck_timing当设置了时序例外后我们检查是不是有用了用set_case_analysis 0(or edge(rising) get_ports sel 一般用于选择器report_case_analysis remove_case_analysis get_ports selreport_delay_calculation from U1/A to U1/Z 用于计算cell或net的时序弧当使用read_sdf 读入延迟文件时报没有某端口时序弧错时使用read_sdf path 和 read_sdf strip_path检查,以及report_annotated_delay list_not_annotated查看。drive_clocks 检查所有clock的类型,像gated clock、internal generated clock和muxed clocks。然后用report_clock。附录时序分析范例pt_shell report_timing -path full_clockPoint Incr Path - clock clk (rise edge) 0.00 0.00 clock source latency 0.00 0.00 clk(in) 0.00 0.00 S_2/Z (BUF2) 0.40 * 0.40 f A_reg1/CP (FD1) 0.02 * 0.42 A_reg1/Q (FD1) 0.12 * 0.54 fresult_reg0/D (FD1) 0.00 1.96 rdata arrival time 1.96clock clk (rise edge) 4.00 4.00clk (in) 0.00 0.00 rS_1/Z (BUF1) 1.06 * 5.06 rresult_reg0/CP (FD1) 0.01 * 5.07 rlibrary setup time -0.80 * 4.27data required time 4.27从红色标记看出clock skew(uncertainy) 是 1.07-0.42分析脚本(worst)read_verilog ./verilog/pr_cnt10.vcurrent_design cnt10.vset_operating_conditions slow_1v08c125 read_timing ./input_file/cnt10.sdf read_parasitic ./input_file/cnt10_w.spefcreate_clock clk -period 2 -waveform 0 1set_dont_touch_network get_clocks clkset_dont_touch_network get_ports resetset_propagated_clock get_clocks clk#if you want dont a fix value,use set_driving_cell set_drive drive_of slow_1v08c125/INVX1/Y get_ports clkset_drive drive_of slow_1v08c125/INVX1/Y remove_from_collection all_inputs get_ports clkset_load load_of slow_1v08c125/INVX2/Y all_outputsset_input_transition 0.2 all_inputs set_input_delay -max 1.0 -clock clk all_inputsset_input_delay -min 0.2 -clock clk all_inputsset_output_delay -max 1.0 -clock clk all_outputsset_output_delay -min 0.1 -clock clk all_outputsset_drive 0 reset,clk set_max_area 0set_max_fanout 5 all_inputsset_max_transition 2 all_inputsreport_constraint -all_violators分析脚本(best)read_verilog ./verilog/pr_cnt10.vcurrent_design cnt10.vset_operating_conditions fast_1v32c0 read_timing ./input_file/cnt10.sdfread_parasitic ./input_file/cnt10_b.spef create_clock clk -period 2 -waveform 0 1set_dont_touch_network get_clocks clkset_dont_touch_network get_ports resetset_propagated_clock get_clocks clk#if you want dont a fix value,use set_driving_cell set_drive drive_of slow_1v08c125/INVX1/Y get_ports clkset_drive drive_of slow_1v08c125/INVX1/Y remove_from_collection all_inputs get_ports clkset_load load_of slow_1v08c125/INVX2/Y all_outputsset_input_transition 0.2 all_inputs set_input_delay -max 1.0 -clock clk all_inputsset_input_delay -min 0.2 -clock clk all_inputsset_output_delay -max 1.0 -clock clk all_outputsset_output_delay -min 0.1 -clock clk all_outputsset_drive 0 reset,clk set_max_area 0set_max_fanout 5 all_inputsset_max_transition 2 all_inputsreport_constraint -all_violatorsFormality学习笔记脚本范例set search_path ./core ./rtl ./netlistset_svf default.svfread_verilog -r cnt10.vset_top cnt10read_db -i fast_1v32c0.dbread_verilog -i pr_cnt10.vset_top cnt10matchverifyEncounter学习比较一、理论1、布图1.1、I/O单元I/O单元主要是保证信号从芯片内部传递到外部时其路径最短,同时要求从I/O单元关键引线到封装点时,避免信号交叉,方便封装基板的制作,减少基板上的走线层数。当芯片的输入输出单元较多而内部逻辑单元较少且一般为I/O单元限制型设计时,则一般选用狭窄的I/O单元;当芯片的输入输出单元较少而内部逻辑单元较大时,则一般选用宽的I/O单元。但设计子模块时,I/O单元的形式为接点(pin)而不是接口(pad)。I/O单元分为信号接口和电源两种类型,信号I/O单元关键是选择驱动的大小,而电源I/O单元需要重点考虑的是供电电源的数量计算和摆放。电源I/O单元分为:模拟的、数字的、隔离数字模拟供电的。数字I/O供电单元分为给I/O单元供电的和给核内标准单元供电的。给核内单元供电的I/O单元的数量m根据芯片的功耗、I/O单元的供电电压以及电流来估计:其中:Pavg为芯片的平均功耗;Vpad、Ipad为供电I/O单元的电压和最大电流;k为调整因子,min(12),max(510)。给I/O单元供电的供电单元输了也由多种因素决定,I/O单元的功耗、输出I/O单元的驱动能力等,经验做法是给I/O单元供电的单元数量与给输出信号端口的比例为1:(510)的关系,与给内核供电的I/O单元的数量是1:2的关系。供电单元位置摆放还需要考虑电压降(IR drop)的大小,一般需要在电源环设计完成后,做功耗分析,从而选择一个最佳的布局。1.2、层次化设计 层次化设计大致可分为三个步骤:芯片顶层设计规划、子模块分割(partition)与实现以及芯片顶层组装实现。布线通道按照形状分有典型的T形通道和L形通道两种。当两个子模块在芯片内部的空间跨度比较大时,有时还需要定义直通 (feedthrough) 布线通道,从而满足时序和布线的要求。2、布局2.1、电源规划供电网络设计主要内容有:(1) 电源连接关系的定义,又称为global net connect。(2) 芯片核内部分的电源环设计,又称为power ring。(3) 芯片内所包含的硬核(RAM、ROM and IP、COT)的电源环设计。(4) 芯片核内纵横交错的电源网格的设计,又称为power stripe。(5) 芯片的供电单元与电源环的连接,又称为I/O单元power。(6) 芯片内部电源网格和硬核电源环连接部分的设计,又称为ring pins。(7) 将标准单元的供电网络与核内电源网格总连接设计,又称为followpins。(8) I/O供电单元电源环的设计,又称为I/O单元power ring。电源网格是为了平均分布电流,缩短电流回路,在有效减小电压降的同时,避免由于电流分布不均时造成的热点(hot spot)现象以及电迁移(EM,electromi-gration)为问题。电源环的设计主要有3个参数:电源环的宽度w、电源环的间距d以及电源环的对数n。估算方法为:其中Ip为芯片的峰值电流;Cd为厂家工衣库给出的电流密度的上限;n为电源环对数;k为调整因子。电源网格(power grid)通常是均匀分布,电源条线(power stripes)通常是不规则或不均匀分布。其中power stripes的宽度Wstripe_V与纵向power stripes的间距S1成正比关系,同理可得Wstripe_H与S2的关系。对于Wstripe_V和Wstripe_H的设定,有以下几个经验规则:(1) Wstripe_V的分布间隔一般取垂直分布间距(pitch)的整数倍,一般最大情况下不超过最小NAND2X1宽度的4倍。(2) Wstripe_V的最大值取标准单元库中NAND2X1宽度的4倍。(3) Wstripe_H的取值一般是标准单元高度的整数倍,通常选择12倍。在确定了power stripe的宽度后,需要计算其间距S1、S2。在估算出内部纵/横供电金属宽度基础上,我们可以求出功耗为P的总电流Itotal。假设图中A点有5%的电压降,那么位于A点其有效电阻分别为假设N为纵向power stripes的对数,M为横向power stripes的对数,则其值分别为: 最后得出纵向电源网格的间距S1和横向电源网格的间距S2分别是:S1=W/N, S2=H/M。在数字和模拟混合供电,布图前一般需要作如下几点考虑:(1) 模拟模块的工作区域一般放置于芯片的某个角落。(2) 模拟区域需要单独供电,给模拟信号供电的I/O单元应放在模拟模块别上,尽量缩短供电线路的长度。(3) 在模拟模块的周围布置保护隔离环(guarding ring),从而实现数字信号和模拟信号电源之间的隔离。当设计中存在被关闭的电压域,为了不使关闭区域与非关闭区域相互影响,必须在所有的接口处添加隔离单元(isolation cell),并要:1检查出所有需要添加格力网络的信号端口;2在相应的接口处添加隔离单元。2.2、标准单元和模块的放置展平式设计包括两个部分:1模块的摆放与布局。2标准单元的摆放和优化。层次化布局有三个过程:1先分配子模块,这是与展平式布局最大的不同之处;2作子模块级的布局,他的方法与展平式一样;3所有子模块完成后在顶层组装,其布局方法与展平式一样。层次化设计中子模块的约束类型一般有三中:向导约束(guide)、区域约束(region)和限制约束(fence),其中向导约束为模块指定向导范围,属于该模块的标准单元可以放置在该向导范围内,也可以放置在向导范围外。不属于该模块的标准单元可以放置在该区域之内。区域约束中,属于该模块的单元只能放在指定的区域内,该区域还可以放置其他模块单元。限制约束中,属于该模块的单元只能放在指定的区域内,该区域不可以放置其他模块单元。在标准单元布局优化后,需要对设计进行拥塞(congestion)分析、静态时序分析、噪声分析和电源分析从而确定布局的好坏。布局目标:1各模块的位置相对确定;2满足设计规则要求,出时钟网络,其他高扇出网络都插入了驱动单元。3芯片的时序和供电较为良好。在布局完成后需要评估的目标主要有:拥塞(congestion)程度(当实际需要的通道超过先游的通道的5%时,表面拥塞程度比较大)、延迟和时序、供电预估(可以引用VCD文件,对芯片的功耗、IR drop及EM进行评估。由于时钟树还没综合功耗会偏小)。如果一个fence或region的EU值达到或超过了100%,placement changes the fence or region to a guide。为了避免这种情况,在进行placement之前,如有必要,应确保核对和更新EU值。总密度Core size的计算:Core size=(standard cell area/core utilization)+(macro area+halo)标准单元密度StdCell size的计算:StdCell size=(standard cell area/StdCell utilization)+(macro area+halo)一旦使用StdCell size定义floorplan,则Core的大小将会变小。3、CTS时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟源通常有RC时钟、晶振时钟和锁相环(PLL)时钟。时钟信号的延迟(latency)又称为插入延迟(insert delay),它包括时钟源延迟和时钟网络延迟。次两种延迟分别用命令表示为:set_clock_latency 2.0 source get_clocks CLKset_clock_latency 2.0 get_clocks CLK时钟信号的抖动又称为时钟的不确定性。时钟的偏差(skew)指的是同一时钟到达该时钟域内的不同寄存器之间的时间偏差。它是衡量时钟树性能的重要参数,时钟树综合的目的就是为了减小偏差,它的值有正负两种。增加寄存器的时钟延迟而并不影响时钟树的功能叫做时钟树的有用偏差。时钟树综合对同步电路实现的优点是电路结构简单明朗,具有较好的鲁棒性,验证简单。缺点是较大的时钟在物理实施时具有一定的难度,封装电感和电源电阻会在时钟跳变瞬间产生很大噪声。异步电路不规则但速度快,功耗低。门控时钟技术是降低功耗最常用的方法。门控时钟可以用create_clock和generated_clock来定义。create-clock name lcd_gating_clk period 10 waveform 0 5 get_pins main_gate/Y。门控时钟上的setup并不是关注的焦点,而hold的问题则是需要特别关注的。时钟树是芯片中频率和翻转率最高的,降低时钟树的噪声(主要是耦合电容)非常重要,其方法有:1局部电源地保护;2增加驱动能力;3高层金属多倍间隔走线。4、布线消除布线拥塞、优化时序、减小耦合效用(coupling)、消除串扰(crosstalk)、降低功耗、保证信号完整性(SI, signal integrity)、预防DFM问题和提高良品率等是衡量布线质量的重要指标。全局布线速度快、时间短,能加快收敛;主要目标有:1使总连接线最短;2布线分散均匀以不至于引起局部拥塞;3使关键路径延迟最小,遵守时序规则;4理解信号完整性的要求,避免串扰;5保持将BUS总线聚集相连等。二、脚本运用captbl_file写入RC查找表文件,此文件由foundry提供,或者用户自己由ITF转来,从lef中提取RC寄生信息,方法如下:setExtractRCMode -useLEFResistancesetExtractRCMode -useLEFCapImport Design完成后网表要唯一化:checkUnique verbose,显示1则ok;setAnalysisMode setuptimeDesign prefix plc preCTS idealClock numPaths 20 outDir ./ouput/plcPlace可以分三步:#placeDesign -prePlaceOptplaceDesign #placeDesign inPlaceOptsetAnalysisMode -setupwrite_sdfmax.sdfsetAnalysisMode -holdwrite_sdfmin.sdf在抽取寄生参数的时候要按此顺序:1.extractRC 2. rcOut worst|best -spef ./output_file/cnt10.spef在encounter的流程里面,是不允许CTS之前fix hold的:optDesign -postCTS -hold -prefix ppo_holdcheckDesign all 检测设计的相关信息。snapRoute 建立45布线到只招的栅格。report_timing check_type setup|hold 检查建立和保持时间spliteRoute 分割大于最大宽度的45布线。如果没哟用45布线,可以使用ExtractRC来提取parasitics;如果用了可用Fire&Ice QX来提取parasiticsswapPins 命令替换partition 的PinssetPinConstraint和setPinGroupConstraint命令来定义层次、宽、深和层顶。setPtnPinWidth和setPtnPinDepth命令定义Pin的宽和布线层次的深度。setMinPinPitch和setMinPinPitchOnSide设置pin的间距。snapPtnPinsToTracks A 把A端口移到交叉布线格点上。三、需要抽取和保存的文件输出RC parasitic p
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 临时分类 > 人文社科


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!