Xilinx平台SRIO介绍(五)示例工程Example Design介绍
理解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,等内容,自行验证。就不再啰嗦了。
为了对初学者友好,很多地方进行简化处理。建议在基本了解的情况下,再自行详细研究。
前面已经说过,要发送自己的数据,有两种方法:
- 修改请求产生模块,添加自己的数据和事务类型;
- 设计自己的发送/接收模块。
Example Design一堆.v文件是不是看着很不爽,删掉删掉!使用我们自己的发送/接收模块,两个字:清爽,简单!
OK,咱们下期见。
Xilinx平台SRIO介绍(五)示例工程Example Design介绍相关推荐
- Xilinx FPGA平台GTX简易使用教程(五)GTX收发测试及示例工程介绍
GTX IP配置完了,你不得搞个回环测试一番? 汇总篇: Xilinx FPGA平台GTX简易使用教程(汇总篇) 目录 前言 一.示例工程Example Design 1.1 gtx_support模 ...
- Xilinx平台Aurora IP介绍(汇总篇)
Aurora IP核使用超简单的,COME ON! 目录 一.Xilinx平台Aurora IP介绍(一)Aurora基础知识 二.Xilinx平台Aurora IP介绍(二)时钟与复位 三.Xili ...
- 新颖的自我介绍_有创意的自我介绍五篇
第1篇:有创意的自我介绍五篇 一个成功自我介绍可以给人留下一个好印象.那么,怎么来说,怎么自我介绍比较有创意呢?下面小编搜集了有创意的自我介绍,供大家参考! 我叫xx,今年xx岁,爱好是听歌和看电影, ...
- 6、Druid的Roll up详细介绍及示例
Apache Druid 系列文章 1.Druid(Imply-3.0.4)介绍及部署(centos6.10).验证 2.Druid的入门示例(使用三种不同的方式摄入数据和提交任务) 3.Druid的 ...
- 基于bboss开发平台eclipse开发工程生成工具介绍
为什么80%的码农都做不了架构师?>>> 基于bboss开发平台eclipse开发工程生成工具介绍 一.工具简介 bboss开发平台发布出两个资源包: war部署包 数 ...
- Xilinx平台Aurora IP介绍(一)Aurora基础知识
Aurora IP使用起来超简单的,Come On! 汇总篇: Xilinx平台Aurora IP介绍(汇总篇) 目录 一.Aurora协议 二.Xilinx平台Aurora IP介绍 三.Auro ...
- Xilinx平台Aurora IP介绍(三)Aurora配置及接口介绍
来咯来咯,搬砖全靠它! 汇总篇: Xilinx平台Aurora IP介绍(汇总篇) 目录 一.Aurora配置 1.1第一页配置 1.2第二页配置 1.3第三页配置 二.Framing接口 2.1 接 ...
- 2021年大数据Hadoop(二十五):YARN通俗介绍和基本架构
全网最详细的Hadoop文章系列,强烈建议收藏加关注! 后面更新文章都会列出历史文章目录,帮助大家回顾知识重点. 目录 本系列历史文章 前言 YARN通俗介绍和基本架构 Yarn通俗介绍 Yarn基本 ...
- spring boot 自动跳转登录页面_徒手撸一个扫码登录示例工程
徒手撸一个扫码登录示例工程 不知道是不是微信的原因,现在出现扫码登录的场景越来越多了,作为一个有追求.有理想新四好码农,当然得紧跟时代的潮流,得徒手撸一个以儆效尤 本篇示例工程,主要用到以下技术栈 q ...
- PID温控实验平台搭建(一)——PID基础知识介绍
PID温控实验平台搭建 (一)PID基础知识介绍 (二)PID进阶知识介绍及源码分享 (三)从零开始搭建STM32温控实验平台 (四)PID温控系统代码讲解 (五)最终实验现象与总结 文章目录 前言 ...
最新文章
- h264和h265多维度区别
- ubuntu下移植QT基本流程
- 线程管理(七)守护线程的创建和运行
- android聚焦时如何给控件加边框,edittext设置获得焦点时的边框颜色
- Oracle 19.6 的有趣BUG:可能引发 CLOB 存储数据的丢失
- 鸿蒙OS代码正式开源!!!
- 光电二极管的工作原理
- 关于ramp texture的使用
- 听王自如聊蜕变历程:云计算时代如何输出价值
- WebStorm下载与安装
- 【操作系统知识】段页式存储管理
- Windows 11 预览版来了?
- VMware上win7虚拟机,连接可移动设备上出现的问题与解决
- 60秒的秒表c语言程序,99秒表c程序
- C++的四种强制转换
- 图像绘制到屏幕上的原理。
- python java c学哪个_李易峰拍青云志时胖了
- PAT:银行排队问题:队列
- TCP/IP 插口层
- 关于《Node-RED系列教程》