1

我正在(慢慢地)学习关于使用 Xilinx Spartan-6 评估板进行 FPGA 编程的“入门”课程,并且正在研究时钟时序以及如何添加必要的时序约束。这让我想到了几个问题。对于这个演示,我使用了一个简单的程序来让 LED 闪烁(代码在底部)。

然后我将此约束添加到我的约束文件中:

NET "CLK" TNM_NET = CLK;
TIMESPEC TS_CLK = PERIOD "CLK" 200 MHz HIGH 50%; # What effect does the 200 Mhz enforce?

约束实际执行的是什么?因为当我尝试缩放它以使 LED 以 1 Hz 闪烁时,我发现无论我设置 200 MHz 的时序约束还是任何其他数字都没有区别!

非常感谢!我的整个源代码如下供参考。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity LED_Blink is
    port(
        CLK : in  std_logic;
        LED        : out std_logic
    );

end LED_Blink;

architecture Behavioral of LED_Blink is
    signal CLK_1Hz : std_logic;
    signal counter : std_logic_vector(26 downto 0);
begin
    prescaler : process(CLK)
    begin
        if rising_edge(CLK) then
            if (counter < 1000000) then --possibly change to number in binary
                counter <= counter + 1;
            else
                CLK_1Hz <= not CLK_1Hz;
                counter <= (others => '0');
            end if;
        end if;
    end process;

    LED <= CLK_1Hz;

end Behavioral;

NET "CLK" LOC ="K21";
NET "LED" LOC = "D21";
NET "CLK" TNM_NET = CLK;
TIMESPEC TS_CLK = PERIOD "CLK" 5 ns HIGH 50%;
4

1 回答 1

3

时序约束是静态时序分析 (STA) 的参数。像 Xilinx 这样的 STA 工具trace可以告诉您您的代码(生成、映射、布局和最终布线的网表)是否满足所有时序要求。

您描述的电路的每个部分(LUT、寄存器和电线)都有延迟。STA 确保​​您的整体延迟小于您的时钟周期减去一些不确定性。(有关“设置”和“保持”时间的更多信息,请参阅赛灵思时序指南。)

因此,设置CLK为 200 MHz 会检查您的电路是否会以高达 200 MHz 的频率运行。它不会像闪烁频率那样改变行为。

于 2015-11-02T21:53:53.503 回答