备注:写下面笔记也是挂一漏万,只能cover 几个常用的rule。想了解每一个rule的详细情况,除了研读这个PPT,最好还是查官方文档,当然会耗费很多时间,但对项目负责做SpyGlass Lint/CDC检查的人,还是必不可少的。我现在还是票友的角色,只是为了处理所负责模块的violation。
本文为博主原创文章,转载请注明出处。http://blog.csdn.net/wonder_coole/article/details/79566097
本博客所有文章均同步发表于www.mx1980.cn/blog
BATCH : $spyglass -project xxx.prj -goals cdc/cdc_setup -batch
GUI : $spyglass -project xxx.prj -goals cdc/cdc_setup
没有SGDC Constraint 文件是不能进行CDC分析的,不合理的设置constaint会造成结果中许多无用的的violation,让人耗费更多debug时间。 可以用‘sdc2sgdc’工具将sdc constraint转换成spyglass的constraint file(SGDC)。SGDC定义了design的clock和reset的信息,对input设置合理的constraint。
1. 用set_case_analysis来定义各种analysis condition,语法:
set_case_analysis -name {
2. 用quasi_static 来限定一些静态的input,可以skip掉许多不必要的路径检查。
3. 设置design cell constraint: sync_cell, reset_synchronizer。
1. 推荐将clock gen设置成blackbox
2. 如果IP中含有复杂的clock gen逻辑,最好直接将它设成blackbox
3. clock和reset应该在clock gen的输出端设置
4. 有些不同的clock实际上是相关的,可以将它们设置成同一clock domain
5. CTS/CRC(clock tree synthesis/clock root cells) 可以设成blackbox。
对blackbox, 工具不深入其内部进行rtl analysis, 而只关心 input/ouput特性。
SpyGlass中只区分两个类型的CDC, control和data crossing; Qualifier是指multi-flop,sync_cell等synchronizer。SpyGlass可以识别所有CDC中的qualifiers。
Control crossing 可以是:1. RTL multi-flops(auto detected) 2. Liberty cells(require sync_cell constraint) 3. single flops(require sync_cell constraint).
Data crossing 可以识别
1. data CDC by control crossing:
2. MUX sync data crossing . 设置参数 enable_mux_sync,可以diable。
3. AND gate sync的data crossing 模式。 设置参数 enable_and_sync. AND门包括 AND/OR/NAND/NOR.
不允许NOR门。
4. 一些常见的unsync的情况:
5. 处理violation: 对应每个flop,SpyGlass都会报出结果,结果有三类:synced, unsynced及no analysis(stuch clock or data). 对应每个unsynced crossing,SpyGlass都会给出REASON. 要trace 所以的source来确定真正的原因。
- 不要waive Ac_unsync01/02 violation. 警告:不要靠waive来消灭问题,这样会带来潜在的risk!!!
- 要靠优化constraint来消灭unsync issue。1) 靠set_case_analysis来选择clock的正确工作模式。2)靠设置quasi-static来确定不会toggle的signal, 这样可以解决很多组合逻辑的问题。3) reset 4)qualifier, 用在multi-flop不存在时,如primary input(abstract_port -sync) 或blackbox。5)sync_cell, 当SpyGlass不能识别sync cell是用。 6)FIFO constraint. 7) cdc_false_path, 如果sync是在外部或靠SW控制的时候, 例如信号改变前off clock。
- 如果violation太多,应该回头看看setup对错。
- 注意intentionally unsynced crossing. 如配置寄存器,interrupt信号,GPIO, 及有SW控制的crossing等。
6. Reset synchronization: 常用的reset synchronizer如下图
如果design中缺少reset synchronizer, 工具会报告reset 源到flop端path缺少reset 同步器的问题。出来design要有reset同步器,在SGDC中要合理添加reset constraint。如果使用了 synchronizer cell, 也要设置reset_synchronize_cells参数指明.
7. Coherency check: 同步后的两个信号在destination clock domain 组合使用会造成严重的function failure!!(本人接手的legacy design 碰到过这样问题), 如下面情况:
怎么办呢? 1)source signals 是不是gray coding? 2) source 信号是不是从来不会同时变化? 3)如果gate function 是OR, source信号同时变化是不是不要紧? 4) 使用waiver 或者添加 cdc_filter_coherency constraint.