1.前言
在学习一款芯片的架构时,时钟应该是我们最先要理弄清的地方,因为不管是CPU 总线 以及外设的基本工作都离不开时钟,且它们所需的时钟频率各不相同。本博客主要介绍P2020的时钟,涉及时钟的整体框架,时钟如何设置以及注意事项。
2. P2020 时钟框架介绍
1.SYSCLK是芯片主要的时钟源,使用系统锁相环(System PLL ratio)可以得到CCB(core complex bus)时钟(也称平台时钟)
a) 从上图可以看出平台时钟可以驱动L2缓存,DDR SDRAM以及CCB总线等
b) 系统PLL比率没有默认值,因此电路上必须考虑POR期间的LA[29:31]引脚。POR完成后比值可以通过GTUS_PORPLLSR[Plat_Ration{26~30}]读取到(LA与该寄存器看比值即可,位数不对应的)
assign LA[29:31]=(!MPC_HRESET)?3'b010:3'bz;//6:1 400M(CPLD POR 配置System PLL ration)
若SYSCLK = 66.666 M,则平台时钟约等于400M
2.DDRCLK
DDR内存控制器可以使用平台时钟,也可以使用DDR PLL Ratio 乘以独立时钟DDRCLK,以创建唯一的DDR存储器控制器时钟。在这种情况下,DDR控制器相对于平台时钟异步运行。
DDR PLL Ratio也没有默认值,因此电路上必须考虑POR期间的cfg_ddr_pll[0:2]引脚
assign {TSEC_1588_CLK_OUT,TSEC_1588_PULSE_OUT1,TSEC_1588_PULSE_OUT2}=(!MPC_HRESET)?/*3'b010*/3'b111:3'bz;//6:1 400M
当配置为111时 DDR 控制器时钟采用CCB时钟
3.TCK与RTC
RTC: 实时时钟,可用于(可选)为e500内核的时基计时。 RTC时序规范<P2020 Integrated Processor Hardware Specifications>中给出,但最大频率应小于CCB频率的四分之一。请参阅实时时钟。该信号也可以用于(可选)为可编程中断控制器(PIC)中的全局定时器计时 (《P2020RM.pdf》4.5.5.4 Real time clock)
TCK: JTAG test clock
4.SD_REF_CLK
SerDes参考时钟配置,有默认配置。SerDes差分时钟硬件设计与这个配置保持一致
assign TSEC_1588_ALARM_OUT1 =(!MPC_HRESET)?1'b0:1'bz;//0:125M ;1:100M
5.外设控制器的时钟
思考:为什么I2C控制的SCL驱动时钟可以来源CCB(I2C总线作为主模式时)也可以来自外部(I2C作为从模式),而SPI_CLK只来源于CCB
6.eLBC的时钟 (待定描述 写eLBC时详述)
下面是硬件设计参考:
7.两个核的时钟(e500v2 core0 | core1)
assign {LBCTL,LALE,LGPL2}= (!MPC_HRESET)?3'b110:3'bz;//3:1 core0
assign {nLWE0,UART_SOUT1,READY_P1} =(!MPC_HRESET)?3'b110:3'bz;//3:1 core1
POR 期间配置引脚:
POR期间配置的值可以之后读取到
8.以太网时钟