Как подключить встроенную память FIFO avalon к MM DMA серии V FOR PCI Express? - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь записывать и считывать FIFO на кристалле из программы на C, работающей на ПК, подключенном к FPGA (Stratix V). Я непрерывно читаю в интернете на прошлой неделе, и я столкнулся с множеством различных ключевых концепций, но не могу составить общую картину, которая позволила бы мне понять, как реализовать передачу данных на моем владеть.

Однако я нашел пример программы на диске с руководством пользователя, который дополнял интерфейс PCIE, а также записывал данные в встроенную память и память DDR3, и включал библиотеку C, которую я мог использовать на стороне ПК, которая содержала PCIE_Read32(), PCIE_DmaRead() и их аналоги для записи.

Поскольку я до сих пор не до конца понимаю, как работает вся система PCIE / DMA / AVALON, я был бы очень признателен за информацию о том, как подключить FIFO к этой системе, на конструкторе платформы.

Я попытался подключить мастер чтения PCIE к выходу из fifo и мастер записи PCIE к входу fifo, но я получил следующие ошибки:

"Ошибка: [...] pcie_256_dma.dma_wr_master доступна только для чтения, а pcie_256_dma.dma_wr_master только для записи."

(что абсолютно бессмысленно)

и

"Ошибка: [...]: fifo_0.out доступен только для чтения, а pcie_256_dma.dma_rd_master только для записи."

Соединение их с другой стороны было принято (я оставил штыри in_csr и in_irq болтаться, потому что я не знаю, что с ними делать), но это не сработало.

Я бы хотел опубликовать дизайн в окне дизайнера платформы в качестве ссылки, но я не уверен, как это сделать.

Вот синтаксис, который я пытался использовать для доступа к FIFO с ПК:

#include "stdafx.h"

#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include "PCIE.h"

#define DEMO_PCIE_USER_BAR      PCIE_BAR4
#define FIFO_WRITE_MEM_ADDR         0x80020
#define FIFO_READ_MEM_ADDR          0x80024

...
BOOL bPass;
    int* push;

    bPass = PCIE_Read32(hPCIe, DEMO_PCIE_USER_BAR, FIFO_READ_MEM_ADDR,(DWORD)push);

и аналогично для записи. Я также попробовал другую версию

pRead = (char *)malloc(32);
bPass = PCIE_DmaRead(hPCIe, FIFO_READ_MEM_ADDR, pRead, 32);

происходит то, что "FIFO" ведет себя как 32-битный регистр. Если я напишу значение, я смогу прочитать его столько раз, сколько захочу. Если я напишу другое значение, оно станет значением, которое читается.

...