Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Почему один и тотже триггер реализуется по-разному?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Страницы: 1, 2
ViKo
Цитата(Viwon @ Mar 27 2014, 06:20) *
Мне нужно чтобы путь ко всем четырем триггерам был одинаковым, т.е. одинаковая реализация. Поэтому хочется знать, от чего она зависит.

Возвращаясь к самой первой картинке - в левой части сигнал приходит на вывод DATAD, а на правой на DATAC. Ну не нашлось других каналов из-за чего-то другого, чего добавили - отняли. Вот от этого и разница в использовании логического элемента.

Цитата(warrior-2001 @ Mar 27 2014, 04:43) *
Взял те же исходники, собрал новый проект с теми же параметрами.

Уверены на все 100%, что параметры идентичны? Там мно-о-о-го параметров.
SM
Цитата(ViKo @ Mar 27 2014, 07:49) *
Там мно-о-о-го параметров.

Скорее даже не в параметрах дело (допустим, они по умолчанию), а в том, что порядок чтения исходников поменялся в проекте. От этого результат точно другой становится (проверял лично)!
ViKo
Цитата(SM @ Mar 27 2014, 06:52) *
Скорее даже не в параметрах дело (допустим, они по умолчанию), а в том, что порядок чтения исходников поменялся в проекте. От этого результат точно другой становится (проверял лично)!

Проверил на вчерашнем. Сколько не перетрахивал порядок файлов, результат был неизменный.
Как только изменил SEED с 1 на 2, получил под 900 различий в sof файле.
Проектик простенький.
SM
Цитата
Сколько не перетрахивал порядок файлов, результат был неизменный.

Возможно, это зависит от каких-то опций компиляции и оптимизации, связанных со сквозной оптимизацией через интерфейсы модулей. Или еще с чем то. У меня есть жирный проект из 43 файлов, который еле-еле лезет по таймингам, в нем это проявляется. А вот в другом проекте, там всего 3 файла, вроде не проявляется.
o_khavin
Цитата(warrior-2001 @ Mar 27 2014, 05:43) *
Не холивара ради...
Взял простой проект в 13.1 версии Квартуса.
Собрал.
Взял те же исходники, собрал новый проект с теми же параметрами.
Собрал.
Результат разный, но полностью рабочий в комнатных условиях.
Как-то так...

Скорее всего дело в порядке следования исходников. Файлы проекта сравнивали между собой?
XVR
Цитата(Viwon @ Mar 27 2014, 07:20) *
Здесь один из триггеров реализуется по другому - без feeder’а, в связи, с чем длина пути к нему больше чем к остальным.
Мне нужно чтобы путь ко всем четырем триггерам был одинаковым, т.е. одинаковая реализация. Поэтому хочется знать, от чего она зависит.
От того, как показалось удобнее синтезатору. Хотите однозначности - описывайте этот кусок схемы в примитивах FPGA, запрещаете его оптимизацию в синтезаторе и вводите констрейны на физическое размещение элементов. Я не в курсе, как это делается в Quartus'е, сам работаю с Xilinx rolleyes.gif

Цитата
Отмечу, что пути к этим регистрам исключены из временного анализа,
А зря, было бы неплохо на них тоже какие нибудь констрейны наложить. А так синтезатор имеет полное право сделать с этими путями все, что ему захочется. Даже провести их через весь кристалл (3 раза laughing.gif )
o_khavin
Цитата(Viwon @ Mar 27 2014, 07:20) *
Как видно появились ячейки комбинаторной логики, выполняющие непонятную мне функцию, но бог с ними меня они не беспокоят.

Их функция совершенно понятная - фиттеру показалось, что так будет проще реализовать требуемую топологию.

Цитата(Viwon @ Mar 27 2014, 07:20) *
Проблема в том, что при каких-то условиях (например после добавления нового кода), этот кусок может собраться так.
Здесь один из триггеров реализуется по другому - без feeder’а, в связи, с чем длина пути к нему больше чем к остальным.

Это тоже нормально, просто теперь фиттеру показалось по другому. sm.gif

Цитата(Viwon @ Mar 27 2014, 07:20) *
Мне нужно чтобы путь ко всем четырем триггерам был одинаковым, т.е. одинаковая реализация. Поэтому хочется знать, от чего она зависит.

От того, как фиттеру покажется правильно. biggrin.gif

Цитата(Viwon @ Mar 27 2014, 07:20) *
Отмечу, что пути к этим регистрам исключены из временного анализа, а значит реализация не связана с обеспечением setup/hold условий. Также, по наблюдению, внутри одного LABа триггеры реализуются одинаково.

То, что пути исключены из временного анализа, вовсе не говорит, что фиттер не будет их трогать. Во первых ему в любом случае нужно эти пути проложить, а во вторых эти пути должны не мешать другим путям. Единственный вариант принудить фиттер - захардкодить всё в один LAB.
Но IMHO, Вы пытаетесь достигнуть конечной цели каким-то не тем путём.
Viwon
to XVR, o_khavin
Исходный вопрос и его решение можно посмотреть здесь, буду рад, если есть что там добавить. В итоге мне удалось решить ту задачу на приемлемом уровне путем фиксации регистров в соседних LABах, но результат может быть улучшен решением проблемы обсуждаемой в этом топике.
Я понимаю, что фиттер разводит не от балды (или от балды? biggrin.gif ), а потому что ему так «удобнее», вот и хочется создать ему комфортные условия для одинаковой разводки, но что это за условия?
Пока есть предположения
Цитата(SM @ Mar 21 2014, 14:03) *
Видимо, ресурсы разводки так разлеглись, что надо было тут подключить через LUT, а напрямую не склалось у роутера.

Цитата(ViKo @ Mar 27 2014, 07:49) *
Возвращаясь к самой первой картинке - в левой части сигнал приходит на вывод DATAD, а на правой на DATAC. Ну не нашлось других каналов из-за чего-то другого

Не понятно что мешает, судя по Chip Planner’у в LABах куда назначены триггеры, нет ничего кроме них самих и их feeder’ов. Но мои знания архитектуры ПЛИС слабы, а Chip Planner могу только запускать rolleyes.gif , поэтому пока ни чего не утверждаю.
SM
То, что пути исключены из временного анализа, как раз и приводит к тому, что оно как развелось, так и развелось, без какой либо оптимизации. Так что, как вариант, второй способ сделать время повторяемым, кроме ручного вставления LUT, может быть, задание жесткого set_max_delay на путь, чтобы он не давал возможностей втыкать эти feeder-ы, или жесткие set_max_delay и set_min_delay одновременно, чтобы он разводку делал в совсем жестких временных рамках...
warrior-2001
Тема весьма бурная и я не поспею ответить всем. Если брать одни и те же исходники и компилить их, не удаляя старую инфу о предыдущей компиляции, то результат будет гарантированно одинаков. С этим не поспоришь. Но если с одинаковыми исходниками собрать несолько ОДИНАКОВЫХ проектов, то результат может отличаться. И в чем тут проблема - разбираться можно долго, ибо исходников САПР нет.
Задача размещения элементов на кристалле весьма трудоёмка, и винить в неповторяемости трудно. Если все установки и тайминги выполняются(ну и логика верная), то с большой долей вероятности можно утверждать, что проект рабочий, а как там регистры лягли - дело второе. Если разводить два регистра - повторяемость будет много больше, чем у проекта со 100% загрузкой.
Я лишь делюсь своим скромным опытом, и не выдвигаю никаких гипотез.
Viwon
Цитата(SM @ Mar 27 2014, 12:40) *
То, что пути исключены из временного анализа, как раз и приводит к тому, что оно как развелось, так и развелось, без какой либо оптимизации. Так что, как вариант, второй способ сделать время повторяемым, кроме ручного вставления LUT, может быть, задание жесткого set_max_delay на путь, чтобы он не давал возможностей втыкать эти feeder-ы, или жесткие set_max_delay и set_min_delay одновременно, чтобы он разводку делал в совсем жестких временных рамках...

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