PCIE_ISE_学习笔记
我也是刚学习摸索赛灵思的IP核怎么与理论对应上,也有很多不足之处,欢迎大家与我交流
一. 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 双向各 32GbpsPCI 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。
PCI-Express(peripheralcomponent interconnect express)是一种高速串行计算机扩展总线标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的,旨在替代旧的PCI,PCI-X和AGP总线标准。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理,错误报告,端对端的可靠性传输,热插拔以及服务质量(QOS)等功能。PCIe交由PCI-SIG(PCI特殊兴趣组织)认证发布后才改名为“PCI-Express”,简称“PCI-e”。它的主要优势就是数据传输速率高,目前最高的16X 2.0版本可达到10GB/s,而且还有相当大的发展潜力。PCI Express也有多种规格,从PCI Express x1到PCI Express x32,能满足将来一定时间内出现的低速设备和高速设备的需求。PCI-Express最新的接口是PCIe 3.0接口,其比特率为8Gbps,约为上一代产品带宽的两倍,并且包含发射器和接收器均衡、PLL改善以及时钟数据恢复等一系列重要的新功能,用以改善数据传输和数据保护性能。PCIe闪存卡的供应商包括:INTEL、IBM、LSI、OCZ、三星(计划中)、SanDisk、STEC、SuperTalent和东芝(计划中)等,而针对海量的数据增长使得用户对规模更大、可扩展性更强的系统所应用,PCIe 3.0技术的加入最新的LSI MegaRAID控制器及HBA产品的出色性能,就可以实现更大的系统设计灵活性。当然,主流主板都能能支持PCIExpress 1.0 x16,也有部分较高端的主板支持PCI Express2.0 x16。
二.简介
1.层次结构
PCIe 规范对于设备的设计采用分层的结构,有事务层、数据链路层和物理层组成,各层有都分为发送和接收两功能块。
在设备的发送部分,首先根据来自设备核和应用程序的信息,在事务层形成事务层包(TLP),储存在发送缓冲器里,等待推向下层;在数据链路层,在 TLP 包上再串接一些附加信息,这些信息是对方接收 TLP 包时进行错误检查要用到的;在物理层,对TLP 包进行编码,占用链路中的可用通道,从查封发送器发送出去。事务层包( TLP),数据链路层包(DLLP),物理层( PLP)产生于各自所在层,最后通过电或光等介质和另一方通讯。这其中数据链路层包(DLLP),物理层( PLP)的包平常不需要关心,在 IP 核中封装好了。在 FPGA 上做 PCIe的功能,变成完成事务层包(TLP)处理。
2.bar空间
PCIe 通讯是靠发送 TLP 包,如果再进一步参考了PCIe 更详细的书籍就能发现读写包里都有地址信息。如果板卡向 PC 发送TLP 包,例如 MWr 包,那很好理解,地址信息就是PC 的物理地址(注意这里说的是物理地址);如果是 MRd 包,那 PC 收到后回复一个完成包,板卡从完成包分析出数据即得到 MRd 读取地址的数据。那PC 如何读写板卡的数据呢?简单的解释, PC 启动是, BIOS 探测所有的外设。对 PCIe( PCI)设备来说, BIOS 检测到板卡有多少个 BAR 空间,每个空间有多大,然后对应为这些 BAR 空间分配地址。对 PC 设备来说,它能“看”到 PCIe 板卡的空间只有 BAR 空间,也就只能访问这些 BAR 空间。也就是说,板卡可以发送合法的PCIe TLP 包,并得到 PC 端的相应;但是 PC 端访问板卡被局限在 BAR 空间。
简单来说,PC机想操作PCIE设备的内存空间,只能通过bar空间来进行操作。如下图:PC机只能看见bar空间(忽略地址起始和开始),PCIE核通过检测不同的地址来判断要进行task1还是task2。