MIG系统时钟和参考时钟为何不能混用?
发表时间:2026-08-26 14:42:10
MIG系统时钟和参考时钟为何不能混用?

Block Design里同时出现sys_clk_i、clk_ref_i和ui_clk,三个名字都带clk。新手很容易把它们接到同一个网络,或者把ui_clk当成外部输入。设计能够综合并不代表连接正确,真正的问题往往在上板后才暴露:MMCM不锁定、复位释放异常,或者init_calib_complete迟迟不拉高。
01先把三个时钟按消费者分开
System Clock是MIG的输入系统时钟,进入控制器的内部时钟结构,用于生成存储器接口和用户侧所需时钟。它的允许周期与存储器速率、器件系列和MIG配置有关。配置页中的Input Clock Period不是随便填一个板上晶振频率,而是在告诉IP实际送入的系统时钟是什么。

Reference Clock服务于专用延迟和校准资源,在不同器件和MIG架构中用途细节会变化,但它不是用户逻辑时钟的替代品。ui_clk则是MIG校准并建立内部时序后输出给用户逻辑的时钟,AXI接口和与MIG同步的逻辑通常应工作在ui_clk域。一个是外部输入,一个是校准基准,一个是IP输出,方向已经决定了不能互换。
02配置页为什么还要选择Buffer
MIG会询问System Clock和Reference Clock是差分、单端还是不再插入缓冲,背后对应的是实际引脚、时钟缓冲和上层连接方式。若板级时钟直接进入MIG,选择应与物理接口一致;若时钟已经经过Clocking Wizard或全局缓冲,再让MIG重复插入不匹配的缓冲,可能造成结构冲突。No Buffer也不等于“不需要时钟资源”,而是表示外部已完成对应处理。

相同的板载振荡源可以经过合规的时钟结构分配给多个消费者,但不能因为来源相同就忽略端口各自要求。需要核对MIG生成文档、器件时钟资源和约束,确认频率、相位关系、抖动、缓冲以及可用引脚。若两个端口允许同源,也应通过明确的时钟树连接,而不是在顶层凭名字短接。
03配置顺序决定后面是否对得上
先确定存储器器件、数据位宽与目标速率,再根据MIG给出的允许范围选择系统输入周期;随后配置System Clock、Reference Clock、复位极性和引脚。等IP生成后,再在Block Design里把外部时钟、Clocking Wizard、复位模块和MIG逐一对照。倒过来先画BD、后猜MIG参数,端口名虽然能连上,频率关系却很容易错。

04上板不校准,沿着状态链定位
第一层看外部输入:示波器或时钟资源报告确认系统时钟确实到达指定引脚,频率与约束一致。第二层看时钟生成:Clocking Wizard或MIG内部MMCM的locked是否成立。第三层看复位:sys_rst极性是否与配置匹配,复位释放是否同步到正确时钟域。第四层才看存储器校准完成信号和引脚约束。
如果locked正常而校准不完成,再查Reference Clock、DDR引脚分组、IO标准、终端和板级连接;如果locked本身不成立,先不要把精力放在AXI读写代码上。AXI逻辑只在MIG已经建立ui_clk并完成校准后才有讨论价值。把状态链分层,比反复重生IP更快。

05跨域逻辑别偷用外部时钟
用户逻辑若直接用板载时钟驱动,却同时与MIG的AXI接口交互,就形成了新的时钟域交叉。应以ui_clk驱动同域逻辑,或使用规范的异步FIFO、握手和同步器跨域。ui_clk频率看起来可能与某个外部时钟相同,也不能据此认定两者同相同域。
MIG时钟问题的本质,是把“频率相同”误当成“角色相同”。系统时钟提供运行基础,参考时钟提供校准基准,ui_clk提供用户接口时序。把角色、方向和资源一一对应,初始化问题才会从玄学变成可检查的连接表。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207






哔哩哔哩
微信公众号
小红书
抖音
知乎
西瓜视频
头条
微信视频号