我正在尝试从连接到FPGA(Stratix V)的PC上运行的C程序读写片上FIFO。在过去的一周中,我一直在互联网上不停地阅读,并且遇到过许多不同的关键概念,但是无法相互理解,因此我无法理解如何在我的计算机上实现数据传输自己的。
但是,我确实在用户指南磁盘上找到了一个示例程序,该程序补充了PCIE接口并写入了片上存储器和DDR3存储器,并且包括一个我可以在PC端使用的C库,其中包含{ {1}},PCIE_Read32()
及其对应的对象。
由于我仍然不完全了解整个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是只读的。”
以相反的方式连接它们(我不知道如何处理它们而使PCIE_DmaRead()
和in_csr
引脚悬空了),但这是行不通的。
我希望将设计发布到平台设计器窗口中作为参考,但是我不确定如何做到这一点。
这是我尝试用于从PC访问FIFO的语法:
in_irq
和写类似。我也尝试过其他版本
#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);
发生的事情是“ FIFO”的行为类似于32位寄存器。如果我写一个值,我可以读取任意多次。如果我写另一个值,那将成为读取的值。