Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Оптимизация VHDL-кода
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Deddy85
Здравствуйте.
Начальство в У.З. где я работаю в приказательном тоне заставило написать научную статью о существующих методах оптимизации VHDL-кода которые применяю синтезаторы xillinx и altera, либо других фирм, в принципе не важно, хоть симплифай. На сайте производителей очень мало информации, разве что какие ключи использовать для оптимизации в их IDE, но не слова о принципах.
Если кто владеет подобной информацией, просьба поделится. Так же интересую статьи в интернете на эту тем. Поделитесь ссылочками, пожалуйста.
Буду превелико благодарен за любую информацию.
des00
Цитата(Deddy85 @ Aug 25 2009, 14:34) *
Здравствуйте.
Начальство в У.З. где я работаю в приказательном тоне заставило написать научную статью о существующих методах оптимизации VHDL-кода которые применяю синтезаторы xillinx и altera, либо других фирм, в принципе не важно, хоть симплифай. На сайте производителей очень мало информации, разве что какие ключи использовать для оптимизации в их IDE, но не слова о принципах.
Если кто владеет подобной информацией, просьба поделится. Так же интересую статьи в интернете на эту тем. Поделитесь ссылочками, пожалуйста.
Буду превелико благодарен за любую информацию.


любые книги об оптимизации, например библия Дугласа Смита HDL chip Design или Advanced FPGA Design Architecture, Implementation, and Optimization. Затем обычная логика здравого смысла + эксперементы с синтезатором, опираясь на даташит целевой фпга.
SFx
буквально вчера конструкцию VHDL
Код
sum<=signal1+signal2+7+25;

Quartus 9.0 раздлжил на 4 последовательных сумматора, хотя с тем же успехом можно было посчитать сумму 7 и 25 и сделать все на трех.
Самое забавное, когда нечто подобное было с Xilinx (правда синтез на Synplify был) таких багов вроде бы не было...
des00
Цитата(SFx @ Aug 26 2009, 00:37) *
буквально вчера конструкцию VHDL
Код
sum<=signal1+signal2+7+25;

Quartus 9.0 раздлжил на 4 последовательных сумматора, хотя с тем же успехом можно было посчитать сумму 7 и 25 и сделать все на трех.
Самое забавное, когда нечто подобное было с Xilinx (правда синтез на Synplify был) таких багов вроде бы не было...


Код
module sum_test (input shortint a, b, output shortint c);
  assign c = a + b + 7 + 25;
endmodule


вы аттач имеете в виду ?

тогда объясните как квартус реализовал это все на

Цитата
+------------------------------------------------------+
; Analysis & Synthesis Resource Usage Summary ;
+---------------------------------------------+--------+
; Resource ; Usage ;
+---------------------------------------------+--------+
; Estimated Total logic elements ; 27 ;
; ; ;
; Total combinational functions ; 27 ;
; Logic element usage by number of LUT inputs ; ;
; -- 4 input functions ; 0 ;
; -- 3 input functions ; 15 ;
; -- <=2 input functions ; 12 ;
; ; ;
; Logic elements by mode ; ;
; -- normal mode ; 2 ;
; -- arithmetic mode ; 25 ;
; ; ;
; Total registers ; 0 ;
; -- Dedicated logic registers ; 0 ;
; -- I/O registers ; 0 ;
; ; ;
; I/O pins ; 48 ;
; Maximum fan-out node ; Add0~0 ;
; Maximum fan-out ; 2 ;
; Total fan-out ; 132 ;
; Average fan-out ; 1.07 ;
+---------------------------------------------+--------+



ЗЫ. RTL это не то что синтезируется %)
DmitryR
Цитата(Deddy85 @ Aug 25 2009, 23:34) *
написать научную статью о существующих методах оптимизации VHDL-кода которые применяю синтезаторы xillinx и altera, либо других фирм
Это вряд ли возможно, потому что эти методы - коммерческая тайна. В книжках вы сможете найти определенные методы, но применяет ли их и как Xilinx или Altera вы вряд ли когда-то узнаете.
dinam
Когда-то в каком то журнале читал про оптимизацию. Нашел сайт авторов. Даже как-то обращался к ним за помощью. Была программа, которая после синтеза занимала 129 ячеек, а в Altere было 128 smile.gif . Не смогли помочь sad.gif
Builder
Цитата(dinam @ Aug 27 2009, 07:22) *
Когда-то в каком то журнале читал про оптимизацию. Нашел сайт авторов. Даже как-то обращался к ним за помощью. Была программа, которая после синтеза занимала 129 ячеек, а в Altere было 128 smile.gif . Не смогли помочь sad.gif

Так если нужно то, что по ссылке, так Соловьев ещё с совецких времён этими вопросами занимается.
Можно порыть книжки, помнится на лекциях давалась подборка литературы, в том числе и его.
Почитать что наработано ещё с совецких времён. Помнится нас ещё Закревский дрючил - тоже тот ещё монстр.

Ну а Альтера и Ксалинкс наверняка использует что-то подобное как базу.
Раньше, когда компы были слабые, использовали в основн приблизительные методы, по мере ускорения процов
наверняка стали использовать более точны методы, которые дают лучший результат, но требуют больше ресурсов процессора.
А у ж как именно делает Альтера или ксалинкс, какие именно методы использует и почему - Вы этого не узнаете.
Максимум, если Вы крутой пользовательль и берёте у нихмного микрух, может дадут какой поверхностный комментарий.
Хотят теоретически можно сделать реверс инженеринг программ синтеза, но это оооочень трудоёмко...
yes
Цитата(Deddy85 @ Aug 25 2009, 23:34) *
Здравствуйте.
Начальство в У.З. где я работаю в приказательном тоне заставило написать научную статью о существующих методах оптимизации VHDL-кода которые применяю синтезаторы xillinx и altera, либо других фирм, в принципе не важно, хоть симплифай. На сайте производителей очень мало информации, разве что какие ключи использовать для оптимизации в их IDE, но не слова о принципах.
Если кто владеет подобной информацией, просьба поделится. Так же интересую статьи в интернете на эту тем. Поделитесь ссылочками, пожалуйста.
Буду превелико благодарен за любую информацию.


есть девняя, но полезная книжка Asic The Book
там глава
http://iroi.seu.edu.cn/books/asics/Book2/CH12/CH12.3.htm

ну и вообще, автор много распространяется об устройстве софта, по крайней мере в бумажной версии
Sergey'F
Можно еще поискать книги и статьи следующих авторов:
Robert K. Brayton
Alberto Sangiovanni-Vincentelli
Giovanni De Michelli
ну и ссылки в их работах.

У меня дома есть некоторая подборка статей по логическому синтезу в том числе для ПЛИС. Могу посмотреть. Какие алгоритмы используются в конкретных синтезаторах, как уже было замечено, Вам никто не откроет. biggrin.gif
Deddy85
Sergey'F, был бы рад, если бы вы посмотрели и выложили то что у вас есть smile.gif
Sergey'F
Цитата(Deddy85 @ Aug 29 2009, 00:01) *
Sergey'F, был бы рад, если бы вы посмотрели и выложили то что у вас есть smile.gif

Соврал, дома нет. В университете. Только на следующей неделе посмотрю.

Но поиск в google по теме "fpga logic synthesis" дает сразу несколько ссылок, причем многие на открытые работы.

Проблема может быть также в том, что "у них" и "у нас" в классических курсах, связанных с синтезом логических схем, часто изучаются разные методики. Практически стандартная программа у них: после карт Карно и МакКласки рассматривать Эспрессо и BDD(представление функций булевой логики графами), после чего рассматривать синтез многоуровневой логики на основе этих концепций, а потом mapping в FPGA. Всякие версии BDD используются и при маппинге на ячейки FPGA. Посмотрите презентации по этому курсу Брайтона в разделе Lectures. Плюс-минус такое содержание будет в 80% их книг по логическому синтезу.

Я не общался с нашими грандами, как упомянутый здесь Закревский (хотя наш зав. кафедрой его хорошо знает), но я не уверен, что Ваше начальство ожидает увидеть статью об алгоритмах над графами и разных эвристиках. rolleyes.gif

Кстати, эффективность и однозначность синтеза с языков оставляет желать лучшего. Вот как раз сейчас обсуждали. Все хорошо, когда компилятор может извлечь на этапе анализа кода знакомые ему структуры - сумматор, умножитель, мультиплексор, дешифратор, которые он знает, как эффективно реализовать. Но в приведенном выше примере он извлек вместо n сумматоров один мультиплексор n->1 и один сумматор. Результат получился не очень хороший и на уровне синтеза с RTL исправить это практически невозможно, так как исследуется не все пространство решений, а ищется некоторый локальный минимум. Приведенные там скриншоты очень хорошо иллюстрируют два этапа - перевод на уровень RTL и последующую оптимизацию логики с этого уровня. В книгах обычно рассматривается только второй этап. К сожалению, работ о том, как эффективно конвертировать код в RTL, я не встречал.

P.S. Приложил пару статей, что нашел дома.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.