FPGA 时钟频率计算与单位换算

FPGA 开发中时钟频率计算与单位换算是核心基础,直接影响时序逻辑正确性。以下从基础规则到实际应用场景,结合实例说明核心计算方法与换算规则。

一、核心基础:频率与周期关系 + 单位换算

1. 核心公式

时钟频率(f)表示单位时间内时钟翻转次数,时钟周期(T)表示一次完整时钟循环的时间,二者互为倒数:

plaintext

复制代码
频率(f) = 1 / 周期(T)
周期(T) = 1 / 频率(f)

2. 常用单位及换算规则(十进制)

FPGA 时钟相关单位采用十进制换算(区别于存储单位的二进制换算),核心单位对应关系如下:

维度 单位 符号 与基础单位的换算 常用场景
频率 赫兹 Hz 基础单位 极低频率(极少用)
千赫 kHz 1kHz = 10³ Hz 低速外设时钟
兆赫 MHz 1MHz = 10⁶ Hz = 10³ kHz FPGA 核心时钟(50/100MHz)
吉赫 GHz 1GHz = 10⁹ Hz = 10³ MHz 高端 FPGA 高速时钟
周期 秒 s 基础单位 无实际 FPGA 场景
毫秒 ms 1ms = 10⁻³ s 低速控制逻辑
微秒 us 1us = 10⁻⁶ s = 10⁻³ ms 中速外设(如 UART)
纳秒 ns 1ns = 10⁻⁹ s = 10⁻³ us FPGA 核心时钟周期(20ns=50MHz)
皮秒 ps 1ps = 10⁻¹² s = 10⁻³ ns 高速接口时序(如 DDR)

3. 基础换算示例(FPGA 常用)

  • 50MHz 时钟的周期计算:T = 1 / 50×10⁶ Hz = 20×10⁻⁹ s = 20ns
  • 10ns 周期的时钟频率计算:f = 1 / 10×10⁻⁹ s = 100×10⁶ Hz = 100MHz
  • 25MHz 晶振的周期:T = 1 / 25×10⁶ = 40ns

易错点:频率 / 周期单位为十进制(1MHz=10⁶Hz),不可与存储单位的二进制(1KB=1024B)混淆。

二、FPGA 中时钟频率的实际计算场景

FPGA 时钟主要来源于外部晶振,结合内置 PLL/MMCM 或逻辑代码分频,得到设计所需时钟频率,核心场景如下:

场景 1:外部晶振输入的基础计算

FPGA 输入时钟由外部无源 / 有源晶振提供,晶振标注频率即为输入时钟的基础频率,无需额外计算。

  • 常用晶振规格:25MHz、50MHz、100MHz、125MHz;
  • 示例:板卡焊接 50MHz 晶振 → FPGA 输入时钟频率 = 50MHz,周期 = 20ns;焊接 25MHz 晶振 → 周期 = 40ns。

场景 2:PLL/MMCM 倍频 / 分频后的频率计算

FPGA 内置 PLL(锁相环)/MMCM(混合模式时钟管理器)可实现时钟倍频、分频、相位偏移,计算公式:

plaintext

复制代码
输出频率 = 输入时钟频率 × (倍频系数 / 分频系数)
具体示例
  • 输入 50MHz 晶振,PLL 倍频系数 = 2,分频系数 = 1 → 输出频率 = 50×(2/1)=100MHz;
  • 输入 100MHz,PLL 分频系数 = 4,倍频系数 = 1 → 输出频率 = 100×(1/4)=25MHz;
  • 输入 25MHz,PLL 倍频 = 6、分频 = 3 → 输出频率 = 25×(6/3)=50MHz;
  • 输入 125MHz,MMCM 倍频 = 1、分频 = 5 → 输出频率 = 125×(1/5)=25MHz。

场景 3:逻辑代码实现的计数器分频(整数分频)

通过计数器实现整数分频是 FPGA 常用的软分频方式,核心规则:

plaintext

复制代码
输出频率 = 输入频率 / 分频系数(N)
示例:50MHz 时钟二分频得到 25MHz(偶数分频)

systemverilog

复制代码
module clk_div2(
    input  logic clk_50m,  // 输入50MHz时钟(20ns周期)
    input  logic rst_n,    // 异步复位(低有效)
    output logic clk_25m   // 输出25MHz时钟(40ns周期)
);

logic [0:0] cnt; // 1位计数器(二分频只需1位)

always @(posedge clk_50m or negedge rst_n) begin
    if(!rst_n) begin
        cnt <= 1'b0;
        clk_25m <= 1'b0;
    end else begin
        cnt <= cnt + 1'b1;
        if(cnt == 1'b1) begin // 计数到"分频系数-1"(2-1=1)
            clk_25m <= ~clk_25m; // 翻转输出时钟
            cnt <= 1'b0; // 计数器清零
        end
    end
end

endmodule
计算验证

输入 50MHz,分频系数 = 2 → 输出频率 = 50/2=25MHz,周期 = 40ns,符合预期。

补充:奇数分频(如三分频)

50MHz 时钟三分频,输出频率 = 50/3≈16.6667MHz,周期 = 60ns(代码需调整,核心公式不变)。

三、核心总结

  1. 核心计算依据:频率 = 1 / 周期,周期 = 1 / 频率,所有时钟计算均基于此公式;
  2. 单位换算规则:频率 / 周期采用十进制(1MHz=10⁶Hz,1ns=10⁻⁹s),避免与二进制存储单位混淆;
  3. 实际应用计算:晶振频率为输入基础,PLL/MMCM 按「输入频率 ×(倍频 / 分频)」计算,逻辑分频按「输入频率 / 分频系数」计算。
相关推荐
XMAIPC_Robot3 小时前
基于 i.MX95 平台在新一代工业控制器中的应用 — 工业车载平板、半导体设备主控方案解析
arm开发·人工智能·机器学习·fpga开发·rk3588+fpga·i.mx95
szxinmai主板定制专家3 小时前
基于 AM62x + Artix-7 的低功耗 ARM+FPGA 平台在轨道交通车门控制中的应用
arm开发·人工智能·fpga开发·zynq·am62x
幻智星科技4 小时前
我砍掉了FPGA里的ARM核项目反而提前交付了
arm开发·网络协议·fpga开发·硬件架构
逐光者9334 小时前
Verilog 三段式状态机:原理、模板与实战
fpga开发
XMAIPC_Robot4 小时前
NXP i.MX95 + FPGA 异构计算平台 — 工业多域融合 AI 加速嵌入式控制解决方案
人工智能·分布式·fpga开发·能源·rk3576+fpga
FPGA小迷弟17 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整指南
fpga开发·dsp开发·fpga·1024程序员节·sdr·无线电
专注仿真1 天前
Vivado FPGA 开发实战项目:从入门到上板
fpga开发
NamoAmitabha1281 天前
BSP,板级支持包--deepseek
单片机·嵌入式硬件·fpga开发
szxinmai主板定制专家1 天前
ARM 还是 x86?CODESYS 数控机床控制器选型、FPGA 取舍与实时性真相
arm开发·人工智能·fpga开发·zynq·1024程序员节·codesys
星夜离尘562 天前
FPGA 小数据字如何纠错:完整实现并验证扩展 Hamming (13,8) SECDED
fpga开发