近年来,随着中国新基建、中国制造 2025 规划的持续推进,单 ARM 处理器越来越难胜任工业现场的功能要求,特别是如今能源电力、工业控制、智慧医疗等行业,往往更需要 ARM + FPGA 架构的处理器平台来实现例如多路 / 高速 AD 采集、多路网口、多路串口、多路 / 高速并行 DI/DO、高速数据并行处理等特定功能,因此 ARM + FPGA 架构处理器平台愈发受市场欢迎。

图 1 ARM + FPGA 典型应用场景

ARM + FPGA 架构能带来性能、成本、功耗等综合比较优势,ARM 与 FPGA 既可各司其职,各自发挥原本架构的独特优势,亦可相互协作处理更复杂的问题。

ARM + FPGA 常见的通信方式有 PCIe、FSPI、I2C、SDIO、CSI 等,今天主要介绍基于 FSPI 的 ARM + FPGA 通信方式。

FSPI 总线特点介绍

FSPI(Flexible Serial Peripheral Interface) 是一种高速、全双工、同步的串行通信总线,在 RK3568 处理器中就有 ESPI 控制器,可用来连接 FSPI 设备。它具备如下特点:

支持串行 NOR FLASH、串行 NAND FLASH

支持 SDR 模式

支持一线、二线以及四线模式

相比 PCIe 而言,FSPI 可较好实现 “小数据 - 低时延”、“大数据 - 高带宽” 要求。另外,在与 FPGA 通信的时候,用户往往更喜欢选用 FSPI 接口还有如下原因:

- 使用低成本 FPGA 即可实现高速通信,而具备 PCIe 接口的 FPGA 成本则成倍增长。

- 具备 PCIe 接口的 FPGA 功耗往往较大,而低成本 FPGA 功耗较小。一般而言,低功耗器件的使用寿命也将更长。

基于 FSPI 的 ARM + FPGA 通信实测数据分享

硬件方案一:创龙科技 TL3568F-EVM 评估板 (RK3568J + Logos-2)。

实测数据:写速率 20MB/s+,最高 24MB/s,误码率 0%;读速率 26MB/s+,最高 30MB/s,误码率 0%。

TL3568F-EVM 评估板简介:

创龙科技 TL3568F-EVM 是一款基于瑞芯微 RK3568J/RK3568B2 四核 ARM Cortex-A55 处理器 + 紫光同创 Logos-2 PG2L50H/PG2L100H FPGA 设计的异构多核国产工业评估板,由核心板和评估底板组成,ARM Cortex-A55 处理单元主频高达 1.8GHz/2.0GHz。核心板 ARM、FPGA、ROM、RAM、电源、晶振、连接器等所有元器件均采用国产工业级方案,国产化率 100%。同时,评估底板大部分元器件亦采用国产工业级方案。

硬件方案二:创龙科技 TL3568-EVM 评估板 (RK3568) + TLA7-EVM 评估板 (Artix-7)

实测数据:写速率 52.563MB/s,读速率 67.387MB/s,误码率高。

备注:由于该测试受限于飞线连接方式,因此在 150MHz 通信时钟频率下测得误码率过高,测试结果仅供参考。

基于 FSPI 的 ARM + FPGA 通信案例详解

下文主要介绍基于瑞芯微 RK3568J(硬件平台:创龙科技 TL3568-EVM 评估板)与 Xilinx Artix-7(硬件平台:创龙科技 TLA7-EVM 评估板)的 FSPI 通信案例,按照创龙科技提供的案例用户手册进行操作得出测试结果。

同时基于 Linux Linux-RT 系统进行测试,得到 “小数据 - 低时延”、“大数据 - 高带宽” 的测试数据。

spi_rw 案例

(1)案例说明

案例功能:ARM 端运行 Linux 系统,基于 FSPI 总线对 FPGA BRAM 进行读写测试。

ARM 端实现 SPI Master 功能,原理说明如下:

a) 打开 SPI 设备节点,如:/dev/spidev4.0。

b) 使用 ioctl 配置 FSPI 总线,如 FSPI 总线极性和相位、通信速率、数据长度等。

c) 选择模式为单线模式、双线模式或四线模式。当设置 FSPI 总线为双线模式时,发送数据为单线模式,接收数据为双线模式;当设置 FSPI 为四线模式时,发送数据为四线模式,接收数据为四线模式。

d) 发送数据至 FSPI 总线,以及从 FSPI 总线读取数据。

e) 校验数据,然后打印读写速率、误码率。

FPGA 端实现 SPI Slave 功能,原理说明如下:

a) FPGA 将 SPI Master 发送的数据保存至 BRAM。

b) SPI Master 发起读数据时,FPGA 从 BRAM 读取数据通过 FSPI 总线传输至 SPI Master。

图 2 ARM 端程序流程图

(2)测试结果

ARM 通过 FSPI 总线(四线模式)写入 4Byte 随机数据至 FPGA BRAM,然后读出数据、进行数据校验,同时打印 FSPI 总线读写速率和误码率。

最终,本次测试设置 FSPI 总线通信时钟频率为 24MHz,则四线模式的理论通信速率为:(24000000 / 1024 / 1024 / 8 x 4)MB/s ≈ 11.44MB/s,从下图可知,本次实测写速率为 0.048MB/s,读速率为 0.182MB/s,误码率为 0%。

图 3

备注:以上案例硬件采用飞线方式进行连接,需将 FSPI 总线通信时钟频率设置为较低的 24MHz,并且需设置较小的测试数据量(会导致实测速率偏低),否则会产生误码现象。如使用创龙科技 TL3568F-EVM 评估板 (RK3568J + Logos-2) 硬件平台进行测试,则无误码的通信速率将大幅提升。

若设置 FSPI 总线通信时钟频率为 150MHz,ARM 通过 FSPI 总线写入 1MByte 随机数据至 FPGA BRAM,然后读出数据,循环 100 次,不做数据检验,最后打印 FSPI 总线读写速率和误码率。

最终,本次测试设置 FSPI 总线通信时钟频率为 150MHz,则 FSPI 四线模式理论通信速率为:(150000000 / 1024 / 1024 / 8 x 4) MB/s ≈ 71.53MB/s。从下图可知,本次实测写速率为 52.563MB/s,读速率为 67.387MB/s,比较接近理论通信速率。

图 4

备注:由于本次测试受限于飞线连接方式,因此在 150MHz 通信时钟频率下测得误码率过高,测试结果仅供参考。

rt_spi_rw 案例

(1)案例说明

案例功能:ARM 端运行 Linux-RT 系统,基于 FSPI 总线对 FPGA BRAM 进行读写测试。

ARM 端实现 SPI Master 功能,原理说明如下:

a) 打开 SPI 设备节点,如:/dev/spidev4.0。

b) 使用 ioctl 配置 FSPI 总线,如 FSPI 总线极性和相位、通信速率、数据长度等。

c) 选择模式为单线模式、双线模式或四线模式。当设置 FSPI 总线为双线模式时,发送数据为单线模式,接收数据为双线模式;当设置 FSPI 为四线模式时,发送数据为四线模式,接收数据为四线模式。

d) 发送数据至 FSPI 总线,以及从 FSPI 总线读取数据。

e) 校验数据,然后打印读写速率、误码率。

FPGA 端实现 SPI Slave 功能,原理说明如下:

a) 将 SPI Master 发送的数据保存至 BRAM。

SPI Master 发起读数据时,FPGA 从 BRAM 读取数据通过 FSPI 总线传输至 SPI Master。

图 5 ARM 端程序流程图

(2)测试结果

ARM 通过 FSPI 总线写入 4Byte 随机数据至 FPGA BRAM,然后读出数据、进行数据校验,同时打印 FSPI 总线读写速率和误码率。最终,本次测试设置 FSPI 总线通信时钟频率为 24MHz,则 SPI 四线模式理论通信速率为:(24000000 / 1024 / 1024 / 8 x 4)MB/s ≈ 11.44MB/s。

从下图可知,本次实测写速率为 0.179MB/s,发送最大耗时为 46us,最小耗时为 20us,平均耗时为 20us,误码率为 0%;读速率为 0.187MB/s,发送最大耗时为 46us,最小耗时为 19us,平均耗时 40s,误码率为 0%。

图 6

备注:以上案例硬件采用飞线方式进行连接,需将 FSPI 总线通信时钟频率设置为较低的 24MHz,并且需设置较小的测试数据量(会导致实测速率偏低),否则会产生误码现象。如使用创龙科技 TL3568F-EVM 评估板 (RK3568J + Logos-2) 硬件平台进行测试,则无误码的通信速率将大幅提升。

国产RK3568J基于FSPI的ARM+FPGA通信方案分享的更多相关文章

  1. 【iCore3 双核心板_FPGA】实验二十:基于FIFO的ARM+FPGA数据存取实验

    实验指导书及代码包下载: http://pan.baidu.com/s/1cmisnO iCore3 购买链接: https://item.taobao.com/item.htm?id=5242294 ...

  2. 【iCore4 双核心板_FPGA】例程十七:基于FIFO的ARM+FPGA数据存取实验

    实验现象: 核心代码: int main(void) { /* USER CODE BEGIN 1 */ int i; int fsmc_read_data; ; ]; ]; char *p; /* ...

  3. 【6集iCore3_ADP触摸屏驱动讲解视频】6-2 基于FSMC总线的ARM与FPGA通信

    视频简介: 该视频介绍基于FSMC总线的ARM与FPGA通信   源视频包下载地址: 链接:http://pan.baidu.com/s/1slJDoQD 密码:tmw7   银杏科技优酷视频发布区: ...

  4. USB小白学习之路(8)FX2LP cy7c68013A——Slave FIFO 与FPGA通信(转)

    此博客转自CSDN:http://blog.csdn.net/xx116213/article/details/50535682 这个博客只对自己理解CY7C68013的配置有一定的帮助,对于配置CY ...

  5. 基于web的IM软件通信原理分析

    关于IM(InstantMessaging)即时通信类软件(如微信,QQ),大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM或桌面IM软件类的通信原理介绍也较多,此处不再赘述.而 ...

  6. 【新产品发布】【iCore2 ARM / FPGA 双核心板】

    iCore2是一款包含ARM / FPGA两大利器的双核心板.ARM方面,采用意法半导体高性能的32位Cortex-M3内核STM32F103VE微处理器,主频达72MHz,并包含丰富外设接口.FPG ...

  7. Ubuntu虚拟机与Window、Arm的通信

    Ubuntu虚拟机与Window的通信安装有Ubuntu14.04的虚拟机VMware,将虚拟机的网络适配器配置成NAT类型(默认使用VMnet8进行通信),此时将Ubuntu的IP地址设置成与VMn ...

  8. 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构

    作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...

  9. 基于VC++的WinCE网口通信

    基于VC++的WinCE网口通信 WinCE下的网络编程与Windows下的非常类似,只是个别API函数有所不同.同样分为UDP和TCP两种,UDP就是无连接的通信,通过“用户数据报协议”(UDP)来 ...

  10. Android基于UDP的局域网聊天通信

    代码地址如下:http://www.demodashi.com/demo/12057.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1. 开发环境 1.1 开发工具 ...

随机推荐

  1. SpringMVC学习四(文件上传/拦截器)

    1.文件上传 1.1预备工作,需要两个jar包(Fileupload) jar包下载路径: [点击下载https://github.com/suyirulan/putao/tree/master/fi ...

  2. CSP-S2023游记

    不知不觉也高二了呢,最后一年OI了. Day -?? 过了初赛.没什么难度. Day -4 模拟赛挂分. RP++. Day -3 模拟赛挂分. RP++. Day -2 没挂分--?换数据了,又挂了 ...

  3. ITIL4中的关键概念

    1.价值和价值共创 什么是价值 通俗表达:这有啥用? 正式表达:这能带来什么益处或起什么作用? 反问式求证: 假如没有的话,会有什么后果? 具体情境提问:如果缺少IT运维人员,业务系统会面临怎样的状况 ...

  4. csapp-datalab(菜鸟小白版)

    第1题: /* * bitXor - x^y using only ~ and & * Example: bitXor(4, 5) = 1 * Legal ops: ~ & * Max ...

  5. 从零开始写 Docker(十四)---重构:实现容器间 rootfs 隔离

    本文为从零开始写 Docker 系列第十四篇,实现容器间的 rootfs 隔离,使得多个容器间互不影响. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star ...

  6. AIRIOT物联网低代码平台如何配置OPC DA驱动?

    AIRIOT物联网低代码平台提供了丰富的驱动,兼容了市面上95%以上的传感器.控制器及数据采集设备等,并且在持续增加中,能够快速.便捷地实现数据采集与控制功能. AIRIOT物联网低代码平台如何配置O ...

  7. RBD与Cephfs

    目录 1. RBD 1. RBD特性 2. 创建rbd池并使用 2.1 创建rbd 2.2 创建用户 2.3 下发用户key与ceph.conf 2.4 客户端查看pool 2.5 创建rbd块 2. ...

  8. 获取URL中查询参数 URL中动态参数

    通过 req.query 对象,可以访问到客户端通过查询字符串的形式发送到服务器的参数 app.get('/',(req,res)=>{ console.log(req.query) }) .U ...

  9. ETL工具-nifi干货系列 第十三讲 nifi处理器QueryDatabaseTable查询表数据实战教程

    1.处理器QueryDatabaseTable,该组件生成一个 SQL 查询,或者使用用户提供的语句,并执行它以获取所有在指定的最大值列中值大于先前所见最大值的行.查询结果将被转换为 Avro 格式, ...

  10. sse 与 编译器自动优化

    direct x 形式的矩阵和向量计算代码在编译的时候是自动汇编为 sse汇编的 何时使用手写sse 指令呢,当你的应用程序需要写一些物理运算时候 可以使用自己编写的sse计算函数来为 3维运算加速 ...