一次功能 ECO 后,DFT 设计规则检查(DRC)在某个触发器附近报出 ERROR_MULTI_PATHS。这个错误码表示:按当前测试模式的配置,扫描链出现多条路径。但它没有直接告诉我们哪一处连接发生了变化,也没有说明怎样修复才能同时保留功能 ECO 和扫描移位路径。
下面用 GOF 用户手册中的 DFT DRC 示例,说明如何从报错实例进入原理图,找到改动点,再在同一原理图中完成 ECO。
先确认打开的是运行 DRC 时所用的网表版本,并加载相应的标准单元库。从报告中复制报错触发器的完整层次实例名,在 GofViewer 中按 Ctrl+g,将该实例加载到 GofTrace。然后沿输入、输出引脚展开驱动与负载,逐步查看相关连接。这样可以从报错位置出发观察局部电路,而不必一开始绘制整张网表。

图 1:GOF Debug 的增量式原理图界面示例。
读图时还要核对 DRC 使用的测试模式设置,包括扫描使能、时钟和复位。若约束没有正确描述预期的测试状态,应先修正检查设置,再判断是否需要修改网表。
手册示例中,FLOP_A 带有扫描输入和扫描使能引脚;FLOP_B 没有独立的扫描输入,在现有结构中通过 D 引脚接收来自 FLOP_A/Q 的移位数据。原先两级触发器之间有直接连接。
一次功能 ECO 在 FLOP_A/Q 和 FLOP_B/D 之间插入 NAND。NAND 实现了预期的功能逻辑,但它的另一输入也进入了原来用于扫描移位的路径。GOF 的 DFT DRC 在这个示例中报出 ERROR_MULTI_PATHS。

图 2:手册中的 DFT 示例。NAND 插入后,原先的直连路径不再存在。
从 FLOP_B/D 反向追踪驱动,可以看到 NAND 位于两级触发器之间。再查看 NAND 的两个输入以及扫描控制连接:扫描使能控制 FLOP_A,但新插入的 NAND 没有受扫描使能控制的旁路。移位时,FLOP_B/D 接收到的是 NAND 输出,而不是直接来自 FLOP_A/Q 的数据。这样就把 DRC 的报错位置和真正需要处理的连接变化对应起来了。
手册给出的一种修复方式是在 FLOP_B/D 前插入 MUX:IN0 接 NAND 输出,IN1 接 FLOP_A/Q,选择端接扫描移位控制。SCAN_SHIFT=0 时选择 NAND 的功能结果;SCAN_SHIFT=1 时选择来自前一级触发器的直接路径。

图 3:手册中的 MUX 修复方案。功能路径和扫描移位路径分别由两个 MUX 输入承载。
另一种方案是把 FLOP_B 换成合适的扫描触发器:D 接 NAND 输出,SI 接 FLOP_A/Q,SE 接扫描移位控制。具体选用哪种方案,取决于设计的 DFT 结构和实现约束。
GOF 支持在 GUI ECO 或脚本模式下实现这两种修改。在原理图中启用 ECO 模式后,可以放置所需的库单元、连接引脚,并立即在同一视图中检查修改后的连接。下图是一个独立的 GUI 操作示例,展示插入门和连接引脚;图 3 才是本 DFT 案例的 MUX 修复电路。

图 4:GOF GUI ECO 界面操作示例。图中插入的是 NAND,并非图 3 的 MUX 修复。
保存修改后的网表,或导出并应用 ECO 脚本,然后对实际输出的网表重新运行 DFT DRC 和项目中的扫描测试检查。功能等价检查应使用包含这次预期功能变化的参考设计,并采用功能模式约束、关闭扫描移位。最后继续完成项目要求的时序、物理实现和签核检查。
原理图帮助我们看清“报错触发器—变化连接—修复位置”之间的关系;最终是否满足功能和测试要求,仍以这些验证结果为准。