Отображение порта в Xilinx Platform Studio и чтение его в C

Я работаю в Xilinx Platform Studio, и я хочу, чтобы модуль VHDL вывел некоторые значения, а затем я хотел бы иметь возможность прочитать это значение из другой программы, написанной на C.

Я думаю, что я хочу сделать, это сопоставить определенный порт в моем модуле VHDL с местом в памяти, а затем прочитать из этого места в памяти в моей C-программе.

Может ли кто-нибудь указать мне правильное направление, как я это сделаю?

3 ответа

Решение

Из вашего требования я понимаю, что вы хотите создать собственное ядро ​​ip (VHDL), а затем добавить его как часть системы XPS MicroBlaze/PowerPC, где ваше ядро ​​должно быть доступно для процессора (программирование на Си).

Здесь вам придется использовать инструменты Xil EDX Xilinx, чтобы выполнить следующие основные шаги:

  1. Сначала начните с Base System Builder, чтобы создать систему на основе процессора. Выберите необходимый процессор, периферийные устройства и другие компоненты для вашей системы.

  2. Вызовите Мастер импорта, чтобы создать пользовательский IPCore. Этот инструмент проведет вас через процедуру выбора функций для вашего собственного ядра. Выберите 2-4 функции регистрации доступных программ, которые доступны процессору (программирование на C). Наконец, мастер сгенерирует набор файлов, включая источники HDL, ipcore. Исходники шаблонов можно найти в *xps_prj/pcores/yourcore_v1_00_a*.

  3. Это большой шаг. Сгенерированные шаблоны HDL (*yourcore_v1_00_a/hdl/vhdl*) в основном содержат модуль шинного интерфейса (PLB/FSL) и пример логики. Здесь вы должны отредактировать источники шаблона HDL, чтобы удалить Пример логики и создать свою собственную базовую логику. Вы можете разделить порты ввода-вывода вашего основного экземпляра на два набора. Первый, который включает в себя порты ввода-вывода, доступные процессору (посредством программирования на C), должен быть подключен к программно-доступным регистрам в шаблоне HDL. Второй набор ваших основных портов ввода-вывода, которые вы хотите вывести из FPGA, должно быть выполнено необходимое сопоставление портов с подключением внешних портов верхнего модуля.

    Отредактируйте файл PAO (*yourcore_v1_00_a/data/yourcore_v1_00_a.pao*) и добавьте свои собственные исходные коды ядра в том порядке, в котором вы хотите его синтезировать.

    После того, как все необходимые изменения внесены в файлы шаблонов, вызовите мастер создания и импорта и импортируйте все основные изменения в среду XPS.

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

  5. Создайте Netlist и Bitstream системы, используя PlatGen.

  6. Создайте проект приложения C Сгенерируйте библиотеки с помощью LibGen и скомпилируйте приложение C для создания файла ELF.

  7. Используя инструмент Data2Mem, объедините Hardware Bitstream и Software ELF для загрузки файла .bit. Загрузите поток битов на платформу с помощью инструмента Impact.

Ссылка: http://ecasp.ece.iit.edu/mbtutorial.pdf

Это микроблэйзер или мощный процессор для ПК? Самым простым способом, вероятно, будет периферийное устройство gpio.

http://www.xilinx.com/support/documentation/ip_documentation/plb_gpio.pdf

Если вам нужна большая скорость, вы можете использовать FSL Link.

http://www.xilinx.com/support/documentation/ip_documentation/plb2fsl_bridge.pdf

Другие идеи и способы:

Блок интерфейса оперативной памяти. http://www.xilinx.com/support/documentation/ip_documentation/plb_bram_if_cntlr.pdf

Напишите пользовательские периферийные устройства. Найдите "Мастер создания и импорта периферийных устройств".

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

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

Я бы реализовал ваш новый модуль VHDL как периферийное устройство.

Вы, возможно, уже знаете это, но две широкие темы / методы, чтобы сделать это, являются IO с отображением в памяти и IO с отображением портов. IO с отображением портов требует введения некоторых новых инструкций и строки выбора микросхемы, идущей от ЦП, чтобы указать, куда пойдет эта операция чтения / записи. Адресное пространство может совместно использоваться как памятью, так и периферийными устройствами. (Является ли процессор частью вашего дизайна VHDL?)

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

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