ARM和FPGA之间的通信(硬件原理图篇)

设计该开发板的初衷是为了学习,但也希望今后能扩展其功能,看到大家都在diy示波器,自己也非常冲动的想DIY一把,于是呼选了arm+fpga的方案,fpga主要用来实现数据的高速采样,而ARM则提供数据的显示,以及一些人机交互的功能。那么该方案中最重要的地方就是ARM和FPGA之间的通信如何实现了。在网上查了很多的资料,有说将FPGA作为ARM的一个外设,可以通过DMA的方式来直接访问;也有说把FPGA当做arm的一个存储设备,可以通过总线的方式将FPGA挂载到ARM的一个bank,这样就可以通过向访问存储器那样来访问FPGA,在linux系统中应该是通过ioremap这个函数来访问存储器,那么也就是说可以用ioremap来访问FPGA。

ARM 和FPGA之间连接的功能图如下所示:

ARM和FPGA之间的通信(硬件原理图篇)_第1张图片

如上图所示,Addr1---Addr8为地址总线,D0---D15为数据总线,nGCS5为ARM的bank片选,nOE为读使能信号,nWE为写使能信号,EINT0为中断信号。

 s3c2440的 bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB(可以参考s3c2440 datasheet)。bank0---bank5可以连接ROM和SRAM, BANK6,7只能连接SDRAM。我把FPGA当做ARM的一个sram 挂载到bank5,所以选择nGCS5信号。为什么是Addr1---Addr8,而不是从Addr0开始?参考s3c2440 datasheet,如下图所示,当使用16位的数据总线时,是从A1开始连接。虽然BANK5有128M空间,但因为只使用了Addr1---Addr8,所以只使用了256byte*2地址空间。

ARM和FPGA之间的通信(硬件原理图篇)_第2张图片

CPU寻址是以字节为单位的,也就是说BANK0---BANK5 能寻址128M*1字节(1byte/8bit)的存储空间,但是因为是16位的数据总线,CPU地址要每次加2才能寻址一个16位的数据,所以才是从A1开始连接地址线。所以使用Addr1---Addr8,就使用了2^8 *16bit =256 *16 bit =256Byte*2=512 Byte 的空间。 







你可能感兴趣的:(硬件篇)