AG32内部集成一个PLL,供MCU和CPLD使用, 支持5路时钟输出。PLL时钟输出以MCU优先。
这里整理下5路时钟:
PLLCLK0:就是 SYSCLK (名字使用SYSCLK)
PLLCLK1:VE里如果定义USB0 device,系统会自动生成60Mhz时钟给USB用;
PLLCLK2:VE里定义了MAC信号时,这路时钟给MAC用(25 MII/50M RMII);
PLLCLK3:VE里定义BUSCLK时(只能是sysclk整数分频)给CPLD用;
PLLCLK4:独立给用户使用;
这里的SYSCLK相当于RISC-V的运行频率,也是AHB时钟。系统如果没有定义USB, Ethernet MAC的情况下,相应的几路时钟都可以给CPLD用。这里的BUSCLK相当于CPLD与MCU通过AHB通讯时的APB时钟。当MCU需要运行到200Mhz以上时,ADC部分的逻辑无法运行到这么高的频率,需要定义BUSCLK给CPLD用。
时钟的设置限制及计算方式:
PLLCLK是用户期望的目标值,是由外部时钟通过PLL倍频和分频后产生的:
-
VCO=HSE*X/Y,X,Y皆为整数
-
VCO小于1200MHZ。
-
所有的设置频率必须能被这个最终VCO整除。
举例:mcu主频100M,系统用了MAC(50M),系统用了USB(60M),cpld自定义了PLLCLK3为80M,cpld自定义了PLLCLK4为60M。则,PLL目标值就是100\50\60\80\60的最小公倍数,为1200M。
如果使用到一些特殊频率,则可能需要通过选择外部时钟来实现。
VSCODE 编译的时候,会输出时钟的一些信息的。如:
PLL时钟的相位:
PLL 除了输出时钟频率外,还能输出不同相位的时钟。我们有一个例程,提供了高精度的PWM输出,输出精度可以达到100pS。 可能有人奇怪了,VCO最高也就输出1.2G,也就0.8nS左右的精度,怎么可以达到100pS的精度呢?这里设计就用到了时钟相位。
VE里可以定义时钟的不同相位:
相位以45°为单位,可以产生8个不同的相位,再加上1.2G的频率,相当于可以产生10G的频率,就可以实现100pS的精度。
大家可以用示波器测测相位,这样更容易理解。
标签:输出,相位,AG32,CPLD,频率,PLL,时钟 From: https://blog.csdn.net/xinxingzhe5127/article/details/144129996