Spartan 6 PCIE_tutorial1-Spartan 6 PCIE_V2.4 仿真教程.pdf_第1页
Spartan 6 PCIE_tutorial1-Spartan 6 PCIE_V2.4 仿真教程.pdf_第2页
Spartan 6 PCIE_tutorial1-Spartan 6 PCIE_V2.4 仿真教程.pdf_第3页
Spartan 6 PCIE_tutorial1-Spartan 6 PCIE_V2.4 仿真教程.pdf_第4页
Spartan 6 PCIE_tutorial1-Spartan 6 PCIE_V2.4 仿真教程.pdf_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Spartan 6 PCIE_V2.4 仿真教程(一)仿真教程(一) (Still.liu20151014 于深圳) 一、引言一、引言 这几天接手一个 Spartan 6 的小项目,也是要用到 PCIE,想到之前一直用 V7 系列产品的 PCIE,未尝试过别的系列的 PCIE,所以在写完代码后,也打算弄下仿真确认下。想到之前写 过几个 altera pcie 仿真的教程,所以这次边仿真的时候,也就边记录,从而形成了本文档, 供大家学习交流。 二、创建二、创建 IP 三、编译三、编译 Xilinx 的库文件的库文件 为什么有这章节呢?因为 UG 上面这样写到,考虑到很多人用的都不是 modelsim_XE 版 本,所以编译库也是很重要的,当然已经编译过的人读者可以跳过这个章节 Setting up for Simulation To run the functional simulation the Xilinx Simulation Libraries must be compiled for the user system. See the Compiling Xilinx Simulation Libraries (COMPXLIB) in the Xilinx ISE Synthesis and Verification Design Guide, and the Xilinx ISE Software Manuals and Help. Documents can be downloaded from 方法一:方法一: 1、找到开始菜单-程序-Xilinx ISE Design Suite 14.4 - ISE Design Tools - 64bit tools - Simulation Library Compilation Wizard. 其实如果使用的是 quartus,里面一样带有这个东西(上图右半部分),意思就是说,假 如你没有使用 moelsim-altera 版本,使用的是 modelsim se 版本或者 questasim 版本, 也可以类似下面我说的方法编译库, 编译好后, 基本和 modelsim-altera 版本一样使用, 当然, 取决于你安装了多少器件的库了(如下图红框部分)。 2、选择仿真使用工具,选定 Questa SimModelSim 的版本,以及指定 Questa SimModelSim 的安装路径。我使用的是 Questa Sim 10.0a,所以选定如下 3、语言选择,选择 Both VHDL and Verilog,以免后续有用到 VHDL 的 Ip 不能仿真。 4、选择支持哪些系列的芯片,看自己需要增减,全选上吧,因为整个库编译下来大概也就在 1G 左右的空间。 5、库选择,可以看到我们经常使用到的一些库,简要介绍如下: Unisim_ver:如果要做综合后的仿真,还要编译这个库。即 UNISIM,Library of Unified C omponent simulation models, 这个库用来做功能仿真。 这个库包含了 Xilinx 的所有的标准元件, 可以被绝大多数的综合工具推论。UNISIM 库被分为 VHDL 和 Verilog 两种。以 Verilog 为例:Ve rilog UNISIM 库文件中每一个元件使用一个独立的文件。根据器件的不同,这个库分为两个目录, 对于 FPGA 器件家族,源文件位置在$XilinxVerilogsrcunisims 目录下,对于 CPLD 家族,源文 件位置在$XilinxVerilogsrcuni9000 目录下。 Simprim_ver:这个库用于布局布线后的仿真。对于 Verilog 来说,这个库位于$XilinxVeril ogsrcsimprimes,对于 VHDL 来说,这个库位于$XilinxVHDLsrcsimprimes。 Xilinxcorelib_ver:这个库仅仅用来做功能仿真。 但其和 Unisim_ver 不同,如果设计中调用 了 CoreGen 产生的核,则需要编译这个库。Core Generator HDL Library models, 它包含了 适用 Core Generator 产生的各种 IP 核的仿真模型。Xilinx 的 IP 核都针对不同的器件结构作了很 好的优化,但是对于使用者来说,大部分只能够做为黑盒来 处理。对于 Verilog 来说,其对应的源 文件位置所在的位置是$XilinxVerilogsrcxilinxcorelib,对 VHDL 来说, 其对应的源文件所在 的位置是$XilinxVHDLsrcxilinxcorelib。 6、指定编译完后的库存放位置,这里作者在 Questa Sim 安装目录下新建了 xilinx_lib 的文件 夹,并指定到这里。(注意不要指向带空格的路径) 7、运行 Lauch Compile Process,即开始编译库文件,需要几十分钟。 编译完后,出现了上面的画面,虽然有 34 个错误,但是看到是 edk 里面的,考虑到我也 没有用到 edk 的什么,也没有去看为什么会报错了,然后我们到我们指定的路径下去查看编译 后的库是否真实存在: 8、右键打开 Questa Sim 目录下的 modelsim.ini 文件,先将其“只读”属性去掉。然后用工具 打开。在Library下面添加如下代码,即之前编译好的 Xilinx 库的路径。 unimacro = D:/questasim_10.0a/xilinx_lib/unimacro unimacro_ver = D:/questasim_10.0a/xilinx_lib/unimacro_ver unisim = D:/questasim_10.0a/xilinx_lib/unisim unisims_ver = D:/questasim_10.0a/xilinx_lib/unisims_ver secureip = D:/questasim_10.0a/xilinx_lib/secureip xilinxcorelib = D:/questasim_10.0a/xilinx_lib/xilinxcorelib xilinxcorelib_ver = D:/questasim_10.0a/xilinx_lib/xilinxcorelib_ver simprim = D:/questasim_10.0a/xilinx_lib/simprim simprims_ver = D:/questasim_10.0a/xilinx_lib/simprims_ver 9、 再次打开 Questa Sim, 即可以看到 Xilinx 的库已经默认出现在了库列表里。 以后仿真 Xilinx 的 IP 核时,就不用每次都添加库了。 方法二:方法二: 1)当然是安装 ModelSim 和 ISE 。 2)将 ModelSim 根目录下的 modelsim.ini 文件的只读属性去掉。 3)在 ModelSim 命令窗口输入:compxlib s mti_se arch all l vhdl w lib all 按回车键即可。 说明: 上述命令行中的 vhdl 表示 vhdl 语言, 如将此处改为 verilog, 则生成 verilog 的库。 4)将 ModelSim 根目录下的 modelsim.ini 文件设为只读。 完成上述步骤,重新启动 modelsim,即可在 libarary 栏中看到已生成的 Xilinx 库 四、四、PIO 例子的仿真例子的仿真 1,看 UG, ug672_S6_IntEndptBlock_PCIe.pdf UG 里面没有提到什么特别需要注意的地方,也不需要修改什么参数,那我们就可以放 心去 questasim 里面跑仿真了。值得一提的是,UG 里面给出了 example 的整个架构图,里 面我们可以汲取的信息是, 我们可以通过test_program来改变测试case, 而且可以通过output logs 打印输出信息,进而避免了我们查阅的时候,一直盯着波形看,考虑到 TLP 包有比较多 的组成方式,所以打印出 TLP 的字段信息,有利于我们结合 TLP 格式快速了解读写过程。 2,操作 废话了很久,直接进入正题: 刚运行就报错了,着实郁闷的,但是我们的原则是,有错误咱们就分析定位,解决就好 了,而不是束手不行动。 可以看到,在报错的这一行里面,需要的有效信息是为仿真提供这个 glbl.v 文件,报错 的信息其实是个相对路径,和我们的环境变量设置之类的有点问题,但是我们可以在 xilinx 的安装路径下轻易找到 glbl.v 文件,那么我们就修改下这个相对路径,直接来个绝对路径即 可。 修改后如下: 然后再运行下,发现没有报错了,让程序运行一会儿,你可以看到打印信息如下: 结论为 test passed,不过看这个样子只写了以此数据就没有继续进行测试了,如果想要 更复杂的,那么可以自己写 test_case 了。 五、波形分析五、波形分析 Xilinx 这点做的比较好,给出了主要的信号并提供了 wave.do,这其实也是大部分用户 所关心的信号。 重点分析信号:重点分析信号: (1)状态信号 Link_up:发现在 20.23112us 时拉高了,表明 pcie 链路建立成功了,可以进行通信了。 (2)AXI RX 信号 看不明白, 好吧, 手把手示范, 看了下面这个应该能懂吧, 估计还是有些人不懂, 算了, 把家底都给掏出来给你们看了: 根据 fmt 和 type 字段的数据,我们可以看出 MWr,还是 3DW head 的,写的数据长度 是 1,即 4 字节,写的地址是 0x00000010,写的数据是 0x04030201,写入的地方是 BAR0, 整个过程中 rerr_fwd 为低,表示没有出错。 附,几个关键的字段释义: (3)AXI TX 信号 根据 fmt 和 type 字段的数据,我们可以看出是 Cpld 操作,还是 3DW head 的,读回的 数据长度是 1,即 4 字节,读的地址是 0x00000010,读出的数据是 0x04030201,即我们把 刚才写入 0x00000010 地址的数据读出,发现确实是刚才写入的 0x04030201,所以脚本判断 程序才会出现 test_passed 的结论,从波形上我们再一次验证了这个。 (4)为什么会有 Cpld 报文? 看到上面的,你可能会问为什么会在AXI_TX方向上出现Cpld报文,原因很简单,肯定是 有请求,而且PCIE协议规定,如果设备发起端发出一个NonPosted 请求,在一定时间后,接 收端需要回复一个完成包给发起端,如果不回复可能会遇到特别的情况,例如蓝屏。 Posted 请求就好理解了,不需要回复完成包给发起端,如上面的 MWr 就是 Posted 请求。 再看波形会发现,果然在 MWr 操作后面还有一小段: 根据 fmt 和 type 字段的数据,我们可以看出是 MRd 操作,还是 3DW head 的,读的地 址是 0x00000010,要读出的数据长度是 0x

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论