将 FPGA 上的 12 MHz 系统时钟信号转换为 50% 占空比的 1 MHz 信号输出。
我知道我需要在 50/50 占空比下除以 2 以获得 6 MHz,然后再除以 2 以达到 3 MHz,然后除以 3 以达到 1 MHz。这是正确的方法吗?
另外,我将如何在 RTL Verilog 代码中实现这一点?
将 FPGA 上的 12 MHz 系统时钟信号转换为 50% 占空比的 1 MHz 信号输出。
我知道我需要在 50/50 占空比下除以 2 以获得 6 MHz,然后再除以 2 以达到 3 MHz,然后除以 3 以达到 1 MHz。这是正确的方法吗?
另外,我将如何在 RTL Verilog 代码中实现这一点?
这是正确的方法吗?
不会。首先,在逻辑时钟上运行通常很难正确布线,尤其是在多级中。其次,在没有下降沿或 DDR 触发器的情况下,将时钟除以 3 并获得 50% 的占空比是特别困难的,这两者在 FPGA 架构中通常是不可用的。
正确的方法是使用 FPGA 的时钟资源。大多数现代 FPGA 将具有一个或多个板载 DLL 或 PLL,可用于管理时钟信号。
在赛灵思器件上,这些资源称为 DCM、PLL 和/或 MMCM,可以使用 ClockGen IP 内核进行实例化。
在 Altera/Intel 部件上,这些资源可以通过 PLL 和其他宏功能进行配置。
在 Lattice 器件上,这些资源称为 sysCLOCK PLL,可以使用 IPexpress 进行配置。