pcie调试总结(2)

2019-03-28 12:26

对于base+8这个寄存器中的值,则是指向了第一个描述符所在的地址。这个地址是Avalon的地址,如果需要pcie的物理地址,还需要进行地址转义。有关地址转义的相关描述会在后续的章节中提及。 -csr_irq

这个信号是DMA IPCore产生的中断信号,由于Qsys系统只能支持模拟中断向量,所以产生的中断也是模拟的中断,然后通过pcie的模拟中断机制上传到cpu端。关于中断,后续章节会详细说明。 -descriptor_read/write

这两个接口是描述读/写端口,简言之,就是DMA IPCore读取/写入描述符以及相关控制位/状态位的接口。在DMA工作工程中,核心工作之一就是读取描述符,并根据描述中的相关内容寻找数据所在地址,进而读取数据进行传输。下面说说DMA描述符的相关内容。 首先说明下描述符的存储。对于少量数据的传输,比如一次传输1Kbyte,且不连续传输,一个描述符即可完成这种操作,这种情况下,描述符可以写成固定值,没有必要存储;若传输大量数据,则需要多个描述符,这种情况下,描述符的存储就有必要了;描述的存储方式影响到描述符的更新,描述符的读取与写入等操作,这些操作又直接影响到dma的传输效率,所以,根据需要选择合适的存储方式很是有必要。目前主流的存储方式有两种,fpga端与cpu端。

图8 描述符存储在fpga端的memory中

图9 描述符存储在cpu端的memory中

图8的框图是描述符存储在fpga端的memory中,这个memory可以是fpga fabric中的RAM,也可以是fpga外挂的ddr/sram等存储媒介;这种存储描述符的方式下,描述符的更新由cpu通过pcie读写bar空间来实现,需要与pcie的数据传输抢断资源,需要占用一定的fpga内部存储空间,这是缺点;优点就是,dma传输数据过程中,读取描述符的时间与dma数据传输的时间相比,可以忽略不计;图9的框图是描述符存储在cpu端的memory中,这种模式下,cpu更新描述符比较方便,这是优点;缺点就是fpga的dma核需要经过pcie接口从cpu的memory中读取描述符,然后再写到fpga的fabric中,这个时间对于dma传输来说,是不可忽略的。因此,设计时,需要综合考虑,选择一个合适自己设计的方案;C260D的方案是图9所示的框图。

描述符的数据结构以及相关描述见表4与表5.

表4 DMA Descriptor Data Structure

表5 DMA Descriptor Field Description

-m_read/m_write

这两个接口是数据接口,即DMA从那块地址读取数据,然后再写到那块地址中去。对于视频数据下传,DMA通过pcie接口从cpu的内存中读取YUV数据,然后在写到本地fpga的fabric中;对于TS上传,则是DMA从fpga的fabric中读取数据,然后通过pcie接口写到cpu对应的内存区域;

需要注意的是,descriptor_read/descriptor_write/m_read/m_write这些接口都可以导出,

但导出的时候,必须给这些信号指明地址空间,否则dma控制核将不能工作;这个时候,可以通过新建一个component来实现导出的操作。

表6 DESC_CONTROL Bit Map

多个描述符构成的队列我们通常称之为描述符链,类似与C语言中的链表,在描述符链中,第一个描述符的地址有CSR中的寄存器指出,之后的描述符的地址由前一个描述符指定。描述符链由CPU来构建,更新也是CPU来做,DMA核负责读取描述符并根据描述符中的地址传输数据。

对于图7右半部分的参数,设置如下: -Transfer mode :共有三种模式,

Avalon-MM to Avalon-ST:memory map 到stream模式,输入接口是MM,输出接口是ST Avalon-MM to Avalon-MM:memory map 到memory map模式,输入接口是MM,输出接口是ST

Avalon- ST to Avalon- MM:steam到memory map模式,输入接口是ST,输出接口是MM 由于目前ST模式下要解析pcie协议,所以C260D中采用了Avalon-MM to Avalon-MM这种传输模式。

-Enable bursting on descriptor read master

这个选项是允许对描述符进行突发读取,一般对这项打勾。 -Enable unaligned transfer

这个选项的意思是允许不对齐传输,若勾选了这个选项,则后续的处理中需要手动将地址,数据对其,比较繁琐,本设计中没有勾选该选项。 -Enable bursting transfer 这个选项是允许突发传输,若不允许突发传输,则一次只能传输一个byte,为提高传输效率,勾选该选项;

-read burstcounter signal width -write burstcounter signal width

这两个参数只有Enable bursting transfer这个选项勾选了以后才能设置。设置的突发计数器宽度,根据目前的测试结果,若这两个参数都设置成4,即位宽为4,则实际的burstcounter

值为8;若设置成10,则实际的burstcounter值为512;若设置成N,则实际的值为2^(N-1); -Data and error width

这个是选项是设置数据以及错误位宽,error width默认为0,不必设置;data width指的是传输数据的位宽,建议与pcie数据位宽保持一致;C260D中,pcie设置的位宽为64bit,DMA核的这个参数也设置成64; -Fifo depth

这个参数随着data width的改变而改变,data width为32,则该参数为64;若data width为64,则该值为32.

以上简单介绍了SGDMA IPCore的各项参数,下面介绍下时钟域转换模块clock crossing这个模块的参数设置。在library对应的选项下找到Avalon-MM Clock Crossing Bridge,然后双击即可:

图10 Avalon-MM Clock Crossing Bridge框图

该模块的作用是将数据由s0_clk时钟域下转换到 m0_clk时钟与下。 s0 :表示slave port m0:表示master port -data width

数据位宽,与SGDMA核的位宽对应 -symbol width

符号宽度,即表示几个bit一起作为一个处理单元,本设计中采用字节处理方式,设置位宽为8

-address width

根据实际需要而定,一个address对应一个symbol. -address units

地址单位,一个地址一个symbol -maximum burst size

这个值关系到dma传输的效率,该值不能小于SGDMA IPCore中设置的burst值,否则将会影响SGDMA的传输效率;另外该值会影响到Response FIFO depth的值; -command FIFO depth 命令fifo深度

-response FIFO depth

响应fifo深度,该值大于maximum burst size,一般为该值的2倍。 -Master clock domain synchronizer depth -Slave clock domain synchronizer depth 这个两个值采样默认即可。

需要注意的是,maximum burst size这个值越大,那么占用的fpga内部RAM越多,所以要酌情设置。

下面介绍下pcie IPCore.在Library-interface protocols-pci找到IP compilerfor pci express这个选项,然后双击,即可出现以下页面:

图10 pcie IPCore interface

图10右侧部分的页面中,各参数含义如下: -Device Family

这个根据工程选择的器件来定,在该页面不可设置 -Gen2 lane rate mode

这个选项表示是否使用pcie gen2的速度模式,能否勾选与所选期间有关,GX125不支持该选项。

-Number of lanes

表示使用的pcie的通道数目,由于Avalon总线位宽的限制,GX125只能使用x4 mode。 -Reference clock frequency

Pcie工作的参考时钟,有100MHz与125MHz两个选项,一般选择100MHz; -Use 62.5MHz application clock

表示是否使用62.5MHz的工作时钟,该选项能否勾选与所选器件以及应用有关,本设计中不勾选该选项; -Test out width

测试用数据位宽,有9bit,64bit和none三个选项,本设计中选64bit,也可以选none -pci base address registers(type0 configuration space)

这部分参数是设置pcie所用的bar空间的大小以及位宽。Qsys系统中,bar空间的大小在这个页面不能设置,只能由与bar空间连接的模块的地址空间来决定。Bar空间的位宽有32bit-nonprefetchable与64bit-prefetchable两种,据查,nonprefetchable是指读取后原来的值可能被破坏,而prefetchable则是指读取后,原来的值不被破坏的意思。如果采用了64bit-prefetchable这种模式,那么就是有两个相邻的32bit的bar空间组合而成。即如果bar0采用了64bit-prefetchable位宽模式,那么bar1就被占用了,即bar1显示的occupied状态。本设计中,bar01采用64bit-prefetchable模式,bar2采用32bit nonprefetchable模式,用于dma的csr设置;bar3采用32bit nonprefetchable模式,用于参数设置等功能;bar4与bar5没有使用。一般的pcie设备里面,bar空间只有6个。


pcie调试总结(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:当鲜花绽放于阳光之下

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: