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

    文章

    31

    浏览量

    20995
  • 代码
    +关注

    关注

    30

    文章

    4767

    浏览量

    68468
  • Vivado
    +关注

    关注

    19

    文章

    812

    浏览量

    66430

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

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

收藏 人收藏

    评论

    相关推荐

    Xilinx_Vivado_SDK的安装教程

    首先是去官网下载安装包:https://www.xilinx.com/support/download.html。 下载这个最大的、支持所有的 OS 如 Windows/Linux 的安装包。 下载
    的头像 发表于 11-16 09:53 631次阅读
    <b class='flag-5'>Xilinx_Vivado</b>_SDK的安装教程

    【米尔-Xilinx XC7A100T FPGA开发板试用】+03.SFP光口测试(zmj)

    。 2.GTP-iBERT测试 在vivado打开hardware manager,将刚才生成的bit文件下载到开发板。下载完成后,点击auto-detec links。点击Re
    发表于 11-12 16:54

    如何自动生成verilog代码

    介绍几种自动生成verilog代码的方法。
    的头像 发表于 11-05 11:45 255次阅读
    如何自动<b class='flag-5'>生成</b>verilog<b class='flag-5'>代码</b>

    FPGA的SRIO接口使用应注意的事项

    据传输速率、链路宽度、地址映射等,确保通信能够按照预期进行。 错误处理与恢复 : 在SRIO通信过程,可能会遇到各种错误情况(如链路错误、数据包错误等)。设计并实现有效的错误处理机制,以便
    发表于 06-27 08:33

    怎么建设高性能多核DSP+FPGA实验室?一起来河北工程大学看看

    主核工程与从核工程。主核工程编译后默认生成的可执行文件适用于DSP ETH1网口,如需重新生成适用于DSP ETH0网口的可执行文件,请参考关键代码小节进行源码修改。从核工程编译后生成
    发表于 06-07 14:11

    交换板设计方案原理图:473-SRIO_Switch_Gen2_ZD交换板卡

    SRIO_Switch_Gen2_ZD交换板卡为基于IDT SRIO Gen2系列SRIO交换芯片,采用CPCI-ZD平台架构的数据交换板。可以为高速实时信号处理任务提供可靠保障。
    的头像 发表于 05-13 11:40 769次阅读
    交换板设计方案原理图:473-<b class='flag-5'>SRIO</b>_Switch_Gen2_ZD交换板卡

    FPGA与SRIO调试步骤

     FPGA(现场可编程门阵列)和DSP(数字信号处理器)之间通过SRIO接口进行调试通常需要以下步骤。
    的头像 发表于 04-19 11:48 1358次阅读

    Vivado 使用Simulink设计FIR滤波器

    设计的滤波器性能相同。 xilinx在新版本的vivado中将simulink的WaveScope删掉了,信号观测方式换为和vivado debug相同的窗口,更为灵活和人性化。
    发表于 04-17 17:29

    srio交换芯片有啥用

    SRIO(Serial RapidIO)交换芯片在多个领域具有广泛的应用和重要的作用。
    的头像 发表于 03-26 15:09 857次阅读

    srio交换芯片属于什么种类

    SRIO交换芯片属于高速网络通信芯片的一种,具体来说,它们是基于RapidIO(快速输入输出)技术的串行通信芯片。RapidIO是一种用于高性能嵌入式系统的互连技术,它支持多种通信协议和拓扑结构,适用于需要高速、低延迟通信的应用场景。
    的头像 发表于 03-21 16:33 784次阅读

    srio交换芯片的原理和用途

    SRIO(Serial RapidIO)交换芯片是一种基于RapidIO(快速输入输出)技术的高速网络通信芯片。RapidIO是一种高性能、低延迟的网络通信标准,专为嵌入式系统设计,广泛应用于通信基础设施、军事和航空、工业自动化以及汽车等领域。
    的头像 发表于 03-21 16:30 1333次阅读

    srio交换芯片是什么?srio交换芯片的原理和作用

    SRIO(Serial RapidIO)交换芯片是一种高性能的通信芯片,专门设计用于实现基于SRIO协议的数据交换和传输。SRIO是一种点对点串行通信协议,广泛应用于嵌入式系统、高性能计算、网络通信
    的头像 发表于 03-16 16:40 3333次阅读

    在GHDS中生成Sprite顺序,程序无法正常运行是怎么回事?

    你好:我有一个关于在GHDS中生成Sprite顺序的问题,当我在GHDS建立多个Sprite,其中包括单个符号片、通过刷新图片的几组数据,和背景图片,它们是否需要一次性的按照顺序建立好。 问题背景
    发表于 02-22 07:23

    如何禁止vivado自动生成 bufg

    Vivado禁止自动生成BUFG(Buffered Clock Gate)可以通过以下步骤实现。 首先,让我们简要了解一下什么是BUFG。BUFG是一个时钟缓冲器,用于缓冲输入时钟信号,使其更稳
    的头像 发表于 01-05 14:31 2102次阅读

    keil如何生成bin文件

    Keil是一种集成开发环境(IDE),专为ARM架构的嵌入式系统开发而设计。在Keil中生成bin文件是将代码编译并转换为可执行文件的过程。本文将详细介绍Keil生成bin文件的步骤和
    的头像 发表于 12-15 13:43 1.2w次阅读