Vincent:Lint与CDC解决方案
Vincent平台主要用于解决复杂FPGA设计中的跨时钟域问题。先进制程的发展和设计复杂度的增加,使得现在的芯片SOC/ASIC/FPGA可以在数百万甚至数千万门的非同步时钟设计运行在G级的速度。SoC 系统有多个设计接口,其中某些接口使用的标准是运行在不同时钟频率下面。.有些流行的串行接口内在的本质就是不同于整个SOC芯片的非同步设计。还有一个设计趋势是SOC中主要子模块运行在独立的时钟频率上以方便去消除时钟偏差(Clock Skew)而带来的设计问题。
现今的SOCs利用先进的技术,比如动态电压和时钟变频技术(DVFS技术)来减少设计功耗。DVFS技术的运用,不仅影响SOC中的时钟域(Clock domain)的数目,而且使得时钟域设计关联到整个芯片的动态运行的稳定性。
如果潜在的CDC问题没有在设计早期发现和验证,设计可能会出现功能性的错误。特别是在设计阶段的后期出现的CDC问题,会造成设计功能的停止运行。在设计后期来修复CDC的问题将是非常耗费时间和精力的事情。我们知道很多大型的系统厂商由于芯片CDC的问题而造成产品的故障。
传统的设计方法学历来侧重于模块化的实现和验证。通常这些模块的划分依据的就是时钟域的划分。因此那些跨时钟域(CDC)的信号通常会带来独特的和具有挑战性的验证方式。传统的功能性仿真对于验证这些跨时钟域情况的验证是非常不充分的。虽然静态时序分析(STA)是时序收敛不可分割的一部分,可是却很少关注于正确的时钟域的实现和验证,而且标准的STA通常用于单个时钟域的时序收敛,对于那些跨时钟域的情况只能留给设计者来解决。因此,传统的方式提供的是一个手工的,费时的并且容易出现错误的验证方式。
Vincent平台主要用于解决复杂设计中的跨时钟域问题。先进制程的发展和设计复杂度的增加,使得现在的芯片SOC/ASIC/FPGA可以在数百万甚至数千万门的非同步时钟设计运行在G级的速度。SoC 系统有多个设计接口,其中某些接口使用的标准是运行在不同时钟频率下面。.有些流行的串行接口内在的本质就是不同于整个SOC芯片的非同步设计。还有一个设计趋势是SOC中主要子模块运行在独立的时钟频率上以方便去消除时钟偏差(Clock Skew)而带来的设计问题。
现今的SOCs利用先进的技术,比如动态电压和时钟变频技术(DVFS技术)来减少设计功耗。DVFS技术的运用,不仅影响SOC中的时钟域(Clock domain)的数目,而且使得时钟域设计关联到整个芯片的动态运行的稳定性。
如果潜在的CDC问题没有在设计早期发现和验证,设计可能会出现功能性的错误。特别是在设计阶段的后期出现的CDC问题,会造成设计功能的停止运行。在设计后期来修复CDC的问题将是非常耗费时间和精力的事情。我们知道很多大型的系统厂商由于芯片CDC的问题而造成产品的故障。
传统的设计方法学历来侧重于模块化的实现和验证。通常这些模块的划分依据的就是时钟域的划分。因此那些跨时钟域(CDC)的信号通常会带来独特的和具有挑战性的验证方式。传统的功能性仿真对于验证这些跨时钟域情况的验证是非常不充分的。虽然静态时序分析(STA)是时序收敛不可分割的一部分,可是却很少关注于正确的时钟域的实现和验证,而且标准的STA通常用于单个时钟域的时序收敛,对于那些跨时钟域的情况只能留给设计者来解决。因此,传统的方式提供的是一个手工的,费时的并且容易出现错误的验证方式。
Vincent 平台的构成
vLinter模块:
vLinter是一个FPGA设计的代码检查模块,它可以对verilog,vhdl,system-verilog进行检查,汇报一些可能的设计结构问题。客户可以定义自己需要检查的代码规则。vLinter是一个通用的HDL语言的设计规则检查工具。在FPGA设计领域,团队开发与设计复用不可避免,IP设计工程师,整合设计工程师或验证工程师能够容易读懂相互的代码非常重要。设计流程的复杂与设计工具的多样化也要求代码风格能够满足一些约束条件,以避免在后续步骤出现意想不到的问题。因此,符合标准的HDL代码成为FPGA项目的“通用语言”。
vLinter读入硬件描述源代码,根据用户定义的设置分析代码,输出警告和错误报告。通过这个检查过程,FPGA设计工程师可以:
- 编写语法与语义正确的硬件描述
- 缩短在其它EDA工具上花费的时间,比如模拟,综合,DFT等
- 在设计早期发现可能存在的错误,减少设计过程的反复
- 产生可读性强,易于维护的代码,方便协同工作
- 提高代码的可重用价值与重用的便利性
vLinter提供完善的设计规则检查支持
vLinter提供丰富的设计规则库供FPGA设计团队选择:
- 支持Verilog 最新标准的语义语法规则检查
- 支持VHDL 最新标准的语义语法规则检查
- 支持System Verilog规则检查
- 支持规则违反提示连接到对应源代码
vLinter支持STARC,Do254,DesignWare,RMM等规则要求,且提供Do254要求的自身流程是否符合要求的论证库。在进行设计源码编译的时候进行代码规则的检查,vLinter的运行不需仿真器,综合器或其它EDA工具同时运行。


vChecker模块: vChecker模块式Vincent的主要模块,它提供对整个FPGA设计的代码进行CDC的检查,可支持5千万门以上的设计、高频设计(时钟频率达到1G及以上)和支持最新的设计工艺器件。它主要提供如下功能:
- 提供寄存器级(RTL)和门级(Gate)的错误分析 (综合前和综合后)
- 支持 VHDL, Verilog and SystemVerilog (或者混合语言)
- 指导设计人员完成整个分析流程
- 快速区分跨时钟情况
- 将正确的和非正确的同步电路进行分类
- 正确鉴别常用的同步电路
- 鉴别和验证第三方厂商(Altera/Synopsys/Xilinx...)提供的同步电路
- 鉴别由vGenerator产生的同步电路或者其他第三方工具的同步电路结构
- 鉴别和验证非同步的reset
- 对设计可靠性进行评分
- 对于已鉴定的错误的同步电路设计,提供正确的建议电路,并且可以连接vGenerator工具产生
- 产生约束条件给综合和布局布线工具
- 支持不同的操作系统
- 图形化的界面进行同步电路设计的浏览
- 可直接连接到RTL代码

vChecker界面简洁,包含三个区域,项目区域,结果区域和源代码/电路图显示区域。vChekcerk可以直接读入Xillinx,Atlera等厂商的工程文件,将设计文件一次性加载进来,免去像其他工具那样需要重新建立文件清单后者脚本进行加载,大大简化使用难度。vChecker会自动分析设计中的时钟树并且构建相关的时钟域,并且根据用户的设置,比如要求的平均无故障时间和时钟频率等等的约束条件,来计算出设计中存在的同步问题,并且以不同颜色来显示可信赖的同步电路,不可靠的同步电路和没有添加同步电路的跨时钟域情况。并且会提供一个全局的平均无故障时间进行参考

用户可以展开每一条的CDC 的data path来查看这条跨时钟域路径的代码或者电路图,只需要展开某一条路径进行双击,就可以叫出相关的CDC 路径的电路图

vChecker可以自动识别和验证一些供应商提供的IP,通常这些IP是看不到他们内部代码的,类似一个黑盒子。vChecker自动验证用户的电路和这些IP之间是不是存在CDC的问题。另外,有些供应商提供的IP里面就是多时钟域的设计,并且包含正确的同步电路,如果这些无法鉴别的话,将影响到整个设计平均故障的计算。vChecker可以自动识别altera,xillinx等FPGA厂商提供的设计IP。 vChecker的运行速度很快,借由vsync独有的静态计算引擎可以在5分钟内分析几百万门的设计。vChecker还有层次化的分析功能,针对于更大规模的设计,可以通过层次化的设计模块分析来加速分析的过程。 vGenerator模块:
vGenerator模块是Vincent平台最具特色的模块,它可以为开发者提供丰富的同步电路模型,供用户选择,可以为每一个设计接口和每一个跨时钟域的设计提供可靠的解决方案。vGenerator模块根据用户的同步需求,自动提供相关的同步电路解决方案给用户,并且告知不同同步电路的平均无故障时间和所需资源。vGenerator的主要功能包括:
- 通过设计定义引导用户进行时钟同步设计
- 支持不同的接口协议
- 产生多种可信赖的同步解决方案并且建议其中较好的方式
- 为选择的同步方案产生仿真模型(simulation mode)
- 产生综合约束条件
- 针对不同的同步方案提供丰富的IP数据库:
point-to-point, vNoC, Reset synchronization, Clock gating and switching
- 支持不同的操作系统
- 支持多种FPGA设计流程:
- Xilinx (ISE and Synplify)
- Altera (Quartus II and Synplify)
- Lattice (ispLEVER)
- Actel (Libero)
- 支持多种 ASIC 设计流程:
- Synopsys (DC)
- Cadence
- 可以快速转化到指定的ASIC工艺

传统的方式需要设计人员自己去编写相关同步电路代码,这是一个手工的过程,容易出现代码错误和引入新的问题。vGenerator模块只需要设计人员输入相关的同步电路的规格,就可以自动生成所需的同步电路,并可以自动生成相关的verilog,vhdl代码,RTL/Gate级的仿真模型,synthesis(综合)和布局布线(APR)约束条件和断言(assertion)文件。

vGenerator模块在根据用户的同步电路的规格,可以提供几种同步电路的供客户选择,并且指出每种同步方案的平均无故障时间,所需要的资源,波形图,所选同步电路的示例图等等相关的信息

vGenerator模块是和其他传统的CDC工具最大的不同,传统方式只是简单的检查CDC同步电路是否存在以及简单的CDC的正确性,不会提供给用户解决问题的途径。vGenerator完全解决了这个问题,依靠自身提供的,历经企业和军工验证过的同步电路模型库,帮助客户解决手工产生同步电路的问题,并且保证所产生的同步电路的质量可靠。 vLib模块:vLib模块用于整合整个设计进行相关的功能仿真,包含CDC同步电路的功能仿真。vLib可以实现:
- 设计系统级别亚稳定性处理验证
- 与第三方验证工具整合 (Modelsim, Active-HDL, NCSIM, VCS, etc.)
- 针对于CDC电路的亚稳态进行功能模拟
- False/Static CDC 设计路劲的验证
- 数量众多的操作模式
- 支持RTL和门级的仿真
- 持后台运行模式
- 版本发型的签发
- 自动重建IP的新平台版本
Vincnet平台的优势
vSync的Vincent平台是唯一针对于多时钟域设计问题的完整平台,vsync的解决方案可以很好的连接器设计和验证的领域,可以指导设计人员进行CDC问题的设计和验证,从而获得一个验证过的和可信赖的设计。
vSync Vincent平台优势:
- 为不同的CDC问题建议正确的解决方案
- 提供glue逻辑的整合方式来整合多时钟域设计
- 从vSync 可靠性的数据库获得验证和整合的解决方案
- 提供同步电路解决方案的综合约束和仿真模型,便于验证与综合的实现
- 覆盖系统级同步电路的内在影响
- 自动验证不同厂商的IP (e.g. Xilinx/Altera/Synopsys FIFO)
- 统一的,易于使用的多用户工作方式
- 支持大多数设计语言: VHDL, Verilog 和 SV
- 包含多种设计规则检查的Lint功能。
支持的操作系统和与其他工具的接口
- Vincent平台库文件是不依赖于操作系统的
- Vincent 仿真库支持查验性语言的验证方式( Assertion-based Verification)
- Vincent 库文件支持综合和仿真的任一设置条件
- vChecker/vGenerator支持不同的 Windows 版本, 自动区分 32- 和 64-bit机器
- vChecker/vGenerator 支持 Linux RH 5.x
- vChecker/vGenerator 通过SDC约束条件与 Xilinx/Altera/Synopsys 工具交互,产生厂商相关的设计文件。
- vChecker/vGenerator 通过额外的厂商相关的格式(TCL, UCF, etc.)与 Xilinx/Altera/Synopsys 工具交互,实现额外的约束文件,报告文件和脚本文件。
Vincent平台的使用流程
不像其他的典型的CDC验证工具,vSync的Vincent平台致力于提供正确的CDC电路解决方案,包含CDC同步电路的创建,CDC电路的检查和设计的设计规则检查,并且提供相关的CDC电路的仿真模型,设计约束文件,已经良好的设计推荐技术,从而保证设计中的CDC电路的正确性,而不是仅仅提供一个点工具来验证CDC的问题所在。
下面是vSync的Vincent平台的标准设计流程:
- 在RTL阶段,设计人员将相关的设计分成多个时钟域,包含多个单个时钟的模块,各个不同时钟域的CDC设计要求,经过CDC验证的设计IP和未经过CDC验证的设计IP。
- 根据设计人员的上述设计规划和CDC的要求,vLint将执行设计代码的规则检查,包含可综合,可仿真,ERC等规则的检查,可以兼容xilinx,altera和synopsys的设计规则。当规则检查完全通过之后,vGenerator将提供相关的CDC需求的设计规范,指导设计人员来通过vLib提供的CDC同步电路库来选用相关的同步电路或者自动寻找vLib中符合CDC设计需求的接口电路和同步电路。当设计人员确定相关的CDC设计电路后,vGenerator将产生相关设计电路的RTL代码,仿真模型和设计约束文件。vGenerator可以在RTL和门级使用。
- 经过vGenerator处理过的完整设计,或者是一个没有经过vGenerator处理过的设计,都可以直接导入到vChecker模块进行同步电路的检查。vChecker是静态的方式进行CDC的检查,它首先会鉴别和分类不同的设计时钟域,然后进行不同时钟域之间的同步机制的检查,报告是否有存在相关的CDC同步电路,检查同步电路的正确性,给同步电路的稳定性打分。如果设计中不存在同步电路或者存在有问题的同步电路,vChecker会建议使用vGenerator来修改掉存在的问题。
- 通过vGenerator产生的同步电路,可以和整个设计整合起来做一个动态的仿真。借由vLib提供的库,来动态模拟整个完整设计的同步设计的效果,这个模拟的过程完全是按照芯片实际运行的效果来处理的。
- 动态仿真结束后,功能不存在问题的话,那么就可以进行综合(synthesis)的过程,Vincent平台自带一个synthesis引擎,它会自动创建相关的约束文件。
- 最后一步是通过vTest套件进行衰减测试,以确保不会引入新的设计的问题。

总结
在典型ASIC/SoC/FPGA的CDC设计与验证环境中,传统解决方案具有明显的优缺点,无论是静态仿真、动态仿真的使用,特别是没有完整方案来解决从CDC电路的创建,验证和衰减测试。vSync的Vincent平台是一个完整的CDC设计和验证的解决方案,它能使既有的设计的CDC问题验证和修改功能自动化,并且增添后续文件以辅助仿真,综合的实现,大幅提高ASIC/SoC/FPGA的CDC问题的验证效率和功能的正确性。