使用时序约束设置 FPGA 时钟频率
Setting FPGA clock frequency using Timing Constraints
我正在(慢慢地)通过 "introductory" course 使用 Xilinx Spartan-6 Eval Board 进行 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%;
时序约束是静态时序分析 (STA) 的参数。像 Xilinx trace
这样的 STA 工具可以告诉您代码(生成、映射、布局和最终布线的网表)是否满足所有时序要求。
您描述的电路的每个部分(LUT、寄存器和电线)都有延迟。 STA 确保总延迟小于您的时钟周期减去一些不确定性。 (有关 'setup' 和 'hold' 时间的更多信息,请参阅 Xilinx 时序指南。)
因此,将 CLK
设置为 200 MHz 可检查您的电路是否会 运行 达到 200 MHz。它不会像闪烁频率那样改变行为。
我正在(慢慢地)通过 "introductory" course 使用 Xilinx Spartan-6 Eval Board 进行 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%;
时序约束是静态时序分析 (STA) 的参数。像 Xilinx trace
这样的 STA 工具可以告诉您代码(生成、映射、布局和最终布线的网表)是否满足所有时序要求。
您描述的电路的每个部分(LUT、寄存器和电线)都有延迟。 STA 确保总延迟小于您的时钟周期减去一些不确定性。 (有关 'setup' 和 'hold' 时间的更多信息,请参阅 Xilinx 时序指南。)
因此,将 CLK
设置为 200 MHz 可检查您的电路是否会 运行 达到 200 MHz。它不会像闪烁频率那样改变行为。