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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Почему один и тотже триггер реализуется по-разному?, как с этим бороться?
SM
сообщение Mar 27 2014, 02:19
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



А новый проект это не честно, никаких гарантий, что все параметры те же, и прядок компиляции файлов тот же. Честно - это пересобрать заново тот же проект.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 27 2014, 03:20
Сообщение #47


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Извиняюсь, что не совсем четко сформулировал суть проблемы, попробую исправиться laughing.gif
Есть следующий код:
CODE
module TRIGGERS(DATA, SIGNALa, CLK);
output [3:0] DATA;
input SIGNALa;
input CLK;

reg [3:0] triggers;
always @(posedge CLK)
triggers <= {4{SIGNALa}};
assign DATA = triggers;
endmodule

В RTL Viewer’е он выглядит так:
Прикрепленное изображение

В Technology Map Viewer(Post-Fitting):
Прикрепленное изображение

Как видно появились ячейки комбинаторной логики, выполняющие непонятную мне функцию, но бог с ними меня они не беспокоят.
Проблема в том, что при каких-то условиях (например после добавления нового кода), этот кусок может собраться так(далее фотошоп):
Прикрепленное изображение

Здесь один из триггеров реализуется по другому - без feeder’а, в связи, с чем длина пути к нему больше чем к остальным.
Мне нужно чтобы путь ко всем четырем триггерам был одинаковым, т.е. одинаковая реализация. Поэтому хочется знать, от чего она зависит.

Отмечу, что пути к этим регистрам исключены из временного анализа, а значит реализация не связана с обеспечением setup/hold условий. Также, по наблюдению, внутри одного LABа триггеры реализуются одинаково.

Что касается возникшего здесь спора, результирующие файлы будут идентичны, при неизменном коде, параметрах компиляции, и версии Quartus(32bit и 64bit отличаются). Это из моего опыта, около 3х месяцев biggrin.gif
Go to the top of the page
 
+Quote Post
alexadmin
сообщение Mar 27 2014, 03:26
Сообщение #48


Знающий
****

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



Цитата(Viwon @ Mar 27 2014, 07:20) *
Извиняюсь, что не совсем четко сформулировал суть проблемы, попробую исправиться laughing.gif


Да забейте, никому ваш триггер не интересен. В этой теме теперь серьезные дядьки бьются ;-)
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 27 2014, 03:38
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



Цитата(alexadmin @ Mar 27 2014, 07:26) *
Да забейте, никому ваш триггер не интересен. В этой теме теперь серьезные дядьки бьются ;-)

А вдруг rolleyes.gif Покрайне мере с подсказки SM одно из решений нашлось.
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 27 2014, 03:42
Сообщение #50


Знающий
****

Группа: Свой
Сообщений: 815
Регистрация: 7-06-06
Из: Харьков
Пользователь №: 17 847



Цитата(o_khavin @ Mar 26 2014, 18:21) *
Не то чтобы я Вам не верил, но за всю свою практику я ни разу не сталкивался с невоспроизводимостью проекта при сохранении исходников и настроек. Т.е. не то чтобы я считаю это аксиомой, но на роль не опровергнутой теории вполне сойдёт. sm.gif Что и подтверждается вышеотписавшимися товарищами.
Правда, существенная и ранняя часть моего опыта была именно с Xilinx-ом, так что за Квартус более чем пятилетней давности я не ручаюсь. Но в любом случае, если такое поведение имеет место, то это явный глюк. Поэтому я и просил Вас прислать мне пример, чтобы с этим глюком ознакомиться и иметь его ввиду.
P.S. Может быть на тех курса подразумевалось, что при изменениях в коде проекта, по другому разведутся и те куски, которые не менялись? Такая версия вполне разумна и соответствует действительности.


Не в одном из постов ТС-а нет утверждений, что разница возникает при полном сохранении исходных условий - настроек и кода.

Ха! Я уже 4 года как на Xilinx-е сижу...
Скорее всего дело в настройках проекта...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 27 2014, 03:49
Сообщение #51


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

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



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

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

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

Уверены на все 100%, что параметры идентичны? Там мно-о-о-го параметров.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 27 2014, 03:52
Сообщение #52


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(ViKo @ Mar 27 2014, 07:49) *
Там мно-о-о-го параметров.

Скорее даже не в параметрах дело (допустим, они по умолчанию), а в том, что порядок чтения исходников поменялся в проекте. От этого результат точно другой становится (проверял лично)!
Go to the top of the page
 
+Quote Post
ViKo
сообщение Mar 27 2014, 04:31
Сообщение #53


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

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



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

Проверил на вчерашнем. Сколько не перетрахивал порядок файлов, результат был неизменный.
Как только изменил SEED с 1 на 2, получил под 900 различий в sof файле.
Проектик простенький.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 27 2014, 04:36
Сообщение #54


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата
Сколько не перетрахивал порядок файлов, результат был неизменный.

Возможно, это зависит от каких-то опций компиляции и оптимизации, связанных со сквозной оптимизацией через интерфейсы модулей. Или еще с чем то. У меня есть жирный проект из 43 файлов, который еле-еле лезет по таймингам, в нем это проявляется. А вот в другом проекте, там всего 3 файла, вроде не проявляется.
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Mar 27 2014, 05:55
Сообщение #55


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



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

Скорее всего дело в порядке следования исходников. Файлы проекта сравнивали между собой?
Go to the top of the page
 
+Quote Post
XVR
сообщение Mar 27 2014, 05:58
Сообщение #56


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



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

Цитата
Отмечу, что пути к этим регистрам исключены из временного анализа,
А зря, было бы неплохо на них тоже какие нибудь констрейны наложить. А так синтезатор имеет полное право сделать с этими путями все, что ему захочется. Даже провести их через весь кристалл (3 раза laughing.gif )
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Mar 27 2014, 06:04
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094



Цитата(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, Вы пытаетесь достигнуть конечной цели каким-то не тем путём.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 27 2014, 07:41
Сообщение #58


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 18-03-14
Пользователь №: 80 976



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 , поэтому пока ни чего не утверждаю.

Сообщение отредактировал Viwon - Mar 27 2014, 07:43
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 27 2014, 08:40
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



То, что пути исключены из временного анализа, как раз и приводит к тому, что оно как развелось, так и развелось, без какой либо оптимизации. Так что, как вариант, второй способ сделать время повторяемым, кроме ручного вставления LUT, может быть, задание жесткого set_max_delay на путь, чтобы он не давал возможностей втыкать эти feeder-ы, или жесткие set_max_delay и set_min_delay одновременно, чтобы он разводку делал в совсем жестких временных рамках...
Go to the top of the page
 
+Quote Post
warrior-2001
сообщение Mar 27 2014, 09:32
Сообщение #60


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792



Тема весьма бурная и я не поспею ответить всем. Если брать одни и те же исходники и компилить их, не удаляя старую инфу о предыдущей компиляции, то результат будет гарантированно одинаков. С этим не поспоришь. Но если с одинаковыми исходниками собрать несолько ОДИНАКОВЫХ проектов, то результат может отличаться. И в чем тут проблема - разбираться можно долго, ибо исходников САПР нет.
Задача размещения элементов на кристалле весьма трудоёмка, и винить в неповторяемости трудно. Если все установки и тайминги выполняются(ну и логика верная), то с большой долей вероятности можно утверждать, что проект рабочий, а как там регистры лягли - дело второе. Если разводить два регистра - повторяемость будет много больше, чем у проекта со 100% загрузкой.
Я лишь делюсь своим скромным опытом, и не выдвигаю никаких гипотез.


--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
Go to the top of the page
 
+Quote Post

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

 


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


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