基于FPGA的SRIO的相关介绍和实现

这篇具有很好参考价值的文章主要介绍了基于FPGA的SRIO的相关介绍和实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

SRIO的相关介绍和实现

1、SRIO简介

        SRIO是面向嵌入式系统开发提出的高可靠、高性能、基于包交换的新一代高速互联技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC)批准为ISO/IECDIS 18372标准。SRIO则是面向串行背板、DSP和相关串行数据平面连接应用的串行RapidIO接口。串行RapidIO包含一个3层结构的协议,即物理层、传输层、逻辑层。物理层定义电气特性、链路控制、低级错误管理、底层流控制数据;传输层定义包交换、路由和寻址机制;逻辑层定义总体协议和包格式。可以实现最低引脚数量,采用DMA传输,支持复杂的可扩展拓扑,多点传输;可选的1.25 Gbps、2.5 Gbps、3.125 Gbps和5Gbps四种速度能满足不同应用需求。主要用于在微处理器、DSP、通信和网络处理器、系统内存和外围设备之间传递数据和控制信息。RapidIO 适用于点对点的设备间通讯,不需要经过一个中央处理器进行调度,就可以完成设备间的通讯,并且包长度简单,效率相对于PCIe要更高,有效数据传输速度更快。

        在 RapidIO体系结构中定义了6种基本的I/O操作, 下表给出了这6种基本的I/O操作、用来执行相应操作的事务和对操作的描述:

操作

使用的事务

描述

NREAD、RESPONSE

从目标器件中读数据

NWRITE

往目标器件中写数据

有响应写

NWRITE_R、RESPONSE

往目标器件中写数据,写完后等待目标响应

流写

SWRITE

面向大数据量DMA传输优化写数据

Atomic

ATOMIC、RESPPONSE

原子操作,读-修改-写,事务不能被打断

维护

MAINTENANCE

RapidIO专用寄存器为目标的事务

2、请求包格式

        RapidIO处理器发起一个请求包给目标器件,目标器件收到这个请求包后给一个响应包到处理器(这个请求包需要目标器件的响应),比如存储器读操作。

        一个完整的数据请求包如下,红色标注部分是逻辑层的相关信号:

包信息

S

AclkID

Rsrv

Prio

TT

Ftype

Target Address

Source

Address

位宽

1

3

4

2

2

4

8or16

8or16

Transaction

Size

Source

TID

Deivce Offset

Address

Optional

Data

Payload

CRC

4

4

8

32,48,64

8 to 256(Bytes)

2

        在整个字段中,Ftype和Ttype两个字段唯一的确定了包的类型,各字段的含义如下表所示:

字段

含义

Ftype

格式类型,与Ttype共同确定包的格式

Ttype

事务类型,与Ftype共同确定包的格式

Wrsize/Rdsize

该字段根据包的类型来决定是写事务数据的大小还是读事务数据的大小,这个字段配合wdptr字段一起使用

Src TID

包的事务ID号

Extended Addrss

扩展地址,这是一个可选字段,指定50-bit物理地址的高16-bit或者66-bit的物理地址的高32-bit

Address

29-bit的物理地址,由于RapidIO传输以一个双字(double-word)为基本单元,大多数嵌入式系统是32位的,所以一个字(word)占用4个字节,一个双字(double-word)占用8个字节,所以29-bit的物理地址指向的一个存储单元实际上是占用8个字节的,这样用29-bit的物理地址实际上可以访问4G(2^32)的内存空间

Wdptr

字指针(Word pointer),配合Wrsize/Rdsize字段来指明数据的大小以及对齐方式,详细的说明请查看RapidIO_Rev_2.2_Specification第33页

Xamsbs

扩展地址最高位(Extended address most significant bits),把物理地址进一步扩展2位,由于29-bit的地址已经可以访问4G内存空间,在最高位扩展2位以后就可以访问16G的内存空间

Data Payload

要传输的数据(8~256 Bytes)

3、响应包格式

        当一个RapidIO端点完成由另一个RapidIO端点发起的请求时,该端点就会发送一个响应事务。响应事务包总是以与请求事务包相同的方式被发送和路由。从广义上说,第12、13、14 和15类格式(Ftype=12表示的就是第12类格式)是响应类事务的格式。通常,第 12和14类是保留的,第15类由具体应用定义, 第13类才是主要的响应类事务。第13类包格式返回状态,数据(如果需要)和请求者的事务ID。带有“ERROR”状态或没有预期的数据裁荷的响应的RESPONSE包没有数据载荷。响应包使用第13类格式来响应除维护和无响应写之外的所有请求包。

        一个完整的数据响应包格式如下,红色标注部分是逻辑层的相关信号:

包信息

S

AclkID

Rsrv

Prio

TT

Ftype

Target Address

Source

Address

位宽

1

3

4

2

2

4

8or16

8or16

Transaction

Status

Source

TID

Optional

Data

Payload

CRC

4

4

8

8 to 256(Bytes)

2

        维护响应包响应维护请求。响应包的逻辑层各个字段含义如下:

字段

含义

Ftype

4b1101

格式类型,与Ttype一起确定包的格式,对于一个有效的响应包来说,此字段的值固定为4’b1101,也就是16进制的d

Ttype

4b0000

不携带数据的响应

4b0001~4b0111

保留

4b1000

携带数据的响应

4b0001~4b0110

保留

Status

4b0000

DONE状态:表示请求事务得到了正确的响应

4b0001~4b0110

保留

4b0111

ERROR状态:表示请求事务出现了不可恢复的错误,未能得到正确的响应

4b1000~4b1011

保留

4b1100~4b1111

用户可自定义响应

Target TID

目标事务号

Data Payload

响应包携带的数据,如果是不携带数据的响应,那么这个字段就不存在

4、I/O读写操作

4.1 读操作

        读操作由一个NREAD事务和一个RESPONSE事务组成,NREAD事务由请求方(Requestor)发起,目标方(Destination)正确的处理请求方发过来的响应以后会给请求方反馈正确的响应以及请求方读取的数据。

基于FPGA的SRIO的相关介绍和实现

4.2 写操作和流写操作

        写操作(write operations)和流写操作(streaming-write operations)分别由NWRITE和SWRITE事务组成。请求方可以用这两种事务往目标方指定的地址写入数据。NWRITE事务允许多个双字(double-word),字(word),半字(half-word)和字节(byte)作为数据负载(Data Payload)进行传输,但前提是必须对数据进行适当的补0(padded)并进行8字节边界对齐。而SWRITE事务相当于用NWRITE事务传输双字(double-word)的情况,并且SWRITE事务具有更少的头部开销(SWRITE事务的包格式中把Ttype,Rdsize/Wrsize和srcTID三个字段全部定义为了Extended Address字段的一部分,所以头部开销变少)。NWRITE事务和SWRITE事务不需要接收目标方的响应,所以当事务被目标方处理完以后并不会给发起方反馈任何信息。

基于FPGA的SRIO的相关介绍和实现

4.3 带响应的写操作

        带响应的写操作(write-with-response operations)由NWRITE_R事务和RESPONSE事务组成。它的整个请求操作和NWRITE事务的请求操作完全相同,但是在目标方正确处理请求方的NWRITE_R事务以后,目标方会给请求方反馈一个响应包告诉请求方事务已经被正确的处理。这种机制可以有效的保证数据传输的稳定性。

基于FPGA的SRIO的相关介绍和实现

4.4 原子操作

        原子操作(Atomic Operations)又叫做读-修改-写操作(Read-modify-Write Operations),它是由ATOMIC事务和RESPONSE事务组成,许多协处理器单元使用该操作来执行非一致性(non-coherent)存储器的同步。它允许携带的数据量为一个字(4个字节),一个半字(2个字节)或者一个字节,其他数据量都是不被允许的。原子操作既包含了读操作,也包含了写操作。目标方读取指定地址的数据,并把读取的数据返回给请求方,然后对数据执行相关的操作,最后在写回指定的地址。这个过程不会被任何其他的事务干扰或者打断。对数据执行的操作包括加1运算(increment),减1运算(decrement),测试和交换(test-and-swap),置1操作(set)和清0操作(clear),在这些操作中,只有测试和交换(test-and-swap),比较和交换(compare-and-swap)以及交换(swap)需要处理单元提供数据。原子操作的目标数据可以用NWRITE事务进行初始化。

基于FPGA的SRIO的相关介绍和实现

        I/O事务的端口类型是AXI4-Stream类型,维护事务的端口类型是AXI4-Lite类型。

        默认情况下,例子工程会使用srio_request_gen.v模块和srio_quick_start.v模块来产生I/O事务与维护事务。其中instruction_list.vh头文件定义了待发送的I/O事务,maintenance_list.vh头文件定义了待发送的维护事务。

        注意:每个srio_request_gen.v模块会消耗一个块RAM(Block RAM),每个srio_response_gen.v模块会消耗两个块RAM(Block RAM)。

5、SRIO IP内部结构

        SRIO IP主要由物理层(Physical Layer)、逻辑和传输层(Logical (I/O) and Transport Layer (LOG))、缓冲区(Buffer Design (BUF))三个部分组成;

基于FPGA的SRIO的相关介绍和实现

6、 逻辑层接口

        逻辑层接口被划分为几个模块来控制并解析发送和接收数据包。逻辑层分为三个接口:用户接口、传输接口、配置接口。

基于FPGA的SRIO的相关介绍和实现

        用户接口:包括能发起和接收包的端口。当生成IP核的时候可以配置端口的数目和事务类型,同时也能通过AXI4-Lite接口发起维护事务对本地或者远程的寄存器进行访问与配置。用户接口包括三个可选的端口分别为消息端口(Messaging Port),维护端口(Maintenance Port)和用户自定义端口(User-Defined Port)。

        传输接口:包含发送和接收两个端口,它是用来连接中间的Buffer,对于RapidIO的顶层模块来说,这两个接口不可见。

        配置接口:也包含两个端口。其中配置主机端口(Configuration Master Port)用来读写本地配置空间。逻辑配置寄存器端口(LOG Configuration Register Port),它可以用来读写一部分逻辑层或传输层配置寄存器。

7、HELLO包格式

         为了简化RapidIO包的构建过程,RapidIO核的事务传输接口(ireq,treq,iresp,tresp)可以配置为HELLO(Header Encoded Logical Layer Optimized)格式。这种格式把包的包头(Header)域进行标准化,而且把包头和数据在接口上分开传输,这将简化控制逻辑并且允许数据与发送边界对齐,有助于数据的管理。 RapidIO协议不支持传输的数据量大于256字节的情况,并且逻辑层(Logical)也不能把大于256字节的数据量分割为小的数据量进行发送。

        关于HELLO格式数据包传输的用户端传输协议;此段传输一共5个周期,第一个包头包含多种控制信号信息,后面四个周期分别对应4个DW数据传输。

基于FPGA的SRIO的相关介绍和实现

图7-1 基础的HELLO数据包传输

        根据不同的传输类型可以选择不同的Hello包,包头信息也有差别,HELLO包传输格式如下图所示(地址有效只有34位有效):

基于FPGA的SRIO的相关介绍和实现                                                        图7-2 HELLO数据包传输格式

        该传输协议包括了一个背靠背数据包传输,在等待一个周期后又开始下一个数据包传输,下一个数据一个包头加上两个DW数据原则上3个周期就传输完成,但由于停顿(可能是处理其他事物)总共消耗了5个周期才传输完成;

基于FPGA的SRIO的相关介绍和实现图7-3 多个数据包传输

8、IP创建及介绍

        在vivado 2017.4版本中可以创建Serial RapidIO Gen2 IP,可通过pg007_srio_gen2详细了解SRIO的相关接口信号和协议。

        有关IP的创建、相关代码及仿真实现可阅读文章SRIO的IP例程及仿真实现。

9、PCIe转SRIO桥接芯片

        井芯PRB0400是一款兼容PCIe Gen2和RapidIO Gen2协议的高性能数据传输桥接芯片,主要用于满足高可靠低延时计算处理系统内部各组件之间的互连需求,实现PCIe协议网络和RapidIO协议网络之间数据互联互通

        井芯PRB0400支持芯片到芯片、板到板间的高效能数据通信,可用于连接CPU、DSP、FPGA等构成的密集型电子系统,用于解决PCIe网络与RapidIO网络的连接问题,同时内嵌DMA引擎和消息传递引擎,可以在无需主控处理器弱参与的情况下实现大量数据的高效传输。

        在系统设计上,井芯PRB0400可实现原位替代对标的国际产品,并兼容其官方驱动。此外,井芯PRB0400兼容国内主流CPU和DSP,并完成了对应的生态测试。目前已完成与飞腾、龙芯、x86、Zynq等PCIe RC设备对应的生态测试,实现了国际厂商相关产品在硬件和软件两个层面的原位替代。文章来源地址https://www.toymoban.com/news/detail-466466.html

到了这里,关于基于FPGA的SRIO的相关介绍和实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA 底层资源相关介绍

    Xilinx FPGA底层资源介绍 本文转载自:瓜大三哥微信公众号 XILINX FPGA 芯片整体架构如下所示,整个芯片是以BANK进行划分的,不同的工艺、器件速度和对应的时钟具有不同的BANK数量(下面截图是以K7325tffg676为例):左边的BANK都是HR BANK,右侧的最下面三个是HP BANK,最上面的四个

    2024年01月23日
    浏览(27)
  • 基于 FPGA 的 PCIe IP 核简介

                      在某些高速数据存储场景下,单个NVMe IP已无法满足带宽需求,常需要多个NVMe IP并行工作以提升写入带宽,由于NVMe底层使用PCIe,而Xilinx/Altera等厂家FPGA芯片自带的PCIe硬核往往有限,比如Kintex-7芯片一般只有一个PCIe2.0硬核,此时,基于GTX等高速收发器

    2024年02月14日
    浏览(26)
  • 基于FPGA的以太网相关文章导航

      首先需要了解以太网的一些接口协议标准,常见的MII、GMII、RGMII时序,便于后续开发。     【必读】从MII到RGMII,一文了解以太网PHY芯片不同传输接口信号时序!   介绍一款比较老的以太网PHY芯片88E1518,具有RGMII接口,分析该芯片的原理图和内部寄存器的配置方式

    2024年04月14日
    浏览(33)
  • 基于Quartus-FPGA制作蜂鸣器的相关教程

    写这篇文章实在是因为自己对这个制作流程很不熟悉,查询了很多资料都没有得到找到自己想要的东西,事倍功半了。由于本人是才开始写csdn,很多东西还不知道咋使用。写得不太好,但还是希望能帮到有需要的小伙伴。如有错误的地方,欢迎大家指正,我们共同进步。对于

    2024年02月09日
    浏览(25)
  • 计数器简介以及FPGA实现

    在时序逻辑电路中,最基本的单元是寄存器,本篇将会介绍如何利用寄存器,实现一个具有计数器功能的电路。在FPGA开发中,一切与时间有关的设计都会用到计数器,所以学会设计计数器至关重要。 计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数

    2024年02月05日
    浏览(42)
  • SPI简介及FPGA通用MOSI模块实现

    SPI(Serial Peripheral Interface,串行外围设备接口)通讯协议 ,是Motorola公司提出的一种同步串行接口技术。是 一种高速、全双工、同步通信总线 。在芯片中只占用 四根管脚 用来控制及数据传输。 优缺点: SPI通讯协议的优点是支持全双工通信,通讯方式较为简单,且相对数据

    2024年01月25日
    浏览(24)
  • FPGA实现以太网(一)——以太网简介

    以太网(Ethernet)是当今现有局域网采用的最通用的通信协议标准, 该标准定义了在局域网中采用的电缆类型和信号处理方法。 以太网凭借其成本低、通信速率高、抗干扰性强等优点被广泛应用在网络远程监控、 交换机、工业自动化等对通信速率要求较高的场合。 以太网是一

    2024年02月03日
    浏览(42)
  • 4实现中断异常相关指令-2【FPGA模型机课程设计】

    2023-5-23 16:43:50 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 2023-6-3 17:24:24 系统调用和异常返回的功能 不完善 需要在Mem中添加对 LLbit-0 的代码 并且新增测试 对原子指令的失败测试 0集中实践环节计划书【FPGA模型机课程设计】 第一周周四: 选择MIPS与中断异常

    2024年02月09日
    浏览(32)
  • 4实现中断异常相关指令-1【FPGA模型机课程设计】

    2023-5-23 16:43:50 以下内容源自《【FPGA模型机课程设计】》 仅供学习交流使用 0集中实践环节计划书【FPGA模型机课程设计】 修改于2023-5-26 14:45:16 此处SC功能实现有问题 SC的 rt-1 不能在EX中实现 需要放入到MEM中 需要知道操作是否成功 得到rt-1(成功)或者rt-0(失败) 而不是在

    2024年02月11日
    浏览(33)
  • USB3.0芯片FT601Q简介及FPGA实现

      FT601Q 是 FTDI 推出的一款超高速 USB3.0 芯片,提供高达 5Gbps 的带宽。该芯片不需要额外的固件开发,共有 4 个写通道和 4 个读通道,每个通道的缓冲大小均为 4KB。FT601Q 具有多种工作模式,本文介绍并实现相对简单的同步 FIFO 模式——245 mode。   FT601 工作模式在上电时检

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包