Pull to refresh

Comments 11

Получается, что мы просто возьмём за основу, что у автора всё работает при сдвиге минус 54 градуса (что за градусы — описано в статье, ссылку на которую я дал абзацем выше).

Поправьте меня, если ошибаюсь, но автор той статьи как раз делает неверный вывод — задержка между фронтами тактовых сигналов должна быть абсолютной величиной в нс, а не пропорциональной в градусах. Ведь эта задержка является характеристикой портов как SDRAM так и FPGA, она указывается в документациях на них. Фазовая задержка конечно зависит от самой частоты, как это и показано в указанном документе, однако, остальные характеристики, участвующие в расчете, являются характеристиками, не зависящими от тактовой частоты.

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

Скажу честно, я до сих пор не проникся методикой вычислений сдвига тактовой частоты, приведённой в разделе 32.7. Clock, PLL and Timing Considerations

Подскажите, пожалуйста, версию документа, в моей (2017.11.06) это 27.7, например.
Поправьте меня, если ошибаюсь, но автор той статьи как раз делает неверный вывод — задержка между фронтами тактовых сигналов должна быть абсолютной величиной в нс, а не пропорциональной в градусах.

Ну, я честно написал, что плаваю в этом. Нашёл, проверил, работает. В продукт бы такое вставить без более серьёзных разбирательств не рискнул, но для местного применения — почему бы и нет? Это я тоже специально отдельно прописал. Так что возможно, Вы и правы. Но на градусы ссылается несколько статей. Просто значения разные.

Будет здорово, если кто-нибудь проникнется и даст ссылку на более правильную теорию в комментариях. Поиском — ничего более путного не нашёл.

Еще хорошо бы подтянуть эти блоки непосредственно к пинам (constraints),

Я просто в этой статье опустил, как уже привычное действие, но дал ссылку на то место, где всё подтягивается к ножкам (где про Virtual Pin говорится). Причём иначе не получится ни у нас на Redd, ни на какой-либо макетке с Ali Express. Да и на любой другой. Генератор и ОЗУ же уже припаяны. Волей-неволей, а придётся подключвть именно туда, куда разработчики припаяли (а припаяли они, надеюсь, к выделенным тактовым линиям, у нас — точно).

Подскажите, пожалуйста, версию документа, в моей (2017.11.06) это 27.7, например.

У меня версия от среды разработки 18.1, датирована 2018.09.24. Но именно поэтому я дал не только номер раздела, но и название. И именно поэтому я не даю прямых ссылок. Они вечно всё меняют. Лучше давать строки для поиска.
И именно поэтому я не даю прямых ссылок

Даа, особенно когда последние версии делают онлайн-версию где номеров нет и грузит долго.
где всё подтягивается к ножкам

Извините, не так выразился, имею ввиду конечно же подтягивание самого дизайна на чипе к ножкам и timing constraints.
Извините, не так выразился, имею ввиду конечно же подтягивание самого дизайна на чипе к ножкам и timing constraints.

Насчёт ножек — в той статье рассказывается, как это делается, да и повторю, иначе не получится. Всё уже припаяно. Связывать надо именно с тем, что припаяно. А припаяно всё к выделенным тактовым линиям и на вход, и на выход. Так что не промахнёмся. И PLL будет взят выделенный.

Насчёт настройки timing constraints — я читал зубодробительные статьи здесь. Я честно пытаюсь это освоить… И понимаю, что это — для тех, кто делает серьёзные проекты. К счастью, для несерьёзных проектов, есть одна замечательная вещь. Когда у PLL заданы частоты — они автоматически распространяются на все выходящие тактовые линии. Я проверял. Это видно из отчётов по времени (насколько я помню, Timing Analyzer называется). Если просто дорожка — ругаются, что частота неизвестна. Если выход из PLL — пишут и заданную частоту, и какая реально достижима.

Поэтому если всё не уложилось — нас предупредят. И для несложных проектов этого достаточно. А сложные — не для Redd :-).
Всё уже припаяно

Под подтягиванием дизайна к ножкам я конечно имею ввиду не элементы на плате, а сами элементы проекта внутри ПЛИС: От разводки к разводке расположение тех или иных блоков обработки в дизайне меняется, от этого может поплыть разное: для этого обычно и используют разные create_virtual_clock/set_input_delay и пр.
В нашем конкретном случае, в ПЛИС всего два блока PLL, так что особо нечему меняться. Максимум два варианта. Линии GCK тоже, кажется, к ногам по возможности привязаны. Если же нет, то всё равно, GCK — особые линии. У них повторяемость высокая.

Вообще, моя задача показать, что ПЛИС — это просто. Не надо пугать читателей. Мало того, для проектов средней руки для современных ПЛИС это утверждение верно. Все соки выжимать — вот понадобится кому-то, пусть они и учатся. Но сначала пусть втянутся. Тем более, что может и не понадобится это никогда кому-то. Задачи — не всегда сверхмощные, а вот ПЛИС нынче — достаточно мощны. Так что и автоматически подставленных средой разработки ограничений, вытекающих из заданных частот PLL вполне может хватить.

Так что прошу читателей не бояться пробовать работать с ПЛИС, будь то Redd или какая недорогая макетка с Ali Express. Будут проблемы — будете осваивать новые методики. Не будет — не будете (это я к читателям обращаюсь)
И понимаю, что это — для тех, кто делает серьёзные проекты.

Не скромничайте, скорее уж для тех, в чьих проектах есть хоть какие-то интерфейсы. По-моему, на своём железе нет шансов не столкнуться с timing constraints. Но, конечно, в макетах, на которых обычно происходит первое знакомство с ПЛИС, эти вещи уже решены.
Не буду спорить. Но на всякий случай, отмечу, что я как-то всё в синхронном дизайне делаю, завязываюсь на то, чтобы подальше от рабочего фронта переключалось. Если в требуемую частоту уложились, то всё работает и без каких-либо трудностей. Оптимизаторы всё делают на ура. Я иногда даже смотрю, во что умялось всё (например, тут)

Но может, просто у меня задачи простые. Однако и цикл статей в тему, про аппаратуру, которая помогает в отладке и тестировании других больших проектов. Разработка под Redd — вторична и не должна приводить к высоким трудозатратам. Первична разработка того, что этим Redd-ом тестируется.

Но в целом, самое весёлое, что мне доводилось делать — SATA ядро собственное для Cyclone IV GX. Писал с нуля. Оно работало прекрасно. Главное — было именно придерживаться правильной привязки к тактовым импульсам. А остальное — система сама разбиралась, исходя из тактовой в настройках PLL.

В общем, я не спорю, что все эти Constraints — вещь очень полезная. Я просто говорю, что начинающим они могут ещё не скоро понадобиться. Кто собрался вот прямо завтра делать что-то серьёзное, тот не по статьям учиться будет. А остальных надо сначала втянуть, а там — они сами выяснят, как развиваться, и надо ли это делать.

Но не даром же я в статье показал, что допустимая частота у нас 133 МГц, после чего начал делать всё для сотни. Есть у меня такая привычка, не все соки из системы выжимать… Как раз это и даёт пространство для автоматической оптимизации…
Вашу точку зрения понял, благодарю.
С нуля — это ведь с IP-ядром, в котором уже физический уровень (трансиверы) настроены?
Ядро GXB — разумеется, штатное. Правда, эластичный буфер и декодер/кодер 8B/10B потом предпочёл сделать свои, так как встроенные в блок GXB дурили (сейчас уже не вспомню, как). На выходе из GXB (и моих довесков) получался поток данных и примитивов. Все автоматы, которые их обрабатывали и складывали в память (ну и изымали) — были написаны свои. Разумеется, с учётом поведения разных реальных дисков, у них у каждого свои привычки. Примитив CONT — убойная вещь, SAS без него — просто конфетка, а тут — намучился. Кто-то из дисков вставляет HOLD, кто-то нет, кто-то может вставить его за одно слово до конца потока, что всё рвёт и т.п. Давно дело было, в 2012-м. Тогда готовое стоило таких денег, что любые трудозатраты на своё, выходили дешевле. Это сейчас под Xilinx можно взять готовое SATA ядро бесплатно, написанное на LiteX или как там он правильно называется.
Sign up to leave a comment.

Articles