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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> Почему один и тотже триггер реализуется по-разному?, как с этим бороться?
Dmitriyspb
сообщение Mar 21 2014, 09:32
Сообщение #16


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 21-11-12
Из: Россия г. Санкт-Петербург
Пользователь №: 74 498



Цитата(Maverick @ Mar 21 2014, 13:03) *
просто любопытство - у Вас ПО официально купленное?

Если webpack, я бы так не писал smile3009.gif


--------------------
Победа - это когда N раз упал и N+1 раз встал.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 21 2014, 10:03
Сообщение #17


Гуру
******

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



Цитата(Viwon @ Mar 21 2014, 11:23) *
А что это за примитив и куда его вставлять? Мой проект написан на Verilog'е.

Это примитив из альтерской библиотеки, такой же, как DFF, DFFE, и прочие физические сущности. Этот означает в контексте FPGA один LUT. От того, на каком языке написан проект, использование примитивов по сути не меняется. Смотрите хелп на него, там есть примеры на всех языках.

Цитата(Viwon @ Mar 21 2014, 11:23) *
Зачем вообще используется LUT если нету промежуточной логики?

Видимо, ресурсы разводки так разлеглись, что надо было тут подключить через LUT, а напрямую не склалось у роутера.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 21 2014, 11:26
Сообщение #18


Участник
*

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



Да, трюк с LCELL вроде работает, непонятные feeder’ы заменились user_cell’ами, и наверное эта картина теперь будет постоянна, понаблюдаю…

В Verilog-описание схемы LCELLы пока не вводил, удалось обойтись изменениями в qsf-файле:
Код
#Вставляем LCELL между источником и триггером
set_instance_assignment -name LCELL_INSERTION 1 -from "VIRTUALPAL:inst4|LOCKPOSa~0" -to "POSCOUNTER:inst2|SYNCHRONIZER:m_lockpos_sync[0]|sync[0]"
#Фиксируем LCELL в LUTе LE
set_location_assignment LCCOMB_X14_Y6_N0 -to "inst4|LOCKPOSa~0user_cell0"
#Фиксируем регистр в LE
set_location_assignment LCFF_X14_Y6_N1 -to "POSCOUNTER:inst2|SYNCHRONIZER:m_lockpos_sync[0]|sync[0]"

Минус этого способа убогие автогенерируемые имена LCELLов

Сообщение отредактировал Viwon - Mar 21 2014, 11:27
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 21 2014, 12:34
Сообщение #19


Гуру
******

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



Кстати, к вопросу "почему". Вторая причина появления этих фидеров - нарушение hold time в пути, и разводчик вставляет их для исправления этого нарушения. Причем тут достаточно одной пикосекунды, чтобы в один путь его вставили, в другой - нет.
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Mar 21 2014, 13:41
Сообщение #20


Местный
***

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



Цитата(spectr @ Mar 21 2014, 09:20) *
То есть Вы хотите сказать, что один и тот же код (не меняющийся), с одними и теми же констрейнами, настройками компиляции и seed, будет каждый раз разодиться по разному? Да ну, не может такого быть, ведь начальными условиями для синтеза и разводки как раз и являются настройки, констрейны, код, а они не меняются. А раз не меняются начальные условия, то и результат не должен меняться... По идее...

Конечно же, при сохранении всех исходных условий, будет разводиться одинаково. Но вот если что-то изменить - строчку кода, параметр синтезатора, версию софта и т.п. - могут появиться лавинообразные изменения результатов.

Сообщение отредактировал o_khavin - Mar 21 2014, 13:44
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 22 2014, 09:57
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



С чего Вы решили, что разводка будет одинаковой ? Я пруф не приведу сейчас, читал немного - они разводку начинают со случайных ячеек (ну грубо говоря). Плюс достоверно наши разводчики говорили - не совпадает разводка от раза к разу.
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 22 2014, 10:07
Сообщение #22


Гуру
******

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



Цитата(DASM @ Mar 22 2014, 13:57) *
со случайных ячеек (ну грубо говоря).

С псевдослучайных. Для этого SEED и задается...
А доказать в данном случае просто - собираем два раза один проект, и сравниваем битстрим - видим, что он одинаковый.
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 22 2014, 10:25
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Ну а если ничего не задавать - SEED нулевой будет всегда ? Я более про Квартус
Go to the top of the page
 
+Quote Post
SM
сообщение Mar 22 2014, 10:40
Сообщение #24


Гуру
******

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



Цитата(DASM @ Mar 22 2014, 14:25) *
SEED нулевой будет всегда ?

наверное. он же там по умолчанию задан какой-то, если его не менять.
Go to the top of the page
 
+Quote Post
DASM
сообщение Mar 22 2014, 10:43
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Ну значит наши плисоводы с бодуна на работе были всегда - говорят нифига, разводка от разводки отличаются, битстримы правда не сравнивали, мне лень, а они не умеют. Но работало кардинально разно, хотя ничего не меняли. ПС - раз работало по-разному - то ясно, что они констрейны толком задать не могли, да чего говорить - они в свои 50 лет Верилог так и не освоили, на схематике все рисовали. Но, надо однать должное, в отличии от нас, молодых-горячих все работало и работает.
Go to the top of the page
 
+Quote Post
o_khavin
сообщение Mar 22 2014, 12:14
Сообщение #26


Местный
***

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



Цитата(DASM @ Mar 22 2014, 13:57) *
С чего Вы решили, что разводка будет одинаковой ? Я пруф не приведу сейчас, читал немного - они разводку начинают со случайных ячеек (ну грубо говоря). Плюс достоверно наши разводчики говорили - не совпадает разводка от раза к разу.

В софте Xilinx-а я уже много лет наблюдаю, что разводка на 100% воспроизводится при неизменных стартовых условиях.
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 25 2014, 04:23
Сообщение #27


Участник
*

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



Цитата(SM @ Mar 21 2014, 16:34) *
Кстати, к вопросу "почему". Вторая причина появления этих фидеров - нарушение hold time в пути

Не подходит, пути к этим триггерам исключены из временного анализа с помощью set_false_path.
Go to the top of the page
 
+Quote Post
FPGAz
сообщение Mar 25 2014, 06:30
Сообщение #28


Участник
*

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



Цитата(Viwon @ Mar 20 2014, 09:23) *
От чего зависит реализация, и как сказать Quarus’у чтобы определенные триггеры имели одинаковую реализацию?

Картинки есть, а где HDL-код для триггера и для того, что рядом с ним?
Go to the top of the page
 
+Quote Post
Мур
сообщение Mar 25 2014, 08:20
Сообщение #29


Знающий
****

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



Цитата(DASM @ Mar 22 2014, 12:57) *
С чего Вы решили, что разводка будет одинаковой ? Я пруф не приведу сейчас, читал немного - они разводку начинают со случайных ячеек (ну грубо говоря). Плюс достоверно наши разводчики говорили - не совпадает разводка от раза к разу.

Верно! Фиттер реализует вероятностный подход в своей работе. И только LLR (Logic Lock Regions) он не трогает. Оставляет прежним от старой компиляции. При инкрементной компиляции это неизбежно (и удобно!). Все что вы зафиксировали в проекте будет прежним, а вот остальное он будет разводить каждый раз по-разному. Единственный критерий,- требования констрейнов. Воспроизводимость проектов разная, но дизайн - рабочий!
Go to the top of the page
 
+Quote Post
Viwon
сообщение Mar 25 2014, 09:09
Сообщение #30


Участник
*

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



Цитата(FPGAz @ Mar 25 2014, 10:30) *
Картинки есть, а где HDL-код для триггера и для того, что рядом с ним?

В Verilog-коде нет ни чего мудреного и навряд ли даст какую-нибудь зацепку, тем не менее:
CODE
module SYNCHRONIZER(SIGNALa, SIGNAL, CLK);
output SIGNAL;

input SIGNALa;// внешний асинхронный сигнал
input CLK;

reg [1:0] sync;
always @(posedge CLK)
sync[1:0] <= {sync[0], SIGNALa};

assign SIGNAL = sync[1];

endmodule

Это синхронизатор из двух последовательных триггеров. В 0ом посте приведена картинка для пути от внешней комбинаторной схемы до регистра sync[0]. Но уверяю Вас внутри этого модуля, путь от sync[0] к sync[1] подвержен тойже проблеме (регистр sync[1] реализуется, то с feeder’ом, то без), с той лишь разницей, что это синхронная схема и ее временные характеристики обеспечивает Quartus, мне до них нет дела.

Думаю, изучив триггеры в своем проекте с помощью Technology Map Viewer(Post-Fitting), также обнаружите, что они реализуются по-разному, в RTL Viewer они идентичны.

Сообщение отредактировал Viwon - Mar 25 2014, 09:10
Go to the top of the page
 
+Quote Post

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

 


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


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