zl程序教程

您现在的位置是:首页 >  后端

当前栏目

低功耗设计方法-电源门控设计(六)

方法 设计 电源 低功耗 门控
2023-06-13 09:11:31 时间

电源门控设计验证--RTL仿真

接下来我们考虑在RTL级验证电源门控电路的问题。这是一个挑战,因为硬件描述语言没有在RTL级别提供描述电源连接的机制。为了模拟电源门控,我们需要扩展Verilog—通过修改代码或使用一组单独的命令来描述电源连接和电源切换。

统一功耗格式(UPF)定义了电源门控的语言格式和仿真语义。UPF标准的大部分内容都涉及到电源门控策略的实施:这方面在第11章实现电源门控中进行了讨论。在这里,我们将仅限讨论仿真电源门控的问题。

EDA公司正在迅速实施UPF并提供自动模拟电源门控的能力。对于那些正在使用不支持UPF的模拟器的人来说,可以通过在RTL中添加特殊代码来实现大部分UPF仿真语义,可以手动或通过脚本的方式。

在RTL级别模拟电源门控所需的关键功能包括:

  • 电源门控的功能建模(包括在电源门控时强制输出X)
  • 隔离单元的功能建模
  • 保存和恢复的功能建模
  • 电源门控/保持/复位优先级的功能建模

除仿真外,还应增加断言和功能覆盖,以验证控制网络的正确序列和极性。

在RTL中推断电源门控行为

第一步是模拟关闭一个区块的效果。

UPF提供了一种机制(一组tcl命令),用于定义电源域(一组Verilog模块)和电源域的一组电源(电源和地面电源网)。

图5-10显示了我们想要仿真的设计的电源连接。Verilog模块my_module (实例U1)有一个Header开关,用于控制模块中所有逻辑的电源。电源门控控制器下拉pwr_req信号以关闭模块,并确定pwr_req以使模块上电。信号pwr_ack是确认信号,表明交换机已完成上电/下电。在RTL级别,它只是一个pwr_reg的缓冲版本。在门级网表中,它将有真正的延迟。

上述设计的UPF描述可能如下所示:

如果在仿真时包含此UPF代码,则会发生以下情况:

当pwr_req拉低(请求断电)时,开关将关闭U1中的所有单元的电源。也就是说,所有的寄存器都将其输出设置为X,U1的所有输出端口都设置为X。所有进程都变为非活动状态。同时,pwr_ack设置为低,通知电源控制器电源完全关闭。UPF支持为确认信号分配延迟,但对于RTL仿真,我们使用默认的零延迟。

当pwr_req拉高(请求恢复供电),然后开关打开电源到U1中的所有单元。同时,pwr_ack设置为高值,通知电源控制器电源已完全打开。

在RTL中推断电源门控和保持行为

对于使用保留寄存器的设计,下一步是修改RTL以进行行为建模:

•对保持初始化保持状态变量到“X”以在 SAVE 操作之前捕获无效的 RESTORE。

•将寄存器状态采样到用于“SAVE”操作的额外推断保留状态变量

•上电时在所有寄存器输出上强制“X”

•从保留状态重新初始化状态“RESTORE”操作上的变量

•正确建模电源门控/保持/复位/时钟的优先级以确保正确排序

同样,我们可以通过添加到我们的UPF 代码或通过编写脚本来直接修改RTL 来做到这一点。

UPF 提供命令来为保留寄存器以及保存和恢复控制信号指定“始终开启”的电源网络。默认情况下,set_retention 命令会将电源域中的所有寄存器转换为保留寄存器。

UPF指定这些命令以下语义。我们从与之前相同的示例开始:

与添加UPF代码,将表现为如果我们添加了以下两个过程: