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

Обмен данными между ПЛИС и NIOS

Приветствую всех.

Имеется АЦП, с которого ПЛИС считывает, суммирует и умножает данные. После определенного числа выборок полученные данные нужно передать NIOS для дальнейших действий.

Подумалось, что можно передать просто через порт NIOS-а, но он ограничен 32 битами, а нужно передать два значения в 40 и 56 бит. В принципе можно разбить на несколько портов разной разрядности, а в NIOS склеить.

Далее подумал использовать Dual Port Memory. Но придется городить модуль для запихивания данных в эту память. Может есть модуль, который сам генерирует требуемые двухпортовой памяти сигналы, а на входе нужны только данные любой длины?

И наконец, а можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS, чтобы NIOS фактически мог в любое время взять и прочитать этот регистр, наподобие чтения той же Dual Port Memory.

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

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


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

можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS

 

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

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

 

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

 

В общих чертах я бы сделал ваш модуль весь целиком, блоком qsys.

Сделал бы на нем avalon-mm slave с 32х битной шиной данных и irq sender.

В 0 адресе имел бы регистр управления с прерыванием и маской прерывания.

При получении данных писал бы их в регистры по 32 бита в адреса 1,2,3,4 и выставлял бы прерывание.

По прерыванию в ниосе читал бы эти 4 регистра (можно через указатель, можно через IORD. Второе лучше).

Сбрасывал бы прерывание.

 

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

 

Вариант с памятью вообще выглядит избыточно.

А с пио, как-то кривовато. Зато можете сделать прямо сейчас, если спешите.

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


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

Я бы не делал весь блок частью Qsys, потому что при изменении в блоке придется перегенерировать систему, пересобирать софт Ниоса. Проще сделать в Qsys мост наружу, т.е. вывести сигналы Avalon-MM за пределы системы, а в блоке, обрабатывающем данные с АЦП, реализовать контроллер Avalon-MM Slave.

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


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

Ксли один такой периферийный модуль и он сам по себе - сложная система, то может и да.

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

 

Генерировать систему это ведь не что-то невероятно сложное. К тому же интегрируемый модуль обычно уже оттестирован отдельно.

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


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

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

Реализация чтения АЦП на ПЛИС понятна и прозрачна, все тайминги минимальны и понятно откуда берутся, а вот в МК, включая NIOS, задержки берутся неизвестно откуда и мы с этим ничего не сможем сделать.

 

PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys.

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


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

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

 

Так вот вам выше и посоветовали сделать блок для Qsys. Подробнее можете почитать у Альтеры QII51022 2013.11.4 Creating Qsys Components.

 

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


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

PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys.

 

Это не громоздко и не избыточно. При синтезе это вообще практически бесплатно.

Во вторых это и есть изящно и просто, потому что это тот путь, который естественен для среды в которой вы работаете (qsys). И ни у одного пользователя он не вызовет недоумения.

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


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

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

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

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

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

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

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

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

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

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