Jump to content
    

Вопрос по SOPC+NIOS

Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы:

1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет.

2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так?

3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память?

4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. :help: А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. :)

Share this post


Link to post
Share on other sites

Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы:

1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет.

2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так?

3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память?

4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. :help: А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. :)

может поможет

nios forum

Share this post


Link to post
Share on other sites

Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера.

Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram).

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

В NIOSII нет разделения периферия/память - всё в одной куче лежит.

Для общения с вашим модулем можно создать файловый интерфейс или просто использовать функции HAL. Если вы будете использовать элементы языка C для общения с периферией всегда устанавливайте 32 бит для обхода кэша данных.

Share this post


Link to post
Share on other sites

может поможет

nios forum

Ссылка не рабочая :( Или это был линк на ниосфорум вообще?

Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера.

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

Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram).

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

В NIOSII нет разделения периферия/память - всё в одной куче лежит.

Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память.

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

Т.е. просто обращаться как к памяти не получится? :(

Edited by RHnd

Share this post


Link to post
Share on other sites

Ссылка не рабочая :( Или это был линк на ниосфорум вообще?

рабочая, зарегестрируйтесь там.

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

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

 

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

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

Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память.

Я не вдавался в подробности его работы, т.к. не использовал.

Т.е. просто обращаться как к памяти не получится? :(

Получится, только не стоит забывать про кэш. Его надо обходить установкой старшего бита адреса (BASE+0x80000000) или использованием специальных инструкций/макросов. При общении в вашими данными тоже не стоит забывать про него.

Share this post


Link to post
Share on other sites

Лучше сразу. У вас на SDRAM не только ПУ сидит, а еще и процессор. Так для доступа к произвольной ячейке памяти будет 5-6 тактов(в зависимости от настроек), а в burst режиме - 5 тактов+ кол-во слов для записи(для выровненных данных).

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

 

Эти задачи решает контроллер dma. У avalon очень простой интерфейс. Если вам DMA нужен только для этих целей - проще самому мастером стать, он делается за 15 минут.

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

Share this post


Link to post
Share on other sites

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

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

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

да, так. мне тоже так понравилось - процессор не отвлекается по пустякам.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...