pcie调试总结Word文档格式.docx
- 文档编号:16285372
- 上传时间:2022-11-22
- 格式:DOCX
- 页数:30
- 大小:2.19MB
pcie调试总结Word文档格式.docx
《pcie调试总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《pcie调试总结Word文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
这些component的例化很简单,从clocksource开始介绍。
双击ClockSource对应component图标,即可进入参数设置界面,如下图所示:
图3ClockSource参数设置页面
然后点击右下角的Finish图标,即可完成component的添加。
完成ClockSource这个component添加后,Qsys系统的界面如下:
图4ClockSource在Qsys系统中的显示页面
下面介绍下clocksource各部分参数的名称:
-clk_0:
component的例化名称,会在最终生成的Qsys文件中显示该名称,右键鼠标可以修改名称:
图5clocksource属性页面
双击名称位置,可以修改component属性:
图6clocksource属性页面
Export栏是供导出用的,右键或者双击可以修改导出信号的名称。
clk_in和clk_in_reset则是导出后用户能够看到的信号名称,用于连接用户自己的时钟;
而clk和clk_reset则是经过桥接后的信号,分别与导出的两个信号相等,供Qsys内部个模块使用。
下面介绍下SGDMAIPCore的component例化。
双击上面描述的SGDMA的图标,弹出的界面如下:
图7SGDMA参数设置页面
左边的是信号描述,也是在Qsys系统中能够看到的信号,点击左上角的Showsignals可以看到更多的信号,这里不再赘述。
-CSR,controlandstatusregisters,用于读取SGDMA的状态,以及控制SGDMA的启动,停止等操作,CSR能够操作的寄存器共有16个,每个寄存器位宽为32bit。
表1CSR寄存器定义
其中base可以认为为0,当多个dma核存在时,csr的地址也要进行地址偏移,一次偏移0x40字节。
下面是各个寄存器中各bit位的说明。
表2ControlRegisterBitMap
表3StatusRegisterBitMap
对于base+8这个寄存器中的值,则是指向了第一个描述符所在的地址。
这个地址是Avalon的地址,如果需要pcie的物理地址,还需要进行地址转义。
有关地址转义的相关描述会在后续的章节中提及。
-csr_irq
这个信号是DMAIPCore产生的中断信号,由于Qsys系统只能支持模拟中断向量,所以产生的中断也是模拟的中断,然后通过pcie的模拟中断机制上传到cpu端。
关于中断,后续章节会详细说明。
-descriptor_read/write
这两个接口是描述读/写端口,简言之,就是DMAIPCore读取/写入描述符以及相关控制位/状态位的接口。
在DMA工作工程中,核心工作之一就是读取描述符,并根据描述中的相关内容寻找数据所在地址,进而读取数据进行传输。
下面说说DMA描述符的相关内容。
首先说明下描述符的存储。
对于少量数据的传输,比如一次传输1Kbyte,且不连续传输,一个描述符即可完成这种操作,这种情况下,描述符可以写成固定值,没有必要存储;
若传输大量数据,则需要多个描述符,这种情况下,描述符的存储就有必要了;
描述的存储方式影响到描述符的更新,描述符的读取与写入等操作,这些操作又直接影响到dma的传输效率,所以,根据需要选择合适的存储方式很是有必要。
目前主流的存储方式有两种,fpga端与cpu端。
图8描述符存储在fpga端的memory中
图9描述符存储在cpu端的memory中
图8的框图是描述符存储在fpga端的memory中,这个memory可以是fpgafabric中的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.
表4DMADescriptorDataStructure
表5DMADescriptorFieldDescription
-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来实现导出的操作。
表6DESC_CONTROLBitMap
多个描述符构成的队列我们通常称之为描述符链,类似与C语言中的链表,在描述符链中,第一个描述符的地址有CSR中的寄存器指出,之后的描述符的地址由前一个描述符指定。
描述符链由CPU来构建,更新也是CPU来做,DMA核负责读取描述符并根据描述符中的地址传输数据。
对于图7右半部分的参数,设置如下:
-Transfermode:
共有三种模式,
Avalon-MMtoAvalon-ST:
memorymap到stream模式,输入接口是MM,输出接口是ST
Avalon-MMtoAvalon-MM:
memorymap到memorymap模式,输入接口是MM,输出接口是ST
Avalon-STtoAvalon-MM:
steam到memorymap模式,输入接口是ST,输出接口是MM
由于目前ST模式下要解析pcie协议,所以C260D中采用了Avalon-MMtoAvalon-MM这种传输模式。
-Enableburstingondescriptorreadmaster
这个选项是允许对描述符进行突发读取,一般对这项打勾。
-Enableunalignedtransfer
这个选项的意思是允许不对齐传输,若勾选了这个选项,则后续的处理中需要手动将地址,数据对其,比较繁琐,本设计中没有勾选该选项。
-Enableburstingtransfer
这个选项是允许突发传输,若不允许突发传输,则一次只能传输一个byte,为提高传输效率,勾选该选项;
-readburstcountersignalwidth
-writeburstcountersignalwidth
这两个参数只有Enableburstingtransfer这个选项勾选了以后才能设置。
设置的突发计数器宽度,根据目前的测试结果,若这两个参数都设置成4,即位宽为4,则实际的burstcounter值为8;
若设置成10,则实际的burstcounter值为512;
若设置成N,则实际的值为2^(N-1);
-Dataanderrorwidth
这个是选项是设置数据以及错误位宽,errorwidth默认为0,不必设置;
datawidth指的是传输数据的位宽,建议与pcie数据位宽保持一致;
C260D中,pcie设置的位宽为64bit,DMA核的这个参数也设置成64;
-Fifodepth
这个参数随着datawidth的改变而改变,datawidth为32,则该参数为64;
若datawidth为64,则该值为32.
以上简单介绍了SGDMAIPCore的各项参数,下面介绍下时钟域转换模块clockcrossing这个模块的参数设置。
在library对应的选项下找到Avalon-MMClockCrossingBridge,然后双击即可:
图10Avalon-MMClockCrossingBridge框图
该模块的作用是将数据由s0_clk时钟域下转换到m0_clk时钟与下。
s0:
表示slaveport
m0:
表示masterport
-datawidth
数据位宽,与SGDMA核的位宽对应
-symbolwidth
符号宽度,即表示几个bit一起作为一个处理单元,本设计中采用字节处理方式,设置位宽为8
-addresswidth
根据实际需要而定,一个address对应一个symbol.
-addressunits
地址单位,一个地址一个symbol
-maximumburstsize
这个值关系到dma传输的效率,该值不能小于SGDMAIPCore中设置的burst值,否则将会影响SGDMA的传输效率;
另外该值会影响到ResponseFIFOdepth的值;
-commandFIFOdepth
命令fifo深度
-responseFIFOdepth
响应fifo深度,该值大于maximumburstsize,一般为该值的2倍。
-Masterclockdomainsynchronizerdepth
-Slaveclockdomainsynchronizerdepth
这个两个值采样默认即可。
需要注意的是,maximumburstsize这个值越大,那么占用的fpga内部RAM越多,所以要酌情设置。
下面介绍下pcieIPCore.在Library-interfaceprotocols-pci找到IPcompilerforpciexpress这个选项,然后双击,即可出现以下页面:
图10pcieIPCoreinterface
图10右侧部分的页面中,各参数含义如下:
-DeviceFamily
这个根据工程选择的器件来定,在该页面不可设置
-Gen2laneratemode
这个选项表示是否使用pciegen2的速度模式,能否勾选与所选期间有关,GX125不支持该选项。
-Numberoflanes
表示使用的pcie的通道数目,由于Avalon总线位宽的限制,GX125只能使用x4mode。
-Referenceclockfrequency
Pcie工作的参考时钟,有100MHz与125MHz两个选项,一般选择100MHz;
-Use62.5MHzapplicationclock
表示是否使用62.5MHz的工作时钟,该选项能否勾选与所选器件以及应用有关,本设计中不勾选该选项;
-Testoutwidth
测试用数据位宽,有9bit,64bit和none三个选项,本设计中选64bit,也可以选none
-pcibaseaddressregisters(type0configurationspace)
这部分参数是设置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采用32bitnonprefetchable模式,用于dma的csr设置;
bar3采用32bitnonprefetchable模式,用于参数设置等功能;
bar4与bar5没有使用。
一般的pcie设备里面,bar空间只有6个。
图11PCIEIPCoreParameterSetPage
-DeviceIdentificationRegisters
这个目录下的参数设置了当前使用的pcie核的一些身份信息,在配置空间里面,在Qsys系统下,逻辑自身读取不到这些寄存器,每个公司都有自身的ID,以做区分。
Altera公司的参数设置如上图所示。
图12图11PCIEIPCoreParameterSetPage(Cont.)
-Bufferconfiguration
这个参数设置了接收与发送数据的payload的大小,该值不仅与器件有关系,还要符合pcie协议中规定的数据长度。
本设计中,Maximunpayloadsize选择为256Bytes,RXbuffercreditallocation选择为Maximun,其余灰色的选项是系统自动根据前面的设置计算出来的。
-Avalon-MMSettings
这个选项设置了与Avalon总线相关的参数。
-Peripheralmode
是指pcie的工作模式,有两个选项Requester/Completer和Completer-only;
本设计中选项Requester/Completer,有关Requester与Completer的相关资料,要参考PCIE2.1的相关标准,里面有详细的描述。
图13图11PCIEIPCoreParameterSetPage(Cont.)
AddressTranslation这个选项下的参数直接与数据传输相关,即DMA传输数据要依靠这个来完成。
-Addresstranslationtableconfiguration
这个参数是指描述符的属性,即cpu维护的是动态的描述符链还是静态描述符链。
所谓动态描述链,是指cpu要实时更新描述链;
相对的,静态描述符链则是指描述符链固定不变。
选择哪种方式,取决于系统方案,本设计中,采样动态描述符链的方式。
即使选择了动态模式,cpu也可以根据情况维护自己的链表是动态的还是静态的。
-Numberofaddresspages
这个参数是指地址翻译表/描述符链中的最大的描述符个数,实际的描述符个数可小于该值,但不可大于该值,该值以2^N的形式存在,最大值为512.
-Sizeofaddresspages
这个值限制了描述符中每页中传输数据的大小。
这个大小与实际应用有关,可根据实际需要来定。
本设计中,选择一个page4Kbytes。
对于以上的三个参数,必须与cpu那边的配置一样,否则DMA传输肯定不会成功。
设置好以上参数以后,点击右下角的finish,即可以生成Qsys系统下的PCIEIPCore了。
以上内容说明了生成用到的component的生成方法以及参数设置等情况,里面涉及到的一些内容没有详细说明,接下来的一部分内容将进行补充。
第一个要补充的内容是有关CRA的描述。
CRA是ControlRegistersAccess的缩写,字面意思是控制寄存器访问。
在Qsys系统中,fpga的fabric不能访问这些内容,只有cpu才有权限。
在Avalon-ST的接口中,fpga的fabric也可以通过接口访问,这里不做说明。
pcieIPCore的CRA空间大小共有16Kbytes,这16Kbytes又分为4个子空间,每个子空间4Kbytes,如下表所示:
表7CRA地址空间分配表
0x0000~0x0fff这个4Kbytes空间只有cpu能否访问,本设计中不做深入探讨。
0x1000~0x1fff这个地址空间是有关地址映射表的,是本设计中软件需要仔细研究的内容
0x2000~0x2fff是保留的。
0x3000~0x3fff是有关中断的一些描述,稍后会介绍。
这里对本设计最为重要的就是地址翻译表了。
AvalonAddress根据(描述符/数据地址)hostMemory的地址和映射表以及固定Slave地址组成。
图14地址转换示意图
下表是translationtable的相关说明。
表8translationtable
下面这段说明了Avalon地址的含义。
图15地址转换示意图
按照以上方式就可以完成地址转换了。
下面补充下有关中断的内容。
PCIE支持的中断类型有以下几种:
-MSIinterrupt/MSI-Xinterrupte
-Legacyinterrupt
-INTXinterrupt
就本设计而言,由于使用的是Qsys系统,所以MSI/MSI-Xinterrupt就不支持了,支持的是INTX虚拟中断。
因为INTX通常情况下是采用管脚的方式给cpu处理,所以pcie这边的INTX是虚内的中断管脚。
当触发一个中断时,PCIEIPCore的配置空间里面有关中断的寄存器会发生变化,这样PCIEIPCore会发送一个中断TLP包给cpu,当cpu收到中断后,再查询PCIEIPCore配置空间里面的寄存器,以确认触发了哪个中断,从而响应对应的中断处理程序。
PCIEIPCore的配置空间里面涉及到中断的寄存器有以下几个:
表9RegisterMap
表10Address0x0040interruptstatusregister
我们用到的是配置空间里面地址为0x0040寄存器中的第16bit,也就是说,本设计的Qsys系统最多只能支持16个中断。
该地址寄存器是只读寄存器,也即cpu通过配置空间的该寄存器获取当前中断的状态。
表11interruptenableregister
本设计中,使用的是Qsys的中断方式,配置空间中的该地址寄存器的低16bit是中断使能寄存器,该寄存器与地址寄存器0x0040中Qsys系统下的中断是一一对应的。
配置空间里面的这两个地址寄存器是产生虚拟pcie中断的前提,在配置空间里面还有个寄存器需要设置:
表12CommandRegister(Offset04h)
这个寄存器是控制pcie产生INTX中断的。
表12StatusRegister(Offset06h)
从这个寄存器的状态,可以获知当前有没有INTx类型的虚拟中断产生。
只有把以上有关中断相关的寄存器都设置对了,才能正确的将fpgafabric产生的中断通过pcie接口反馈到cpu端。
以上内容补充了CRA,地址转换,中断等相关内容,下面补充下如何创建自己的component.
启动Qsys,双击左上角的NewComponet或者File->
NewComponent,如下图所示:
图16newcomponent示意图
双击NewComponet,弹出的页面如17,
图17newcomponent参数页面
Componenttype下各参数含义如下:
-Name
Component的名字,可以以任何你喜欢的名字命名,英文字母在前,可以有下划线。
-DisplayName
component对外显示的名称,最好与Name一样。
-Version
版本号,方便维护
-Group
图18Group分类选项
Component的分类,可根据实际用途选择类别。
-Description
对当前Component的描述,比如功能啥的。
-Icon
Component图标,可空白。
-Document
当前Component的参考文档,可以空白。
Files下各参数含义如下:
图19Files页面示意图
这个页面要求用户选择需要创建component的verilog/VHDL源文件。
这个源文件可以使用该页面最上面的Templates选项来选择,如图20所示:
图20Templates选项
这里面有好多现成的例子可用,只要选中对应列即可。
另外一种方法是自己写源文件,然后点击图21中左下角的+号,选择文件的位置即可。
图21源文件选择页面
当选则了源文件之后,“AnalyzeSynthesisFiles”这个选项就变成黑色的了,如图22所示:
图22选择文件之后的页面
选择的文件是自己是写的源代码,代码结构如下:
源文件是带有中断的slavemodule,其中各信号说明如下:
Address:
地址总线,位宽根据需要来定
Read:
读命令
Readdata:
读数据
Write:
写命令
Writedata:
写数据
Waitrequest:
反馈信号
Clk:
时钟
Reset:
复位信号
ins_irq0_irq:
中断信号
以上信号中,时钟是必
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pcie 调试 总结