DMA 直接存储器访问
BRAM 随机访问数据存储器
每个单元对应每个地址 在读写数据时 都会先获取地址 在进行读写数据 BRAM是FPGA内部专用的存储资源,性能优异但数量有限,每一个BRAM是36Kb大小,也可以配置成2个18Kb的BRAM,BRAM可以用来实现多种不同位宽和深度的RAM/ROM/FIFO,在FPGA中应用非常广泛和灵活。
xdma的原理
xdma的主要原理是通过直接访问主机内存,实现数据的快速传输。
在传统的DMA ( Direct Memory Access )技术中,数据传输需要经过CPU的干预,而xdma可以绕过CPU,直接将数据从外设读取到主机内存或者从主机内存传输到外设。这样可以大大提高数据传输的速度和效率。
XDMA主要是在应用层面
在FPGA例化配置完以后基本上就不需要FPGA在逻辑层面上进行过多的操作了,FPGA只需要对HOST主机进行中断触发操作即可,所有的DMA操作完全由HOST主机通过PCIE配置XDMA的寄存器来实现。
主要通信的结构
一般的PCIE通信模式就是host需要数据或者host被通知数据到达时,host通过配置endpoint端DMA寄存器,然后DMA通过PCIE将数据由endpoint端搬运至HOST端的过程,当host需要发送数据给endpoint时,则通过配置endpiont端的DMA寄存器将数据通过PCIE由host端搬运至endpoint端
那DMA怎么知道把数据从哪里搬到哪里
PCIE的地址空间管理,PCIE通过BAR空间映射将设备端的地址空间映射到主机里的一段地址空间,这样在主机端直接操作对应的BAR空间就是在操作endpoint里面的地址空间了,而这种映射关系就需要主机在驱动加载的过程中,去配置对应endpoint的BAR空间寄存器去分配地址空间和长度
加载与初始化过程
从上电开始说起,我们的电脑就是HOST端,我们的板卡就是EP端;上电后双方各自加载各自的软件,EP加载完后等着电脑(电脑比较慢,也需要他慢),HOST在上电后先初始化自己的PCIE设备,然后扫描PCIE总线上的EP设备(这一部分在HOST驱动完成),如果EP在物理层上与HOST端LINK上了,那HOST就会给EP分一个设备号,并且获取EP的PCIE的header寄存器(一般存储了PCIE设备的ID,和其他的能力属性),将这些信息暂存。当系统启动末期在加载设备驱动的时候PCIE总线驱动会匹配驱动程序的ID与上面暂存的ID,如果匹配成功,加载设备的驱动程序,在设备驱动里完成EP的BAR空间分配,中断分配等工作。那这个通信链路就算搭建完成了……
通过vivado建立工程
搭建 blockdesign