|
|
  |
Почему один и тотже триггер реализуется по-разному?, как с этим бороться? |
|
|
|
Mar 20 2014, 05:23
|
Участник

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

|
Всем доброго времени суток! Кто-нибудь может объяснить, почему Quartus от компиляции к компиляции может реализовывать один и тот же триггер по-разному – с использованием LUT входящую в LE где находится регистр(1 вариант) и без (2 вариант). Причем задержка в 1 варианте (с использованием LUT) оказывается меньше.
От чего зависит реализация, и как сказать Quarus’у чтобы определенные триггеры имели одинаковую реализацию?
|
|
|
|
|
Mar 20 2014, 12:59
|
Местный
  
Группа: Участник
Сообщений: 230
Регистрация: 29-08-09
Пользователь №: 52 094

|
Цитата(Viwon @ Mar 20 2014, 09:23)  От чего зависит реализация, и как сказать Quarus’у чтобы определенные триггеры имели одинаковую реализацию? Полностью аналогичная тема была несколько дней назад. Общий ответ на вопрос - никак, кроме использования примитивов FPGA в явном виде (через пупер-визард, к примеру). А если тайминг сходится, то можно и вовсе не обращать внимание на это.
|
|
|
|
|
Mar 21 2014, 05:20
|

Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 10-12-04
Из: Earth
Пользователь №: 1 437

|
То есть Вы хотите сказать, что один и тот же код (не меняющийся), с одними и теми же констрейнами, настройками компиляции и seed, будет каждый раз разодиться по разному? Да ну, не может такого быть, ведь начальными условиями для синтеза и разводки как раз и являются настройки, констрейны, код, а они не меняются. А раз не меняются начальные условия, то и результат не должен меняться... По идее...
|
|
|
|
|
Mar 21 2014, 05:51
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

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

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

|
Цитата(spectr @ Mar 21 2014, 09:20)  То есть Вы хотите сказать, что один и тот же код (не меняющийся), с одними и теми же констрейнами, настройками компиляции и seed, будет каждый раз разодиться по разному? Да ну, не может такого быть, ведь начальными условиями для синтеза и разводки как раз и являются настройки, констрейны, код, а они не меняются. А раз не меняются начальные условия, то и результат не должен меняться... По идее... Все верно говорите! Лезьте в настройки компилятора КВАКТУСА  в районе разводчика (map и т.д.) Должны быть настройки которые запрещают переразводить топологию при перекомпиляции проекта. Синтезатор по идее в таком режиме работает с той топологией кристалла, которая вас устраивает по временным задержкам, и все изменения в проекте учитывает пользуясь свободными ресурсами кристалла. Т.о. Вы перекомпилите, а ваши драгоценные триггера стоят все на том же месте, и как следствие прежние задержки. Осталось разобраться где то место которое нужно чесануть=)). Квактус мне не друг, поэтому не подскажу.... Тут наверняка есть гугу по альтере.. Ищите их и спрашивайте... Ваша задача имеет решение.
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Mar 21 2014, 06:24
|
Участник

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

|
Цитата(o_khavin @ Mar 20 2014, 16:59)  Полностью аналогичная тема была несколько дней назад. А можно ссылочку? Сходу не нашел. Цитата(dxp @ Mar 21 2014, 06:52)  У вас чисто академический интерес или что-то не получается? Мне нужно чтобы сигнал от одного источника к нескольким триггерам приходил одновременно. Если все триггеры реализуются одинаково, то разница в задержках получается около 0,005нс, а если по-разному то около 0,150нс.
|
|
|
|
|
Mar 21 2014, 06:45
|

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

|
Цитата(spectr @ Mar 21 2014, 10:11)  Да, такая технология у альтеры называется design partitions. Настраивается по-другому в отдельном окне, но смысл ее именно такой - защитить хорошо разведенные части проекта от переразводки. Вооот.... так объясните нашему уважаемому автору топика, куда и как нажимать.
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
Mar 21 2014, 06:54
|
Гуру
     
Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881

|
Цитата(Viwon @ Mar 21 2014, 10:24)  Мне нужно чтобы сигнал от одного источника к нескольким триггерам приходил одновременно. Если все триггеры реализуются одинаково, то разница в задержках получается около 0,005нс, а если по-разному то около 0,150нс. Поставьте примитив LCELL, и назначьте ему assignment в тот же LE, что и триггеру (триггер тоже вручную привязать в конкретный LE). Тогда, по идее, оно должно все такие триггеры сделать одинаковыми, с проходом сигнала через LUT. А вот как сделать обратное, заставить сигнал не идти через LUT, я не знаю. Возможно, chip editor может помочь, с ручным допиливанием того, что развелось.
|
|
|
|
|
Mar 21 2014, 07:23
|
Участник

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

|
Цитата(SM @ Mar 21 2014, 10:54)  Поставьте примитив LCELL, и назначьте ему assignment в тот же LE, что и триггеру (триггер тоже вручную привязать в конкретный LE). Тогда, по идее, оно должно все такие триггеры сделать одинаковыми, с проходом сигнала через LUT. А вот как сделать обратное, заставить сигнал не идти через LUT, я не знаю. Возможно, chip editor может помочь, с ручным допиливанием того, что развелось. А что это за примитив и куда его вставлять? Мой проект написан на Verilog'е. Зачем вообще используется LUT если нету промежуточной логики? Цитата(Dmitriyspb @ Mar 21 2014, 10:45)  Вооот.... так объясните нашему уважаемому автору топика, куда и как нажимать. Design Partition Planner, я нашел, но он работает только за деньги  А у меня бесплатная версия Quartus, поэтому этот вариант не подходит. Да и в целом меня беспокоит не то что каждый раз проект разводится по-разному, а то что такой примитив как триггер реализуется по разному внутри одной компиляции, в итоге получаются триггеры с разным быстродействием
|
|
|
|
|
Mar 21 2014, 09:00
|

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

|
Цитата(Viwon @ Mar 21 2014, 11:23)  Design Partition Planner, я нашел, но он работает только за деньги  А у меня бесплатная версия Quartus, поэтому этот вариант не подходит. Да и в целом меня беспокоит не то что каждый раз проект разводится по-разному, а то что такой примитив как триггер реализуется по разному внутри одной компиляции, в итоге получаются триггеры с разным быстродействием  Халявщики
--------------------
Победа - это когда N раз упал и N+1 раз встал.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|