基于 FPGA 的数字频率计设计与实现
数字频率计是测量信号频率的重要工具。普通万用表精度有限,示波器操作复杂,而基于 FPGA 的方案可实现快速、精准且可定制的测量。本文介绍一套完整工程级方案,覆盖从微弱信号采集到纳秒级时间计量的全过程。
为什么使用 FPGA 做频率计
相比单片机,FPGA 具有速度和确定性优势。传统 MCU 依靠中断或定时器轮询,响应延迟可能影响高频信号测量(如 100 MHz)。FPGA 支持硬件并行运行,可实现全流水线化的测频引擎,在纳秒级完成计数、数据打包和模式切换,适用于通信系统时钟监控、雷达回波分析等对高频、低抖动有要求的应用。
核心架构设计
一个可用的数字频率计需解决信号调理、时间基准、低频测量及资源组织等问题。系统以 FPGA 为核心,协调以下模块:
- 前端调理电路:将正弦/小信号变换成标准方波。
- PLL 锁相环:外接 10MHz 温补晶振,提供精准时间基准。
- 主控状态机:控制测量流程。
- 高速计数器:统计单位时间内脉冲数(测频法)。
- 周期测量模块:精确捕捉单个周期长度(测周法)。
- 自动量程切换逻辑:动态选择最优算法。
- 结果缓存与打包:FIFO + 数据格式化。
- 通信接口:UART / Ethernet,连接上位机或 LCD。
第一步:输入信号调理
现实信号可能包含噪声、负电压或幅度不足。直接接入 FPGA IO 可能导致误触发或损坏。需设计前端调理电路:
- 保护:输入端加 TVS 二极管和限流电阻(如 1kΩ)。
- 放大整形:使用高速比较器(如 ADCMP600),响应时间<5ns,搭配迟滞反馈提升抗干扰能力。
- 电平匹配:确保输出符合 FPGA 的 LVCMOS 输入标准(3.3V 或 1.8V)。
- 阻抗匹配:输出端串联小电阻(约 22Ω)减少反射。
⚠️ 注意:不要依赖 FPGA 内部施密特触发输入做主要整形,其滞后电压不精确。
对于超过 100 MHz 的射频信号,建议外接预分频器芯片(如 MC12090),先将频率降至 50 MHz 以内。
第二步:高稳定性时间基准
频率是单位时间内的事件次数,参考时钟必须精确。选用 10 MHz 温补晶振(TCXO),日老化率优于±0.5 ppm。通过 FPGA 内部 PLL 倍频至 100 MHz 或更高作为主时钟。
| 功能 | 作用 |
|---|---|
| 倍频 | 将 10 MHz → 100 MHz,提升时间分辨率 |
| 相位校正 | 消除时钟路径延迟,确保全局同步 |
| 抖动抑制 | 输出时钟 RMS 抖动可控制在 50 ps 以内 |
| 多路输出 | 同时生成多个同源时钟 |
设计建议:使用 Xilinx IP Catalog 或 Intel Quartus MegaWizard 配置 PLL;在约束文件中声明时钟参数;开启 Global Clock Buffer。
第三步:测频法与测周法
单一方法无法覆盖全频段,需结合两种策略。
方法一:直接测频法(适合中高频)
打开已知宽度的闸门(如 1 秒),统计上升沿数量。 $$ f = \frac{N}{T} $$ 若 $ T = 1,\text{s} $,则 $ N $ 即为频率。低频时误差大。
方法二:测周法(专治低频)
精确测量一个周期长度,取倒数。 $$ f = \frac{1}{t_{\text{period}}} $$ 利用 100 MHz 时钟(10 ns 分辨率)测量周期,低频段分辨率极高。

