[FPGA 实现及PCIe IP 核知识点] 读PCIE spec千百遍,她却视我如初见!第二回书

书接上回,娓娓道来!
文未见,问先来!

  1. 你平时是怎样学习PCIE spec的?你的学习效果怎样?
  2. 为什么PCIE 会成为目前的主流?
  3. 为什么PCIE可以完全向下兼容PCI?
  4. 什么是并行总线?什么是串行总线?以及这两者有什么区别?
  5. GT/s和Gbp/s是一样的概念吗?

二:套路

我们为什么选择《PCI Express Base Specification Revision 3.xx》作为我们的心法秘籍,因为全世界的PCIE设计和应用都是遵循这个标准,它是真正的根本。所以我们必须从根本出发而不能舍本求末,不加判断的在网络上不加甄别的“胡吃海喝”,那样难免“走火入魔”。没有哪个人喜欢事倍功半,一定都是希望事半功倍,那么请接受我们的建议按照以下这个学习顺序一起来精读悟透这份PCIE spec。
PCIE spec里罗列的章节顺序如下:1-2-3-4-5-6-7

1.jpg

我们经验总结给出的学习顺序如下:1-4-7-3-2-6

这个顺序是提炼出来我们经验的总结,是我们分享给大家的“核心技术”,是一个“大彩蛋”:我们所做的分享一切只为提升工作技能服务,如果不能快速转化成工作技能,不能学以致用,都不是我们的目的,我们要的是“招之能来,来之能战,战之能胜”的立竿见影的效果。
以下罗列出来的是大的框架,属于战略层面,在参照这个顺序学习时需要谨记以下战术上的要求:

  1. 并不是每一个章节里所有的内容都必须了解之后才能进行下一章节的学习。记住我们这个文章的目的就是希望读者能够快速抓住重点,而不至于在某一个章节纠结,否则那和传统的学习就没有的差别,就不能体现我们总结出来的学习方法的优越性。
  2. 那么,每一个章节该怎么学习呢?你需要做的是把每一章节里最基础的部分先了解。那么哪些是基础的部分?(哈哈哈!好像进入了死循环)
    建议:
    a. 关注本篇最后提出的问题,能回答这些问题的答案就是基础知识是我们需要掌握的。
    b. 实在有困难( 谁没有个当局者迷的时候!)请与我们联系,我们会结合大家普遍的问题有针对性的回复。
  3. 学习过程中一定要注意自我提问和努力找到文章中所提问题的答案。
  4. 在学习过程中如果遇到困难,感到茫然的话可以在公众号里留言或提问,我们将综合大家的问题并进行归类,集中统一回答。

1.Introduction —总介绍

2.jpg

2.Physical Layer —物理层

3.jpg

3.Software Initialization and configuration —软件初始化和配置

4.jpg

4.Data Link Layer —数据链路层

5.jpg

5.Transaction Layer —传输层

6.jpg

6.System Architecture —系统架构

7.jpg

7.Others —其他相关知识

三:一招一式

3.1 introduction—前世今生

问题来了:什么是并行总线?什么是串行总线?以及这两者有什么区别?
(以下将提供给大家一个感性的认识,从而帮助零基础的同学便于理解,具体的问题答案有兴趣的同学可以进一步探究,后续有机会我们也会在未来写一些文章来做解释。)

常说的“世界”是佛教用语。所谓“世”即时间,30年为一世;所谓“界”即空间。
PCIE前世追溯到大约(一世)30年前。那时候,x86江湖上有由称作“霸师“(BUS)成员组成的大帮派,在一个叫”兮丕尤“(CPU)的老大带领下,在武林大会拳打”算盘“脚踢”计算器“,在运算界迅猛崛起,他的影响力渗透到士农工商金融军事等各个领域,”树大招风“,出名之后这个帮派的地位同样遭受着名叫”阿穆“(ARM),”厄伏匹吉诶“(FPGA)强烈挑战。”兮丕尤“深知”天下武功唯快不破“,为了维持自己在江湖上的地位,他无时不刻在要求他的手下”霸师“们不断提升其速度。”兮丕尤“训练出了各种等级代号的”霸师“

第一代“霸师“代号:PCI成名于公元1991年。

PCI是典型的并行总线:

并行传送示意图:(同一时刻,发送端同时利用8根数据线传递8个bit的数据给接收端)
8.jpg

问题:32位/33MHzPCI总线带宽是多少?

  1. 33MB/s

  2. 4MB/s

  3. 133MB/s

  4. 266MB/s

解答:

总线位宽32bit=4Byte
总线时钟频率33MHz
所以最大传输速率为33M*4B/s=133MB/s

9.jpg

第二代“霸师“代号:PCIE成名于公元2001年。

因为PCI总线架构无法再进一步提升,PCIE Gen1在2001年开始逐渐取代PCI,但PCIE仍旧沿用PCI的软件架构理论,如下图所示 PCIE Configuration Space与PCI Configuration Space前面Header 00h-3Fh 部分保持一致。
10.jpg

PCIE是典型的串行总线:

串行传送示意图如下(发送端利用1对±信号线组成的差分数据线,将数据一个bit接一个bit传递给接收端)

11.jpg

附带说明:

GT/s —— Giga Transmission per second (千兆传输/秒),即每一秒内传输多少笔数据。这个笔对应各种不同总线一次传输的数据位宽。

例:DDR 一次传输64bit的数据,若是2.5GT/s,即一秒钟传输2.5G笔64bit的数据。

例:PCIE spec里定义Gen1 支持2.5GT/s的数据传输率,下图重点:

这个传输率是指每一个方向上的数据传输笔(次)数,即:

Upstream port TX lane方向上一秒钟可以传输2.5G 笔(次)数据。再加上downstream port TX lane方向上在同一秒钟传输的2.5G(次)数据,就得到PCIE Gen1 一个x1 的link在一秒钟内,两个TX方向上加起来可以产生5.0G笔(次)数据传输。

12.jpg

Gbps —— Giga Bits Per Second (千兆位/秒)。
是指一秒钟时间内传输了1G 个bit的数据,即1G(10的9次方)个“0”或者“1”。

13.png

另外需要注意在计算有效带宽的时候需要考虑比如数据编码格式对有效数据的影响。
举例:PCIe Gen1的物理层采用 8b/10b 的编码方案,那么每传输8个Bit,一共需要发送10个Bit。所以只有80%的数据是有效数据。

PCIe Gen1 每一条TX Lane达到 2.5 G* (8 / 10) = 2 Gbps /8= 250 MB/s 的速率。

PCI总线32位(即32根数据线)/33MHzPCI总线带宽是133MB/s,而PCIE总线一条Lane(+/-一对差分线)的总线带宽已经是250MB/s,“吃得少跑得快的PCIE”当然直接上位成为CPU最喜欢的BUS。

根据上述说明请大家计算一下:用PCIE Gen1的一条TX lane传输12.5MB的数据要用多少秒时间?
14.jpg

问题来了:为什么我们说PCIE硬件能够使用PCI系统配置软件实现而不需要修改?

师 出 同 门,必 然 同 心 !

虽然PCI逐渐退出了历史舞台,但是人家毕竟曾经为CPU立下汗马功劳,CPU也不是那种过河拆桥的人,为了让后辈PCIE永远铭记PCI 的丰功伟绩,PCIE虽然取代了PCI的地位,但在实际运作中依旧保留PCI的核心思想,而且是原封不动的保留,不越雷池半步,PCI原有的256Byte PCI Configuration Space的00-3F Header 区域的定义保持一致,只是额外增加到4Kbyte,正因为如此PCIE可以无缝的与之前的应用生态环境进行连接,做到了向下兼容,因为PCI时代讲的古话和现代时髦话,PCIE设备都能理解。

PCI Configuration Space举例:

15.jpg

PCIE configuration space:

在PCI configuration space 256B(0xFFh)基础上扩展到4KB(0xFFFh)
问题来了:想想为什么PCIE configuration space要扩展到4KB?
16.jpg

17.jpg

18.jpg

3.2 什么是PCIE link?

此处省略一千字,咱们通过看图,快速建立一个感性认识:
一幅图一幅图往下看不说话,静静的看静静的想,此时无声胜有声!

问题:怎么区分什么是Downstream port什么是Upstream port?
19.jpg

问题:在spec里怎样定义Lane?为什么下图中会出现4个“红色虚线圆圈”,它的存在是想表达什么意思?

20.jpg

问题:在Spec里如何定义PCIE link?

21.jpg

问题:PCIE 可以支持x3的link width吗?为什么?

22.jpg

23.jpg

24.jpg

恭喜各位以上江湖小Bug被各位一一降伏!接下来:

闯关大BOSS来了!

请问PCIE工作一定需要100MHz REFCLK吗?CDR(clock data recovery)的作用是什么?什么是Common Clock?什么是Non Common Clock? Upstream port TX的clock可以从Downstream port TX中获得吗?如果可以那优缺点是什么了?

有知道答案的朋友们可以分享一下咱们一起学习探讨!

在《PCI ExpressCard Electromechanical Specification Revision 3.xx》里有提到PCIE工作条件,即REFCLK。
25.jpg

26.jpg

问题是最好的老师之一,好的问题发人深省,醍醐灌顶!那还等什么!

问题1:PCIE 有2.5G/5.0G/8.0G为什么没有3.0G?PCIE link能否工作在3.0G?
问题2:PCIE为什么需要Initialization?Initialization过程中F/W和S/W需要参与吗?
问题3:当PCIE link downstream port是x16,upstream port是x8的时候可以正常工作吗?
问题4:当PCIE link downstream port TX是x16,RX是x8的时候可以正常工作吗?
问题5:什么是Root complex?
“哐啷”一响,请听下回分享!
PCIE spec 原文赏析,字字珠玑,回味无穷!

27.jpg

28.jpg
29.jpg
30.jpg

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除
匿名用户

匿名