C2RTL:C代码与RTL代码的功能等效性检查
越来越多公司开始采用C++编写参考模型,尤其是对算法要求较高的CPU/GPU/AI/DSP等整数和浮点设计,都会有对应的C模型。对同一个功能模块,用不同的语言,由不同的人员分别实现,可以尽量避免犯同样的设计错误。然后通过co-simulation,比较两个实现的功能是否一致来发现设计中的问题。通常这种测试方法结合UVM框架下实现。
1. 支持C-RTL、C-C、RTL-RTL的等价性验证。 支持C/C++/Verilog编写的模型互相之间的等价
2. 提供IEEE754浮点黄金参考模型(golden model),支持浮点运算。 对于FPU的RTL设计,可以直接用ATEC验证是否满足IEEE754标准。ATEC自带的参考模型在多家芯片设计厂商抓到过RTL的bug。
3. 提供常用的数学函数,比如fabs/pow/sqrt。 可以直接使用常用的数学函数。
4. 支持Clockgating的验证,完备验证gating enable/disable的功能一致性。 为了解决耗电问题,通常使用clock gating的技术将部分逻辑暂时关闭。使用ATEC可以完备地验证clock gating的正确性。
5. 证明失败的assertion,可自动生成复现的trace,以testbench的形式给出(可自由选择仿真器)。 失败的断言自动生成反例。默认自动打开波形,方便debug。
6. 支持blackbox,合理使用black box可验证更大的Design。 Black box是一种分而治之的验证方法。对于已经验证的子模块,可以使用black box将这部分逻辑化简,从而可验证更大的Design。
7. 支持多个不同频率的clock,支持clock domain。 可以设置多个clock,其中一个作为基准clock,其它clock用基准clock的频率关系表示。
11. 支持Floatinglicense,局域网内共用license。 支持浮动license,只需要在一台机器上启动license。
12. 支持booleanformula的验证,包括>/>=/</<=,可验证误差可控,不要求必须完全等价。 虽然称为等价性验证工具,实际上任何boolean formula都可以验证。常见的比如浮点结果的误差在0.000001。
13. 可约束Design的行为(输入以及输入之间的关系约束),例如输入的值大于0小于8。 可以用接近自然语言的描述约束Design的行为。
14. 支持不同latency的两个RTL的验证。 可以验证用不同算法、pipeline实现的两个RTL的等价。比如一个固定在第4个时钟上升沿出结果,一个在第2~3个时钟上升沿出结果。
15. 支持条件等价,例如valid为1时才比较输出等价。验证等价时,可以指定前提条件。