0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证

SwM2_ChinaAET 2018-01-11 10:57 次阅读

随着通信技术的不断发展,对数据传输系统的速度与数据传送质量的要求也在不断提高。由Intel在2001年提出的第三代I/O总线技术——PCI Express总线技术,采用高速差分串行的方式进行数据传输,具有高带宽、高可靠性、高拓展性等优点,很好地弥补了PCI、PCI-X总线的不足。

本文基于PCIe 2.0协议,利用Altera Transceiver PHY IP、Synopsys PCIe Core IP和AXI总线,提出了一种DMA控制器,并搭建了一个在FPGA端和PC之间的高速数据传输系统。实现了寄存器读写操作(单字读写)和DMA读写操作,并利用Synopsys VIP环境下进行的系统仿真上位机软件进行观察并验证了数据读写的正确性。

1 设计方案

1.1 基础模块

1.1.1 Altera Stratix V GX系列FPGA与PCIe PHY IP

本设计使用Stratix V GX系列下的5SGXEA7K2F40C2N FPGA芯片,该芯片内部集成了PCIe PHY IP硬核模块。PCIe PHY IP硬核包括三个部分,如图1,PHY IP Core for PCI Express(PIPE)集成了PCIe总线的物理层。Transceiver Reconfiguration Controller IP Core可以动态重新配置模拟参数。Transceiver PHY Reset Controller IP Core作为收发器的复位模块,确保了PCIe链路的初始化。

1.1.2 Synopsys IP与VIP

VIP顾名思义就是验证IP(Verification IP),它为一些标准的接口提供标准的总线行为模型。Synopsys公司提供了PCIe总线的Controller IP,实现了PCIe总线数据链路层和事务层的功能,并内置了DMA,同时也提供了针对PCIe总线的VIP,为PCIe总线提供了标准的总线行为模型,模拟了上位机的功能[8]

1.1.3 AXI总线

AXI(Advanced eXtensible Interface)总线是一种高性能、高带宽、低延迟的总线协议,有一个显著的特点,地址/控制和数据通道是分开的,共有5个单向通道,分别为read address channel,write address channel,read data channel,write data channel,write response channel[9],减少了延时,提高了DMA的效率。

1.2 总体方案设计

本设计采用的整体架构如图2所示,为Altera PHY IP+Synopsys PCIe Core IP+AXI总线+Application。

为了利用Synopsys 的PCIe VIP环境,采用了Synopsys PCIe Core IP。在PCIe事务层和应用侧之间采用了AXI总线接口,可以在以后的设计中进行方便的拓展和替换。应用侧设计实现了PCIe DMA控制器的功能,并集成了两块RAM,一块大小为128 DW,用来存储寄存器读写的数据;另一块大小为512 DW,用来存储DMA读写的数据。

2 DMA控制器的设计与实现

2.1 应用端DMA操作流程

应用端发起的DMA操作流程如图3所示,最终DMA读操作实现的结果为将主机侧的数据以DMA的方式写入到应用端的内存中。DMA写操作实现的结果为将应用端的数据以DMA的方式写入到主机侧的内存中。图3为应用端发起的DMA操作具体的流程。

(1)主机侧通过寄存器写的方式,将DMA读写标志、DMA长度、DMA源和目的内存地址写入到应用端的寄存器中;

(2)应用端中的Slave模块将这些命令发送给Master模块;

(3)Master模块按照Synopsys PCIe Core IP自定义的Dbi总线的方式,再将这些命令传送给PCIe Core IP内部的寄存器;

(4)PCIe Core IP接收DMA读写指令,并持续操作Master接口以实现后续操作;

(5)当为DMA读时,PCIe Core IP的内置DMA从主机侧的“源内存地址”中读取到目标数据;当为DMA写时,PCIe Core IP的Master接口通过AXI总线以读的方式从“源内存地址”读取到目标数据;

(6)当为DMA读时,PCIe Core IP的Master获得DMA读取到的目标数据,并通过AXI总线,以写的方式写入到应用端的“目的内存地址”中;当为DMA写时,Master获得目标数据后,内置DMA将数据发送到主机侧的“目的内存地址”中;

(7)当DMA操作完成,PCIe Core IP会通知应用端的中断模块;

(8)应用端的中断模块会向主机侧提交中断。

2.2 应用端DMA控制状态机

应用端只需将主机侧写入的DMA读写标志、DMA长度、DMA源和目的内存地址以及DMA启动信号写入到PCIe Core IP中的内部寄存器,并等待DMA操作的完成,给出中断信号。

下面为应用端详细的DMA控制状态机,如图4所示,状态机把DMA读操作和DMA写操作整合到了一起,减少了代码量。

(1)IDLEPHASE:空闲状态。当启动信号start_flag有效时,跳转ENGINE_ENABLE状态;

(2)ENGINE_ENABLE:判断DMA读写类型信号wr_rdn_flg,当wr_rdn_flg为0,即为DMA读(PC到FPGA)时,使能DMA读引擎;当wr_rdn_flg为1,即为DMA写(FPGA到PC)时,使能DMA写引擎;

(3)DMA_TRANS_SIZE:设置DMA数据传输长度,最多一次传输512 DW,最少一次传输1 DW;

(4)DMA_SAR:设置DMA操作源地址(当为DMA读时,源地址为主机端地址;当为DMA写时,源地址为应用端地址);

(5)DMA_DAR:设置DMA操作目的地址(当为DMA读时,目的地址为应用端地址;当为DMA写时,目的地址为主机端地址);

(6)DMA_DOORBELL:使能DMA操作门铃信号dma_strt,启动DMA操作;

(7)DMA_WAIT_INT:等待DMA操作完成;

(8)DMA_INT_STATUS:读取DMA操作中断寄存器状态,当DMA操作完成信号dma_done有效时,产生完成中断,并跳转DMA_CLEAR_INT状态;

(9)DMA_CLEAR_INT:清除中断,回到IDLEPHASE状态,准备下一次DMA传输。

3 DMA控制器功能验证

3.1 仿真验证

在完成代码编写之后,在VIP环境下搭建仿真平台,使用Synopsys公司的仿真验证工具VCS进行功能测试,主要测试验证模块能否正确对寄存器读写和DMA读写产生正确的反应。

从图5、图6中可以看到,写地址偏移为0x40,写数据为32’h87654321;读地址偏移为0x40,读数据为32’h87654321,由此可判断寄存器读写正确。

基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证
基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证

如图7所示,由dma_strt和dma_done信号可以看出为2次DMA传输,由dma_wr_rdn可看出第一次为DMA读操作(RC端到APP侧),第二次为DMA写操作(APP侧到RC端)由dma_bc_len可看出当前DMA操作长度为2 000 Byte,即500 DW,slv_rdata和slv_wdata信号较为密集的部分分别为2次DMA操作的数据,对比这两次数据,得知DMA操作正确。

基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证

为了更加方便地比较结果,采取自动对比文件的方法,即把寄存器或DMA写的数据存放到一个文件中,再把寄存器或DMA读回的数据存放到另一个文件中,通过对比两个文件,判断寄存器和DMA传输是正确的。

3.2 FPGA测试验证

在仿真验证完成之后,进行FPGA测试验证,将硬件部分烧录到板卡的FPGA芯片后,通过板卡的PCIe金手指插入到PC机的主板上,PC机重启后检测到PCIe硬件的插入,即可安装对应的PCIe驱动软件,利用上位机进行测试。

上位机软件界面如图8所示,包括寄存器读写(Target操作)和DMA读写(Master操作)测试模块。

基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证

选择“Target”操作的“dual”模式,寄存器长度设置为118,因为前10个寄存器与DMA操作相关,可能会触发DMA操作,所以在软件中选择跳过。点击“启动测试”,数据将会被先从主机侧写到FPGA,再从FPGA读回到主机侧,比较两次寄存器操作的数据,即可判断寄存器操作的正确性。

如图9所示,选择“Master”操作的“dual”模式,点击“memory”,即在PC侧开辟一块内存存放数据,然后点击“启动测试”,数据先从PC写到FPGA的RAM中,接着再从FPGA回到PC,比较存放到PC内存的数据和从FPGA写回到PC的数据,即可判断DMA读写操作的正确性。

基于FPGA的PCIe总线接口的DMA控制器的实现并进行仿真验证

根据DMA传输固定大小的数据的时间,可以计算出DMA读写速率,经过多次测试,DMA读写速率分别为1 547 MB/s和1 607 MB/s。本设计采用的是PCIe Gen2、×4通道,理论最大传输速率为2 000 MB/s。分析代码得出可能由于应用端向PCIe Core IP写入和读取数据过程占用了一定的时间,另外驱动程序向DMA寄存器写入或读取参数也占用了一些时间,都会影响速率。

4 结语

本文实现的基于FPGA的PCIe总线接口的DMA控制器是在Altera PHY IP和Synopsys Core IP的基础上实现的,利用Synopsys VIP验证环境进行了功能仿真验证,并通过FPGA进行了系统实测,达到了较高的传输速率,在Gen2、×4模式下,DMA读写操作的带宽分别为 1 547 MB/s和1 607 MB/s,达到了预期的设计目标。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1627

    文章

    21685

    浏览量

    602324
  • 控制器
    +关注

    关注

    112

    文章

    16240

    浏览量

    177601
  • PCIe
    +关注

    关注

    15

    文章

    1229

    浏览量

    82486
  • dma
    dma
    +关注

    关注

    3

    文章

    559

    浏览量

    100472

原文标题:【学术论文】基于FPGA的PCIe总线接口的DMA控制器的设计

文章出处:【微信号:ChinaAET,微信公众号:电子技术应用ChinaAET】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGAPCIE接口应用需要注意哪些问题

    ,选择高性能的PCIe IP核并进行精细的设计优化是至关重要的。 软件和驱动程序 : 即便硬件设计得当,软件和驱动程序的效率也会影响到系统的最终性能。需要确保软件和驱动程序与FPGAPCI
    发表于 05-27 16:17

    FPGA干货分享三】基于FPGA的LBS控制器设计

    设计按照上述4个状态进行Verilog设计,经过仿真和上板调试,效果很好,下面是状态机设计程序,仿真时序图如图3,图4所示。3、结语本文设计的LBS控制器应用在PEX8311和
    发表于 01-29 14:09

    基于FPGA的PCI Express总线接口应用

    描述符表。根据实际使用的PCIE总线通道数和DMA长度的不同,实际测试得到的总线速度也不同,表3给出了参考数据。5 结语使用FPGA来设计
    发表于 05-21 05:00

    采用FPGA实现PCIe接口设计

    系列FPGA实现PCIe接口所涉及的硬件板卡参数、应用层系统方案、DMA仲裁、PCIe硬核配置与
    发表于 05-21 09:12

    如何通过PCIe进行FPGA到PC的通信?

    嗨,我正在使用超大规模的FPGA板。我可以通过DMA子系统IP和DDR控制器IP将数据从PC传输到DDR。我打算在FPGA进行一些处理,然
    发表于 05-08 09:40

    如何利用PCIe DMA总线实现一个基于FPGAPCIe 8位数据采集卡?

    PCIe总线通信过程是怎样的?是什么原理?如何利用PCIe DMA总线实现一个基于
    发表于 09-17 07:16

    CPU数字通信接口FPGA进行数据通信设计实现

    进行FPGA设计时候,除了一些算法\\验证等应用,其他情况下都需要FPGA控制器进行数据交互
    发表于 08-19 16:32

    全爱科技Atlas200I A2 AI加速模块-FPGA PCIE接口验证平台

    Xilinx的官方PCIE 2.0 IP核或0 IP核,用来实现PCIE 硬核IP的例化; 使用DMA控制器
    发表于 09-05 14:39

    基于FPGA的PCI接口控制器的设计与实现

    基于FPGA的PCI接口控制器的设计与实现 pci总线是高速同步总线,采用高度综合优化的
    发表于 12-14 14:29 1835次阅读
    基于<b class='flag-5'>FPGA</b>的PCI<b class='flag-5'>接口</b><b class='flag-5'>控制器</b>的设计与<b class='flag-5'>实现</b>

    FPGA实现CAN总线控制器源码

    Xilinx FPGA工程例子源码:FPGA实现CAN总线控制器源码
    发表于 06-07 14:13 92次下载

    基于FPGA 的SPI Flash 控制器设计及验证

    [1] 。它比起传统的并行总线接口Flash 来说节省了很多的I/ O 口资源,从而为系统功能的扩展提供了更多的可能。为此提出了一种基于FPGA 的SPI Flash 控制器的设计方法
    发表于 11-22 08:47 1.3w次阅读
    基于<b class='flag-5'>FPGA</b> 的SPI Flash <b class='flag-5'>控制器</b>设计及<b class='flag-5'>验证</b>

    Crossbar的多通道DMA控制器设计

    为了具体介绍本多通道 DMA 控制器的设计方案,下面首先对基于 Crossbar 的多通道 DMA 控制器的工作原理进行详细分析,接着具体说
    发表于 12-07 09:37 5028次阅读
    Crossbar的多通道<b class='flag-5'>DMA</b><b class='flag-5'>控制器</b>设计

    如何使用FPGAPCIe总线进行DMA平台设计

    , PCI_ X等总线,因其性能无法达到系统的传输要求,正逐步淘汰,PCIe总 线作为新一代的总线标准,它具有数据传输速率高,可更好地支持未来高端显卡等优点,在LTE系统的物理层中,设计基于P
    发表于 11-13 16:40 29次下载
    如何使用<b class='flag-5'>FPGA</b>的<b class='flag-5'>PCIe</b><b class='flag-5'>总线</b><b class='flag-5'>进行</b><b class='flag-5'>DMA</b>平台设计

    dma控制器的组成

    一个DMA控制器,实际上是采用DMA方式的外围设备与系统总线之间的接口电路,这个接口电路是在中断
    的头像 发表于 04-01 16:08 1.1w次阅读

    PCIe控制器FPGA或ASIC),PCIe-AXI-Controller

    Transaction Layer的所有功能特性,不仅内置DMA控制器,而且具备AXI4用户接口,提供一个高性能,易于使用,可定制化的PCIe-AXI互连解决方案,同时适用于ASIC和
    的头像 发表于 02-21 15:15 859次阅读
    <b class='flag-5'>PCIe</b><b class='flag-5'>控制器</b>(<b class='flag-5'>FPGA</b>或ASIC),<b class='flag-5'>PCIe</b>-AXI-Controller