Перейти к содержанию
    

Altera Timequest. Констрейны для неизвестного клока

Приветствую Уважаемые посетители форума !

Собственно имеется внутри FPGA некая схема, содержащая PLL.

PLL настроена таким образом, что у нас опорная частота умножается и делится на некие коэффициенты, которые никогда не меняются. (коэффициенты рассчитаны таким образом, чтобы не превышалась максимальная частота VCO( ГУН) по спецификации на чип).

Но вся проблема в том, что опорный клок у меня может лежать в диапазоне от 25Мгц до 80 Мгц. (т.е иметь любое значение, характерное для значения пиксельной частоты VESA)

Как можно обконстрейнить такой клок ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очевидно, что по максимальной частоте, т.е. в вашем случае - 80Мгц, если я правильно понял. Если проект на этой частоте по времянке проходит, то и на 25Мгц всё будет ок.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Очевидно, что по максимальной частоте, т.е. в вашем случае - 80Мгц, если я правильно понял. Если проект на этой частоте по времянке проходит, то и на 25Мгц всё будет ок.

Я пока так и сделал :rolleyes:

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

 

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

Изменено пользователем Inanity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Все переходы между доменами я делал через FIFO. А одиночные сигналы я синхронизирую путем handshake, как-раз для того, чтобы не беспокоиться на счет того, что короткий импульс может потеряться.

Я просто как-то на зарубежном форуме натыкался на аналогичную тему про то, как описывать такие клоки, да вот как-то не гуглится теперь эта тема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я пока так и сделал :rolleyes:

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

 

Есть такая штука, как physically exclusive clocks, позволяющая задавать разные тактовые сигналы на одном и том же порту. Если хочется наверняка - можно добавить и 25 и 80 (или вообще целый перечень), хотя смысла, и на мой тоже взгляд, особого нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ключи -exclusive, -asynchronous, -logically_exclusive и -physically_exclusive применительно к Альтере работают совершенно одинаково.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

PLL настроена таким образом, что у нас опорная частота умножается и делится на некие коэффициенты, которые никогда не меняются. (коэффициенты рассчитаны таким образом, чтобы не превышалась максимальная частота VCO( ГУН) по спецификации на чип).

Но вся проблема в том, что опорный клок у меня может лежать в диапазоне от 25Мгц до 80 Мгц. (т.е иметь любое значение, характерное для значения пиксельной частоты VESA)

ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.

Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.

Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.

 

А КАК ПЛИС узнает, что на её вход подали именно 25 МГц, а не 40 или 80?

Если проект разводится на 80 МГЦ, то 25 работать будут! Можно прогнать TimeQuest на минимальную частоту и на максимальную, не компилируя при это сам проект! Если slack отсутствуют - то все работать будет!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО такая схема вообще не будет работать. В большинстве случаев PLL в ПЛИС не позволит использовать такой диапазон входных частот без перестройки коэффициентов. Т.к. диапазон VCO будет выходить за допустимые пределы.

Ну например: Cyclone IV Fvco = 600-1300 МГц. Т.е. перекрытие 2.16 раз, а нужно 25-80 МГц, т.е. 3.2 раза.

Это если VCO выходит за разумные пределы :rolleyes:

В моем случае коэффициенты 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 у меня никогда не превышает максимальную.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И частота VCO у меня никогда не превышает максимальную.

А минимальная Fvco какая? Обычно они работают примерно на октаву.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А минимальная Fvco какая? Обычно они работают примерно на октаву.

Хм... После Вашего вопроса решил ещё раз глянуть datasheet. Там написано что Fvco min 600 Мгц.... Странно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хм... После Вашего вопроса решил ещё раз глянуть datasheet. Там написано что Fvco min 600 Мгц.... Странно.

Не странно, а обычно примерно так и есть. Меняйте консерваторию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не странно, а обычно примерно так и есть. Меняйте консерваторию.

Странно что такое ограничение в даташите. Сейчас специально проверил. Сам Quartus поставил коэффициенты там, что частота VCO получается 400 Мгц. Где-то я не то прочитал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странно что такое ограничение в даташите. Сейчас специально проверил. Сам Quartus поставил коэффициенты там, что частота VCO получается 400 Мгц. Где-то я не то прочитал.

смотрите в даташите:

post-18832-1521806181_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...