Как читать и писать в FIFO от Microblaze?

Я сделал свой проект и добавил в свой проект процессор microblaze. Я также добавил в свой проект ядро ​​​​H / W с FIFO. Я хочу читать и записывать в FIFO из процессора (путем написания кода ac в SDK). Что мне делать?


person MRNakh    schedule 09.08.2014    source источник


Ответы (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).

Насос

person N. Mos.    schedule 14.12.2016

Обычно устройство ввода-вывода, такое как ваш FIFO, отображается в памяти на один адрес или на диапазон адресов памяти.

Если он сопоставлен с одним адресом, вы должны использовать несколько инструкций чтения или записи для одного и того же адреса, например:

// example address for the FIFO
void myFifo = 0x0000AB00;
// write
*myFifo = dataToWrite;
//read
dataFromFifo = *myFifo;

Если ваш FIFO сопоставлен с диапазоном адресов, то myFifo будет представлять базовый адрес FIFO, и вы можете использовать memcpy для копирования нескольких байтов/слов в FIFO.

Отображение адресов может быть выполнено с помощью этого псевдокода:

  1. единый адрес:

    fifo_write <= '1' when (bus_address = x"0000AB00") and (bus_we = '1') else '0';
    
  2. диапазон адресов:

    fifo_write <= '1' when (bus_address(31 downto 8) = x"0000AB") and (bus_we = '1') else '0';
    

В случае 2 младшие 8 бит не имеют значения, и любой доступ для записи преобразуется в операцию записи FIFO.

person Paebbels    schedule 15.08.2014
comment
Это не работает, потому что fifo находится в ядре ip, а в файле userlogic.vhd нет никакого определения для записи входящих данных в считываемый fifo. - person MRNakh; 10.09.2014