Я пытаюсь записывать и считывать 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-битный регистр. Если я напишу значение, я смогу прочитать его столько раз, сколько захочу. Если я напишу другое значение, оно станет значением, которое читается.