- 主题:mmap的虚拟内存空间和物理内存内容一致性问题
xlinx开发板,FPGA+ARM。
一个寄存器,FPGA写,ARM读。
ARM上将该寄存器mmap为虚拟内存地址。
我现在遇到个问题,怀疑FPGA写完后,mmap映射的虚拟内存地址中的内容没及时更新。
这个有办法解决吗?
能否做到物理内存内容改变后,mmap的虚拟内存内容立刻改变?
--
FROM 221.231.166.*
一定会有延时,看FPGA是什么频率写入寄存器的,应该在纳秒级别吧。不过这类异步操作不是应该有个状态指示位么?不然如果两次的数据相同那怎么区分呢?
--
FROM 219.142.5.*
cache 需要刷写。写入内存需要flush,读入需要invalidate
--
FROM 111.206.214.*
ioctl(IOCTL_MEMCACHE_FLUSH, &args);
【 在 hondrous 的大作中提到: 】
: cache 需要刷写。写入内存需要flush,读入需要invalidate
--
FROM 111.206.214.*
应该是CACHE问题,cpu和cache缓存控制器并不知道ddr里数据更新了,所以会优先从cache里拿数据
【 在 elephant 的大作中提到: 】
: xlinx开发板,FPGA+ARM。
: 一个寄存器,FPGA写,ARM读。
: ARM上将该寄存器mmap为虚拟内存地址。
: ...................
--
FROM 221.223.99.*
# Zynq US+ 理论上可以AXI实现Coherency那个协议,理论上L1一致
# Zynq 7K/US+,走ACP,设置好属性,数据直接打到L2,自动invalidate L1
# /dev/mem,加O_SYNC,内存类型会从普通Memory变成Device
# uio配置,内存是strongly ordered
# 想办法用户态invalidate/clean cache
【 在 elephant (elephant) 的大作中提到: 】
: xlinx开发板,FPGA+ARM。
: 一个寄存器,FPGA写,ARM读。
: ARM上将该寄存器mmap为虚拟内存地址。
: ...................
--
修改:zkr FROM 123.112.178.*
FROM 123.112.178.*
arm和fpga对这块存储区的cache属性设置要一致
--
FROM 106.38.11.*
这是flush,请问下用户态怎么invalidate?
- 来自 水木社区APP v3.4.0
【 在 hondrous 的大作中提到: 】
: ioctl(IOCTL_MEMCACHE_FLUSH, &args);
--
FROM 114.222.128.*
寄存器定义为volatile试试
【 在 elephant 的大作中提到: 】
: 这是flush,请问下用户态怎么invalidate?
: - 来自 水木社区APP v3.4.0
--
FROM 123.113.15.*
这个问题和volatile应该没有关系。
volatile是物理内存中的值和缓存时一致的,只是编译器优化了。
【 在 ironwei 的大作中提到: 】
: 寄存器定义为volatile试试
:
--
FROM 49.77.231.*