DCPTFMICC学习笔记.docx
- 文档编号:23013066
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:52
- 大小:910.83KB
DCPTFMICC学习笔记.docx
《DCPTFMICC学习笔记.docx》由会员分享,可在线阅读,更多相关《DCPTFMICC学习笔记.docx(52页珍藏版)》请在冰豆网上搜索。
DCPTFMICC学习笔记
BackendStudyNotes
DC综合学习笔记
一、verilog编写
在使用if语句的时候,一定得把条件写全,不然会综合出锁存器。
一个if语句只能跟一个表达式。
如果一个电路中出现两种时序电路结构(锁存器和触发器),会增加电路的测试难度。
If语句对应的是选择器。
If语句隐含这优先级别,这和case语句不同。
Case和If语句一样,都是用于选择输出的,但是case语句隐含的是平行的电路结构。
当case语句的条件没有完全译码时,会引起具有优先级的电路结构。
在使用always语句描述组合电路时,在该语句中读入的所有变量都需要出现在事件列表中,否则可能会得不到期望的结果。
(//synopsysfull_caseparallel_case,如果case语句不写全可以加这个keyword)
在使用always语句描述时序电路的时候,都会引用触发器,使用”<=”来对变量赋值,这种赋值叫做非阻塞赋值(相当是顺序语句,得前一句赋值完后才执行下一句,如果是触发器的话,向后延时一个时钟周期)。
在verilog语言中,一个reg类型的数据是被解释成无符号数,integer类型的数据是被解释成二进制补码的有符号数,而且最右边是有符号数的最低位。
keyword---//synopsys
//synopsysasync_set_reset"reset"
e.g.:
moduleSP2(reset,SP2IB1,IB12SP,SPen,
SP2IB1en);
inputSPen,SP2IB1en,reset;
input[2:
0]IB12SP;
output[2:
0]SP2IB1;
reg[2:
0]sp;
//synopsysasync_set_reset"reset"//加这句说明和不加这句说明综合结果是不一样的,最好是加上这么一句
always@(SPenorIB12SPorreset)
begin
if(reset)
sp=07;
elseif(SPen)
sp=IB12SP;
end
assignSP2IB1=(SP2IB1en?
sp:
'bz);
endmodule
二、DC综合注意的地方
1.在同一个电路中不能同时含有触发器和锁存器两种电路单元。
2.在电路中不能出现有反馈的组合逻辑。
3.不能出现用一个触发器的输出作为另一个触发器的时钟。
4.异步逻辑和模拟电路要单独处理。
5.使用的单元电路没有映射到工艺库中。
三、DC综合名词解释及脚本
1.名词解释
link_library设置单元或模块的引用。
前面必须包含’*’,表示DC在引用实例化模块时首先搜索已经调进DCmemory的模块。
link_library{“*”slow.db}
target_library为最终要映射的库。
synthetic_library的库在初始化DC的时候,不需要设置标准的DesignWare库standard.sldb用于实现Verilog描述的运算符,对于扩展的DesignWare,需要在synthetic_library中设置,同时需要在link_library中设置相应的库以使得在链接的时候DC可以搜索到相应运算符的实现。
路径的划分:
DC综合及优化都是基于路径的,路径的划分为:
路径的起点为输入端或者触发器的时钟端;路径的终点为输出端或触发器的数据端。
2.环境脚本说明
set_operating_conditions[-minmin_condition][-maxmax-condition][-min_librarymin_lib][-maxmax_lib]指定DC优化时使用的工作坏境,其中工作坏境的指定必须在库中指定,或者在link_library中的其中一个库中指定,如果不指定工作坏境,DC会自动搜索link_library中的第一个库的工作坏境最为优化是所使用的工作坏境。
使用get_attributelibnamedefault_operating_conditions来看工作坏境。
-max的选项用于指定电路最大延迟分析(分析电路是否满足触发器建立时间setuptime的要求)的工作环境
-min的选项用于指定电路最小延迟分析(分析电路是否满足触发器保持时间holdtime的要求)的工作环境,该选项不能单独使用,必须与-max同时使用。
如果不指定用于分析最小延迟的库,则只使用-max中指定的库用于电路的延迟分析。
-min_library的选项指定用于电路最大延迟分析的工艺库。
-max_library的选项指定用于电路最小延迟分析的工艺库。
e.g.set_operating_conditions–maxtypical_1v2c25
set_wire_load_model-namesmic13_wl20
set_wire_load_modetop(这个是设置模块之间的线负载,在编译后可用)
set_drive默认值为0表示驱动能力无限大(表示电阻值)set_drive0{clk,rest}
set_driving_cell用一个具体的电路来模拟输入延时set_driving_cell–lib_cellBUFX2{a,b}
在电路的优化阶段,输入端口的驱动能力用于计算输入端口到门电路的延迟,一般来说,输入端口的驱动能力可以按照以下公式影响延迟:
Time=arrive_time+drive*net_load+connect_delay
set_driving_cell-lib_cellBUFX2-librarytypical_1v2c25[all_inputs]所有的输入端口
(portload=2.5+3*load_of(tech_lib/IV/A)
set_loadport_loadall_outputs())一起用的命令
3.约束脚本说明
set_max_capacitance用于设置输出单元允许的最大电容负载set_max_capacitance2.0test–设置设计test的最大电容负载是2.0
set_max_capacitance2.0a--设置端口a的最大电容负载是2.0
set_max_transition是指电压从10%VDD上升到90%VDD所需要的时间(或下降),这个值长表示电路速度慢。
用法同上。
set_max_fanout语法同上。
(create_clock–period1–nameclk[get_portsclk]–wareform{00.5}周期为1ns的方波。
set_clock_uncertainty0.3[get_clocksclk](时钟的偏移))
set_dont_touch_network{rest,clk,clr}不对其端口综合。
set_dont_touch不进行优化的模块、端口。
可以用set_dont_touch[]false来取消前面的设置。
set_input_delay2.3{ab}(组合电路)set_input_delay2.3–clock[get_clocksclk][all_inputs](时序电路)
set_output_delay语法同上。
set_max_area0
(set_max_delay5-fromaset_min_delay2–froma)用于完全组合电路。
set_dont_use{typical_1v2c25/I*}表示不调用以I开头的cell。
create_clock–nameclk–period2这是设置的虚拟时钟用于组合电路。
dcprocheckrun.tcl检查synopsystcl脚本命令。
set_load[expr[load_ofmy_lib/inv1a0/A]*3][get_portsout1]输出端口out1并列驱动三个inv的A
set_driving_cell-lib_cellBUFX2–pinY[get_portsout1]如果没有说pin则默认为cell的输出pin
report_timing–delaymax|minmax看setup;min看hold的
4.查看报告命令
report_cell查看用了那些cell。
report_power–net查看每个cell用的功耗
report_net查看cell的fanout、fanin、capacitance、resistance.
setverilogout_show_unconnected_pinstrue设置在.synopsys_dc.setup里面,主要是为了输入编译后的verilog的cell没有用到的pin。
report_port返回所有加在输入输出端口的约束条件。
reset_design删除当前所有属性和约束。
remove_input_delay删除input_delay设定的延时。
remove_design删除当前设计.
report_path_group报告当前设计中个路径组的信息。
group_path–namecombo–from[all_inputs]–to[all_outputs]设定一个关键路径。
set_critical_range2[current_design]这样设置将会使相对于关键路径2ns范围内的路径群都进行优化。
group_path–nameclk1–critical_range0.3对于路径组的关键范围可以使用参数来指定。
set_dont_use{typical/*}表示不用typical这个库。
一些综合经验
set_clock_uncertainy–setup0.5–hold0.25[get_clocksCLK]在布图前和后阶段都指定一定的余量,这样可使芯片少受制造工艺偏差的影响。
set_max_delay5–from[all_inputs]–to[all_outputs]主要用在组合电路上
set_generated_clock–nameckl1–sourceCLK–divide_by2生成源CLK时钟的2分频
只有当通过编译达不到目标时,才使用compile–map_efforthigh。
时钟树的综合除了使用set_dont_touch_networt外还可有先用report_net查看高扇出的线网再使用balance_buffer命令点对点对其进行缓冲,或者用compile-in_place进行原地优化(IPO),并将compile_ok_to_buffer_during_inplace_opt开关设为false.
report_transitive_fanout–clock_tree(-fromreset)检查无意识的时钟门控(复位)
read_sdf*.sdf读入延迟文件
read_parasitics*.pef读入RC文件(spf)
使用disconnect_netcreate_cellconnect_net迫使DC在适当的位置插入cell。
在布图后将不用设置set_wire_load_model和set_wire_load_mode用实际的延迟和电容电阻代替了;也不用设置set_clock_latancy和set_clock_transition用具体时钟树代替(使用set_propagated_clock[get_clocksCLK])
report_timing–from[all_input]–to[all_registers–data_pins]
如果综合完发现不能使用write命令来写verilog而出现assign报错提示则可以使用:
set_fix_multiple_port_nets–all来解决这个问题。
附录
1.DC的启动脚本
#####################################################
##dcsetupfile##
#####################################################
setsearch_path[list../core./verlog./script]
setlink_library{*typical_1v2c25.db}
settarget_library{typical_1v2c25.db}
setsymbol_library"your_library.sdb"
setsynthetic_library""
read_file-formatverilog./verilog/cnt10.v
current_designcnt10
setverilogout_show_unconnected_pinstrue
aliasrp"report_power"
aliasrt"report_timing"
aliasra"report_area"
aliasrc"report_constraint-all_violators"
aliash"history"
2.组合电路优化脚本
link
set_operating_conditionstypical_1v2c25
set_wire_load_model-namesmic13_wl10
set_wire_load_modetop
set_drive_cell-lib_cellBUFX2[all_inputs]
set_max_capacitance2.0test
set_max_capacitance18test
set_max_fanout15test
set_input_delay2.0[all_inputs]
set_output_delay1.5[all_outputs]
set_max_area0
set_max_delay2.0-froma
set_max_delay1.0-froma
set_load1{s,co}
#set_drive0reset
uniquify
compile
rp>>./reports/power.rpt
ra>>./reports/area.rpt
rt>>./reports/timing.rpt
rc>>./reports/constraint.rpt
write-formatverilog-hierarchy-output./outputs/adder.v
write-formatddc-hierarchy-o./outputs/adder.ddc
write_sdf./outputs/adder.sdf
write_sdc./outputs/adder.sdc
3.时序电路优化脚本
link
create_clockclk-period5-waveform{02.5}
set_dont_touch_network[get_clocksclk]
set_fix_hold[get_clocksclk]
set_clock_uncertainly0.2[get_clocksclk]
set_clock_latency-source0[get_clocksclk]
set_clock_latency1[get_clocksclk]
set_input_transition0.3[all_inputs]#ifyouwantdontafixvalue,useset_driving_cell
set_clock_transition0.3[all_clocks]
set_operating_conditions-min_libraryfast_1v32c0-minfast_1v32c0-max_libraryslow_1v08c125-maxslow_1v08c125
set_wire_load_model-namesmic13_wl10-libraryslow
set_wire_load_modetop
set_wire_load"reference_area_1000000"-library"smic13"
set_drive[drive_of"slow_1v08c125/BUFX2/Y"][get_portsclk]
set_drive[drive_of"slow_1v08c125/DFFX1/Q"][remove_from_collection[all_inputs][get_portsclk]]
set_load[load_of"slow_1v08c125/DFFX1/D"][all_outputs]
set_input_delay-max1-clockclk[all_inputs]
set_input_delay-min0.2-clockclk[all_inputs]
set_output_delay-max1-clockclk[all_outputs]
set_output_delay-min0.1-clockclk[all_outputs]
#set_drive0{reset,clk}
set_max_area0
set_max_fanout2[all_inputs]
set_max_transition0.3[all_inputs]
uniquify
compile-boundary_optimization
rp>>./report/power.rpt
ra>>./report/area.rpt
rt>>./report/timing.rpt
rc>>./report/constraint.rpt
write-formatverilog-hierarchy-output./outputs/.v
write-formatddc-hierarchy-o./outputs/.ddc
write_sdf./outputs/.sdf
write_sdc./outputs/.sdc
PTSTA学习笔记
一、一些注意的地方
report_transitive_fanout–clock_tree报告出的”unknown”的clocknetwork可能计算出错误的延迟,report_reference查看cell的属性也可看使用了多少register。
当出现这样的问题我们可以使用Stamp模型来解决或者使用virtualclock旁通clkbuf
(create_clock–nameVCLK–p2–w{01}find(pin,U49/NQ)
set_clock_latancy0.2–sourceVCLK
set_ideal_netfind(net,VCLK))。
在时序分析中,经常会检查setup/hold、removal/recovery和minpulsewidth。
然而有些会是untested。
这使用report_analysis_coverage–status_details{untested}–sort_byslack–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
如果设计符合要求了,还得手动去修改netlists。
set_disable_timing禁止个别单元的时序弧有用。
有些违例路径共享的共同的叶单元的能力。
这称为瓶颈分析且通过使用命令report_bottleneck来进行查看。
如果一个时钟延迟是3±0.5则指令为
create_clock-period10[get_portsCLK]
set_clock_latency2.5-source-early[get_clocksCLK]
set_clock_latency3.5-source-late[get_clocksCLK]这个指令只能是sourceclock
set_min_pulse_width-high1.5[all_clocks]
set_min_pulse_width-low1.0[all_clocks]
report_min_pulse_width这个主要是在有时钟门控的时候
set_clock_gating_check-setup0.5-hold0.4[get_clocksCLK]
report_clock_gating_check
set_disable_clock_gating_checktodisablespecificclockgatingchecksinadesign
report_exceptions–ignored
check_timing当设置了时序例外后我们检查是不是有用了用
set_case_analysis0(oredge(rising))[get_portssel]一般用于选择器
report_case_analysisremove_case_analysis[get_portssel]
report_delay_calculation–fromU1/A–toU1/Z用于计算cell或net的时序弧
当使用read_sdf读入延迟文件时报没有某端口时序弧错时使用read_sdf–path和read_sdf–strip_path检查,以及report_annotated_delay–list_not_annotated查看。
drive_clocks检查所有clock的类
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DCPTFMICC 学习 笔记