精华内容
下载资源
问答
  • srio

    2012-05-10 19:37:31
    SRIO是Serial Rapid I/O的简写。  SRIO是面向嵌入式系统开发提出的高可靠、高性能、基于包交换的新一代高速互联技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC)批准为ISO/IECDIS 18372标准。SRIO...
    SRIO是Serial Rapid I/O的简写。
      SRIO是面向嵌入式系统开发提出的高可靠、高性能、基于包交换的新一代高速互联技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC)批准为ISO/IECDIS 18372标准。SRIO则是面向串行背板、DSP和相关串行数据平面连接应用的串行RapidIO接口。串行RapidIO包含一个3层结构的协议,即物理层、传输层、逻辑层。物理层定义电气特性、链路控制、低级错误管理;传输层定义包交换、路由和寻址机制;逻辑层定义总体协议和包格式。可以实现最低引脚数量,采用DMA传输,支持复杂的可扩展拓扑,多点传输;可选的1.25 Gbps、2.5 Gbps、3.125 Gbps三种速度能满足不同应用需求,是未来十几年中嵌入式系统互联的最佳选择之一。

    关键词:
    嵌入式, 高速
    展开全文
  • SRIO学习笔记之SRIO简介与Xilinx SRIO ip核例程详解

    千次阅读 多人点赞 2019-10-03 11:22:50
    3. SRIO协议介绍 3.1 SRIO的数据流 3.2 SRIO的数据协议 3.3 SRIO常用FPGA支持的模式 3.4 SRIO例程代码的时钟计算 4. SRIO的例程代码结构 4.1 SRIO发送模块详解 4.1.1 发送数据部分代码功能说明 4.1.2 接收...

    目录

    1. 概述

    2. 参考文件

    3. SRIO协议介绍

    3.1 SRIO的数据流

    3.2 SRIO的数据协议

    3.3 SRIO常用FPGA支持的模式

    3.4 SRIO例程代码的时钟计算

    4. SRIO的例程代码结构

    4.1 SRIO发送模块详解

    4.1.1 发送数据部分代码功能说明

    4.1.2 接收响应部分的代码功能详解

    4.2 SRIO接收模块详解

    4.2.1 接收数据部分的代码功能说明

    4.2.2 发送响应部分的代码功能说明

    5. 疑点

    疑点1:

    疑点2:


    1. 概述

    本文是用于记录srio的学习情况,以及一些对xilinx的vivado 2017.4中生成srio例程代码的解释。

    2. 参考文件

    《pg007_srio_gen2》

    3. SRIO协议介绍

    本处将从SRIO的数据流,数据协议,常用FPGA支持模式,以及IP例程中的时钟大小计算等部分介绍SRIO的情况。

     

    3.1 SRIO的数据流

    SRIO通过生成IP后,通常情况下主要使用的接口为四组:ireq,iresp,treq,tresp。每个IP生成后都有这四组接口,即可以同时用于发送数据,接收数据,发送响应数据,接收响应数据。而这些接口间的信号流向如下图所示:

     

    即其信号流为IREQ发出给TREQ,TRESP发出给IRESP。

     

    3.2 SRIO的数据协议

    SRIO传输与响应的包类型很多,具体看手册P73-P74页。

     

    在使用Xilinx的ip核时,通常用的都是HELLO包,所以这里指给HELLO包的格式。如下图所示。Packet 中的具体符号表示意义请查看手册P76-P77页。其中的size为一包传输byte的数据量,范围为1-256 bytes。

        其典型的传输数据的用户接口代码的波形协议如下图所示:

     

    3.3 SRIO常用FPGA支持的模式

     

     

    3.4 SRIO例程代码的时钟计算

    refclk可使用时钟如下图table3-3所示。其中典型的时钟计算如Table3-4表头所示。:

    gt_clk     = line_rate/20;

    gt_pcs_clk = line_rate/40;

    phy_clk    = (gt_clk*link_width)/4;

    log_clk    = phy_clk;

    cfg_clk    = phy_clk;

     

    4. SRIO的例程代码结构

    SRIO生成例程后,其例程结构如下图所示。看着有8个文件,但常规情况下与我们相关的只有只有两个文件,即下图高亮的两个文件:

    1. srio_request_gen_srio_gen2_0(发送数据模块);
    2. srio_response_gen_srio_gen2_0(接收数据模块)

     

     

    4.1 SRIO发送模块详解

    SRIO发送模块中主要有两部分代码,发送数据部分(ireq),发送响应数据部分(iresp)。接收部分端口如下图所示:

     

     

     

    4.1.1 发送数据部分代码功能说明

    发送的包头数据的来源为“request_data_out = instruction[request_ address]”,即数据是从`include "instruction_list.vh"文件中调入的。而选择其文件中的哪些数据则是根据request_address算来的,具体如下图部分所示。

     

    最终包头的格式为:

     

        而包中去掉包头后传输的数据为每8位递增数据数据,具体如下图所示。

     

    重点:发送用户自己的数据与包头时设置,将go的值设置为0x01。

     

     

     

    4.1.2 接收响应部分的代码功能详解

    接收响应部分主要功能是在期望的得到回应的包类型时,检查是否回应的对应包头类型。

    而判断包头类型是否正确主要是根据预判的ftype(expected_ftype)时,检查接收到的ttype是否为协议规定的类型。判断的方式为下图位置:

     

    4.2 SRIO接收模块详解

    SRIO接收模块中主要有两部分代码,接收数据部分(treq),接收响应数据部分(tresp)。接收部分端口如下图所示:

     

     

    4.2.1 接收数据部分的代码功能说明

    接收部分主要是通过解析接收端口的信号,实时的解析如下图的信息,以及first_beat(beat为1个时钟的*_data),之后将每包数据去掉包头后丢入“RAMB36SDP(local_data_store)”中,但是每一包丢入数据时的首地址是current_addr[10:3]。

     

     

     

    4.2.2 发送响应部分的代码功能说明

    响应部分的代码分两部分,第一部分是响应的包头信号部分,第二部分是响应的数据部分。

    包头信号部分信息与响应的包类型相关,如下图所示,详细信息参考《pg007》的p76页。

     

    数据部分的信息主要是提取treq中输入的信号。但提取的方式是根据starting_read_addr = {1'b0, response_data_out[29:22]}开始提取数据输出,即是根据current_addr[10:3]的地址提取数据。也就是说这个提取数据的位置是根据输入数据包中的地址中的一部分作为首地址来定位的数据开始地方。

    当然是否需要反馈数据部分得根据接收到的包头类型而定,有些包只需要反馈包头不需要数据,有些包不需要进行反馈,详情参考手册P73页。

    保证存入“RAMB36SDP(response_queue_inst)”的包头判断信息无误的依据是RAMB36SB的写使能WREN(generate_a_response),generate_a_response是在接收到的first_beat时,且这个包头是需要反馈数据的包头时才会拉高使能。需要反馈的依据在《pg007》的Table 3-1,具体信息如下图所示:

     

     

    5. 疑点

    疑点1:

    虽然理论上来说反馈的数据提取数据是根据包头信息在同一个位置提取的,那么反馈的数据就和接收的对应包数据相同。但是由于接收到的数据包头的地址可能相同,至少current_addr[10:3]有很大几率相同,那么就会存在数据覆盖的现象,那么就会导致反馈的数据不是想要的数据,即返回的数据与接收到的数据不同。

     

    疑点2:

        为何把“current_addr[23:16] == 8'h12”作为pull_from_store(从存储地址开始拉高)?

       

        答:这个只是对应SRIO例程的发射数据,发射数据自定义的“真实起始地址”,参考手册P161,如下图所示。在自己使用时可以屏蔽掉与这个相关的信号。

     

     

     

    展开全文
  • fpga srio例程

    2018-08-14 15:49:15
    本测试程序实现的功能是:通过 SRIO 进行回环方式的数据传输。
  • SRIO协议规范

    2017-12-25 21:30:33
    SRIO协议规范,适用于VPX系统平台,航天,航空,军工院所使用。
  • vivado srio license

    2018-06-20 20:30:19
    Vivado SRIO License,已经在Vivado 2016.4 测试通过,可产生位流。其他版本没有测试,估计也是可以用的使用时 需要修改MAC 希望能够 帮助大家
  • xilinx srio应用

    2020-08-28 20:06:35
    srio数据收发,NWRITE或者SWRITE数据发送接收,在6.25Gx4的eg上进行修改而来,仅修改发送模块,接收模块可直接使用,内有说明,仅供参考,有用回复点赞
  • SRIO Functional Description SRIO包 在讲SRIO包之前,有必要再强调一下SRIO的构造层次。 SRI...

    SRIO Functional Description

    SRIO包

    在讲SRIO包之前,有必要再强调一下SRIO的构造层次。
    SRIO分为三个层次,分别是逻辑层,传输层和物理层。

    逻辑层 确定终端处理传输的协议,包括包的格式。

    传输层 定义了在系统中正确路由信息包的寻址方案。

    物理层 包含设备级的接口信息,如电气特性、错误管理数据和基本的流量控制数据。

    传输层与逻辑层和物理层是上下兼容的。

    RapidIO数据流由与数据字段有关的逻辑层、传输层和物理层组成。

    逻辑层包含header(定义访问类型)和payload(如果有的话)。

    传输层一定程度上取决于系统中物理层的拓扑结构,传输层包含有发送/接受消息(message)所需的来源设备ID(source ID)和目标设备ID(destination ID)。

    物理层取决于物理接口(例如并口和串口),物理层包含优先级acknowledgement(什么是acknowledgement?),和错误检测域

    操作队列

    SRIO的transaction是基于请求包(request packet)和响应包(response packet)的,包是终端设备之间最基本的通信元素,master(主核)或initator(初始化器)产生一个请求包并传输到目标去,目标产生一个响应包回到master或者initiator完成整个transaction。

    以下是笔者自己画的一个transaction的示意图:
    transaction

    SRIO终端之间通常并不直接连接,而是通过中间fabric(结构)装置连接。控制符号是用来管理SRIO物理互联块之间的transaction流的,也提供数据包的确认,流量控制信息和维护功能。

    Figure2-2 显示了包在系统中的流向。
    操作队列
    首先在initiator中,由master进行操作并产生request packet,再由initiator将request packet 发出到中间fabric层中,fabric的控制符号确认数据包后,向initiator发回一个确认接受信号。fabric层接收到request packet之后继续将其送至target,target的控制符号确认数据包后,向fabric返回一个接收信号。接着target对request packet进行相关操作,操作完成之后向fabric发出一个response packet,待fabric中的控制符号确认response packet之后,返回一个确认接收信号。fabric继续将response packet发送回initiator,待initiator中的控制符号确认包之后,向fabric发送一个接收信号,之后意味着此次整体操作的完成。

    图中用红圈标记的就是带有返回信号的控制符号的确认操作。只有这部分带有双向交流,其余部分都是单向交流。

    SRIO包的长度必须是一个32位的偶数,如果物理层、逻辑层和传输层长度加起来是一个16位的整数,那么在packet的最后一部分CRC之后会加上一个16位的后缀,一般是0000h。packet的位域(bits filed)里被定为保留(reserved)的部分,如果在该包被产生时,或者在被接收时忽略,那么位域就会被全部置0。包有不同的格式,我会在后续的文章里细讲。

    如果系统中定义的设备ID是8位的,那么可能的ID位置有256个,如果定义的设备ID是16位的,那可能指向的位置就有64K个。

    packet还包含一个CRC部分,该部分旨在确认数据在传输时的正确性,即在数据传输时数据内容没有发生变化。CRC部分保护除了ackID(ackID是什么?)和1bit的PHY(物理层)区域。外设会以硬件方式自动查看CRC部分,如果CRC是正确的,一个packet-accepted control symbol(包接收控制符)就会被接收包的设备所发送。如果CRC是错误的,接收包的设备就会发送一个未接收包控制符,该控制符会引起发送方重试这一次的包发送。

    PS:CRC是循环冗余纠错码

    控制符

    control symbol(控制符)是物理层的消息单元,用来管理链接维护包界定(包的分割)包确认错误报告和错误恢复,所有经过传输的数据包都通过start-of-packet和end-of-packet分割符进行分割。SRIO的控制符24bit长,并被控制符自己的CRC所保护。Figure2-4显示的是控制符的格式。

    这里写图片描述

    控制符提供了两个功能:stype0类型的控制符显示传递符号的port的状态;stype1类型的控制符是向传输分隔符接收port发出的请求。

    “传递符号的port”大家可以理解为figure2-2中的箭头,那些就是传递符号的port。同样“接收port”也是类似定义。

    Ti在控制符的开始位,提供特殊的符号对控制符进行分割。如果控制符包含一个分割符,那么就使用特殊符号PD(K28.3)(K28.3是特殊符号的名称,在这里就是将PD定义为K28.3,即PD = K28.3,后文的K28.0也是类似的定义)如果控制符不包含分隔符,就使用特殊符号SC(K28.0)。这种控制符会为控制符的内容提供了一个预警告,CRC并不保护这些特殊符号,但是如果出现一个非法的或错误的特殊符号,CRC就会将其理解为packet-not-accpted信号。因为控制符的长度是一定的,所以它已经在头部分割之后,就不需在尾部继续分割。

    接收到的包的类型决定该包的去向,未定义的包类型在被逻辑层功能区域处理之前就会被摧毁,这防止系统为逻辑层功能区域分配错误的存储空间,不支持的包类型会以error response packet的形式返回。

    包类型

    SRIO包的类型决定于包的FtypeTtype两个域的组合情况, Table2-2列出了所有Ftype和Ttype的组合和相应的解读。

    table2-2
    table2-2

    参考文献

    http://www.ti.com/cn/litv/pdf/sprugw1b

    PS:欢迎大家与我讨论文章中的问题,包括反对我的观点。

    展开全文
  • SRIO设计与应用

    2019-04-17 21:10:15
    SRIO接口设计,srio SWITCH的电路设计,SRIO网络路由配置及接口的使用方法
  • vivado2018 SRIO License

    2018-08-05 14:04:43
    已经vivado2018 验证过的 可以生成bit的SRIO License。
  • SRIO规范rev2.1

    2018-03-26 19:25:22
    SRIO规范ver2.1,详细的介绍了RapidIO的技术协议,有助于帮助开发者更好的使用SRIO.
  • SRIO编程文档

    2014-03-19 16:24:25
    用于快速使用SRIO开发程序的文档,介绍了一些srio常用的函数
  • vivado_srio.lic

    2020-11-29 18:17:07
    Xilinx Vivado SRIO licence,Vivado2016 2017 2018 2019 2020均可使用
  • Srio概要设计.doc

    2020-02-29 17:10:53
    Srio用作板间通信,和邮箱,messageQ,hyperlink一起构成了系统的通信体系,可以用来传递消息和进行数据搬移。本文介绍Srio的开发概要
  • FPGA实现SRIO详解.docx

    2020-12-26 14:49:48
    XILINX FPGA实现SRIO详解
  • SRIO IP核说明

    2018-10-06 10:13:16
    SRIO IP核说明,具体的版本为 Serial RapidIO Gen2 Endpoint v4.1
  • xilinx vivado SRIO license

    2018-01-17 15:32:46
    xilinx vivado SRIO license,亲自测试可以生成BIT文件,希望大家有用
  • xilinx srio最权威资料

    2018-09-14 13:37:08
    xilinx srio最权威资料
  • SRIO结构 【写在前面:在学习SRIO后续知识时发现有很多概念很难理解,查资料发现我对SRIO构架那部分学习太过敷衍,特此用一篇博文...

    SRIO结构

    【写在前面:在学习SRIO后续知识时发现有很多概念很难理解,查资料发现我对SRIO构架那部分学习太过敷衍,特此用一篇博文来学习交流一下SRIO构架。】

    RapidIO层次构建

    SRIO模块由三层构建而成。

    逻辑层 确定终端处理传输的协议,包括包的格式。

    传输层 定义了在系统中正确路由信息包的寻址方案。

    物理层 包含设备级的接口信息,如电气特性、错误管理数据和基本的流量控制数据。

    传输层与逻辑层和物理层是上下兼容的。

    Figure1-1说明了RapidIO各层之间的关系。

    RapidIO各层之间的关系

    逻辑层包含终端处理传输(transaction)的必要信息,如传输类型、大小、物理地址。

    传输层包含系统中终端相互传输包(packet)的信息,如寻址。

    物理层包含物理设备之间相互传递包(packet)时所需的信息,如电接口,流的控制。

    RapidIO互联结构

    RapidIO的互连结构被定义为一个独立于物理层实现的分组交换协议。

    Figure1-2显示的是SRIO互联系统。

    这里写图片描述

    图中可以看到,RapidIO遍布各个模块。

    物理层 1x/4x LP-Serial(长浮点串口) 规格

    现在有两种SRIO贸易协会认可的物理层规格:
    1、 8/16 LP-LVDS
    2、 1x/4x LP-Serial

    第一种规格是点对点同步时钟源DDR接口;第二种规格是点对点,交流耦合,时钟恢复接口。而且两种规格不兼容。

    SRIO遵从第二种规格,即1x/4x LP-Serial规格,SRIO中的串行/解串技术也是由这种规格分配的。

    该规格适用于4个频率点,即1.25,2.5,3.125和5Gbps,这定义了每个I/O差分对的总带宽。

    有一个8位/ 10位编码方案,确保时钟恢复电路的充足的数据转换。由于8位/ 10位编码方案的开销,每个差分对各自的有效数据带宽是1,2,2.5,4 Gbps。SRIO只同时为1X和4X的port指定频率。

    一个1X port被定义为一个TX(transanction)和一个RX(receive)的差分对。类似于一个IO口的差分对。4 X port就是4个1X的组合。一个4X port也可以被配置为4个1X port。

    SRIO提供了支持从1G到16G带宽的可升级接口。

    Figure1-3显示了怎样连接两个1X设备(或两个4X设备),一个设备的positive transmit data line (TDx) 【高电平有效传输数据线TDx】和另一个设备的positive receive data line (RDx)相连,低电平有效传输数据线 TDx和低电平有效接收数据线RDx相连。

    这里写图片描述



    SRIO中RapidIO支持的功能

    以下是支持的功能:

    1、遵从RapidIO互联协议REV2.1.1;
    2、LP- Serial协议REV2.1.1;
    3、4个可操作的1Xports;
      2个可操作的2Xports,使用2Xport时可以用2个1Xport或1个2Xport;
      1个可操作的4Xport,使用4Xport时可以用1个4Xport或4个1Xport;
    4、在TI SerDes(串行/解串器)集成时钟恢复功能;
    5、运行不同的port时使用不同的波特率,但是只支持倍频,比如2.5G和5G是支持的,但是3.125G和5G是不支持的;
    6、硬件错误处理,包括CRC(循环冗余校验(Cyclic Redundancy Check, CRC));
    7、差分CML(Current-Mode Logic 电流型逻辑(电路))信号支持AC和DC耦合;
    8、能对不用的port进行掉电(powerdown);
    9、支持1.25, 2.5, 3.125, and 5 Gbps rates;
    10、支持读,写,写/反馈,流数据的写入,out-going Atomic(什么意思?外向原子?),维护操作;
    11、向CPU产生中断(门铃包和内部调度);
    12、支持8位和16位的设备ID;
    13、支持接收34位的地址;
    14、支持产生34位,50位和66位地址;
    15、支持数据类型:位,半字,字,双字;
    16、是BIG-ENDIAN(big endian是指低地址存放最高有效字节(MSB),与之对应的是small endian)模式的;
    17、DirectIO传输;
    18、消息(Message)传递;
    19、数据payload最高256位;
    20、单个消息最多包含16个包;
    21、时钟域切换支持Elastic Store FIFO(FIFO弹性存储);
    22、Short Run and Long Run compliant(不太懂,百度得到的结果只有经济学中的短期和长期,long run指的是不变成本和可变成本都能快速可变的时期,随着市场的自身的调节,市场的供求能达到平衡;short run是不变成本很难改变,商品的价格与不变成本具有粘滞性的时期;short和long是相对而言的,不一定short就比long小。T-T我不是在看DSP吗T_T?)
    23、支持错误管理拓展;
    24、支持拥挤(多个核同时访问同一地址)控制扩展;
    25、支持多点ID;
    26、支持长短控制符;
    27、支持IDLE1和IDLE2;(IDLE为系统挂起命令,是为了节省系统消耗)
    28、基于优先级和频率的严格优先级段交至协议单元;

    以下是不支持的功能

    1、不支持全局内存共享协议(GSM);
    2、不兼容8/16 LP-LVDS规格;
    3、不支持RapidIO原子操作目标;



    规格

    支持的两个REV2.1.1规格上面已经提到过了,不再赘述。
    serial RapidIO AC specification(串行RapidIO交流协议)两种驱动,称为long run和short run。
    long run协议适用于至少50cm长的长底板应用和至少两个连接设备的应用;
    short run协议适用于低功率应用,它通常用于同一个板子上或者底板较短的连接上。
    这两类规格的不同在于驱动的Vod。(什么是Vod,很明显不是点播技术)

    Target atomic operations(目标原子操作)包括增长,减少,测试和交换,置位和清除操作在L2缓存或寄存器中是不支持的。
    对外部设备的Atomic request operations(原子请求操作)是支持的。

    (atomic到底是个啥啊?)



    外部设备需求

    SRIO提供了基于RapidIO Physical Layer 1x/4x LP-Serial 协议的对所有外部设备的无缝接口。这些设备包括ASIC(专用集成电路)、microprocessor(微处理器)、DSP和来自多个供应商的交换机设备。



    附:由于作者的个人习惯,“specification”=“规格”=“协议”,三词通用,希望读者不要认为这三个词意思不同。

    参考文献

    http://www.ti.com/cn/litv/pdf/sprugw1b

    PS:欢迎大家与我讨论文章中的问题,包括反对我的观点。

    展开全文
  • SRIO Functional Description SRIO管脚 【SRIO管脚部分官方文档给的信息较少,只有一个表格,不过笔者会对表格里的描述进行详细解析】 SRIO设备管脚是基于Current-Mode Logic (CML)【电流模式逻辑】的高速差分...
  • DSP srio test

    2013-11-07 08:28:34
    德州仪器TMS320C66x SRIO测试代码
  • AN5295_SRIO_DEBUG.pdf

    2021-07-27 11:02:17
    PowerPC SRIO DEBUG
  • srio自回环设计.zip

    2020-03-15 11:13:27
    srio是面向嵌入式系统开发提出的高可靠、高性能、基于包交换的新一代高速互联技术,已于2004年被国际标准化组织(ISO)和国际电工协会(IEC)批准为ISO/IECDIS 18372标准。SRIO则是面向串行背板、DSP和相关串行数据平面...
  • T2080 SRIO DOORBELL例程

    2018-01-17 13:40:21
    该工程是在NXP的yacto环境下编译运行的,需要安装交叉编译环境fsl-toolchain,主要是针对T2080的SRIO的消息处理机制USDPAA的RMAN方式,收发DOORBELL所用。
  • SRIO协议介绍

    千次阅读 2019-06-14 09:48:56
    SRIO包格式, RAPIDIO IO Transactions传输类型, RAPIDIO Message Transactions消息传输类型, RAPIDIO Data Steam Transactions数据流传输类型, RAPIDIO GSM Transactions传输类型, ...
  • xilinx srio gen2 ip核资料

    2021-03-11 09:28:05
    xilinx srio ip核使用记录,srio协议规范,xilinx srio gen2手册
  • C6455的SRIO例程

    2018-11-12 22:52:47
    针对TMS320C6455的SRIO使用例程,包括寄存器配置和初始化,亲测可用
  • SRIO传输协议学习

    万次阅读 多人点赞 2019-08-15 15:45:57
    SRIO KeyStone设备中使用的RapidIO外设称为串行RapidIO(SRIO) RapidIO是一种非专有的高带宽系统级互连。它是一种分组交换互连,主要用作以每秒千兆字节性能级别进行芯片到芯片和板对板通信的系统内接口。该架构可...
  • DSP srio测试程序

    2014-09-14 04:56:02
    C6000系列DSP SRIO口测试程序。 可以完成互联,自环在内的SRIO口测试,并支持多个型号的C6000系列DSP。程序注释中把不同的测试方法和配置一一注释,可以完成不同种类的SRIO通信测试。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,327
精华内容 530
关键字:

Srio