本文链接:https://blog.csdn.net/focus357/article/details/113882480
SpyGlass工具介绍_focus357的博客-程序员宅基地
技术标签: synopsys工具
数字电路设计的流程里面有两个”不起眼“的步骤,LINT和CDC。 其中LINT尤其没有存在感。LINT和CDC其实是两个不同的东西,但是从功能上他们有时候会指向相同的问题,也就是说有重叠的部分,所以经常会放在一起做。在candence的工具里面,LINT/CDC是放在LEC这个大工具下面,而在synopsis的工具里面,是放在spyglass下面。
LINT
英文里LINT是线头,起这个名字的人大概是把芯片设计类比成衣服的制造——我们知道,线头的多少通常是衣服质量好坏的直观反映,所以做衣服有个一步骤就是剪线头。数字电路设计也类似。
现在数字电路的规模都不小,大部分情况已经超过一般人的记忆能力范围。电路的功能通常是通过仿真来保证,但是考虑到电路的规模,仿真是远远不够的。类似于软件工程,数字电路设计人员也发展出了一套methodology(现在通常是EAD公司在推动)——也就是仿真+形式验证+覆盖率+LING+CDC的组合。其中仿真+覆盖率用来解决大部分的功能验证,剩下的那些作为补充。
因为是”补充“,即使不做LINT check,有时候运气好也不一定会出问题。何况有些情况下LINT只是告诉你哪边的代码可能有”潜在的“问题,实际情况不一定真的会有问题。比如说下面的例子:
[公式]
LINT会发出一个warning,说右边的结果是9bit,而左边只有8bit,可能有一个bit被丢失了。实际情况是,如果设计里面能够保证B永远不会溢出,那么设计本身没有任何问题。
下面这个例子抗上去就严重一些:
[公式]
[公式]
LINT会发出一个warning说右边是单个bit的逻辑操作&&,但是被操作的变量是多个bit。这个逻辑对于仿真和综合工具来讲大部分情况下都会解释称下面的逻辑:
[公式]
如果这是你的本意,也没问题。但是如果你其实是想用&而不是&&,那么就不对了。理论上如果本意是用&,仿真可以发现问题。但是如果仿真的覆盖率不够,LINT就是一个很好的补充了。进一步,如果你在仿真之前就用LINT发现这个问题,实际上会节约debug的时间。所以,在什么阶段跑LINT,不同的人可能有不同的习惯,但是在相对的早期跑LINT其实是有好处的。
LINT检查的麻烦之处在于,像上面的warning会有几百几千条。最终会导致能指向问题的warning被淹没。因此,对于之下而上的设计来讲,在模块级别做LINT然后传给上一级可能会是一个好办法。
CDC
CDC的全称是CROSS-CLOCK-DOMAIN,也就是跨时钟域的检查。相比于LINT,对于有多个时钟域的设计,CDC的必要性更紧迫一些,因为CDC的问题几乎无法通过仿真发现。有CDC问题的芯片即使回来之后也不一定能发现问题,即使发现以后也不容易debug,让人头疼。
由于CDC问题的严重性,CDC检查就是必不可少的步骤了。CDC包含的检查内容会比LINT更多,所以也会出现类似的”淹没“问题。因此也需要按照自下而上的步骤去做。
CDC的问题无外乎两种:复位(reset)和信号(signal)。基本的要求就是信号必须经过”同步“,安全了才能使用。reset比较简单,就是reset的信号先用自己的clock同步一下。对于信号的同步就是一个比较大的话题,主要方法概述如下:
单个bit同步。这里又可以分为“单脉冲”和“长信号”来区别处理。
多个bit同步。可以通过我称之为”wait-and-latch“的方法。可以是通过握手方式,也可以简单地通过时间等待法方法。
大量连续数据的同步。这个通常需要通过fifo来实现。
实际的CDC检查还包含很多繁琐的内容,其中的重头戏就是convergence的检查——如果多个信号(或复位)通过一个或时钟域在另外一个时钟域汇合,那么即使每个信号都经过同步,也会有潜在的问题,比如glitch。
总结来讲,LINT,CDC是一项既重要又繁琐的工作,在做项目的时候通常无法通过一次性的检查来解决问题。需要在做IP的时候就尽可能地做干净,防止真正问题被“淹没”。
Spyglass工具有五大模块: lint, CDC(多时钟域检查), LP(低功耗),Constraint(约束),DFT(可测试性)。
一,在RTL层面上预估芯片性能,从而引导设计人员开发出更加优化的RTL代码
SpyGlass平台针对VERILOG和VHDL用先进的静态和动态分析来检查和诊断设计中可能存在的潜在问题,然后用其分析和追踪引擎来追踪问题的根源,最后给出一个解决问题的方法和建议。SpyGlass能够指出SOC问题中的非常复杂的问题,例如跨时钟域问题、同步问题以及SOC设计中的集成问题。并且,SpyGlass还可以检查电子设计规则(ERC)来确保设计符合工业设计标准或者用户自己定义的标准。
SpyGlass还提供了四个功能强大的选项:
(一)SpyGlass CDC提供了业界最完整的多时钟域解决方案,能自动识别各种同步手段(包括HandShake,FIFO),能采用Formal引擎验证同步方法在功能上的正确性。
(二)SpyGlass Constraints帮助设计人员在设计的整个流程中生成,验证和管理他们的约束文件。
(三)SpyGlass DFT提供了能够预测ATPG的测试覆盖率分析的能力,基于这个选项,用户可以很容易地预计所作设计的可测试性并且利用工具提供的指导来提高设计的可测试性。
(四)SpyGlass LowPower能够让用户能够快速分析出设计中的功耗效率问题,从而在还没有达到后端工序的情况下快速地进行功耗的优化,在power estimate工具中,用户甚至可以在不进行逻辑综合和物理实现的情况下对功耗进行量化的计算。
二,采用更早期的RTL检查的方式,提高设计的性能
SpyGlass的性能提供了很多动态的好处:设计人员可以在设计早期就得到一个“golden”的RTL设计包,这样这个设计可以非常平滑地过渡到验证,逻辑综合以及后面的门级具体实现。SpyGlass能够将后端才能进行的平衡工作(例如时序功耗的分析)变到前端来进行,这样不仅能够大大地减少设计的往复,并且能够做到最大程度的花费的有效性,SpyGlass能够大大缩短设计周期,从几周到几个月不等,并且能够大大降低设计的费用。相比较而言,传统的设计是在后续的工序中发现和解决问题,这些后来的改动非常的耗时,并且效率也很低,很多时候改动并不能非常准确地反映到设计上,大多数情况下,这些改动并不能够返回到RTL源代码,这些情况下,会使设计的验证环境复杂化并且可重用性降低,这些其实都是没有必要的。
三,SpyGlass是针对复杂的,优化面积的设计理想的解决方案,并且能够跟现有的设计流程无缝地结合
由于现在设计越来越复杂,并且设计的尺寸越来越小,SpyGlass所带来的优势就越来越明显。SpyGlass所提供的可预计的分析和精确定位的方案为这些复杂和专项要求高的设计提供了早期分析的可能性。特别是针对小制程的设计,因为针对这种复杂的设计,设计中所允许的偏差越来越小。除此以外,SpyGlass 平台具有非常快速的运行时间,这样用户就可以能够对设计进行快速有效的分析,即使是针对现在最复杂的千万门设计,SpyGlass也能够在很短的时间内进行分析和修正,即使是针对比较复杂的比如多时钟域问题,多电压分析等等也可以快速指出问题并且提供修改建议。SpyGlass对现在市面上的所有的标准的工具和流程都能够很好地进行整合,事实上,SpyGlass能够在现有的工具的基础上大大提高这些工具的产出率以及这些工具输出结果的质量。
四,SpyGlass能够发现设计中很难发现的问题,对设计进行全方位的测试
SpyGlass能够快速发现和定位设计中的严重问题以及有待优化的问题,这些问题通常情况下都是要到后续流程、例如仿真、逻辑综合甚至布局布线中才能够被发现出来。这些问题包括组合逻辑回环、不经济的资源利用以及逻辑设计的不合理性等等,另外,SpyGlass还会针对设计中的可重用性以及很多类似STARC和OPENMORE的规则进行检查,用户也可以自定义自己的规则,这样对整个设计过程的统一规划以及管理都具有非常重要的意义
本文来自博客园,作者:{e_shannon},转载请注明原文链接:https://www.cnblogs.com/e-shannon/p/15139683.html