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

 
 
 
Reply to this topicStart new topic
> Специфические констрейны, Проект с мультиплексированием связанных тактовых
des00
сообщение Sep 30 2015, 19:23
Сообщение #1


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Доброго времени суток!

Есть проект. В нем стоит PLL, которая выдает 3 целочисленно кратных частоты. В проекте есть
1. Модули которые работают с учетом этой кратности. Для корректного временного анализа эти 3 клока помещены в одну эксклюзивную группу.
2. Модуль который работает с клоком, мультиплексированным из этих трех. Ему для корректного анализа надо что бы эти 3 клока были помещены в разные эксклюзивные группы. Вот в нем валяться констрейны на группу. Т.е. идет анализ пар клоков, передача между которыми, в этом модуле, физически невозможна.

Соображаю плохо. Как констрейнят такие проекты? Прописывают set_false_path от клока на клок с указанием through всех цепей модуля работающего на мультиплексированном клоке ? или непосредственно цепей мультеплексированных данных?

Спасибо.


--------------------
Go to the top of the page
 
+Quote Post
krux
сообщение Sep 30 2015, 19:36
Сообщение #2


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



имхо.
модуль 2) придется развязать нормальным CDC от модулей 1).
после чего модуль 2) констрейнят на три используемых частоты, и плюс set false path между 1) и 2).

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


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
des00
сообщение Sep 30 2015, 21:04
Сообщение #3


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(krux @ Oct 1 2015, 02:36) *
модуль 2) придется развязать нормальным CDC от модулей 1).
после чего модуль 2) констрейнят на три используемых частоты, и плюс set false path между 1) и 2).

Вот как раз этого и хотелось бы избежать. Модуль 2 это что-то вроде самодельного сигнал-тапа, со специализированным PC софтом. На входе у него буфер памяти и логика записи. Городить на пустом месте 3 буфера ИМХО может и правильно, но расточительно по ресурсам. Мультиплексор на лютах + немного логики решают проблему. Там это реально весит где то 40 плиток.

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

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


--------------------
Go to the top of the page
 
+Quote Post
Shivers
сообщение Sep 30 2015, 21:08
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Я бы сделал так:
1. если есть мультиплексор, значит надо обьявлять generated_clock.
2. Мастером при обьявлении должен быть клок с максимальной частотой.
3. Обьявленный клок синхронен первым трем (одна группа).

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

p.s. можно обьявить flase_path через мультиплексор от оставшихся двух более медленных клоков. Но я думаю, что САПР и не будет считать через этот мультиплексор все клоки, эта опция по умолчанию всегда отключена. А вот фалзпасить пути сигналов между доменами нельзя - клоки то синхронные. Точнее можно и фалзпасить как вы предложили, но результат никто гарантировать не будет
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 1 2015, 05:16
Сообщение #5


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Shivers @ Oct 1 2015, 05:08) *
Я бы сделал так:
1. если есть мультиплексор, значит надо обьявлять generated_clock.
2. Мастером при обьявлении должен быть клок с максимальной частотой.
3. Обьявленный клок синхронен первым трем (одна группа).

Хмм, вот насколько помню, генерированный клок на комбинационную логику посадить нельзя (в свое время пытался). Попробую.
Цитата
Только вот не очень понятно, как ПЛИС учтет этот мультиплексор при построении дерева. Дерево ведь прибито гвоздями, его нельзя изменить. Может быть, есть какойто ресурс в ПЛИС для мультиплексирования клоков - изучите мануал.

Вот как раз clkctrl тут не нужен, он потратит 2-4 нс тащить до него, потом 2-4 нс с него и все ради 50 плиток. Лучше сделать на лютах, благо такая возможность есть.


--------------------
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 1 2015, 07:41
Сообщение #6


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



clkctrl к тому же имеет ограничение на количество входов с внутренних ресурсов. последний раз когда я пытался завести на сыклоне-4 три клока с одной PLL на clkctrl - ничего не вышло, получилось завести максимум два.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 1 2015, 08:01
Сообщение #7


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Код
set_false_path -from [get_clocks $clk_250MHz] -to [get_clocks $clk_125MHz] -through [get_nets {usb*}]
set_false_path -from [get_clocks $clk_125MHz] -to [get_clocks $clk_250MHz] -through [get_nets {usb*}]

сработало. вырезало левые пути из анализа. проверил по нетлисту


--------------------
Go to the top of the page
 
+Quote Post
Shivers
сообщение Oct 1 2015, 12:42
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 680
Регистрация: 11-02-08
Из: Msk
Пользователь №: 34 950



Хорошо, что таких путей нет. Потому что если окажется что есть, случится беда.

К примеру, если модуль2 работает на частоте 250, и из него выходят данные в модуль1 на триггера по клоку 125. В этом случае можно получить нарушения, поскольку вы этот путь зафалзпасили. Или если в модуль2 (250) заходит сигнал из домена 125 -этот путь тоже не контролируется. С учетом наличия мультиплексора клоков, могу сказать что вы почти наверняка что то полезное выкинули этими фалзпасами.
Go to the top of the page
 
+Quote Post
krux
сообщение Oct 1 2015, 18:05
Сообщение #9


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

Группа: Свой
Сообщений: 1 700
Регистрация: 2-07-12
Из: дефолт-сити
Пользователь №: 72 596



Цитата
вы почти наверняка что то полезное выкинули этими фалзпасами.

ну как это что. мультиплексор клоков на лютах и выкинут.
в принципе, осталось правильно обработать reset-ы при переключении с одной тактовой на другую. тогда никаких бед лично мне не предвидится.


--------------------
провоцируем неудовлетворенных провокаторов с удовольствием.
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 2 2015, 04:57
Сообщение #10


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Shivers @ Oct 1 2015, 19:42) *
Хорошо, что таких путей нет. Потому что если окажется что есть, случится беда.

Путей именно через эти цепи, для таких клоков нет.
Цитата
К примеру, если модуль2 работает на частоте 250, и из него выходят данные в модуль1 на триггера по клоку 125. В этом случае можно получить нарушения, поскольку вы этот путь зафалзпасили. Или если в модуль2 (250) заходит сигнал из домена 125 -этот путь тоже не контролируется. С учетом наличия мультиплексора клоков, могу сказать что вы почти наверняка что то полезное выкинули этими фалзпасами.

Судя по отчетам TQ, всего в проекте было ~7400 таких путей, констрейном я вырезал ~2500. так что полезное осталось, а вот физически невозможное удалено.


--------------------
Go to the top of the page
 
+Quote Post
DmitryR
сообщение Oct 2 2015, 10:53
Сообщение #11


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

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



Я честно говоря не понимаю, зачем объявлять руками то, что выходит из PLL. У меня derive_pll_clocks работает прекрасно, в том числе и после мультиплексора: он в таком случае считает, что за мультиплексором максимальная частота из возможных.
Go to the top of the page
 
+Quote Post
_Anatoliy
сообщение Oct 2 2015, 11:05
Сообщение #12


Утомлённый солнцем
******

Группа: Свой
Сообщений: 2 646
Регистрация: 15-07-06
Из: г.Донецк ДНР
Пользователь №: 18 832



Цитата(DmitryR @ Oct 2 2015, 13:53) *
Я честно говоря не понимаю, зачем объявлять руками то, что выходит из PLL. У меня derive_pll_clocks работает прекрасно, в том числе и после мультиплексора: он в таком случае считает, что за мультиплексором максимальная частота из возможных.

Имена клоков непривычны после derive_pll_clocks. При анализе приходится искать какой клок на каком выходе...
Go to the top of the page
 
+Quote Post
des00
сообщение Oct 2 2015, 15:30
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(DmitryR @ Oct 2 2015, 18:53) *
в том числе и после мультиплексора: он в таком случае считает, что за мультиплексором максимальная частота из возможных.

можете выполнить команду Report Clock Transfers проекта с таким мультиплексором и сделать скрин? не верю что TQ дошел до таких высот.

ЗЫ. Правильно я понимаю, мультиплексирование на выходе PLL, не на входе?


--------------------
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:02
Рейтинг@Mail.ru


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