Перейти к содержанию
    

Вопрос по SOPC+NIOS

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

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

nios forum

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

nios forum

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

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

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

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

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

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

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

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

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

Изменено пользователем RHnd

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

 

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

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

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...