菜鸟5小时速成FPGA PCIE设计高手教程

PCIe Solutions on Xilinx FPGAs 初学者指南V1.0
hanson@comtech
PCIe on Xilinx 初学者指南 (1)
前言 (1)
步步为营 (3)
一,PCIe层次结构 (3)
伊丽莎白二世的母亲
事物协议 (3)
头标 (4)
BAR空间 (6)
中断 (7)
二,器件选型 (9)
三,仿真环境搭建 (9)
四,调试 (14)
五,驱动编写 (15)
六,总结 (16)
进阶 (22)新闻自由论文
DMA模式 (22)
DDR缓冲 (23)男子喝水银被救治
经验、教训总结 (24)
前言
北京奥运会那年接手了一个项目,需要将远程的80MBps的数据量传输到服务器,同时不能占用太多的处理器时间,因为服务器上同时运行着一套大型数据库软件。最后排除了USB方案、以太网方案,选用Xilinx的PCIe解决方案。经过漫长的摸索、学习过程,最后项目做成功的做完了,各种指标参数
也都达到了。再后来做FAE,见识了更多的PCIe应用,也有幸结识了更多的开发工程师。有的对PCIe的理解非常深入了,无论在性能和功能上都达到相当的深度;有的也和我原来一样,刚开始学习理解PCIe的应用,看书、看文档,有时候迷茫的不到如何下手。对于前一种高手,这篇应用笔记可以略过了;对于后一种正在做产品、项目的工程师,希望能对您有所帮助。
什么时候需要用到PCIe?
首先需要定位的是什么时候需要用到PCIe的问题。(PCIe是什么这里就不做介绍了,不
然冗长的像写论文了。)
翻开电脑(台式机),主板上可以清晰的看到常用的接口,能和外面连接的插槽主要有:USB、Ethernet、PCIe、PCI、SATA/PATA、Audio、VGA/DVI/HDMI,UART/并口。其中Audio、VGA/DVI/HDMI制作专用数据输出,UART/并口的速率摆在那里,不适合高速数据传输,剩最大吞吐率如下:
下的接口最大吞吐率
最大吞吐率
接口最大速率
电力系统保护与控制
USB USB2.0 480Mbps, USB3.0 5Gbps(USB2.0 速率的10倍)
Ethernet 1Gbps
PCIe X8 Gen1 双向各16Gbps,X8 Gen2 双向各32Gbps
PCI    2.112Gbps@66Mhz*32位
SATA/PATA SATA II 3.0Gbps, SATA III 6.0Gbps
排除协议开销,OS开销,平常使用中USB能达到的速度USB2.0一般在30-40MB;Ethenet 如果用硬件实现较低层次的协议在70-80MBps;PCI有64位的,但是普通PC或服务器一般是32位的,见过效率发挥的较好的能达到120MB,但是PCI是共享总线的,如果总线有多个设备开销,这个速度就难保证了;SATA/PATA在PC中一般用于存储,用于自定义设备的很少见。因此,如果数据量超过100M,那PCIe最合适了。
速度是一方面考虑的原因,能否快速实现(有无成熟的设计方案),并且产品稳定、可靠是另外一个需要考虑的原因。
USB 有Cypress的USB2.0芯片,然后将总线接到FPGA上。网上有很多USB芯片的程序、驱动程序,甚至有公开的GUI程序,可以方便的完成FPGA到PC的通讯。
Ethernet 以太网也是比较成熟的接口。FPGA外接PHY就可以和PC通讯了。以太网的协议非常复杂,FPGA如果内部运行CPU加以太网协议栈,那可以支持高层的以太网协议,但是这样速度就打折扣了,并且FPGA的开发难度也增加很多。如果只实现MAC层数据收发,难度相对简单一些。
开发难度:
开发难度
PCI PCI卡的方案也比较成熟了,既可以用PLX公司的桥片+FPGA的方案,也可以直接用FPGA接PCI IP核的方式。PCI经过长时间的积累,已经有相当多的上层和底层设计、调试软件,如果是购买的桥片,还有配套的开发工具简化设计流程。
SATA/PATA 通过SATA/PATA接口和PC进行数据通讯的方案比较少见,有Intelliprop一些列的SATA Device IP Core,同时提供一些底层的软件支持。
PCIe  PCIe的方案种类延续了PCI的多样性。1,完全采用FPGA方案。Xilinx早在10年前就把PCIe作为重要的支持方向,在高、中、低端FPGA内都集成有免费的PCIe硬核,同时提供了数种源码(包括驱动、软件)开放的参考设计,还有丰富的文档。无论是学习、还是产品设计,都能在众多的资料中到相关的信息,减少设计、调试的时间(例如,Xilinx的PCIe用户手册,xapp1052 DMA参考设计,PIO参考设计)。2,采用桥片方案,例如PLX,IDT 等芯片,然后将转换的局部总线接入FPGA。
研发产品需从多方面考虑,成本、可靠性、兼容性、性能等。单片FPGA方案越来越多的应用在各种产品的研发中。如果确定需要使用FPGA的PCIe方案,而此时对这一流程比较迷茫,那希望这篇指南能对您有所帮助。
步步为营
PCIe相关知识
引用Wiki /zh-cn/PCI-E,简单介绍PCIe的基本特性,其他不理解的没关系,要么等一个流程下来自然而然明白了,要么…就不需要知道(Xilinx封装好了)。
Wiki上列出各版本PCIe的链路速度,通道数。说白了,链路速度高,单位时间内传输的有效数据多;通道数多,同时传递的数据多。此外,还有很给力的一点就是兼容,板卡和主板自适应的匹配到最大的链路速度和通道数。也就是说,如果这个板卡只支持PCIe1.1 x8,放在支持PCIe2.0 x16的槽上,那两端会是应在PCIe1.1 x8的速率上;如果有一天板卡升级了,到PCIe2.0 x8,那主板会适应成PCIe2.0 x8上,并且PC上的驱动和软件都不用变化。
接下来有点晦涩了,但是建议耐着性子看完吧。
一,PCIe层次结构
PCIe规范对于设备的设计采用分层的结构,有事务层、数据链路层和物理层组成,各层有都分为发送和接收两功能块。
图  1 TLP结构头标定义
Type10配置写请求
01 = 4DW, no data    1 0 rrr*
Message Request (Msg)
消息请求
11 = 4DW, w/ data    1 0rrr*
Message Request W/Data (MsgD)
狸御殿
带数据的消息请求
Completion (Cpl)
00 = 3DW, no data 0 1010
完成
Completion W/Data (CplD)
10 = 3DW, w/ data 0 1010
带数据的完成
00 = 3DW, no data 0 1011
Completion-Locked (CplLk)
锁定完成
digital image recovery
Completion W/Data (CplDLk)
10 = 3DW, w/ data 0 1011
带数据的锁定完成
表  1 TLP Header Type and Format Field Encodings
Non-Posted & Posted
如果设备发起端发出一个Non-Posted请求,在一定时间后,接收端需要回复一个完成包给发起端,如果不回复可能会遇到特别的情况,例如蓝屏。
Posted
表2 PCI Express Non-Posted and Posted Transactions2
Xilinx例程
用Coregen生成的PCIe控制器,默认有一个PIO的参考设计,其中包含能够直接用于仿真的脚本,这里就用Xilinx PCIe附带的PIO例子解释如何处理上面的TLP事物。这里的例子采用的LocalLink接口,信号定义或使用方法参考ug517,开发PCIe的应用,就相当于使用LocalLink接口发送或者相应TLP事物。

本文发布于:2024-09-21 17:52:50,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/167058.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设计   需要   数据   方案   软件   应用   接口
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议