Здравствуйте! 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) объясняют синхронизацию внутри ПЛИС.
Спасибо!
|