Отображение порта в Xilinx Platform Studio и чтение его в C
Я работаю в Xilinx Platform Studio, и я хочу, чтобы модуль VHDL вывел некоторые значения, а затем я хотел бы иметь возможность прочитать это значение из другой программы, написанной на C.
Я думаю, что я хочу сделать, это сопоставить определенный порт в моем модуле VHDL с местом в памяти, а затем прочитать из этого места в памяти в моей C-программе.
Может ли кто-нибудь указать мне правильное направление, как я это сделаю?
3 ответа
Из вашего требования я понимаю, что вы хотите создать собственное ядро ip (VHDL), а затем добавить его как часть системы XPS MicroBlaze/PowerPC, где ваше ядро должно быть доступно для процессора (программирование на Си).
Здесь вам придется использовать инструменты Xil EDX Xilinx, чтобы выполнить следующие основные шаги:
Сначала начните с Base System Builder, чтобы создать систему на основе процессора. Выберите необходимый процессор, периферийные устройства и другие компоненты для вашей системы.
Вызовите Мастер импорта, чтобы создать пользовательский IPCore. Этот инструмент проведет вас через процедуру выбора функций для вашего собственного ядра. Выберите 2-4 функции регистрации доступных программ, которые доступны процессору (программирование на C). Наконец, мастер сгенерирует набор файлов, включая источники HDL, ipcore. Исходники шаблонов можно найти в *xps_prj/pcores/yourcore_v1_00_a*.
Это большой шаг. Сгенерированные шаблоны 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.
Ваш пользовательский ipcore теперь будет отображаться в каталоге IP. Добавьте его как часть вашей системы и выполните необходимые подключения порта, интерфейс шины и генерацию адреса для пользовательского IPCore в системе.
Создайте Netlist и Bitstream системы, используя PlatGen.
Создайте проект приложения C Сгенерируйте библиотеки с помощью LibGen и скомпилируйте приложение C для создания файла ELF.
Используя инструмент Data2Mem, объедините Hardware Bitstream и Software ELF для загрузки файла .bit. Загрузите поток битов на платформу с помощью инструмента Impact.
Это микроблэйзер или мощный процессор для ПК? Самым простым способом, вероятно, будет периферийное устройство 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
и укажите адрес, по которому ваше устройство предназначено для чтения и записи.