0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

SRIO介绍及xilinx的vivado 2017.4中生成srio例程代码解释

FPGA设计论坛 来源:FPGA设计论坛 2024-12-10 16:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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生成后都有这四组接口,即可以同时用于发送数据,接收数据,发送响应数据,接收响应数据。而这些接口间的信号流向如下图所示:

de37d6b4-b5df-11ef-93f3-92fbcf53809c.jpg

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

3.2 SRIO的数据协议

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

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

de5264de-b5df-11ef-93f3-92fbcf53809c.jpg

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

de5e83b8-b5df-11ef-93f3-92fbcf53809c.jpg

3.3 SRIO常用FPGA支持的模式

de6dd25a-b5df-11ef-93f3-92fbcf53809c.jpg

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;

de86fd5c-b5df-11ef-93f3-92fbcf53809c.jpg

de9a40ba-b5df-11ef-93f3-92fbcf53809c.jpg

4. SRIO的例程代码结构

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

srio_request_gen_srio_gen2_0(发送数据模块);

srio_response_gen_srio_gen2_0(接收数据模块)

deaee060-b5df-11ef-93f3-92fbcf53809c.jpg

4.1 SRIO发送模块详解

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

decf2564-b5df-11ef-93f3-92fbcf53809c.jpg

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

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

dedae2e6-b5df-11ef-93f3-92fbcf53809c.jpg

最终包头的格式为:

deedcdd4-b5df-11ef-93f3-92fbcf53809c.jpg

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

df0b0c46-b5df-11ef-93f3-92fbcf53809c.jpg

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

df27692c-b5df-11ef-93f3-92fbcf53809c.jpg

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

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

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

df300d52-b5df-11ef-93f3-92fbcf53809c.jpg

4.2 SRIO接收模块详解

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

df3c105c-b5df-11ef-93f3-92fbcf53809c.jpg

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

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

df514134-b5df-11ef-93f3-92fbcf53809c.jpg

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

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

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

df5f05d0-b5df-11ef-93f3-92fbcf53809c.jpg

数据部分的信息主要是提取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,具体信息如下图所示:

df6ddb1e-b5df-11ef-93f3-92fbcf53809c.jpg

5. 疑点

疑点1:

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

疑点2:

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

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

df7e87ca-b5df-11ef-93f3-92fbcf53809c.jpg

原文链接:

https://openatomworkshop.csdn.net/67459da63a01316874d8e7a6.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • sRIO
    +关注

    关注

    1

    文章

    33

    浏览量

    21544
  • 代码
    +关注

    关注

    30

    文章

    4942

    浏览量

    73160
  • Vivado
    +关注

    关注

    19

    文章

    847

    浏览量

    70479

原文标题:SRIO简介与Xilinx SRIO ip核例程详解

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RapidIO标准的串行物理层实现

    Serial RapidIO(SRIO) 特指 RapidIO 标准的串行物理层实现。
    的头像 发表于 12-09 10:41 130次阅读
    RapidIO标准的串行物理层实现

    DSP、FPGA之间SRIO通信的问题?

    目前在使用DSP和FPGA之间通过SRIO的SWRITE事务完成双向数据通信,大多数情况下都正常,但是在我不停的给DSP进行烧写程序时,会偶尔出错,FPGA无法收到DSP下发的数据。偶尔故障情况下buf_lcl_phy_buf_stat_out始终是5\'b10000,且buf_lcl_response_only_
    发表于 11-15 16:22

    如何使用FPGA实现SRIO通信协议

    泛应用。文章重点解释了回环测试的基本概念,这种方法可验证FPGASRIO接口功能的正确性,并提供了系统级测试验证的相关知识。同时,本例程还涵盖了Verilog语法、FPGA架构、
    的头像 发表于 11-12 14:38 5100次阅读
    如何使用FPGA实现<b class='flag-5'>SRIO</b>通信协议

    请问如何在e203安装linux操作系统?

    本人用的板子是Xilinx的XC7A100TFGG484-2L,编译软件是vivado2017.4。目前比特流已经成功生成,我已经把其固化进了板子。现在的我想在我固化后的板子里面装一
    发表于 11-07 07:32

    生成Bitstream的DRC LUTLP-1错误的解决办法

    bitstream时出现DRC错误,根据xilinx官方社区的帮助,解决了这问题。 在生成bitstream之前,进行设置。 在bitstream设置界面的tcl.pre出添加一个tcl文件,文件包含
    发表于 10-30 07:42

    win10环境下使用vivado生成.bit与.mcs文件

    ,这里介绍一种可以直接在windows环境下使用vivado生成system.bit和system.mcs文件的方法。 1.在windows环境安装vivado,准备好e203_hb
    发表于 10-27 08:25

    语法纠错和testbench的自动生成

    设置: 另外,自动纠错实际上还是用了仿真软件的工具,例如vivado、iverilog、modelsim等。下面介绍如何利用vivado的工具xvlog。 一般情况下,xvlog
    发表于 10-27 07:07

    VIVADO对NICE进行波形仿真的小问题的解决

    https://www.rvmcu.com/community-topic-id-386.html 以上链接为如何生成.verilog,并在VIVADO中生成波形的例子。我们在实践过程
    发表于 10-27 06:41

    Nucleistudio+Vivado协同仿真教程

    编译完成后,我们会在工程目录下发现生成了.verilog文件,此即为我们仿真需用到的文件,可以将改文件复制保存在tb目录下 联合仿真 在我们前面创建的Vivado工程添加仿真文件
    发表于 10-23 06:22

    vivado仿真时GSR信号的影响

    利用vivado进行设计xilinx FPGA时,写完设计代码和仿真代码后,点击run simulation(启动modelsim进行仿真)。
    的头像 发表于 08-30 14:22 1035次阅读
    <b class='flag-5'>vivado</b>仿真时GSR信号的影响

    高速总线接口的类型介绍

    ,它的成员使用SRIO技术来实现高速和低延迟互联。RapidIO组织负责制定和推广RapidIO互联标准,支持RapidIO产品的开发和部署,因此二者相互关联,是不同概念。RapidIO协议分为逻辑层、传输层、物理层。FPGASRIO
    的头像 发表于 08-06 14:50 1517次阅读

    在ADC PAL,当ADC读数超过阈值时、是否有办法生成中断?

    中生成中断,是否有其他方法可以根据阈值输入自动调用函数? 此外,我们可以在 MPC5775B 中使用 SDADC 吗?如果是,SDADC 是否有任何解决方案来满足上述要求? 我搜索了 SDADC 的示例代码,但找不到任何
    发表于 04-02 08:30

    Vivado FIR IP核实现

    Xilinx的FIR IP核属于收费IP,但是不需要像 Quartus那样通过修改license文件来破解。如果是个人学习,现在网络上流传的license破解文件在破解Vivado的同时也破解
    的头像 发表于 03-01 14:44 2591次阅读
    <b class='flag-5'>Vivado</b> FIR IP核实现

    使用DDS生成三个信号并在Vivado实现低通滤波器

    本文使用 DDS 生成三个信号,并在 Vivado 实现低通滤波器。低通滤波器将滤除相关信号。
    的头像 发表于 03-01 14:31 2462次阅读
    使用DDS<b class='flag-5'>生成</b>三个信号并在<b class='flag-5'>Vivado</b><b class='flag-5'>中</b>实现低通滤波器

    【米尔-Xilinx XC7A100T FPGA开发板试用】 UART测试

    硬件: 一 米尔-Xilinx XC7A100T FPG 二 12V电源适配器 三 下载器 四 win10笔记本 软件: 一 Vivado (指导手册有详细的安装下载流程) 二 官方示例工程 这个例程
    发表于 01-12 10:10