总结spyglass使用过程中出现的问题,总结使用步骤供参考,实践出真知,解决问题就是好方法。
一、.cshrc
#env
setenv SPYGLASS_HOME /eda/Synopsys/SpyGlass-2018.09/SPYGLASS_HOME
set path = $SPYGLASS_HOME/bin $path
# license
setenv SNPSLMD_LICENSE_FILE xxxxx@host
setenv LM_LICENSE_FILE xxxxx@host
二、流程
1. 环境设置
① src.f
a) 加入rtl:<rtl_path>.v
b) 加入dw rtl: <dw_path>.v
c) 如果有include file的,一是注意顺序,
二是可以在src.f申明include path:+incdir+<inc_dir_path>
三是还可以在ip.prj文件中申明include path:set_option incdir <inc_dir_path>
d) 如果有define的,为了不影响全局,可以在用完define的rtl后面写一个文件,将define undefine掉。
② libmap.f:spyglass吃lib,不是db
a) 加入standard_cell.lib: -sglib <lib_path>.lib
b) 加入ram、fifo等lib的memory_lib: -gateslib <mem_path>.lib
c) 加入macro(IO、PAD、USB、DDR PHY、PLL)等的macro_lib:-gateslib <macro_path>.lib
2. lint
spyglass -project ${top-name}.prj -batch -goal lint/lint_rtl
mk lint | tee lint.log
① 清Error和Warning,可能遇到non-oem的Error,解法如:Error 1.1
② 如果有报一些RTL文件找不到解法如:Fatal 2.1
③ 吃tech_lib.f阶段报Detailed Error Trace,有可能是tech_lib中有lib路径不对,但它说的很隐晦…,如:Error 1.3
④ 如果在makefile export的变量如:export project = path,想在ip.prj中使用:set project e n v ( p r o j e c t ) < / p > < p d a t a − p i d = " u Z I l f 4 L s " > ⑤ 在 r t l . f 中 , r t l 、 i n c l u d e 的 p a r a m e t e r 、 d e f i n e 等 文 件 及 D W , 直 接 申 明 p a t h 可 能 找 不 到 , 这 时 连 路 径 也 需 要 申 明 : + i n c d i r + env(project)</p><p data-pid="uZIlf4Ls">⑤ 在rtl.f中,rtl、include的parameter、define等文件及DW,直接申明path可能找不到,这时连路径也需要申明:+incdir+ env(project)</p><pdata−pid="uZIlf4Ls">⑤在rtl.f中,rtl、include的parameter、define等文件及DW,直接申明path可能找不到,这时连路径也需要申明:+incdir+path/ip/
⑥ 在analysis rtl的时候卡死:有可能是有文件中的include文件路径没有申明,没有申明的文件太多时,导致卡死。将src.f中所有rtl mask掉,逐步放开,就会报出哪些文件没有申明,然后逐步添加+incdir+$path
3. waive file
有waive rule的,设置default waive file,在.prj文件中
read_file -type waiver ${top-name}.awl
set_option default_waiver_file ${top-name}.awl
waive -msg “” -rule “” -comment “” #waive rule
waive -ip “ip name” -comment “” # waive ip
waive -ip “ip name” -rule “ALL” # waive ip所有内容
waive -du “ip name” #-ip: ip -du: module
waive -file “file path” -comment “” # waive 文件
waive -severity “Info warning” -comment “waive all lines related Severity: Info & Warning” # waive Warning和info
waive -weight_range 1 10等 # 将权重低的信息waive掉
4. 不需要检查的cell
有cell不需要检查的,可以在ip.prj中设置
set_parameter glitch_protect_cell “gp_and, gp_mux” # 不需要检查的毛刺信息
set_parameter synchronize_cells “cdc_pulse_sync” # 不需要检查的同步cell
set_parameter reset_synchronize_cells “pulse_sync,level_sync” # 不需要检查的同步复位cell
set_parameter synchronize_data_cells "sync1,sync2"等 #不需要检查的同步data cell
5. 如果是新设计的IP,可以先执行cdc_setup,让spyglass自动推断port上的约束:
执行过后在sg_results/ip/cdc/cdc_setup/spyglass_reports/clock-reset目录下就会有spygass自动分析的clock、reset、set_case_analysis等文件:autoclocks.sgdc、autoresets.sgdc、auto_case_analysis.sgdc。这些文件也不一定完全正确,但可用作.sgdc文件的方便参考。
如果有generated clock需要工具帮忙推断的,需要use_inferred_clocks设置yes,enable_generated_clocks设置yes。然后在cdc_setup_generated_clocks.sgdc文件中查看。
6. 执行cdc_setup_check,检查工程文件的设置是否正确、完备。
如果有未约束的primary port,工具将在sg_results/ip/cdc/cdc_setup_check/spyglass_reports/clock-reset/下生成两个文件,可参考加入到.sgdc文件中。
ip_input_abstract.sgdc:工具推断的未约束的port约束
ip_bbox_model.sgdc:工具推断的未约束的black box约束
可能会遇到Advanced_CDC license Error,解法如:Error 1.2
7. 执行clock_reset_integrity、cdc_verify、cdc_verify_struct检查
① Filter violations by using the cdc_false_path constraint.
cdc_false_path -from_type data -from “path”
② 一些报出问题但是是静态的寄存器可以设置quasi-static:
Check for mode or control-status registers that are static or quasi-static.
sgdc: quasi-static -name “xxx.reg”
③ set_case_analysis is properly defined so that multiple clocks do not
control the same flip-flop.
if you do not configure the MUX by applying set_case_analysis on its select pin, multiple clocks may drive the same flip-flop. As a result, SpyGlass may infer the path between these flip-flops as asynchronous crossings even if these paths are synchronous. This results in false unsynchronized violations, which results in noise and more time for CDC verification closure.
④给gate添加sync类型:enable_and_sync, enable_mux_sync, and
enable_clock_gate_sync
⑤ 在一个mux的sel端是由多条path组成的,可以用enable_delayed_qualifier选择具体到哪一条path。
这个参数后面加yes,指组合和时序path都可以选,即q1,q2,q3。加no,表示不选时序path,但是组合逻辑前可以有path,即q1,q2。加strict,必须纯组合逻辑path,即选q2。
⑥ 格雷码:Typically, with control buses crossing clock domains, designers implement gray code schemes to handle such issues. Using a gray-encoded implementation for control bus signals ensures that only one bit of the control signal changes during any one clock cycle.
⑦ 指定fifo: fifo -memory “uart_top.u13.u4”
⑧ 同步逻辑前允许组合逻辑:allow_combo_logic, Use this parameter to allow combinational logic between synchronizers. Transparent latches (enabled latch) are also considered as combinational elements.
⑨ cdc_reduce_pessimism:Set this parameter to an appropriate value to ignore clock domain crossings involving black box instances and clock domain crossings with destinations having unused, hanging, or blocked outputs. similar to cdc_false_path or quasi_static.
8. spyglass的每一步check都用gui界面debug很方便,工具中会呈现出现问题的代码以及synopsys solvnet中的check规则及修改建议。打开gui界面:
spyglass -project ${top-name}.prj &
9. 如何减少spyglass运行时间?降低LCM(精度降低,不太建议)
如果有两个clock:33ns,100ns,LCM=3300,如果把100ns的clock申明为99ns,那么LCM=99
三、错误
1、Error
1.1 Error:sg_shell running in oem mode, can not run a non-oem goal.
answer: license不对,或换个spyglass版本
1.2 Error:unavailability of Advanced_CDC license feature
answer:可在makefile中加入-LICENSEDEBUG再执行查看有没有advcdc_checker license,如果没有:
①请synopsys售后解决license问题。
②查看报的rule是否可以waive掉。
③是license feature问题,加了几个feature重新生成license就没问题了。
1.3 Error: Detailed Error Trace
2. Fatal
2.1 Fatal: 一些吃进去了的文件spyglass却报找不到
answer: spyglass貌似不识别内部除开module,endmodule的文件。像一些单独include的parameter、define、function文件,会报找不到。我的解决办法是,将所有rtl cat在一些,内部有include这些参数文件的,用脚本展开在rtl里面。
四、一些知识点
- lib中7T、9T和12T(Track)区别?
一般site width就是metal 2 pitch,比如SMIC18 的 0.56 x 5.04 , 0.56 就是metal 2 pitch,
因为std cell pin基本上都是由metal 2连接出来的, 高度一般都是 site width的整数倍,比如7, 8, 9 ,10 ,12 倍,也就叫做7/8/9/10/12 track单元,
比如0.56 x 5.04的就是9 track,0.56 x 3.92的就是7 track,
0.2 x 2.4(SMIC 65)是12 track,0.2 x 1.8(TSMC65)是9 track,
区别主要是:
1)带不带tap(n/p well pickup),但是也不是绝对的,比如SMIC18 sc-x 9 track带tap, sc-m 7track不带tap,不带tap的要用tapcell来偏置电位,但是比如 TSMC40 nm的12 track TCBNBWP12T,也不带tap,TSMC65 tcbn65bwp 9 track带tap。
2)一般来说9 track是属于标准size,7track属于小size,也就是低功耗一些,速度慢些。