2015-12-09 7 views
-2

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

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

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

+0

Я уверен, что в Интернете доступно много ресурсов, а также книг по этой теме. – wahab

+0

Ага, какой вывод ... – Norick

ответ

2

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

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

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

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


EDIT: Какой бы подход вы используете, как описано выше, взаимодействуя с оборудованием со стороны программного обеспечения лучше всего сделать с помощью программного обеспечения драйвера.

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

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

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

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

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

с образцом кода и короткого «Руководящих принципов»

и использовать NIOS software handbook для большей глубины.

Чтобы найти то, что вы ищете, по-видимому, Altera использует термины «HAL» (Hardware Abstraction Layer) для описания части драйвера, которая напрямую обращается к аппаратным средствам, и «BSP» (пакет поддержки поддержки) для средства, которые позволяют вам описывать ваше оборудование для инструментов - и вашей команде разработчиков программного обеспечения. Любые инструменты для создания скелетного драйвера будут связаны с BSP: я вижу раздел «Создание нового BSP» в руководстве по программному обеспечению.

+0

Я не уверен, если мы говорим о той же теме. Вопрос в том, как я могу взаимодействовать между Nios и FPGA (vhdl) -кодом. Могу ли я использовать «глобальную» переменную, например, которую я могу проверить под кодом Nios? Как я общаюсь между VHDL-кодом FPGA и Nios-кодом? – Norick

+0

Я ответил на это ... через программное обеспечение драйвера. Отредактировано немного подробнее. –

+0

Я думаю, что это очень хорошо отвечает на вопрос. Я искал такой учебник или инструмент для создания «скелетного драйвера», но я ничего не могу найти. Кто-нибудь знает, где найти Altera (Nios) Max10? – Norick