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

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

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

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

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

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

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

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

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

Но фиг то там.

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

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

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

 

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

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


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

создал logic lock регионы

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

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

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


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

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

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

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

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

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


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

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

 

Use smart compilation                                                    Off

 

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

 

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

 

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

post-52845-1485490013_thumb.jpg

 

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

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


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

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

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

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

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


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

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

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

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

 

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

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


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

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

 

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

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

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

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


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

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

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.

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

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


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

Вам нужен файл 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 в том числе?

 

 

 

 

 

 

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


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

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

 

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

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


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

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

 

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

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

post-52845-1485846155_thumb.jpg

 

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

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


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

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

post-52845-1485846155_thumb.jpg

 

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

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

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


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

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

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

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


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

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

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

 

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

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

 

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

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

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


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

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

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

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...