Zynq UltraScale + RFSoC ZCU111专栏3-时钟树配置-LMK04208
软件环境准备
ZCU111开发板使用了一颗LMK04208 作为RF系统的时钟发生芯片。
文中链接均为我的本地地址,资料请大家自行官网收集。
数据手册
配置软件
芯片配置
不得不感慨一下,TI的配置工具比skyworks的好用。手册写的也更清晰准确。
然后吐槽一下TI的TICS pro这个软件频繁的崩溃。只要导入配置就会gg。希望有大佬知道解决方案,猜测可能是系统的原因。因为论坛上没有出现大量的这种现象。
##配置界面
blog中的所有截图配置都是通过ZCU111板自带demo Regmap 反推出来的设置,并且已经经过验证。
TI的配置界面效率比skyworks高
第一页是大量的通用寄存器配置,这些配置与时钟频率无关。具体的参数请参考DS配置
第二页是PLL的时钟配置。这里有个很奇怪的bug。假设我们关闭clkin1和clkin0。这个时候PLL phase detector and charge pump还是会根据Pll1 Reference input select中的的值选择一个参考时钟输入,然后通过PLL1 的 R divider 作为PLL1的参考时钟输入。随后会根据N divider的值计算出一个OSCin,尽管这个值可能并不是我们想要的。假设我们此时修改了OSC in的值以及选择了OSCin的范围,那么之前做的PLL的Ndivider的设置会失效。
解决这个问题有两个思路。
- 是不care这个输入频率的值,直接把OSCin的范围按照实际时钟的频率选就行了,我们将XILINX的工程直接读入后就是这样的。输入时钟在gui界面中是不正确的,但是最后的输出的寄存器文件盒我用上图这种正确的配置出来的结果是一样的。
- 通过正确的输入频率利用R/N divider的值计算一个正确的值。输入到CLKin1中的频率设置中去,尽管这个值是没有用的,但是可以在gui界面中得到其他正确的输入。
想要配置成其他的时钟按照手册重新配置即可。
最后一页是输出配置。负责控制输出时钟分配网络的连接方式和时钟分频的设置。
在ZCU111的原理图中(0381811).LMK04208的输出时钟的流向如表
输出端口 | 时钟流向 | 端口或芯片 | 接口类型 |
---|---|---|---|
OSC OUT | x | x | x |
CLK0 | SYSREF_FPGA | AK16/AK17 | LVPECL |
CLK1 | SYSREF_RFSOC | U4/U5 | LVDS |
CLK2 | FPGA_REFCLK | AL15/AL16 | LVPECL |
CLK3 | 4208_OUT3 | LMK00304SQ | LVPECL |
CLK4 | 4208_OUT4 | LMK00804BPW | LVDS |
CLK4 | 4208_OUT5 | SMA_J108 | LVCMOS |
- ECL:Emitter-Couple Logic 低压正发射极耦合逻辑
- LVPECL:Low Voltage PosiTIve Emitter-Couple Logic 低压正发射极耦合逻辑
- LVDS:Low Voltage Differential Signaling 低电压查分信号
- LMK00304SQ : 4-Output Ultra-Low Additive Jitter Differential Clock Buffer/Level Translator
- LMK00804 : Low skew, 1-to-4 multiplexed differential/LVCMOS-to-LVCMOS/TTL fanout buffer
NOTE
LMK00304也能接受LVDS输入
LMK00804 接受LVPECL, LVDS, HCSL, SSTL, LVHSTL, LVCMOS/LVTTL输入
##总结与疑问
- 配置上没问题,软件bug可以人肉克服。
- 有关各种不同接口的特性以后可以开个档研究一下。
- 输出的时钟频率不是任意的,和输入的晶振是强相关的,因为倍频器和分频器都是整数的,因此不是任意频点都能做出来的。以后可以搞个脚本做个频点表?或者手册之类的地方会不会提供
- 有关pll还有不理解的地方,比如可以先2分频然后再4倍频,也可以直接2倍频。这样得到的时钟频率实际上是一致的。实际上我在gui界面中也尝试过这样配置,能够正常的输出寄存器文档。但是这样配置下来区别是什么?为什么xilinx官方选择了38分频这样一个奇怪的数值,而且还不能整除。