Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Altera Timequest. Констрейны для неизвестного клока
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Flip-fl0p
Приветствую Уважаемые посетители форума !
Собственно имеется внутри FPGA некая схема, содержащая PLL.
PLL настроена таким образом, что у нас опорная частота умножается и делится на некие коэффициенты, которые никогда не меняются. (коэффициенты рассчитаны таким образом, чтобы не превышалась максимальная частота VCO( ГУН) по спецификации на чип).
Но вся проблема в том, что опорный клок у меня может лежать в диапазоне от 25Мгц до 80 Мгц. (т.е иметь любое значение, характерное для значения пиксельной частоты VESA)
Как можно обконстрейнить такой клок ?
Inanity
Очевидно, что по максимальной частоте, т.е. в вашем случае - 80Мгц, если я правильно понял. Если проект на этой частоте по времянке проходит, то и на 25Мгц всё будет ок.
Flip-fl0p
Цитата(Inanity @ Mar 20 2018, 19:05) *
Очевидно, что по максимальной частоте, т.е. в вашем случае - 80Мгц, если я правильно понял. Если проект на этой частоте по времянке проходит, то и на 25Мгц всё будет ок.

Я пока так и сделал rolleyes.gif
Но есть подозрение, что это не совсем верно. Поскольку вполне может быть так, что из-за того, что пути между регистрами выровнены для максимальной частоты, эти пути могут быть непригодными для минимальной.
Inanity
Цитата(Flip-fl0p @ Mar 20 2018, 20:45) *
Но есть подозрение, что это не совсем верно. Поскольку вполне может быть так, что из-за того, что пути между регистрами выровнены для максимальной частоты, эти пути могут быть непригодными для минимальной.


Нет, почему же? В общем случае должны выполняться требования setup и hold для всех триггеров в схеме. Если это правило выполняется для частоты Fmax, то тем более будет выполняться и для меньших частот.

Есть другой подвох. У вас есть в схеме асинхронные сигналы? Если таковые имеются и переход из одного клокового домена в другой осуществляется через синхронизаторы на регистрах, то при изменении частоты проект может по естественным причинам перестать нормально работать.

Допустим, у вас проект тактируется снаружи частотой в диапазоне 25-80Мгц. Предположим, что на вход приходит единичный асинхронный импульс с длительностью 25нс (40МГц). Вы как положено с помощью синхронизатора делаете этот импульс синхронным для вашей схемы. Пока частота вашей схемы достаточно высока, импульс будет корректно пойман. Но если частота опуститься допустим с 80МГц до 25, то естественно, импульс будет пропущен (или будет ловиться, но иногда, как повезёт). Тоже самое может произойти для выходного сигнала вашей схемы, который будет входом для какого-нибудь другого блока со своей частотой. Короче говоря, за длительностью импульсов надо следить. А если дизайн на 100% синхронный, то при снижении частоты ничего не должно ломаться.
Flip-fl0p
Цитата(Inanity @ Mar 20 2018, 22:22) *
Нет, почему же? В общем случае должны выполняться требования setup и hold для всех триггеров в схеме. Если это правило выполняется для частоты Fmax, то тем более будет выполняться и для меньших частот.

Есть другой подвох. У вас есть в схеме асинхронные сигналы? Если таковые имеются и переход из одного клокового домена в другой осуществляется через синхронизаторы на регистрах, то при изменении частоты проект может по естественным причинам перестать нормально работать.

Допустим, у вас проект тактируется снаружи частотой в диапазоне 25-80Мгц. Предположим, что на вход приходит единичный асинхронный импульс с длительностью 25нс (40МГц). Вы как положено с помощью синхронизатора делаете этот импульс синхронным для вашей схемы. Пока частота вашей схемы достаточно высока, импульс будет корректно пойман. Но если частота опуститься допустим с 80МГц до 25, то естественно, импульс будет пропущен (или будет ловиться, но иногда, как повезёт). Тоже самое может произойти для выходного сигнала вашей схемы, который будет входом для какого-нибудь другого блока со своей частотой. Короче говоря, за длительностью импульсов надо следить. А если дизайн на 100% синхронный, то при снижении частоты ничего не должно ломаться.

Все переходы между доменами я делал через FIFO. А одиночные сигналы я синхронизирую путем handshake, как-раз для того, чтобы не беспокоиться на счет того, что короткий импульс может потеряться.
Я просто как-то на зарубежном форуме натыкался на аналогичную тему про то, как описывать такие клоки, да вот как-то не гуглится теперь эта тема.
alexadmin
Цитата(Flip-fl0p @ Mar 20 2018, 20:45) *
Я пока так и сделал rolleyes.gif
Но есть подозрение, что это не совсем верно. Поскольку вполне может быть так, что из-за того, что пути между регистрами выровнены для максимальной частоты, эти пути могут быть непригодными для минимальной.


Есть такая штука, как physically exclusive clocks, позволяющая задавать разные тактовые сигналы на одном и том же порту. Если хочется наверняка - можно добавить и 25 и 80 (или вообще целый перечень), хотя смысла, и на мой тоже взгляд, особого нет.
_Anatoliy
Цитата(alexadmin @ Mar 22 2018, 10:51) *

Ключи -exclusive, -asynchronous, -logically_exclusive и -physically_exclusive применительно к Альтере работают совершенно одинаково.
dvladim
Цитата(Flip-fl0p @ Mar 20 2018, 13:21) *
PLL настроена таким образом, что у нас опорная частота умножается и делится на некие коэффициенты, которые никогда не меняются. (коэффициенты рассчитаны таким образом, чтобы не превышалась максимальная частота VCO( ГУН) по спецификации на чип).
Но вся проблема в том, что опорный клок у меня может лежать в диапазоне от 25Мгц до 80 Мгц. (т.е иметь любое значение, характерное для значения пиксельной частоты VESA)

ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.
Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.
warrior-2001
Цитата(dvladim @ Mar 22 2018, 23:03) *
ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.
Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.


А КАК ПЛИС узнает, что на её вход подали именно 25 МГц, а не 40 или 80?
Если проект разводится на 80 МГЦ, то 25 работать будут! Можно прогнать TimeQuest на минимальную частоту и на максимальную, не компилируя при это сам проект! Если slack отсутствуют - то все работать будет!
Flip-fl0p
Цитата(dvladim @ Mar 22 2018, 23:03) *
ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.
Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.

Это если VCO выходит за разумные пределы rolleyes.gif
В моем случае коэффициенты PLL подобраны таким образом, чтобы частота VCO не выходила за пределы спецификации.

Например:
У меня Cyclone V SEMA5F31C6
По спецификации максимальная частота VCO 1600 Мhz
На вход FPGA подается видеосигнал VESA 800x600 60 Hz pixel_clk 40 Mhz

pixel_clk я применяю в качестве опорного клока
На PLL я получаю частоту VCO путем умножения опорного клока (который как раз и неизвестен - т.е может быть разным в зависимости от разрешения видеосигнала) на 10.
А остальные частоты получаю делением этой частоты.
В моем случае я получаю частоты:

VGA_clk - равный частоте опорного клока т.е делю частоту VCO на 10.
RX0_clk - частота в 5 раз выше опорного клока для DDR регистров - т.е делю частоту на 2
RX1_clk - частота в 5 раз выше опорного клока для DDR регистров - т.е делю частоту на 2
RX2_clk - частота в 5 раз выше опорного клока для DDR регистров - т.е делю частоту на 2

Данные коэффициенты у меня никогда не меняются. Таким образом я покрываю все возможные разрешения VESA, где скорость передачи данных не выше 800 Mb/s (частота pixel_clk не больше 80 Mhz). Т.к основное ограничение накладывают LVDS приёмники, которые ограничены приемом 800 Mb/s т.е (DDR клоком в 400 Мгц). И частота VCO у меня никогда не превышает максимальную.
_Anatoliy
Цитата(Flip-fl0p @ Mar 23 2018, 11:07) *
И частота VCO у меня никогда не превышает максимальную.

А минимальная Fvco какая? Обычно они работают примерно на октаву.
Flip-fl0p
Цитата(_Anatoliy @ Mar 23 2018, 12:21) *
А минимальная Fvco какая? Обычно они работают примерно на октаву.

Хм... После Вашего вопроса решил ещё раз глянуть datasheet. Там написано что Fvco min 600 Мгц.... Странно.
_Anatoliy
Цитата(Flip-fl0p @ Mar 23 2018, 13:16) *
Хм... После Вашего вопроса решил ещё раз глянуть datasheet. Там написано что Fvco min 600 Мгц.... Странно.

Не странно, а обычно примерно так и есть. Меняйте консерваторию.
Flip-fl0p
Цитата(_Anatoliy @ Mar 23 2018, 13:35) *
Не странно, а обычно примерно так и есть. Меняйте консерваторию.

Странно что такое ограничение в даташите. Сейчас специально проверил. Сам Quartus поставил коэффициенты там, что частота VCO получается 400 Мгц. Где-то я не то прочитал.
_Anatoliy
Цитата(Flip-fl0p @ Mar 23 2018, 13:57) *
Странно что такое ограничение в даташите. Сейчас специально проверил. Сам Quartus поставил коэффициенты там, что частота VCO получается 400 Мгц. Где-то я не то прочитал.

смотрите в даташите:
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.