柯尼卡美能达芯片设计 C++高级综合(HLS)流程全视(附:白皮书下载)
在芯片设计的早期阶段,大约在1970年代,工程师做芯片设计时,会先编写逻辑方程式,然后使用卡诺图来手动减少逻辑。接下来,在20世纪80年代早期开始了第一代逻辑综合,在门级网表中读取,执行逻辑简化,然后输出更小的门级网表。然后,逻辑综合增加了将门级网表从一个代工厂移动到另一个代工厂的能力。在1980年代后期,逻辑综合允许RTL设计人员编写Verilog代码,然后生成门级网表。从那时起,我们的行业一直在寻找比RTL编码更高效的设计方法,因为RTL条目之上的更高级别设计条目可以更快地仿真。
高级综合(HLS)现在是公认的设计范例,柯尼卡美能达的工程师多年来一直使用C++作为设计输入语言,同时设计多功能外围设备,专业数字打印机,医疗保健用超声设备和其他产品。
所使用的原始C++设计流程如下所示,使用Mentor的Catapult工具,其仿真时间比RTL快100倍:
即使有这种C++流程,也有一些额外的步骤和问题,例如:
手动检查算法代码需要花费太多时间。
使用GCOV进行代码覆盖不会产生对可综合C ++代码的深入了解,也无法表达,切换和功能覆盖分析。
Catapult系列工具不仅仅是C ++综合,因此添加了更多这些工具,如下面以绿色突出显示:
让我们解释其中一些方框正在做的更详细:
Catapult Design Checker – uncover coding bugs using static and formal approaches.
Catapult Coverage – C++ coverage analysis, knowing about hardware.
Assertion Synthesis – auto-generation of assertions in the RTL.
SCVerify – creates a smoke test, and sets up co-simulation of C++ and RTL, comparing for differences.
Questa CoverCheck – finds unreachable code using form RTL coverage analysis
检查C++代码
因此,这个更新的流程看起来非常自动化,但仍然存在问题。例如,C++是不定时的,而RTL具有时钟周期的概念,因此在RTL仿真期间可能出现不匹配。Catapult Design Checker在这里发挥作用,当在几个柯尼卡美能达设计上运行时,该工具检测到大约20次违反阵列绑定读取(ABR)规则,其中数组索引超出界限。这是一个ABR违规示例:
解决这个问题的方法是在C++代码中添加断言:
使用C++断言,您将在模拟过程中看到任何违规,而Assertion Synthesis将添加如下所示的在RTL测试期间使用的PSL代码。
代码覆盖范围
Catapult Coverage(CCOV)工具了解硬件,而原始GCOV工具则不然,因此CCOV支持以下内容:
Statement
Branch
Focused Expression
Index Range
Toggle Coverage
但仍然存在一个重要问题,C++覆盖范围与实际RTL覆盖范围有多接近?SCVerify工具用于10个设计,以比较报表和分支覆盖的结果,下面显示密切相关,平均报表覆盖率为97%,CCOV的分支覆盖率为93%。
无法访问的代码
有任何无法访问的代码是一个问题,因此使用Questa CoverCheck工具有助于识别,然后有选择地从统一覆盖数据库(UCDB)中删除。这是工程师在运行CoverCheck后会看到的内容,黄色显示的项目无法访问:
一旦设计人员看到无法访问的代码,他们就会确定这是一个真正的错误还是可以放弃,如果元素可以访问,那么就为它创建一个新的测试。
在高级别验证期间,LSI工程师正在尝试达到覆盖目标,他们可以要求算法开发人员添加更多测试。将来,算法开发人员可以使用CCOV来实现代码覆盖,而LSI工程师则使用剩余的Catapult工具来实现RTL闭包。
结论
多年来,Takashi Kawabe在柯尼卡美能达的团队成功地在C++流程中使用了Catapult工具,以便比传统的RTL输入方法更快地将产品推向市场。通过使用全套Catapult工具,他们在C++中的仿真速度比在RTL级别快100倍,并且已经证明C++级别的signoff现在已经可以实现。
白皮书下载
更详细的可以下载相关白皮书了解。