工业控制领域,ARM + FPGA异构协同已经非常常见,但ARM与FPGA之间的数据通信一直是实际开发中的难题:SPI简单易用,但带宽有限,影响数据采集;PCIe带宽高,但开发复杂度也高,增加了开发成本。
有一种更直接的ARM与FPGA通信方式——Local Bus。它能直接访问FPGA内部寄存器,减少中间协议开销,让数据交互变得简单,更具有较高的传输速率!

▍了解Local Bus
Local Bus是一种用于处理器与本地外部设备之间数据交互的总线,它的核心思路是:把对端器件的地址空间映射成自己的一段物理地址,然后用读写内存的方式直接访问,其特点有:
(1)并行传输:多位数据同时传输,可提高数据传输效率。
(2)时序简单:以基本的读写操作为核心,接口时序相对简单,易于实现。
(3)访问延迟低:没有复杂协议处理带来的额外开销,适合对实时性有要求的应用。
▍Local Bus重要机制:主从分工
上文所述,Local Bus是通过“地址映射”的方式实现对端设备的读写。因此,需要明确谁负责发起请求、谁负责响应请求。
在使用Local Bus作ARM与FPGA通信时,采用Master-Slave(主从)模式作区分:Master负责发起访问请求,Slave负责响应请求并完成对应的数据读写。
Master(ARM端)
发起读写请求
提供访问地址和控制信息
写操作:发送数据至FPGA
读操作:等待FPGA返回数据
Slave(FPGA端)
接收ARM发起的访问请求
根据地址确定访问目标
执行寄存器/FIFO读写
返回数据或响应状态
▍Local Bus通信方案演示
以下基于创龙科技T153工业评估板与TL-AD-PGL25G模块演示Local Bus协议传输性能。

执行程序,ARM通过Local Bus总线写入4KByte随机数据至FPGA FIFO,然后读出数据、进行数据校验,同时打印Local Bus总线读写速率和误码率。
root@T153-Tronlong:~#./localbus_dma_rw-c100
DMA:write:(app time:27us,app rate:139.92MB/s,write_error:0)
read:(app time:44us,app rate:87.30MB/s,read_error:0)
check_error:0
root@T153-Tronlong:~#
根据实际测试结果,基于Local Bus实现ARM与FPGA通信,传输速率最高可达近140MB/s。当SPI方案带宽不足以承载大批量数据流,而PCIe方案对软硬件协同设计要求较高时,Local Bus能够在传输能力与实现复杂度之间取得平衡,是一个不错的选择!

客服











