为什么在 FPGA 设计中使用多个相同速度的时钟?

Why use multiple clocks of the same speed in an FPGA design?

我最近开始尝试使用 FPGA。在研究网络上的事物时,我在几个地方注意到设计可能使用多个速度完全相同的独立 PLL 时钟。这是为什么?

我举的一个例子是这个网站:Parallella Linux Quick Start

他们的 FCLK_CLK1 和 FCLK_CLK2 都是 200MHz。为什么推荐这个而不是 200MHz 的单个时钟?是否只是习惯给每个主要组件自己的时钟,即使它们是相同的?还是我遗漏了什么?

使用速度完全相同的多个时钟的原因有很多。所以我只说几个。但是我对你的例子没有任何深入的了解。

  • FPGA 上的魔法。

如评论中所述,FPGA 是一种高度复杂的设备。只有供应商确切知道那里发生了什么,所以他们可能会给你一些建议,这可能很奇怪。

  • 时钟分配。

如果您的设计只有一个时钟源,正确布线时钟至关重要。时钟必须同时在所有地方触发,这对于 PnR 工具来说很难管理。现在的FPGA一般不会有这个问题。

  • 一个 FPGA 上的不同 IP。

如果您有不同的 IPs/Designs,它们融合在一个 FPGA 上,IP 可以使用不同的时钟。如果你想稍后再拆分它,无论如何你都需要多个时钟源。此外,如果您切换时钟域并且在合并您的 IP 期间,您将被迫实现一些寄存器,您不会混淆所有东西,这是一种很好的设计风格。这也可能是你的例子。

HDMI support is provided by an IP core from Analog Devices ...

  • 输出。

也许附加时钟仅在某些I/O端口用作输出。

  • 低功耗。

在当今的 CMOS 技术中,大部分功率都浪费在转换(晶体管开关)和静态功率泄漏(该死的东西太小了,它只是泄漏电流)上。使用多个时钟域,您有机会减少每秒的转换。或者您可以完全关闭设备的某些部分。

除了已经提到的原因之外,还有多个其他原因可能存在两个相同速度的 PLL 时钟。

即使频率完全相同,时钟相位或抖动也可能存在差异。使用一个具有固定时钟相位的 PLL 和另一个具有可调时钟相位的 PLL 可用于正确采样外部输入信号或保持时钟和输出数据之间的正确相位差。在 IDELAY 和 ODELAY 等组件广泛可用之前,此类技术特别流行。

Crystal 振荡器也将与其标记值有小的偏差。如果您在两块板之间进行通信 link,并且两块板都有自己的振荡器,那么一块板的主时钟可能 运行 为 200.01 Mhz,而其他板可能 运行 为 199.99 Mhz。在许多情况下,两个 FPGA 都会将其本地生成的低抖动时钟作为主时钟,但也会使用远程时钟对输入数据进行采样。您可以在以太网 PHY 中看到这一点:100 Mbit PHY 通常具有从输入信号恢复的 25 Mhz 接收时钟和本地生成的 25 mhz 传输时钟。