低功耗设计方法--低功耗IP设计(二)
2.USB OTG 中的电源控制器设计
电源控制器是一个简单的状态机,它控制以下信号:
pwr_reset_n // 协议引擎的复位
gate_hclk,// 控制 AHB 域中时钟的关闭
h2pd_stop_pclk //控制PHY域中时钟的关闭
bius_pwr_clamp //控制AHB域的钳位输出
h2pl_pwr_clamp //控制PHY域的钳位输出
pwr_dwn_req_n //控制请求断电信号(低电平有效 )
retain_n // 下降沿是保存;上升沿恢复
并且它接收以下输入:
• pwr_dwn_ack_n // pwr_dwn_req 的确认
• stop_pclk_ack // h2pd_stop_pclk 的确认
• pwr_clamp_ack // h2pl_pwr_clamp 的确认
• suspend_detected // 表示 3ms 内没有 USB 活动
• fifo_flushed // 表示所有挂起的 USB事务完成
• wkup_res_det //表示在USB总线上的活动已检测
• enable_power_gating //从CPU使能电源门控
• 等待 fifo_flushed 激活。这表明所有待处理事务都已完成,存储待处理事务的先进先出是空的。
• 然后它激活 bius_pwr_clamp(到 AHB 时钟域)和 h2pl_pwr_clamp(到 PHY 时钟域)以钳位 USB OTG 电源门控部分的输出。
• 然后等待 pwr_clamp_ack(来自 PHY 时钟域)。这告诉控制器隔离单元都被钳位(在 USB OTG 中,它们都被钳位为“0”。)
• 然后它置位 gate_hclk 和 h2pd_stop_pclk 以停止 AHB 和 PHY 时钟。
• 然后等待stop_pclk_ack(来自PHY 时钟域)以指示PHY 域中的时钟已停止。由于同步器,PHY 时钟总是在 AHB 时钟之后关闭。
• 然后置位retain_n(异步信号,因此不需要握手)。这会导致保留寄存器保存其内容。
• 然后置位reset_n(异步信号,因此不需要握手)。
• 然后置位pwr_dwn_req_n,导致USB OTG 的电源门控部分掉电。
当电源控制器发现 enable_power_gating 已被清除(表明 CPU 要为 USB OTG 供电)或在 USB 总线上检测到活动时,电源控制器状态机启动唤醒序列:
• 它取消 pwr_dwn_req_n,导致 USB OTG 的电源门控部分上电。
• 然后等待 pwr_dwn_ack_n 指示 USB OTG 已完全通电。
• 然后它取消置位reset_n,因此协议引擎中的所有触发器都恢复为复位状态。
• 然后它取消置位retain_n,以便恢复控制和状态寄存器块中的所有保留触发器。
• 然后它取消声明gate_hclk 和h2pd_stop_pclk 以启动两个时钟。
• 然后等待stop_pclk_ack 指示时钟正在运行。
• 然后它取消bius_pwr_clamp 和 h2pl_pwr_clamp 以释放对 USB OTG 电源门控部分输出的钳位。
收到此确认后,电源控制器进入空闲状态,USB OTG 恢复正常操作。