史上最详细SRIO介绍及使用

基于Xilinx的数据手册pg007_SRIOP1-55P73-83得到以下SRIO接口知识:

    SRIO(Serial RapidIO,串行RapidIO)是一种用于高速差分串行通信协议。
    (1)SRIO Gen2支持 1 路、2 路和 4 路(1x、2x、4x,“x”表示通道数,选择几lane,几组差分线,几个高速收发器通道)通道传输数据(选择lane的宽度,要考虑板子底层差分线数量是否支持)
    (2)SRIO Gen2每个通道(per lane)传输速度支持 1.25、2.5、3.125、5.0 和 6.25 Gbaud
    (3)SRIO Gen2使用简单的握手机制控制 AXI4-Stream接口进行高吞吐量数据传输,使用 AXI4-Lite接口进行配置、维护(联想到以太网的MAC核)
    (4)SRIO Gen2兼容A7板卡,A7高速收发器是GTP,最大线速6.6Gbit/s,故SRIO Gen2通道最大速度是6.25Gbaud(木桶效应
        板间高速差分通信GTX---GTH,木桶效应,按照GTX(慢的)算
    (5)SRIO(发数据和中断)用途:
        1. FPGA与DSP进行通信
        2. 含有高速收发器的俩板子//芯片(片间板间)进行通信,可以使用SRIO,但此方法并不是最优解
    (6)SRIO Gen2 分三层:逻辑层缓冲层物理层
            逻辑层:逻辑层定义整体协议和数据包格式。
            缓冲层:接收发送缓存的包深度(8/16/32,通常默认或最大)

SRIO系统传输框架:
    SRIO分三层:逻辑层、缓冲层、物理层;通过用户接口,以AXI4-stream形式将数据传送到逻辑层,再将数据通过传输接口送到缓冲层,之后将数据传到物理层,最后通过GT高速收发器将数据串行发送出去:
  
        (1)框图左边用户接口以I/O Port形式进行传输,框图右边收发器接口以差分串行高速收发器形式进行传输
        (1)每个SRIO IP核的物理层数据通过1个高速收发器(1个高速通道)串行输出,高速收发器通道由1个GT COMMON(QPLL)提供时钟
        (2)1个GT Quad里面只有1个QPLL,只能给一个高速收发器通道提供时钟,若多个高速收发器通道都调用SRIO IP核,就需要多个QPLL驱动,这时就需要共享逻辑资源:
            ①共享资源实现:其中一个IP核包含共享逻辑资源(共享资源端),其它IP核不包含共享逻辑资源(被共享资源端),将共享IP的输出端连接被共享IP的输入,为其提供逻辑资源

            ②共享资源设置步骤:
                在调用SRIO IP核时,选择“Include Shared Logic in Core”为共享资源端
                
                选择“Include Shared Logic in Example Design”为被共享资源端
            

SRIO传输接口叙述:
  
1、用户接口传输情况:
    (1)逻辑层用户接口主要通过I/O Port 进行数据传输
       
        ①maintr、cfgr、cfgl:使用AXI4-Lite接口,管配置和维护
        ②I/O Port、消息端口、用户自定义端口使用AXI4-stream协议
    (2)I/O Port有两种类型:收发、带应答(默认I/O Port带应答
       
        I/O Port引脚说明:(使用AXI4-stream协议,引脚相似)
        ①发送引脚iotx:
            • s_axis_iotx_tvalid(我提供)和s_axis_iotx_tready(SRIO IP核提供)组成握手信号
            • s_axis_iotx_tdata[63:0]:64位数据线,握手后,数据有效
            • s_axis_iotx_tkeep[7:0]:选通信号,每1bit对应data的1字节(data : keep位宽 8:1)
            • s_axis_iotx_tlast:最后突发数据标志,拉高
            • s_axis_iotx_tuser[31:0]:用户自定义,一般不用,用在一个SRIO向多从传输时(扇出时),通过ID(器件ID,16bit)进行选择传输
            HELLO格式:由源 ID (31:16) 和目标 ID (15:0) 组成
            SRIO stream格式:tuser 只有 8 位宽


        ②接收引脚iorx:(同理)
            • m_axis_iorx_tvalid(数据发送方SRIO IP核提供),m_axis_iorx_tready(数据接收方我提供
    (3)两种传输数据包格式: 
        • HELLO (精简包,不是一种包格式,里面还包含许多包格式)
        • SRIO Stream(标准包,结构复杂)

2、收发器接口传输情况:
    (1)高速收发器包括一个发送器TX和一个接收器RX
    (2)收发器接口引脚:
        • srio_rxnN和srio_rxpN:一对差分的高速串行输入引脚
        • srio_txnN和srio_txpN:一对差分的高速串行输出引脚
        • 命名规则:rx输出,tx输入;p和n指差分的两条正、负线;N指第几lane
    (3)收发器接口时钟信号(gt_clk),时钟速率基于内核的传输频率
         
3、串行接口传输情况:
    串行接口的时钟信号(gt_pcs_clk),时钟速率基于内核的传输频率,是gt_clk的一半
            

对于高速收发器,区分串行接口和收发器接口:
串行接口:主要用于传输数字信号,它定义了数据的格式、速率、时序等。
收发器接口:主要与传输介质进行数据传输,包括信号的调制、解调、放大、滤波等。


HELLO包具体数据格式: 
(1)HELLO包分为许多事务类型:(由FTYPE/TTYPE决定)
    ①NREAD:基础读取请求事务,带响应(0010/0100)
    ②NWRITE:基础写操作包,不带响应(0101/0100
    ③NWRITE_R:带响应的的写操作包(0101/0101)
    ④SWRITE:不带响应的连续写操作(0110/----)
    ⑤DOORBELL:门铃包、中断包(1010/----)
(2)HELLO包:
    ①HELLO包包长64bit(8Byte)
    ②HELLO 包最大净荷量(最大传输数据量):256字节(传输范围为 0 - 255)
    ③事务类型相当于包头(车头)
    ③我们使用的是NWRITE和DOORBELL
        • NWRITE包头后跟数据(这车载货)
        •OORBELL包头后不跟数据(这车不载货)
(3)HELLO包的包格式:
        • TID:数据包的事务 ID
        • FTYPE/TTYPE:各4bit,FTYPE和TTYPE两条线控制事务类型选择
        • priority:2bit,数据包的优先级
        • CRF:1bit,包响应,用时置1
        • size:8bit,决定包长度、净荷量(范围0 - 255,最大传输256字节数据)
        • addr:地址
        • R:R保留位
        • info:表明不是数据包,是中断包
    ①NWRITE包叙述:(DOORBELL构成要知道,NREAD/SWRITE要了解)
        主要有8bit的ID、4bit的FTYPE和4bit的TTYPE共同决定了它的事务类型、8bit的净荷量(0-255字节)、34bit的地址,剩下还有3bit的保留位,1bit响应,2bit优先级
    ②DOORBELL包:中断包,先有数据再有中断,先发NWRITE包,再发DOORBELL包

FPGA---DSP传输机制:
    FPGA先发包头NWRITE+size个字节数据,之后发DOORBELL(不跟数据)进行中断,告诉DSP现在处理刚发来的数据

SRIO使用AXI4-stream发送数据相比AXI4-stream接口区别:


             SRIO需要先发个包头(事务类型)----(这里只说数据格式上的区别)
                包头后面若能跟数据(如:HELLO包的NWRITE),数据最大能传输256个字节长度,不是无限制的;

其他的呢,在这儿呢


SRIO的板间远端回环和单板近端回环
(1)1个板子近端回环,我们使用的是近端回环,1个板子调2个SRIO IP核自己和自己发
  
    1个板子回环过程:数据生成模块APP使用AXI4-stream协议发送HELLO数据包到SRIO1 IP核,在SRIO1 IP核将数据包转化成高速收发器接口的形式发送到SRIO2 IP核,在SRIO2 IP核对包进行解析,以AXI4-stream接口形式发送到APP,形成回环

(2)2个板子远端回环:

    2个开发板进行回环:每个板子都调用1个SRIO IP核,板内部通过SRIO用户接口以AXI4-stream形式与数据模块进行交互,两板之间通过高速收发器进行传输,通过SRIO选择的lane的个数(1x、2x、4x),使用对应个数的高速收发器进行传输


SRIO时序:
(1)I/O Port:AXI4-stream协议,在握手机制有效下,写NWRITE事务和DOORBELL事务
   
        ①NWRITE事务:先发64bit包头后跟数据(最大限制256字节,数据最后last拉高)
        ②DOORBELL事务:只发64bit中断包(last拉高)

(2)维护端口:AXI4-Lite协议,上写入事务的示例
 


SRIO程序信息:(默认I/O Port带应答,我们用的是不带应答机制的包类型)
需要经过初始化:
    SRIO有2个初始化信号:
        ①port_initialized(用户端口,端口初始化,快些)
        ②link_initialized(整条传输通道(链路)的初始化,慢些)
当2个初始化都完成后,初始化信号都有效(高电平有效)后,才能进行传数
TEST_DATA_SEND.v文件:造了个NWRITE包
SRIO_TOP_LOOP.v是顶层文件
 TB文件主要模拟将2个SRIO IP核外部的高速收发器的线连接在一起

调用SRIO IP核步骤:
选择模式,我们使用的是基础模式
  
(1)基础模式下,选择lane数量,传输速率,时钟频率,器件ID等
        (注意:时钟频率指的是收发器接口时钟频率,要和lane的传输速率匹配)
       
    选择此SRIO IP核是共享资源端还是被共享资源端
    
(2)自定义模式下,各层信息可以手动配置选择
    

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值