Jump to content

    
Sign in to follow this  
novartis

Фиксация на кристалле результатов компиляции

Recommended Posts

Есть проект для квартуса (16.0). Он состоит из нескольких модулей. Частота работы модулей достаточно высокая 320МГц.

Проект еще не написан и на 30%, а уже иногда не пролажу по частоте.

Решил поступить таким образом. Создал design partition, создал logic lock регионы.

Оставил пока только два модуля, остальные закоментарил.

Скомпилил проект. Частоты удовлетворены. Отрицательных слаков нет. Зафиксировал регионы (и из положение, и их размеры). Запретил размещение логики других модулей в этих регионах.

Скомпилил проект еще раз. Частоты удовлетворены.

Установил для них Netlist Type : Post-Fit. То есть как я думал, это означает, что жестко прибил гвоздями расположение моих модулей к кристаллу, и теперь от компиляции к компиляции мои модули будут успешно пролазить по частоте.

Но фиг то там.

Подключаю другие модули - получаю отрицательные слаки в моих зафиксированных модулях.

Отключаю новые модули - все равно получаю отрицательные слаки.

На второй раз компиляции после отключения новых модулей - начинает проходить по частоте.

 

Чтож я делаю не так?

Share this post


Link to post
Share on other sites
создал logic lock регионы

Хоть вы и зафиксировали модули в логиклок-регионах, он всё равно, хоть и внутри них, но переразводит ваши модули при компиляции.

Тут нужна инкрементальная компиляция. Признаться честно я пока с ней так и не разобрался, может вы одолеете.

Share this post


Link to post
Share on other sites
Подключаю другие модули - получаю отрицательные слаки в моих зафиксированных модулях.

Отключаю новые модули - все равно получаю отрицательные слаки.

На второй раз компиляции после отключения новых модулей - начинает проходить по частоте.

А что в отчёте сообщает - какие нетлисты для ваших партишинов были применены? Включена ли смарт-компиляция?

Share this post


Link to post
Share on other sites
А что в отчёте сообщает - какие нетлисты для ваших партишинов были применены? Включена ли смарт-компиляция?

 

Use smart compilation                                                    Off

 

Значит надо разбираться, как правильно сделать, то что я хочу :rolleyes:

 

Сейчас включу смарт компиляцию

 

Галочка установки Use smart compile не активна, так и должно быть?

post-52845-1485490013_thumb.jpg

 

quartus версии standart edition, нашел, что Rapid Recompile для Аррии 10 в стандарте не поддерживается, качаю pro edition

Share this post


Link to post
Share on other sites
Галочка установки Use smart compile не активна, так и должно быть?

Нет, у меня активна. Нужно разбираться с этой опцией.

А что Вы имеете ввиду под "Запретил размещение логики других модулей в этих регионах"?

Share this post


Link to post
Share on other sites
Нет, у меня активна. Нужно разбираться с этой опцией.

А что Вы имеете ввиду под "Запретил размещение логики других модулей в этих регионах"?

Для logic lock региона выставил свойство Reserved в On

 

А у вас квартус какой стандарт или pro? для Аррии 10 эта галочка активна?

Share this post


Link to post
Share on other sites
Для logic lock региона выставил свойство Reserved в On

 

А у вас квартус какой стандарт или pro? для Аррии 10 эта галочка активна?

С некоторых пор я вообще перестал пользоваться logic lock регионами,иногда только мешают, только партишинами.

Квартус стандарт, Аррия 10 не установлена.

Share this post


Link to post
Share on other sites
А что в отчёте сообщает - какие нетлисты для ваших партишинов были применены? Включена ли смарт-компиляция?

novartis, посмотрите всё-таки отчет о сборке.

Вам нужен файл PROJECT_NAME.merge.rpt, там есть табличка:

 

+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
; Partition Merge Netlist Types Used                                                                                                                                                              ;
+--------------------------------+----------------+-------------------+------------------------+---------------------------------------------------------------------------------------------------+
; Partition Name                 ; Partition Type; Netlist Type Used; Netlist Type Requested; Partition Contents                                                                               ;
+--------------------------------+----------------+-------------------+------------------------+---------------------------------------------------------------------------------------------------+

Где и будет написано, что он использовал.

Если там будет Source, вместо Post-Fit, то надо смотреть лог компиляции, он там говорит, почему выбрал Source, вместо Post-Fit.

Один из кейсов, если не ошибаюсь, у разных патрициях, которые общаются между собой выставлена разная оптимизация на "границах", и из-за этого происходит лишний пересинтез.

Share this post


Link to post
Share on other sites
Вам нужен файл PROJECT_NAME.merge.rpt, там есть табличка:

Посмотрел, там написано Post-Fit. Да и в репорте фиттера тоже везде написано, что применялось Post-Fit.

+------------------+-----------------+--------------------+---------------------------+--------------------

; Partition Name ; Partition Type ; Netlist Type Used ; Netlist Type Requested ; Partition Contents

+------------------+-----------------+--------------------+---------------------------+--------------------

; x ; User-created ; Post-Fit ; Post-Fit ; x

 

 

Провел такой эксперимент. Скопировал проект.

Для второго проекта раскомментировал новый модуль.

Компилю оба проекта. В итоге - первый проект без проблем, второй проект - с отрицательным слаком для одного пути.

Запускаю анализ этого пути во втором проекте.

Запускаю анализ такого же пути для первого проекта.

Так вот, если смотреть на Data Path, то Location и Elements одинаковые для обоих проектов, а времена чуть отличаются, и для второго проекта время пути чуть больше набегает.

post-52845-1485839502_thumb.jpg

post-52845-1485839505_thumb.jpg

 

Открываю конкретно LABCELL_X212_Y10_N18 в Resource Property Editor.

Там есть отличия. Сигналы приходят на разные входа LAB. Имена сигналов одинаковые. Функции у LUT разные установлены, хотя исходники не менялись.

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

 

 

Я в этом слабо разбираюсь, поэтому такой вопрос:

квартус выполнил Post-Fit? По идеи путь проходить по одним и тем же локациям для обоих проектов.

Или Post-Fit подразумевает одинаковость во всем, и в Resource Property Editor в том числе?

 

 

 

 

 

 

Share this post


Link to post
Share on other sites

Недостаточно только тип нетлиста указать! Вы Preservation Level в какое значение выставили в Partition Editor'е? Там же разные варианты, самый железобетонный, который защищает всё и вся внутри партиции - Placement and Routing, насколько я помню. Этот параметр задает что именно в данной партиции защищать от всемогущего фиттера - размещение/разводку/и то и другое.

 

UPD: А если и это не поможет, можно попробовать сделать финт ушами: скомпилировать партицию так, чтобы она удовлетворяла временным требованиям, экспортировать ее в .qxp, после чего этот .qxp натянуть на новую партицию в основном проекте...

Share this post


Link to post
Share on other sites
Недостаточно только тип нетлиста указать! Вы Preservation Level в какое значение выставили в Partition Editor'е? Там же разные варианты, самый железобетонный, который защищает всё и вся внутри партиции - Placement and Routing, насколько я помню. Этот параметр задает что именно в данной партиции защищать от всемогущего фиттера - размещение/разводку/и то и другое.

 

UPD: А если и это не поможет, можно попробовать сделать финт ушами: скомпилировать партицию так, чтобы она удовлетворяла временным требованиям, экспортировать ее в .qxp, после чего этот .qxp натянуть на новую партицию в основном проекте...

У меня выставлено Placement.

post-52845-1485846155_thumb.jpg

 

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

Share this post


Link to post
Share on other sites
У меня выставлено Placement.

post-52845-1485846155_thumb.jpg

 

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

Попробуйте сначала другие методы защиты партиции, в частности Placement and Routing. Ну и попробуйте поставить галочки "Ignore changes in source files..." и "Allow partition to be strictly preserved...".

Share this post


Link to post
Share on other sites
UPD: А если и это не поможет, можно попробовать сделать финт ушами: скомпилировать партицию так, чтобы она удовлетворяла временным требованиям, экспортировать ее в .qxp, после чего этот .qxp натянуть на новую партицию в основном проекте...

Я такими вещами занимался (именно post-fit) - работало без проблем, все временные соотношения сохранялись (хотя если добавлялись некоторые сигналы из внутренней логики на STII, то немного все-таки менялись). Один недостаток - при большом заполнении кристалла остальная логика разводилась плохо, поэтому при создании партиций приходилось их упаковывать плотно в заранее спланированные области и все входы/выходы жестко прибивать к конкретным координатам (по умолчанию компилятор их мог разместить где угодно).

Share this post


Link to post
Share on other sites

Но там только два варианта в выпадающем списке - Netlist Only и Placement.

Placement and Routing - такого нету

 

PS. Посмотрел для Stratix V например в выпадающем списке 3 пункта: Netlist Only, Placement, Placement and Routing.

А для Арии 10 только два. И как быть? Это я в квартус стнадарт эдишин использую.

 

все входы/выходы жестко прибивать к конкретным координатам (по умолчанию компилятор их мог разместить где угодно)

а как это делается?

Share this post


Link to post
Share on other sites
а как это делается?

assignment editot -> имя сигнала - location - координата (например x1_y1), ну или прямо в qsf - файле, например, set_location_assignment X1_Y1 - to имя сигнала (с полным иерархическим путем к нему, если не на верхнем уровне)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this