SOC时钟配置
SOC时钟配置
1 锁相环工作原理
Soc的时钟产生单元(CGU)通过外部输入时钟和内部相位锁相环(PLL)和分频选择逻辑产生用于片内的不同频率的时钟。片内时钟频率的改变通过配置AHB总线全局控制模块单元内部锁相环寄存器实现。
CGU单元内部包含三个锁相环,分别产生系统主时钟、DDR物理层时钟、以太网物理层时钟,其配置寄存器位于AHB总线全局控制模块。CGU模块还产生1553模块时钟与UART时钟。
锁相环采用65nm工艺库中的PLLSM65LLFRAC锁相环,其最高输出频率为1.6GHz,包含小数配置模式和整数配置模式,该时钟管理单元内部的锁相环采用整数配置模式,用户可配置引脚如表1所列。
表1 普通锁相环可配置引脚
引脚名称 |
方向 |
位宽 |
说明 |
REFDIV(分频器) |
I |
6 |
锁相环分频系数 |
FBDIV(倍频器) |
I |
12 |
锁相环倍频系数 |
锁相环时钟用FOUTVCO表示,晶振输入时钟用CLKIN表示,倍频器系数用FBDIV表示,分频器系数用REFDIV表示,主时钟用MAINPLL表示,DDR3时钟用DDRPLL表示,以太网时钟用ENETPLL表示。锁相环配置公式如下:
锁相环时钟:FOUTVCO = CLKIN * FBDIV / REFDIV;
主时钟:MAINPLL = CLKIN * FBDIV / (2*REFDIV);
DDR3时钟:DDRPLL = CLKIN * FBDIV / (2*REFDIV);
以太网时钟:ENETPLL = CLKIN * FBDIV / (6*REFDIV);
需要注意的地方:输出时钟的范围为400MHz ≤ FOUTVCO ≤ 1600MHz;对于配置信号REFDIV、FBDIV的要求:1 ≤ REFDIV ≤ 63;16 ≤ FBDIV ≤ 1600;通过检查锁相环状态寄存器获知锁相环是否锁定,此时再对锁相环进行配置操作。
2 配置流程
主锁相环的配置:
主锁相环产生系统主时钟,对于主时钟锁相环的原理分析知道其满足:
MAINPLL = CLKIN * FBDIV / (2*REFDIV)。
配置步骤:
- 读取全局控制模块主锁相环寄存器,查看锁相环状态寄存器LOCK位信息(0x40c00008寄存器的第21位),直到读出该位为0x1;
- 对主锁相环寄存器的BYPASS位写0x1操作(0x40c00008寄存器的第20位),对主锁相环寄存器的LOCK位写0x1操作(0x40c00008寄存器的第21位);
- 配置主锁相环寄存器的主时钟倍频系数(FBDIV)和主时钟分频系数(REFDIV),MAINPLL = CLKIN * FBDIV / (2*REFDIV),配置主频为400MHz,则FBDIV = 0xA0,REFDIV = 0x5(FBDIV为寄存器的19-8位,REFDIV为寄存器的5-0位);
- 等待主锁相环寄存器频率锁存完成,通过循环读取LOCK可知,如果LOCK位读出为0,表示频率锁存完成;
- 向主锁相环寄存器的BYPASS位写入0,表示时钟为锁相环模式,非旁路模式。
DDR锁相环配置:
DDR锁相环产生系统DDR3时钟,对于DDR锁相环的原理分析知道其满足:
DDRPLL = CLKIN * FBDIV / (2*REFDIV)。
配置步骤:
- 读取全局控制模块DDR锁相环寄存器,查看锁相环状态寄存器LOCK位信息(0x40c0000c寄存器的第21位),直到读出该位为0x1;
- 对DDR锁相环寄存器的BYPASS位写0x1操作(0x40c0000c寄存器的第20位),对主锁相环寄存器的LOCK位写0x1操作(0x40c0000c寄存器的第21位);
- 配置DDR锁相环寄存器的DDR时钟倍频系数(FBDIV)和DDR时钟分频系数(REFDIV),DDRPLL = CLKIN * FBDIV / (2*REFDIV),配置主频为533MHz,则FBDIV = 0x215,REFDIV = 0x32(FBDIV为寄存器的19-8位,REFDIV为寄存器的5-0位);
- 等待DDR锁相环寄存器频率锁存完成,通过循环读取LOCK可知,如果LOCK位读出为0,表示频率锁存完成;
- 向DDR锁相环寄存器的BYPASS位写入0,表示时钟为锁相环模式,非旁路模式。
3 数据结构封装
根据时钟模块寄存器地址在内存分配图中的分布,将其地址定义为整型宏定义,将寄存器定义为各位各个功能位域的结构联合体。这样子将整型地址转换成寄存器的结构联合体指针,就能够通过寄存器位域去编写底层驱动了,图1表示宏定义寄存器的定义和类型转换,图2表示寄存器结构联合体定义。
图1
图2