No_16_0328 Virtex6 PCIe2.5 仿真学习
来源:互联网 发布:网络与信息安全论文 编辑:程序博客网 时间:2024/06/05 04:08
- 参考资料:
- Spartan 6 PCIE_V2.4 真教程(一)
- 菜鸟5小时速成FPGA_PCIE设计高手教程.pdf
- ug671_V6_IntBlock_PCIe.pdf
一、Virtex6-250T的PCIe IP核设置
首先选择
2.5版
IP核
第1页:参数设置
- 注意 Lane Width 选择 X4
- 注意 Link Speed 选择 2.5GT/s
- 注意 Frenquency(Mhz) 125Mhz,此时钟为给用户使用的
trn_clk
用户事务时钟。
- 第2页:BAR空间设置
- 第3页: ID号设置
- 注:DeviceID可修改,但需上位机配合
- 注:DeviceID可修改,但需上位机配合
- 第4页:默认不变
- 第5页:默认不变
- 第6页:默认不变
- 第7页:默认不变
- 第8页:默认不变
- 第9页:默认不变
- 第10页:默认不变
- 第11页:选择GTX参考时钟
- Reference Clock Frequency: 选择250Mhz(根据AD9516设置)
- Frequency可选项如下:
- Reference Clock Frequency: 选择250Mhz(根据AD9516设置)
二、 简单仿真测试
(一)一些小问题的解决
报错一:找不到XILINX路径
- 解决方案:配置系统
环境变量
报错二:找不到tests.v文件路径(也可能不报错)
* 解决方案:修改pcie_exp_usrapp_tx.v
文件中tests.v
的路径如下:
- 成功后如下图:
(二)波形分析
包格式说明
包头格式说明
Fmt与Type格式说明
Posted 与 Non_Posted包
Non_Posted
:设备发起端发出一个 Non-Posted 请求,在一定时间后,接收端需要回复一个完成包
给发起端,如果不回复可能会遇到特别的情况,例如蓝屏。Posted
:不需要回复完成包
给发起端。
PIO方式 接收 时序图
- 信号说明:
m_axis_rx_tlast
: 包结束标志,与m_axis_rx_tvalid
一起生效。m_axis_rx_tdata
: 接收数据,当m_axis_rx_tvalid
为高时,数据有效。m_axis_rx_tkeep[7:0]
:决定64bit数据中哪些bit为有效。某位为高时,表示对应的8位数据有效。m_axis_rx_tvalid
:表示PCIe核提供了有效数据在m_axis_rx_tdata
。m_axis_rx_tready
:表示用户准备好接收来自m_axis_rx_tdata
的数据,此信号必须与m_axis_rx_tvalid
同时作用才有效。trn_rerr_fwd
:为高正常,为低表示传输出错。
第一包数据:
- 由上图可知:当
m_axis_rx_tvalid
拉高的同时数据到来。- 数据包为
MWr
(存储器写请求),Posted
包 - 包头3DW,
- 数据长度为1(4字节),
- 写地址为0x00000004(Byte)
- 写入数据为0x04030201
- 写入空间为:BAR0
trn_rerr_fwd
始终为高,没有出错。
- 数据包为
* 第一包数据的结尾:
* 观察可知当m_axis_rx_tready
再次拉高后的下一个时钟m_axis_rx_tvalid
、m_axis_rx_tlast
同时拉低。
第二包数据
* 由上图可知:当 m_axis_rx_tvalid
拉高的同时数据到来。
* 数据包为MRd
(存储器读请求),Non-Posted
包需要返回一个完成包
。
* 包头3DW,
* 读取长度为1(4字节),
* 读地址为0x00000004(Byte)
* 读取空间为:BAR0
* trn_rerr_fwd
始终为高,没有出错。
PIO方式 发送 时序图
* 由上图可知:当 m_axis_tx_tvalid
拉高的同时数据到来。
* 数据包为Cpld
(完成包)。
* 包头3DW,
* 读回长度为1(4字节),
* 读地址为0x00000004(Byte)
* 读取空间为:BAR0
* 读出的数据:0x04030201,即我们把刚才写入0x00000010地址的数据读出,发现确实是刚才写入的0x04030201,所以脚本判断程序才会出现test_passed的结论。
问题: 如何判断出读的地址是0x000000010 ?
1 0
- No_16_0328 Virtex6 PCIe2.5 仿真学习
- Virtex6 PCIe 超简版基础概念学习(一)
- Virtex6 PCIe 超简版基础概念学习(二)
- xilinx EDK11.5 在virtex6 ML605上的LED程序
- Simulink学习笔记5--Simulink仿真设置
- 学习使用SkyEye仿真
- 学习使用SkyEye仿真
- 学习使用SkyEye仿真
- 蒙特卡洛仿真学习
- PROTEUS仿真学习目录
- 学习使用SkyEye仿真
- modelsim仿真学习笔记
- modelsim 仿真学习--思想
- Repast仿真学习
- DM8168的PCIE2.0使用笔记
- DM8168的PCIE2.0使用笔记
- 我的仿真学习之一
- 收藏:学习使用SkyEye仿真
- EnumProcess
- Eclipse c/c++开发环境搭建
- oracle字段拆分:REGEXP_SUBSTR 和 字段合并 wm_concat
- php 计算程序的执行时间
- string与wstring转换
- No_16_0328 Virtex6 PCIe2.5 仿真学习
- C# .net 抓取网页内容
- java变量
- iOS 进阶之路 2
- mysql 将null转代为0(以及一些特殊用法)
- SQL 语句中 表与条件顺序 与效率
- 通过maven构建一个java项目
- ORM框架分析之DB到Entity的映射(三)
- 【BZOJ4196】[Noi2015]软件包管理器【树链剖分】【线段树】