RHnd 0 June 6, 2007 Posted June 6, 2007 · Report post Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы: 1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет. 2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так? 3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память? 4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. :) Quote Share this post Link to post Share on other sites More sharing options...
Postoroniy_V 0 June 6, 2007 Posted June 6, 2007 · Report post Читаю мануалы на SOPC и NIOSII Software и как-то запутался. Ситуация такая: нам надо сделать фифо, которое заполняется снаружи, а при заполнении до определенного процента срабатывает прерывание, и эти данные по DMA перегоняются в SDRAM. Теперь пошли вопросы: 1) При разработке фифо как компонента для SOPC, есть ли разница - делать его внуренним или внешним (по отношению к SOPС)? Т.е. из SOPC наружу будут торчать либо выводы фифо, либо авалон-шины. Мне кажется, что принципиального значения иметь не будет. 2) Когда я сделаю этот элемент, то надо ли мне будет под NIOS писать для него драйвер? Или он увидится каким-то стандартным образом? Например, как память? Но если как память, то, получается, что память размером в одно слово, которое меняется на каждый новый запрос? Так? 3) При ответе на второй вопрос, возникает третий. DMA как делать, как переферия-> память или как память->память? 4) Блин, ОЧЕНЬ хочу пример разработки компонента SOPC, аналогичного фифо, плюс его последующее использование а NIOS. А то мануалы читаю, голова уже пухнет, а систематизироваться оно все как-то не хочет. :) может поможет nios forum Quote Share this post Link to post Share on other sites More sharing options...
vetal 0 June 6, 2007 Posted June 6, 2007 · Report post Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера. Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram). Вы можете завести ваше устройство как внутрь системы, так и сделать для нее выходы, но в любом случае вам надо создавать компонент. В NIOSII нет разделения периферия/память - всё в одной куче лежит. Для общения с вашим модулем можно создать файловый интерфейс или просто использовать функции HAL. Если вы будете использовать элементы языка C для общения с периферией всегда устанавливайте 32 бит для обхода кэша данных. Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 June 6, 2007 Posted June 6, 2007 (edited) · Report post может поможет nios forum Ссылка не рабочая :( Или это был линк на ниосфорум вообще? Определитесь кто будем мастером при передаче данных от вашего модуля в память. Мастером может быть DMA контроллер или ваш модуль может при заполнении самостоятельно скинуть данные без участия процессора и dma контроллера. Такой вариант в голову не приходил. Т.е., добавить Master port к компоненту и подключить его к SDRAM-Controller? Сдается мне, это сложнее будет сделать. :( Тем более процессор там все равно нужен будет для последующей обработки. Но идея хорошая. Для быстрой работы с SDRAM ваше устройство должно поддерживать burst режим. В противном случае будет низкая эффективность(особенно с sdram). мне надо-то буквально 4MB/s, даже меньше. Сейчас задача хоть как-то сделать, а потом можно будет дорабатывать и burst и еще чего. Или лучше сразу делать? В NIOSII нет разделения периферия/память - всё в одной куче лежит. Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память. Для общения с вашим модулем можно создать файловый интерфейс или просто использовать функции HAL. Т.е. просто обращаться как к памяти не получится? :( Edited June 6, 2007 by RHnd Quote Share this post Link to post Share on other sites More sharing options...
vetal 0 June 6, 2007 Posted June 6, 2007 · Report post Ссылка не рабочая :( Или это был линк на ниосфорум вообще? рабочая, зарегестрируйтесь там. Такой вариант в голову не приходил. Т.е., добавить Master port к компоненту и подключить его к SDRAM-Controller? Сдается мне, это сложнее будет сделать. :( Тем более процессор там все равно нужен будет для последующей обработки. Но идея хорошая. Да. Без процессора удобнее - на момент прихода прерывания данные уже лежат там, где надо :) мне надо-то буквально 4MB/s, даже меньше. Сейчас задача хоть как-то сделать, а потом можно будет дорабатывать и burst и еще чего. Или лучше сразу делать? Лучше сразу. У вас на SDRAM не только ПУ сидит, а еще и процессор. Так для доступа к произвольной ячейке памяти будет 5-6 тактов(в зависимости от настроек), а в burst режиме - 5 тактов+ кол-во слов для записи(для выровненных данных). Эти задачи решает контроллер dma. У avalon очень простой интерфейс. Если вам DMA нужен только для этих целей - проще самому мастером стать, он делается за 15 минут. Читаю software Devalopment Handbook - разные режимы настройки DMA для переферия->память и память->память. Я не вдавался в подробности его работы, т.к. не использовал. Т.е. просто обращаться как к памяти не получится? :( Получится, только не стоит забывать про кэш. Его надо обходить установкой старшего бита адреса (BASE+0x80000000) или использованием специальных инструкций/макросов. При общении в вашими данными тоже не стоит забывать про него. Quote Share this post Link to post Share on other sites More sharing options...
RHnd 0 June 7, 2007 Posted June 7, 2007 · Report post Лучше сразу. У вас на SDRAM не только ПУ сидит, а еще и процессор. Так для доступа к произвольной ячейке памяти будет 5-6 тактов(в зависимости от настроек), а в burst режиме - 5 тактов+ кол-во слов для записи(для выровненных данных). Так ведь у процессора свой мастер, свое общение с SDRAM Controller, там все должно поддерживаться. Или я чего-то не понимаю? Эти задачи решает контроллер dma. У avalon очень простой интерфейс. Если вам DMA нужен только для этих целей - проще самому мастером стать, он делается за 15 минут. Очень заманчиво. Надо будет попробовать. Т.е. на компоненте мастерпорт, он подключин к контроллеру SDRAM, пишет туда данные. Так же slave-port, подключенный к ниосу и дающий ему прерывание при окончании кадра (а так же размеры кадра и т.п.). Ниос же пока данные кадра полностью не перепишутся в SDRAM, вообще ничего не делает. Симпатично. Quote Share this post Link to post Share on other sites More sharing options...
vetal 0 June 7, 2007 Posted June 7, 2007 · Report post Так ведь у процессора свой мастер, свое общение с SDRAM Controller, там все должно поддерживаться. Или я чего-то не понимаю? Так, только память они делят между собой по очереди и увеличение времени работы с памятью внешним устройством может привести к уменьшению быстродействия программы. Очень заманчиво. Надо будет попробовать. Т.е. на компоненте мастерпорт, он подключин к контроллеру SDRAM, пишет туда данные. Так же slave-port, подключенный к ниосу и дающий ему прерывание при окончании кадра (а так же размеры кадра и т.п.). Ниос же пока данные кадра полностью не перепишутся в SDRAM, вообще ничего не делает. Симпатично. да, так. мне тоже так понравилось - процессор не отвлекается по пустякам. Quote Share this post Link to post Share on other sites More sharing options...