xilinx srio ip学习笔记之初识srio

news2024/12/25 0:22:31

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

xilinx srio ip学习笔记之初识srio

  • 前言
  • IP 设置
  • 总结


前言

因为工作原因,需要对rapidio 的协议进行了解,在xilinx的IP核中,是对应着Serial RapidIO Gen2 这个IP核。因为之前从来没有接触过这个IP核,因此希望像之前学习JESD IP那样,一开始从xilinx的example开始入手

IP 设置

因为一开始什么都不太明白,所以我一开始对IP的设置保持初始状态,就在这个的基础上生成example
在这里插入图片描述
生成example之后,对srio_gen2_0的端口进行简单的观察,发现大部分端口都是输出的,说明大部分端口都不需要进行控制,而里面有几组总线是需要进行控制的

s_axis_ireq_*
m_axis_iresp_*
s_axis_tresp_*
m_axis_treq_*
s_axi_maintr_*
也就是说我们只要关注这些总线如何进行使用。

  srio_gen2_0  srio_gen2_0_inst
     (//---------------------------------------------------------------
      .sys_clkp                (sys_clkp  ),  // input
      .sys_clkn                (sys_clkn  ),  // input
      .sys_rst                 (sys_rst   ),  // input
      // all clocks as output in shared logic mode
      .log_clk_out             (log_clk   ), // output
      .phy_clk_out             (phy_clk   ), // output
      .gt_clk_out              (gt_clk    ), // output
      .gt_pcs_clk_out          (gt_pcs_clk), // output

      .drpclk_out              (drpclk    ), // output

      .refclk_out              (refclk    ), // output

      .clk_lock_out            (clk_lock  ), // output
      // all resets as output in shared logic mode
      .log_rst_out             (log_rst   ), // output
      .phy_rst_out             (phy_rst   ), // output
      .buf_rst_out             (buf_rst   ), // output
      .cfg_rst_out             (cfg_rst   ), // output
      .gt_pcs_rst_out          (gt_pcs_rst), // output

//---------------------------------------------------------------

      .gt0_qpll_clk_out           (gt0_qpll_clk_out       ), // output
      .gt0_qpll_out_refclk_out    (gt0_qpll_out_refclk_out), // output



// //---------------------------------------------------------------
      .srio_rxn0               (srio_rxn0), // input
      .srio_rxp0               (srio_rxp0), // input

      .srio_txn0               (srio_txn0), // output
      .srio_txp0               (srio_txp0), // output

      .s_axis_ireq_tvalid            (ireq_tvalid), // input
      .s_axis_ireq_tready            (ireq_tready), // output
      .s_axis_ireq_tlast             (ireq_tlast),  // input
      .s_axis_ireq_tdata             (ireq_tdata),  // input [63 : 0]
      .s_axis_ireq_tkeep             (ireq_tkeep),  // input [7 : 0]
      .s_axis_ireq_tuser             (ireq_tuser),  // input [31 : 0]

      .m_axis_iresp_tvalid           (iresp_tvalid), // output
      .m_axis_iresp_tready           (iresp_tready), // input
      .m_axis_iresp_tlast            (iresp_tlast),  // output
      .m_axis_iresp_tdata            (iresp_tdata),  // output [63 : 0]
      .m_axis_iresp_tkeep            (iresp_tkeep),  // output [7 : 0]
      .m_axis_iresp_tuser            (iresp_tuser),  // output [31 : 0]

      .s_axis_tresp_tvalid           (tresp_tvalid), // input
      .s_axis_tresp_tready           (tresp_tready), // output
      .s_axis_tresp_tlast            (tresp_tlast),  // input
      .s_axis_tresp_tdata            (tresp_tdata),  // input [63 : 0]
      .s_axis_tresp_tkeep            (tresp_tkeep),  // input [7 : 0]
      .s_axis_tresp_tuser            (tresp_tuser),  // input [31 : 0]

      .m_axis_treq_tvalid            (treq_tvalid), // output
      .m_axis_treq_tready            (treq_tready), // input
      .m_axis_treq_tlast             (treq_tlast),  // output
      .m_axis_treq_tdata             (treq_tdata),  // output [63 : 0]
      .m_axis_treq_tkeep             (treq_tkeep),  // output [7 : 0]
      .m_axis_treq_tuser             (treq_tuser),  // output [31 : 0]

      .s_axi_maintr_rst              (maintr_rst),  // input

      .s_axi_maintr_awvalid          (maintr_awvalid), // input
      .s_axi_maintr_awready          (maintr_awready), // output
      .s_axi_maintr_awaddr           (maintr_awaddr), // input [31 : 0]
      .s_axi_maintr_wvalid           (maintr_wvalid), // input
      .s_axi_maintr_wready           (maintr_wready), // output
      .s_axi_maintr_wdata            (maintr_wdata),  // input [31 : 0]
      .s_axi_maintr_bvalid           (maintr_bvalid), // output
      .s_axi_maintr_bready           (maintr_bready), // input
      .s_axi_maintr_bresp            (maintr_bresp),  // output [1 : 0]

      .s_axi_maintr_arvalid          (maintr_arvalid), // input
      .s_axi_maintr_arready          (maintr_arready), // output
      .s_axi_maintr_araddr           (maintr_araddr),  // input [31 : 0]
      .s_axi_maintr_rvalid           (maintr_rvalid),  // output
      .s_axi_maintr_rready           (maintr_rready),  // input
      .s_axi_maintr_rdata            (maintr_rdata),   // output [31 : 0]
      .s_axi_maintr_rresp            (maintr_rresp),   // output [1 : 0]

      .sim_train_en                  (sim_train_en),   // input
      .phy_mce                       (phy_mce),        // input
      .phy_link_reset                (phy_link_reset), // input
      .force_reinit                  (force_reinit),   // input


      .phy_rcvd_mce                  (phy_rcvd_mce       ), // output
      .phy_rcvd_link_reset           (phy_rcvd_link_reset), // output
      .phy_debug                     (phy_debug          ), // output [223 : 0]
      .gtrx_disperr_or               (gtrx_disperr_or    ), // output
      .gtrx_notintable_or            (gtrx_notintable_or ), // output

      .port_error                    (port_error         ), // output
      .port_timeout                  (port_timeout       ), // output [23 : 0]
      .srio_host                     (srio_host          ), // output
      .port_decode_error             (port_decode_error  ), // output
      .deviceid                      (deviceid           ), // output [15 : 0]
      .idle2_selected                (idle2_selected     ), // output
      .phy_lcl_master_enable_out     (), // these are side band output only signals
      .buf_lcl_response_only_out     (),
      .buf_lcl_tx_flow_control_out   (),
      .buf_lcl_phy_buf_stat_out      (),
      .phy_lcl_phy_next_fm_out       (),
      .phy_lcl_phy_last_ack_out      (),
      .phy_lcl_phy_rewind_out        (),
      .phy_lcl_phy_rcvd_buf_stat_out (),
      .phy_lcl_maint_only_out        (),
//---





//---
      .port_initialized              (port_initialized  ), // output
      .link_initialized              (link_initialized  ), // output
      .idle_selected                 (idle_selected     ), // output
      .mode_1x                       (mode_1x           )  // output
     );

而且通过观察各个总线的tdata的输入输出方向,可以看出

      .s_axis_ireq_tvalid            (ireq_tvalid), // input
      .s_axis_ireq_tready            (ireq_tready), // output
      .s_axis_ireq_tlast             (ireq_tlast),  // input
      .s_axis_ireq_tdata             (ireq_tdata),  // input [63 : 0]
      .s_axis_ireq_tkeep             (ireq_tkeep),  // input [7 : 0]
      .s_axis_ireq_tuser             (ireq_tuser),  // input [31 : 0]

上面这组控制线肯定是用于发送数据的


            .m_axis_treq_tvalid            (treq_tvalid), // output
      .m_axis_treq_tready            (treq_tready), // input
      .m_axis_treq_tlast             (treq_tlast),  // output
      .m_axis_treq_tdata             (treq_tdata),  // output [63 : 0]
      .m_axis_treq_tkeep             (treq_tkeep),  // output [7 : 0]
      .m_axis_treq_tuser             (treq_tuser),  // output [31 : 0]

而上面这组控制线肯定是用于接收数据的,这两组应该是有对应关系。也就是说从s_axis_ireq_*发送出去的数据应该从m_axis_iresp_*获得。

同样的,

      .s_axis_tresp_tvalid           (tresp_tvalid), // input
      .s_axis_tresp_tready           (tresp_tready), // output
      .s_axis_tresp_tlast            (tresp_tlast),  // input
      .s_axis_tresp_tdata            (tresp_tdata),  // input [63 : 0]
      .s_axis_tresp_tkeep            (tresp_tkeep),  // input [7 : 0]
      .s_axis_tresp_tuser            (tresp_tuser),  // input [31 : 0]

上面这组控制线肯定是用于发送数据的

      .m_axis_iresp_tvalid           (iresp_tvalid), // output
      .m_axis_iresp_tready           (iresp_tready), // input
      .m_axis_iresp_tlast            (iresp_tlast),  // output
      .m_axis_iresp_tdata            (iresp_tdata),  // output [63 : 0]
      .m_axis_iresp_tkeep            (iresp_tkeep),  // output [7 : 0]
      .m_axis_iresp_tuser            (iresp_tuser),  // output [31 : 0]

而上面这组控制线肯定是用于接收数据的,这两组应该是有对应关系。也就是说从s_axis_tresp_*发送出去的数据应该从m_axis_treq_*获得。

程序框图如下:

在这里插入图片描述

总结

以上就是对srio ip example的一个直观的认识,希望后面慢慢能够加深其理解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126217.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这支隐藏“球队”,颠覆消费品「赛场」

【潮汐商业评论/原创】 大好的黄金周末,Fred约了几个朋友来家里看球。按照他的计划,周五准备下班后,他赶紧得去一趟附近的大型超市扫货,买一批零食酒水招待朋友。没想到的是,好不容易等到快下班了,领导通知…

外包呆一年,外包的工作经历怎么写?外包的项目经验怎么写?

0. 先来看下大家的各种问题? 外包的工作经历怎么写?外包的项目经验怎么写?外包如何优化简历?进入外包后黑化了简历,如何成功跳出外包圈?外包该如何提升自己?外包仔如何自我救赎? ……

前端基础_离线Web应用概述

离线Web应用概述 在Web应用中使用缓存的原因之一是为了支持离线应用。在全球互联的时代,离线应用仍有其实用价值。当无法上网的时候,你会做什么呢?你可能会说如今网络无处不在,而且非常稳定,不存在没有网络的情况。但…

【服务器数据恢复】误操作导致ocfs2文件系统被格式化的数据恢复案例

服务器故障: 用户误操作将linux文件系统误装入到Ocfs2文件系统的数据卷上,导致原始Ocfs2文件系统被格式化为Ext4文件系统。 因为Ext4文件系统每隔几百兆就会写入文件系统的原始信息,所以本案例中的原始Ocfs2文件系统中的数据可能受到一定程度…

搭建开源版个人图床

在微博图床、gitee、jsDelivr 陆续被 ban 的今天,很有必要搭建自己的图床系统了。 兰空图床 兰空图床官网:https://www.lsky.pro docker版本:https://hub.docker.com/r/halcyonazure/lsky-pro-docker 本次讲解使用 docker 版本进行部署使用 …

linux跟踪技术之ebpf

ebpf简介 eBPF是一项革命性的技术,起源于 Linux 内核,可以在操作系统内核等特权上下文中运行沙盒程序。它可以安全有效地扩展内核的功能,而无需更改内核源代码或加载内核模块。 比如,使用ebpf可以追踪任何内核导出函数的参数&…

漫画电学原理

电是什么 电压 电压是两点的电势差。 电流是指每秒在导线中流动的电量。 电功率是指在1s内消耗的电能。 电的本质是什么 万物都是有原子构成,原子有原子核(正电),核外电子(负电)构成。电子的定向移动形成了电。 电子离开原子,原子的电子减少,从而带正电。带正电的…

互联网时代“陨落”,国家发布元宇宙战略的信号对失业和担心失业的我们带来了什么启迪?

互联网这头“猪 ”真的掉下来了 流量红利已经一去不复返了!3年前业界其实已经发出各种密集信号,在当时无论是BAT还是一些经济学家在3年前都已经预测过,互联网的流量模式已经衰竭,并且它将一去不复返。 曾经处于互联网大潮的我们…

day10Git

1.Git介绍 1.1版本控制(理解) 无论是代码编写,还是文档编写,我们都会遇到对文档内容反复修改的情况 1.2开发中存在的问题(理解) 程序员小明负责的模块就要完成了,就在即将提交发布之前的一瞬间,电脑突然蓝屏,硬盘光…

HTC FOCUS 3连接FOHEART H1数据手套

本教程介绍使用H1数据手套与HTC腕带式追踪器驱动VR中的虚拟手运动,实现手部的追踪及定位。 需要准备的硬件: 1、FOHEART H1数据手套 2、HTC VIVE Focus 3一体机 3、HTC VIVE 腕带式追踪器 01 一体机连接腕带追踪器 首先断开Focus3的手柄&#x…

【JavaWeb】Mybatis深度进阶练习

学习目标 能够使用映射配置文件实现CRUD操作能够使用注解实现CRUD操作 文章目录1、配置文件实现CRUD1.1 环境准备1.2 查询所有数据1.2.1 编写接口方法1.2.2 编写SQL语句1.2.3 编写测试方法1.2.4 起别名解决上述问题1.2.5 使用resultMap解决上述问题1.2.6 小结1.3 查询详情1.3.1…

(一) 初识python

1. python的特点: 可读性强 可读性远比听上去重要的多得多。一个程序会被反复的修改,可读性意味这让你可以在更短时间内学习和记忆,直接提高生产率。高效、简洁 研究证明,程序员每天可编写的有效代码是有限的。完成同样功能只用一…

浙大MBA复试经验分享——复试备考流程及要点提醒

最近身边有很多小伙伴都在咨询关于复试的问题,趁着今天有空把我的复试准备过程按照时间线梳理出来分享给大家,希望可以帮助到大家。 联考结束后,趁着考完印象还深刻,我们首先要做的就是估分(辅导班或者小红书、知…

【06】概率图推断之变量消除算法

概率图推断之变量消除算法 文章目录说明性示例消除变量因子因子运算排序变量消除算法举例证据变量消除的时间复杂度选择变量消除顺序接下来,我们将注意力转向图模型中的推断问题。 给定概率模型(如贝叶斯网络或马尔可夫随机场),…

开个脑洞,带你写一个自己的极狐GitLab CI Runner

极狐GitLab Runner 是极狐GitLab CI/CD 执行的利器,能够帮助完成 CI/CD Pipeline Job 的执行。 目前极狐GitLab Runner 是一个开源项目,以 Golang 编写。 极狐Gitlab 有个不错的特性,就是你可以使用自己的极狐Gitlab CI Runner。可是&#xf…

Oracle 单实例如何开机自启动

作者 | JiekeXu来源 |公众号 JiekeXu DBA之路(ID: JiekeXu_IT)如需转载请联系授权 | (个人微信 ID:JiekeXu_DBA)大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起来看看 Oracle 单实例如何开机自启动,欢迎点击…

盘点JAVA程序猿必备的webserver

作为java工程师,除了必备的java编程能力,我们还需要些什么呢? 一般而言,要从工程师进化为构架师,一个合格的java工作者需要掌握一些关于构架的知识, 比如互联网的结构,服务器的建设&#xff0c…

PhotoShop入门

PhotoShop入门 零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub&am…

JAVA结构、循环语句

一、 if选择结构 代码示例: int num 1;if (num 1) {System.out.println("壹");} else if (num 2) {System.out.println("贰");} else if (num 3) {System.out.println("参");}输出: 壹 二、switch结构 1.switch 会根…

HNU编译原理实验四cminus_compiler-2022-fall

前言:原本想认认真真把这个实验给完成的,但是当时时间太赶了,一周要做三个实验,所以这次实验基本都是抄的了,有些地方也抄的不明不白,不过懂不懂这个对课程学习的帮助并不是很大,毕竟这个实验的…