C++ 将图像位发送到嵌入FPGA的HDL生成的RAM块

C++ 将图像位发送到嵌入FPGA的HDL生成的RAM块,c++,c,linux,qt,fpga,C++,C,Linux,Qt,Fpga,我有一块FPGA SoC板(DE1-SoC-MTL2)。SoC是Altera(现在的Intel FPGA)Cyclone V FPGA和ARM Cortex A9的组合,它们相互连接,可以使用AMBA网络交换数据。使用称为平台设计器(以前称为Qsys)的工具,可以为HDL创建的块分配地址,从而可以从ARM Cortex A9处理器控制FPGA部分的块 简而言之,我有一个Linux系统,它可以使用指定的基址与FPGA交换数据 我有一个大小为300x1200的二进制图像(黑白,1位),我必须将其存储

我有一块FPGA SoC板(DE1-SoC-MTL2)。SoC是Altera(现在的Intel FPGA)Cyclone V FPGA和ARM Cortex A9的组合,它们相互连接,可以使用AMBA网络交换数据。使用称为平台设计器(以前称为Qsys)的工具,可以为HDL创建的块分配地址,从而可以从ARM Cortex A9处理器控制FPGA部分的块

简而言之,我有一个Linux系统,它可以使用指定的基址与FPGA交换数据


我有一个大小为300x1200的二进制图像(黑白,1位),我必须将其存储在内置的FPGA RAM中。为此,我设计了一个具有1200个字的304位RAM(我不允许将其设为300,因为它必须是8的倍数,因为地址分配限制为字节)。假设RAM地址从0x0000开始,在0xB220结束。我应该怎么做才能将图像存储在RAM中,使每个300位宽度的信息存储在RAM的每个字中?(我可以用C,C++(Qt Calor),我只想点击GUI中的一个按钮来存储图像。”< /P> < P>我能够解决这个问题,所以我会尝试回答我自己的问题。p> 304位文字无法与使用AMBA互连的系统其余部分通信。我被迫设计了一个字大小为2次方(最小8位)的RAM,所以我选择512位作为我的字长。我用零填充了未使用的部分(从301到512的每个字的位数)(我本可以使用它们,但会使我的HDL算法更复杂)


正如@johnmoon在评论中建议的那样,我首先使用mmap(),每次写32位。为了在给定地址写入32位字,我使用了基址+偏移地址(正如@Eugene Sh.所建议的),为了能够使用我的定制架构使用内存中的数据,我制作了RAM双端口。现在一切正常。

你该怎么办?可能写入FPGA基址+偏移量。但是只有你知道你自己的设计。读:……记住,在使用Linux时,你需要考虑MMU。也就是说,在您的C程序中,不要只写基址-首先使用mmap()。