状态保持和恢复方法
接着上文继续
低功耗设计方法-电源门控设计(一)
低功耗设计方法-电源门控设计(二)
给定电源开关结构和隔离策略,可以对逻辑块进行电源门控。但是,除非采用保留策略,否则所有的状态信息都会在模块断电时丢失。为了在上电时恢复它的操作,模块必须从外部源恢复它的状态或从复位条件重新建立它的状态。在任何一种情况下,所需的时间和功耗都是巨大的。
在许多情况下,快速有效地保存和恢复状态的方式是显式保留,该策略可以提供一种更快、更省电的方法,使逻辑块在通电后就完全发挥作用。
保留策略的选取取决于子系统的特性。如果提供新的输入数据,主要由数据流驱动的数字信号处理单元可能能够从复位开始。然而,外设或缓存处理器通常具有足够的剩余状态,以致重新加载此状态所需的总线流量过多。
有几种方法可以保存和恢复电源门控块的内部状态:
一种是基于读写寄存器的软件方法。
一种是基于扫描链在芯片外存储状态的方式。
一种是使用保留寄存器的方法。
使用软件方法,在电源下电期间,位于常开域块中的处理器读取电源门控块的寄存器。将状态信息存储在处理器的存储块中。在上电过程中,处理器读取存储块并将状态写回电源门控块。这种方法有几个缺点:
由于需要使用总线,这大幅减小了电源上下电的速度。
总线冲突会使保存/恢复时间不确定,使决定何时关闭电源块变得更加困难。
必须编写软件并集成到系统软件中以处理下电和上电。这使得软件的可重用性大大降低,并且要求编写软件的工程师对硬件有更广泛的了解。
出于这些原因,我们将关注其他两种保留状态的方法,这使得电源上电对系统的其他部分更加透明。
使用扫描链的状态保持
为制造测试而实现的扫描链可以被重用来执行状态保持,几乎不会增加区域开销。
在这种方法中,一组专用的扫描链被用于电源门控块。在电源下电过程中,扫描寄存器像在扫描测试中一样移位,但输出被保存到存储块中。这个存储可以是芯片上的,也可以是芯片外的,但无论怎样存储块都需要常通电。在上电过程中,扫描链从存储块中加载数据。
注意,一旦将状态扫描到存储块中,整个子系统就可以关闭电源。没有必要为保留寄存器而始终处于通电状态。
从RTL设计的角度来看,当然存在挑战。最基本的挑战是在综合之前,扫描触发器不会被插入和连接起来—但有必要在综合之前在 RTL 级别对控制器进行编码和调试。
甚至寄存器的数量和扫描链的长度也只有在初步实现后才能知道。因此,需要对控制程序进行参数化,以管理和实现相关的计数器值。它还必须提供扫描使能以及扫描链的控制信号。这些稍后会与网表联系起来。
为了实现最快的保存和恢复时间,我们希望使用存储块的数据总线的全宽度将保留数据写入内存。这意味着我们应该使扫描链的数量等于内存数据总线的宽度。在实践中,这可能意味着太多的扫描链而不实用。但通常我们会使用至少8个扫描链,并且可能是8的倍数。
如果使用更多的扫描链,则有必要平衡扫描链—也就是说,它们必须都是相同的长度。这种平衡是必要的,因为控制器产生一个由所有链共享的单个移位使能信号,也用于门数据进出内存。为了达到这个平衡,我们可以在短链上添加额外的寄存器。
注意,保留使用的存储器必须足够大以容纳扫描的比特数。此外,保存和恢复状态都有实时延迟成本。它随着扫描得到和返回的块大小而增长,并且是使用了多少扫描链的函数。
将寄存器状态移出和移回的过程中也有能量消耗。如果使用外部存储器,则IO开关功率可能很大。即使使用内部存储器,仅通过扫描链移动数据就需要很大的动态功率。Pattern的移动高度依赖于状态,在逻辑路径最差的情况下,区块中的每个触发器在每个时钟上都要切换。这比一般情况下的切换要多得多,并且会产生不可接受的IR电压降。
现代测试和实现工具已经需要处理这样一个事实,即在扫描期间,切换活动可能比正常操作期间高得多。这些工具可以分析实际的IR下降,并允许工程师调整链的数量和时钟序列,以保持IR下降到一个可接受的水平。但是需要注意避免可能损坏数据的过度IR下降。
尽管存在这些挑战,但基于扫描的状态保留方法在某些情况下还是有用的。对于长期休眠,完全关闭整个子系统,特别是关闭外部电源可以显著减少泄漏。如果状态可以通过扫描链恢复而不是在上电后从复位状态开始,这种节省是显著的。
图5-5显示了基于扫描链的状态保存和恢复,简化为4位以使得图比较小。注意,其中一个扫描链比其他的短,所以添加了一个触发器来平衡链。一旦扫描链被平衡,状态可以保存到存储块中(“SCAN-OUT & SAVE STATE DATA”),然后从存储块中(“SCAN-IN & RESTORE STATE DATA”)恢复当初的状态。
在网表实现(和扫描插入)之前,RTL级别上的功能测试和模拟是一个挑战,但不是不可克服的。
一种方法是在RTL设计中添加一些条件代码,它只在模拟基于扫描的保留时才编译。这段代码模拟了移位寄存器的行为,可以包含在简单的测试序列中,以验证控制器是否正常工作,数据是否被正确地写入和从内存中读取。
下面是一个虚拟扫描链的RTL模型示例,该虚拟扫描链为CPU实现了16个扫描链以支持保留。注意,虚拟数据用于扫描链。
在稍后的阶段,应该执行门级网表模拟,以确保特定于实现的扫描链和控制信号确实正确地连接起来,并且正确的长度扫描链已经实现和平衡。