PCIE_DMA:xapp1052学习笔记
Moselsim仿真:

EP为Endpoint部分实现代码,即例程主代码。其他的是搭建的仿真环境,主要目的是仿照驱动的行为,将PCIE软核用起来,主要是做PC端的行为仿真,如DMA配置,DMA读写操作及主时钟,复位等。加入testbench后结构如上图。
board:顶层文件+系统复位
RP:Root complex的部分。其中rport就是PCIE端口部分;rx_usrapp是RX部分,负责发送数据;tx_usrapp是TX部分,负责接收数据;cfg_usrapp是配置部分,配置读写使能,错误控制等,还有一些常用的任务方便其他模块调用;com_usrapp是加载RX/TX文件,把RX/TX的数据以dat文件形式保存,需要时加载/覆盖。pl_usrapp物理层控制和状态部分。
CLK_GEN_RP/EP:分别是两个端口的时钟产生信号。
其实EP和RP的结构很像的,基本都是对应的关系,所以理解起来工作量不是很大。
语法笔记:
因为CLK_GEN_RP/EP很简单,没有什么扒的必要,所以分分钟掠过了。接下来是对RP(testbench)的一些平时没见过的语法的笔记。
1.module xxx #(
parameter xxxx1 = xx,
parameter xxxx2 = xx,
......
)
(
input xxxxxx,
output xxxx,
.......
);
这个是正常的模块定义。其中前面一个括号是为参数传递准备的定义,后面那个括号就是常见的输入输出端口定义。
xxx #(
.xxxx1 ( xx),
.xxxx2 (xx),
......
)
module_usrname(
.xxxxxx(xxxxxxx),
.xxxx(xxxx),
.......
);
这个是调用模块xxx的语句,其中前面一个括号用于参数传递,后面一个括号用于输入输出端口的引用。
2.rport中,对RP的BAR0-BAR5有明确的定义需要记录下:
BAR0 = 32'hffffff00,
BAR1 = 32'hffff0000,
BAR2 = 32'hffff000c,
BAR3 = 32'hffffffff,
BAR4 = 32'h00000000,
BAR5 = 32'h00000000,
3.rx_usrapp中的output分别是trn_rdst_rdy_n和trn_rnp_ok_n,这两个信号是由ramdom产生的。不过原来的代码里面trn_rdst_rdy_n是始终为0的,实际加入DMA操作的时候可以用trn_rdst_rdy_toggle_count来控制使其有效。其中的状态机通过调用usrapp_com中的任务来进行RX中数据的store。
4.调用TASK方法:
eg: board.RP.com_usrapp.TSK_READ_DATA(0, `RX_LOG, trn_rd, trn_rrem_n);——是指调用board-RP-com_usrapp里面的 TSK_READ_DATA任务,其中括号里面的是传递变量,按照usrapp里面TSK_READ_DATA定义里面的input顺序来传递变量。
5.$value$plusargs:将运行命令(run-options)中的参数值传递给指定的信号或者字符
用法:
if ($value$plusargs("TESTNAME=%s", testname))
$display("Running test {%0s}......", testname);
则,当使用的运行命令为:<run-options>+TESTNAME=tst_name时,运行结果为:Running test {tst_name}......
6.如果想把DMA功能用起来,自行调用pci_exp_usrapp_tx.v中的函数,往DMA控制寄存器中写入地址、长度等数据,然后启动DMA读或者写。
PCIE_DMA:xapp1052学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- 4_5 追踪电子表格中的单元格(UVa512)(选做)
在电子表格中的数据都存储在单元格中,它是按行和列(R)(C).一些在电子表格上的操作可以应用于单个单元格(研发),而其他的可以应用于整个行或列.典型的单元操作包括插入和删除行或列和交换单元格内容.一些 ...
- Spring Boot 集成 Swagger2 教程
上篇讲过 Spring Boot RESTful api ,这篇简单介绍下 SwaggerUI 在 Spring Boot 中的应用. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可 ...
- Spring Boot Security 使用教程
虽然,我在实际项目中使用的是 shiro 进行权限管理,但 spring boot security 早已大名鼎鼎,虽然他的入门要相对复杂一点,但是设计视乎更加吸引人. 本章节就是以一篇快速入门 sp ...
- Qt应用程序的打包
Windows系统下打包: qt用realse版本编译然后打包发行 debug编译后的文件比realse版本大很多先在编译好的debug或者realse执行程序的目录下将执行该城西对应的所有dell文 ...
- Mac下MyEclipse安装及破解
一.安装MyEclipse 去 官网下载MyEclipse ,我这里下载的是最新版MyEclipse 2017 CI 5,安装之后不要立即打开,不然会导致后面破解失败. 二.破解 1.下载破解文件,亲 ...
- %E3%80%90%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E3%80%91
"%3Cdiv%20class%3D%22htmledit_views%22%20id%3D%22content_views%22%3E%0A%20%20%20%20%20%20%20%20 ...
- Jquery实现ajax常用属性
- MVC集合ModelBinder
使用腳本提交集合类时,MVC binding public class FormExtensionValueProviderFactory : ValueProviderFactory { publi ...
- 基于Struts2+Hibernate开发小区物业管理系统 附源码
开发环境: Windows操作系统开发工具: MyEclipse+Jdk+Tomcat+MySql数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mo ...
- 设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding
1 课程讲解 1.1 定义 1.2 特质 1.3 重点 2 代码演练 2.1 反例 2.2 正例 1 课程讲解 1.1 定义 定义:一个对象应该对其他对象保持最少的了解.又叫最少知道原则. 1.2 特 ...