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

Приветствую всех.

 

Глобально задача выглядит следующим образом:

Cyclone V E. Есть 4 входящих тактовых сигнала одной частоты (30mhz), но различной фазы (что на самом деле не суть важно). Требуется реализовать возможность динамически выбирать нужный тактовый сигнал для всей схемы на ПЛИС. Все 4 клока заведены на специальные клоковые ноги ПЛИСины.

 

Что пробовал:

 

1. Пробовал использовать ядро ALTCLKCTRL, оно как раз на 4 клока рассчитано, но к сожалению только 2 входа могут быть с внешних портов, остальные 2 должны быть с PLL.

Каскадировать это ядро нельзя.

 

2. Два клока выбираются с помощью PLL через 2 входа reclk и refclk1 с ручным выбором Switchover, т.е. по сути PLL работает как мультиплексор. Остальные 2 идут на ALTCLKCTRL вместе с результирующим клоком с PLL. Итого из трех выбирается один. Вроде как всё разводится, но тут другая засада. Заключается она в том, что по сути ничего не переключается. Ни на PLL, ни на этом чертовом ALTCLKCTRL. Проблем с пайкой и прочих детсадовских ошибок точно нет.

 

Вот так совершенно, казалось бы, простая задача на этой "крутой" ПЛИС пока не решается по уму. Борюсь с искушением сделать мультиплексор на логике, а потом завести это каким-нибудь образом на вход PLL в режиме 1:1. Частота небольшая, но это как-то криво, хочется оставить на крайний случай.

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

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


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

Приветствую всех.

 

Глобально задача выглядит следующим образом:

Cyclone V E. Есть 4 входящих тактовых сигнала одной частоты (30mhz), но различной фазы (что на самом деле не суть важно). Требуется реализовать возможность динамически выбирать нужный тактовый сигнал для всей схемы на ПЛИС. Все 4 клока заведены на специальные клоковые ноги ПЛИСины.

 

Что пробовал:

...

Вот так совершенно, казалось бы, простая задача на этой "крутой" ПЛИС пока не решается по уму. Борюсь с искушением сделать мультиплексор на логике, а потом завести это каким-нибудь образом на вход PLL в режиме 1:1. Частота небольшая, но это как-то криво, хочется оставить на крайний случай.

Не совсем понятна Ваша задача и что Вы хотите сделать с "4 входящими тактовыми сигналами одной частоты (30mhz), но различной фазы".

 

Попробуйте посмотреть в сторону "clock switching glitch free".

http://www.eetimes.com/document.asp?doc_id=1202359

http://www.valpont.com/2x1-and-nx1-glitch-...-switching/pst/

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


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

Cyclone V E. Есть 4 входящих тактовых сигнала одной частоты (30mhz), но различной фазы (что на самом деле не суть важно). Требуется реализовать возможность динамически выбирать нужный тактовый сигнал для всей схемы на ПЛИС. Все 4 клока заведены на специальные клоковые ноги ПЛИСины.

 

Это как раз важно. Если они все имеют одну частоту (то есть не плывут один к дргому), то просто заведите один сигнал на PLL, и нужный фазовый сдвиг сделайте на ней.

 

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


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

Не совсем понятна Ваша задача и что Вы хотите сделать с "4 входящими тактовыми сигналами одной частоты (30mhz), но различной фазы".

 

Конструктивно устроено так, что на плату может быть подан один из четырёх тактовых сигналов. По идее снаружи нужно было бы установить мультиплексор и выбирать нужный клок. Выбор клока осуществляется 2-битной перемычкой на плате. Но т.к. на плате стоит ПЛИС, то было принято решение не ставить внешний мультиплексор, а выбирать нужный клок внутри ПЛИС, в зависимости от положения внешней перемычки. Вот тут возникли проблемы.

 

Это как раз важно. Если они все имеют одну частоту (то есть не плывут один к дргому), то просто заведите один сигнал на PLL, и нужный фазовый сдвиг сделайте на ней.

 

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

 

Кто-то, наверное, скажет, что нужно было самой перемычкой из 4 клоков выбрать один и подать на ПЛИС. Но "рвать" дорожку тактового сигнала перемычками тоже не хочется.

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

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


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

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

Тогда сделайте на логике. Вы потратите впустую всего одну сеть GCLK, через которую сигнал с логики пройдёт на вход PLL.

 

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


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

Задача намного проще.

Решение первое: заведите 4 клока на ALTCLKCTRL. Там возможен выбор 1-го из 4-х. Два клока заведите с выделенных пинов, два других с PLL. Насчет PLL - на вход заведите 3-й клок (или любой на самом деле), выходов сделайте два - каждый с нужным сдвигом по фазе.

 

Решение второе: заведите клок на PLL, выход c PLL один. Выбор нужного клока осуществляйте изменением конфигурации PLL на лету. В этом случае вариантов можно сделать значительно больше 4-х.

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


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

Сделайте мультиплексор тактов на логике внутри ПЛИС, и с него подайте такты на ФАПЧ. Куда она денется, заведется. И используйте выход PLL Lock, чтобы держать в сбросе остальную схему.

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


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

UPD:

Решение третье: заведите клок на PLL, выход c PLL один. Изменение фазы можно сделать за счет Dynamic phase shift.

Ну например: входная 30 МГц, выходная 30 МГц. Счетчики умножение/деление на PLL - 40, Fvco = 1200 МГц. Изменение фазы кратно 1/8 Tvco. Т.е. для сдвига на 45 градусов нужно подать 80 раз сигнал сдвига по 1/8 Tvco. Легко делается простеньким автоматом.

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


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

Решение первое:

Решение второе:

Решение третье:

Уважаемый dvladim. Дизайн HDL по сути Source Synchronous. Значения фаз каждого из клоков заранее неизвестны. Констрейнты input и output delay интерфейсных пинов завязаны на выбранный тактовый сигнал. Угадывать фазу категорически нельзя. Нужно именно переключаться на нужный клок и работать с ним.

 

Тогда сделайте на логике.

Сделайте мультиплексор тактов на логике внутри ПЛИС...

Уже попробовал. Получил отрицательные слаки для input и output delay интерфейсных пинов. Сначала получил -7ns, но почему то Fitter запихнул PLL в друго конец чипа. Поменял местоположение PLL, но всё равно вышло где-то -2 ns. Вообще для НЕ Source Synchronous дизайна, у которого нет зависимости input и output delay от внешнего клока это вполне себе нормальное решение. Тем более как оказалось сам примитив altclkctrl в параметрах позволяет сделать мультиплексор на логике "из коробки". Так что решение не такое уж и косячное, если понимать, что делать.

 

Есть пара рабочих вариантов с использованием altclkctrl и PLL, которые я опишу здесь чуть позже, когда закончу все эксперименты. Спасибо всем ответившим!!

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

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


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

Delay относительно чего? Между тактовой частотой внутри ПЛИС с ФАПЧ и входными тактами?

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


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

Delay относительно чего? Между тактовой частотой внутри ПЛИС с ФАПЧ и входными тактами?

 

Классический Source Synchronous дизайн, обмен данными с некоторым сторонним устройством по двунаправленной шине. С единственно разницей в том, что тактовый сигнал (входящий) не один, их 4. Но выбирается клок снаружи перемычкой ОДИН раз после подачи питания. Дальнейшая работа на выбранном клоке. В процессе работы клок меняться не будет. Для корректного обмена на шине у меня естественно есть ограничения input и output delay, которые привязаны к выбранному клоку.

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


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

тактовый сигнал (входящий) не один, их 4. Но выбирается клок снаружи перемычкой ОДИН раз после подачи питания. Дальнейшая работа на выбранном клоке. В процессе работы клок меняться не будет.

 

Может проще пропустить клок через ту самую перемычку?

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


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

Классический Source Synchronous дизайн, обмен данными с некоторым сторонним устройством по двунаправленной шине. С единственно разницей в том, что тактовый сигнал (входящий) не один, их 4.

А для проекта с одним тактовым сигналом у вас зазоры выдерживаются?

Вы данные защелкиваете тактовым сигналом, созданным в PLL, правильно? Так сдвиньте ей фазу.

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


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

Может проще пропустить клок через ту самую перемычку?

Кто-то, наверное, скажет, что нужно было самой перемычкой из 4 клоков выбрать один и подать на ПЛИС. Но "рвать" дорожку тактового сигнала перемычками тоже не хочется.

 

 

 

А для проекта с одним тактовым сигналом у вас зазоры выдерживаются?

Вы данные защелкиваете тактовым сигналом, созданным в PLL, правильно? Так сдвиньте ей фазу.

Да, выдерживаются. С любым из четырёх. Но нужно чтобы с мультиплексором тоже всё было хорошо.

 

Вы предлагаете clk0 взять как опорный и остальные генерировать сдвигом по фазе? Я не имею права так делать, поскольку нет чёткой взаимосвязи между фазой clk0 и фазой clk1, clk2, clk3. Если я предположу, что clk1 сдвинут относительно clk0 на 10 град, а в реальности там 50 град, то я нарушу setup/hold либо у себя, либо у девайса с которым общаюсь.

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

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


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

Да, выдерживаются. С любым из четырёх. Но нужно чтобы с мультиплексором тоже всё было хорошо.

Вы предлагаете clk0 взять как опорный и остальные генерировать сдвигом по фазе? Я не имею права так делать, поскольку нет чёткой взаимосвязи между фазой clk0 и фазой clk1, clk2, clk3.

Нет, я не предлагаю это. Это уже предлагали. Если без мультиплексора все нормально, а с мультиплексором нет, значит, надо задержать данные на то же время. Или фазу подкрутить в ФАПЧ.

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


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

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

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

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

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

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

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

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

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

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