参考文档来源spyglass工具文档(2015.12)。spydocviewer
clock-domain crossing(CDC).
CDC issues
亚稳态
跨时钟域的异步设计,存在setup和hold-time问题。会导致亚稳态产生。原文档有图有例子。
移除亚稳态,可以用以下方法:
1. 控制信号的同步
利用multi-flop同步。多级触发器,会把亚稳态值转变为干净的0或者1,之后才会传到下游逻辑。
2. 数据信号的同步
数据信号的同步,一般使用enable技术。跨时钟域的数据稳定之后,利用使能使得目的触发器捕获稳定的数据(所以不会产生建立保持时间的时序违反)。fifo,就是依赖格雷码指针的full/empty控制信号作为使能,解决数据的亚稳态问题。
数据同步的关键概念,就是如何保证数据不会在变化的情况下被捕获到。一般的数据跨时钟域,有图。qualifier(英文翻译:有资格的。在这里,一般就是多级触发器同步的控制信号,有责任保证跨时钟域的数据已经稳定可以被目的触发器正常捕获。)
spyglass CDC方法学流程
基于goal目标的流程。
1. cdc_setup
2. cdc_setup_check
建立必需的
- constraits(约束,时钟复位之类的。约束文件扩展名.sgdc)
- parameters(命令参数及options)
sdc2sgdc
sdc文件,可以转换为sgdc文件
黑盒子的clock,用assume_path约束
该goal会产生clock/reset的约束文件
默认可以不加任何约束,利用cdc_setup这个goal可以产生很多约束文件,比如
autoclocks.sgdc
autoresets.sgdc
generated_clocks.sgdc
cdc_setup_generated_clocks.sgdc
waive/set_case_analysis等。
但是需要检查修改确认后,然后放入spyglass执行脚本里。
利用cdc_top_down
也可以从soc顶层生成block-level的约束
clock_reset_integrity
clock/reset的完整性检查cdc_verify
block-level CDC验证cdc_verify_struct
SOC-level CDC验证- Signing-Off
查看报告
错误报告,太多。怎么看?
优先解决
Ac_Sync_group属于结构性的错误
Ac_unsync01 rule
Ac_unsync02 rule
debug方法,可以参考另外一个博客笔记。
Convergence
Glitches
DataHold
Data Correlation and Race Conditions
Reset同步复位异步释放
fifo的识别和验证
spyglass CDC方法学推荐原则
RTL阶段,执行所有检查
fifo或复杂的同步机制,在综合后或布局布线后的netlist是不会检测到的。
先IP验证,后SOC整体系统验证
SOC的特点,是大量IP集成,关注点一般都集中在block boundaries,即子模块接口上的情况。
推荐使用CDC hierarchical Verification Flow。
基础工作
- clocks和sets定义,设计中的端口、内部clocks和reset,要定义完整正确;
- 黑盒子设置
- 设置boundary assumptions。即I/O引脚的设置
- 可以指定设计中定义的合理同步practices。减少不必要的检查工作。
- 图形界面的setup goal是有setup status可以查看质量情况的。
技巧
如何屏蔽某些报告信息
- 屏蔽单个路径的报告
使用cdc_false_path - 屏蔽某个rule的报告
使用waive - 屏蔽某个模块的报告
使用黑盒子
帮助命令
spydocviewer
是分类pdf,可以查询并打开相关pdf文档。
sg_shell下,执行下述命令,看看就知道了。
help
help help
help -rules
rule检查顺序
按照上述流程顺序,依次排查warning和error。
基于goal目标的流程。
1. cdc_setup
2. cdc_setup_check
3. clock_reset_integrity
4. cdc_verify
5. cdc_verify_struct