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

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

3天内不再提示

如何使用Xilinx的PCIE IP来产生读写请求

jf_pJlTbmA9 来源:jf_pJlTbmA9 作者:jf_pJlTbmA9 2023-07-10 16:23 次阅读

仿真与实际应用场景的差别
通常我们都会用Modelsim、Questa等工具对工程进行仿真验证,在仿真的时候可能关注的点没有那么的多,检查到对端收到包没有问题,一般情况下就认为已经完成调试,可以上板给host、birdge或者switch下的其他PCIE设备进行发包,不过在实际应用的过程中,如果想用FPGA作为Endpoint主动发包去读写其他设备,还有一个功能需要打开:Bus Master Enable,下图1是PCIE协议对此功能的定义。

1676510712707226.png

图1

这个功能决定了Endpoint能否向远端设备发起读写请求,只有使能了此功能,FPGA作为Endpoint时,才能够向远端设备成功发起读写访问。Bus Master Enable在PCIE的配置空间命令寄存器04h中,此功能可以通过setpci指令打开。

如何使用PCIE的RQ接口来产生读写请求
在介绍如何控制端口信号产生读写请求之前,需要先介绍下描述符(如下图2所示),描述符类似与包头的功能,描述符的大小是128bit,这个是固定的,其内包含了地址类型、地址、请求类型、数字数等字段,在传输时第一拍先传输的是描述符,传完描述符之后才会传后面的数据,使用128bit或者大于128Bit数据端口的用户对这一点可能没有疑问,但是使用64bit数据端口的用户会可能会有疑问,128bit的描述符,64bit的数据端口一拍传不完,如果使用的是64bit的端口,描述符会传两拍,在传输的前两拍都是描述符。

1676510727197221.png

图2

描述符的前两个字段是address type,这个字段比较简单,其标志了地址是否经过了转换,如果用户要自己产生读写请求可以把此字段设置为0,address就是用户要访问的地址,在填写地址之前要确认好此地址是否可读写,避免读到读清寄存器。Dword Count表示的是描述符后跟的数据的Dword数,一般来讲数据的长度都是双字的整数倍,如果长度不是双字的整数倍,就需要使用firstbe,或者lastbe,这两个被放在了tuser字段,下面的篇幅会对其进行介绍。接下来是Request Type,Request Type字段的定义如下图3所示:

1676510736105555.png

图3

根据所发送包的类型选择相应数字填充data字段即可,接下来说一下Requester ID和Completer ID这两个字段,如果用户使用的是基于地址的方式对包进行路由,这两个字段的数值不需要特别关注,重点字段已介绍完,描述符其他字段的含义可参考Xilinx的PG343(Versal ACAP Integrated Block for PCI Express v1.0 LogiCORE IP Product Guide)。

本篇参考的是Xilinx的PG343,接下来会对Versal的 PCIE IP进行介绍,以下提及的端口的data的bit数都是512bit,如果想了解其他bit位数据的接口如何使用,可以参考PG343,与512bit的数据端口区别不大。

产生读写请求所使用的接口是PCIE IP的Requester Request Interface,接口的定义如下图4所示:

1676510749371045.png

图4

之前的篇幅中提到的描述符就在s_axis_rq_tdata中传输,前128bit是描述符,后面跟的是数据,类似与tlast、tkeep和tready等字段,本篇blog不再进行赘述,可以参照AMBA总线,或者上图的描述,下面重点介绍s_axis_rq_tuser字段,手册上称其为边带信号,部分字段的定义如下图5所示:

1676510759619178.png

图5

首先介绍下first_be和last_be,first_be指的是数据的第一个双字中有几个byte是有效的,一个双字是4byte,所示只用4bit就可以识别出一个双字中有效的byte数,在IP界面,把straddle模式打开时,可以一拍传输两个TLP,在512bit数据接口,其first_be字段的长度为8bit,前4bit表示的是第一个TLP包中的第一个双字中有效的byte,后4个bit表示的是第二个TLP包中的第一个双字中有效的byte。is_sop的值表明了此拍的有或者没有以及有几个新的TLP,is_sop表明这一拍有没有TLP结束或者有几个TLP结束。
No straddle模式使用注意事项
在使用no straddle模式时,在发送1DW的memory write时,虽然上图中说的是在使用no straddle模式时,is_eop是可选的,但是在实际使用的时候,特别是有1DW的memory write或者有1DW为结尾的memory write,需要把is_eop的数值设置为1。下图6是memory write的发包格式,在生成包时可以参考如下图6格式:

1676510772591071.png

图6

下下面的两张图是发包的仿真图,图7为End point的Requester request接口的仿真图,图8为root port的Completer Request接口的仿真图,整体的流程就是End point通过自己的Requester request接口把memory write TLP发送到root port的Completer Request接口。

先看Requester request接口所发送的包的rq_tuser字段,410000f中的f表示第一个TLP的firstbe全有效,10000表示此拍数据没有第二个TLP且这一拍数据只有1DW,last_be全为0,10000中的1即为图中的第四行2‘b01, //is SOP,表示这个一拍是一个TLP的开始,4为图中的2‘01 //is eop? 2’b00sop1 ptr两行,表示此拍数据只有一个TLP,且此TLP在此拍结束。

接下来对Requester request接口所发送的包的rq_tdata进行说明,rq_tdata的前两个bit表明了地址有没有经过转换,数据的地址为BE7 1CBD 975D 4000,rq_tdata中的801表示此数据位memory写,且Dword count 为1.

1676510819668199.png

图7

接下来对RP的Completer Request接口接收到的数据进行简要分析,可以看到m_axis_cq_tdata与s_axis_rq_tdata的字段完全相同,m_axis_tuser中的firstbe为0F,lastbe为00,这一点与发送端的情况一致,End point此次发送的数据包被Root port成功接收。

1676510830893428.png

图8


审核编辑:汤梓红

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

    关注

    1603

    文章

    21331

    浏览量

    593308
  • 接口
    +关注

    关注

    33

    文章

    7653

    浏览量

    148559
  • Xilinx
    +关注

    关注

    70

    文章

    2121

    浏览量

    119395
  • 仿真
    +关注

    关注

    50

    文章

    3873

    浏览量

    132171
  • PCIe
    +关注

    关注

    13

    文章

    1086

    浏览量

    80898
收藏 人收藏

    评论

    相关推荐

    请教大家谁用过 Xilinx PCIe IP 核啊?

    请教大家谁用过 Xilinx PCIe IP 核啊?
    发表于 01-15 14:38

    使用xilinx的axi pcie如何清除中断标志位?

    目前使用的axi pcie 采用legacy中断。中断产生后如何清楚标志位。。?文档说相偏移0x138写1就可以。可是为什么还是有中断请求。???
    发表于 12-06 18:56

    Xilinx FPGA入门连载38:SRAM读写测试之设计概述

    。●Test_timing.v模块产生SRAM的遍历读写请求,比对写入和读出的SRAM值是否一致,结果赋值给LED指示灯。●Chipscope_debug.cdc模块引出设计模块内部信号,在chipscope下可以在线观察SRA
    发表于 12-18 12:57

    ZYNQ调用XDMA PCIE IP同时读写PS DDR,导致蓝屏问题。

    XDMA读和XDMA写的时候,上位机HOST PC就蓝屏了。。 我想知道,XDMA PCIE IP 和 PS DDR 是否支持同时进行XDMA读写如果支持的话,我需要修改驱动,还是其他地方需要设置一下。谢谢!
    发表于 11-21 10:35

    PCIE XDMA IP核介绍

    TLP格式,并传送给发送引擎;接收引擎用于从PCIE IP核接收不同类型的TLP数据,接收DMA控制模块用于实现存储器读请求包的发送流量控制及接收数据位宽的转换;DMA状态控制寄存器模块主要用来解析来自
    发表于 12-26 10:46

    如何使用AXI-PCIe桥接IP与我的逻辑进行通信

    嗨,我正在使用AXI-PCIe桥接IP与我的逻辑进行通信。我的poroject要求有128K内存。我不知道如何配置AXI BAR地址扩展内存。我阅读了IP文档,但没有任何意义。目前我
    发表于 06-19 10:14

    基于PCIe DMA的多通道数据采集和回放IP

    基于PCIe DMA的多通道数据采集和回放IP在主机端PCIe驱动的控制和调度下,数据采集与回放IP Core可以同时完成对多个通道数据的采集以及回放驱动工作,既可采用行缓存机制(无需
    发表于 11-25 22:27

    PCIE高速传输解决方案FPGA技术XILINX官方XDMA驱动

    ,使用 XILINX 官方 XDMA IP 核配合板载高速 DDR3,可对前端 ADC 产生的不大于 4.5GB/s 的连续或非连续数据进行实时采集,同时该采集卡具备数据发送功能,可以将用户文件或者内存中
    发表于 05-19 08:58

    今天分享 PCIE高速接口XILINX.ISE教程

    :能使用xiinx 的PCIE ip核完成读写功能对以上课程有兴趣的同学点下面链接学习 : 明德扬FPGA课程_PCIE高速接口XILINX
    发表于 02-14 09:50

    如何读写PCIe

    我是一名PCIe新手,想了解以下问题: 1、如何测试PCIe? 2、如何读写PCIe(两块开发板通过PCIe线互连,分别配置为RC和EP)?
    发表于 06-12 06:05

    体验紫光PCIE之使用WinDriver驱动紫光PCIE

    example例程。紫光的PCIE IP虽然没有像xilinx那样可以直接使用Block Design设计,但是仔细读一遍官方例程的DMA模块,进而开发自己的东西,还是能够很好用起来紫光的P
    发表于 11-17 14:35

    PCIe的Spec中明确规定只有Root有权限发起配置请求

    处理器一般不能够直接发起配置读写请求,因为其只能产生Memory Request和IO Request。这就意味着Root必须要将处理器的相关请求转换为配置
    的头像 发表于 05-04 09:12 6658次阅读
    <b class='flag-5'>PCIe</b>的Spec中明确规定只有Root有权限发起配置<b class='flag-5'>请求</b>

    PCIE通信技术:通过AXI-Lite ip配置的VDMA使用

    XDMA是Xilinx封装好的PCIE DMA传输IP,可以很方便的把PCIE总线上的数据传输事务映射到AXI总线上面,实现上位机直接对AXI总线进行
    的头像 发表于 12-28 10:17 2772次阅读

    基于VIVADO的PCIE IP的使用

    定的。因为Xilinx官方给我们提供了完善的PCIE IP,基于这些IP我们设置不需要知道TLP包的组包原理我们便可以把PCIE使用起来。
    的头像 发表于 08-09 16:22 1.1w次阅读
    基于VIVADO的<b class='flag-5'>PCIE</b> <b class='flag-5'>IP</b>的使用

    基于XILINX FPGA的硬件设计总结之PCIE硬件设计避坑

    一个GT Quad由四个GT车道组成。为PCIe IP选择GT Quads时,Xilinx建议您在最靠近PCIe硬块的地方使用GT Quad。虽然这不是必要时,它将改善设计的位置,路线
    的头像 发表于 03-30 09:41 3566次阅读