【发布时间】:2013-03-06 10:37:39
【问题描述】:
(我会在 EE 中发布此内容,但这里似乎有更多 VHDL 问题...)
背景:我正在使用 Xilinx Spartan-6LX9 FPGA 和 Xilinx ISE 14.4 (webpack)。
我今天偶然发现了可怕的“PhysDesignRules:372 - 门控时钟”警告,我看到有很多关于这个的讨论。共识似乎是使用 FPGA 上的 DCM 之一进行时钟分频,但是......我的 DCM 似乎无法从 32 MHz 变为 4.096 KHz(根据向导,它在 5MHz 时触底32MHz...为了这个低频目的而尝试链接多个 DCM 似乎很荒谬)。
我当前的设计使用 clk_in 计数到指定值 (15265),将该值重置为零并切换 clk_out 位(因此我最终得到 50% 的占空比,FWIW)。它完成了这项工作,我可以轻松地使用 clk_out 的上升沿来驱动我设计的下一阶段。它似乎工作得很好,但是...... 门控时钟(即使它不在恕我直言时钟偏差非常相关的范围内)。 (注意:所有时钟测试都是在对给定时钟敏感的进程中使用rising_edge() 函数完成的。)
所以,我的问题:
如果我们谈论的是从 快得多 clk_in 导出相对较慢的 clk_out,门控仍然被认为是坏的吗? 或者这种“计数到 x 并发送脉冲”的事情非常典型对于 FPGA 来生成 KHz 范围内的“时钟”,而其他一些不必要的副作用可能会触发而不是这个警告?
有没有更好的方法从 MHz 范围的主时钟创建一个低 KHz 范围的时钟,请记住,在这里使用多个 DCM 似乎是多余的(如果有可能的话,因为输出非常低频率)?我意识到 50% 的占空比可能是多余的,但假设一个时钟输入并且不使用板载 DCM,否则如何使用 FPGA 执行主要时钟分频?
编辑:鉴于以下情况(其中 CLK_MASTER 是 32 MHz 输入时钟,CLK_SLOW 是所需的慢速时钟,LOCAL_CLK_SLOW 是一种存储整个占空比的时钟状态的方法),我了解到此配置会导致警告:
architecture arch of clock is
constant CLK_MASTER_FREQ: natural := 32000000; -- time := 31.25 ns
constant CLK_SLOW_FREQ: natural := 2048;
constant MAX_COUNT: natural := CLK_MASTER_FREQ/CLK_SLOW_FREQ;
shared variable counter: natural := 0;
signal LOCAL_CLK_SLOW: STD_LOGIC := '0';
begin
clock_proc: process(CLK_MASTER)
begin
if rising_edge(CLK_MASTER) then
counter := counter + 1;
if (counter >= MAX_COUNT) then
counter := 0;
LOCAL_CLK_SLOW <= not LOCAL_CLK_SLOW;
CLK_SLOW <= LOCAL_CLK_SLOW;
end if;
end if;
end process;
end arch;
而此配置不会导致警告:
architecture arch of clock is
constant CLK_MASTER_FREQ: natural := 32000000; -- time := 31.25 ns
constant CLK_SLOW_FREQ: natural := 2048;
constant MAX_COUNT: natural := CLK_MASTER_FREQ/CLK_SLOW_FREQ;
shared variable counter: natural := 0;
begin
clock_proc: process(CLK_MASTER)
begin
if rising_edge(CLK_MASTER) then
counter := counter + 1;
if (counter >= MAX_COUNT) then
counter := 0;
CLK_SLOW <= '1';
else
CLK_SLOW <= '0';
end if;
end if;
end process;
end arch;
所以,在这种情况下,这完全是因为缺少 else(就像我说的,50% 占空比最初很有趣,但最终不是必需的,“本地”时钟位的切换似乎当时很聪明...)我大部分时间都在正确的轨道上。
目前我还不清楚为什么使用计数器(存储大量位)不会导致警告,但存储和切换输出位会导致警告。 想法?
【问题讨论】: