没有合适的资源?快使用搜索试试~ 我知道了~
菜鸟5小时速成FPGA_PCIE设计高手教程
需积分: 12 51 下载量 91 浏览量
2016-07-27
18:10:32
上传
评论 1
收藏 600KB PDF 举报
温馨提示
菜鸟5小时速成FPGA_PCIE设计高手教程
资源推荐
资源详情
资源评论
PCIe Solutions on Xilinx FPGAs 初学者指南
初学者指南初学者指南
初学者指南
V1.0
hanson@comtech.com.cn
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 http://zh.wikipedia.org/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 规范对于设备的设计采用分层的结构,有事务层、数据链路层和物理层组成,各层有都
分为发送和接收两功能块。
在设备的发送部分,首先根据来自设备核和应用程序的信息,在事务层形成事务层包(TLP),
储存在发送缓冲器里,等待推向下层;在数据链路层,在 TLP 包上再串接一些附加信息,这
些信息是对方接收 TLP 包时进行错误检查要用到的;在物理层,对 TLP 包进行编码,占用链
路中的可用通道,从查封发送器发送出去。
1
事务层包(TLP),数据链路层包(DLLP),物理层(PLP)产生于各自所在层,最后通过电或
光等介质和另一方通讯。这其中数据链路层包(DLLP),物理层(PLP)的包平常不需要关心,
在 IP 核中封装好了。在 FPGA 上做 PCIe 的功能,变成完成事务层包
完成事务层包完成事务层包
完成事务层包(
((
(TLP)
))
)的处理
的处理的处理
的处理。
事物协议
上面提高过,用 FPGA 实现需要的 PCIe 功能,简单的说是在完成 TLP 的处理。TLP 有三部分
组成,帧头、数据、摘要(或者称 ECRC)。TLP 头标长 3 或者 4 个 DW,格式和内容随事物
类型变化;数据端为 TLP 帧头定义下的数据段,如果该 TLP 不携带数据,那该段为空。Digest
段(Optional)是基于头标、数据字段计算出来的 CRC,成为 ECRC,一般 Digest 段有 IP 核填
充。所以,PCIe 的处理在用户层表现为处理 TLP 中头标和数据段。
图 1 TLP 结构
头标
定义
定义定义
定义
图 2 TLP 头标中的通用字段
TLP 头标长 3DW(Double Word,32bit)或者 4DW,格式和内容虽事物类型变化。上图示
出了头标的通用字段,
Fmt 是关于头标长度和该 TLP 是否有数据在和的信息:00=3DW 头标,无数据;01=4DW
头标,无数据;10=3DW,有数据;11=4DW 有数据。
Type 的 5 位编码与 Fmt 字段一起用于规定事物类型、头标长度和是否有数据载荷。如
下表所示:
TLP FMT[1:0] TYPE [4:0]
Memory Read Request (MRd)
存储器读请求
00 = 3DW, no data
01 = 4DW, no data
0 0000
Memory Read Lock Request (MRdLk)
锁定存储器读请求
00 = 3DW, no data
01 = 4DW, no data
0 0001
Memory Write Request (MWr)
存储器写请求
10 = 3DW, w/ data
11 = 4DW, w/ data
0 0000
IO Read Request (IORd)
IO 读请求
00 = 3DW, no data
00010
IO Write Request (IOWr)
IO 写请求
10 = 3DW, w/ data
0 0010
Config Type 0 Read Request (CfgRd0)
Type 0 配置读请求
00 = 3DW, no data
0 0100
Config Type 0 Write Request (CfgWr0)
Type 0 配置写请求
10 = 3DW, w/ data
0 0100
Config Type 1 Read Request (CfgRd1)
Type 1 配置读请求
00 = 3DW, no data
0 0101
Config Type 1 Write Request (CfgWr1)
10 = 3DW, w/ data
0 0101
剩余23页未读,继续阅读
资源评论
german010
- 粉丝: 6
- 资源: 75
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功