跨时钟域的代码检查(spyglass)
- lint (在RTL阶段对代码的语法,可综合性,结构进行深入分析,并且对代码的错误提供完整、可调试的修改方案)
- SDC(帮助设计人员在设计的整个流程中生成,验证和管理他们的约束文件)
- CDC(提供了多时钟域的解决方案,能自动识别各种同步手段(包括handshake,FIFO),能采用Formal引擎验证同步方法在功能上的正确性
- DFT(提供了能够预测ATPG的测试覆盖率分析的能力,基于这个选项,用户可以很容易地预计所作设计的可测试性并利用工具提供的指导来提高设计的可测试性)
- Power(能够让用户能够快速分析出设计中的功耗效率问题,从而在还没有达到后端工序的情况下快速地进行功耗的优化,用户甚至可以在不进行逻辑综合和物理实现的情况下对功耗进行量化的计算)
spyglass优势:
- spyglass的检查验证处于设计的前端RTL阶段,相比较于后端的时序分析和网表验证,spyglass能更早发现问题并修正
- 能够让用户快速分析出设计中的功耗效率问题,从而在还没有达到后端工序的情况下快速地进行功耗的优化,甚至可以在不进行逻辑综合和物理实现的情况下对功耗进行量化的计算
spyglass CDC的特点
- CDC检查可以发现仿真、FPGA测试中很难发现的潜在的跨时域处理问题
- 可以检查出复位、时钟是否使用正确,对跨时钟设计进行检查
spyglass CDC所需的文件
- filelist.f:用户RTL的文件列表
- spyglass.sgdc:spyglass用的sgdc约束文件
- spyglass.tcl:如果是脚本方式启动需要准备tcl脚本文件,并在脚本中对CDC的Goal做声明
spyglass ->add file(添加filelist.f和spyglass.sgdc文件)->read design ->可以在violation里面对照报告修改
CDC rules check
- clock_info03a:(report a violation)
1、如果一个clock信号被一个组合逻辑驱动并定义在SGDC文件中
(由于in信号为0,会将clk path去除)
2、clk信号没有在SGDC文件中定义
3、时钟穿过black box
- clock_info05:reports MUX descriptions where two or more clock signals converge(需要给select pin加上set_case_analysis的约束)
- reset_info09a:reports unconstrained asynchronous reset net
(1、没有对reset信号进行约束 2、加了约束,但是没有对经过的组合逻辑进行约束即添加set_case_analysis的约束)
- Ac_unsync01:跨时钟域的信号没有进行跨时钟域的处理
1、如果包含了一个black box,需要保证black box bin都使用(abstract_port constraint);如果穿过black box的信号需要使用(assume_path constraint)
2、如果源寄存器是一个静态信号,可能不需要进行同步处理(use the quasi_static 或者cdc_false_path constraint)
实验步骤:
1、拷贝 ~/data/chapter8_spyglass_CDC/spyglass_cdc 到~/work 目录下
- cp -r ~/data/chapter8_spyglass_CDC/spyglass_cdc ~/work
- cd ~/work/chapter8_spyglass_CDC/spyglass_cdc
2、进入spyglass_cdc目录中,查看filelist.f和cdc.tcl文件。