使用PLL的lock信号作为复位信号

复制代码
外部时钟 → PLL → 产生系统时钟 clk_sys
              → 产生锁定信号 locked(异步)

你想把 locked 直接连到各个模块的复位端。那么上电后的流程是:

  1. PLL 开始锁定,locked = 0clk_sys 不稳定

  2. 一段时间后 PLL 锁定,locked = 1clk_sys 稳定

  3. 各模块复位释放,开始工作

看起来逻辑很顺,但问题就出在 第2步到第3步的切换过程


⚠️ 主要问题(在你这种结构下更明显)

1. 异步释放导致的亚稳态(依然存在,甚至更隐蔽)

locked 信号的上升沿与 clk_sys 之间没有固定相位关系

  • 有可能 locked 的变化正好发生在 clk_sys 的采样沿附近

  • 此时用 clk_syslocked 的寄存器会进入亚稳态

  • 这个寄存器通常是你第一个状态机或控制逻辑的复位判断点

结果:整个系统的启动行为可能随机失败,偶尔上电能工作,偶尔不行。

2. 复位释放后,第一拍数据不可靠

即使没有明显亚稳态,也可能出现:

  • 复位释放的时钟周期内,locked 还未完全稳定

  • 部分寄存器提前退出复位,部分还卡在复位

  • 组合逻辑路径上出现短时冒险

这类问题极难复现和定位

3. PLL 短暂失锁会复位整板(设计上不想要)

你的系统时钟完全依赖这个 PLL。如果:

  • 输入电源抖动

  • 温度变化

  • 输入时钟短暂异常

导致 PLL 重新锁定,locked 会短暂变低再变高。此时:

  • 整板复位

  • 系统时钟一直存在(但短暂不稳定)

  • 系统状态被清空

这在很多产品里是不可接受的(例如正在传输数据、正在控制电机)。


✅ 正确做法(对你这个结构是最匹配的)

因为你系统时钟就来自这个 PLL,最标准、最安全的做法是:

用一个简单的同步器,把 locked 变成同步复位释放

电路结构:

text

复制

下载

复制代码
locked ──┬──→ DFF1 ──→ DFF2 ──→ 全局复位输出
         │          ↑               ↑
         └─ 异步清零 │               │
                    └─ 都用 clk_sys ┘

效果:

  • 复位释放与 clk_sys 完全同步

  • 消除亚稳态

  • PLL 短暂失锁不会立刻复位(取决于你设计)

代码示例(直接可用)

verilog

复制

下载

复制代码
module pll_reset_sync (
    input  wire clk_sys,      // 来自同一个PLL的系统时钟
    input  wire locked,       // PLL的锁定信号
    output wire sys_rst_n     // 安全、同步的复位信号
);

reg rst_meta, rst_sync;

always @(posedge clk_sys or negedge locked) begin
    if (!locked) begin
        rst_meta <= 1'b0;
        rst_sync <= 1'b0;
    end else begin
        rst_meta <= 1'b1;
        rst_sync <= rst_meta;
    end
end

assign sys_rst_n = rst_sync;

endmodule

然后你把 sys_rst_n 给所有模块用,而不是直接给 locked


🔁 和"外部复位 + PLL"的区别

你可能见过另一种常见方案:

  • 外部复位芯片 / 按钮 → 异步复位

  • PLL 锁定 → 释放复位

那种场景下,复位源不是 PLL 自身,问题轻一些。

但在你的情况下:

  • 复位源 = PLL

  • 时钟源 = PLL

  • 两者高度耦合

异步释放风险 + 复位 / 时钟同时建立 → 更容易出问题。

相关推荐
坏孩子的诺亚方舟5 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐6 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐6 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH7 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡7 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安7 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐8 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯8 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客8 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA8 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发