最近学习了ARM+FPGA的设计架构,ARM和FPGA结构的通信大致可以分为两种:
一种是数据量小、通信速率要求不高的情况,可以考虑采用SPI、IIC等差UN星通信方式。ARM都带有相关的SPI通信控制器等,在ARM端直接对相关的SPI通信控制器操作就可以了。而FPGA这一端可作为SPI从,按照SPI协议的时序写好从设备接口,这个工作量没有多大,所以相对都比较容易。
另一种是数据量大、通信速率要求较高的情况,就要采用并行总线的方式了。这时把FPGA当做ARM的一个片外的SRAM访问就可以,可以在FPGA内部生成一个双口RAM,输出的数据总线管腿直接连接到ARM的并行总线的数据总线上,双口RAM一端的地址总线也一样直接连接到ARM的并行总线中的地址总线。这样就可以实现FPGA从DPRAM一端读写,ARM从DPRAM的另一端读写的功能了,当然还需要其他一些使能或片选的控制信号。这里FPGA一侧较好实现,而ARM一侧需要开发SRAM(FPGA)驱动,这个还没有实际做过,所以没有把握。
NXP的ARM即LPC系列的并行总线称之为外扩地址与数据总线,由EMC(外部存储器控制器)控制,通过对EMC寄存器的控制就可以实现在外扩地址和数据总线上的数据收发。若是采用LPC系列ARM加一片FPGA,实现他们通信的关键应该在于这个EMC寄存器的控制,不知道按照一定的顺序操作这个寄存器组写出来的数据收发程序是不是就可以称之为所谓的驱动,求大神解释。
TI的ARM或DSP都有一个GPMC(通用内存控制器),它类似于LPC的EMC,是TI的芯片中用于与外部存储设备如NORFLASH、NANDFLASH、SRAM等通信的一个借口。对于这个同样也有上边的那个疑问。
三星的S5PV210则是有一组并行总线接口,称之为SROM,同样也有一个SROM控制器,支持外扩的NORFALSH、NANDFLASH、SRAM 等,应该也类似于LPC系列的EMC。我通过对这个控制寄存器的操作就可以实现对外部SRAM(FPGA)的读写,不知道这样理解对不对。
还有一个疑问就是,如果有操作系统,再要实现ARM和FPGA的通信是不是就没有这样简单了?在没有操作系统时,我仅仅对某个相关的控制寄存器操作就可以实现,这时就不可行了?这些都是以后要弄明白的。调研了这么长时间,始终没有着手找找现有的资源,写写程序做一下这个通信,感觉还是没有理解到位。果真是什么东西都要实践一下才能理解深刻。手头有一块LPC2478的ARM加FPGA的板子,但没有操作系统或者只有UC/OSII,不知道跟ARM有操作系统如Linux时,有什么区别。先上手做一做吧。
curton 2019-9-26 21:56