《DC-PT-FM-ICC学习笔记(24页).doc》由会员分享,可在线阅读,更多相关《DC-PT-FM-ICC学习笔记(24页).doc(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-DC-PT-FM-ICC学习笔记-第 - 22 - 页Backend Study Notes4DC综合学习笔记一、verilog 编写 在使用if语句的时候,一定得把条件写全,不然会综合出锁存器。一个if语句只能跟一个表达式。如果一个电路中出现两种时序电路结构(锁存器和触发器),会增加电路的测试难度。If语句对应的是选择器。If语句隐含这优先级别,这和case语句不同。Case和If语句一样,都是用于选择输出的,但是case 语句隐含的是平行的电路结构。当case语句的条件没有完全译码时,会引起具有优先级的电路结构。在使用always语句描述组合电路时,在该语句中读入的所有变量都需要出现在事
2、件列表中,否则可能会得不到期望的结果。(/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 ./outpu
3、ts/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_cloc
4、ks 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_
5、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_inputs
6、set_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 .
7、/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可能计算出
8、错误的延迟,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_
9、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的
10、原因先使用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_latenc
11、y 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_c
12、heckset_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 用于
13、计算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 (ris
14、e 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)
15、 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_cloc
16、k 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_col
17、lection 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_o
18、utputsset_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/cnt1
19、0_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/INV
20、X1/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
21、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
22、-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单元关键是选择驱动的
23、大小,而电源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单
24、元的数量是1:2的关系。供电单元位置摆放还需要考虑电压降(IR drop)的大小,一般需要在电源环设计完成后,做功耗分析,从而选择一个最佳的布局。1.2、层次化设计 层次化设计大致可分为三个步骤:芯片顶层设计规划、子模块分割(partition)与实现以及芯片顶层组装实现。布线通道按照形状分有典型的T形通道和L形通道两种。当两个子模块在芯片内部的空间跨度比较大时,有时还需要定义直通 (feedthrough) 布线通道,从而满足时序和布线的要求。2、布局2.1、电源规划供电网络设计主要内容有:(1) 电源连接关系的定义,又称为global net connect。(2) 芯片核内部分的电源环设
25、计,又称为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的设定,有以下几个经验规则:
限制150内