limbast 0 12 октября, 2017 Опубликовано 12 октября, 2017 (изменено) · Жалоба Приветствую всех. Имеется АЦП, с которого ПЛИС считывает, суммирует и умножает данные. После определенного числа выборок полученные данные нужно передать NIOS для дальнейших действий. Подумалось, что можно передать просто через порт NIOS-а, но он ограничен 32 битами, а нужно передать два значения в 40 и 56 бит. В принципе можно разбить на несколько портов разной разрядности, а в NIOS склеить. Далее подумал использовать Dual Port Memory. Но придется городить модуль для запихивания данных в эту память. Может есть модуль, который сам генерирует требуемые двухпортовой памяти сигналы, а на входе нужны только данные любой длины? И наконец, а можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS, чтобы NIOS фактически мог в любое время взять и прочитать этот регистр, наподобие чтения той же Dual Port Memory. Изменено 12 октября, 2017 пользователем limbast Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 12 октября, 2017 Опубликовано 12 октября, 2017 · Жалоба можно ли сделать чтобы регистры данных железа (40 и 56 бит) отображались в адресное пространство NIOS На сколько я понял вашу проблему, то передача этих значений ваших, довольно редкая операция. И вот этот вариант мне кажется наиболее удобным, чем городить отдельную память и так далее. Проблема в том, что вы видимо не достаточно осведомлены как работает qsys и avalon-mm в частности. В общих чертах я бы сделал ваш модуль весь целиком, блоком qsys. Сделал бы на нем avalon-mm slave с 32х битной шиной данных и irq sender. В 0 адресе имел бы регистр управления с прерыванием и маской прерывания. При получении данных писал бы их в регистры по 32 бита в адреса 1,2,3,4 и выставлял бы прерывание. По прерыванию в ниосе читал бы эти 4 регистра (можно через указатель, можно через IORD. Второе лучше). Сбрасывал бы прерывание. Это все достаточно просто. Стоит разобраться один раз. Вариант с памятью вообще выглядит избыточно. А с пио, как-то кривовато. Зато можете сделать прямо сейчас, если спешите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nickolas 0 12 октября, 2017 Опубликовано 12 октября, 2017 · Жалоба Я бы не делал весь блок частью Qsys, потому что при изменении в блоке придется перегенерировать систему, пересобирать софт Ниоса. Проще сделать в Qsys мост наружу, т.е. вывести сигналы Avalon-MM за пределы системы, а в блоке, обрабатывающем данные с АЦП, реализовать контроллер Avalon-MM Slave. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 12 октября, 2017 Опубликовано 12 октября, 2017 · Жалоба Ксли один такой периферийный модуль и он сам по себе - сложная система, то может и да. Если у вас 10-20 таких модульков, отвечающих за всякое разное, то проще держать все в qsys. Генерировать систему это ведь не что-то невероятно сложное. К тому же интегрируемый модуль обычно уже оттестирован отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
limbast 0 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба Всё на Qsys не получится. Он просто не успеет. Период преобразования 2МГц, частота quadspi - 75МГц. Нужно формировать сигнал преобразования, затем CS и чтение. После этого данные (64 битные) суммируем, умножаем и снова суммируем. Кроме того nios должен будет заниматься и другими делами. Переход на ПЛИС был вынужденный, потому как другие МК с этой задачей не справились. Всё было сделано на DMA. Реализация чтения АЦП на ПЛИС понятна и прозрачна, все тайминги минимальны и понятно откуда берутся, а вот в МК, включая NIOS, задержки берутся неизвестно откуда и мы с этим ничего не сможем сделать. PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nickolas 0 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба думал может есть какой то простой и изящный способ передать данные в Qsys. Так вот вам выше и посоветовали сделать блок для Qsys. Подробнее можете почитать у Альтеры QII51022 2013.11.4 Creating Qsys Components. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Swup 0 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба PS Я задумывался о контроллерах Avalon-MM, но мне показалось это избыточно громоздко ради двух значений, думал может есть какой то простой и изящный способ передать данные в Qsys. Это не громоздко и не избыточно. При синтезе это вообще практически бесплатно. Во вторых это и есть изящно и просто, потому что это тот путь, который естественен для среды в которой вы работаете (qsys). И ни у одного пользователя он не вызовет недоумения. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться