Vivado vc707 pcie传输实验(超详细)

所需工具:
1、 Vivado2017.1
2、 WinDriver12.7
3、 VC707开发平台
4、 带PCIE插槽的台式机

第一部分:固化程序实现

新建一个工程:pcie_x8_64(过程不再赘述),工程建好如下:
Vivado vc707 pcie传输实验(超详细)_第1张图片
点击左边窗口PROJECT MANAGER下的 IP Catalog,在搜索框中搜索pcie,
Vivado vc707 pcie传输实验(超详细)_第2张图片
选中第一个。
Vivado vc707 pcie传输实验(超详细)_第3张图片
按图中所示设置,Lane Width选择X8 2.5GT/s,不要选择5.0GT/s,否则就只能选择128bit的 AXI interface Width;这个位宽在我自己用WinDriver 测试的时候没通过。
Vivado vc707 pcie传输实验(超详细)_第4张图片
然后切换到BARs 标签页,按图中设置即可(只用了BAR0),当然设置其他值也是可以的,为了简便就这样设置。所谓BAR空间是指基本寄存器空间,它是PCIE端设备(EP)和根设备(RC)进行数据交换时数据存储的空间。在本实验中RC指的是电脑。在EP和RC正确连接之后,EP端设置的BAR空间将会映射到RC端,通过驱动程序可以清楚地看到BAR空间的大小以及起始地址,在RC端对BAR空间进行的一系列操作都会通过映射反映到EP端;例如,通过驱动程序向BAR空间的某一个地址内写数据,该数据就会通过PCIE链路将该数据写入EP端的BAR空间相应的地址。其他的选项均不用修改,保持默认即可,点击OK,点击Generate,等待生成IP Core。等到屏幕右上角绿色的圈圈转完了就可以生成完整的IP Core。
Vivado vc707 pcie传输实验(超详细)_第5张图片
可以看到在source下面生成了我们的IP Core。这里我们需要新建另一个工程,这个工程是Xilinx官方提供的PIO例程,用这个例程可以做本次实验。右键点击IP Core:
Vivado vc707 pcie传输实验(超详细)_第6张图片
选择 Open IP Example Design 出来的内容点击OK就行了,这样vivado就会自动为你创建一个新的工程,我们可以关闭原来的工程,新工程如下所示:
Vivado vc707 pcie传输实验(超详细)_第7张图片
可以看到source下面多了很多的文件,我们找到PIO_RX_ENGINE.V文件,打开:
Vivado vc707 pcie传输实验(超详细)_第8张图片
这个文件就是接收数据的,我们需要将这里面的input信号添加到design debug中(ISE叫chipscope)并抓取传输过来的数据。添加信号的方法网上有很多,这里我们直接给信号添加约束来实现,在Xilinx官方文档ug908里面有详细的介绍:
在这里插入图片描述
Vivado vc707 pcie传输实验(超详细)_第9张图片
添加完约束之后,信号就会自动出现在ILA信号添加窗口中。
现在我们点击左面板的Run Synthesis 等待综合完成。
Vivado vc707 pcie传输实验(超详细)_第10张图片
点击Cancel。展开 Run Synthesis下面的 Open Synthesized Design
Vivado vc707 pcie传输实验(超详细)_第11张图片
点击Set Up Debug,出现如下窗口:
Vivado vc707 pcie传输实验(超详细)_第12张图片
这里包含了我们在程序里面约束的信号,我们需要给这些信号分配时钟域,全选中这些信号,点击没有问号的方波形状
Vivado vc707 pcie传输实验(超详细)_第13张图片
这里我们选择下拉窗口中的LOCAL CLOCK。当选择GLOBAL CLOCK时,会出现时序违规,导致implement失败。
Vivado vc707 pcie传输实验(超详细)_第14张图片

选择clk_250mhz,点击Next,
Vivado vc707 pcie传输实验(超详细)_第15张图片
如图所示选择采样深度,根据BRAM大小来选取。点击Next,点击Finish,
Vivado vc707 pcie传输实验(超详细)_第16张图片
这里我们在Debug面板下选择
Vivado vc707 pcie传输实验(超详细)_第17张图片
将m_axis_rx_tvalid信号设置为触发信号,其余信号设置为data信号。
然后直接点击左面板的Generate Bitstream,产生bitstream文件,然后再把这个文件转换为.mcs文件,这个文件就是固化进flash中的文件,也只有将程序固化进vc707中才能进行pcie传输。
Vivado vc707 pcie传输实验(超详细)_第18张图片
点击各种yes ok,等待生成bitstream文件。
等待很长时间之后,出现如下界面:
Vivado vc707 pcie传输实验(超详细)_第19张图片
我们直接点击Generate Memory Configuration File,点击OK。
Vivado vc707 pcie传输实验(超详细)_第20张图片
按如图选择flash型号,生成文件存放地址,建议存放在工程目录下,然后找到先前生成的.bit文件,其他默认,点击OK。等待ing
Vivado vc707 pcie传输实验(超详细)_第21张图片
点击OK
然后打开target,选择Auto Connect,这个时候就要给板子上电了。
Vivado vc707 pcie传输实验(超详细)_第22张图片
Vivado vc707 pcie传输实验(超详细)_第23张图片
添加我们的flash
Vivado vc707 pcie传输实验(超详细)_第24张图片
点击OK
Vivado vc707 pcie传输实验(超详细)_第25张图片
点击OK
Vivado vc707 pcie传输实验(超详细)_第26张图片
这里选中我们之前生成的.msc文件和.prm文件(自动生成的),点击OK
等待写入flash完成。

第二部分:传输实验过程

首先在电脑上安装WinDriver(我用的是12.7,没有破解的,可以免费用30天)软件,这是一款可以在Windows环境下进行驱动开发的软件。
要想电脑能够识别并且产生Xilinx PCIE驱动程序,必须遵循一定的PCIE板卡插拔顺序。即:首先关闭电脑,插入已经固化程序的PCIE板卡,启动PCIE板卡,然后启动电脑。若开发板中没有固化PCIE代码,那么即使顺序对了也找不到设备。这时打开WinDriver软件就可以找到Xilinx的PCIE设备。如图所示:
Vivado vc707 pcie传输实验(超详细)_第27张图片
选中该设备,右上角点击Generate .INF file
可以选择Automatically install the .INF file
Vivado vc707 pcie传输实验(超详细)_第28张图片
点击Next,保存到相应的路径即可。最后在设备管理器中安装生成的驱动程序。
安装完成后,双击Xilinx设备:
Vivado vc707 pcie传输实验(超详细)_第29张图片
然后按照下图1,2步骤
Vivado vc707 pcie传输实验(超详细)_第30张图片
Vivado vc707 pcie传输实验(超详细)_第31张图片
通过上面这个图就可以对FPGA的BAR空间进行读写操作。
现在我们打开关闭电脑前的工程。直接打开Target,如下图所示,上次设置的designer debug直接出现
Vivado vc707 pcie传输实验(超详细)_第32张图片
点击下图画圈的地方,添加我们的触发信号,并设置触发条件为1,就是说当数据有效的时候触发采集:
Vivado vc707 pcie传输实验(超详细)_第33张图片
Vivado vc707 pcie传输实验(超详细)_第34张图片
Vivado vc707 pcie传输实验(超详细)_第35张图片
点击上图的小圆圈,等待触发。
Vivado vc707 pcie传输实验(超详细)_第36张图片
这里我设置数据为64位,16进制11111111,然后点击Write,观察vivado中的波形
Vivado vc707 pcie传输实验(超详细)_第37张图片
我们可以看到数据已经收到了,将波形放大:
Vivado vc707 pcie传输实验(超详细)_第38张图片
稍微解释一下接收到的数据,图中的数据为m_axis_rx_data[63:0] = 000000ff40000002 11111111f6000000 6as4a711111111
对比一下下面的存储器读写TLP报文头格式
Vivado vc707 pcie传输实验(超详细)_第39张图片
用pcie进行数据传输的时候要注意数据的大小端转换,格式中Byte0~Byte3对应的低32位也就是m_axis_rx_data[31:0], Byte4到Byte7对应的是高32位也就是m_axis_rx_data[64:32]. 也就是说000000ff40000002中40000002对应Byte0到Byte3,转换成二进制前八位是01000000,就是存储器写请求,而length的长度为2,表示有两个DW(因为我们发的64位数据)。
这个WinDriver除了可以这样简单的使用以外,还可以用它来生成VS工程,这样方便我们进行进一步的开发。如下图:
Vivado vc707 pcie传输实验(超详细)_第40张图片

或者我们找到WinDriver的安装路径,发现里面有一个Xilinx的文件夹,里面包含了进行PCIE传输实验所需的用户层驱动程序。
Vivado vc707 pcie传输实验(超详细)_第41张图片
这里使用的是2013的文件夹,进去之后运行程序。若是PCIE板卡未能正确识别,则出现如下对话框:
Vivado vc707 pcie传输实验(超详细)_第42张图片
否则出现如下对话框:
Vivado vc707 pcie传输实验(超详细)_第43张图片
图中可以看到PCIE设备的各种信息。包括BAR空间的信息。
可以根据上面的信息进行操作,同样可以传输数据。
最后:用ISE14.7进行开发也是一样的,步骤大致相同,都是先生成IP核,固化程序,插卡顺序等都是一样的,只是具体的操作细节不一样。

在我的另一篇博文
Vivado pcie DMA传输实战中使用xapp1052这一官方程序实现了DMA传输,解决了xapp1052中存在的数据存储和乱序的问题,并着重讲解了如何解决数据乱序问题

你可能感兴趣的:(实现过程记录)