Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: задержки выходных сигналов
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > ISA/PCI/PCI-X/PCI Express
qwqw
Делаю PCI 32 33 в Xilinx ISE,
Для PCI определена валидность сигнала на восходящем фронте, я не долго думая сделал все по нисподающему(только входные сигналы захватывал по положительному), устройство заработало, но при тестировании на др. матерях стало зависать. Перечитав спецификацию обнаружил странную вещь:
захватыать вх. сигналы, используя триггеры, тактируемые положительным фронтом небезопасно т.к Th(см. спецификацию) снизу ограничено 0 с., в то время, как любой триггер имеет некоторую задержку.
Какими же тогда фронтами(или одним) тактировать свою схему?
При всем при этом в моем проекте входные и выходные задержки (сигналов PCI относительно clk'а) составляют примерно 11 нс. Мне кажется, это слишком много, но если разработчики PCI изначально закладывали невозможность захвата сигнала по отриц. фронту, тоесть необходимость учитывать значительные задержки и с их учетом оперировать сигналами, тогда это вполне естественные величины.
Возможно я чего-то не понимаю и мой проект необходимо круто оптимизировать, поэтому хотелось бы узнать:
- величины задержек, которых добиватись другие (для сравнения)
- по каким фронтам #clk'а надо работать.
makc
В моем ядре все работает по нарастающему (положительному) фронту. Идея заключается в том, что несмотря на Th=0 все будет работать в том случае, если на плате сигнал CLK будет задержен. Т.е. дорожка этого сигнала преднамеренно делается удлиненной. Диапазон изменения длины этой трассы и прочее описано в спецификации.

PS: Обратите внимание, как разведена дорожка CLK на большинстве плат с интерфейсом PCI.
Gate
qwqw, не понял, что Вас смущает. Работать надо по фронту. На шине сначала появится фронт клока, затем через некоторое время (22 нс если не изменяет память) изменятся выходные сигналы - они будут зафиксированы приемником по следующему фронту клока. Или я не понял вопроса?
makc, я думаю, что Вы ошибаетесь: клок разводится цепью 2.5", а остальные сигналы не более 1.5", т.е разница 1" - на нем задержка что-нибудь около 0.2нс.
makc
Цитата(Gate @ Mar 11 2006, 00:28) *
makc, я думаю, что Вы ошибаетесь: клок разводится цепью 2.5", а остальные сигналы не более 1.5", т.е разница 1" - на нем задержка что-нибудь около 0.2нс.


Чем же тогда объясняется необходимость в этой разнице длин проводников клока и сигналов?
3.14
2 qwqw
Меня вот что смущает, Вы говорите я не долго думая сделал все по нисподающему(только входные сигналы захватывал по положительному), Вы не уточнили но думаю что задержка FFT -> PAD у Вас то же порядка 10-15нс. Та вот, когда матери тактируются по переднему фронту они просто обречены попадать на метастабильность.
Gate
Цитата(makc @ Mar 11 2006, 10:11) *
[Чем же тогда объясняется необходимость в этой разнице длин проводников клока и сигналов?

Имхо борьбой за минимальный skew clock - там ведь клок разводится звездой, а не по шине. А 2.5" взяли, посчитав, что этого хватит для всех типоразмеров плат.
Кстати, замечу, что более длинный путь клока приводит к уменьшению Thold на эти самые 0.2нс, а не к увеличению.
qwqw
2 makc: величина Th указана на диаграмме "Input Timing Measurement Conditions", тоесть она учитывает эту узадержку.
Поразмыслив, я решил сделать по положительному фронту, но вопрос остался открытым.
----
to 3.14: в моем случае опаздывали именно мои выходные сигналы, тоесть сигнал, который я выставлял но отрицательному фронту clk'а реально устонавливался только через 11ns (по спецификации к маменту наступления положительного фронта сигнал должен быть стабилен >7ns, см. Tsu )
v_mirgorodsky
Цитата
Для PCI определена валидность сигнала на восходящем фронте, я не долго думая сделал все по нисподающему(только входные сигналы захватывал по положительному), устройство заработало, но при тестировании на др. матерях стало зависать. Перечитав спецификацию обнаружил странную вещь:
захватыать вх. сигналы, используя триггеры, тактируемые положительным фронтом небезопасно т.к Th(см. спецификацию) снизу ограничено 0 с., в то время, как любой триггер имеет некоторую задержку.
Какими же тогда фронтами(или одним) тактировать свою схему?

Только по положительному. Входные пины современных FPGA имеют специальные схемы аналоговой задержки, обеспечивающие нулевое время удержания th, потому никаких проблем быть не должно.

Цитата
При всем при этом в моем проекте входные и выходные задержки (сигналов PCI относительно clk'а) составляют примерно 11 нс.

Вот здесь и есть ваша проблема. Задержка входного сигнала Tsetup не должна превышать 7ns. Могу с уверенностью сказать, что это возможно. Мы закончили наше PCI ядро около месяца назад. Именно с этим временем была связана основная головная боль и проблемы, однако при некоторых ухищрениях выдержать его все же возможно.
v_mirgorodsky
Цитата
в моем случае опаздывали именно мои выходные сигналы, тоесть сигнал, который я выставлял но отрицательному фронту clk'а реально устонавливался только через 11ns (по спецификации к маменту наступления положительного фронта сигнал должен быть стабилен >7ns, см. Tsu )

Забыли еще Propagation Delay smile.gif Вот он то все и портит. PCI revision 2.3, секция 7.6.2. Я тоже долгое время не мог понять почему Tsu и Tval ограничены такими незначительными величинами, пока не добрался до этой секции в седьмой главе.
3.14
Чего то я не пойму, у товарища qwqw, при тактировании от переднего фронта в запасе получается 22нс, все должно быть нормально. Может у вас фаза тактового в FPGA "накрутилась", я полагаю пользуетесь глобальным буфером, а сдвиг фазы тактового на буфере компенсируета через DLL или DCM, хотя сдется мне что то тут не то, все и так должно работать.

2 v_mirgorodsky
Вот мне сдается что 11нс на выходе это не только на трассировке "падает" еще и комбинаторка стоит, как "лечили", кроме как добавить регистры и разместить их в IOB?
v_mirgorodsky
2 3.14:
максимум один уровень логики после триггеров и регистры не в IOB, но затянутые выходными констраинами по самое не-могу smile.gif

А не получилось у qwqw потому, что есть Propagation Delay, равный 10нс, т.е. Tcyc ≥ Tval + Tprop + Tskew + Tsu, Tval = 11ns, Tprop = 10ns, Tskew = 2ns, Tsu=7ns. Под Tprop понимается время распространения сигнала от устройства до устройства и до самого чипсета.
qwqw
2 v_mirgorodsky:
Цитата
Вот здесь и есть ваша проблема. Задержка входного сигнала Tsetup не должна превышать 7ns. Могу с уверенностью сказать, что это возможно. Мы закончили наше PCI ядро около месяца назад. Именно с этим временем была связана основная головная боль и проблемы, однако при некоторых ухищрениях выдержать его все же возможно.

- думаю с этим справлюсь, в крайнем случае оргонизую свой clk, запаздывающий по фазе на (<период> - <вх. задержка>) секунд или что то же самое "опережающий" реальный на время моей вх. задержки.
Цитата
PCI revision 2.3, секция 7.6.2. Я тоже долгое время не мог понять почему Tsu и Tval ограничены такими незначительными величинами, пока не добрался до этой секции в седьмой главе

обязательно ознакомлюсь, спасибо
to 3.14:
Цитата
полагаю пользуетесь глобальным буфером, а сдвиг фазы тактового на буфере компенсируета через DLL или DCM, хотя сдется мне что то тут не то, все и так должно работать.

все именно так, пользуюсь DLL, просто я использовал отрицательный фронт клока, теперь понял что нужно делать по положительному, в этом и была моя ошибка, сижу исправляю.
3.14
2 v_mirgorodsky
Мда-а это ж чистый геморой будет на сильно заполненном критсталле ...
Саму спецификацию я только мельком давно смотрел, но по моему там ведь можно добавить необходимое количество тактов ожидания при ответе?

И все-таки Tcyc получается 30нс а не 33.
v_mirgorodsky
Цитата(3.14 @ Mar 11 2006, 22:20) *
2 v_mirgorodsky
Мда-а это ж чистый геморой будет на сильно заполненном критсталле ...
Саму спецификацию я только мельком давно смотрел, но по моему там ведь можно добавить необходимое количество тактов ожидания при ответе?

И все-таки Tcyc получается 30нс а не 33.


Угу sad.gif Но ничего сделать нельзя cranky.gif Я просмотрел несколько PCI Master/Target блоков от разных производителей - все используют нерегистровые версии PCI сигналов, иначе дизайн получается слишком медленным. Пришлось считать fan-in'ы, прижимать регистры к входным пинам, затягивать констраины. В принципе мы сейчас компилим дизайн с приоритетной раскладкой именно PCI блока в выбранный прямоугольный регион. Этого констраина вкупе с затянутыми Tsetup, Thold и Tout хватает. Получился еще небольшой запас в 1.5ns на Tsetup и порядка 2-2.5ns на Tout.
qwqw
что-то я совсем запутался:

вот фрагмент отчета по синтезу:
Цитата
Speed Grade: -7

Minimum period: 25.590ns (Maximum Frequency: 39.078MHz)
Minimum input arrival time before clock: 13.094ns
Maximum output required time after clock: 12.528ns
Maximum combinational path delay: 4.457ns


а вот из отчета P&R:
Цитата
The NUMBER OF SIGNALS NOT COMPLETELY ROUTED for this design is: 0

The AVERAGE CONNECTION DELAY for this design is: 1.584
The MAXIMUM PIN DELAY IS: 6.432
The AVERAGE CONNECTION DELAY on the 10 WORST NETS is: 5.455


что следует понимать под входной задержкой, и что под выходной?

промоделировал все(все что смог) в ModelSIM'e(P&R-Simulation), там все как надо, запас есть, насчет входных задержек понять труднее, но судя по тому, что на все вх. сигналы схема реагирует вовремя, делаю вывод, что с ними тоже все в порядке.
В жизни:
Target-часть работает нормально,
Master (мое устройство только пишет в комп, burst'ом) часто выдает Master-Abort , тоесть комп не отвечает на свой адрес, из чего получается, что выходы не поспевают.
***
осциллограф у меня не тянет, поэтому нет возможности посмотреть что на самом деле происходит на шине, хотя я вообще не уверен, что это возможно: задержки накрутятся в щупах и все такое.
Как же адекватно оценить задержки?
xy_
Цитата(qwqw @ Mar 13 2006, 20:14) *
вот фрагмент отчета по синтезу....

А почему такие большие задержки? Что за плис?
Вот тут внизу страници приведены задержки нармальный для pci.
Откуда Minimum period: 25.590ns?
qwqw
я делаю на Spartan2E
v_mirgorodsky
Цитата(qwqw @ Mar 14 2006, 12:43) *
я делаю на Spartan2E

А вот здесь и есть самая большая проблема. У вас вуыходная шина подключена к PCI через tri-state буффера. Как показывает опыт - они достаточно медленные. Для того, чтобы мастер работал надежно в такой ситуации необходимо в первый такт после получения PCI_Gnt включить tri-state буффера, оставив все сигналы в неактивном состоянии и только следующим тактом начинать активную работу. Эта техника называется address/data stepping. Вследствие негарантированных уровней на шине чипсет и ошибается, не декодирует адрес, выставленный вами на шине.

Цитата(qwqw @ Mar 13 2006, 19:14) *
Minimum input arrival time before clock: 13.094ns
Maximum output required time after clock: 12.528ns
Maximum combinational path delay: 4.457ns

Minimum input arrival time before clock должно быть меньше или равно 7 ns, maximum output required time after clock должно быть меньше 11 ns. Maximum combinational path delay в этом контексте не интересен. Как показывает практика, maximum output required time after clock проблем не вызывает. Minimum input arrival time before clock - выдержать более сложно, однако возможно. Необходимо очень аккуратно считать количество входных триггеров, управляемых с пинов микросхемы. По опыту, fan-in до 100 еще позволяет выдержать времянки, дальше уже проблемы с разными раскладками. Еще неплохо вырезать прямоугольную область в микросхеме для приоритетной раскладки PCI ядра в нее. Это несколько ограничивает полет фантазии PAR'а и приводит к более предсказуемым результатам.
qwqw
Цитата
А вот здесь и есть самая большая проблема. У вас вуыходная шина подключена к PCI через tri-state буффера. Как показывает опыт - они достаточно медленные. Для того, чтобы мастер работал надежно в такой ситуации необходимо в первый такт после получения PCI_Gnt включить tri-state буффера, оставив все сигналы в неактивном состоянии и только следующим тактом начинать активную работу. Эта техника называется address/data stepping. Вследствие негарантированных уровней на шине чипсет и ошибается, не декодирует адрес, выставленный вами на шине

Разве есть альтернатива tri-state буфферу?
Мне кажется медлительность tri-state буффера должна быть включена в <Maximum output required time after clock>, поэтому это не должно играть роли.
v_mirgorodsky
Да, время задержки tri-state буфферов включается в <Maximum output required time after clock>, однако выдержать его невозможно, поскольку скорость работы tri-state буфферов составляет "всего" 11-12ns, что явно недостаточно, чтобы выполнить спецификацию PCI. Однако специфика PCI позволяет выполнять address/data stepping, что спасает.
xy_
Цитата(makc @ Mar 10 2006, 22:57) *
В моем ядре все работает по нарастающему (положительному) фронту. Идея заключается в том, что несмотря на Th=0 все будет работать в том случае, если на плате сигнал CLK будет задержен. Т.е. дорожка этого сигнала преднамеренно делается удлиненной. Диапазон изменения длины этой трассы и прочее описано в спецификации.

PS: Обратите внимание, как разведена дорожка CLK на большинстве плат с интерфейсом PCI.

У меня такой ворос встал: в спартане в блоке ВВ есть программируемая задержка... А можно ли её использовать и не париться с разницей длин вообще?
qwqw
Все вышеописаные советы пошли в дело, выходные задержки уложились, входные удалось свести к
минимуму(макс. 8 с копейками нс.)
Цитата
Еще неплохо вырезать прямоугольную область в микросхеме для приоритетной раскладки PCI ядра в нее. Это несколько ограничивает полет фантазии PAR'а и приводит к более предсказуемым результатам.

каким образом это можно сделать в ISE?
3.14
2 xy_
Вы имеете в виду опции FAST/SLOW и DRIVE, которые приводят изменеиям в задержке падающей на выходном буфере? Крутя эти настройки вы получаете гарантированную наибольшую задержку на буфере (из группы) которая сильно зависит от температуры и напряжений питания. Не буду кривить душой, я почти всегда так и делаю (особенно для клока) smile.gif

2 qwqw
В PLACE редакторе рисуете область и присваиваете ее к нужному иодулю.
xy_
Цитата(3.14 @ Mar 28 2006, 21:50) *
2 xy_
Вы имеете в виду опции FAST/SLOW и DRIVE, которые приводят изменеиям в задержке падающей на выходном буфере? Крутя эти настройки вы получаете гарантированную наибольшую задержку на буфере (из группы) которая сильно зависит от температуры и напряжений питания. Не буду кривить душой, я почти всегда так и делаю (особенно для клока) smile.gif

Ой, я напутал, в спартане 3 этого нет, но вот в 3е есть (помню где то воидел=)
http://direct.xilinx.com/bvdocs/publications/ds312.pdf
стр 10
я не разбирался отличается ли это от спартана3, но выглядит так, как будто это настоящая программируемая задержка
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.