PCIe_XAPP859_学习笔记(1)_待更新上课讲义

上传人:go****e 文档编号:137408439 上传时间:2020-07-08 格式:DOC 页数:9 大小:46KB
返回 下载 相关 举报
PCIe_XAPP859_学习笔记(1)_待更新上课讲义_第1页
第1页 / 共9页
PCIe_XAPP859_学习笔记(1)_待更新上课讲义_第2页
第2页 / 共9页
PCIe_XAPP859_学习笔记(1)_待更新上课讲义_第3页
第3页 / 共9页
PCIe_XAPP859_学习笔记(1)_待更新上课讲义_第4页
第4页 / 共9页
PCIe_XAPP859_学习笔记(1)_待更新上课讲义_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《PCIe_XAPP859_学习笔记(1)_待更新上课讲义》由会员分享,可在线阅读,更多相关《PCIe_XAPP859_学习笔记(1)_待更新上课讲义(9页珍藏版)》请在金锄头文库上搜索。

1、PCIe_XAPP859_学习笔记(1)_待更新精品文档TX Engine发送器负责发送并传输posted,non_posted和完成包。本参考设计可以产生并传输MWR,MRd和完成包,用来满足存储器读和DMA写请求。消息和错误报告包,如不在支持范围内的请求,完成包超时和中断请求。都由硬核通过一定的信号机制产生。因此不需要用户逻辑去产生与这些类型的TLPs相对应的header;用户逻辑只需要监视这些情况是否发生了,一旦他们其中之一发生了,便通知硬核。完成包超时的逻辑在本参考设计中将不会涉及到。另外,I/O包在本参考设计中也不予支持。数据包依靠来自 DMA Control/Status Regi

2、ster File的请求而产生,它们通过 TRN的TX接口被传输到硬核上。Posted Packet GeneratorPosted包生成器接受来自DMA Control/Status Register File的写DMA请求,并产生可以用来完成本次写DMA操作的header。这些包头被放置在一个小的FIFO中,以便被TRN状态机读取。该生成器由两个模块组成:l Posted包分割器l Posted合成器Posted包分割器分割器从DMA Control/Status Register File 接受写DMA请求,并根据PCIe总线协议把这些请求分割成多个数据包。实际上,该分割器按照以下两个原

3、则对写DMA请求进行分解:l 包的有效载荷长度不能超过设备控制寄存器中的Max_Payload_Size。l 地址/数据的组合不能超过4KB地址界限。分割器利用简单的握手协议把长度(Length9:0)和地址(dmawad_reg63:0)传给posted Pactet Builder。源和目的地址必须分布在128字节的地址界限内。Receive TRN State Machine事务层数据接收状态机模块执行以下功能:l 接收来自PCIe事务层的数据,并在需要的时候把事务层接口throttlel 传输64位的数据以及字节有效位l 传输 data_valid位,用来对数据和字节使能l 解码,寄存

4、和验证包头信息在实现中,64bit宽度的数据直接连接到 memory fifo 上,并有data_valid信号用来标示数据的可写入性。这样做的原因是因为所有的完成包数据都要被存储到DDR中。在数据含有多重目的地址的情况下,用来驱动数据的额外的解码功能是必需的。例如,在一个 SG-DMA或者链式DMA设计中,完成包数据需要被传送到多个地址中。这时候,来自PCIe的 bar_hit信号利于数据的路由和写入。/源代码注释/ Purpose: Receive TRN Data FSM. 1、 This module interfaces to the Block Plus RX TRN. It pr

5、esents the 64-bit data from completer and and forwards that data with a data_valid signal. 这个模块与RX 事务层接口相连接。它接收来自完成包的64bit宽的数据,并把它们向后传输,data_valid信号用来标示信号的有效性。2、 This block also decodes packet header infomation and forwards it to the rx_trn_monitor block. 这个模块还对包头进行解码并把它们传送给模块 rx_trn_monitor。Receive

6、 TRN Monitor事务接收监测模块执行以下功能:l 读取the read request RAM内容并检测何时读事务完全完成l 利用the read request RAM中目的地址信息和完成包头中的长度信息计算DDR2的目的地址。l 计算何时读DMA被完成并通知DMA Control/Status Register Filel 为每一个完成接收到的完成包向receive memeory Data finit State Machine提供地址和传输大小。/代码注释/ Purpose: Receive TRN Monitor module. This module interfaces

7、to the DMA/ Control/Status Register File and the Read Request Fifo to determine when a / DMA transfer has completed fully. This module could also monitor the TRN/ Interface to determine any errors./ Reference: XAPP859/ Revision History:/ Rev 1.0 - First created, Kraig Lund, Apr. 1 2008./ Rev 1.1 - C

8、hanged the rd_dma_done_early comparison number to 0x0B0 (was/ 0x070) for improved data throughput utilization, Kraig Lund, June 10th,/注释解释该模块连接DMA Control/Status Register File和the read Request Fifo并决定一个DMA传输结束;该模块也可以检测TRN接口,判断错误。Receive Memory Data FSMreceive memory data FSM执行以下两个任务: Arbitrates for

9、control of the DMA-to-DDR2 interface block Reads data and transfers information from the data and Xfer TRN memory FIFOs and forwards it to the DMA-to-DDR2 interface blockData TRN Memory FIFO and Xfer TRN Memory FIFOData TRN memory FIFO 和 Xfer TRN Memory FIFO一起工作,data memory FIFO 有两项功能,第一,他把接收到的完成包数据

10、暂存起来,第二,他把64位的数据转换为128位;Xfer TRN memory 保存着起始地址和传输大小信息。每一个Xfer TRN memory的描述行都要有响应的数据与之对应。DMA Control and Status WrapperDMA控制和状态文件夹是与PC处理器通信和对DMA操作进行控制的主要模块。该文件夹有以下两个逻辑块组成:l DMA控制/状态寄存器组l 内部控制逻辑本参考设计中的逻辑单元支持在一次DMA传输中最多传输4KB数据。它包括posted包分割器,non_posted包分割器和DMA-DDR2接口模块。想要通过该硬件实现传输大小超过4KB的数据量,必须把较大的DMA

11、数据块进行分割,分割成DMA传输可以支持的数据大小。DMA控制状态寄存器组和内部控制模块共同合作来完成传输大小超过4KB的数据块。DMA控制/状态寄存器组提供以下功能:l 利用一个基址寄存器(BAR0),以一个简单的寄存器文件的形式,提供了一个内存映射到主系统的接口。l 接收读/写DMA传输请求最大数据量为1MB。l 把DMA传输大于4KB的数据量分解成小的DMA传输块,并把这些小的传输块送到内部控制块中。内部控制块提供以下功能:l 接收来自DMA控制/状态寄存器组模块的最大数据量为4KB 的DMA读写请求。l 提供与RX和TX的控制接口着两个模块的细节描述如下:DMA Control/Sta

12、tus Register FileDMA控制和状态寄存器组是被映射并与用户应用逻辑相连的存储单元。主处理器通过读写总线来访问这些存储器组。端点模块的基址寄存器有利于访问DMA控制和状态寄存器组。DMA操作被定义在DMA控制和状态寄存器组里。主处理器通过初始化寄存器组来发起一次DMA事务。DMA完成通过状态寄存器通知主处理器。所有寄存器都是32bit可读写的,除非有特殊说明。l DMAWAS0x00 DMA写操作时,DDR2的源地址;l DMAWAD_L 0x04 DMA写操作时,主存储器的低32bit地址;l DMAWAD_U0x08DMA写操作时,主存储器的高32bit地址;l DMARAS

13、_L0x0CDMA读操作时,主存储器的低32bit地址;l DMARAS_U0x10DMA读操作时,主存储器的高32bit地址;l DMARAD0x14DMA读操作时,DDR2的源地址;l DMAWXS0X18DMA写操作时,传输大小;l DMARXS0x1CDMA读操作时,传输大小;l 保留位0x20 保留;l 保留位0x24 保留;l DMACST0x28DMA控制和状态寄存器,控制位为只写寄存器,状态位为只读。l 保留位0x2C 保留;l DMAWRP0x30DMA写操作时,写计数器;l DMARDP0x34DMA读操作时,读计数器;PC主处理器做以下操作用来执行DMA写操作:l 验证D

14、MA写操作开始位DMACST0为0;l 根据用户在ML555GUI上填入的DMA传输请求选项,向寄存器DMAWAS,DMAWAD_L,DMAWAD_U和DMAWXS写入合适的值。l 向DMACST0位写入1,用来启动DMA写传输。l 监测写DMA完成位DMACST1,确定当前写DMA过程何时完成。l 根据用户要求的传输大小和寄存器组中只读计数器的值,计算DMA写过程的效率。并把结果输出到GUI窗口上。PC主处理器做以下操作用来执行DMA读操作:l 验证DMA读操作开始位DMACST2为0;l 根据用户在ML555GUI上填入的DMA传输请求选项,向寄存器DMARAS_L,DMARAS_U,DM

15、ARAD和DMARXS写入合适的值。l 向DMACST2位写入1,用来启动DMA读传输。l 监测读DMA完成位DMACST3,确定当前读DMA过程何时完成。l 根据用户要求的传输大小和寄存器组中只读计数器的值,计算DMA读过程的效率。并把结果输出到GUI窗口上。全双工的DMA传输可以通过同时向DMACST0和DMACST2写入1来实现。为了保持传输和接收链路一直为满,硬件需要一直监测链路状态。对于全双工传输4KB或者以下的大小,典型的做法是,FPGA端硬件要执行8个non_posted读接着执行8个posted写。当数据量大于4KB时,全双工的传输的方式就变得不固定。PC主处理器监测寄存器组的状态,显示读写完成的方式,这也都会在本设计中影响传输层的吞吐量。在开始一次DMA操作之后,PC处理器会等到一段预先设定好的时间,然后才去检测端点设备寄存器组,从未确定DMA传输是否完成。这段等待的时间对于完成这次DMA传输是足够长的。DMA传输完成后的检测对本设计中事务层传

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号