【PCIE】基于Riffa架构的PCIE项目

本文详细介绍了基于Riffa架构的PCIe项目,解释了PCIe的四层结构,强调了8b/10b编码的重要性。Riffa提供了一种高效的接口,支持多通道通信,与Xilinx的XDMA框架相比,虽然带宽支持有限,但效率更高。在实际操作中,需要注意数据接收与传输的细节,如帧标志、FIFO管理和数据对齐。项目使用Xilinx芯片的GTP接口,并对比了Riffa与XDMA的优缺点。
摘要由CSDN通过智能技术生成

基于Riffa架构的PCIE项目

  1. Pcie分为四层:
    物理层:完成信号的转换以及编码
    包含 PMA 和 PCS
    PMA: Physical Media Attachment 物理媒介层,完成并转串或者串转并的操作
    PCS: Physical Coding Sublayer物理的code,其实就是8b转10b的编码,使用 8b/10b 编码这个编码技术是用于高速接口中使得数据链路中的数据 1 和数据 0 更均衡
    链路层:完成一些编码的操作
    事务层:ipcore 是控制事务处来实现应用层
    应用层

    为什么要经过8b转10b呢?
    因为8b/10b提供了一些沿的信息,它会锁定沿的信息,它知道里边通信的速率是多少,它就能通过通信速率计算出一个基本的周期。再根据沿的偏移量,这样就能算出采集的数据最稳定的地方。它是动态锁定的,并不是锁定一次就不变了。

    ==============

  2. PICE的常用通信框架包括:Riffa框架 和 xilinx的XDMA框架。
    Riffa 可以最多可以支持到8 lane。但是Riffa虚拟出来多个通道,Riffa 最多可以支持 12 个用户的 channel
    在这里插入图片描述
    就跟DDR一样,物理上只能读或者只能写,但是我们虚拟出来几个通道可以同时读写。

    ==============

  3. 这里 RX 和 TX 是使用 xilinx 芯片内部的 GTP 接口实现, (本项目中是 Aritx7 的 GTP接口,将来可以使用 kintex 7 的 GTX 以及高级器件中的 GTH GTY 等高速接口资源)。

    ==============

  4. Riffa框架和xilinx的XDMA框架已经把PCIE的解包和封包做好了,它提供了一个更加简单的接口来给用户使用,使得开发更加高效。如果不使用这种框架的方式,必须自行写解包和封包,这还要涉及到和驱动工程师的配合。

    物理层和链路层由IP自动生成,无需用户关心;用户只需要关心传输层,即TLP包。这部分有框架Riffa和XDMA,可以直接套。
    在这里插入图片描述
    Riffa是通过AXI stream和更底层的pcie core连接。
    在这里插入图片描述

    ==============

  5. Riffa提供的简化接口.
    1)Rx
    在这里插入图片描述
    在这里插入图片描述
    从第二张图可以看出,在接受完数据后CHNL_RX的反应会稍微晚一点,所以代码中需要做一个处理即我们读fifo数据的时候整一个计数器,计数到lenth后保持,直到CHNL_RX拉低后,才退出这一次数据的所有接收。退出之后,再去检测CHNL_RX拉高。

    2)Tx
    在这里插入图片描述
    在这里插入图片描述
    注意LEN的长度为DW长度。
    在这里插入图片描述

    ==============
    6. 以上位机发送1920x1080为例。
    在这里插入图片描述
    一帧开始的时候:隔了一段时间,数据才出来。
    在这里插入图片描述
    一帧结束:
    在这里插入图片描述
    ila保存为modelsim的波形为.wlf文件 ,用modelsim直接打开即可。
    在这里插入图片描述
    在这里插入图片描述
    ==============
    7.riffa框架的用户接口最大只能支持到128位宽,只能到PCIE2.0;而XDMA可以支持到pcie3.0,用户接口最大可以支持到256位。但是XDMA的效率不如riffa的效率高,而且XDMA的AXI-stream的效率很难提高,所以建议只用AXI的接口去开发,不建议使用AXI-stream接口。
    这个DMA其实是DMA到主机的内存,并不是我们板卡的内存。并且XDMA ip只能作为endpoint的设备,不能作为root.

    ==============
    8 . 接收上游发过来的数据的时候,一定要确保对所有数据的处理都是之前双方约定好的包头,所以数据一进来就要产生一个有效帧标志,把其他(异己)帧丢弃

    ==============
    9 . Xilinx 的fifo的机制:先进来的数据要存在fifo的写的高位。

    ==============
    10 . Riffa出来的数据,DW1DW0, DW3DW2, ……… 数据0在低位,数据1在高位。
    在这里插入图片描述

    ==============
    11 . 在写fifo的时候,如何控制写进去的数的个数刚好是4的倍数??
    fifo产生一个几乎满信号,预留好空间;在几乎满的时候,看写进去的数量计数器是否是4的倍数不是则等写到4的倍数后再把ready信号拉高,最多多些3个计数器。
    在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan_WC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值