реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Как уменьшить объем проекта?, по количеству логических ячеек
Docent86
сообщение Jul 28 2010, 21:22
Сообщение #1


Участник
*

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



Создаю проект и столкнулся с такой проблемой - логических ячеек категорически нехватает, установил оптимизацию по площади - всего 1% выиграл. Есть ограничение по используемой ПЛИС - максимум cycloneIII EP3c10... Пока не повесил пины - проект занимал копейки (270), после вывода на пины объем увеличился в сотни раз (57,162). Разделение на несколько ПЛИС помогает, но тогда устройство не выгодно по себестоимости. Подскажите новичку как можно оптимизировать?
на входе в схему 72 разряда, затем разные преобразования для каждых 12 разрядов и 2 пина на выходе - последовательный код + сигнал управления.
P.S. Возможно ли это из-за использования длинных шаблонов в преобразовании и/или больших функций case
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jul 28 2010, 21:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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)"), а так без кода сказать трудно что там не так.
Go to the top of the page
 
+Quote Post
agate
сообщение Jul 28 2010, 22:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 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 где можно вместо регистров
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 29 2010, 01:12
Сообщение #4


Вечный ламер
******

Группа: Модераторы
Сообщений: 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%

Только в случае сильно не оптимального кода, уже обсуждалось %)


--------------------
Go to the top of the page
 
+Quote Post
Gothard
сообщение Jul 29 2010, 04:05
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 127
Регистрация: 16-02-07
Из: Долгопрудный
Пользователь №: 25 406



Не знаю, как у Альтеры, но у Xilinx есть инструмент FloorPlaner - после этапа Translate можно очень наглядно посмотреть какие блоки, сколько ресурсов занимают на кристалле. К каждому блоку иерархии приводится, сколько триггеров, лутов и прочего в него входит. А если и Map был произведен, то можно визуально посмотреть где эти ресурсы на кристалле и сколько площади занимают.

Наверняка у Альтеры есть что-то подобное. Посмотрите сколько ресурсов занимают ваши блоки, оцените - адекватное ли это число и смотрите как можно оптимизировать самые "толстые".

P.S.: для того, чтобы была видна иерархия блоков в FloorPlaner, при синтезе (опять же XST) необходимо было устанавливать опцию "Keep Hierarhy"

Сообщение отредактировал Gothard - Jul 29 2010, 04:33
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 29 2010, 05:11
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Docent86 @ Jul 29 2010, 01:22) *
Создаю проект и столкнулся с такой проблемой - логических ячеек категорически нехватает,
Подскажите новичку как можно оптимизировать?

Начните с самого начала. Посмотрите, может быть Вы что-то делаете "В лоб". Замените параллельную обработку на последовательную. Попробуйте сделать не много одинаковых узлов, а один, и им последовательно обрабатывать данные. Вместо регистров - память. И так далее.
Если входные данные идут медленнее, чем максимально-допустимая тактовая в ПЛИС, то это значит, что можно применить последовательную обработку. А текущий проект - выкинуть.

До тех пор, пока Вы не будете спрашивать более конкретно, и не получите конкретных ответов...

PS У меня на сайте найдите "О гайке М3"... Вроде это даже на этом форуме в статьях есть... Еще у меня есть цикл статей "Микропроцессор своими руками". Читайте о начале проектирования и о многопоточности...
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Jul 29 2010, 06:15
Сообщение #7


Полное ничтожество
*****

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



ну последовательная обработка это конечно хорошо, но тогда вместо триггеров расходуются мультиплексоры. правильно говорят - очень сложно ответить на вопрос, который таким образом задан. Текущий проект выкидывать пока не надо(
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 29 2010, 07:10
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(rv3dll(lex) @ Jul 29 2010, 10:15) *
ну последовательная обработка это конечно хорошо, но тогда вместо триггеров расходуются мультиплексоры. п

Да нет, нет мультиплексоров.
Пишем во входную память или в ФИФО, потом одним узлом обрабатываем, результат пишем в другую память... Где тут мультиплексоры?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
rv3dll(lex)
сообщение Jul 29 2010, 07:22
Сообщение #9


Полное ничтожество
*****

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



Цитата(iosifk @ Jul 29 2010, 11:10) *
Да нет, нет мультиплексоров.
Пишем во входную память или в ФИФО, потом одним узлом обрабатываем, результат пишем в другую память... Где тут мультиплексоры?


это если данные по одному каналу приходят, а если, как у меня например, несколько входных каналов по 16 бит и один dsp фильтр, то прежде чем на него подавать надо несколько каналов по очереди подавать на один, а потом после фильтра развести обратно на несколько. вот тут и мультиплексоры появляются и регистры на выходах. Для DSP фильтра это приемлемо, так как слайсов дспишных мало, а для других целей не факт.
Go to the top of the page
 
+Quote Post
agate
сообщение Jul 29 2010, 10:24
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 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 лооп в коде не продумана.
Go to the top of the page
 
+Quote Post
des00
сообщение Jul 29 2010, 11:51
Сообщение #11


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(agate @ Jul 29 2010, 05:24) *
Имеется ввиду critical путь - ето не только тайминг но и глубина логики - они шагают по жизни вместе. Т.е. если покажет logic depth > 30+ и таких много, то явно какaя-нибудь FOR лооп в коде не продумана.

Ну у меня на математике встречается >30 ти глубина и таких много, и без всяких форов. Глубина критического пути, при выполнении времянок, не говорит вообще ни о чем. И в контексте к вопросу автора вряд ли применима.


--------------------
Go to the top of the page
 
+Quote Post
agate
сообщение Jul 29 2010, 12:13
Сообщение #12


Участник
*

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



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

No comments.
Go to the top of the page
 
+Quote Post
Docent86
сообщение Jul 29 2010, 20:06
Сообщение #13


Участник
*

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



Задержался с просмотром страницы... Сегодня на работе поковырял что к чему - весь ресурс "съела" математика - в частности деления и умножения на числа не кратные 2^х. Пришлось снизить точность вычислений.

Тут тогда навязывается другой вопрос - подскажете экономичный алгоритм перевода из двоичного кода в ДДК. Я делал перевод в integer затем брал остаток от делений на 10 для каждого разряда десятичного числа и каждую из десятичных цифр обратно в двоичное:

aD:= conv_integer (Average(11 downto 0));
aD:= aD/1187; -- деление подобного рода повторяется но с разными коэфициентами

aD0:=aD rem 10; aD:=(aD-aD0)/10; --а такое преобразование можно и в одну функцию записать
aD1:=aD rem 10; aD:=(aD-aD1)/10;
aD2:=aD rem 10; aD:=(aD-aD2)/10;
aD3:=aD rem 10;
...
X(0 to 3) <= conv_std_logic_vector(aD4,4);
X(4 to 7) <= conv_std_logic_vector(aD3,4);
...


C VHDL начал совсем недавно работать, до этого занимался ОПК и в основном только на Си, поэтому понял не целесообразность таких вычислений. Другого пока не придумал, но перевод крайне необходим. Можно было бы как одну функцию записать, но там коэфициенты разные.

Как это было связано с выставлением пинов понятия пока не имею - видимо при компиляции блок без разводки игнорировался

А так в целом проект уместился теперь в 4.000, но математику надо все равно поменять

Сообщение отредактировал Docent86 - Jul 29 2010, 20:00
Go to the top of the page
 
+Quote Post
sazh
сообщение Jul 29 2010, 20:17
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(Docent86 @ Jul 29 2010, 23:06) *
Тут тогда навязывается другой вопрос - подскажете экономичный алгоритм перевода из двоичного кода в ДДК.

Что такое ДДК
Go to the top of the page
 
+Quote Post
Docent86
сообщение Jul 29 2010, 20:25
Сообщение #15


Участник
*

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



Цитата(sazh @ Jul 29 2010, 23:17) *
Что такое ДДК



Двоично-Десятичный Код (BCD)
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th July 2025 - 09:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01492 секунд с 7
ELECTRONIX ©2004-2016