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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Использование встроенной памяти ПЛИС.
m0use
сообщение Sep 13 2010, 21:33
Сообщение #1


Участник
*

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



Доброго всем времени суток!

Вопрос такой. Пишу код, который работает с матрицами, в том числе обрабатывает их в циклах. Получилось так, что текущая версия кода при размере матрицы, далёком от практических потребностей код требует значительных ресурсов (насколько я понял из отчёта, близких к предельным для этой ПЛИСы):

Logic Utilization:
Number of Slice Flip Flops: 1,231 out of 9,312 13%
Number of 4 input LUTs: 8,329 out of 9,312 89%
Logic Distribution:
Number of occupied Slices: 4,654 out of 4,656 99%
Total Number of 4 input LUTs: 8,741 out of 9,312 93%
Number of bonded IOBs: 19 out of 232 8%
Number of BUFGMUXs: 1 out of 24 4%
Number of MULT18X18SIOs: 20 out of 20 100%

Скажите, ребят, если я буду использовать память (пока я себе это представляю как модуль памяти из IP Core Generator), то снизит ли это количество используемых LUT? То есть если данные будут хранится в памяти, а по мере необходимости вычислений они оттуда будут выдёргиваться.

Если да, то был бы благодарен за ссылки на примеры использование памяти или статьи. Безусловно, гуглить обязательно буду, но вдруг, у кого уже под рукой хороший готовый материал. Просто пока для меня это чёрный ящик, надо в него заглянуть с фонариком smile.gif.

Заранее спасибо, коллеги!


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Sep 13 2010, 22:28
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Я бы ответы искал User Guide на конкретную микросхему, в разделе Block RAM.
Потом сделал бы схему, которая пишет и читает память обращаясь к разным её портам.
Далее обдумал бы полученный результат и перепроектировал свою схему.
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Sep 13 2010, 23:01
Сообщение #3


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



скажите сразу, что за кристалл, чтоб лишний раз не переспрашивать
и для чего вы хотите её использовать (это я к тому, что у ксайлинкса память 2х портовая. т.е. естественно, что как регистровый файл её использовать уже не получится - алгоритм должен бутем мирится с наличием только 2х каналов доступа на блок/либо вр. мультипл./)
Цитата(m0use @ Sep 14 2010, 00:33) *
то снизит ли это количество используемых LUT?

конечно. луты использоваться будут оч в малом кол-ве для обвязки. весь ресурс хранилища нах. внутри аппаратного блока
Цитата(m0use @ Sep 14 2010, 00:33) *
Если да, то был бы благодарен за ссылки на примеры использование памяти или статьи. Безусловно, гуглить обязательно буду, но вдруг, у кого уже под рукой хороший готовый материал.

есть всё в документации на сайте. однако в принципе синтезатор может синтезировать память из обычного описания на языке. главное чтобы описываемое вами хранилище не противоречило параметрам аппаратного ядра (только что об этом говорил здесь -> http://electronix.ru/forum/index.php?showt...st&p=809678 )
алаверды

ЗЫЖ правда судя по этому
Цитата(m0use @ Sep 14 2010, 00:33) *
Logic Utilization:
Number of Slice Flip Flops: 1,231 out of 9,312 13%
Number of 4 input LUTs: 8,329 out of 9,312 89%

проблема с ресурсами упирается в комбинаторику и боюсь встроенная память вам не поможет. и вообще-то меня терзают смутные сомнения... (правильно ли вы описываете то, что проектируете)
и ещё вот это вот: Number of bonded IOBs: 19 out of 232 8%
что это за проект такой хитрый?

Отредактировано пользователем 03:02 14 сентября 2010


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
m0use
сообщение Sep 14 2010, 21:21
Сообщение #4


Участник
*

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



Спасибо за советы и Ваше время!

Кристалл - Spartan3E (xc3s500e). Block RAM обязательно посмотрю.

Цитата
меня терзают смутные сомнения... (правильно ли вы описываете то, что проектируете)


Вообще, про правильность меня тоже терзают смутные сомнения, потому я обратился за консультацией. Собственно, результат выполняемого кода корректный, но затраченные на это ресурсы меня беспокоят.

Цитата
и ещё вот это вот: Number of bonded IOBs: 19 out of 232 8%
что это за проект такой хитрый?


Я не очень понимаю и прошу Вас пояснить, почему эти данные заставили Вас предположить, что проект хитрый. Это в каком контексте такой показатель - плохо (или хорошо)?

Суть проекта такая. В ПЛИСу загружается матрица (изображение). Из этой матрицы получается градиентные матрицы (по x и по y), их которых по алгоритму Харриса (описание на en-wiki) в трёх вложенных for-циклах строится нужная матрица. То есть достаточно много матриц, которые получаются из друг друга. Может быть, собственно, поэтому и получается много LUTов, которые все эти регистры и их сочетания обеспечивают.

Сообщение отредактировал m0use - Sep 14 2010, 21:25


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Sep 14 2010, 23:02
Сообщение #5


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(m0use @ Sep 15 2010, 00:21) *
Я не очень понимаю и прошу Вас пояснить, почему эти данные заставили Вас предположить, что проект хитрый. Это в каком контексте такой показатель - плохо (или хорошо)?

объясню: меня обеспокоил не процент заполнения кристалла логикой, а пропорция между используемой логикой и регистрами. подозреваю, что ваш проект работает на оч маленькой частоте. и то что вы выполняете кучу преобразований за один такт очень крутой комбинаторной функцией может серьёзно снижать общ. произв. системы, которая способна выполнять много маленьких операций примерно на равной скорости, но эта скорость оч высокая, что даёт общ. сущ. выигрыш в произв.
а то что у вас ещё и такой узкий поток данных на вход-выход (а по сути 9 пинов в каждую сторону - это считайте последовательный интерфейс /потому как даже на интерфейс бортовой памяти это не тянет/), должно приводить к тому что ваша подсистема - это потенциальная пробка в большей системе (конечно если приёмник и передатчик не молотят на 10 кратной частоте ядра. но ведь у вас не молотит, правда?)
Цитата(m0use @ Sep 15 2010, 00:21) *
Суть проекта такая. В ПЛИСу загружается матрица (изображение). Из этой матрицы получается градиентные матрицы (по x и по y), их которых по алгоритму Харриса

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

зы: а матрицы-то какой размерности?
ззы: к стати, а по-русски описание метода Харриса не подкинете, а то у меня с человечьими языками проблема - всё больше в бинарниках читаю


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
ADA007
сообщение Sep 15 2010, 05:34
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 218
Регистрация: 2-02-09
Из: Харьков
Пользователь №: 44 266



Цитата(m0use @ Sep 14 2010, 00:33) *
Скажите, ребят, если я буду использовать память (пока я себе это представляю как модуль памяти из IP Core Generator), то снизит ли это количество используемых LUT?

Да, количество LUT конечно же снизится, дело в том, что при подключении Block RAM как примитива память будет строиться уже не на триггерах, а на блочной памяти, которая находится на кристалле, кстати доступ к ней будет осуществляться гораздо быстрее, чем если бы она была построена на траггерах. Так как это примитив, то его надо генерировать IP Core Generator и подключить к проекту. Более подробно читаем тут...
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Sep 15 2010, 08:03
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(ADA007 @ Sep 15 2010, 09:34) *
Так как это примитив, то его надо генерировать IP Core Generator и подключить к проекту.
Совершенно не обязательно. В большинстве случаем память прекрасно описывается поведенчески.
Go to the top of the page
 
+Quote Post
m0use
сообщение Sep 15 2010, 21:55
Сообщение #8


Участник
*

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



Несколько раз перечитывал, что вы мне ответили, чтобы понять smile.gif.

Цитата
выполняете кучу преобразований за один такт очень крутой комбинаторной функцией может серьёзно снижать общ. произв. системы


Хотел бы уточнить в чём заключается снижение производительности? В том, что в комбинаторной функции в каждый момент времени выполняется только одна ветка? Или в чём? Просто я думал, что работа ПЛИС на уровне железа и состоит из работы множества простых операций вне зависимости от уровня кода. Выходит, Вы говорите, что на уровне кода необходимо дробить операции?

Цитата
лучше выложите исходник - быстрее получите качественную консульт.


Я ещё попробую использовать память, если не поможет, то обращусь за такой помощью. Просто представляю, какой это труд в чужом коде разбираться, да ещё ошибки искать.

Цитата
узкий поток данных на вход-выход


Тоже прекрасно понимаю, что это узкое место в системе, но не знаю, что с этим делать. Смысл проекта в том, что с компьютера по какому-нибудь интерфейсу (пока это RS232, потом планируется Ethernet) передаётся изображение (матрица порядка 640x480). Это изображение обрабатывается на ПЛИСе и выдаёт результат. Да, передача матрицы - процесс, который ощутим в общем времени работы, но куда от него деться?

Цитата
Более подробно читаем тут...


Спасибо.

И. Ещё раз ВСЕМ спасибо.


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
des333
сообщение Sep 15 2010, 22:04
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(m0use @ Sep 16 2010, 01:55) *
Хотел бы уточнить в чём заключается снижение производительности? В том, что в комбинаторной функции в каждый момент времени выполняется только одна ветка? Или в чём? Просто я думал, что работа ПЛИС на уровне железа и состоит из работы множества простых операций вне зависимости от уровня кода. Выходит, Вы говорите, что на уровне кода необходимо дробить операции?

Не нашел картинку покрасивей, но смысл понять можно. Там где очень много логики между регистрами - там самая низкая частота.

UPD. Уберу как я, от греха подальше, картинку, пока неокрепшие мозги не испортил. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Sep 15 2010, 22:48
Сообщение #10


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(m0use @ Sep 16 2010, 00:55) *
Выходит, Вы говорите, что на уровне кода необходимо дробить операции?

алгоритм в структурном исполнение состоит из (в общем случае) их путей прохождения данных. пути состоят из промежуточных хранилищ(например регистров) и комбинаторной блоков комбинаторной логики, которые осуществляют эффективное преобразование потока данных (еслественно, что пути данных не обязательно линейны и однонаправленны, они могут иметь обратные связи, пересекаться и расходиться при помощи коммутирующих элементов, хотя коммутирующие элементы тоже суть комбинаторика/фактически мультиплексоры - это пересечение потока данных и условного потока управления/)
при установившемся и постоянном потоке данных в синхронном цифровом дизайне производительность системы тем выше, чем выше тактовая частота тактируемых в пути данных регистров (зы: для чисто управляющих систем это немножко не так, точнее тоже так, но там приоритеты другие - важна скорость отклика) частота тактирования может быть тем выше, чем меньше время распространения сигнала от одного регистра до соседнего, следовательно макс. частота опред. наибольшей задержкой распр. данных между регистрами. т.о. нужно стремится, чтобы кмбинаторная логика была равномерно размазана между слоями регистров.
более того, если комбинаторная функция зависит не только от предыдущего состояния системы(просто пример - сравнение с накопленной за несколько шагов суммой), но и от более ранней истории состояний, сложность комбинаторики возрастает нелинейно (зависимость от кол-ва операндов и кол-ва состояний). поэтому разумно произвести эквивалентное преобразование, которое разобьёт вычисление на несколько шагов с сохранением промежуточных результатов вычисления (так и появляются автоматы состояний - хотя почти любой считающий автомат можно разложить на параллельную комбинаторику, сложность этой комбинаторики будет настолько сложной, что электроны умрут от старости, пока будут бежать от одной ступени конвейера до другой, поэтому целесообразней создать автомат, который бу работать последовательно, но с малым вр. исп. операции).
ну вот примерно так. надеюсь не слишком сложно объяснил, чтобы что-то полезное из этого сообщ. для себя извлечь
ЗЫ: картинку des333 подобрал на редкость неудачную - смотреть и вникать на её нижнюю часть строго воспрещается, т.к. она описывает технику вычисления волной (где тактирующий сигнал распространяется вместе с потоком данных)

если что-то не понятно из объяснения - спрашивайте, попробую переформулировать в более понятной манере
удач

Цитата(m0use @ Sep 16 2010, 00:55) *
Я ещё попробую использовать память, если не поможет, то обращусь за такой помощью. Просто представляю, какой это труд в чужом коде разбираться, да ещё ошибки искать.

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


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
des333
сообщение Sep 15 2010, 22:52
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 129
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(CaPpuCcino @ Sep 16 2010, 02:48) *
ЗЫ: картинку des333 подобрал на редкость неудачную - смотреть и вникать на её нижнюю часть строго воспрещается, т.к. она описывает технику вычисления волной (где тактирующий сигнал распространяется вместе с потоком данных)

Согласен. Просто рисовать было неохота, а в гугле другие картинки  на скорую руку не нашлись.
Подумал, что для новичок вникать в асинхронную суть второго варианта не станет, и что сойдет картинка. Но, наверное, рисковать не стоит, уберу ка я лучше картинку.  smile.gif

Цитата(CaPpuCcino @ Sep 16 2010, 02:48) *
да вы не беспокойтесь - никто через чур напрягаться здесь не будет. если будет слишком плохо накодировано - пошлют в библиотеку учиться

biggrin.gif


--------------------
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Sep 15 2010, 23:06
Сообщение #12


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(des333 @ Sep 16 2010, 01:52) *
Подумал, что для новичок вникать в асинхронную суть второго варианта не станет, и что сойдет картинка.

вот, с начинающими как раз лучше не рисковать, потому как собственная картина мира у них ещё не сформировалась, понять и устаканить свои представления они как раз в этот момент и пытаются, а тут такое потрясение
wink.gif


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post
vadimuzzz
сообщение Sep 16 2010, 00:32
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988



у Максфилда (The Design Warrior's Guide to FPGAs, http://ifile.it/2gydqm/design.warriors.gui...o.fpga_maz.rar)
есть хорошие картинки:

Go to the top of the page
 
+Quote Post
m0use
сообщение Sep 21 2010, 19:46
Сообщение #14


Участник
*

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



Спасибо, войны дизайна smile.gif. Вы мне глаза приоткрываете на HDL!

У меня, конечно, вопросов только больше становится, но что-то начинаю понимать smile.gif.

С частотой тактирования не разобрался пока. Вот рисунок выше. Я правильно понял, что скорость возрастает за счёт того, что во втором случае (pipeling) комбинаторной логики станет меньше? А не просто от того факта, что регистр появился. Просто, к примеру фраза:

Цитата
Там где очень много логики между регистрами - там самая низкая частота.


мне непонятна. Насколько я себе представляю, в простейшем случае все логические блоки сидят на одном CLK. Или CLK - это не один "проводник", на нём задержки присутствуют?

Цитата
The Design Warrior's Guide to FPGAs


Спасибо за книгу. Пока кажется очень обстоятельной.


--------------------
Усложнять - просто, упрощать - сложно.
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Sep 21 2010, 21:46
Сообщение #15


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(m0use @ Sep 21 2010, 22:46) *
мне непонятна. Насколько я себе представляю, в простейшем случае все логические блоки сидят на одном CLK.

всё верно (для простейшего случая) - чем сложнее логическая функция, тем длиннее и тернистее путь для прохождения всех сигналов по всем возможным внутренним путям. поэтому частота тактирования выбирается ~по максимальному времени распространения сигнала, иначе регистр стоящий на конце этого пути защёлкнет свою челюсть до того как до него добежит фронт сигнала.
вот смотрите: допустим у вас вся система построена на 2х входовых элементах И и ИЛИ (+ регистры). где-нибудь в пути между двумя соседними регистрами вам необходимо выполнить преобразование ((A & B ) | (C & D)) & (F & E), и есть где-нибудь в пути между другими соседними регистрами функция (X & Y). каждый логический вентиль даёт задержку сигнала 1 нс. в первом случае у вас минимальная задержка прохождения сигнала будет 2 нс, а максимальная 3 нс (посчитайте количество скобок в выражении и попробуйте нарисовать эту пирамидальную структуру с задержками на каждом вентиле. чтобы понять, что можно говорить и о минимальной задержке, представьте, что некоторые переменные могут и не меняться, т.е. сигнал на этих путях стабилен - фронта распространения нет). во втором случае время задержки 1 нс (если принять, что хоть один сигнал из X,Y меняться всё-таки должен). все регистры системы тактируются одновременно (!условно! одновременно, т.к. сигнал тактирования тоже должен бегать по проводам, а длинна этих проводов до каждого из регистров может быть разная, но этим можно пока пренебречь). если мы будем тактировать систему с учётом минимально возможной задержкой (1нс на X&Y), то первая функция просто не будет успевать пропустить через себя изменяемые значения собственных переменных и всё у нас будет через одно место, поэтому приходится тактировать схему с частотой как минимум соответств. самой большей задержке системы.
теперь, если угодно вопрос на засыпку: а можно ли схему выполняющую те же самые логические преобразования изменить так, чтобы заставить тактироваться всё-таки с периодом в 1нс? (при тех же самых условиях о 2х входовых элементах с 1нс задержкой фронта)
ЗЫ: в архитектурах ПЛИС в данный момент логика реализуется не на базе 2х входовых булевых вентелях, но общий принцип остаётся тем же
Цитата(m0use @ Sep 21 2010, 22:46) *
Я правильно понял, что скорость возрастает за счёт того, что во втором случае (pipeling) комбинаторной логики станет меньше? А не просто от того факта, что регистр появился.

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


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post

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

 


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


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