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 按「输入频率 ×(倍频 / 分频)」计算,逻辑分频按「输入频率 / 分频系数」计算。
相关推荐
h×31 小时前
FPGA视频4分屏项目 - 系统架构详细讲解
fpga开发·音视频
秋91 小时前
硬件工程师全岗位薪资全景解析(2026版):IC设计·嵌入式·板级硬件·FPGA·晶圆制造
fpga开发·制造
博览鸿蒙2 小时前
FPGA 工程师到底有哪些方向?每个岗位都在干什么?一篇给你讲清楚
fpga开发
xiaojiaohuazi12 小时前
国产安陆EG4S20 FPGA实现千兆以太网TCP/IP:AD7606C 8通道1 MSPS采集、SDRAM缓存与Python上位机
tcp/ip·缓存·fpga开发
尤老师FPGA12 小时前
HDMI数据的接收发送实验(二十四)
fpga开发
MDYFPGA13 小时前
明德扬 Kintex-7 FPGA核心板及多接口扩展底板介绍
fpga开发·fpga
I'm a winner13 小时前
【源码】一文读懂 TDOA 无源时差定位原理
fpga开发
FPGA小迷弟13 小时前
FPGA复位策略深度解析:异步复位、同步释放与设计最佳实践
fpga开发·fpga
MDYFPGA13 小时前
Arria 10 10AX027 核心板适合哪些高速数据处理项目
fpga开发·fpga