Как взаимодействовать между Nios и FPGA?

Пример. Предположим, что на ПЛИС работает Nios, который случайным образом (или каждую секунду) отправляет строку на подключенный дисплей через интерфейс SPI. С другой стороны, есть код FPGA, который контролирует кнопку. Каждое нажатие на эту кнопку должно отправлять строку на один и тот же прикрепленный дисплей.

Вопрос: Как работает взаимодействие (или связь) между ПЛИС и Nios в целом или в таком описанном случае? Как можно "сообщить" Ниосу, что кнопка нажата, когда этот код выполняется под кодом FPGA? Может быть, есть документация по этой теме, чтобы понять, как она работает...

заранее спасибо

1 ответ

Решение

Низкая скорость или высокая скорость?

Для низкой скорости подключите ядро ​​GPIO с достаточным количеством "выводов" ввода / вывода к системе NIOS и перестройте его. Подключите свое оборудование к этим контактам и используйте код драйвера GPIO для доступа к ним. Готово. Кнопки считаются низкими скоростями. SPI тоже может, хотя вы, вероятно, найдете гораздо лучшую периферию SPI для NIOS, так что я бы использовал это.

Для высокой скорости вам необходимо спроектировать периферийное устройство (IP-ядро), которое взаимодействует с любой шиной, используемой системой NIOS, и предоставляет все регистры, память, источники прерываний и т. Д., Необходимые для взаимодействия с вашим оборудованием VHDL. Существует множество примеров периферийных устройств, которые вы можете использовать в качестве отправной точки. Затем вы можете написать программное обеспечение драйвера для доступа к этому периферийному устройству, опять же, начиная с примера кода.

Это гораздо более сложный проект, и хотя он намного быстрее, чем GPIO, вы обнаружите, что "высокая скорость" относительна; Любой встроенный процессор работает ужасно медленно по сравнению с нестандартным оборудованием. Мы говорим не о факторах 2, а о порядках величин.


РЕДАКТИРОВАТЬ: Какой бы подход вы ни использовали, как описано выше, взаимодействие с аппаратным обеспечением со стороны программного обеспечения лучше всего осуществлять с помощью программного драйвера.

Если вы находитесь в ситуации, когда вам нужно написать свой собственный драйвер, вы объявляете переменные, соответствующие каждому доступному регистру или блоку памяти (представленному переменной массива). Часто инструменты вендора могут создать для вас драйвер скелета либо из кода VHDL, либо из другого описания. Я не знаю, как настроены инструменты Altera/Nios, но у них наверняка есть учебники, которые научат вас подходу.

Если у вас есть компилятор Ada, вы можете объявить эти переменные в области видимости пакета, чтобы обеспечить надлежащую абстракцию и сокрытие информации. Но если вам нужно использовать C без пакетов, вы, вероятно, застряли с глобальными переменными.

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

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

Я хотел бы начать здесь: https://www.altera.com/support/support-resources/design-examples/intellectual-property/embedded/nios-ii/exm-developing-hal-drivers.html

с образцом кода и коротким документом "Руководство"

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

Чтобы помочь найти то, что вы ищете, очевидно, Altera использует термины "HAL" (Уровень аппаратной абстракции), чтобы описать часть драйвера, которая непосредственно обращается к оборудованию, и "BSP" (Пакет поддержки платы) для средств, которые позволяют Вы должны описать свое оборудование для инструментов - и для вашей команды разработчиков программного обеспечения. Любые инструменты для создания драйвера скелета будут связаны с BSP: я вижу раздел "Создание нового BSP" в руководстве по программному обеспечению.

Другие вопросы по тегам