|
Как уменьшить объем проекта?, по количеству логических ячеек |
|
|
|
Jul 28 2010, 21:51
|

Гуру
     
Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329

|
2 Docent86 Цитата Пока не повесил пины - проект занимал копейки (270), после вывода на пины объем увеличился в сотни раз (57,162) пока нет физических выводов на пины квартус соптимизирует всё что вы там написали, как только появляются физические выводы "в мир" - квартус вам и выдаёт всю вашу кухню. Цитата Подскажите новичку как можно оптимизировать? Общие приёмы можно в инете найти да и тут на форуме квинтессенцию их выкладывали (встречал где то недели 2-3 назад в " Программируемая логика (ПЛИС) - Programmable Logic (FPGA,CPLD, PLD)"), а так без кода сказать трудно что там не так.
|
|
|
|
|
Jul 28 2010, 22:49
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 19-06-10
Пользователь №: 58 021

|
QUOTE (Docent86 @ Jul 29 2010, 00:22)  Создаю проект и столкнулся с такой проблемой - логических ячеек категорически нехватает, установил оптимизацию по площади - всего 1% выиграл. Есть ограничение по используемой ПЛИС - максимум cycloneIII EP3c10... Пока не повесил пины - проект занимал копейки (270), после вывода на пины объем увеличился в сотни раз (57,162). Разделение на несколько ПЛИС помогает, но тогда устройство не выгодно по себестоимости. Подскажите новичку как можно оптимизировать? на входе в схему 72 разряда, затем разные преобразования для каждых 12 разрядов и 2 пина на выходе - последовательный код + сигнал управления. P.S. Возможно ли это из-за использования длинных шаблонов в преобразовании и/или больших функций case Ваша ФПГА 10К ( ЛУТ4 + ФФ) 1. определите сколько Логики и сколько ФФ потребляет проект. Логику иногда можно оптимизировать. 2. читайте Доклад -если критическая цепь очень длинная то наверняка она сьедает много ЛУТ - неоптимальный алгоритм? 3. Synplify иногда может улучшить area на 50% 4. Используйте RAM где можно вместо регистров
|
|
|
|
|
Jul 29 2010, 01:12
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(Docent86 @ Jul 28 2010, 15:22)  Пока не повесил пины - проект занимал копейки (270), после вывода на пины объем увеличился в сотни раз (57,162). Что то вы темните, даже если вы не назначили пины в Pin Planner, ква автоматически раскидывает пины как ему заблагорассудится. Не мог так увеличится размер. Либо под словами "Пока не повесил пины" вы понимаете назначение пинов на топлевеле через assign например (Verilog) тогда вы сами себе злобный буратина. Раньше думать надо было %) А общий совет такой: в одну руку Report -> Analysis & Synthesis -> Resourse Utilization by Entity и в путь, смотреть сколько и что у вас весит, во вторую руку сорец + тетрадь с карандашом и считать сколько должен приблизительно весить, исходя из 4-х входового люта. Вот и проверите правильно понял вас квартус или нет %) Цитата(agate @ Jul 28 2010, 16:49)  2. читайте Доклад -если критическая цепь очень длинная то наверняка она сьедает много ЛУТ - неоптимальный алгоритм? В контексте темы это явно лишнее, у автора пока проблема с ресурсом, а не времянкой. Цитата 3. Synplify иногда может улучшить area на 50% Только в случае сильно не оптимального кода, уже обсуждалось %)
--------------------
|
|
|
|
|
Jul 29 2010, 04:05
|
Частый гость
 
Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406

|
Не знаю, как у Альтеры, но у Xilinx есть инструмент FloorPlaner - после этапа Translate можно очень наглядно посмотреть какие блоки, сколько ресурсов занимают на кристалле. К каждому блоку иерархии приводится, сколько триггеров, лутов и прочего в него входит. А если и Map был произведен, то можно визуально посмотреть где эти ресурсы на кристалле и сколько площади занимают.
Наверняка у Альтеры есть что-то подобное. Посмотрите сколько ресурсов занимают ваши блоки, оцените - адекватное ли это число и смотрите как можно оптимизировать самые "толстые".
P.S.: для того, чтобы была видна иерархия блоков в FloorPlaner, при синтезе (опять же XST) необходимо было устанавливать опцию "Keep Hierarhy"
Сообщение отредактировал Gothard - Jul 29 2010, 04:33
|
|
|
|
|
Jul 29 2010, 05:11
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Docent86 @ Jul 29 2010, 01:22)  Создаю проект и столкнулся с такой проблемой - логических ячеек категорически нехватает, Подскажите новичку как можно оптимизировать? Начните с самого начала. Посмотрите, может быть Вы что-то делаете "В лоб". Замените параллельную обработку на последовательную. Попробуйте сделать не много одинаковых узлов, а один, и им последовательно обрабатывать данные. Вместо регистров - память. И так далее. Если входные данные идут медленнее, чем максимально-допустимая тактовая в ПЛИС, то это значит, что можно применить последовательную обработку. А текущий проект - выкинуть. До тех пор, пока Вы не будете спрашивать более конкретно, и не получите конкретных ответов... PS У меня на сайте найдите "О гайке М3"... Вроде это даже на этом форуме в статьях есть... Еще у меня есть цикл статей "Микропроцессор своими руками". Читайте о начале проектирования и о многопоточности... Удачи!
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Jul 29 2010, 07:22
|

Полное ничтожество
    
Группа: Banned
Сообщений: 1 991
Регистрация: 20-03-07
Из: Коломна
Пользователь №: 26 354

|
Цитата(iosifk @ Jul 29 2010, 11:10)  Да нет, нет мультиплексоров. Пишем во входную память или в ФИФО, потом одним узлом обрабатываем, результат пишем в другую память... Где тут мультиплексоры? это если данные по одному каналу приходят, а если, как у меня например, несколько входных каналов по 16 бит и один dsp фильтр, то прежде чем на него подавать надо несколько каналов по очереди подавать на один, а потом после фильтра развести обратно на несколько. вот тут и мультиплексоры появляются и регистры на выходах. Для DSP фильтра это приемлемо, так как слайсов дспишных мало, а для других целей не факт.
|
|
|
|
|
Jul 29 2010, 10:24
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 19-06-10
Пользователь №: 58 021

|
QUOTE (des00 @ Jul 29 2010, 05:12)  Что то вы темните, даже если вы не назначили пины в Pin Planner, ква автоматически раскидывает пины как ему заблагорассудится. Не мог так увеличится размер. Либо под словами "Пока не повесил пины" вы понимаете назначение пинов на топлевеле через assign например (Verilog) тогда вы сами себе злобный буратина. Раньше думать надо было %) А общий совет такой: в одну руку Report -> Analysis & Synthesis -> Resourse Utilization by Entity и в путь, смотреть сколько и что у вас весит, во вторую руку сорец + тетрадь с карандашом и считать сколько должен приблизительно весить, исходя из 4-х входового люта. Вот и проверите правильно понял вас квартус или нет %)
В контексте темы это явно лишнее, у автора пока проблема с ресурсом, а не времянкой.
Только в случае сильно не оптимального кода, уже обсуждалось %) Смотри в контекст глубже и шире: Имеется ввиду critical путь - ето не только тайминг но и глубина логики - они шагают по жизни вместе. Т.е. если покажет logic depth > 30+ и таких много, то явно какaя-нибудь FOR лооп в коде не продумана.
|
|
|
|
|
Jul 29 2010, 12:13
|
Участник

Группа: Участник
Сообщений: 65
Регистрация: 19-06-10
Пользователь №: 58 021

|
QUOTE (des00 @ Jul 29 2010, 14:51)  Глубина критического пути, при выполнении времянок, не говорит вообще ни о чем. No comments.
|
|
|
|
|
Jul 29 2010, 20:25
|

Участник

Группа: Участник
Сообщений: 43
Регистрация: 2-03-10
Из: С.-Пб.
Пользователь №: 55 772

|
Цитата(sazh @ Jul 29 2010, 23:17)  Что такое ДДК Двоично-Десятичный Код (BCD)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|