Synopsys SpyGlass CDC 学习 (二)

学习官方培训材料:SpyGlass_CDC_Training_Slides

备注:写下面笔记也是挂一漏万,只能cover 几个常用的rule。想了解每一个rule的详细情况,除了研读这个PPT,最好还是查官方文档,当然会耗费很多时间,但对项目负责做SpyGlass Lint/CDC检查的人,还是必不可少的。我现在还是票友的角色,只是为了处理所负责模块的violation。

启动

SpyGlass工程任务可以通过工程文件来启动:

BATCH : $spyglass -project xxx.prj -goals cdc/cdc_setup -batch

GUI : $spyglass -project xxx.prj -goals cdc/cdc_setup

Project File 包含的内容:

  • 指定source文件/list(verilog/VHDL/netlist)
  • 指定constraints(SDC/SGDC file): 设置clocks,reset,set_case_analysis等.
  • 指定运行的options( set_option/set_goal_option): Top level module, System verilog, lib映射等
  • 指定需要check的Rule( set_parameter) : 如设置参数Crossing 时组合逻辑允不允许
  • 指定Goal(set_goal_option)

SGDC

没有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 {<name>}  -value <value>

2. 用quasi_static 来限定一些静态的input,可以skip掉许多不必要的路径检查。

3. 设置design cell constraint:  sync_cell, reset_synchronizer。

对Clock Gen的处理

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特性。

CDC Rule:

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.

 

阅读:745

发表评论

电子邮件地址不会被公开。 必填项已用*标注