реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Обмен данными между ПЛИС и NIOS
limbast
сообщение Oct 12 2017, 12:34
Сообщение #1





Группа: Участник
Сообщений: 9
Регистрация: 28-01-05
Пользователь №: 2 252



Приветствую всех.
Имеется АЦП, с которого ПЛИС считывает, суммирует и умножает данные. После определенного числа выборок полученные данные нужно передать NIOS для дальнейших действий.
Подумалось, что можно передать просто через порт NIOS-а, но он ограничен 32 битами, а нужно передать два значения в 40 и 56 бит. В принципе можно разбить на несколько портов разной разрядности, а в NIOS склеить.
Далее подумал использовать Dual Port Memory. Но придется городить модуль для запихивания данных в эту память. Может есть модуль, который сам генерирует требуемые двухпортовой памяти сигналы, а на входе нужны только данные любой длины?
И наконец, а можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS, чтобы NIOS фактически мог в любое время взять и прочитать этот регистр, наподобие чтения той же Dual Port Memory.

Сообщение отредактировал limbast - Oct 12 2017, 12:36
Go to the top of the page
 
+Quote Post
Swup
сообщение Oct 12 2017, 14:23
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Цитата(limbast @ Oct 12 2017, 16:34) *
можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS


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

Проблема в том, что вы видимо не достаточно осведомлены как работает qsys и avalon-mm в частности.

В общих чертах я бы сделал ваш модуль весь целиком, блоком qsys.
Сделал бы на нем avalon-mm slave с 32х битной шиной данных и irq sender.
В 0 адресе имел бы регистр управления с прерыванием и маской прерывания.
При получении данных писал бы их в регистры по 32 бита в адреса 1,2,3,4 и выставлял бы прерывание.
По прерыванию в ниосе читал бы эти 4 регистра (можно через указатель, можно через IORD. Второе лучше).
Сбрасывал бы прерывание.

Это все достаточно просто. Стоит разобраться один раз.

Вариант с памятью вообще выглядит избыточно.
А с пио, как-то кривовато. Зато можете сделать прямо сейчас, если спешите.
Go to the top of the page
 
+Quote Post
Nick Potapov
сообщение Oct 12 2017, 14:40
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 19-05-06
Из: Нижний Новгород
Пользователь №: 17 250



Я бы не делал весь блок частью Qsys, потому что при изменении в блоке придется перегенерировать систему, пересобирать софт Ниоса. Проще сделать в Qsys мост наружу, т.е. вывести сигналы Avalon-MM за пределы системы, а в блоке, обрабатывающем данные с АЦП, реализовать контроллер Avalon-MM Slave.
Go to the top of the page
 
+Quote Post
Swup
сообщение Oct 12 2017, 15:45
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Ксли один такой периферийный модуль и он сам по себе - сложная система, то может и да.
Если у вас 10-20 таких модульков, отвечающих за всякое разное, то проще держать все в qsys.

Генерировать систему это ведь не что-то невероятно сложное. К тому же интегрируемый модуль обычно уже оттестирован отдельно.
Go to the top of the page
 
+Quote Post
limbast
сообщение Oct 13 2017, 06:31
Сообщение #5





Группа: Участник
Сообщений: 9
Регистрация: 28-01-05
Пользователь №: 2 252



Всё на Qsys не получится. Он просто не успеет. Период преобразования 2МГц, частота quadspi - 75МГц. Нужно формировать сигнал преобразования, затем CS и чтение. После этого данные (64 битные) суммируем, умножаем и снова суммируем. Кроме того nios должен будет заниматься и другими делами. Переход на ПЛИС был вынужденный, потому как другие МК с этой задачей не справились. Всё было сделано на DMA.
Реализация чтения АЦП на ПЛИС понятна и прозрачна, все тайминги минимальны и понятно откуда берутся, а вот в МК, включая NIOS, задержки берутся неизвестно откуда и мы с этим ничего не сможем сделать.

PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys.
Go to the top of the page
 
+Quote Post
Nick Potapov
сообщение Oct 13 2017, 06:48
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 19-05-06
Из: Нижний Новгород
Пользователь №: 17 250



Цитата(limbast @ Oct 13 2017, 09:31) *
думал может есть какой то простой и изящный способ передать данные в Qsys.


Так вот вам выше и посоветовали сделать блок для Qsys. Подробнее можете почитать у Альтеры QII51022 2013.11.4 Creating Qsys Components.
Go to the top of the page
 
+Quote Post
Swup
сообщение Oct 13 2017, 07:41
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 120
Регистрация: 2-09-11
Из: Москва
Пользователь №: 66 970



Цитата(limbast @ Oct 13 2017, 10:31) *
PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys.


Это не громоздко и не избыточно. При синтезе это вообще практически бесплатно.
Во вторых это и есть изящно и просто, потому что это тот путь, который естественен для среды в которой вы работаете (qsys). И ни у одного пользователя он не вызовет недоумения.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th October 2017 - 11:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01309 секунд с 7
ELECTRONIX ©2004-2016