Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Nios II, C2H-акселератор функций
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
Волощенко
Пытаюсь применить С2Н-акселератор для ускорения функции загрузки данных в буфер (в данном случае для LAN91C111).
Вроде все делаю, как предлагается в ug_nios2_c2h_compiler.pdf:
- размещаю описание функции в отдельном файле;
- предварительно проверяю ее работоспособность в софт-варианте;
- подсвечиваю название функции;
- затем правый клик по названию и в выпадающем меню выбираю Accelerate with the Nios II C2H Compiler;
- в консоле C2H view устанавливаю опции Build software, generate SOPC Builder system, and run Quartus II compilation, а также Use hardware accelerator in place of software implementation. Flush data cache before each call;
- в окне C/C++ Projects запускаю компиляцию своего проекта Build Project.

В итоге выдается сообщение, по поводу которого ничего объясняющего найти не могу:
make: *** No rule to make target `my_c2h_load_lan91c111.c', needed by `obj/my_c2h_load_lan91c111.c2h_pre'. Stop.

Попытка сделать все как рекомендуется в ug_nios2_c2h_compiler.pdf, но к учебному примеру, проходит нормально. То есть там все нормально, а у меня не хочет, даже если свою функцию упрощаю до простого присваивания.
Кто сталкивался с подобным?
Harbour
c2h лицензия давалясь, до недавнего времени, особо приближенным к альтере - просто так эту фишку в квартусе не включить
Волощенко
Цитата(Harbour @ Mar 28 2008, 09:53) *
c2h лицензия давалясь, до недавнего времени, особо приближенным к альтере - просто так эту фишку в квартусе не включить

1. Хотел бы знать, кто-то еще пытался запустить С2Н с "лицензией", и что из этого вышло?
2. Если Гора не хочет идти к нам, то попробуем к ней подойти сами. Общая идея акселерации понятна, как строить самим операционные устройства, в том числе с конвейеризацией, тоже. При большом желании можно, что-то подобное синтезировать на Verilog и самому. Теперь вопрос, как такой функциональный блок получше подключить к NiosII, какие компоненты SOPC при этом использовать? Похоже, что PIO, потом нужно притормозить NiosII пока внешняя функция полностью не отработает…
Полезно бы услышать соображения форумчан по С2Н как в целом, так и по частностям.
Postoroniy_V
Цитата(Волощенко @ Mar 28 2008, 16:11) *
1. Хотел бы знать, кто-то еще пытался запустить С2Н с "лицензией", и что из этого вышло?
2. Если Гора не хочет идти к нам, то попробуем к ней подойти сами. Общая идея акселерации понятна, как строить самим операционные устройства, в том числе с конвейеризацией, тоже. При большом желании можно, что-то подобное синтезировать на Verilog и самому. Теперь вопрос, как такой функциональный блок получше подключить к NiosII, какие компоненты SOPC при этом использовать? Похоже, что PIO, потом нужно притормозить NiosII пока внешняя функция полностью не отработает…
Полезно бы услышать соображения форумчан по С2Н как в целом, так и по частностям.

1) не пробовал, попробую на след неделе
2)есть отличное средство и главное широко используемое это DMA, и главное не нужно заморачиваться с С2Н ну и писать для железа тоже не надо :-) всё уже придумано до нас
да драйвер есть в составе ниоса.
вообщем имхо применение С2Н весьмо сомнительно.
Harbour
шо угодно можно намостырить :

- флаги start/done
- completion irq
- dma
- user defined instructions, которые к тому же встраиваются в конвейер
RHnd
Цитата(Postoroniy_V @ Mar 28 2008, 10:55) *
2)есть отличное средство и главное широко используемое это DMA, и главное не нужно заморачиваться с С2Н ну и писать для железа тоже не надо :-) всё уже придумано до нас


Влезу с демонстрацией своего нубства.
Как я понимаю, DMA - Direct Memory Acсess - инструмент для быстрого перекидывания данных. Похоже, я чего-то совсем не понимаю сути DMA и областей его использования, а, значит, неэффективно решаю какие-то задачи, но как DMA делает C2H ненужным? Если не затруднит, то не могли бы Вы поделится примерами использования DMA? Не кодом, а именно задачами - стояла такая задача, использовали при решении DMA таким-то образом, получилось красиво. Просто я DMA в разработке вообще не использую. Просветите, плиз! smile.gif
Postoroniy_V
Цитата(RHnd @ Mar 30 2008, 20:50) *
Влезу с демонстрацией своего нубства.
Как я понимаю, DMA - Direct Memory Acсess - инструмент для быстрого перекидывания данных. Похоже, я чего-то совсем не понимаю сути DMA и областей его использования, а, значит, неэффективно решаю какие-то задачи, но как DMA делает C2H ненужным? Если не затруднит, то не могли бы Вы поделится примерами использования DMA? Не кодом, а именно задачами - стояла такая задача, использовали при решении DMA таким-то образом, получилось красиво. Просто я DMA в разработке вообще не использую. Просветите, плиз! smile.gif

верно понимаете суть дма.
используется там где нужно процессор разгрузить, чем просто заниматься копированием данных из одного места в другое. Самый простой, и думаю самый яркий, пример - это использование дма для заполения видео памяти, а в это время....проц занят какиеми то другими более полезными вещами( можете сами нафантазировать какими). Другой пример использовать дма в маршрутизаторе - после того как определили кому(какому физ-кому порту) пакет нужен отдаём пакет на растерзание дма, а в это время...проц делает что то другое
Просветил?
RHnd
Хм. На данный момент я делаю так: Модуль, который должен принять/обработать/записать данные, снабжается мастер-портом, подключаемым к памяти с данными. Далее проц отдает этому модулю адрес откуда брать, адрес куда складывать и команду на старт. Проблема же взятия данных из памяти, укладки обратно и т.п. ложится на логику модуля и генерируемый сопсом арбитр памяти. Как такой подход выглядит по сравнению с использованием дма? Может, я жизнерадостно кручю самодельный велосипед?
Postoroniy_V
Цитата(RHnd @ Mar 31 2008, 06:27) *
Хм. На данный момент я делаю так: Модуль, который должен принять/обработать/записать данные, снабжается мастер-портом, подключаемым к памяти с данными. Далее проц отдает этому модулю адрес откуда брать, адрес куда складывать и команду на старт. Проблема же взятия данных из памяти, укладки обратно и т.п. ложится на логику модуля и генерируемый сопсом арбитр памяти. Как такой подход выглядит по сравнению с использованием дма? Может, я жизнерадостно кручю самодельный велосипед?

Ну видимо у вас много времени на этот велосипед. smile.gif
писал ведь уже
Цитата
2)есть отличное средство и главное широко используемое это DMA, и главное не нужно заморачиваться с С2Н ну и писать для железа тоже не надо :-) всё уже придумано до нас
да драйвер есть в составе ниоса

в сутках как правило 24 часа smile.gif и тратить больше чем 8 часов на работу это глупо или овертайм. вам овертаймы оплачивают? biggrin.gif
RHnd
Не, не оплачивают. smile.gif В рабочее время все и делаю. Как-то не могу сказать, чтоб работа мастера с памятью занимала много времени на разработку, но надо будет с дма попробовать. smile.gif
Postoroniy_V
Цитата(RHnd @ Mar 31 2008, 14:30) *
Не, не оплачивают. smile.gif В рабочее время все и делаю. Как-то не могу сказать, чтоб работа мастера с памятью занимала много времени на разработку, но надо будет с дма попробовать. smile.gif

bb-offtopic.gif пошёл ужо...зачем тратить время если можно не тратить? smile.gif на семью/отдых/друзей/пиво лучше тратьте smile.gif
des00
Цитата(Postoroniy_V @ Mar 30 2008, 18:20) *
Ну видимо у вас много времени на этот велосипед. smile.gif
писал ведь уже


Позвольте с вами не согласиться, насколько я знаю SOPC Builder генерирует cross bar switch систему, для которой, в общем случае более эффективно использование большого количества простых ДМА контроллеров, встроенных в подмодули, нежили одного большого ДМА ИМХО.

А простейший дма контроллер это КА на 3-4 состояния + счетчик адреса и пара регистров-дескрипторов. Это не такая уж и сложная и накладная логика для системы логика.

Цитата
в сутках как правило 24 часа smile.gif и тратить больше чем 8 часов на работу это глупо или овертайм. вам овертаймы оплачивают? biggrin.gif


А как же хобби ? smile.gif ИМХО free style или реверс инженеринг на досуге самое то smile.gif

Удачи!!
Postoroniy_V
Цитата(des00 @ Mar 31 2008, 21:03) *
Позвольте с вами не согласиться, насколько я знаю SOPC Builder генерирует cross bar switch систему, для которой, в общем случае более эффективно использование большого количества простых ДМА контроллеров, встроенных в подмодули, нежили одного большого ДМА ИМХО.

А простейший дма контроллер это КА на 3-4 состояния + счетчик адреса и пара регистров-дескрипторов. Это не такая уж и сложная и накладная логика для системы логика.
А как же хобби ? smile.gif ИМХО free style или реверс инженеринг на досуге самое то smile.gif

Удачи!!

в данном контексте, насколько я смог понять, RHnd пишет каждый раз слейв+мастер, суть мастера копирование данных. и на этом всё smile.gif. 1 мастер тоесть который только и делает что копирует данные.
к нему нужно ещё софт написать и отладить. в противовес дма стандартному, где уже все есть smile.gif
А вообщем я согласен что много дма лучше чем 1 большой smile.gif...всё зависит от проекта.
Автор же топика - хочет заюзать C2H для функций с которыми дма отлично справится smile.gif ИМХО
RHnd
C другой стороны, модуль, который сейчас дописываю, должен разбирать поступившие с ацп данные в определенном порядке. Т.е. при чтении не просто Adr++, а изменение адреса чтения по специальному выражению с несколькими параметрами. Такие веши, наверное, лучше своим мастером делать. Или дма справился бы?
Omen_13
RHnd Приведите это выражение расчёта адреса, тогда можно будет сказать справиться DMA или нет
EvgenyNik
Простой вопрос (DMA ни разу ещё не использовал, пробовал вставлять в НИОС - ответа на вопрос экспериментальным путём не получил):
Мне надо с порта PIO_1(input only) принять данные и уложить их последовательно в память данных(onchip_mem), , в порт PIO_2(output only) выдать последовательно расположенные в ОЗУ(onchip_mem), данные.
Включаю DMA в состав NIOSII, назначаю ему связи на чтение/запись с указанными портами, ОЗУ, CPU...
А кто теперь будет тактировать данные - ведь внешнему устройству (источнику данных для PIO_1 и приёмнику для PIO_2) надо иметь тактирование для смены данных?
Я ожидал, что у компонента NIOSII появятся соотвествующие управляющие выводы. Может, я чего-то не понимаю и мне нужен легкий посыл :-) в нужном направлении...
torik
Цитата
А как же хобби ? smile.gif ИМХО free style или реверс инженеринг на досуге самое то


Простите, а реверс инженеринг - это навроде как инженеринг в обратном порядке, разбирать вместо собирать? Просвятите пожалуйста. А то у меня ассоциация с "ломать" почему-то... (наверное потому что это у меня получается хорошо и с удовольствием)

На счет PIO - может я просто не знаю, но вроде как только с помощью PIO не запишеш в память - он же slave...
dvladim
Цитата(torik @ Apr 28 2008, 10:18) *
Простите, а реверс инженеринг - это навроде как инженеринг в обратном порядке, разбирать вместо собирать?

Это, примерно, как по готовой железке поднять алгоритм ее работы.

Параллели близкие с дизассемблированием программ в программировании.
des00
Цитата(torik @ Apr 28 2008, 01:18) *
Простите, а реверс инженеринг - это навроде как инженеринг в обратном порядке, разбирать вместо собирать? Просвятите пожалуйста.



dvladim сказал абсолютно правильно.

беру корку с открытым кодом и вытаскиваю из нее алгоритм ее работы, по коду, через симулятор и т.д.
Особенно нравится расковыривать микропроцессорные ядра с opencores.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.