之前在polygon多边形操作一文中举例介绍了ICC2中如何用polygon命令创建环形金属,这里再介绍一种实用用法。我们需要在M8 stripe与M2 power rail之间搭一座梯子将M2到M8连接起来。首先,抓取二者重叠处bbox,使用的是compute_polygon命令。然后用create_shape on track搭建各层梯子。
可测试性设计(Design for Testability)是一种集成电路设计技术。它是一种将特殊结构在设计阶段植入电路的方法,以便生产完成后进行测试,确保检测过后的电子组件没有功能或制造上的缺陷。电路测试有时并不容易,电路的许多内部节点信号在外部难以控制和观测。通过在半导体工艺中添加可测试性设计结构,如扫描链等,并利用自动测试设备执行测试程序,可以在生产完成后立即进行质量检测。有些特定的设备会在其最终产品的组件上加上测试功能,在消费者的使用环境下执行时一并测试。测试程序除了会指出错误信息外,还会一并将测试的日志保留下来,可供设计人员找出缺陷的来源。更简单的说,测试程序会对所有的被测设备输入测试信号,并期待它们给出预期的正确回应。如果被测设备的回应与预期回应一致,则可得知电路正常,否则 即为测试错误。为了方便使用测试程序检测错误,电路设计阶段不可忽视可测试性设计。在可测试性设计的规则确认完善下,可以利用自动测试图样发生器进行更复杂的测试。
用Formality做大规模设计的RTL vs APR ECO网表的signoff等价性检查通常难度很大。即使有svf的帮助也会经常不过,因为这时我们一共有两到三个svf:老RTL综合的svf,新RTL综合的svf,后端icc2优化产生svf(如果用icc2做后端实现),还有新旧两版rtl diff差异的svf。这些svf同时被读进formality后,有些accept,有些reject,这些reject通常很难一条一条的拿出来review为什么会被reject。另一方面,由于dft、(icc2以外的)后端工具优化、自动或者手工eco等都会导致formality不能正确mapping。
在用calibre v2lvs把APR网表转CDL时是不是经常遇到下图的情况?这是CDL不区分大小写的原因。最常见的解决方法就是写脚本替换。我们注意到log里warning非常有规律:Duplicate port/net name "xxx" found in module "xxx",这样我们可以用正则提取net和module名字。