RK3588 电压域(voltage domain)

更多资料下载,冲击月薪过万,一线经验工程师录制, 干货满满的嵌入式视频教程,请点击淘宝店:wanglitao.taobao.com

一个 SoC 内部,通常包含很多模块,比如:ARM CPU core,GPU,DDR,I2C,SPI,USB 等,每个模块工作的时候,数字逻辑部分需要一个合适频率和对应的电压,模块频率越高,需要的电压也会越高,功耗也就越高。频率和电压是功耗的两个重要参数。

SoC 内部的各个模块,一般都有数字逻辑部分和 IO 部分,数字逻辑部分主要负责运算和状态控制,IO 部分主要负责接口信号传输。数字逻辑和 IO 的供电一般都是分开的,IO 部分的功耗比较固定,而数字逻辑部分的功耗受频率和电压影响变化很大,为了优化功耗,把芯片内部数字逻辑部分按模块划分成电压域和电源域。

电压域 VD(voltage domain)

电压域表示芯片内部几个模块共同由一个外部电源供电的区域,可以独立调节或开关电压。一些运行电压相近、功耗不大的模块,可以放在同一个电压域中。如果一个模块功耗很大(比如GPU),最好单独设置一个电压域,以方便做功耗管理,也避免峰值电流超过外部电源的限制。要保证所有的模块可以正常工作,需要把电压域的电压设置到对电压要求最高的模块所需要的电压(不包含关闭的模块)。

电源域 PD(power domain)

一个电压域里面可能包含很多个模块, 而这些模块一般不会同时工作,在有供电的情况下,不工作的模块存在漏电流(leakage),为了减小漏电流,通常会把一个电压域内部划分成几个区域,每个区域可以独立开关(switch off)电源,某个区域关闭电源后,就与其他模块隔离(isolation),可以大大减小漏电流,这样的区域就叫做电源域。

RK3588的电压域和电源域


RK3588 SoC内部电路总共划分为10多个VD(电压域),通过不同的电源输入管脚接入SoC芯片内部:

  • VD_BIGCORE0: 包括PD_CPU_4 和 PD_CPU_5 两个电源域
  • VD_BIGCORE1:包括PD_CPU_6 和 PD_CPU_7 两个电源域
  • VD_LITDSU:包括四个小核,PD_CPU_0, PD_CPU_1, PD_CPU_2,PD_CPU_3,四个电源域
  • VD_VCODEC:包括PD_RKVDEC0, PD_RKVDEC1, PD_VENC0,PD_VENC1 四个电源域
  • VD_DDR01:主要是给 DDR 颗粒和 SoC 上 DDR-IO 部分供电
  • VD_DDR23:
  • VD_NPU: PD_NPUTOP, PD_NPU1, PD_NPU2
  • VD_GPU:
  • VD_LOGIC:各种外设的电源域,给各个外设的逻辑模块供电,包括PD_AUDIO, PD_GMAC,PD_SDIO, PD_USB等

VDD_LOGIC 里面一般会包含很多模块,为了方便功耗管理,内部又会划分成很多个 PD,可以通过下面的命令查看各个模块的运行频率和电源开关状态:

# cat /sys/kernel/debug/clk/clk_summary

查看各个电源域PD的开关状态:

# cat /sys/kernel/debug/pm_genpd/pm_genpd_summary