Здравствуйте!
Xilinx ISE 12.3, SPARTAN 6
Есть два кода :
1) entity clkdist is
port(
clk_in : in std_logic;
clk_out : out std_logic
);
end clkdist;
architecture Behavioral of clkdist is
begin
clk_out <= clk_in;
end Behavioral;
2) myclk - PLL умножающая входную частоту на 2.
--//---//--
architecture Behavioral of clkdist is
component myclk
port
(
CLK_IN1 : in std_logic;
CLK_OUT1 : out std_logic
);
end component;
begin
your_instance_name : myclk
port map
(
CLK_IN1 => clk_in,
CLK_OUT1 => clk_out);
end Behavioral;
На этапе Implement Design первый код проходит нормально, и я наблюдаю частоту входную на соответствующем выводе ПЛИС в "железе". Но второй код на этапе mapping приводит к такой ошибке :
This design contains a global buffer instance,
<your_instance_name/clkout1_buf>, driving the net, <clk_out_OBUF>, that is
driving the following (first 30) non-clock source pins off chip.
< PIN: clk_out.O; >
This design practice, in Spartan-6, can lead to an unroutable situation due
to limitations in the global routing. If the design does route there may be
excessive delay or skew on this net.
Вот мои предположения : В первом случае используются общие пути для передачи сигналов, не специальная сеть для передачи синхросигнала. Во втором случае задействуется та самая clock сеть, потому что на вход PLL должен поступить сигнал только с этой сети. А выход PLL идет на non-clock source pins off chip. И нельзя его физически соединить с этим non - clock. Я верно предполагаю?
Я пока не могу одолеть эти Clock Resources, чтобы точно знать, когда пишу на HDL, как подведется clock к триггерам, как к pll , как от pll к триггерам, и другие ситуации. Чтение Clock resources Spartan 6 pdf сложно дается, они сыплют своими примитивами, и расположением , что теряется общее представление системы синхронизации.
Есть ли у кого нибудь хорошие ссылки на статьи, сайты, как можно абстрактно(без примитивов, и расположения dedicated pins) объясняют синхронизацию внутри ПЛИС.
Спасибо!