Я сделал свой проект и добавил в свой проект процессор microblaze. Я также добавил в свой проект ядро H / W с FIFO. Я хочу читать и записывать в FIFO из процессора (путем написания кода ac в SDK). Что мне делать?
Как читать и писать в FIFO от Microblaze?
Ответы (2)
Я использовал Microblazed с таможенными IP-адресами, которые используют FIFO для связи с Microblaze (EDK 14.7).
Когда вы настраиваете Microblaze, он просит вас указать некоторые «Регистры программного обеспечения». Регистры этого программного обеспечения находятся в файле «user_logic.vhd», который создается автоматически, когда вы пытаетесь «Импортировать как периферийное устройство» свой собственный IP-адрес (например, ваш FIFO). Выберите количество программных регистров, подходящее для вашего проекта, и соедините их (в user_logic.vhd) с сигнализацией вашего FIFO (Inpout/Output/Empty/Full), чтобы контролировать содержимое FIFO (чтение и запись транзакций). Когда вы сгенерируете битовый поток своей аппаратной реализации и загрузите его на свою ПЛИС, в файле вашего проекта также будет создан файл с именем «драйверы», который содержит все библиотечные файлы с реализованными функциями для чтения и Запишите в регистры программного обеспечения Microblaze.
Теперь вы можете импортировать эти драйверы в свой проект C в среде SDK, чтобы использовать эти автоматически реализованные функции и получить доступ к реестрам программного обеспечения (и через них к вашему FIFO).
Насос
Обычно устройство ввода-вывода, такое как ваш FIFO, отображается в памяти на один адрес или на диапазон адресов памяти.
Если он сопоставлен с одним адресом, вы должны использовать несколько инструкций чтения или записи для одного и того же адреса, например:
// example address for the FIFO
void myFifo = 0x0000AB00;
// write
*myFifo = dataToWrite;
//read
dataFromFifo = *myFifo;
Если ваш FIFO сопоставлен с диапазоном адресов, то myFifo
будет представлять базовый адрес FIFO, и вы можете использовать memcpy
для копирования нескольких байтов/слов в FIFO.
Отображение адресов может быть выполнено с помощью этого псевдокода:
единый адрес:
fifo_write <= '1' when (bus_address = x"0000AB00") and (bus_we = '1') else '0';
диапазон адресов:
fifo_write <= '1' when (bus_address(31 downto 8) = x"0000AB") and (bus_we = '1') else '0';
В случае 2 младшие 8 бит не имеют значения, и любой доступ для записи преобразуется в операцию записи FIFO.