реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> проблема с клоками в spartan-6
novartis
сообщение Jul 3 2015, 05:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Добрый день.
Имеется плис Spartan-6 xc6slx16-2csg324.
В плис приходит тактовая clk = 25MHz. Приходит на dedicated clock pin.
К плис подключен датчик.
От плис к датчику уходит клок dclk и сигнал старта работы. По даташиту dclk может быть 0.1 - 120МГц.
От датчика в плис возвращается dclk_out, data_valid, data[9:0].
Плату делали универсальную, с разъемом, к которому можно было бы подключать разные датчики,
какие то dedicated clock pin для этого разъема не предусмотрели.
Поэтому dclk и dclk_out попадают на обычные io ноги.

Проект я создал, все работает, данные от датчика приходят.
Но остаются сомнения о правильности работы с dclk и dclk_out.

Сейчас clk подаю на clk_wiz. Из него выходит клок clk_wiz_out. Пока 5 мгц, но в планах поднять до 240МГц.
Выходной клок clk_wiz_out подать на dclk не удалось, так как clk_wiz_out проходит через BUFG, а BUFG клок нельзя подать на io ногу.
ISE ругается
Код
    ERROR:Place:1136 - This design contains a global buffer instance,
   <clk_wiz_v3_6_inst/clkout1_buf>, driving the net, <dclk_OBUF>, that is
   driving the following (first 30) non-clock load pins.
   < PIN: dclk.O; >
   This is not a recommended design practice in Spartan-6 due to limitations in
   the global routing that may cause excessive delay, skew or unroutable
   situations.  It is recommended to only use a BUFG resource to drive clock
   loads. If you wish to override this recommendation, you may use the
   CLOCK_DEDICATED_ROUTE constraint (given below) in the .ucf file to demote
   this message to a WARNING and allow your design to continue.
   < PIN "clk_wiz_v3_6_inst/clkout1_buf.O" CLOCK_DEDICATED_ROUTE = FALSE; >

Поэтому сформировал новый клок
process(clk_wiz_out)
begin
if (rising_edge(clk_wiz_out)) then
clk_int <= not clk_int;
end if;
end process;

Его то и выдаю как dclk.

Та же беда с dclk_out. Хотел тактировать им процесс и в нем работать с data_valid и data[9:0].
Но если написать
process(dclk_out)
begin
if (rising_edge(dclk_out)) then
...
end if;
end process;
то ISE опять ругается
Код
   ERROR:Place:1108 - A clock IOB / BUFGMUX clock component pair have been found
   that are not placed at an optimal clock IOB / BUFGMUX site pair. The clock
   IOB component <dclk_out> is placed at site <L14>. The corresponding BUFG
   component <dclk_out_BUFGP/BUFG> is placed at site <BUFGMUX_X2Y10>. There is
   only a select set of IOBs that can use the fast path to the Clocker buffer,
   and they are not being used. You may want to analyze why this problem exists
   and correct it. If this sub optimal condition is acceptable for this design,
   you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote
   this message to a WARNING and allow your design to continue. However, the use
   of this override is highly discouraged as it may lead to very poor timing
   results. It is recommended that this error condition be corrected in the
   design. A list of all the COMP.PINs used in this clock placement rule is
   listed below. These examples can be used directly in the .ucf file to
   override this clock rule.
   < NET "dclk_out" CLOCK_DEDICATED_ROUTE = FALSE; >

Поэтому data_valid и data[9:0] обрабатываю под clk_int. Но это не правильно.

Кто что посоветует?
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Jul 3 2015, 05:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
you may use the CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote
this message to a WARNING and allow your design to continue


все клоки в плис идут по специальным путям. Клоковые ноги к путям близки, а обычные далеки. Все что вы хотите использовать как клок, ПЛИС сначала заведет на этот спец путь, на дерево клоков. Вам написали большое письмо что вы используете не ту ногу, это грозит проблемами, но дали пути отступления, если вы точно знаете что делаете можете написать констраин и все поедет дальше.

Собственно чем вам это все грозит: Путь распространения сигнала не от специальной ноги до клокового дерева достаточно длинный, потому это породить достаточно большую задержку между клоком видным в ПЛИС и клоком на ноге. Потому надо очень точно задать констраины появления данных от фронта сигнала клока (OFFSET IN OFFSET OUT) чтобы синтезатор проверил что все хорошо пройдет. Если в констраины все вложиться, то разницы с использованием спец клок ноги не будет, а если нет, тоды ой%)

Цитата
Выходной клок clk_wiz_out подать на dclk не удалось, так как clk_wiz_out проходит через BUFG, а BUFG клок нельзя подать на io ногу.
ISE ругается


Подать конечно же можно, вопрос в качестве этого клока. Он опять же пойдет через длинный путь от клокового дерева до ноги и выход клока будет с задержками, вам там опять предлагают поклясться что знаете что делаетеsm.gif но есть решение получше, странно что его не предложил синтезатор, мне вроде предлагал.

на всех IO ногах спартана6 есть DDR, при помощи которого можно формировать клок, для этого даже есть темплайт на сайте ксалинкса и интернете, найдите в тимплайтах ISE DDR
он принимает на вход D0, D1 и С0, С1, на D0 подаете 1, на D1 подаете 0. На клоки подаете клок и инверсный клок. Это фактически создаете драйвер клока на выходной ноге.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.0133 секунд с 7
ELECTRONIX ©2004-2016