时间:2026-08-13 来源:FPGA_UCY 关于我们 0
在FPGA开发中,频率测量是一个既基础又考验功底的课题。无论是通信系统中的载波同步、电机控制里的转速反馈,还是数字信号处理与系统时钟监控,准确获取信号频率都是第一步。
针对不同的频段和精度要求,工程上通常有四种处理思路。理解它们的底层逻辑和误差来源,是选型的前提。
![]()
第1种:直接测频法(计数法)
这是最直观的逻辑:设定一个固定时间的闸门(比如精确的1秒),在这个时间内去数被测信号产生了多少个上升沿。
• 优点: 逻辑极简,高频测量准。
• 缺点: 低频极差。因为闸门开启和关闭的瞬间,是由系统内部时钟决定的,无法和被测信号同步。这就不可避免地会产生 ±1 个脉冲的误差。被测频率越低,这 ±1 个脉冲占总数的比例就越大,相对误差直接失控。
第2种:测周法(周期法)
直接测频的镜像方案:以被测信号的一个(或整数 N 个)周期作为闸门,在这个闸门内去数内部高频基准时钟的脉冲数。
• 优点: 低频测量精度高。
• 缺点: 高频测量误差大,动态范围窄。被测频率越高,闸门时间就越短,计得的基准时钟脉冲数越少。此时,基准时钟自身的 ±1 误差带来的影响就会急剧放大。
第3种:等精度测频法(工程首选)
为了解决前两者的短板,等精度测频法应运而生。它巧妙地结合了计数法和测周法,使得相对误差在整个测量频段内保持恒定。
它的核心机制是 同步闸门 :软件先给出一个预设闸门(软件闸门),但这只是一个准备信号。真正的测量闸门(实际闸门)是由被测信号的上升沿触发开启,并在被测信号的下一个上升沿(软件闸门关闭后)触发关闭。
在这个实际闸门内,FPGA同时对“被测信号”和“高频基准时钟”进行计数。由于实际闸门和被测信号严格同步,被测信号的 ±1 误差被物理消除。误差被全部转移到了高频的基准时钟上,只要基准时钟频率足够高,整体相对误差就能压制在极低水平。
第4种:游标卡尺法/内插法
当等精度测频也无法满足需求(例如需要皮秒级的时间分辨率,常见于激光测距或高端示波器)时,就需要利用FPGA内部的进位链(Carry Chain)或延迟线构成时间数字转换器(TDC)。通过测量不到一个时钟周期的细微相位差来提高精度。这种方法极度消耗资源,且严重依赖具体的FPGA底层架构和布线,属于特定领域的进阶方案。
![]()
等精度测频的Verilog核心实现
以下是等精度测频的核心逻辑片段。重点在于实际闸门的生成以及两个独立时钟域的计数。
// 假设 soft_gate 是由系统控制模块给出的软件闸门(高电平有效,持续时间例如1秒)
// soft_gate 已经同步到了 clk_fx (被测时钟) 域
reg actual_gate_fx;
reg fx_cnt;
reg ref_cnt;
// 1. 在被测时钟域生成实际闸门
// 实际闸门与被测信号(clk_fx)严格对齐,消除了 clk_fx 的 ±1 误差
always @( posedge clk_fx or negedge rst_n) begin
if (!rst_n) begin
actual_gate_fx