Добрый день.
Имеется плис 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. Но это не правильно.
Кто что посоветует?