理解IP的使用,少不了Example Design的学习。


汇总篇:

Xilinx平台SRIO介绍(汇总篇)

目录:

一、示例工程架构组成

到了这一步,默认你已经生成IP并打开示例工程了。

首先,我们展开示例工程目录结构如下:

包含两个头文件和一堆子模块。我们列个表对这些子模块简单介绍一下:

1.1 子模块介绍

文件名称

模块功能描述

maintenance_list.vh

Verilog头文件,定义了一些维护事务,它被包含在srio_quick_start.v模块中。

instruction_list.vh

Verilog头文件,定义了121个事务,它被包含在srio_request_gen.v模块中。

srio_support.v

srio核心模块,包含IP例化以及时钟和复位;

我们使用IP核就是在该模块的基础上进行逻辑设计。

srio_request_gen.v

生成请求事务的模块,把instruction_list.vh中包含的事务发出去。

srio_response_gen.v

这个模块用来产生有响应事务的响应包

srio_quick_start.v

这个模块与IP核的维护端口相连,用来发起维护事务。

srio_report.v

在仿真时,这个模块用来产生包接收和发送的时间戳,在硬件上运行的时候这个模块可以删除

srio_statistics.v

这个模块用来收集核的统计信息并通过寄存器接口提交一些信息,提交的信息可以通过Vivado的调试特征以及用户设计来访问

srio_sim.v

srio_sim.v是仿真顶层文件,它例化了两个核,分别是primary和mirror,并把它们连接到一起用于仿真。它也包含了上报测试是否成功的机制与超时功能。

1.2 工程结构

整个结构包括时钟模块,复位模块,配置结构以及产生RapidIO事务的激励模块。

srio_quick_start模块在顶层srio_example_top.v中例化,它与IP核的维护端口相连用来产成维护事务,维护事务在maintenance_list.vh中进行定义,用户可以根据需要编辑maintenance_list.vh文件来添加,修改和移除维护事务。

srio_request_gen.v模块也在顶层srio_example_top.v中例化,它用来产生I/O事务与消息事务。这个模块也存储了期望的响应并把接收的响应与期望值进行比较。

srio_response_gen.v模块也在顶层srio_example_top.v中例化,它用来为接收到的请求事务生成对应的响应事务。

  通过上图可以看出,产生I/O事务一共有两种方式:第一种是通过例子工程中自带的srio_request_gen.v产生I/O事务;第二种是通过顶层模块中Initiator和Target的resquest/response接口自己编写代码产生I/O事务。同理,产生维护事务也有两种方式:第一种是通过例子工程中自带的srio_quick_start.v模块产生维护事务;第二种是通过顶层模块中的维护接口自己编写代码产生维护事务。I/O事务的端口类型是AXI4-Stream类型,维护事务的端口类型是AXI4-Lite类型。

二、示例工程仿真分析

2.1仿真分析

继续打开仿真目录如下所示:

仿真顶层例化了两个srio_top实体:一个primary,一个mirror;

具体是什么意思呢,我们打开仿真tb顶层研究:

可以看到,primary的发送管脚tx与mirror的接收管脚rx相连接,也就是说由primary发给mirror;另一个方向同样,primary的接收管脚rx与mirror的发送管脚tx相连接。其实从primary和mirror这两个单词基本就知道他们是干嘛的了,镜像嘛对吧~

另外,如果你看了一些xilinx的example design之后,你就会发现,其实套路都是固定的,什么xxx_support模块为核心啊,xxx_gen产生数据啊,xxx_check表示接收数据然后检测啊;我们做接口,无非就是发送与接收。

扯远了,我们回到srio仿真继续介绍,为了更加直白形象的说明仿真,我们放张图, 说再多,都没有一张图来的明白:

(虚线仅为理解使用,实际是通过SRIO进行收发的)

按照我们的理解,primary的srio_request_gen.v产生的I/O事务,将由ireq接口发送出去,由mirror的treq接口接收。mirror实体的srio_request_gen.v产生的I/O事务,也由ireq接口发送出去,由primary的treq接口接收。

那么,接下来,我们就打开仿真,对我们的理解进行验证。

2.2仿真验证

Run Simulation:

记得添加信号哦,添加了再对其分个组方便查看:

然后就等初始化完成,port_initialized拉高,表示初始化完成。link_initialized拉高,表示物理层接收了7个控制符号并发送了15个控制符号。啊,这个有点底层,不想讲太多,感兴趣的去看手册,同时把信号抓出来自己研究。

我们直接使用结果,链路ok,然后开始收发数据。

PS:笔者家里的小笔记本,真让我一阵好等= =||

所以建议使用Modelsim,更专业,更快速!

FPGA】老鸟的姿势学起来,用脚本进行modelsim仿真

【------------------等待时间-------------------】

OK,仿真结果出来了。为了好看,我们直接使用第一个数据包进行分析:

由图可知,包头信号为64’h006020fcd0000600

换算为二进制数为:64'b0000_0000_0110_0000_0010_0000_1111_1100_1101_16'b0_0110_8'b0

首先判断事务类型:

FTYPE = [55:52] = 6,

TTYPE = [51:48] = 0,

可以判断,事务类型为SWRITE。(SWRITE没有TTYPE)

我们再把SWRITE事务类型格式拉过来进行对比一波:PG007-[P.68]

得知,size = 15,意思就是这包请求包含16个字节的数据。而tdata为64bit,8byte;

可以推论在发送数据的第二个有效时钟周期时,将会拉高tlast。如上图标红所示②。同时,我们将发送的数据记录下来,待会儿与接收对比。

发送数据为: 64’b0,64’h0101010101010101;

注意:AXI4接口全部以valid/ready握手信号来进行数据发送,这里默认读者已经了解不再啰嗦,不懂的自行百度。

疑问:

SWRITE事务格式里面没有size,而是R(保留),为什么实际操作还是按照size来做的?手册里说的SWRITE拥有更少的头部开销,但是包头不都是占一拍吗?求大佬告知,在线等,挺急的。 = =||

但是,者不影响我们使用,我们继续往下看mirror的接收treq:

接收数据为: 64’b0,64’h0101010101010101;

与发送相同,验证成功。

其他的tuser,address,等内容,自行验证。就不再啰嗦了。

为了对初学者友好,很多地方进行简化处理。建议在基本了解的情况下,再自行详细研究。

前面已经说过,要发送自己的数据,有两种方法:

  1. 修改请求产生模块,添加自己的数据和事务类型;
  2. 设计自己的发送/接收模块。

Example Design一堆.v文件是不是看着很不爽,删掉删掉!使用我们自己的发送/接收模块,两个字:清爽,简单!

OK,咱们下期见。

Xilinx平台SRIO介绍(五)示例工程Example Design介绍相关推荐

  1. Xilinx FPGA平台GTX简易使用教程(五)GTX收发测试及示例工程介绍

    GTX IP配置完了,你不得搞个回环测试一番? 汇总篇: Xilinx FPGA平台GTX简易使用教程(汇总篇) 目录 前言 一.示例工程Example Design 1.1 gtx_support模 ...

  2. Xilinx平台Aurora IP介绍(汇总篇)

    Aurora IP核使用超简单的,COME ON! 目录 一.Xilinx平台Aurora IP介绍(一)Aurora基础知识 二.Xilinx平台Aurora IP介绍(二)时钟与复位 三.Xili ...

  3. 新颖的自我介绍_有创意的自我介绍五篇

    第1篇:有创意的自我介绍五篇 一个成功自我介绍可以给人留下一个好印象.那么,怎么来说,怎么自我介绍比较有创意呢?下面小编搜集了有创意的自我介绍,供大家参考! 我叫xx,今年xx岁,爱好是听歌和看电影, ...

  4. 6、Druid的Roll up详细介绍及示例

    Apache Druid 系列文章 1.Druid(Imply-3.0.4)介绍及部署(centos6.10).验证 2.Druid的入门示例(使用三种不同的方式摄入数据和提交任务) 3.Druid的 ...

  5. 基于bboss开发平台eclipse开发工程生成工具介绍

    为什么80%的码农都做不了架构师?>>>    基于bboss开发平台eclipse开发工程生成工具介绍 一.工具简介   bboss开发平台发布出两个资源包:  war部署包  数 ...

  6. Xilinx平台Aurora IP介绍(一)Aurora基础知识

    Aurora IP使用起来超简单的,Come On! 汇总篇: Xilinx平台Aurora IP介绍(汇总篇) 目录 一.Aurora协议 二.Xilinx平台Aurora  IP介绍 三.Auro ...

  7. Xilinx平台Aurora IP介绍(三)Aurora配置及接口介绍

    来咯来咯,搬砖全靠它! 汇总篇: Xilinx平台Aurora IP介绍(汇总篇) 目录 一.Aurora配置 1.1第一页配置 1.2第二页配置 1.3第三页配置 二.Framing接口 2.1 接 ...

  8. 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构

    全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...

  9. spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程

    徒手撸一个扫码登录示例工程 不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求.有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤 本篇示例工程,主要用到以下技术栈 q ...

  10. PID温控实验平台搭建(一)——PID基础知识介绍

    PID温控实验平台搭建 (一)PID基础知识介绍 (二)PID进阶知识介绍及源码分享 (三)从零开始搭建STM32温控实验平台 (四)PID温控系统代码讲解 (五)最终实验现象与总结 文章目录 前言 ...

最新文章

  1. h264和h265多维度区别
  2. ubuntu下移植QT基本流程
  3. 线程管理(七)守护线程的创建和运行
  4. android聚焦时如何给控件加边框,edittext设置获得焦点时的边框颜色
  5. Oracle 19.6 的有趣BUG:可能引发 CLOB 存储数据的丢失
  6. 鸿蒙OS代码正式开源!!!
  7. 光电二极管的工作原理
  8. 关于ramp texture的使用
  9. 听王自如聊蜕变历程:云计算时代如何输出价值
  10. WebStorm下载与安装
  11. 【操作系统知识】段页式存储管理
  12. Windows 11 预览版来了?
  13. VMware上win7虚拟机,连接可移动设备上出现的问题与解决
  14. 60秒的秒表c语言程序,99秒表c程序
  15. C++的四种强制转换
  16. 图像绘制到屏幕上的原理。
  17. python java c学哪个_李易峰拍青云志时胖了
  18. PAT:银行排队问题:队列
  19. TCP/IP 插口层
  20. 关于《Node-RED系列教程》

热门文章

  1. Linux:网络测试工具之 iperf3
  2. 首次!让我们出一个基于延迟的同行 IP 库数据评估来打个样~
  3. 插头DP/轮廓线DP
  4. 海康大华等传统摄像机的RTSP流通过拉转GB/T28181输出级联到国标流媒体服务平台
  5. 金庸的武侠世界和SAP的江湖
  6. 方德系统服务器,国产方德桌面操作系统介绍
  7. ios备忘录下载安卓版_iOS8备忘录
  8. python调节电脑音量_python如何调节音量大小
  9. 程序员10大修炼之道,学会这些月入百万不是梦
  10. 【自动化】Python脚本selenium库完成自动创建汇联易账号