征战FPGA之使用clk_wiz的IP核获取任意频率时钟

一、前言

clk时钟在FPGA开发中具有举足轻重的作用,不管是串口UART,HDMI还是对各种视频编码芯片的驱动等都用到了clk。最近也在学习FPGA的跨时钟域,因此想着先学习一下FPGA的时钟生成。采用IP核clk_wiz可以直接生成的时钟频率范围最大可到4.687MHz-800MHz,但无法直接生成低频率的时钟,为了解决这个问题,可采用时钟分频的方法间接生成。例如,串口用的最多的一个频率是115200,此时可将该频率倍频至clk_wiz可生成的时钟频率范围内,这里取11.52MHz,然后再对该频率进行一百分频即可得到115200的频率。又如要生成9600的频率,可先倍频至9.6MHz,再将clk_wiz生成的频率进行一千分频即可得到9600的时钟频率。采用这种方法理论可以得到任何频率的时钟,而且误差在10Hz以内。经过实测,生成的115200时钟误差为4Hz,生成的9600时钟误差为2Hz,精度较高。(本文使用的软件为Vivado 2018.3,硬件为ZedBoard(xc7020clg484-1),语言为Verilog。)

二、过程

**1、**首先建立一个空的工程,建立过程这里不详细说明,有需要的小伙伴可以查一下教程。随后在左上角找到Flow Navigator->PROJECT MANAGER->IP Catalog,并左击即可打开导入IP核的窗口。在Search栏输入clk,并选择我们需要到的IP核。如下图所示。

### 关于 `clk_wiz` IP 复位的相关问题 在 FPGA 设计中,`clk_wiz` 是 Xilinx 提供的一种用于生成时钟信号的心模块。它支持多种功能,包括倍频、分频以及多路输出时钟的生成。然而,在实际设计过程中,可能会遇到与 `clk_wiz` 复位相关的配置或问题。 #### 1. **复位信号的功能** `clk_wiz` 的复位输入通常标记为 `resetn` 或类似的名称,这是一个异步低电平有效的复位信号。当此信号被拉低时,心内部的状态机会被初始化,并重新启动 PLL 锁定过程[^4]。如果未正确配置复位逻辑,则可能导致以下问题: - 输出时钟可能处于不确定状态。 - PLL 可能无法锁定目标频率。 #### 2. **复位信号的设计注意事项** 为了确保 `clk_wiz` 正常工作,需注意以下几个方面: - **复位宽度**:复位脉冲应保持足够的长度以使心完成其内部状态的初始化。一般建议至少维持两个输入时钟周期的时间[^3]。 - **同步机制**:由于复位信号通常是全局分布的,可能存在亚稳态风险。因此,推荐通过两级寄存器对其进行同步处理后再传递给 `clk_wiz` 模块[^2]。 ```verilog // Verilog 示例:对复位信号进行同步化 module reset_sync ( input wire clk, input wire async_resetn_in, // 异步复位输入 output reg sync_resetn_out // 同步后的复位输出 ); reg intermediate_reset; always @(posedge clk or negedge async_resetn_in) begin if (!async_resetn_in) begin intermediate_reset <= 1'b0; sync_resetn_out <= 1'b0; end else begin intermediate_reset <= 1'b1; sync_resetn_out <= intermediate_reset; end end endmodule ``` #### 3. **常见错误及其解决方案** 以下是几个常见的复位相关问题及对应的解决方法: - **问题**: 在某些情况下,即使提供了复位信号,PLL 仍然未能成功锁定。 - **原因**: 这可能是由于复位时间不足或者外部条件不稳定引起的。 - **解决办法**: 增加复位持续时间和稳定性检测电路。 - **问题**: 如果系统中有多个独立工作的时钟域,如何协调它们之间的复位? - **原因**: 不同时钟域之间存在潜在的竞争关系。 - **解决办法**: 需要在每个时钟域内单独实现同步化的复位逻辑,并确保所有关键路径均受到保护。 #### 4. **测试与验证策略** 对于涉及复杂时序的应用场景来说,充分的仿真和硬件调试至关重要。可以通过以下方式来验证复位行为是否正常: - 添加波形观察节点以便监控关键信号的变化情况; - 利用 ILA (Integrated Logic Analyzer) 工具捕获现场数据流并分析异常现象; - 对不同温度等级下的性能表现进行全面评估。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值