APP下载

基于PCIe的高性能国产化嵌入式实验平台构建

2024-04-09段中雄

科技创新与应用 2024年10期
关键词:龙芯嵌入式系统国产化

段中雄

摘  要:该文对基于龙芯2K1000国产化CPU和Xilinx Kintex-7 325T FPGA的嵌入式实验平台的构建进行研究,通过嵌入式软件环境和对XDMA驱动程序中内存拷贝方式、中断处理方式进行优化设计,实现2K1000的PCIe接口高达400 MB/s与FPGA的高性能数据交互,满足在国产化嵌入式实验平台下的高性能数据处理需求。

关键词:国产化;龙芯;FPGA;嵌入式系统;驱动;PCIe

中图分类号:TP368.1      文獻标志码:A          文章编号:2095-2945(2024)10-0010-04

Abstract: This paper studies the construction of an embedded experimental platform based on Loongson 2K1000 localized CPU and Xilinx Kintex-7 325T FPGA, and the memory copy mode and interrupt handling mode in the XDMA driver are optimized through the embedded software environment and the optimized design of the memory copy mode and interrupt handling mode in the XDMA driver, and the PCIe interface of the 2K1000 is up to 400MB/s to interact with the high-performance data of the FPGA, which meets the high-performance data processing requirements under the localized embedded experimental platform.

Keywords: localization; Loongson; FPGA; embedded system; driver; PCIe

当前,国外在集成电路等优势行业对我国进行断供、限制出口,关键芯片“卡脖子”问题愈加突出,严重影响我国核心基础高科技产业发展,对国家信息安全造成了威胁。在此背景下,国家提升了对关键基础行业的“自主可控”要求,推进了芯片等基础行业的国产化发展。在处理器领域,经过数十年的积累,我国发展了一批龙芯、飞腾、申威、兆芯和海思麒麟等国产化CPU[1],基于国产化平台开展了数字信号处理、网络安全、机械控制领域的研究。本文结合国产化实验平台的建设,完成了基于国产化龙芯2K系列高性能处理平台构建,深入研究了龙芯2K1000处理器在高性能数据交换性能,为国产化处理器在高性能数据交换领域的应用打下基础。

1  高性能嵌入式平台硬件构建

高性能嵌入式平台主要用于专业领域,对处理实时性、应用环境复杂性、功耗和安装尺寸均有更高要求。随着国产化64位多核嵌入式CPU的应用,大幅度提升了嵌入式平台的处理性能,有学者[2]开展了面向国产化教学试验平台的研制,但对于国产化CPU的性能还没有深入的研究。为深入挖掘国产化CPU在数字传输中的性能,构建通用化的嵌入式处理平台,满足高性能处理需求,本文围绕国产化高性能CPU,通过PCIe总线与FPGA实现高速互联,构建了高性能国产化高速数据处理平台,如图 1所示,并完成FPGA固件及驱动程序开发,打通了FPGA与国产化CPU之间的高速数据传输通道,为国产化嵌入式CPU高速数据处理应用奠定了基础。

1.1  高性能CPU方案

为降低CPU的复杂度,嵌入式CPU大多采用RISC架构,将复杂处理交给了编译器,在通道中仅包含了最有用的指令,确保数据通道快速执行每一条指令,提高了执行效率并使CPU硬件结构设计变的更为简单,主要代表是ARM、MIPS、PowerPC等。国产CPU厂商也主要基于主流的指令集架构进行发展,龙芯、飞腾分别基于MIPS、ARM架构。不同的国产CPU厂商所走的技术路线并不完全相同,指令集授权方式也各有差异,龙芯采用了授权+自研方式的技术路线,飞腾采用了指令集授权方式。授权+自研方式技术难度相对较高,但是自主化程度较高。因此,本文采用了基于龙芯的国产化CPU进行构建。

龙芯系列芯片主要面向信息与工业控制领域,龙芯2号系列为低功耗面向工业控制与终端等领域的通用处理器,主要用于网络终端、智能装备[3]。基于对龙芯系列芯片,结合嵌入式、高性能、低功耗的应用场景,本文选择龙芯2K1000处理器构建平台,该处理具有较强的处理能力、丰富的接口。该处理器的处理能力、高速数据接口能够支持有较高性能需求的嵌入式应用。

1.2 高性能FPGA方案

针对高性能处理应用场景,需要平台同时具备较强的逻辑处理能力,FPGA(Filed Programmed Gate Array)是一种可编程逻辑器件,具有支持复杂逻辑的并行处理能力,有丰富的IO资源,使用灵活,可重构,得到了广泛应用。当前主流的FPGA主要有Altera、Xilinx等,分别被Intel和AMD收购,相对于自主可控CPU的较长积累,国产化FPGA及配套开发软件研制起步较晚。

FPGA的开发应用不仅依赖FPGA器件及综合软件,更重要是需要有完善的IP生态环境,因此本文FPGA选用了Xilinx的中端产品Kintex[4],结合平台的功耗、处理能力、成本等因素,选择了Kintex-7 325T,该FPGA有32 KB逻辑资源、4Mb Block Memory、16个GTX与一个PCIe Gen2的硬核,兼顾了性能及成本。

1.3  高性能数据传输接口方案

嵌入式CPU与FPGA之间需要高速数据接口互联,以满足高速的数据传输需求。常用的高速数据接口有Local Bus总线、PCIe总线甚至还有以太网接口,以实现FPGA与CPU之间的高速数据交换。Local Bus总线接口时序较为简单直接,通常没有复杂的上层协议,但交换速率较低,更重要的是不同CPU的Local Bus可能在工作速率、时隙配置上略有差别,不利于平台的升级与扩展;网络接口虽然可以达到高速的数据传输,但是FPGA对网络协议包的处理难度大,不利于灵活的数据传输应用;PCIe是一种高速串行总线标准,采用差分信号传输具有很强的抗干扰性能,同时具有较高的传输速率,但接口协议相对复杂,提升了FPGA、驱动开发的难度。综合考虑扩展性及高性能数据传输需求,本文选择PCIe接口作为FPGA与CPU之间的高速接口。

为进一步降低FPGA程序对PCIe的复杂处理,本文采用了基于Xilinx XDMA的高速数据传输。Xilinx提供的XDMA IP core已完成了PCIe的封装,并支持与AXI、AXI-lite总线的相互转换[5],需要在FPGA内部实现AXI接口的RAM处理。

如图2所示,围绕国产化龙芯2K1000,通过PCIe接口实现了与Xilinx高性能FPGA进行互联,完成了高性能嵌入式平台硬件构建。

2  高性能嵌入式平台软件构建

基于高性能嵌入式平台硬件,需要进一步完成嵌入式软件运行环境构建,并同时为PCIe传输通道开发驱动程序,实现高性能的数据传输处理。

2.1  嵌入式软件运行环境

嵌入式系统为降低用户应用软件开发及维护的复杂度,需要构建嵌入式软件运行依赖的环境,主要包括BootLoader、内核、根文件系统的移植等。龙芯国产化平台,支持相对完善的是PMON,在完成交叉编译后在板上烧写,主板上电后,PMON完成初始化CPU、内存、总线等设备及对串口、键盘、鼠标等外设进行基础测试等一系列工作,最后进入PMON的显示字符界面,为系统内核准备必要的环境。

根据龙芯白皮书推荐,本文采用了开源的Linux内核[3],内核裁剪了在Networking support、Divice Driver、Filesystems等子系统中不需要的功能[6]。例如裁剪了本项目不需要的无线网络,文件系统选用yaffs2。设备驱动也只选择需要的进行编译,最终交叉编译后的内核文件约为4 MB。

本文采用Buildroot工具来实现对文件系统的构建,选择将常用的系统管理命令、网络配置和测试工具、内核模块管理工具以及PCI配置工具生成文件系統。根文件系统是Linux系统启动时首先挂载的文件系统,其包含了系统启动所需的所有文件和目录,如/bin、/etc、/dev、/usr等,这些目录和子目录包含了操作系统的关键组件以及用户选择安装的应用程序。

2.2  基于XDMA数据交互程序设计

本文基于XDMA core 来实现PCIe的高速数据交互,软件架构如图3所示,整个架构包括了3个层次,来实现对FPGA内部缓存的高速访问。

用户空间程序通过系统调用的方式来完成与驱动的交互,应用程序通过poll函数监听驱动,根据底层驱动提供的传输接口发起DMA的读写请求。

XDMA驱动程序是整个软件的核心,是应用与底层硬件交互的桥梁。XDMA驱动程序响应由上层应用发起的系统调用,进一步访问内核空间的驱动设备。驱动设备具体控制完成对SGDMA的读写控制,完成对用户数据使用的物理页映射,实现DMA数据传输。

在FPGA内部实现了XDMA硬核,XDMA硬核实现了PCIe协议与AXI协议的相互转化,在FPGA中生成了兼容AXI总线的Block memory并挂载至XDMA硬核上,在XDMA驱动发起DMA读写数据操作时,经过XDMA通过AXI接口实现了对FPGA内部缓存的读写访问。

由于在XDMA IP核中支持了多个DMA channel,为了能够方便调用,为每一个通道的调用都创建一个字符设备驱动,这样在应用中只需要打开对应的字符设备即可完成对相应部分的操作。另外,为中断事件的处理、PCIe不同func设备空间的操作都提供一个字符设备驱动来进行操作,实现了较好隔离操作。

PCIe驱动的实现主要是针对pci_driver数据结构进行填充[7]。在驱动加载后会调用probe函数完成初始化,在这个函数流程中完成PCIe设备的检测、字符设备的创建、DMA通道的初始化等功能,具体的主要流程如图4所示。

整个传输软件的关键在于XDMA驱动中高速数据传输、中断函数的处理,通过对数据拷贝的优化处理、中断方案的优选,实现了高速数据传输。

2.2.1  基于零拷贝的高速数据交互

对零拷贝进行优化设计,内核态和用户态共享一片物理内存,用户态和内核态完成对同一片物理页的映射,数据在内核空间和用户空间的大量拷贝工作就可以避免了,进而提升高速数据处理性能。

2.2.2  基于workqueue的中断处理

为平衡中断响应时间及大量数据的处理,将中断处理分为了中断顶半部和中断底半部。在中断顶半部中,完成尽可能少的比较紧急的功能,其往往只是简单地读取寄存器中的中断状态快速返回,而将大的数据量处理放到低半部中。底半部主要处理的是实时性要求相对较低但是耗时比较长的工作,主要工作对底半部的处理进行优化。中断下半部的处理方案主要有4种:内核线程、tasklet、softirq和workqueue[7]。

3种方案的对比见表1,由表1可以看出,工作队列workqueue的方案,延后工作睡眠可以减少空闲时系统资源的占用,多CPU运行可以最大化利用资源,这些特点在资源紧张的龙芯嵌入式系统中比较关键,因此本文选择工作队列的方案来实现中断下半部的处理。

通过对数据拷贝方式、中断处理方式的优化处理,实现了高性能嵌入式平台软件构建,具备了通过PCIe 接口进行高速数据交换的能力。

3性能测试结果与分析

基于高性能嵌入式平台软、硬件构建,按照图5对吞吐量、中断性能等核心指标进行了测试。针对数据吞吐量的测试主要是下半部分,读写程序指定DMA通道和数据长度发起DMA读写;中断性能测试则是分为两部分,中断触发程序配合FPGA用户中断产生模块完成固定中断的触发,中断处理程序则接收中断并完成数据基于DMA的读写。

测试结果表明,随着一次DMA传输数据长度的增加,信道资源带宽的利用率不断上升。因而,选择合适的长度对于高速数据传输尤其重要。具体的,在DMA传输长度为200KB的的情况下,读、写速率分别为420  MB/s、410 MB/s。本PCIe2.0接口的理论速率为500 MB/s,分析其中的原因是为保证传输稳定龙芯2K1000上的MPS僅能配置为128 B,但是MPS在512 B才能充分发挥带宽效率,造成了实际测试结果与理论值的差异。

进一步对龙芯2K1000的中断性能进行测试,通过FPGA模拟发送周期中断信号,中断周期为5 ms,中断期间完成200 KB数据的读出,一共测试20万个中断。测试结果表明,CPU资源占用3%~5%,内存占用在1%以内,由于对内存及中断处理进行了优化,因此CPU和内存的占用会比较低,符合预期。中断漏检概率在1.0E-5左右,需要在增加确认及超时机制,防止因为中断漏检而造成的FPGA缓存溢出。

4结论

本文以龙芯2K1000为核心,通过PCIe高速接口实现了与FPGA数据交互,完成了国产化高性能嵌入式硬件平台构建,完成了嵌入式软件环境构建与基于XDMA的高速驱动程序的设计。通过对驱动程序中的内存拷贝方式、中断处理方式进行优化设计,测试结果表明,该平台达到了400 MB/s高性能数据传输,摸清了龙芯2K1000的处理性能边界,为国产化嵌入式处理平台的深入应用奠定了基础。

参考文献:

[1] 马威,姚静波,常永胜,等.国产CPU发展的现状与展望[J].集成电路应用,2019,36(4):5-8.

[2] 李晓飞,曲巨宝.“龙芯”实验平台在《计算机组成与结构》课程教学实践中的应用[J].中文科技期刊数据库(全文版) 教育科学,2021(9):361-363.

[3] 龙芯生态白皮书(2022年)[Z].北京:龙芯中科技术股份有限公司,2023.

[4] 7 Series FPGAs SelectIO Resources User Guide,UG471[Z].San Jose,USA:xilinx,2012.

[5] DMA/Bridge Subsystem for PCI Express v4.1 Product Guide[Z]. San Jose,USA:xilinx,2021.

[6] 杨延军,王志军,赵建业,等.嵌入式系统开发原理与实验[M].北京:北京大学出版社,2011.

[7] JONATHAN C, ALESSANDRO R, GREG K. Linux device drivers[M].OReilly Media,2005.

猜你喜欢

龙芯嵌入式系统国产化
特大型桥梁供电系统国产化改造探讨
基于国产化龙芯的动环数据采集系统
元器件国产化推进工作实践探索
ASM-600油站换热器的国产化改进
基于国产化ITCS的卫星导航仿真研究
基于物联网项目驱动的嵌入式系统教学改革的研究与实践
嵌入式系统课程“中断、异常与事件”教学实践及启示
面向实践创新人才培养的嵌入式系统教学研究
“龙芯之父”胡伟武
龙芯发布新一代处理器产品