我目前正在使用 Yocto Linux 构建并尝试与 FPGA 上的硬件块连接。这块是模仿一张带有FAT16文件系统的SD卡;包含单个文件 (cam.raw)。这个文件代表了FPGA和linux系统之间的共享内存空间。因此,我希望能够将数据从 linux 系统写入该内存并取回 FPGA 可能做出的任何更改(目前,FPGA 只是从内存空间中获取部分数据,并将 6 32 位字,就像我写 0x40302010 一样,如果我读回数据,应该返回 0x40302016)。但是,由于某处存在缓存,虽然我可以将数据写入 FPGA,但我无法立即取回结果。
我目前正在做这样的事情(使用 python 因为它很容易):
% mount /dev/mmcblk1 /memstick
% python
>> import mmap
>> import os
>> f = os.open("/memstick/cam.raw", os.O_RDWR | os.O_DIRECT)
>> m = mmap.mmap(f, 0)
>> for i in xrange(1024):
... m[i] = chr(i % 256)
...
>> m.flush() # Make sure data goes from linux to FPGA
>> hex(ord(m[0])) # Should be 0x6
'0x0'
Run Code Online (Sandbox Code Playgroud)
我可以用 dd 确认数据已更改(尽管我也经常遇到缓冲问题)并使用 FPGA(SignalTap/ChipScope)工具我确实得到了正确答案(即第一个 …