MMCM/PLL VCO
输入输出时钟频率,input 322.265625Mhz, output 312.5Mhz
对于使用MMCM与PLL的不同情况,虽然输入输出频率是一样的,但是,分/倍频系数是不同的,不能使用同一套参数(M/D/O)。
原因:VCO不一致。这个应该是vivado工具计算出来的输出时钟jitter最小的VCO。
根据这个VCO,由ug472中的公式,可以算出,M/D也是不一样的。
碰到的故障:
因为设计原因,MMCM不够用,因此部分模块使用了PLL。
时钟单元的代码,是纯verilog HDL代码,没有使用GUI,CBB模块调用了底层MMCM/PLL原语,使用宏控制。
考虑到输入输出频率一致,使用了同一套M/D/O参数。
测试时发现,使用PLL的channel,功能不对,FIFO有溢出。仔细定位后发现,PLL输出的频率与预期的不完全一致。
通过GUI重新生成PLL IPcore,发现verilog手动例化的PLL与IPcore的PLL代码,M/D/O不一致。
更新使用GUI生成代码中的M/D/O值,问题解决。
Takeaway:
如果确实需要手动例化MMCM/PLL代码,建议先在GUI中根据配置产生IP,然后将底层代码copy到所用的模块。切记不要想当然认为MMCM/PLL功能差不多,相同的输入输出频率,分/倍频系数也是相同的。