PCIe总线基础及FPGA设计实战_第1页
PCIe总线基础及FPGA设计实战_第2页
PCIe总线基础及FPGA设计实战_第3页
PCIe总线基础及FPGA设计实战_第4页
PCIe总线基础及FPGA设计实战_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、PCI Express总线基础及FPGA设计实战1. PCI Expres靠础PCIe总线是基于PCI总线发展起来的,很多基本概念都来自于PCI总线,有必要在介绍PCIe之前了解PCI总线。1.1 PCI基础pci总线作为处理器系统的局部总线,其主要目的是为了连接外部设备,而不是作为处 理器系统的系统总线连接 Cache和主存储器。PCI总线作为系统总线的延伸,其设计考虑了 许多与处理器相关的内容,孤立的研究PCI总线并不可取,因此需要将 PCI作为存储器系统的一个部分来研究。1.1.1 几个重要概念1) PCI总线空间与处理器空间隔离PCI设备具有独立的地址空间, 即PCI总线地址空间,该空

2、间与存储器地址空间通过HOST主桥隔离。处理器需要通过HOST主桥才能访问PCI设备,而PCI设备需要通过HOST主桥才能方位主存储器。要注意区分存储器地址空间和PCI总线地址。在一个处理器系统中,存储器域、PCI总线域与HOST主桥的关系如下图。图2-1存储器城勺PU总线域的划分图中的处理器系统由一个 CPU 一个DRAM控制器和两个 HOST主桥组成。在这个处理 器系统中,包含 CPU域、DRAM域、存储器域和 PCI总线域地址空间。其中 HOST主桥x和 HOST主桥y分别管理PCI总线x域与PCI总线y域。CPU访问PCI设备,必须通过 HOST主 桥进行地址转换,而PCI设备访问存储

3、器设备,也需要HOST主桥进行地址转换。HOST主桥的一个重要作用就是将存储器访问的存储器地址转换成PCI总线地址。CPU域地址空间是指CPU所能直接访问的地址空间集合。DRAM域地址空间是指 DRAM控制器所能访问的地址空间集合,又称为主主存储器域。存储器域是CPU域和DRAM域的集合。存储器域包括 CPU内部的通用寄存器、存储器 映射寻址的寄存器、主存储器空间和外部设备空间。在 Intel的x86处理系统中,外部设备 空间与PCI总线域地址空间等效。因为在 x86处理器系统中,使用 PCI总线同一管理全部外 部设备。值得注意的是,存储器域白外部设备空间,在PCI总线域中还有一个地址映射。当

4、处理器访问PCI设备时,首先访问的是这个设备在存储器域上的PCI设备空间,之后 HOST主桥将这个存储器域的 PCI总线地址转换成 PCI总线域的物理地址,然后通过 PCI总线事务访问 PCI总线域的地址空间。2) 可扩展性PCI总线具有很强的扩展性。在PCI总线中,HOST主桥可以直接推出一条 PCI总线,这条总线也是该HOST主桥管理的第一条 PCI总线,该总线还可以通过 PCI桥扩展一系列PCI 总线,并以HOST主桥作为根节点,形成 1棵PCI总线树。这些 PCI总线都可以连接 PCI设 备,但是一棵PCI设备树上,最多只能挂接256个PCI设备(包括PCI桥)。3) 动态配置机制PC

5、I设备使用的地址可以根据需要由系统软件动态分配。PCI总线使用这种方式合理地解决设备间的地址冲突,从而实现了 “即插即用”功能。每一个PCI设备都有独立的配置空间,在配置空间中包含该设备在PCI总线中使用的基地址即 BAR地址,从而保证每一个 PCI设备使用的物理地址并不相同。PCI桥的配置空间中包含有其下PCI子树所能使用的地址范围。x86系统的工作流程是:主板上的 BIOS程序会扫描PCI/PCIE设备,读取其 BAR空间的 大小,动态地为PCI/PCIE设备分配地址空间。在调试过中发现,假如将BAR空间设置成2G, x86系统会报no bootable device的错误,原因应该是 B

6、IOS给PCIE设备分配了 2G的地址空 间,暂用了硬盘的地址空间,导致无法加载操作系统。4)总线带宽PCI总线与之前的局部总线相比,极大提高了数据传送带宽,32位/33MHz的PCI总线可以提供132MB/S的峰值带宽,而64位/66MHz的PCI总线可以提供的峰值带宽为532MB/S。虽然PCI总线所能提供的峰值带宽远不能和PCIe总线相比,但是与之前的局部总线ISA EISA和MCA总线相比,仍然具有极大的优势。ISA总线的最高主频为 8MHz,位宽为16,其峰值带宽为16MB/s; EISA总线的最高主频 为8.33MHz,位宽为32,其峰值带宽为 33MB/S ;而MCA总线的最高主

7、频为 10MHz,最高 位宽为32,其峰值带宽为40MB/s。PCI总线提供的峰值带宽远高于这些总线。 产17 21总歧帮基与鱼粒之间的关国总域曼建_抄率小立员里隆力per - J3-113个播66 -_ _ _2M十播拈RCJ-XrJ2664个怖槽m.1-5331-=- _ _ _ _ _2个捕棺IQA61个新阳21JI1个辆情5)共享总线机制PCI设备通过仲裁获得 PCI总线的使用权后,才能进行数据传送,在PCI总线上进行数据传送,并不需要处理器进行干预。PCI总线仲裁器不在 PCI总线规范定义的范围内,也不一定是HOST主桥和PCI桥的一部分,虽然绝大多数 HOST主桥和PCI桥都包含P

8、CI总线仲裁 器,但是在某些处理器系统设计中也可以使用独立的PCI总线仲裁器。PCI设备使用共享总线方式进行数据传递,在同一条总线上,所有PCI设备共享同一总线带宽,这将极大地影响PCI总线的利用率。这种机制显然不如 PCIe总线采用的交换结构。 6)中断机制PCI总线上的设备可以通过四根中断请求信号INTAD#t处理器提交中断请求。与 ISA总线上的设备不同,PCI总线上的设备可以共享这些中断请求信号,不同的PCI设备可以将这些中断请求信号线与后,与中断控制器的中断请求引脚连接。PCI设备的配置空间记录了该设备使用这四根中断请求信号的信息。PCI总线还进一步提出了 MSI (Message

9、Signal Interrupt)机制,该机制使用存储器写总 线事务传递中断请求,并可以使用 x86处理器FSB (Front Side Bus)总线提供的Interrupt Message总线事务,从而提高了 PCI设备的中断请求效率。1.1.2 PCI总线的组成结构。图1-1基于pci恿线的处理器系统图中与PCI总线相关的模块包括:HOST主桥、PCI总线、PCI桥和PCI设备。PCI总线是由HOST主桥和PCI桥推出,HOST主桥与主存储器控制器在同一级总线上,因此PCI设备可以方便通过HOST主桥访问存储器,即进行 DMA操作。在一些简单的处理器系统中,可能 不包含PCI桥,此日所有P

10、CI设备都是连接再HOST主桥上推出的PCI总线上。在一些处理 器系统中有可能有多个 HOST主桥,如图1-1所示处理器系统中含有 HOST主桥x和HOST 主桥V。X86处理器的HOST主桥X86处理器使用南北桥结构连接 CPU和PCI设备。其中北桥连接快速设备, 如显卡和内 存条,并推出PCI总线,HOST主桥包含在北桥中。而南桥连接慢速设备。1.2 PCIE总线概述PCI总线使用并行总线结构,在同一条总线上的所有外部设备共享总线带宽,而PCIe总线使用高速查分总线,采用端对端白连接方式,因此在每一条PCIe链路中只能连接两个设备。这使得 PCIe与PCI总线采用的拓扑结构有所不同。PCI

11、e总线除了在连接方式上与PCI总线不同之外,还使用一些在网络通信中使用的技术,如支持多种数据路由方式,基于多通路的数据传递方式,和基于报文的数据传送方式,并充分考虑在数据传送中出现的服务质量 QoS (Quality of Service)问题。1.2.1 基于PCIe的系统结构前期的Intel主板中会集成单独的南北桥芯片,北桥负责连接速度较快的CPU主存储器以及显卡等元件,南桥负责连接速度较慢的设备,包括硬盘、USR网卡等。只要 CPU读取主存储器,还需要北桥的支持,也就是CPU与主存储器的交流,会占用北桥的带宽。因此新一代的Intel主板架构,大多将北桥存储控制器整合到CPU封装中,CPU

12、直接与主存储器交互,速度较快。bilrT EHtrrwryrurpgi Suppnrt基于PCIe总线的Intel处理器架构主存储器的速度SDRAM/DDR型号数据位宽内部时钟频率速度带宽SDRAMPC10064100100800MBytes/secSDRAMPC133641331331064MBytes/secDDRDDR-266641332662.1GBytes/secDDRDDR-400642004003.2GBytes/secDDRDDR2-900642008006.4GBytes/secDDRDDR3-160064200160012.8GBytes/secPCIe总线带宽规格1x带宽

13、16x带宽PCIe1.0250Mbytes/sec4GBytes/secPCIe2.0500Mbytes/sec8GBytes/secPCIe3.01GBytes/sec16GBytes/secPCIe4.02GBytes/sec32GBytes/secSATA总线带宽版本带宽SATA1.0150Mbytes/secSATA2.0300Mbytes/secSATA3.0600Mbytes/secUSB总线带宽版本带宽USB1.01.5Mbytes/secUSB2.060 Mbytes/secUSB3.0500Mbytes/secUSB3.11000Mbytes/sec1.2.2 端到端的数据传

14、递PCI总线不同,PCIe总线采用端到端的连接方式,在一条PCIe链路的两端只能各连接 个设备,这两个设备互为数据发送端和数据接收端。发送端接收端图4-1 PC加总线的物理链跻在PCIe总线的物理链路的一个数据通路( Lane)中,有两组查分信号,共 4根信号线。其 中发送端的TX部件与接收端的 RX部件使用一组差分信号连接,该链路也被称为发送端的 发送链路,也是接收端的接收链路;而发送端的RX部件与接收端 TX部件使用另一组查分信号连接,该链路也被称为发送端的接收链路,也是接收端的发送链路。一个PCIe链路可以由多个数据通路Lane组成,目前PCIe链路可以支持1、2、4、8、16 和 32

15、Lane,即 x1、x2、x4、x8、x16、x32 宽度的 PCIe链路。_47 PCI 与总 W 率和蛤青的关梨PC5悬线战菰星曾鞫尊打心HeT%峥和书OTA)鲜冉力武L *1.152. SR/lOb瑞哥2. i133a/iob城科工。4s128/130 研6 II *的dtft幅中指壁为廿接Ifl道辫和舱索变化时的短军PCIe总线物理链路间的数据传送使用基于时钟的同步传送机制,但是在物理链路上并没有时钟线,PCIE总线的接收端含有时钟恢复模块CDR (Clock Data Recovery), CDR将从接收报文中提取接收时钟,从而进行同步数据传递,PCIe设备进行链路训练时将完成时钟的

16、提取工作。1.2.3 PCIe总线的层次结构PCIe总线采用串行连接方式,并使用数据包(Packet)进行数据彳输。在 PCIe总线中,数据报文在接收和发送过程中,需要通过多个层次,包括事务层、数据链路层和物理层。PCIe I lev kt A12 icr CorePhysical Layerl i.igtoal Sub-bljaartliE UI民“矶二名口_二。国电5FO47*D_F7FFJ- micTDhlB.Tfl-OJ S Mm (3Qliis 4 - MiL5_UIQM 用 OJfiiKi44K(hMtQJTFF0ssiqijQBeOiOQ.WW64OkO&JIFJn bi inF

17、 it-口aB*eQMUZLWg641MHHOJFF 盯=azi jrir_0GJUIBA3O0 4gJXJR6w西bF 口工股:- czi_;cie_QSJIITLILO256 M,S15JIP_5I3Ts szi_arilj tt_Cf5 JUMex龌顿_:俄力T加醍灯e,;/小工“巾viiscW &睢/rutSIMH”QuflC_DOEOLasK%+ EI bvtruliMi a firiLtevvi Wli : 帕H-cr-zliLu-e O_lpcal n anorvy1 lint brut.5LW3GsMO 口 _30团L28EGtfOCOlJTFrpcie 地址空间axi_pci

18、e_bar0 0xC000_00000xC000_FFFFmem 地址空间axi_mem_00x0600_00000x0600_FFFF2.1.2 EP端系统设计EP端硬件系统由 MicroBlaze 处理器、EP 采用 xilinx 的 AXI Memony Mapped To PCI Express 配置成EP模式)、DMA以及内置BRAM块。地址分配j as j _bff an_t tfl._0S_UNmMjSi 3 jp4 11_0sjll幽。u i q i i.GXOTCLCTLOExeLud.M-d d.dr-ass. 峙口出11二 - ezxi dna 0s.Aii.ure-J

19、Eix.dnaJ白城羽n wus 口事5招i tJ型口三七仁一七土士”匕M m _br wi_c lrl_O U asjcisjG sea jc3.i_G11. fsel udi &dflrdu 二口 i3ri_ena_05 口 ux _jicl e 0白战 ILAtt 32 =dCi= L:t E - axi_brn_mljO。,_ 立+一0j wi jcit.O=DMO33K* OiDOOO._TT?F加必gQO glOM.OxlIXG.0000256M,M1FFFfl?ax2DjG_DGOO自4KOzSOOO.FF于于xOKOJK-OO32K koeggam电4il* OiiTOO.F2

20、58M oiirrr一打”JX-00BdJfJT77010B-G_0:00熨* * OiOBGOLTTFF* OsOSOOJTTFax*w(?_QO冷曲- OzKOOJIfFgDMJOW25幅 OilFTF FTFFpcie地址空间mem地址空间axi_pcie_bar0 axi_mem_00x4000_00000x4000_FFFF0x0800_00000x0800_FFFFRC_AXIBAR2PCIEBAR_0=0xFFFF_0000EP_CFG_BAR0=0xFFFF_0000EP_PCIEBAR2AXIBAR0=0x0800_00000xC000 1000 14 0xFFFF 1000

21、 16 0x0000_10000x0800_10002.2读写数据分析2.2.1读写MEM数据操作地址为RC端BAR空间存储器域地址+偏移量例如,往 EP端偏移量为 0x1000的MEM写数据,RC端写地址为0xC000_000+0x1000 0xC000_000为RC端axi_pcie_bar0基地址,即EP端PCIe域基地址映射到 RC端存储器地址 域的基地址。将RC端存储器域地址0xC000_1000,转换成 EP端AXI地址0x0800_1000,最终写入到 EP端 MEM。RC存储器域PCI总线接口E嘲PCIe总线域E嘲AXI总线地址域2.2.2 DMA 操作DMA在EP端,源地址和

22、目的地址为 EP端AXI总线地址0x0800_00000x0800_10000x0800_20000x080030002.2.2.1读内存 读内存指将RC端的内存的数据搬移到 EP端MEM。数据流图如下RC端EP端源地址为0x4000_1000, RC端存储器域地址在 EP端AXI总线域的映射地址目标地址为0x0800_2000, EP端AXI总线域地址E嘲AXI总线地址域PCIe总线接口R嘲PCIe总线域R嘲存储器域EP_AXIBAR2PCIEBAR_0=0xEEEE_0000RP_CFG_BAR0=0xEEEE_0000EP_PCIEBAR2AXIBAR0=0x0600_00000x400

23、0_10000xEEEE_1000 1= 0x0000_100010x0600_10002.2.2.2写内存写内存将EP端的数据写入RC端的内存。数据流图EP端RC端源地址为0x0800_1000 , EP端AXI总线地址目标地址为0x4000_2000, RC端存储器域内存地址在EP端AXI总线地址域的映射地址E嘲AXI总线地址域PCIE总线接口R嘲PCIE总线域R嘲存储器域EP_AXIBAR2PCIEBAR_0=0xEEEE_0000RP_CFG_BAR0=0xEEEE_0000EP_PCIEBAR2AXIBAR0=0x0600_00000x4000_20000xEEEE_2000 1二

24、0x0000_20000x0600_20003.设计实战本章将搭建一个基于 PCIe x4的EP端硬件系统,并在安装 Windows7的x86电脑上,使 用WinDriver软件完成驱动开发。3.1 EP端硬件系统搭建地址分配r3号i _dn _0SH。3工衣”禽.Jbat* :。 o口nCst*_52WI, -02 里屿配 Eu 同m_C lrl_DSJklTWertjGit.OKono.JffFS_AIL_UI1M匕OEQI 翦 M城。心叫jfffn UL JPC|.GSJOTSULgcgajWML&wOHTFPTFTF匚一口 cxl jpci*_psjaijaZI3256HqOeITFF

25、.JFFEJ 0:si 】_D 匚 i E_-二卜3 H_4 - ad.jF4E5 Bits: . ai L_braFi_c 1r)_DS JiITU源凶_w帕G事,g抄入FHn曰匕_曲$_口$猛,Or:SOIl.JFTF 整 i j*c if JSITBAK,加二0i三圜MLG,OMFJFIFsjurcn口 a011M3JMCK4en,OtLTTFJFFFAXI Memony Mapped To PCI Express 参数配置1.将 Device/Port Type 配置成功 PCI Express Endpoint deviceU * i*UE leai Ikjjped FC”工41ql

26、f U&W$h- jTbLT at*t心LUt二中 3vnQua sraxirlnIIM一marmjrn Eijtal4;l)LiH金 iTyp。MHMi.H3.ub.oufi wm*1遣,3 El4A lilfiLRlE-iH E 耶LUET_recio_fj4rriEii二JrAULl Frtri 1. EI ._irFZn _ HKi _p R. r- UU k- rIiJfJil,,7才中K. frw.M i*“fll f# KE kiim * Jd * stf rirnv,IW,Im FBTav4 !:* res E/a + l.工 tr4lalSEKTTtEu-tcxi ni-ut

27、 TrrR :H2 fw 5CC Em-nit 1 . vh. Zjjua3 *JL 二ulul he工&LU. ILnk: 3 L一/ Jf2.将 Lane Width 配置成 x4,将 Link Speed 配置成 5.0GT/s11E 一lippedl T* RB Eapirs- C?_ i)XfaMiUIa k _r 口 Licta KI % J +111.”旧血卬n OMi.iTaavIn 邙 TTJUI 一3Twr* T,T.,*m_ JI* iQ F3Jii Ihit u iiallil Ldw aHU biIhIii :aw Hkm*th ri& tr-iia Ibm. w m

28、4JLit Ikti f i+xM! aaSHi Lihh- i-SJi -d-ci- SaLv; th但 *144 1bV II HI1、X片耳,Lmm Vi-ibk IS ,Li .一1IkabUJ:KI Lufix hlL.J i*Lai.LM 11kBI i 上 -3M lb* AMLn-Li q 16。 p3.配置Vendor ID和Device ID,驱动开发时将根据 Vendor ID和Device ID来扫描 PCIe 设备。4.配置 BAR0的地址空间为 128K,配置 C PCIEBAR2AXIBAR 0 0x0800 00005.配置 C_AXIBAR2PCIEBAR_0

29、 0xFFFF_00003.2 上板调试记录1. BAR0的地址空间分配过大当将Bar0空间配置成2GB时,WINDOWS7的PC机没有启动操作系统, 报错no bootable device,原因应该是 BIOS需要给BAR0分配2G的地址空间,占用了硬盘的地址空间,导致 无法加载操作系统。2. axi_pcie 的 BAR空间或 C_AXIBAR2PCIEBAR0 设置不正确调试时可以使用 windriver工具辅助开发,快速获取pcie设置的配置寄存器的值以及主机为 pcie设备分配的bar空间大小,假设主机为pcie设备分配的bar空间为0xF7D000000xF7D1FFFF总共12

30、8KB(注意x86处理器系统中存储器域地址和pcie域地址相等,而arm处理器则不一致)。主机为 锁定的 dma 的物理地址为0x00000000db361000(pDma-pDma-Page0.pPhysicalAddr ),进行 dma写内存操作时,源地址为 EP 端 bram 空间的地址,目标地址位置成主机为锁定的dma的物理地址,假设EP端为axi_pcie 分配的空间为 0x4000_00000x7FFF_FFFF, 0xdb361000 无法顺利达到 axi_pcie 的 S_AXI 总线,将 EP端白axi_pcie 的地址空间设置成 0xC000_00000xFFFF_FFFF

31、时,0xdb361000可以顺利达 到 axi_pcie 的 S_AXI 总线。 但如果C_AXIBAR2PCIEBAR破置不正确,数据也无法正常返回PC端。假如EP端的参数配置如下C_AXIBAR_0 = 0xC000_0000C_AXI_HIGHADDR_0 = 0xFFFF_FFFFC_AXIBAR2PCIEBAR0 = 0x4000_0000axi到pcie地址转换如下,pcie的最终地址为 0x5b361000,无法返回PC端。为了获取正 确的pcie 域地址,需要将 C_AXIBAR2PCIEBAR0的最高2比特设 置成全1 ,如 C_AXIBAR2PCIEBAR0=0xC000_

32、0000 0xFFFF_0000 都是可行的。3.调试时发下 axi dma每次最大传输长度为 原因是 Width of Buffer Length Register 配置成了 限。将 Width of Buffer Length Register 配置成了16KB-1,假如超过 16KB, dma无法工作。14bits , 16KB-1=0x3FFF好达至U buffer 的上17bits后,dma可以一次传输64KB数据。AXI HI rect iRHory Accrkk (7.1 J1加丁丽士blM y lc2 IP UttLiWh* (ittbHd 产ri-l ilin i I r*

33、Ife r . T 1, : L n ll J jj&ii v AajnKExr manz C LqrJka,Jlrnl:.工 31* 5 3 (rtiw CnKB-B4九L打口他I NLBI ; 5产/n=ucibok - -,三寸二mg_SH30三t ,MI_a |1b _*.Lh miE LF_Tfcl l_ni I 口* 3m T .ui _*= UtimB_LZ.ij口L: -E3nt_Wm3 中口*Vl dth el if Luik-lL S.idfk 】H + Sire* D*i hdcii必* |Rm M” -11 *1Z11A 必出41 二T3E*bi Ea.司1第1看j W

34、 C%44ludFBif if hsMivll. Aihi- *”.臼 it/ %qr MrSlrew Dwt 力酰II 备”*941 1w h1 SueJUlfe UTiflU EKt T1 o&3&3.3 WINDOWS下驱动开发3.3.1 开发流程WinDriver是Jungo公司提供的一种通用的驱动开发支持软件,它简化了用户的上层驱 动开发和应用接口开发,而且易于再封装,实现商业化应用。该软件提供了对PCI Express接口设备的驱动支持,而且也提供了对DMA实现功能的支持。开发流程及使用的函数如下图所示,使用接口函数可以分成3大类:WDC库相关、设备相关以及 dma相关。WDC_D

35、riverOpen()WDC_PciScanDevices() WDC_PciGetDeviceInfo() WDC_PciDeviceOpen()WDC_DMAContigBufLock()wDC_DMABufUnlock()WDC WriteAddr32()WDC_PciDeviceClose()WDC_DriverClose()1 .WDC库相关打开Windriver驱动并初始化 WDC库DWORD DLLCALLCONV WDC_DriverOpen(WDC_DRV_OPEN_OPTIONS openOptions,const CHAR *sLicense);关闭Windriver驱动

36、以及WDC库DWORD DLLCALLCONV WDC_DriverClose(void);2 .设备相关扫描PC设备,dwVendorId为厂商ID, dwDeviceId为器件ID, pPciScanResul的扫描到的PCI 设备。WDC_PciScanDevices(DWORD dwVendorId, DWORD dwDeviceId,WDC_PCI_SCAN_RESULT *pPciScanResult);返回设备信息。DWORD DLLCALLCONV WDC_PciGetDeviceInfo(WD_PCI_CARD_INFO *pDeviceInfo);获取设备句柄。DWORDLLCALLCONWDC_PciDeviceOpen(WDC_DEVICE_HANDLEDev, const WD_PCI_C

温馨提示

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

评论

0/150

提交评论