RTL Verilog (FPGA) 可综合代码的时钟转换

Clock Conversion for RTL Verilog (FPGA) Synthesizable Code

将 FPGA 上的 12 MHz 系统时钟信号转换为 50% 占空比的 1 MHz 信号输出。

我知道我需要除以 2 @ 50/50 占空比得到 6 MHz,然后再除以 2 得到 3 MHz,然后除以 3 得到 1 MHz。这是正确的方法吗?

此外,我将如何在 RTL Verilog 代码中实现它?

Is this the correct method?

没有。首先,在逻辑中对时钟进行操作通常很难适当地布线,尤其是在多级中。其次,在没有负边沿或 DDR 触发器的情况下将时钟除以 3 并获得 50% 的占空比特别困难,这两者在 FPGA 结构中通常不可用。

正确的方法是使用FPGA的时钟资源。大多数现代 FPGA 将具有一个或多个板载 DLL 或 PLL,可用于管理时钟信号。

在 Xilinx 部件上,这些资源被称为 DCM、PLL、and/orMMCM,并且可以使用 ClockGen IP 内核实例化。

在 Altera/Intel 部分,可以通过 PLL 和其他宏功能配置这些资源。

在 Lattice 部件上,这些资源被称为 sysCLOCK PLL,可以使用 IPexpress 进行配置。