如何用Clocking Wizard生成低速时钟?ARTY A7 35T时钟异常求助
Clocking Wizard输出异常(单脉冲)排查方案(Arty A7 35T)
一、先查IP配置(最易踩坑点)
- 确认输入时钟参数:Arty A7的系统时钟是100MHz,IP配置界面里Input Clock Frequency必须严格设为100MHz,参数错误直接导致锁相环无法锁定。
- 打开输出时钟使能:在IP的Output Clocks页面,给12MHz输出勾选Clock Enable,漏开此选项会直接导致无输出或异常脉冲。
- 复位极性匹配:Arty A7的复位引脚为低有效,IP配置里Reset Type选Active Low,若极性搞反,锁相环会一直处于复位状态,输出必然异常。
二、最简代码+正确仿真验证
用以下最简例化代码,务必引出locked信号——这是判断锁相环是否正常工作的核心指标:
module clk_test( input sys_clk, // 板载100MHz时钟 input sys_rst_n, // 板载低有效复位 output clk_12m, output locked // 锁相环锁定指示 ); clk_wiz_0 clk_wiz_inst ( .clk_out1(clk_12m), .resetn(sys_rst_n), .locked(locked), .clk_in1(sys_clk) ); endmodule
对应的测试平台要给足激励时间,必须等locked拉高后再观察时钟输出:
module tb_clk_test; reg sys_clk; reg sys_rst_n; wire clk_12m; wire locked; clk_test uut( .sys_clk(sys_clk), .sys_rst_n(sys_rst_n), .clk_12m(clk_12m), .locked(locked) ); // 生成100MHz输入时钟(周期10ns) initial begin sys_clk = 0; forever #5 sys_clk = ~sys_clk; end // 复位激励:先拉低100ns,再释放 initial begin sys_rst_n = 0; #100; sys_rst_n = 1; #10000; // 跑足够时长,等待锁相环锁定 $finish; end endmodule
仿真时优先看locked波形:只有当locked稳定为高后,clk_12m才会输出正常的12MHz时钟;若locked一直为低,说明锁相环未锁定,回到IP配置和输入时钟约束排查问题。
三、硬件约束不能缺
检查.xdc约束文件,确保时钟和复位引脚正确绑定:
// 100MHz系统时钟约束(W5为Arty A7时钟引脚) set_property PACKAGE_PIN W5 [get_ports sys_clk] set_property IOSTANDARD LVCMOS33 [get_ports sys_clk] create_clock -period 10.000 -name sys_clk [get_ports sys_clk] // 复位引脚约束(U18为板载复位键,低有效) set_property PACKAGE_PIN U18 [get_ports sys_rst_n] set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n]
无正确约束时,综合工具可能将时钟当作普通IO处理,输出必然异常。
四、新手常见误区总结
- 未等待
locked信号:锁相环需数十个输入时钟周期才能锁定,复位刚释放时输出为乱波,勿急于观察。 - 仿真时间过短:测试平台仅跑几百ns,未等
locked拉高就结束,看到的自然是单脉冲或乱波。 - IP输入时钟频率错误:误设为50MHz等其他值,会导致锁相环无法锁定,输出直接失效。
五、后续测试建议
- 硬件调试时将
locked引到LED:先确认LED亮起(locked为高),再测试时钟输出,避免无效操作。 - 面包板测12MHz时,时钟线尽量短:面包板寄生电容大,过长走线会导致时钟波形失真,影响SRAM测试。
- 100MHz测试必须做PCB:高频信号对走线阻抗、长度要求严格,面包板无法满足,需提前规划PCB的时钟走线与阻抗匹配。
内容的提问来源于stack exchange,提问作者Sephiroth
相关产品推荐
相关产品推荐

