реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Cyclone V clock mux, Как сделать по уму динамический выбор 1-го тактового сигнала из 4-ёх
Inanity
сообщение Jun 1 2017, 22:25
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 6-07-12
Пользователь №: 72 653



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

Глобально задача выглядит следующим образом:
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 - Jun 1 2017, 22:26
Go to the top of the page
 
+Quote Post
wert101
сообщение Jun 2 2017, 13:07
Сообщение #2


Участник
*

Группа: Свой
Сообщений: 70
Регистрация: 29-02-08
Из: Москва
Пользователь №: 35 493



Цитата(Inanity @ Jun 2 2017, 01:25) *
Приветствую всех.

Глобально задача выглядит следующим образом:
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/
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jun 2 2017, 13:26
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 504
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



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


Это как раз важно. Если они все имеют одну частоту (то есть не плывут один к дргому), то просто заведите один сигнал на PLL, и нужный фазовый сдвиг сделайте на ней.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jun 2 2017, 14:16
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(wert101 @ Jun 2 2017, 16:07) *
Не совсем понятна Ваша задача и что Вы хотите сделать с "4 входящими тактовыми сигналами одной частоты (30mhz), но различной фазы".


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

Цитата(DmitryR @ Jun 2 2017, 16:26) *
Это как раз важно. Если они все имеют одну частоту (то есть не плывут один к дргому), то просто заведите один сигнал на PLL, и нужный фазовый сдвиг сделайте на ней.


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

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

Сообщение отредактировал Inanity - Jun 2 2017, 14:22
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Jun 2 2017, 14:36
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 504
Регистрация: 20-02-05
Из: Siegen
Пользователь №: 2 770



Цитата(Inanity @ Jun 2 2017, 17:16) *
Задача в том, чтобы просто иметь возможность один раз после подачи питания выбрать нужный клок в зависимости от внешней перемычки и с ним работать всегда.

Тогда сделайте на логике. Вы потратите впустую всего одну сеть GCLK, через которую сигнал с логики пройдёт на вход PLL.
Go to the top of the page
 
+Quote Post
dvladim
сообщение Jun 6 2017, 20:49
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 622
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(Inanity @ Jun 2 2017, 17:16) *
Задача намного проще.

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

Решение второе: заведите клок на PLL, выход c PLL один. Выбор нужного клока осуществляйте изменением конфигурации PLL на лету. В этом случае вариантов можно сделать значительно больше 4-х.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 7 2017, 08:01
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 498
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Сделайте мультиплексор тактов на логике внутри ПЛИС, и с него подайте такты на ФАПЧ. Куда она денется, заведется. И используйте выход PLL Lock, чтобы держать в сбросе остальную схему.
Go to the top of the page
 
+Quote Post
dvladim
сообщение Jun 7 2017, 18:26
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 622
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



UPD:
Решение третье: заведите клок на PLL, выход c PLL один. Изменение фазы можно сделать за счет Dynamic phase shift.
Ну например: входная 30 МГц, выходная 30 МГц. Счетчики умножение/деление на PLL - 40, Fvco = 1200 МГц. Изменение фазы кратно 1/8 Tvco. Т.е. для сдвига на 45 градусов нужно подать 80 раз сигнал сдвига по 1/8 Tvco. Легко делается простеньким автоматом.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jun 7 2017, 19:09
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(dvladim @ Jun 6 2017, 23:49) *
Решение первое:
Решение второе:
Решение третье:

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

Цитата(DmitryR @ Jun 2 2017, 17:36) *
Тогда сделайте на логике.

Цитата(ViKo @ Jun 7 2017, 11:01) *
Сделайте мультиплексор тактов на логике внутри ПЛИС...

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

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

Сообщение отредактировал Inanity - Jun 7 2017, 19:32
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 8 2017, 04:44
Сообщение #10


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 498
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Delay относительно чего? Между тактовой частотой внутри ПЛИС с ФАПЧ и входными тактами?
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jun 8 2017, 08:50
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(ViKo @ Jun 8 2017, 07:44) *
Delay относительно чего? Между тактовой частотой внутри ПЛИС с ФАПЧ и входными тактами?


Классический Source Synchronous дизайн, обмен данными с некоторым сторонним устройством по двунаправленной шине. С единственно разницей в том, что тактовый сигнал (входящий) не один, их 4. Но выбирается клок снаружи перемычкой ОДИН раз после подачи питания. Дальнейшая работа на выбранном клоке. В процессе работы клок меняться не будет. Для корректного обмена на шине у меня естественно есть ограничения input и output delay, которые привязаны к выбранному клоку.
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Jun 8 2017, 10:21
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 517
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965



Цитата(Inanity @ Jun 8 2017, 11:50) *
тактовый сигнал (входящий) не один, их 4. Но выбирается клок снаружи перемычкой ОДИН раз после подачи питания. Дальнейшая работа на выбранном клоке. В процессе работы клок меняться не будет.


Может проще пропустить клок через ту самую перемычку?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 8 2017, 10:40
Сообщение #13


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 498
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Inanity @ Jun 8 2017, 11:50) *
Классический Source Synchronous дизайн, обмен данными с некоторым сторонним устройством по двунаправленной шине. С единственно разницей в том, что тактовый сигнал (входящий) не один, их 4.

А для проекта с одним тактовым сигналом у вас зазоры выдерживаются?
Вы данные защелкиваете тактовым сигналом, созданным в PLL, правильно? Так сдвиньте ей фазу.
Go to the top of the page
 
+Quote Post
Inanity
сообщение Jun 8 2017, 10:47
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 173
Регистрация: 6-07-12
Пользователь №: 72 653



Цитата(alexadmin @ Jun 8 2017, 13:21) *
Может проще пропустить клок через ту самую перемычку?

Цитата(Inanity @ Jun 2 2017, 17:16) *
Кто-то, наверное, скажет, что нужно было самой перемычкой из 4 клоков выбрать один и подать на ПЛИС. Но "рвать" дорожку тактового сигнала перемычками тоже не хочется.




Цитата(ViKo @ Jun 8 2017, 13:40) *
А для проекта с одним тактовым сигналом у вас зазоры выдерживаются?
Вы данные защелкиваете тактовым сигналом, созданным в PLL, правильно? Так сдвиньте ей фазу.

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

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

Сообщение отредактировал Inanity - Jun 8 2017, 10:54
Go to the top of the page
 
+Quote Post
ViKo
сообщение Jun 8 2017, 11:43
Сообщение #15


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 7 498
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Inanity @ Jun 8 2017, 13:47) *
Да, выдерживаются. С любым из четырёх. Но нужно чтобы с мультиплексором тоже всё было хорошо.
Вы предлагаете clk0 взять как опорный и остальные генерировать сдвигом по фазе? Я не имею права так делать, поскольку нет чёткой взаимосвязи между фазой clk0 и фазой clk1, clk2, clk3.

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

2 страниц V   1 2 >
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2017 - 13:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01534 секунд с 7
ELECTRONIX ©2004-2016