Перейти к содержанию

Инкрементальная компиляция в Quartus

Салют!
Наконец-то дошли руки до инкрементальной компиляции.

Создал два одинаковых параметризованных модуля.
Код
module inc(
    (*chip_pin = "73"*) output Y1,
    (*chip_pin = "74"*) output Y0,
        (*chip_pin = "75"*) input D1,
        (*chip_pin = "76"*) input D0,
            (*chip_pin = "77"*) input C);
    M #(63) M0(.Y(Y0), .D(D0), .C(C));
    M #(128) M1(.Y(Y1), .D(D1), .C(C));
endmodule

module M #(parameter N = 4) (output Y, input D, input C);
    reg [N-1:0]REGQ;
    always @(posedge C)
        REGQ <= {REGQ[N-2:0], D};
    assign Y = ^REGQ;
endmodule

Включил опцию в настройках:
[attachment=109493:1.png]

Разложил эти модули по ЛогикЛок регионам, назначил партишины:
[attachment=109494:2.png]

Откомпилировал:
[attachment=109497:p1.png]

Меняем разрядность модуля М1, ожидаем что модуль М0 останется незатронутым, однако, как видим, М0 тоже переразмещён:
[attachment=109498:p2.png]

Quartus 9.1, микросхема Циклон 4. Где я неправ?
Изменено пользователем Jackov

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Jackov @ Oct 29 2017, 17:13) <{POST_SNAPBACK}>
Разложил эти модули по ЛогикЛок регионам, назначил партишины:

Где я неправ?

Забыли задать тип нетлиста Post-Fit?
Цитата
3.Change the netlist type of each partition, including the top-level entity, to Post-Fit to preserve as muchas possible for the next compilation.

См. qts-qps-handbook.pdf, стр. 98.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(blackfin @ Oct 29 2017, 17:22) <{POST_SNAPBACK}>
Забыли задать тип нетлиста Post-Fit?

Пробовал, без эффекта. Если четно, не понимаю смысла этих опций.

Цитата(blackfin @ Oct 29 2017, 17:22) <{POST_SNAPBACK}>
См. qts-qps-handbook.pdf, стр. 98.

Смотрел, не помогло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Jackov @ Oct 29 2017, 18:26) <{POST_SNAPBACK}>
Смотрел, не помогло.

Возможно, поможет это:
Цитата
Design Partition Assignments Compared to Physical Placement Assignments

Design partitions for incremental compilation are logical partitions, which is different from physical placement assignments in the device floorplan. A logical design partition does not refer to a physical area of the device and does not directly control the placement of instances. A logical design partition sets up a virtual boundary between design hierarchies so that each is compiled separately, preventing logical optimizations from occurring between them. When the software compiles the design source code, the logic in each partition can be placed anywhere in the device unless you make additional placement assignments.

If you preserve the compilation results using a Post-Fit netlist, it is not necessary for you to back-annotate or make any location assignments for specic logic nodes. You should not use the incremental compilation and logic placement back-annotation features in the same Quartus Prime project. The incremental compilation feature does not use placement ”assignments” to preserve placement results; it simply reuses the netlist database that includes the placement information.
См. стр.111. /И далее там ещё один интересный абзац./

То есть, Quartus может двигать по кристаллу синтезированный ранее нетлист для любой partition как единое целое, не меняя соединений внутри этой partition.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вопчем переключил сюда - заработало. Однако прирост скорости компиляции отсутствует и даже немного медленнее стало, что странно. Я так понимаю, если в проекте изменения не делать, то и компиляция должна проходить мгновенно?
[attachment=109523:11.png]

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я сталкивался с тем, что опция Rapid recompile в Quartus 9.1 не работала, вернее никак не влияла на скорость процесса компиляции. Возможно стоит попробовать сдалть это же в Q13.1.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Jackov @ Oct 30 2017, 18:17) <{POST_SNAPBACK}>
Вопчем переключил сюда - заработало. Однако прирост скорости компиляции отсутствует и даже немного медленнее стало, что странно. Я так понимаю, если в проекте изменения не делать, то и компиляция должна проходить мгновенно?

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(spectr @ Dec 13 2017, 16:24) <{POST_SNAPBACK}>
Инкрементная компиляция дает реальный прирост только на больших проектах, где одна партиция занимает под тысячу и более лутов, а проект может компилиться по пол-дня и больше. Вот тогда она выстреливает. На маленьких же проектах смысла в ней нет.
И еще надо очень внимательно разбивать на партиции (читайте хендбук, там все хорошо расписано). Например, на границах партиций желательно ставить триггера, чтобы фиттер "по ним" умел их разрезать, не затрагивая внутреннюю логику партиции.
То есть, для того чтобы эта фича работала, надо не просто включить волшебный чекбокс, но еще и придерживаться ряда определенных правил построения проекта.

Поддерживаю полностью.
Замечания ТС - у Вас партиция стоит post-synhteis при этом основное время компиляции тратится на fitter, т.е. выигрыш по времени будет минимальным, если вообще будет - добавляются дополнительные требования на размещение, в отличие от ситуации при отсутствии лоджик рута, Вы приводите скриншот после разводки, но процесс фиттера будет произведен заново и, естественно, картинки будут различаться. На партиции обычно разбивают не для экономии времени, а для впихивания невпихуемого и вытягивания таймингов. Для ускорения времени компиляции обычно оптимизируют сам проект и задают грамотно ограничения. Если хочется просто увидеть уменьшение времени компиляции, наплевав для начала на тайминги, можно ослабить настройки того же фиттера - fast fit sm.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(bogaev_roman @ Dec 13 2017, 17:16) <{POST_SNAPBACK}>
На партиции обычно разбивают не для экономии времени, а для впихивания невпихуемого и вытягивания таймингов.
Я то, в принципе, понимаю что инкрементальная компиляция нужна для того чтобы не рушилась удачная разводка на модулях которые не меняются. Я не понимаю почему он вообще компилирует повторно проект в котором не было никаких изменений?

Цитата(bogaev_roman @ Dec 13 2017, 17:16) <{POST_SNAPBACK}>
у Вас партиция стоит post-synhteis при этом основное время компиляции тратится на fitter
А что нужно ставить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Jackov @ Dec 13 2017, 21:59) <{POST_SNAPBACK}>
Я то, в принципе, понимаю что инкрементальная компиляция нужна для того чтобы не рушилась удачная разводка на модулях которые не меняются. Я не понимаю почему он вообще компилирует повторно проект в котором не было никаких изменений?

Поменяли настройку, добавили строчку кода в любое место - процесс начнется заново и по другому сценарию.
Вообще процесс использования партиций (post-fit) примерно следующий - создается проект, не обязательно топовый, в котором реализован алгоритм, создается партиция. Полностью все компилируется и, если получены требуемые характеристики, эта партиция экспортируется. Далее в топовый проект вставляется (импортируется) вместо RTL описания .qxp - файл. Этот вставленный кусок не будет синтезироваться и разводиться заново. Как правильно этим пользоваться расписано в документации.
Цитата
А что нужно ставить?

Пост-синтез - это партиция, в которой алгоритм реализован в виде базиса (его трогать компилятор не будет), но ничего не говорится о том, как этот базис ложится в самом кристалле, нет привязки к конкретным элементам, фиттер пойдет заново.
ЗЫ. Можете посмотреть перевод на русском - http://www.naliwator.narod.ru/ , инкрементальная компиляция.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Jackov @ Oct 30 2017, 18:17) <{POST_SNAPBACK}>
Вопчем переключил сюда - заработало. Однако прирост скорости компиляции отсутствует и даже немного медленнее стало, что странно.

Разобрался, и года не прошло. sm.gif
Rapid recompile здесь ни при чём. Нужно чтобы модуль М находился в другом файле. Ну и да, Post-Fit надо ставить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация