基于国产FPGA紫光同创Titan2 PG2T390H的PCIe链式DMA控制器设计

背景介绍

    近年来,国产FPGA厂商发展迅速,紫光同创、安路等公司已经量产28nm、几k~几百k的FPGA逻辑芯片,在自主可控的大环境下,国产FPGA厂商给了我们一个更优的选择。虽然,国产FPGA厂商在芯片逻辑资源、工艺、eda工具等方面取得长足进步,但是在IP生态上仍然有很长的路要走。在此之前,FPGA开发者需要自己独立开发一些官方不能提供的IP,虽然道阻且长,但是在此过程中我们可以学到更多知识,掌握更多设计技巧。
    本文简要介绍基于紫光同创Titan2系列PG2T390H芯片的链式DMA控制器实现框架,该架构支持多通道,每个通道支持128个描述符,亦可支持SR-IOV虚拟化,支持两路PF,6个VF。数据通道支持标准AXI-MM接口,修改简化亦可支持AXI-Stream接口。BAR读写可支持APB接口或者AXI-lite接口。本方案亦可移植到xilinx/intel平台,真正做到自主可控,带宽利用率极高,数据量在64m以上接近理论极限水平。本IP基于全流水设计,相较于intel、xilinx官方IP,本IP的带宽利用率更高!!!
本IP同时支持xilinx V7系列(如V7-690T)、紫光同创 logos2系列(如PG2L100H、PG2L50H)、titan2系列、titan3系列(PG3T500、PG3T600)等,理论上其他国产FPGA器件亦可适配支持。

逻辑方案

    逻辑实现方案如下图所示:
在这里插入图片描述
    图中PCIe Hard IP是PCIe硬核模块,负责PCIe物理层与协议层,DMA通过CQ(Completer reQuest),CC(Completer Completion),RC(Requester Completion),RQ(Requester reQuest),IRQ(Interrupt reQuest)等接口与该硬核模块进行交互,接口规范为AXIS(Advanced eXtensible Interface)协议。DMA架构主要由TLP2BAR、APB2AXI-Lite、Read Descriptor Manage、Write Descriptor Manage、Merge、Desc Status Upload、Read DMA Dtata Mover、Write DMA Dtata Mover、Std_Intf等主要模块组成,各模块之间数据使用用AXI-stream、AXIM-MM标准总线传输,保证传输效率。BAR读写操作使用apb、axi-lite标准总线传输,命令信息或者控制信息用ready/valid握手信号协议传递,保证控制信息的传输效率,整个架构异步流水,防止任何模块因等待导致DMA控制器效率变低。
    本文设计的DMA各模块的主要功能如下:
TLP2BAR:主机端进行BAR的读写操作,会通过PCIE协议转化为读写TLP包,该模块负责解析来自接口CQ的TLP包,转化为APB总线的读写操作。主机端写操作转为APB总线写操作,主机端读操作转化为APB总线读操作,Cpld包通过接口CC返回给主机。CQ接口带有pf/vf标识以及BAR0-BAR5的标识,理论上,假如PF/VF总数为n,需要6n套APB总线对应,本文共设计62套APB总线,bar0负责配置DMA相关寄存器,bar1负责配置其他业务相关寄存器,可根据需要修改设计。
APB2AXI-Lite:该模块将标准APB总线转化为AXI-Lite总线,方便业务模块总线互联。
APB2AXI-MM:该模块将标准APB总线转化为AXI-MM总线,增加DMA bypass特性。
Read Descriptor Manage:该模块具备4个功能。一、将描述符控制寄存器以及操作转化为读描述符,该描述符专门用于读取上位机准备好的读描述符与写描述符。对于后面的读数据搬移器来说,这两种读描述符均是读取上位机内的数据,故可以合并处理。二、将上位机读取回来的读描述符数据解析为读描述符格式。三、存储描述符,本文设计的描述符存储深度为128。四、根据完成信息判断是否产生中断以及每个描述符完成的状态信息。
Write Descriptor Manage:该模块具备2个功能。一、将上位机读取回来的写描述符数据解析为写描述符格式。二、存储描述符,本文设计的描述符存储深度为128。
Desc Status Upload:该模块的作用是将每个描述符完成后的状态信息转化为Mwr类型TLP,发送到上位机,上位机为每个描述符预留了状态标志存储空间,每当一个描述符完成后,就向对应的上位机地址写1。
Read DMA Dtata Mover:该模块主要功能是根据读描述符发送读请求Mrd,然后将上位机返回的数据进行处理,返回的数据包括读写描述符数据以及正常数据。
Write DMA Data Mover:该模块主要功能是根据写描述符,从读数据接口读取数据,然后将数据转为Mwr类型TLP包,发送给上位机。
Std_Intf:该模块主要功能是将 Read DMA Dtata Mover与 Write DMA Data Mover读写数据传输的不标准协议转为AXI-MM标准协议。
Merge:该模块主要功能是将多路流模式数据按包轮询合并。

性能测试

    单设备单通道测试结果如下所示。
在这里插入图片描述
    该芯片支持PCIe Gen3x8,理论最大传输速率为8GB/s。图中为单个设备DMA读写带宽测试结果。据曲线可以看出,本文设计的DMA读带宽最大为6.91GB/s,理论带宽的86%左右,DMA写带宽最大为6.31GB/s,理论带宽的79%左右。VC709 PCIe板卡与主机协商出的Max_Payload_Size为256byte,Max_Read_Request_Size为512byte,所以读DMA最大带宽比写DMA最大带宽高符合预期。从图中曲线可以看出一开始读DMA带宽比写DMA带宽低,原因写DMA仅有card取数据发包到host过程,而读DMA需要card发送读请求并且处理host返回Cpld包,读DMA较写DMA过程更加复杂,故DMA初始阶段写DMA效率更高。
    SR-IOV虚拟化测试结果如下:在这里插入图片描述
    如图所示,图中有四部分,分别为VF0-VF3的DMA读写带宽实验结果,该结果是4个VF同时工作时测试的数据。图中h2c表示host to card,c2h表示card to host。根据曲线结果可以看出,当4路VF同时工作时,每路VF的带宽性能几乎相同,可以共享PCIe总带宽,这与设计中各路VF轮询使用DMA data Mover机制相符合。当数据长度越长时,交互效率越高,接口性能越好。

软件驱动

    本文对应的驱动不再详述,相关驱动参考基于同创logos2 FPGA PCIe软件栈设计

> https://blog.csdn.net/whlzywy/article/details/125885928

相关帖子

    基于同创logos2的国产FPGA加速器与DMA设计与实现

> https://blog.csdn.net/whlzywy/article/details/125844174

    国产高性能FPGA加速卡-双芯1200k

https://blog.csdn.net/whlzywy/article/details/131520245

技术交流

    近两年国产FPGA发展迅速,在部分领域已有不错市场份额,相信未来会有一席之地,欢迎技术交流!

在这里插入图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值