SRIO学习笔记之SRIO简介与Xilinx SRIO ip核例程详解

目录

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,如下图所示。在自己使用时可以屏蔽掉与这个相关的信号。

 

 

 

  • 29
    点赞
  • 419
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
### 回答1: Xilinx SRIO例程是一种用于开发和测试Serial RapidIO(SRIO)通信协议的示例代码。Xilinx SRIO例程提供了一个完整的示例实现,可以帮助开发人员理解和使用SRIO协议在Xilinx FPGA上进行高速通信。 SRIO是一种高性能的串行通信协议,广泛应用于需要高带宽和低延迟通信的领域,如无线通信、计算机网络和数据中心。Xilinx SRIO例程提供了一套实现SRIO通信的基本功能和接口,可以通过该例程了解SRIO通信的工作原理和配置。 Xilinx SRIO例程包括了发送和接收数据的功能模块,以及配置和管理SRIO通信的接口。开发人员可以通过使用这些功能模块,自定义数据包的格式和传输方式,实现自己的SRIO通信应用。 使用Xilinx SRIO例程的开发流程大致如下:首先,根据设备的硬件配置,配置SRIO通信的相关参数,如速率、输入输出端口数量等。然后,根据具体的应用需求,自定义数据包的格式和处理逻辑。接下来,调用SRIO例程提供的发送和接收函数,将数据包发送到SRIO总线上或从SRIO总线上接收数据。最后,根据实际应用需求,进行数据的处理和分析。 通过使用Xilinx SRIO例程,开发人员可以快速搭建和测试SRIO通信系统,加快开发进度。同时,可以根据实际需求对例程进行定制和扩展,满足不同应用场景的需求。总的来说,Xilinx SRIO例程是一个强大而灵活的工具,可以帮助开发人员实现高性能的SRIO通信应用。 ### 回答2: XilinxSRIO例程是一套用于配置和使用SRIO(Serial RapidIO)接口的软件模块和代码示例。这些例程可以帮助开发人员理解如何在Xilinx FPGA器件上使用SRIO接口,并提供了实现SRIO通信的基础代码。 SRIO是一种高速串行互连协议,用于连接高性能计算系统中的处理器、FPGA和其他外设。它提供了高带宽、低延迟的数据传输,可用于构建高性能的通信和计算系统。 XilinxSRIO例程提供了配置和初始化SRIO接口的代码示例。它包含了用于设置SRIO传输速率、配置端口和设置寄存器的函数。开发人员可以根据自己的需求和系统配置,选择合适的参数来配置SRIO接口。 此外,XilinxSRIO例程还提供了数据传输的示例代码,开发人员可以使用这些代码实现SRIO数据包的发送和接收。这些示例代码演示了如何通过SRIO接口发送和接收数据包,并提供了错误处理和数据校验的功能。 通过使用XilinxSRIO例程,开发人员可以更快地开始使用SRIO接口,并加快系统开发的速度。他们可以利用这些示例代码作为基础,根据自己的需求进行修改和扩展,从而实现定制化的SRIO通信功能。 总而言之,XilinxSRIO例程提供了配置和使用SRIO接口的软件模块和代码示例,帮助开发人员更好地理解和使用SRIO接口,并加速系统开发的进程。 ### 回答3: XilinxSRIO例程是一种用于Serial RapidIO(SRIO)通信协议的参考代码,旨在帮助开发人员理解和使用SRIO接口。 SRIO是一种高性能、低延迟的串行总线协议,用于连接高性能计算系统中的处理单元、I/O设备和存储单元。XilinxSRIO例程提供了基本的SRIO通信功能,包括端口初始化、链路训练和管理、数据包传输等。开发人员可以根据自己的需求,对例程进行修改和扩展,以满足特定的系统要求。 XilinxSRIO例程通常包括几个关键模块。首先是端口初始化模块,用于配置SRIO端口的参数,包括速率、宽度、地址映射等。其次是链路训练和管理模块,负责建立和维护SRIO链路的通信能力。这个模块通常涉及链路训练序列(LTR)、链路状态机等功能。 另外,SRIO例程还包括数据包传输模块,用于在SRIO链路上传输数据。这个模块根据SRIO的数据包格式,实现了数据包的打包、解包、发送和接收等功能。开发人员可以使用这个模块来实现SRIO设备之间的数据交换。 此外,XilinxSRIO例程通常还包括一些辅助模块,如配置寄存器访问模块、错误处理模块等。这些模块提供了额外的功能,以帮助开发人员进行调试和错误处理。 总之,XilinxSRIO例程是一种可以帮助开发人员快速理解和实现SRIO通信的参考代码。通过熟悉例程,开发人员可以更好地应用SRIO接口,促进高性能计算系统的开发和部署。
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

风中月隐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值