Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по SOPC+NIOS
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
RHnd
Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы:
1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет.
2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так?
3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память?
4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. help.gif А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. smile.gif
Postoroniy_V
Цитата(RHnd @ Jun 6 2007, 18:46) *
Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы:
1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет.
2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так?
3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память?
4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. help.gif А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. smile.gif

может поможет
nios forum
vetal
Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера.
Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram).
Вы можете завести ваше устройство как внутрь системы, так и сделать для нее выходы, но в любом случае вам надо создавать компонент.
В NIOSII нет разделения периферия/память - всё в одной куче лежит.
Для общения с вашим модулем можно создать файловый интерфейс или просто использовать функции HAL. Если вы будете использовать элементы языка C для общения с периферией всегда устанавливайте 32 бит для обхода кэша данных.
RHnd
Цитата(Postoroniy_V @ Jun 6 2007, 19:19) *
может поможет
nios forum

Ссылка не рабочая sad.gif Или это был линк на ниосфорум вообще?
Цитата(vetal @ Jun 6 2007, 19:34) *
Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера.

Такой вариант в голову не приходил. Т.е., добавить Master port к компоненту и подключить его к SDRAM-Controller? Сдается мне, это сложнее будет сделать. sad.gif Тем более процессор там все равно нужен будет для последующей обработки. Но идея хорошая.
Цитата(vetal @ Jun 6 2007, 19:34) *
Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram).

мне надо-то буквально 4MB/s, даже меньше. Сейчас задача хоть как-то сделать, а потом можно будет дорабатывать и burst и еще чего. Или лучше сразу делать?
Цитата(vetal @ Jun 6 2007, 19:34) *
В NIOSII нет разделения периферия/память - всё в одной куче лежит.

Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память.
Цитата(vetal @ Jun 6 2007, 19:34) *
Для общения с вашим модулем можно создать файловый интерфейс или просто использовать функции HAL.

Т.е. просто обращаться как к памяти не получится? sad.gif
vetal
Цитата(RHnd @ Jun 6 2007, 19:58) *
Ссылка не рабочая sad.gif Или это был линк на ниосфорум вообще?

рабочая, зарегестрируйтесь там.
Цитата
Такой вариант в голову не приходил. Т.е., добавить Master port к компоненту и подключить его к SDRAM-Controller? Сдается мне, это сложнее будет сделать. sad.gif Тем более процессор там все равно нужен будет для последующей обработки. Но идея хорошая.

Да. Без процессора удобнее - на момент прихода прерывания данные уже лежат там, где надо smile.gif

Цитата
мне надо-то буквально 4MB/s, даже меньше. Сейчас задача хоть как-то сделать, а потом можно будет дорабатывать и burst и еще чего. Или лучше сразу делать?

Лучше сразу. У вас на SDRAM не только ПУ сидит, а еще и процессор. Так для доступа к произвольной ячейке памяти будет 5-6 тактов(в зависимости от настроек), а в burst режиме - 5 тактов+ кол-во слов для записи(для выровненных данных). Эти задачи решает контроллер dma. У avalon очень простой интерфейс. Если вам DMA нужен только для этих целей - проще самому мастером стать, он делается за 15 минут.
Цитата
Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память.

Я не вдавался в подробности его работы, т.к. не использовал.
Цитата
Т.е. просто обращаться как к памяти не получится? sad.gif

Получится, только не стоит забывать про кэш. Его надо обходить установкой старшего бита адреса (BASE+0x80000000) или использованием специальных инструкций/макросов. При общении в вашими данными тоже не стоит забывать про него.
RHnd
Цитата(vetal @ Jun 6 2007, 20:12) *
Лучше сразу. У вас на SDRAM не только ПУ сидит, а еще и процессор. Так для доступа к произвольной ячейке памяти будет 5-6 тактов(в зависимости от настроек), а в burst режиме - 5 тактов+ кол-во слов для записи(для выровненных данных).

Так ведь у процессора свой мастер, свое общение с SDRAM Controller, там все должно поддерживаться. Или я чего-то не понимаю?

Цитата(vetal @ Jun 6 2007, 20:12) *
Эти задачи решает контроллер dma. У avalon очень простой интерфейс. Если вам DMA нужен только для этих целей - проще самому мастером стать, он делается за 15 минут.

Очень заманчиво. Надо будет попробовать. Т.е. на компоненте мастерпорт, он подключин к контроллеру SDRAM, пишет туда данные. Так же slave-port, подключенный к ниосу и дающий ему прерывание при окончании кадра (а так же размеры кадра и т.п.). Ниос же пока данные кадра полностью не перепишутся в SDRAM, вообще ничего не делает. Симпатично.
vetal
Цитата(RHnd @ Jun 7 2007, 08:08) *
Так ведь у процессора свой мастер, свое общение с SDRAM Controller, там все должно поддерживаться. Или я чего-то не понимаю?

Так, только память они делят между собой по очереди и увеличение времени работы с памятью внешним устройством может привести к уменьшению быстродействия программы.
Цитата(RHnd @ Jun 7 2007, 08:08) *
Очень заманчиво. Надо будет попробовать. Т.е. на компоненте мастерпорт, он подключин к контроллеру SDRAM, пишет туда данные. Так же slave-port, подключенный к ниосу и дающий ему прерывание при окончании кадра (а так же размеры кадра и т.п.). Ниос же пока данные кадра полностью не перепишутся в SDRAM, вообще ничего не делает. Симпатично.

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