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 进行配置。
将 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 进行配置。