SALT技术示例工程提供了测试本书所述功率门控和状态保留方法的平台。本章我们会给出更详细的系统设计和RTL代码。
SALT芯片用90纳秒工艺技术实现,包含ARM处理器,AMBA总线以及对应的外设,新思科技(Synoposys)的USB OTG数字核和物理层PHY。ARM核与USB核独立电源门控。ARM核使用全状态保留;USB核使用部分状态保留。两个核都使用header样式的开关结构;因此二者共地,通过切换VDD实现电源开关。
在第一节,我们描述处理器的功率门控设计。图7-1所示是一个简化的SALT芯片结构框图。
大多数基于电池供电的处理器设计必须仔细处理性能(以支持产品功能)和低功耗(以支持更长的电池寿命)之间的平衡。性能要求引导我们采用更高的性能、更容易泄漏的工艺。为了保持更长的电池寿命,我们需要提供积极的泄漏管理。
SALT工程中,处理器使用了4个低功耗模式。所有模式中,功率控制器产生SLEEP信号以进入低功耗模式,产生WAKE信号退出低功耗模式。为了增加泄露功率的节省量,增加通电断电的时间,包含如下模式:
除了上述模式,SALT芯片通过在外部管理阈值缩放来达到泄露降低的目的。阈值缩放用反馈偏压完成。用于CPU标准单元区域的P阱和N阱都被引出到芯片的引脚。这使得能够在偏置变化时对延迟和泄漏功率特性进行实验分析。
用阱偏压机制,我们定义三种操作模式:
功率控制器的设计确保阱偏压只在设计为静态且无时钟时变化。任何在“normal”和后向或前向偏压模式之间电源管理的变化会通过 HALT 、SNOOZE、HIBERNATE三种状态中的一个。图7-2展示了电源模式的状态图。
RTL设计分区为三个主电源供电:
VDDSOC:是“always-on”电源,为除了处理器和缓存外的整个芯片供电。
VDDRAM:是外部开关电源轨道,为高速缓存和MMU(内存管理单元)的RAM供电。
VDDCPU:是外部开关电源轨道,为CPU标准单元供电。
VDDSOC为PLL,时钟发生器,电源管理控制模块以及所有的实时外设提供数字电源。这些外设包括实时时钟和定时器;作为中断服务请求的一部分,这些可以产生”唤醒“事件。
VDDSOC也为USB OTG子系统供电,USB通过自己的电源开关结构(使用一个单独的电源控制器)实现电源门控。
为高速缓存使用单独的供电电源达到几个目标:可以允许CPU断电而高速缓存器依然上电,允许更快速的恢复操作。允许CPU和高速缓存断电而芯片的外设依然通电。这些外设控制CPU的苏醒-通过检测中断,中断控制器发送信号至功率管理器从而为CPU上电。最后,使用单独的高速缓存电源可以开发详细的泄漏和有功功耗曲线,这样我们就可以确定高速缓存的最小工作电压和确保高速缓存在CPU关闭期间保留内容的最小电压。
同样地,对CPU逻辑单独供电(VDDCPU)允许测量详细的泄漏和有功功耗曲线,同时可以测量进入和退出功率节省状态的时间和能量消耗。图7-3所示为SALT芯片的分区。
自最初的SALT设计以来,CPU子系统已经被重新实现,以改进设计的重用。总线接口单元和电源门控控制器已集成到CPU内的一个“VDDSOC”区域中。这种集成大大减少了SoC设计团队在将ARM核心集成到芯片中时需要处理的信号和块的数量。
虽然这使得3供电轨(VDDCPU VDDSOC VDDRAM)CPU子系统的实现更加复杂,但时序和内部电源门控和隔离接口现在已经完全远离了顶层SOC设计。对IP块支持的低功率状态的任何更改或增强都独立于顶层系统设计。
图7-4显示了重新分区的CPU子系统。
功率门控控制和握手:
CPU功率门控控制系统管理:
SALT项目的目标之一是开发一种支持广泛的库组件和电流过冲管理技术的方法。为此,CPU电源控制器对每个控制信号使用请求-确认握手:电源门控、隔离、保存、恢复和复位。
所有的确认信号都被视为到控制器时钟的异步信号,并具有到状态机时钟域的本地同步器。
这种方法确保了设计没有本地编码的延迟或计数。它还允许确认信号(ack)直接与某些实现的请求(req)绑定,或构建为真正的握手。在当前的SALT实现中,对隔离、保存、恢复和复位的确认都与它们各自的请求绑定;在实现时,这些功能都非常快,不需要延迟排序。
header开关的电源门控控制使用了一个真正的确认。断电请求通过头开关被链接,因此返回控制器的确认的延迟相当于整个结构的切换时间。
还有一些额外的设计说明:
SALT项目使用了几种不同的隔离技术。最初的SALT版本是在有工具支持自动插入隔离单元之前完成的。因此,我们手动将这些单元格插入到RTL中。
CPU和缓存之间的接口对时序特别关键,需要进行仔细的设计和时序分析。我们将从CPU到缓存的所有输出上放置隔离单元,但将它们放在缓存的VDDRAM电压区域。这在SALT设计中很方便,因为缓存总是通电的,使到隔离单元的电源布线更简单。
VDDRAM区域有实例化为“通用库单元”的输入隔离单元。这些只是RTL封装器,既可以映射到行为仿真模型,也可以映射到标准单元库的“电源管理工具包”中特定技术的钳夹单元。这种方法提供了从CPU核心逻辑到内存中许多关键路径信号(包括时钟和复位)的显式实例化。在RTL中实例化这些单元提供了需要在实现流程中仔细管理的这些时钟和关键信号的清晰可见性。跨隔离单元的时钟平衡并不简单;隔离单元通常限制了时钟缓冲工具在重组缓冲树时的灵活性。
从CPU到总线接口单元的输出被放置在CPU中的单元隔离,即在VDDCPU区域。这些输出隔离单元在snooze模式(本地电源门控)下下拉AMBA总线接口上的所有输出信号,以保证干净的SOC接口信号。
然而,当CPU轨道被关闭(hibernate模式)时,这些隔离单元就失去了它们的VDDCPU电源,输出可能变为不定态。为了解决这个问题,在VDDSOC域中添加了简单的总线中继器或保持单元,以钳夹住这些输出,同时避免任何进一步的门级延迟。此外,来自电源控制器的隔离控制信号驱动总线接口模块中的复位,以强制所有总线接口协议信号钳夹至逻辑0。
功率控制器产生一个隔离控制信号,但它作为两个单独的信号布线。其中一个副本进入缓存RAM而不经过CPU电源区域,其中一个副本进入CPU而不经过缓存。当VDDCPU在休眠期间关闭其电源轨道时,高速缓存的隔离信号仍然会通电,因为其路径中的所有缓冲区都由VDDSOC或VDDRAM驱动。因此,高速缓存的输入在休眠期间免受浮动信号(和数据中断)的影响。
USB OTG块使用RTL中实例化与门单元的替代方案,并添加了适当的“不触摸(don't-touch)”属性,以防止通过这些隔离边界进行逻辑优化。在综合过程中,我们强迫这些与门被映射为没有不定态输入的单元(只要另一个输入为低电平)。
SALT设计中的所有隔离单元都使用一个通用的、技术独立的封装模块进行实例化。对于手动实例化的单元,这提供了设计可移植性的程度,并允许在选择特定的技术库之前进行仿真。
SALT 芯片的初始版本按照上述方法实例化 RTL 中的隔离单元。在随后的版本中,我们使用 EDA 工具实现隔离单元,而不需要修改 RTL。将 CPU 子系统重新划分为包括 VDDSOC ,也消除了对 AMBA 总线接口信号的总线中继器单元的需要。现在,隔离单元从 VDDSOC 获得电力,电源总是开着的。因此,使用一组单独的隔离单元来隔离总线接口信号。
通过使用 UPF 定义的仿真语义,可以通过发出 UPF tcl 命令(set_isolation)来实例化和仿真隔离单元; 不需要手动实例化或通用封装。
SALT项目采用了几种保留技术,可以对同一硅上每种技术的 面积/时间/能耗 成本函数进行比较和分析。
CPU使用完全状态保留功能。给定一个经过完全验证的CPU核心,保留每个寄存器位状态是确保处理器可以通过任意控制和数据状态重新启动的唯一安全方法。要只保留架构状态,并对非架构状态使用复位信号,将需要一个认真的验证项目。
任何电源门控设计的一个关键问题是确保保留寄存器在断电/通电序列期间不会损坏。在SALT上,我们在功率控制测序中添加了一个非实时诊断机制。使用“休眠”扫描功能校验和,将save操作后所有影子寄存器的内容保存到外部内存,恢复操作后校验和保存整个寄存器内容。然后可以比较这些,以检测在上电期间保留寄存器的任何损坏。
这种方法允许对随机和位置敏感的问题进行误差分析,以及软启动功率门控测序在限制快速电流方面的有效性。这也被证明是一种有价值的方法来量化保留触发器的安全裕量,并允许它们在保留模式时可以应对热冲击和电压冲击。
另一方面,USB OTG核心使用部分保留功能。核心用 控制和状态寄存器 (CSR)块中保存的持久USB端点数据进行分区,而协议接口引擎(PIE)块仅包含协议状态。当前事务的数据保存在基于ram的FIFO中。在断电期间,USB等待当前事务完成,因此FIFO为空。然后,它使用标准的保留寄存器技术来保存CSR的所有状态。在通电时,CSR将恢复其状态,并向PIE发出复位命令。这将复位协议引擎,并为下一个事务做好了准备。
USB电源门设计在第8章更详细地讨论。
SALT工程中,我们使用只有一个边沿触发型控制引脚的保留寄存器单元进行保存和恢复操作。保留状态在低电平有效的NRETAIN信号的下降沿捕获,在NRETAIN信号的上升沿恢复保留状态。
基于第五章相同的示例,我们修改UPF代码以实现这种保留行为:
set_retention_control my_retention_strategy
-domain my_power_domain
-save_signal {NRETAIN negedge}
-restore_signal {NRTAIN posedge}
或者,如果我们的仿真器不支持UPF,我们可以修改RTL代码来实现:
`ifdef RTL_PG_EMULATE
reg [3:0] state_SAVE = 4’bXXXX;
wire PWR;
assign PWR = pwr_req & pwr_ack;
`endif
always @ (posedge clk or negedge nrst
`ifdef RTL_PG_EMULATE
or negedge PWR or negedge NRETAIN
`endif
)
begin
`ifdef RTL_PG_EMULATE
if (!PWR)
current_state <= 4'bXXXX;
else if (!NRETAIN)
current_state <= state_SAVE;
else
`endif
if (!nrst)
current_state <= 4'b0101;
else
current_state <= next_state;
end
`ifdef RTL_PG_EMULATE
always @ (negedge NRETAIN)
state_SAVE <= current_state;
`endif
我们评估了SALT项目的硅,以了解电源门控和状态保留对泄露功率的改进,以及开关结构对功能性能的影响。
图7-5显示了ARM926EJ CPU子系统的缓存内存和标准单元逻辑的动态和泄漏功率的基本评估,将电源从标称的110%下降到标称的70%(以10%为步进)。对于这种90纳米的通用工艺技术,标称电源电压为1.0V。
测量是在电路板级别上,在任何封装/打线封装/片上电压下降和电源门控结构本身之前,所以测量结果对于室温下的“典型”硅是非常合理的。
对于CPU设计的最坏情况下的时序确认(sign-off)目标频率为300MHz。前三个测量结果显示了CPU分别在300MHz、200MHz和100MHz工作时的动态功率。
“ClkGate”测量反映了当整个CPU的时钟被门控关闭时的基线泄漏(baseline leakage)。
“SRPG”(保存恢复电源门控)测量值是电源门控期间的泄漏。因此,它反映了开关、保留锁存器和始终打开的控制缓冲区树的泄漏,在这种情况下,还包括了非电源门控的缓存存储器的基线泄漏。
图7-6显示了电池供电产品的关键温度范围内电源门控“VDDCPU”电源域的测量漏电功率。垂直标度以对数方式绘制:
上面绘制的曲线是时钟停止时的基线泄漏。温度曲线是用状态保持功率门测量的泄漏功率。在整个温度范围内,泄漏功率节约超过10倍,在室温下超过25倍。
图7-7显示了功率门控标准单元逻辑的泄漏功率,以及本项目未使用功率门控的缓存内存功率:
上面的曲线是CPU子系统(逻辑+ram)的基线总泄漏,下面的曲线显示了具有状态保留的逻辑部分功率门控的功率。
RAM的泄漏功率现在主导了泄漏功率,但CPU子系统仍有两次泄漏功率的节省。通过集成的功率门控的ram,节省可以改进到更接近那些逻辑部分的功耗。
图7-8显示了状态保留的泄漏功率的节省量相对于基线泄漏的详细比较。基线泄漏与SRPG泄漏的比值在一个线性尺度上被绘制出来,以显示这种特征如何在温度范围内变化。
在温度范围的高端,节省的恶化可以用高电压阈值开关的泄漏行为来解释。这种特殊设计和技术的最佳功率门漏电节约在温度为35C。
总之,当电源门控技术被应用于标准单元逻辑时,可以比基线泄漏节省10倍到25倍的泄漏功率。因为缓存存储器通常会根据性能进行调整,因此显示出相当高的泄漏功率,这些也受益于泄漏功率抑制的技术。本主题见第12章。
SALT技术演示已成为开发状态保持功率门控技术和方法的有效工具,并用于分析在90纳米工艺上功率门控的成本和好处。这些技术和方法将非常适用于65纳米和以下。
第七章结束~