信号隔离
一旦我们解决了开关结构的设计和控制问题,下一个问题就是确定隔离策略。
电源门控区域的每个接口都需要管理。我们需要确保该区域的电源关闭不会导致在任何电源模块的输入中出现短路电流。我们还需要确保下电块的浮点输出不会导致上电块的虚假行为。
电源门控块的输出是最主要的问题,因为它们可能导致其他块的电气或功能问题。电源门控模块的输入通常不是问题--它们可以被上电模块驱动到有效的逻辑值,而不会在下电模块中产生电气(或功能)问题。
信号隔离技术
控制下电模块输出的基本方法是使用隔离单元将输出箝位到一个特定的、合法的值。
有三种基本类型的隔离单元:那些将信号固定在“0”上的,那些将信号固定在“1”上的,还有那些将信号固定在最近的输出值上的。
在大多数情况下,将输出箝位到非活动状态就足够了。当使用高有效逻辑时,最常见的方法是将值箝位到“0”,与门电路功能实现了这一点。当使用低有效逻辑时,或门逻辑电路将输出停在逻辑“1”处。
只要控制输入处于适当的“隔离”状态,钳位库单元的设计可以避免输入浮动信号而导致短路电流和泄漏路径。此外,它们的综合模型通常有额外的属性,以确保这些单元永远不会被优化、缓冲错误或作为逻辑优化的一部分被反向。
图5-2左侧为与门电路箝位的概念视图。当隔离信号“ISOLN”为高时,信号传递到输出;当“ISOLN”低时,输出为低:
图5-2的右侧显示了或门结构的箝位概念视图。当隔离控制信号“ISOL”高时,输出箝位高;
这些箝位门增加了被隔离的信号的延迟。对于某些关键路径,这种增加的延迟可能是不可接受的——例如在高速cache的内存接口上。
另一种不增加延迟的隔离技术是使用上拉或下拉晶体管。然而,这种方法在电源门控网络上引入了多个驱动程序,需要仔细的排序以避免信号争用。即使上拉或下拉晶体管是相对较弱的器件,当总数量可能足够大时,从总线争用的过剩电流可能会导致问题。避免争用的排序行为由电源控制器完成。
图5-3左侧为下拉式箝位的概念视图;当“ISOL”高时,输出被拉低。
图5-3右侧为上拉式箝位的概念视图;当“ISOLN”高时,信号通到输出。
为了避免输出毛刺,重要的是在上电期间保持输出不变,直到电源稳定。这种行为对于钳位单元来说是很简单的,但是对于上/下拉晶体管来说则是相当具有挑战性的,因为当它们在恢复供电时,它们的输出值会发生冲突,可能会引起输出值的变化。
请注意,晶体管型箝位可能导致金属迁移和可靠性问题,即使是少量的连续电流流过它们。它们也给测试带来了一个大问题—任何时候,如果存在有多个驱动程序,可测试性就变得非常困难。
因此,尽管上拉和下拉晶体管具有面积和时间成本更低,但不推荐用于RTL设计。相反,建议使用门级风格的电路,本节的其余部分将对此进行描述。然而,拉晶体管方法在特殊情况下是很有用的,比如存在时序很关键的路径。
输出或者输入隔离
如上所述,为了避免浮动的输出信号驱动上电模块的输入而导致电气问题,有必要隔离电源门控模块的输出。从逻辑上讲,无论我们是在它们的源(即电源门控模块内)还是在它们的目的地(即上电模块内)处理这些信号,都没有区别。
但有一些重要的实际考虑影响这一选择。
很有可能,电源门控块的部分输出至少连接到一个以上的通电块。如果输出在接收块被隔离,则每个输出可能需要多个隔离单元。因此,将输出隔离在电源门控块内部可以提高面积利用率,减小面积。
在电源门块内部隔离输出也使分析更容易。一旦我们确定所有输出都是正确隔离的,我们就完成了检查。如果这些信号在接收块中被隔离,则必须检查输出信号的每个扇出,以确保其上至少都有一个隔离单元。在不同的设计中重用此设计时,必须在每种情况下再次执行此分析。
然而,在源处设置隔离确实对摆放位置和路由有一些限制。不同于电源门组中的其他门,隔离单元在断电期间必须保持供电。因此,包含电源门控块的电源域必须提供开关电源和常开电源域。这有点使芯片的电源路由复杂化,但现代EDA工具能够解决这个问题。
无论输出是否在其源或目的地被隔离,EDA工具必须保持隔离单元的独一性。如果隔离位于源端,则工具不能使用电源门控中的缓冲器来缓冲隔离单元的输出,因为该缓冲器不是处于常开域。如果隔离单元位于目的端,则工具不能用常开域的缓冲区缓冲(预隔离)信号。发送到隔离单元的控制信号必须通过常开域单元进行缓冲。
此外,在放置和路由期间的优化不能用非隔离单元代替隔离单元。
基于上述原因,我们强烈建议在可重用IP中使用设计带有隔离单元的IP,以便在SoC级集成中隐藏隔离的复杂性。
接口协议与隔离
在设计电源门控块的接口时,有两个目标:最大限度地减少泄漏和避免不必要或错误的行为。
考虑一个电源门控块的情况,它的输出指向常开块。当电源门控模块断电时,电源模块接收到箝位信号值。如果这些信号是高有效并且是高电平,那么目的地可能会把这些信号理解为命令,并做出错误的行为。将信号箝位到不活动状态是避免这个问题的最佳策略。对于大多数设计,这意味着箝位输出到“0”。
这个准则的一个可能的例外是复位。通常,复位是低电平的,因此箝位低信号在接口上显示复位状态。事实上,这可能是在电源关闭时最合适的驱动复位值。这确保了复位将在上电期间有效。在任何情况下,都需要考虑钳位接口信号在断电时是有效还是无效的。
现在考虑一个电源门控块的情况,它有输出到另一个(独立的)电源门控块。因为块是独立的电源门控,它们的输出必须是隔离的。但在某些情况下,源块将被关闭,目标块也将被关闭。在这种情况下,箝位信号如果处于错误的电平可能会导致泄漏电流的增加。例如,如果是切换VDD(对于目标块),输出(源块)被箝位到“1”,那么可能有从箝位输出到地的电流路径。这可能会造成不必要的泄漏。
因此,对于Header开关设计,建议是使用高有效信号和低有效复位,并箝位所有信号到“0”。
对于复杂的协议,可能需要使用更复杂的隔离策略:将信号箝位到最后的值。这种方法允许在进程中重新启动协议,而不是在复位状态下启动协议。这个策略需要一个锁存的隔离单元,并非在所有库中都可用,因此应该仅在绝对必要时使用。
隔离技术中的建议与陷阱
建议:
隔离电源门控模块的输出。
使用隔离单元而不是上拉或下拉的箝位,除非使用非常专门的接口协议(在这种情况下,“多驱动程序”的复杂性挑战可能值得实现)
确保在隔离控制信号测试时可以检测到卡在0和卡在1故障。这有助于在制造测试期间验证隔离是否有效。
陷阱:
确保隔离单元一直处于通电状态。
因为时钟树综合和时序收敛,时钟上的隔离箝位相当复杂。时钟树的平衡尤其困难。如果可能的话。避免在电源门控块和使用外部块中产生时钟。