Altera PCIE硬核IP设计与DMA应用解析

4星 · 超过85%的资源 需积分: 50 108 下载量 104 浏览量 更新于2024-09-12 1 收藏 700KB DOCX 举报
"本文档主要介绍了如何在Altera FPGA中使用PCI Express (PCIE) 技术,涵盖了PCIE系统的基本拓扑结构、Altera PCIE硬核的关键特性,以及基于Qsys的设计流程。同时,提到了Windriver驱动的使用以及SGDMA在实现DMA操作中的作用。" Altera PCI Express (PCIE) 是一种高速接口技术,用于在FPGA和外部设备之间建立高效的数据传输通道。在介绍PCIE系统之前,先要理解其基本的拓扑结构。PCIE采用点对点连接,如图1-1所示,包括Root Complex(根复合体)、Switch、Endpoint(如I/O或存储设备)以及PCIE到PCI/PCI-X的桥接。这种结构允许独立的数据传输,提高了系统的带宽和性能。 Altera的PCIE硬核IP是实现PCIE功能的核心,它可以配置为Root Port (RP) 或 Endpoint (EP) 模式。在本文档中,它被用作Endpoint模式。硬核包含了Physical、Datalink和Transaction三层协议,支持设备配置空间、收发缓冲和流控制等功能。Avalon-MM或Avalon-ST接口用于与应用层交互,LMI接口则用于访问配置空间,而PCIeReconfig接口用于硬核及其相关GX模块的重配置。 在板级系统设计部分,如图2-1所示,系统包括了FPGA中的Qsys生成的Endpoint和PC端的Windriver驱动。Windriver驱动使得PC能对FPGA进行配置读写和存储读写操作,但这种方式可能会占用大量CPU资源并降低速度。为了解决这个问题,系统引入了DMA(直接存储器访问)机制。在DMA操作中,FPGA作为主设备发起读写请求,直接与PC的物理内存进行数据交换,提高传输效率。 在实际应用中,SGDMA(System Generator for Direct Memory Access)经常用于实现DMA控制器,它可以处理从FPGA到PC或反之的大量数据传输,无需CPU干预。使用SGDMA,用户可以设计出高效的数据传输路径,从而优化系统性能。 本文档提供了关于Altera FPGA中实施PCIE的基本知识,包括设计流程、关键组件和接口,以及如何利用DMA优化数据传输。对于想要在Altera FPGA中构建PCIE系统的工程师来说,这是一个重要的参考资料。虽然没有包含详细的每步操作指南,但它概述了主要概念和技术,有助于快速理解和启动PCIE项目。
2010-04-27 上传
├─reference_design │ ├─vhdl │ │ │ stratix_enh_pll.vhd │ │ │ stratix_top.vhd │ │ │ vhdl_components.vhd │ │ │ │ │ ├─001 ddr_cntrl │ │ │ ddr_top.vhd │ │ │ │ │ ├─004 pci_local │ │ │ backend.vhd │ │ │ cnten.vhd │ │ │ datapath_fifo.vhd │ │ │ dma.vhd │ │ │ dma_reg.vhd │ │ │ dma_sm.vhd │ │ │ fifo_128x32.vhd │ │ │ fifo_128x4.vhd │ │ │ fifo_128x64.vhd │ │ │ last_gen.vhd │ │ │ mstr_cntrl.vhd │ │ │ mstr_fifo_cntrl.vhd │ │ │ mstr_perf.vhd │ │ │ targ_cntrl.vhd │ │ │ targ_fifo_cntrl.vhd │ │ │ targ_perf.vhd │ │ │ │ │ ├─002 ddr_intf │ │ │ adr_gen.vhd │ │ │ clk_sync.vhd │ │ │ cntrl_intf.vhd │ │ │ ddr_intf.vhd │ │ │ mr_sm.vhd │ │ │ mw_sm.vhd │ │ │ tr_sm.vhd │ │ │ tw_sm.vhd │ │ │ │ │ ├─003 flash_cntrl │ │ │ erase_sm.vhd │ │ │ flash_mem_cntrl.vhd │ │ │ read_sm.vhd │ │ │ write_sm.vhd │ │ │ │ │ └─005 pci_mt64 │ │ pci_top.vhd │ │ │ ├─001 sim │ │ │ modelsim.ini │ │ │ sim.do │ │ │ stratix_pci2ddr.mpf │ │ │ stratix_pci2ddr_tb.vhd │ │ │ trgt_tranx_mem_init.dat │ │ │ wave_stratix_pciddr.do │ │ │ │ │ ├─001 altera_lib │ │ │ altera_mf.vhd │ │ │ │ │ ├─002 ddr_dimm │ │ │ ddr_dimm_model.vhd │ │ │ mt46v32m8.vhd │ │ │ │ │ └─003 pci_bfm │ │ arbiter.vhd │ │ clk_gen.vhd │ │ log.vhd │ │ monitor.vhd │ │ mstr_pkg.vhd │ │ mstr_tranx.vhd │ │ pull_up.vhd │ │ trgt_tranx.vhd │ │ │ └─002 syn_1s25 │ stratix_top.csf │ stratix_top.esf │ stratix_top.psf │ stratix_top.quartus │ stratix_top.rbf │ stratix_top.sof │ ├─001 bin │ altera.inf │ megaicon.ico │ StratixPCI.exe │ STRATIX_KIT_APP_HELP.HLP │ wdreg.exe │ windrvr6.inf │ windrvr6.sys │ ├─002 constraints │ mt32_23_ep1s25f1020c5_66_03_04.tcl │ mt64_23_ep1s25f1020c5_66_03_04.tcl │ Stratix_PCI_Board_DDR_settings.tcl │ t32_23_ep1s25f1020c5_66_03_04.tcl │ ├─003 doc │ an223.pdf │ banner.jpg │ ds_StratixPciBd.pdf │ readmeStratixPciKit.htm │ StratixPciKitDocContents.pdf │ ug_StratixPciKit.pdf │ ├─004 max_config │ max_stratix_config.pof │ └─006 software ├─001 driver │ altera_lib.c │ altera_lib.h │ └─002 gui altera.aps altera.clw altera.cpp altera.dsp altera.dsw altera.h altera.ncb altera.odl altera.opt altera.plg altera.rc Altera.rgs alteraDlg.cpp alteraDlg.h alteralogo.bmp CBox.cpp CBox.h Ioctl.h megaicon.ico Meter.cpp Meter.h MonWnd.cpp MonWnd.h resource.h resource.hm StdAfx.cpp StdAfx.h