Волощенко
Mar 27 2008, 12:33
Пытаюсь применить С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
Mar 28 2008, 05:53
c2h лицензия давалясь, до недавнего времени, особо приближенным к альтере - просто так эту фишку в квартусе не включить
Волощенко
Mar 28 2008, 07:11
Цитата(Harbour @ Mar 28 2008, 09:53)

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

1. Хотел бы знать, кто-то еще пытался запустить С2Н с "лицензией", и что из этого вышло?
2. Если Гора не хочет идти к нам, то попробуем к ней подойти сами. Общая идея акселерации понятна, как строить самим операционные устройства, в том числе с конвейеризацией, тоже. При большом желании можно, что-то подобное синтезировать на Verilog и самому. Теперь вопрос, как такой функциональный блок получше подключить к NiosII, какие компоненты SOPC при этом использовать? Похоже, что PIO, потом нужно притормозить NiosII пока внешняя функция полностью не отработает…
Полезно бы услышать соображения форумчан по С2Н как в целом, так и по частностям.
1) не пробовал, попробую на след неделе
2)есть отличное средство и главное широко используемое это DMA, и главное не нужно заморачиваться с С2Н ну и писать для железа тоже не надо :-) всё уже придумано до нас
да драйвер есть в составе ниоса.
вообщем имхо применение С2Н весьмо сомнительно.
Harbour
Mar 29 2008, 08:28
шо угодно можно намостырить :
- флаги start/done
- completion irq
- dma
- user defined instructions, которые к тому же встраиваются в конвейер
Цитата(Postoroniy_V @ Mar 28 2008, 10:55)

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

Влезу с демонстрацией своего нубства.
Как я понимаю, DMA - Direct Memory Acсess - инструмент для быстрого перекидывания данных. Похоже, я чего-то совсем не понимаю сути DMA и областей его использования, а, значит, неэффективно решаю какие-то задачи, но как DMA делает C2H ненужным? Если не затруднит, то не могли бы Вы поделится примерами использования DMA? Не кодом, а именно задачами - стояла такая задача, использовали при решении DMA таким-то образом, получилось красиво. Просто я DMA в разработке вообще не использую. Просветите, плиз!

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

Хм. На данный момент я делаю так: Модуль, который должен принять/обработать/записать данные, снабжается мастер-портом, подключаемым к памяти с данными. Далее проц отдает этому модулю адрес откуда брать, адрес куда складывать и команду на старт. Проблема же взятия данных из памяти, укладки обратно и т.п. ложится на логику модуля и генерируемый сопсом арбитр памяти. Как такой подход выглядит по сравнению с использованием дма? Может, я жизнерадостно кручю самодельный велосипед?
Ну видимо у вас много времени на этот велосипед.
писал ведь уже
Цитата
2)есть отличное средство и главное широко используемое это DMA, и главное не нужно заморачиваться с С2Н ну и писать для железа тоже не надо :-) всё уже придумано до нас
да драйвер есть в составе ниоса
в сутках как правило 24 часа

и тратить больше чем 8 часов на работу это глупо или овертайм. вам овертаймы оплачивают?
Не, не оплачивают.

В рабочее время все и делаю. Как-то не могу сказать, чтоб работа мастера с памятью занимала много времени на разработку, но надо будет с дма попробовать.
Postoroniy_V
Mar 31 2008, 05:39
Цитата(RHnd @ Mar 31 2008, 14:30)

Не, не оплачивают.

В рабочее время все и делаю. Как-то не могу сказать, чтоб работа мастера с памятью занимала много времени на разработку, но надо будет с дма попробовать.


пошёл ужо...зачем тратить время если можно не тратить?

на семью/отдых/друзей/пиво лучше тратьте
Цитата(Postoroniy_V @ Mar 30 2008, 18:20)

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

и тратить больше чем 8 часов на работу это глупо или овертайм. вам овертаймы оплачивают?

А как же хобби ?

ИМХО free style или реверс инженеринг на досуге самое то

Удачи!!
Postoroniy_V
Mar 31 2008, 23:07
Цитата(des00 @ Mar 31 2008, 21:03)

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

ИМХО free style или реверс инженеринг на досуге самое то

Удачи!!
в данном контексте, насколько я смог понять, RHnd пишет каждый раз слейв+мастер, суть мастера копирование данных. и на этом всё

. 1 мастер тоесть который только и делает что копирует данные.
к нему нужно ещё софт написать и отладить. в противовес дма стандартному, где уже все есть

А вообщем я согласен что много дма лучше чем 1 большой

...всё зависит от проекта.
Автор же топика - хочет заюзать C2H для функций с которыми дма отлично справится

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

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

Простите, а реверс инженеринг - это навроде как инженеринг в обратном порядке, разбирать вместо собирать? Просвятите пожалуйста.
dvladim сказал абсолютно правильно.
беру корку с открытым кодом и вытаскиваю из нее алгоритм ее работы, по коду, через симулятор и т.д.
Особенно нравится расковыривать микропроцессорные ядра с opencores.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.