低功耗设计方法--电源门控示例(二)
隔离单元
SALT 项目使用了几种不同的隔离技术。SALT 的初始版本是在有工具支持自动插入隔离单元之前完成的。因此,我们在 RTL 中手动插入了这些单元格。
VDRAM 区域具有实例化为“通用库单元”的输入隔离单元。这些只是 RTL 包装,可以映射到行为仿真模型或标准单元库“电源管理套件”中特定技术的钳位单元。这种方法提供了从 CPU 内核逻辑到存储器的许多关键路径信号(包括时钟和复位)上的单元的显式实例化。在 RTL 中实例化这些单元可以清楚地了解需要在实现流程中仔细管理的时钟和关键信号。隔离单元之间的时钟平衡并不简单;隔离单元通常会限制时钟缓冲工具在重构缓冲树方面的灵活性。
从 CPU 到总线接口单元的输出由放置在 CPU 中的单元(即 VDDCPU 区域)隔离。这些输出隔离单元在休眠模式(本地电源门控)下下拉 AMBA 总线接口处的所有输出信号,以保证 SOC 接口信号的干净。
然而,当 CPU 轨关闭(休眠模式)时,这些隔离单元失去它们的 VDDCPU 电源,输出可能再次浮动。为了解决这个问题,在 VDDSOC 域中添加了简单的总线中继器或保持单元,以钳位这些输出,同时避免任何进一步的门延迟。此外,来自电源控制器的隔离控制信号驱动总线接口模块中的复位,以强制所有总线接口协议信号的逻辑 0 钳位。
电源控制器生成单个隔离控制信号,但它作为两个独立的信号进行路由。复制时不经过 CPU 区域就进入缓存 RAM,一份副本进入 CPU 而不经过缓存。当 VDDCPU 在休眠期间关闭其电源轨时,缓存的隔离信号仍会上电,因为其路径中的所有缓冲区均由 VDDSOC 或 VDDRAM 供电。因此,缓存的输入在休眠期间免受浮动信号(和数据损坏)的影响。
USB OTG 模块使用 RTL 中实例化与门单元的替代方案,并添加了合适的“不接触”属性,以防止跨越这些隔离边界进行逻辑优化。在综合过程中,我们强制将这些与门映射到不使用一个浮动输入(只要另一个输入为低电平)的单元。
SALT 设计中的所有隔离单元均使用通用的、与技术无关的封装模块进行实例化。对于手工实例化的单元,这提供了一定程度的设计可移植性,并可以在选择特定技术库之前进行仿真。
如上所述,SALT 芯片的初始版本在 RTL 中实例化隔离单元。在后续版本中,我们使用 EDA 工具在不修改 RTL 的情况下实现隔离单元。重新划分 CPU 子系统以包含 VDDSOC 还消除了 AMBA 总线对总线中继器单元接口信号的需要。现在隔离单元从始终开启的 VDDSOC 获得电源。因此,使用一组隔离单元来隔离总线接口信号。
使用UPF定义的模拟语义,可以通过发出UPF tcl命令(set_isolation)来实例化和模拟隔离单元;不需要手动实例化或通用包装器。
保留单元
SALT 项目结合了多种保留技术,以便对同一硅片上每种技术的面积/时间/能源成本函数进行比较和分析。
CPU 使用完全状态保留。给定一个经过充分验证的 CPU 内核,保留每个寄存器位状态是唯一可以确保处理器以任意控制状态和数据状态重新启动的安全方法。要仅保留架构状态,并为非架构状态使用复位信号,将需要认真的验证项目。
任何电源门控设计的一个关键问题是确保保持寄存器在掉电/上电序列期间不会被破坏。在 SALT 上,我们为电源控制排序添加了一个非实时诊断机制。它使用“休眠”扫描功能在 SAVE 操作后对所有影子寄存器的内容进行校验和并将其保存到外部存储器,然后在 RESTORE 操作后校验和并保存整个寄存器内容。然后可以将这些进行比较,以检测电源排序期间保留寄存器的任何损坏。
这种方法允许对随机和位置敏感问题以及软启动电源门控排序在限制浪涌电流方面的功效进行误差分析。这也被证明是量化保持触发器的安全裕度的一种有价值的方法,并允许它们在保持模式下承受热冲击和电压冲击。
推断电源门控和保持
在 SALT 项目中,我们使用具有单引脚控制的保持寄存器单元来控制保存和恢复边缘触发方式。保持状态在低电平有效的NRETAIN 信号下降沿被捕获并在NRETAIN 的上升沿恢复: