首页 > 其他分享 >Riffa用户接口与PCIE组帧

Riffa用户接口与PCIE组帧

时间:2024-06-17 21:34:40浏览次数:9  
标签:Riffa TX RIFFA 组帧 RX CHNL PCIE DATA 数据

参考:

PCIE之RIFFA框架接口时序_riffa 框架-CSDN博客

一、概述  

RIFFA是一个开源框架,用于实现简便的PCIE通信,使开发者只需要关注与数据相关的接口,不必花费大量时间用于TLP包的解析核封装。一个简单的结构框图如下:

二、接口时序

  使用RIFFA框架开发只用关注用户侧的数据接口时序,RIFFA模块可以自己完成TLP封包解包。硬件接口如下图:

 

  接口名称红色的为握手信号,黑色的为FIFO端口(RIFFA模块中用FIFO作为数据缓冲)。I/O的方向以USER LOGIC为起点,例如对于USER LOGIC,CHNL_RX_CLK为output,对于RIFFA则为input。具体的接口功能如下:

CHNL_RX_CLK:用户端(USER LOGIC)从RIFFA读数据的时钟(其实就是从FIFO中读);
CHNL_RX:高电平表明RIFFA中有数据到来,(上位机执行send的时候,PCIE设备接收数据时,当所有数据写入到riffa内部fifo后,CHNL_RX拉高;当从riffa rx fifo中把数据全部读走后,CHNL_RX拉低);
CHNL_RX_ACK:高电平表明可以接收来自RIFFA的数据(用于响应CHNL_RX,在读取前拉高至少一个时钟周期,最多拉高持续到本次读取完成)
CHNL_RX_LAST:高电平表明这是最后一个事务(最后一个TLP包);(类似于DDR3 APP接口的END,可能一直为1)
CHNL_RX_LEN[31:0]:数据长度,单位是DW(4字节)。意思就是LEN*4是数据的字节数(CHNL_RX拉高的同时CHNL_RX_LEN有效)
CHNL_RX_OFF[30:0]:四字节偏移,指示包头包尾不是整DW时的字节有效位;(用于过滤协议字一类的数据,比如指示以太网帧前八个前导码无效,从第九个开始存储)
CHNL_RX_DATA[DWIDTH-1:0]:数据;
CHNL_RX_DATA_VALID:数据有效标志;
CHNL_RX_DATA_REN:其实就是RIFFA中FIFO的读使能。当数据标志一般为CHNL_RX_DATA_VALID & CHNL_RX_DATA_REN;


CHNL_TX_CLK:用户端(USER LOGIC)向RIFFA写数据的时钟(其实就是FIFO写时钟);
CHNL_TX:高点平表明有数据要发送;
CHNL_TX_ACK:当有高脉冲来临时,才可以向RIFFA写入数据;
CHNL_TX_LAST:高电平表明这是最后一个事务(最后一个TLP包);
CHNL_TX_LEN[31:0]:数据长度,单位是4字节。意思就是LEN*4是数据的字节数;
CHNL_TX_OFF[30:0]:四字节偏移,指示包头包尾不是整DW时的字节有效位;
CHNL_TX_DATA[DWIDTH-1:0]:发送数据;
CHNL_TX_DATA_VALID:数据有效标志;
CHNL_TX_DATA_REN:高电平时USER LOGIC中的数据才被RIFFA读走;

PCIE组帧

PCIE协议下,一帧的最小控制单位是字节,通过首部和尾端有效控制字来实现;

而正常传输数据的最小单位是DW,也就是四个字节,当然,这里指的是事务层,数据链路层的DLLP包以及物理层的命令集都不以此为准;

总而言之,128位端口的RIFFA一次传输4个DW,而64位则是两个DW。

fpga_send 函数
此函数用于向 FPGA 设备的指定通道发送数据。它的参数如下:

fpga_t *fpga:指向已打开的 FPGA 设备的指针。
int chnl:指定哪个通道用于发送数据。
void *data:指向要发送的数据的指针。
int len:指定 data 指针指向的数据数组中的字(word)数目,每个字为 4 字节。
int destoff:目标设备数据偏移量,指定在 FPGA 的内存中写数据的起始位置。
int last:一个标志,指示这是否为最后一批发送的数据。
long long timeout:超时时间(毫秒)。如果指定时间内没有完成发送操作,函数将返回。
函数的返回值为 int 类型,代表成功发送到 FPGA 的数据字数。

 

标签:Riffa,TX,RIFFA,组帧,RX,CHNL,PCIE,DATA,数据
From: https://www.cnblogs.com/VerweileDoch/p/18248018

相关文章

  • PCIe BAR空间的值是谁设置的?谁分配的,什么时间分配的?
    Linux系统下PCIe总线、设备的枚举,资源的分配到底是哪里进行的?一直没搞太清楚,安装参考中的方法构建文件系统,编译内核,利用Qemu调试分析这个问题如下:内核代码是5.15.0-107-generic,工作环境是ubuntu22.04serverOS。Qemu虚拟机中的PCIe相关打印和对应函数如下[1.510805]P......
  • PCIe学习——重点提纲
    PCIe学习-重点提纲基础知识计算机架构基础总线系统概述PCIvsPCI-XvsPCIePCIe概述PCIe的发展历史PCIe与其他总线的对比PCIe的优势和应用场景PCIe体系结构PCIe分层模型物理层(PhysicalLayer)数据链路层(DataLinkLayer)事务层(TransactionLayer)PCIe链......
  • 《Optimizing the LINPACK Algorithm for Large-Scale PCIe-Based CPU-GPU Heterogene
    论文标题《OptimizingtheLINPACKAlgorithmforLarge-ScalePCIe-BasedCPU-GPUHeterogeneousSystems》为基于PCIe的大规模CPU-GPU异构系统优化LINPACK算法作者GuangmingTan、ChaoyangShui、YinshanWang、XianzhiYu和YujinYan来自中科院计算所初读摘要......
  • PCIe (3)
    BAR&DMAConfigurationspace是确定的大小的,一般4KB左右但是要访问更大的空间,则不可以,所以这里BAR将更大空间(devicememory)映射到了IO。BAR提供了一种MMIO的访问形式,访问的是类似register的IO,但是却是访问memory。不过MMIO依然是CPU直接发起PCIetransaction(TLP)。......
  • 全国产RK3568J + FPGA的PCIe、FSPI通信实测数据分享!
    测试数据汇总案例时钟频率理论速率测试结果FSPI通信案例150MHz71.53MB/s读速率:67.452MB/s写速率:52.638MB/sPCIe通信案例100MHz803.09MB/s读速率:595.24MB/s写速率:791.14MB/s备注:(1)当TLPheadersize=16Byte时,PCIe理论传输速率为:7......
  • 含税168元起!四核A53+NPU+PCIe+USB3.0,瑞芯微RK3562性价比真高!
     ......
  • 全国产化服务器设计原理图:905-多路PCIe的阵列计算全国产化服务器
    多路PCIe的阵列计算全国产化服务器      多路PCIe的阵列计算全国产化服务器以国产化处理器(海光、飞腾ARM、算能RSICV)为主板,扩展6-8路PCIe3.0X4计算卡;计算卡为全国产化的AI处理卡(瑞星微ARM,算能AI,灵犀类脑计算),低功耗FPGAPCIe计算卡;同时扩展万兆以太......
  • 转载: PCIE linux驱动
    https://www.cnblogs.com/LoyenWang/p/14209318.htmlPCIE物理结构PCIDevice;PCI总线中有三类设备:PCI从设备,PCI主设备,桥设备。PCI从设备:被动接收来自HostBridge或者其他PCI设备的读写请求;PCI主设备:可以通过总线仲裁获得PCI总线的使用权,主动向其他PCI设备或主存储器发起读写请......
  • PCIe
    PCIe(PeripheralComponentInterconnectExpress)PCIe总线使用点对点连接,因此没有传统的并行总线的地址线、数据线和控制线。地址数据控制信号传输方式数据包、分组交换将数据分成小包(事务层包TLP))每个包中包含地址信息和数据同通道传输PCIe通道每个通道有两对差分信号......
  • PCIE状态机-LTSSM
    一、PCIE LTSSMLTSSM是指LinkTrainingandStatusStateMachine,是PCIe物理层实现的,用于控制和管理PCIe总线上的数据链路。它提供了一组状态,以便设备进行链路训练和链接协商。在PCIe总线上,发送端和接收端需要进行链路训练,以便确定最佳的链接速度和链接宽度。LTSSM的作......