分析CPU-RISC-PCIE-AI现状
分析CPU-RISC-PCIE-AI现状
参考文献链接
https://mp.weixin.qq.com/s/elZQwZT1SKoDMrZ7qhlqwg
https://mp.weixin.qq.com/s/MzPlBKmK5CigFKWd7WbC1A
https://mp.weixin.qq.com/s/gfEj6cFqNM09LKQ2H--sFQ
https://mp.weixin.qq.com/s/ordM_ITgTBW61RHGld1HAw
https://mp.weixin.qq.com/s/xULgZ6mbyicChOdZkTnk3A
设计一个RISC-V处理器
CPU是电子设备的大脑,你在几乎所有电子设备里都会找到它。能做 CPU 的公司很多,但目前全世界的 CPU 却主要基于两种结构:一个是英特尔 AMD 在用的 x86 架构,另外一个是苹果、高通等等很多公司在用的 ARM 架构。
直到最近几年,一个名叫 RISC-V 的新架构横空出世,谷歌、高通、英特尔等国外公司,阿里平头哥、华为、中兴等国内公司,都已经在深度布局 RISC-V CPU了。甚至有人说,RISC-V 是今后芯片设计的最佳方案,它就是硬件行业里的 Linux。
RISC-V 之所以如此被看好,首先是因为它免费!
RISC-V 出现之前,主要的指令集都归少数几个大公司所有。英特尔和 AMD 拥有 x86 指令集的所有权,但他们并不对外授权,而是直接做成芯片自产自销,高昂的客单价让他们赚走了行业最多的钱;ARM 是商业授权指令集,授权给别的公司造芯片,每造出来一颗就收一点钱,在人头上占尽优势。
半导体行业苦“垄断”久矣,然而放眼全世界的计算机产业界,自 x86、ARM 之后,其它的指令集架构都不成功,直到 RISC-V 出现,才改变这一格局。任何硬件开发商或者相关组织都可以免费使用这套规范,构建 CPU 芯片产品。
更重要的是,RISC-V 可不止免费这一个优点,它还有着精简、高效、低能耗、模块化、可拓展、无历史负累低效指令等优势,完全抛弃了历史包袱。基础指令集只有 40 多条,规范文档仅有 145 页,对初学者非常友好。
RISC-V 的发展,深深根植于计算机体系结构,吸收了历史上各种指令集的经验和坑,如果你想入局的话,基础知识一定要扎实。比如CPU的基本结构、仿真与调试的方法、操作系统的启动与原理等等,都需要系统的学习与联系。刚好看到彭东老师的新课《计算机基础实战课》,基本涵盖了上面的全部内容。
这个课切入点非常特别,彭东会带你使用 Verilog 硬件描述语言,基于 RV32I 指令集,设计一个迷你 RISC-V 处理器,顺便一次性通关基础知识。
《三体》里有个让我印象深刻的情节,三体人通过锁死基础物理,限制了人类文明的发展。类比一下,能决定技术人上限的必然也是基础知识。彭东在底层和应用层穿梭多年,曾独立开发过两套全新的操作系统内核,他会是你补充基础知识的绝佳“引路人”。
整个专栏跟彭东学下来的话,硬件芯片、编程语言(汇编、C、RISC-V指令集等)、内存、进程、IO与文件管理等基础性知识都能学踏实,课程刚上线不久,期待你跟我一起挑战自我!
彭东是个相当神奇的男子。非科班出身,愣是凭借对技术的一腔热情,自学微机原理、编程语言、数据结构与算法,翻遍了操作系统和硬件书籍,先后独立开发了LMOS(基于x86_64的多进程支持SMP的操作系统)和LMOSEM(基于ARM32,支持软实时的嵌入式操作系统)。
此外,他还是Intel傲腾项目开发者之一,曾经为 Intel 做过内核层面的开发工作,对计算机底层技术简直顺手拈来。
去年他在极客时间出的爆款课程《操作系统实战45讲》非常受欢迎,按照他提供的源码,很多同学从0到1跟着写了个操作系统,以前觉得模棱两可的知识点全都清晰了,留言区好多人评价说“撒哈拉沙漠都没这课干”,上线短短一年就有 4.4w 人学习,足见其魅力。
这次的新专栏也是出于彭东工作多年总结出的经验,他做过前端、后端、内核的开发工作,出现Bug和故障的时候,总能快速理清排查思路,选用合适的工具、技术来分析问题,高效Debug;接手项目的时候,总能迅速分析出项目的痛点、难点,整理出实现需要哪些技术框架…他觉得,能来回穿梭于底层与高层之间,不至于手忙脚乱,最大的依仗就是深厚的计算机基础。
因此,他将踩过的坑、走过的弯路、收获的果实全都总结在了《计算机基础实战课》中,先手写个 RISC-V CPU ,再把计算机从底层到应用的关键知识点全部串联起来,谁不喜欢?而且,专栏配套的执行和调试代码,彭东之后都会放在Gitee上,方便大家练习!
关于专栏的具体展开,如下图👇
RISC-V 的火爆,带来的不仅是芯片设计人员的学习成本降低,RISC-V 在指令集上的简洁设计也降低了芯片的设计复杂度和芯片尺寸,进而压缩了研发和生产成本,迎合了如今低成本、低能耗的行业需求。
据 RISC-V 基金会资料显示,目前已经有 200 多家国内外大公司加入使用,未来这一数据必然还会快速增长,真可谓广阔天地,大有可为。
无论 RISC-V 最终能走到什么位置,我们这代人都是幸运的,这是时代给予我们的机会,因为你可以从头学习,可以参与到一个计算机指令集产业的从无到有,到加速发展的整个过程。不仅中国的态度是这样,整个世界对于 RISC-V 的态度也如此。这是一次产业界的大规模试错的机会。
彭东的新课用二十多讲带你手写一个 RISC-V CPU,是一个非常好的入局契机。课程目录贴在这里了,一分钟快速 get 专栏核心内容👇
如果你只想当个普通搬砖人,基础知识或许不太重要。但如果你想真正变强,打破技术天花板,那这些基础且硬核的内容必须学深、学透,尽管它学起来会很枯燥。
刚毕业的时候因为工作原因不得不死磕这些基础性的东西,现在工作越久,我越庆幸自己沉下心来打牢了基础,无论是问题排查还是性能调优,都帮了我大忙。某种程度上,熟知底层原理,就是在提高自己解决问题的能力。
芯片难题能否靠AI大模型破局
现在人工智能已经这么厉害了,人类是不是可以躺平了?
人工智能真正吸引了全世界的目光,是几年前的那场著名的棋局。下棋一直是人类智慧的精华,而围棋更是精华里的巅峰,皇冠上的明珠。在我们的印象里,围棋高手通常都是天赋异禀,智商拔群的人。从当年的棋圣聂卫平,再到现在最有影响力的围棋天才少年、17岁排名世界第一、从四段直升九段的柯洁,他们都是人们眼中的“最强大脑”。
2017年,谷歌的阿尔法狗和柯洁对局了三盘。结果大家都知道了,3:0,人工智能三,柯洁零。而柯洁泪洒赛场的情景也触动了很多人。
大家都在问:人工智能,真的已经这么厉害了吗?
人工智能,到底厉害在哪?
人工智能的厉害之处,就是能把一个具体的事情做到极致,做的又快又好。除了下棋之外,还有人脸识别、车牌号识别、做核酸的时候身份证识别等等。事实上,AI最厉害的地方并不是比人做的更好,而是能大规模复制。比如我们能在每个路口都放好几个摄像头,自动监测哪个车违章了、并且立刻识别车牌号。但我们没办法在每个路口都放好几个警察叔叔去做同样的事情。
但是,这些AI只擅长做一件事情,比如下棋或者识别车牌。如果让识别车牌的AI去下棋是很难的,但让柯洁去协管交通却并不难。这就是专用智能和通用智能的最大区别。
传统的人工智能都是针对某个应用,用很多数据训练出一个神经网络,然后把这个网络放到实际的应用里去工作。比如打败柯洁的人工智能AlphaGo,就是通过不断学习各种棋局、24小时不间断自己和自己下成千上万局棋,把自己练成了平平无奇的下棋机器。
但如果让它处理一个和下棋无关的应用,问题就来了。它从来没见过这个东西,自然就无从下手看。打个不那么恰当的比喻,人工智能里的神经网络,其实可以看成AI的脑容量。为了处理各种不同的应用、提高人工智能的通用性,就必须提升脑容量。
这个时候,就出现了「大模型」。
大模型,是AI进化的新阶段吗
顾名思义,大模型最主要的特点就是「大」,它指的是网络的参数非常多、规模非常大。经典的深度学习模型ResNet大概有2300万个参数,而大模型的开山之作GPT-3的参数量达到了1750亿,比传统的模型高出了近1000倍。
靠着这么大的规模,大模型的脑容量扩大了,能学习和处理的东西自然就多了。2021年八月,著名AI学者、斯坦福的李飞飞教授和100多位学者联合发表了一篇研究报告,深度分析了大模型面对的机遇和挑战。他们把大模型叫做「Foundation Models」,中文直译过来就是基础模型,从这个名字也可以看到大模型带来的基础性意义。
(报告全文已上传至知识星球 – 老石谈芯进阶版,请文末扫码进入星球查看)
这些学者也认为,大模型会在人工智能领域带来一波设计范式的转变,最重要的就是引领专用AI到通用AI的变化。
大模型之所以能做到通用AI,是因为它可以做大规模的训练,并且把各种领域的知识都学习整合在一起。在应用的时候只需要做一些微调,就可以用在不同的任务里,这个是小模型做不到的。
大模型另外一个好处,就是对输入数据的要求没那么高了,它通过小样本学习方法,可以从没有标注的数据里学习,并且通过少量有标注的数据不断进行修正。这相当于我们人类在学习知识的时候,往往会需要组成一个知识体系。这样在学习新知识的时候,就可以在这个体系里不断扩展,而不需要从头再来。
其实从2020年开始,全球各大公司和研究机构就已经开始了大模型的军备竞赛。除了前面说的GPT-3,2021年谷歌发布了万亿级模型Switch Transformer,微软和英伟达也推出了包含5300亿参数的自然语言生成模型。
当然了,在大模型这个领域,中国企业也一直保持着国际的先进水平,比如华为和鹏城实验室、中科院自动化所、武汉大学等发布了中文语言、多模态、遥感等系列大模型,它们的参数量都达到了千亿级别。此外阿里、浪潮也都相继推出了自己的大模型。
AI大模型,救世主还是乌托邦?
但是,我们在看任何事情的时候都不能只看一面,前面只说了AI大模型的好处,没说它的问题和不足。其中最大的问题,就是大模型的开发和部署的过程非常难。具体一点说,大模型都是拿钱、人、时间堆出来的。
就拿GPT-3举例,介绍它的论文长达72页、作者31人。训练这个大模型动用了超级计算机,训练成本超过1200万美元。这样的开发难度,的确能大力出奇迹,但也是普通人、甚至是普通公司和高校都做不到的。
(论文全文已上传至知识星球 – 老石谈芯进阶版,请文末扫码进入星球查看)
正是因为训练的成本非常高,所以一旦出现问题要去修正,就非常难了。
在大模型的部署和应用里,也同样存在着问题。
前面提到的李飞飞和其他AI学者撰写的报告里,也提到了大模型的两个问题,分别是「同质化」和「涌现」的风险。同质化指的是目前的大模型的基础原理其实都比较类似,一旦基础模型出现问题,都会被继承到大模型和下游应用里。涌现指的是某个行为是隐性归纳的,而不是专门训练出来的。这样一旦问题出现,我们既不理解它是怎么来的,也不知道它是怎么没的,总之就是难以预料和掌握。
所以可以看到,从规划、训练,到部署一个大模型,仍然需要克服诸多困难。所以这也就成了整个行业当前研究的重点。
这个其实和人工智能刚刚兴起的时候很像,当时人们要自己写深度学习的代码,一层一层地搭神经网络,然后再把这些模型部署到GPU或者其他硬件上运行。这个过程也是同样费时费力的,而且全行业估计也没几个人能做。但是后来出现了Tensorflow这样的深度学习框架,就把这个过程大大简化了,也大大降低了行业的门槛,让人工智能迎来了一波大爆发。
这就像厨师做饭不用从种地开始、工人干货不用从炼钢开始一样,各种AI框架、编程模型的产生,极大的减少了重复性的工作,让大家不用从头再造轮子了。AI专家只需要专注于调参(误)算法的创新就可以了。
同样的,大模型的未来发展也大概率会遵循这样的规律。这几年,人工智能已经开始从「大炼模型」到「炼大模型」转变,但大模型似乎都只有顶级大厂、高校和科研机构才能玩得起,动辄投入几十上百人、烧个几百上千万美元去炼大模型,普通人可玩不起。
成本是一方面,大模型的规划、开发、部署各个环节,每个都是天坑、都是吞金兽。本来大模型要解决的问题,就是要避免人们从头踩坑。怎么反过头来坑挖到自己身上了呢?
所以,为了让大模型更好的进行规划、开发和产业化落地,就需要一个新的框架和流程,去帮助大家解决大模型落地遇到的各种问题。
这也正是华为提出的「大模型全流程使能体系」要做的事情。
AI大模型,如何落地?
说白了,华为提出的这个「体系」就是一个大模型的框架,它整个分成了规划、开发和部署三大块,每块的核心思想都很清晰,就是要降低大模型的开发和应用门槛。
比如在规划阶段,这里面的核心是昇腾大模型沙盘。行军打仗的时候主帅会用沙盘进行推演,自己有哪些部队,每个部队的战力如何、特长如何,在沙盘里都一目了然。在这个大模型沙盘里,把军队换成了不同领域的大模型,比如针对自言语言处理的鹏程.盘古、针对计算机视觉的盘古CV、针对多模态的紫东.太初等等。研究者能在沙盘里进行推演,根据自己的应用和已有的大模型开展研究。
在沙盘推演完毕,就进入实战,也就是关键的开发阶段。在这个阶段,华为提供了大模型开发使能平台,包含了数据准备、基础模型开发、行业应用适配、模型推理部署的全流程工具。其中最核心的部分,是开发、微调、部署三个套件。如果要再挑出来一个皇冠上的明珠,那就是昇思MindSpore。它不仅有编程API这样的传统功能,还可以自动实现6个维度的并行运算,开发者只需要一行代码就能实现模型自动切分和自动化运算。
此外,它还能进行多级存储优化,让10万亿参数的模型跑在512张板卡上,提升开发效率、降低了成本。当训练意外中断的时候,会触发软硬件保护,让整个模型在几分钟之内恢复,避免重新来过的风险。
针对大模型的微调,华为也有MindX的大模型微调套件,实现一键式微调和小样本学习的低参数调优。也就是说,可以通过预置的任务模板,根据目标应用自动进行参数调节。
开发完毕,就可以部署了。在这个阶段,华为提供了MindStudio部署套件,可以进一步优化模型、根据应用场景进行分布式部署和推理,同时使用量化、剪枝、蒸馏等技术,对模型进行进一步压缩,可以实现10倍以上的压缩率,保障部署模型的安全。
其实不管是什么样的大模型、不管是什么样的开发框架,最终还是要用起来。大模型的意义,就是从以前的作坊式的AI开发,转向工厂化的大规模应用。不过为了真正实现规模化产业部署和推广,还需要产学研的通力合作,并且共同建立起一个发展生态。在这个领域,华为也支持伙伴成立了多个产业联盟,比如基于紫东.太初大模型的多模态人工智能产业联盟,以及即将成立的AI生物医药产业联盟等等。
不管是什么行业,单打独斗的日子早就一去不复返了,开放合作才是未来。
有布局、有实现、有落地,然后搜集反馈,帮助更好的布局和实现,从而形成一个大模型的生态闭环。再加上华为昇腾的AI算力基础设施、昇思MindSpore开源社区、以及各种创新使能计划,这些才是华为构建大模型生态的终极布局。
结语
回到一开始的问题,人工智能现在已经这么厉害了,人类是不是可以躺平了?悲观的人认为,人工智能会取代很多人类的工作,甚至也剥夺了我们下棋、打游戏的快乐和意义,因为就算是天才也赢不了人工智能,哪怕是一局。
但是,「赢」或许只能带来很少的乐趣,更大的乐趣是创造新的技术、新的工具,并由此给人类带来更多新的机会。柯洁被AI横扫后也曾反思,最后也想以他的话结束本文:
「人工智能战胜人类棋手也是人类科技的进步,人类的新智慧以某种形式战胜了古老智慧,这其实是人类的又一次自我超越」。
最大芯片IPO
天天IPO消息,今日(8月12日),海光信息正式登陆科创板。此次IPO,海光信息发行价为36元/股,开盘大涨94.44%,最新市值1400亿元,缔造了今年最大的半导体IPO。
这是一家国产CPU巨头。成立于2014年,海光信息脱胎于中科院,主要从事高端处理器、加速器等计算芯片产品和系统的研究、开发,产品主要包含海光通用处理器(CPU)和海光协处理器(DCU)。招股书显示,2021年公司业绩出现大幅增长,营收近23.1亿元,其中主要靠CPU。
眼下CPU创业大潮火爆。从海外到国内,进军CPU大风越刮越猛,国产CPU创业公司如雨后春笋冒出,悄悄涌现出如鸿钧微、遇贤微等一批新生力量。过去一年,VC/PE投资人密集拜访,集体出现在CPU赛道。沿着国产替代思路,投资人坚信中国势必会诞生世界级的CPU巨头。
脱胎中科院,市值1400亿
超级芯片IPO来了
海光信息的故事始于2014年。
这一年,正是中国半导体行业发展的新节点,《国家集成电路产业发展推动纲要》发布,千亿国家集成电路产业投资基金成立,海光信息应运而生,主攻CPU。
所谓CPU,指中央处理器(central processing unit),是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。简言之,人们的手机、电脑离不开CPU,现代人的生活也离不开CPU。
在很长一段时间里,这一领域被海外巨头牢牢占据。以主流架构x86 架构服务器 CPU 为例,2020年国内x86服务器芯片出货量698.1万颗,绝大部分市场份额被英特尔和AMD 两家公司占据,合计市场份额超过 95.00%,尤其是英特尔,产品市场占有率遥遥领先。
这是一个亟需国产替代的领域。从“十五计划”开始,国产CPU自主性的问题多次被提上议程,产业政策不断加码,泰山计划、863计划等科研计划出炉后,一批国产CPU品牌诞生。2002年,我国首款通用CPU——龙芯1号流片成功。2006年,国家还曾推出了“核高基”重大专项,“高”即为高端通用CPU。
海光信息的诞生正是处在这一大背景之下。和脱胎于中科院的龙芯中科类似,海光信息也是中科院系公司的典型代表。截止目前,中科院系上市公司中科曙光为海光信息第一大股东,持股比例为32.10%。
起初,海光信息的技术源起于 AMD 的技术授权。2016 年 3 月,海光一号 CPU 产品设计启动,两年后实现量产。2017 年 7 月,第二代 CPU 海光二号的产品研发工作启动,两年后也实现了量产。目前海光 CPU 系列海光一号、 海光二号已经实现商业化应用,海光三号完成实验室验证,海光四号处于研发阶段。
由于带有“国家队”光环,一路走来海光信息得到了不少VC/PE机构的支持。2014年海光信息天使轮融资中,中科曙光、国科投资、CBC宽带资本、混沌投资、长虹电器、金石投资、天创资本、中冀投资、中信证券投资等机构都来了。
2018年,海光信息启动A轮融资,获得长虹电器、成都产业集团、成都高投集团、新鼎资本、钛信资本、工银亚投、国科投资等机构的支持。同年A+轮,获得海河产业基金加码。
从2019年开始,中国半导体投资开始大爆发,随后海光信息顺利完成了B轮和C轮融资,融泰中和、晨山资本、昆高新集团参与投资。
直至今日,海光信息终于登上IPO敲钟舞台,最新市值1400亿。公开数据显示,截至2022年6月13日,A股300多家科创板企业中,但市值超过900亿元的公司仅4家。
主打国产CPU,一年进账超20亿
那么,海光信息凭什么撑起一个千亿IPO?
海光信息的产品主要分为通用处理器(CPU)和协处理器(DCU),但主要收入来源为CPU。
从招股书看到,2019至2021年,公司营业收入分别为3.79亿元、10.22亿元和 23.1亿 元,其中CPU的销售收入在营业收入的占比达100.00%、100.00%和89.66%。
过去两年,国产CPU呈现爆发之势,海光信息的收入也水涨船高。招股书提到,营收增长原因主要有两方面,第一,拓展了新的客户,服务器厂商对国产 CPU 需求增加;第二,2020 年,海光二号系列CPU芯片实现规模化出货,2021 年,公司深算一号芯片实现规模化出货,进一步丰富了产品线,促进了销售收入的增长。
主要开支是研发。招股书显示,2019至2021年,海光信息累计研发投入为35亿元,占营业收入比例达到 95.35%。而2019至2021年,海光信息研发支出约8.65亿元、10.89亿元、15.85亿元,逐年增加。
但营收大涨后,归母净利润同步实现了较大增长。2019年至2021年,海光信息归母净利润分别为-8290.46万元、-3914.45万元和3.27亿元。2021 年,海光信息自设立以来首次实现盈利。
招股书提到,2021 年,国内最终客户对海光的需求日益强劲,持续经营前景良好。2022 年 1-9 月,公司营业收入预计约为 36.70 亿元至 40.80 亿元,同比增长 170% 至 200%;归母净利润预计为 6.10 亿元至 7.00 亿元,同比增长 392% 至 465%。
目前海光信息的产品下游客户主要为公司中国移动、浪潮、联想、新华三、同方等服务器厂商,且客户集中度较高。海光信息向前五大客户的销售金额合计占当期营业收入的比例分别为 99.12%、92.21% 和 91.23%。
事实上,如果说在技术、规模效应等方面,海光信息可能不具有那么明显优势,但最大的特点是国产。2020 年,海光信息CPU 产品销售量约占总体市场份额的 3.75%,占据了 国产 x86 服务器处理器绝大部分市场份额。
截至 2022 年 2 月 27 日,中国移动、中国电信 2021-2022 服务器 集采中标名单中,合计国产服务器整机集采额 73.47 亿元,其中搭载海光处理器 的服务器整机集采额 37.84 亿元,占比达到 50%。
CPU创业潮大爆发
有人融资凶猛,有人濒临倒闭
海光信息IPO市值大涨,堪称国产CPU火爆的一缕缩影。
从海外到国内,CPU大风越刮越猛。从2020年9月英伟达计划从孙正义手中收购ARM,再到2021年发布第一个数据中心CPU,GPU巨头英伟达在CPU领域的野心已展露无疑。虽然英伟达收购ARM最终落败,但英伟达仍表示未来将坚持“CPU+GPU+DPU”的三芯战略。而国内GPU初创公司壁仞创始人张文也曾表示,要搭建 “CPU+GPU+DPU” 的数据中心系统级解决方案。
这个赛道到底有多热?不久前,国产CPU第一股龙芯中科成功登陆科创板,上市首日股价大涨,现市值超380亿元,市盈率高达183。
国产CPU创业潮势不可挡。鸿钧微、遇贤微等新成立的CPU公司正陆陆续续浮出水面。他们大多低调神秘,在公司官网也很难见到创始人团队的身影,但融资速度快,融资金额令人咋舌。
今年5月,成立不到一年的鸿钧微电子完成近8亿元的天使轮与Pre-A轮融资,除华登国际、高瓴创投、鼎晖VGC(创新与成长基金)三家一线机构联合领投外,其他投资人包含壁仞科技、芯岚微、晨道资本、星睿资本、松禾资本、六脉资本、C资本、中益仁资本、海河启睿资本、小即是大创投等,简单细数,多达十多家机构。
鸿钧微电子创始团队阵容豪华,将开发基于ARM架构的服务器CPU。其中,公司CEO沈荣英特尔工作超过20年,参与了x86架构服务器替代传统RISC架构服务器的过程;CTO陈伟祥曾是华为鲲鹏内核的主架构师,还曾在阿里平头哥团队“倚天710”项目中担任SoC设计负责人。
此外,遇贤微近期也获得了A轮融资,受到广州开发区产业基金、广开芯泉基金、创新工场、陈大同等投资人的支持。创新工场执行董事兼半导体总经理王震翔表示:“国内大市场对具备竞争力的服务器CPU期待已久。”
2021年,遇贤微天使轮曾融资数亿元,投资方包含创新工场、常春藤资本、光远资本、东方嘉富、源来资本。遇贤微创始人LUO YONG曾在国产 CPU 公司兆芯担任副总经理,联合创始人姬信伟为曾为英特尔科学家,华为美国研发总监。
曾几何时,CPU是一个冷门赛道,曾经仅有少量国家队背景的投资机构活跃在这一片江湖,而伴随着国产替代的浪潮卷来,国产CPU开始火爆起来,国内VC/PE机构大举涌入,这是过去不曾见到的热闹景象。
喧嚣之下,泡沫也开始浮现出来。最近,一家知名CPU创业公司——启灵芯解散的消息在坊间流传。资料显示,启灵芯成立于2021下半年,核心技术团队出自阿里平头哥,不到一年时间完成两轮融资,融资金额高达约 6 亿元。
但好景不长。据《晚点LatePost》报道,启灵芯内部信显示,停止运营是因为有 “合伙人不配合融资”。今年6 月前,启灵芯还在招聘,发出了近 40 个新 offer。但从 7 月起,候选人入职流程陆续被暂停。现创始人林葳已不再担任启灵芯法人,本月,林葳曾在启灵芯上海办公室向部分员工当面道歉,称 “对不起大家”。
事实上,关于质疑CPU赛道声音一直都存在。不少投资人表示看不懂。北京某半导体产业基金投资人告诉投资界,CPU这个赛道一定是寡头格局,CPU和生态深度绑定,下游客户没有购买多种CPU的需求。
但更多投资人坚信:服务器CPU是一个千亿级的市场,也是半导体芯片设计领域最具挑战力的“塔尖”,中国作为在全球半导体领域奋起直追的国家,必然会出现全球领先的服务器CPU公司。正如现在,第一家千亿市值的国产CPU巨头已经跑出来。
PCIe体系结构及组成部件
PCIe体系结构的组成部件
PCIe总线作为处理器系统的局部总线,其作用与PCI总线类似,主要目的是为了连接处理器系统中的外部设备,当然PCIe总线也可以连接其他处理器系统。在不同的处理器系统中,PCIe体系结构的实现方法略有不同。但是在大多数处理器系统中,都使用了RC、Switch和PCIe-to-PCI桥这些基本模块连接PCIe和PCI设备。在PCIe总线中,基于PCIe总线的设备,也被称为EP(Endpoint)。
参考链接:
《图解数据中心基础设施:PCIe总线和NVMe SSD测试》
《PCIe Gen 4&5总线协议分析和SSD测试工具白皮书》
基于PCIe架构的处理器系统
在不同的处理器系统中,PCIe体系结构的实现方式不尽相同。PCIe体系结构以Intel的x86处理器为蓝本实现,已被深深地烙下x86处理器的印记。在PCIe总线规范中,有许多内容是x86处理器独有的,也仅在x86处理器的Chipset中存在。在PCIe总线规范中,一些最新的功能也在Intel的Chipset中率先实现。本节将以一个虚拟的处理器系统A和PowerPC处理器为例简要介绍RC的实现,并简单归纳RC的通用实现机制。
1 处理器系统A
在有些处理器系统中,没有直接提供PCI总线,此时需要使用PCIe桥,将PCIe链路转换为PCI总线之后,才能连接PCI设备。在PCIe体系结构中,也存在PCI总线号的概念,其编号方式与PCI总线兼容。一个基于PCIe架构的处理器系统A如图所示。
在上图的结构中,处理器系统首先使用一个虚拟的PCI桥分离处理器系统的存储器域与PCI总线域。FSB总线下的所有外部设备都属于PCI总线域。与这个虚拟PCI桥直接相连的总线为PCI总线0。这种架构与Intel的x86处理器系统较为类似。
在这种结构中,RC由两个FSB-to-PCIe桥和存储器控制器组成。值得注意的是在图4 7中,虚拟PCI桥的作用只是分离存储器域与PCI总线域,但是并不会改变信号的电气特性。RC与处理器通过FSB连接,而从电气特性上看,PCI总线0与FSB兼容,因此在PCI总线0上挂接的是FSB-to-PCIe桥,而不是PCI-to-PCIe桥。
在PCI总线0上有一个存储器控制器和两个FSB-to-PCIe桥。这两个FSB-to-PCIe桥分别推出一个×16和×8的PCIe链路,其中×16的PCIe链路连接显卡控制器(GFX),其编号为PCI总线1;×8的PCIe链路连接一个Switch进行PCIe链路扩展。而存储器控制器作为PCI总线0的一个Agent设备,连接DDR插槽或者颗粒。
此外在这个PCI总线上还可能连接了一些使用“PCI配置空间”管理的设备,这些设备的访问方法与PCI总线兼容,在x86处理器的Chipset中集成了一些内嵌的设备。这些内嵌的设备使用均使用“PCI配置空间”进行管理,包括存储器控制器。
PCIe总线使用端到端的连接方式,因此只有使用Switch才能对PCIe链路进行扩展,而每扩展一条PCIe链路将产生一个新的PCI总线号。如图4 7所示,Switch可以将1个×8的PCIe端口扩展为4个×2的PCIe端口,其中每一个PCIe端口都可以挂接EP。除此之外PCIe总线还可以使用PCIe桥,将PCIe总线转换为PCI总线或者PCI-X总线,之后挂接PCI/PCI-X设备。多数x86处理器系统使用这种结构连接PCIe或者PCI设备。
在PCIe总线规范中并没有明确提及PCIe主桥,而使用RC概括除了处理器之外的所有与PCIe总线相关的内容。在PCIe体系结构中,RC是一个很模糊也很混乱的概念。Intel使用PCI总线的概念管理所有外部设备,包括与这些外部设备相关的寄存器,因此在RC中包含一些实际上与PCIe总线无关的寄存器。使用这种方式有利于系统软件使用相同的平台管理所有外部设备,也利于平台软件的一致性,但是仍有其不足之处。
2 PowerPC处理器
PowerPC处理器挂接外部设备使用的拓扑结构与x86处理器不同。在PowerPC处理器中,虽然也含有PCI/PCIe总线,但是仍然有许多外部设备并不是连接在PCI总线上的。在PowerPC处理器中,PCI/PCIe总线并没有在x86处理器中的地位。在PowerPC处理器中,还含有许多内部设备,如TSEC(Three Speed Ethenet Controller)和一些内部集成的快速设备,与SoC平台总线直接相连,而不与PCI/PCIe总线相连。在PowerPC处理器中,PCI/PCIe总线控制器连接在SoC平台总线的下方。
Freescale即将发布的P4080处理器,采用的互连结构与之前的PowerPC处理器有较大的不同。P4080处理器是Freescale第一颗基于E500 mc内核的处理器。E500 mc内核与之前的E500 V2和V1相比,从指令流水线结构、内存管理和中断处理上说并没有本质的不同。E500mc内核内置了一个128KB大小的L2 Cache,该Cache连接在BSB总线上;而E500 V1/V2内核中并不含有L2 Cache,而仅含有L1 Cache而且与FSB直接相连。在E500mc内核中,还引入了虚拟化的概念。在P4080处理器中,一些快速外部设备,如DDR控制器、以太网控制器和PCI/PCIe总线接口控制器也是直接或者间接地连接到CoreNet中,在P4080处理器,L3 Cache也是连接到CoreNet中。P4080处理器的拓扑结构如图4 8所示。
目前Freescale并没有公开P4080处理器的L1、L2和L3 Cache如何进行Cache共享一致性。多数采用CoreNet架构互连的处理器系统使用目录表法进行Cache共享一致性,如Intel的Nehelem EX处理器。P4080处理器并不是一个追求峰值运算的SMP处理器系统,而针对Data Plane的应用,因此P4080处理器可能并没有使用基于目录表的Cache一致性协议。在基于全互连网络的处理器系统中如果使用“类总线监听法”进行Cache共享一致性,将不利于多个CPU共享同一个存储器系统,在Cache一致性的处理过程中容易形成瓶颈。
如图4 8所示,P4080处理器的设计重点并不是E500mc内核,而是CoreNet。CoreNet内部由全互连网络组成,其中任意两个端口间的通信并不会影响其他端口间的通信。与MPC8548处理器相同,P4080处理器也使用OceaN[1]结构连接PCIe与RapidIO接口。
在P4080处理器中不存在RC的概念,而仅存在PCIe总线控制器,当然也可以认为在P4080处理器中,PCIe总线控制器即为RC。P4080处理器内部含有3个PCIe总线控制器,如果该处理器需要连接更多的PCIe设备时,需要使用Switch扩展PCIe链路。
在P4080处理器中,所有外部设备与处理器内核都连接在CoreNet中,而不使用传统的SoC平台总线[2]进行连接,从而在有效提高了处理器与外部设备间通信带宽的同时,极大降低了访问延时。此外P4080处理器系统使用PAMU(Peripheral Access Management Unit)分隔外设地址空间与CoreNet地址空间。在这种结构下,10GE/1GE接口使用的地址空间与PCI总线空间独立。
P4080处理器使用的PAMU是对MPC8548处理器ATMU的进一步升级。使用这种结构时,外部设备使用的地址空间、PCI总线域地址空间和存储器域地址空间的划分更加明晰。在P4080处理器中,存储器控制器和存储器都属于一个地址空间,即存储器域地址空间。此外这种结构还使用OCeaN连接SRIO和PCIe总线控制器,使得在OCeaN中的PCIe端口之间可以直接通信,而不需要通过CoreNet,从而减轻了CoreNet的负载。
从内核互连和外部设备互连的结构上看,这种结构具有较大的优势。但是采用这种结构需要使用占用芯片更多的资源,CoreNet的设计也十分复杂。而最具挑战的问题是,在这种结构之下,Cache共享一致性模型的设计与实现。在Boxboro EX处理器系统中,可以使用QPI将多个处理器系统进行点到点连接,也可以组成一个全互连的处理器系统。这种结构与P4080处理器使用的结构类似,但是Boxboro EX处理器系统包含的CPU更多。
基于PCIe总线的通用处理器结构
在不同的处理器系统中,RC的实现有较大差异。PCIe总线规范并没有规定RC的实现细则。在有些处理器系统中,RC相当于PCIe主桥,也有的处理器系统也将PCIe主桥称为PCIe总线控制器。而在x86处理器系统中,RC除了包含PCIe总线控制器之外,还包含一些其他组成部件,因此RC并不等同于PCIe总线控制器。
如果一个RC中可以提供多个PCIe端口,这种RC也被称为多端口RC。如MPC8572处理器的RC可以直接提供3条PCIe链路,因此可以直接连接3个EP。如果MPC8572处理器需要连接更多EP时,需要使用Switch进行链路扩展。
而在x86处理器系统中,RC并不是存在于一个芯片中,如在Montevina平台中,RC由MCH和ICH两个芯片组成。本节并不对x86和PowerPC处理器使用的PCIe总线结构做进一步讨论,而只介绍这两种结构的相同之处。一个通用的,基于PCIe总线的处理器系统如图4 9所示。
上图所示的结构将PCIe总线端口、存储器控制器等一系列与外部设备有关的接口都集成在一起,并统称为RC。RC具有一个或者多个PCIe端口,可以连接各类PCIe设备。PCIe设备包括EP(如网卡、显卡等设备)、Switch和PCIe桥。PCIe总线采用端到端的连接方式,每一个PCIe端口只能连接一个EP,当然PCIe端口也可以连接Switch进行链路扩展。通过Switch扩展出的PCIe链路可以继续挂接EP或者其他Switch。
RC的组成结构
RC是PCIe体系结构的一个重要组成部件,也是一个较为混乱的概念。RC的提出与x86处理器系统密切相关。事实上,只有x86处理器才存在PCIe总线规范定义的“标准RC”,而在多数处理器系统,并不含有在PCIe总线规范中涉及的,与RC相关的全部概念。
不同处理器系统的RC设计并不相同,在图4 7中的处理器系统中,RC包括存储器控制器、两个FSB-to-PCIe桥。而在图4 8中的PowerPC处理器系统中,RC的概念并不明晰。在 PowerPC处理器中并不存在真正意义上的RC,而仅包含PCIe总线控制器。
在x86处理器系统中,RC内部集成了一些PCI设备、RCRB(RC Register Block)和Event Collector等组成部件。其中RCRB由一系列“管理存储器系统”的寄存器组成,而仅存在于x86处理器中;而Event Collector用来处理来自PCIe设备的错误消息报文和PME消息报文。RCRB寄存器组属于PCI总线域地址空间,x86处理器访问RCRB的方法与访问PCI设备的配置寄存器相同。在有些x86处理器系统中,RCRB在PCI总线0的设备0中。
RCRB是x86处理器所独有的,PowerPC处理器也含有一组“管理存储器系统”的寄存器,这组寄存器与RCRB所实现的功能类似。但是在PowerPC处理器中,该组寄存器以CCSRBAR寄存器为基地址,处理器采用存储器映像方式访问这组寄存器。
如果将RC中的RCRB、内置的PCI设备和Event Collector去除,该RC的主要功能与PCI总线中的HOST主桥类似,其主要作用是完成存储器域到PCI总线域的地址转换。但是随着虚拟化技术的引入,尤其是引入MR-IOV技术之后,RC的实现变得异常复杂。
但是RC与HOST主桥并不相同,RC除了完成地址空间的转换之外,还需要完成物理信号的转换。在PowerPC处理器的RC中,来自OCeaN或者FSB的信号协议与PCIe总线信号使用的电气特性并不兼容,使用的总线事务也并不相同,因此必须进行信号协议和总线事务的转换。
在P4080处理器中,RC的下游端口可以挂接Switch扩展更多的PCIe端口,也可以只挂接一个EP。在P4080处理器的RC中,设置了一组Inbound和Outbound寄存器组,用于存储器域与PCI总线域之间地址空间的转换;而P4080处理器的RC还可以使用Outbound寄存器组将PCI设备的配置空间直接映射到存储器域中。PowerPC处理器在处理PCI/PCIe接口时,都使用这组Inbound和Outbound寄存器组。
在P4080处理器中,RC可以使用PEX_CONFIG_ADDR与PEX_CONFIG_DATA寄存器对 EP进行配置读写,这两个寄存器与MPC8548处理器HOST主桥的PCI_CONFIG_ADDR和PCI_CONFIG_DATA寄存器类似,本章不再详细介绍这组寄存器。而x86处理器的RC设计与PowerPC处理器有较大的不同,实际上和大多数处理器系统都不相同。x86处理器赋予了RC新的含义,PCIe总线规范中涉及的RC也以x86处理器为例进行说明,而且一些在PCIe总线规范中出现的最新功能也在Intel的x86处理器系统中率先实现。在x86处理器系统中的RC实现也比其他处理器系统复杂得多。深入理解x86处理器系统的RC对于理解PCIe体系结构非常重要。
Switch
本篇在上一节中简单介绍了在PCIe总线中,如何使用Switch进行链路扩展,本节主要介绍Switch的内部结构。从系统软件的角度上看,每一个PCIe链路都占用一个PCI总线号,但是一条PCIe链路只能连接一个PCI设备,Switch、EP或者PCIe桥片。PCIe总线使用端到端的连接方式,一条PCIe链路只能连接一个设备。
一个PCIe链路需要挂接多个EP时,需要使用Switch进行链路扩展。一个标准Switch具有一个上游端口和多个下游端口。上游端口与RC或者其他Switch的下游端口相连,而下游端口可以与EP、PCIe-to-PCI-X/PCI桥或者下游Switch的上游端口相连。
PCIe总线规范还支持一种特殊的连接方式,即Crosslink连接方式。使用这种方式时,Switch的下游端口可以与其他Switch的下游端口直接连接,上游端口也可以其他Switch的上游端口直接连接。在PCIe总线规范中,Crosslink连接方式是可选的,并不要求PCIe设备一定支持这种连接方式。
在PCIe体系结构中,Switch的设计难度仅次于RC,Switch也是PCIe体系结构的核心所在。而从系统软件的角度上看,Switch内部由多个PCI-to-PCI桥组成,其中每一个上游和下游端口都对应一个虚拟PCI桥。在一个Switch中有多个端口,在其内部就有多少个虚拟PCI桥,就有多少个PCI桥配置空间。值得注意的是,在Switch内部还具有一条虚拟的PCI总线,用于连接各个虚拟PCI桥,系统软件在初始化Switch时,需要为这条虚拟PCI总线编号。Switch的组成结构如图4 10所示。
Switch需要处理PCIe总线传输过程中的QoS问题。PCIe总线的QoS要求PCIe总线区别对待优先权不同的数据报文,而且无论PCIe总线的某一个链路多么拥塞,优先级高的报文,如等时报文(Isochronous Packet)都可以获得额定的数据带宽。而且PCIe总线需要保证优先级较高的报文优先到达。PCIe总线采用虚拟多通路VC技术,并在这些数据报文设定一个TC(Traffic Class)标签,该标签由3位组成,将数据报文根据优先权分为8类,这8类数据报文可以根据需要选择不同的VC进行传递。
在PCIe总线中,每一条数据链路上最多可以支持8个独立的VC。每个VC可以设置独立的缓冲,用来接收和发送数据报文。在PCIe体系结构中,TC和VC紧密相连,TC与VC之间的关系是“多对一”。
TC可以由软件设置,系统软件可以选择某类TC由哪个VC进行传递。其中一个VC可以传递TC不相同的数据报文,而TC相同的数据报文在指定一个VC传递之后,不能再使用其他VC。在许多处理器系统中,Switch和RC仅支持一个VC,而x86处理器系统和PLX的Switch中可以支持两个VC。
下文将以一个简单的例子说明如何使用TC标签和多个VC,以保证数据传送的服务质量。我们将PCIe总线的端到端数据传递过程模拟为使用汽车将一批货物从A点运送到B点。如果我们不考虑服务质量,可以采用一辆汽车运送所有这些货物,经过多次往返就可以将所有货物从A点运到B点。但是这样做会耽误一些需要在指定时间内到达B点的货物。有些货物,如一些急救物资、EMS等其他优先级别较高的货物,必须要及时地从A点运送到B点。这些急救物资的运送应该有别于其他普通物资的运送。
为此我们首先将不同种类的货物进行分类,将急救物资定义为TC3类货物,EMS定义为TC2类货物,平信定义为TC1类货物,一般包裹定义为TC0类货物,我们最多可以提供8种TC类标签进行货物分类。
之后我们使用8辆汽车,分别是VC0~7运送这些货物,其中VC7的速度最快,而VC0的速度最慢。当发生堵车事件时,VC7优先行驶,VC0最后行驶。然后我们使用VC3运送急救物资,VC2运送EMS,VC1运送平信,VC0运送包裹,当然使用VC0同时运送平信和包裹也是可以的,但是平信或者包裹不能使用一种以上的汽车运送,如平信如果使用了VC1运输,就不能使用VC0。因为TC与VC的对应关系是“多对一”的关系。
采用这种分类运输的方法,我们可以做到在A点到B点带宽有限的情况下,仍然可以保证急救物资和EMS可以及时到达B点,从而提高了服务质量。
PCIe总线除了解决数据传送的QoS问题之外,还进一步考虑如何在链路传递过程中,使用流量控制机制防止拥塞。在PCIe体系结构中,Switch处于核心地位。PCIe总线使用Switch进行链路扩展,在Switch中,每一个端口对应一个虚拟PCI桥。深入理解PCI桥是理解Switch软件组成结构的基础。目前PCIe总线提出了MRA-Switch的概念,这种Switch与传统Switch有较大的区别。
VC和端口仲裁
在Switch中存在多个端口,其中来自不同Ingress端口的报文可以发向同一个Egress端口,因此Switch必须要解决端口仲裁和路由选径的问题。所谓端口仲裁指来自不同Ingress端口的报文到达同一个Egress端口的报文通过顺序,端口仲裁机制如图4 11所示。
在一个Switch中设有仲裁器,该仲裁器规定了数据报文通过Switch的规则。在PCIe总线中存在两种仲裁机制,分别是基于VC和基于端口的仲裁机制。端口仲裁机制主要针对RC和Switch,当多个Ingress端口需要向同一个Egress端口发送数据报文时需要进行端口仲裁。具体地讲,在PCIe体系结构中有三个端口,需要进行端口仲裁。
• Switch的Egress端口。当EP A和EP B同时访问EP C,D或者DDR-SDRAM时,需要通过Switch的Egress端口C。此时Switch需要进行端口仲裁确定是EP A的数据报文还是EP B的数据报文优先通过Egress端口C。
• 多端口RC的Egress端口。当RC的端口1和端口3同时访问Endpoint C时,RC的端口2需要进行端口仲裁,决定来自RC哪个端口的数据可以率先通过。
• RC通往主存储器的端口。当RC的端口1、端口2和端口3同时访问DDR控制器时,这些数据报文将通过RC的Egress端口4,此时需要进行端口仲裁。
在PCIe体系结构中,链路的端口仲裁需要根据每一个VC独立设置,而且可以使用不同的算法进行端口仲裁。下文以图4 11中,Switch的两个Ingress端口A和B向Egress端口C发送数据报文为例,简要说明端口仲裁和VC仲裁的使用方法,其过程如图4 12所示。
基于VC的仲裁是指发向同一个端口的数据报文,根据使用的VC而进行仲裁的方式。如上图所示,当来自端口B和端口A数据报文(分别使用VC0和VC1通路)在到达端口C之前,需要首先进行端口仲裁后,才能进行VC仲裁。PCIe总线规定了3种VC仲裁方式, 分别为Strict Priority,RR(Round Robin)和WRR(Weighted Round Robin)算法。
当使用Strict Priority仲裁方式时,发向VC7的数据报文具有最高的优先级,而发向VC0的数据报文优先级最低。PCIe总线允许对Switch或者RC的部分VC采用Strict Priority方式进行仲裁,而对其他VC采用RR和WRR算法,如VC7~4采用Strict Priority方式,而采用其他方式处理VC3~0。
使用RR方式时,所有VC具有相同的优先级,所有VC轮流使用PCIe链路。WRR方式与RR算法类似,但是可以对每一个VC进行加权处理,采用这种方式可以适当提高VC7的优先权,而将VC0的优先权适当降低。
我们假定Ingress端口A和Ingress B向Egress端口C进行数据传递时,使用两个VC通路,分别是VC0和VC1。其中标签为TC0~3的数据报文使用VC0传送,而标签为TC4~7数据报文使用VC1传送。
而数据报文在离开Egress端口C时,需要首先进行端口仲裁,之后再通过VC仲裁,决定哪个报文优先传送。数据报文从Ingress A/B端口发送到Egress C端口时,将按照以下步骤进行处理。
(1) 首先到达Ingress A/B端口的数据报文,将根据该端口的TC/VC映射表[8]决定使用该端口的哪个VC通道。如图4 12所示,假设发向端口A的数据报文使用TC0~TC3,而发向端口B的数据报文使用TC0~TC7,这些数据报文在端口A中仅使用了VC0通道,而在端口B中使用了VC0和VC1两个通道。
(2) 数据报文在端口中传递时,将通过路由部件(Routing Logic),将报文发送到合适的端口。如图4 12所示,端口C可以接收来自端口A或者B的数据报文。
(3) 当数据报文到达端口C时,首先需要经过TC/VC映射表,确定在端口C中使用哪个VC通路接收不同类型的数据报文。
(4) 对于端口C,其VC0通道可能会被来自端口A的数据报文使用,也可能会被来自端口B的数据报文使用。因此在PCIe的Switch中必须设置一个端口仲裁器,决定来自不同数据端口的数据报文如何使用VC通路。
(5) 数据报文通过端口仲裁后,获得VC通路的使用权之后,还需要经过Switch中的VC仲裁器,将数据报文发送到实际的物理链路中。
PCIe总线规定,系统设计者可以使用以下三种方式进行端口仲裁。
(1) Hardware-fixed仲裁策略。如在系统设计时,采用固化的RR仲裁方法。这种方法的硬件实现原理较为简单,此时系统软件不能对端口仲裁器进行配置。
(2) WRR仲裁策略,即加权的RR仲裁策略。
(3) Time-Based WRR仲裁策略,基于时间片的WRR仲裁策略,PCIe总线可以将一个时间段分为若干个时间片(Phase),每个端口占用其中的一个时间片,并根据端口使用这些时间片的多少对端口进行加权的一种方法。使用WRR和Time-Based WRR仲裁策略,可以在某种程度上提高PCIe总线的QoS。
PCIe设备的Capability寄存器规定了端口仲裁使用的算法。有些PCIe设备并没有提供多种端口仲裁算法,可能也并不含有Capability寄存器。此时该PCIe设备使用Hardware-fixed仲裁策略。
PCIe-to-PCI/PCI-X桥片
本节将PCIe-to-PCI/PCI-X桥片简称为PCIe桥片。该桥片有两个作用。
• 将PCIe总线转换为PCI总线,以连接PCI设备。在一个没有提供PCI总线接口的处理器中,需要使用这类桥片连接PCI总线的外设。许多PowerPC处理器在提供PCIe总线的同时,也提供了PCI总线,因此PCIe-to-PCI桥片对基于PowerPC处理器系统并不是必须的。
• 将PCI总线转换为PCIe总线(这也被称为Reverse Bridge),连接PCIe设备。一些低端的处理器并没有提供PCIe总线,此时需要使用PCIe桥将PCI总线转换为PCIe总线,才能与其他PCIe设备互连。这种用法初看比较奇怪,但是在实际应用中,确实有使用这一功能的可能。本节主要讲解PCIe桥的第一个作用。
PCIe桥的一端与PCIe总线相连,而另一端可以与一条或者多条PCI总线连接。其中可以连接多个PCI总线的PCIe桥也被称为多端口PCIe桥。
PCIe总线规范提供了两种多端口PCIe桥片的扩展方法。多端口PCIe桥片指具有一个上游端口和多个下游端口的桥片。其中上游端口连接PCIe链路,而下游端口推出PCI总线,连接PCI设备。
目前虽然PCIe总线非常普及,但是仍然有许多基于PCI总线的设计,这些基于PCI总线的设计可以通过PCIe桥,方便地接入到PCIe体系结构中。目前有多家半导体厂商可以提供PCIe桥片,如PLX、NXP、Tundra和Intel。就功能的完善和性能而言,Intel的PCIe桥无疑是最佳选择,而PLX和Tundra的PCIe桥在嵌入式系统中得到了广泛的应用。
PCIe设备的扩展配置空间
本书在上一节讲述了PCI设备使用的基本配置空间。这个基本配置空间共由64个字节组成,其地址范围为0x00~0x3F,这64个字节是所有PCI设备必须支持的。事实上,许多PCI设备也仅支持这64个配置寄存器。
此外PCI/PCI-X和PCIe设备还扩展了0x40~0xFF这段配置空间,在这段空间主要存放一些与MSI或者MSI-X中断机制和电源管理相关的Capability结构。其中所有能够提交中断请求的PCIe设备,必须支持MSI或者MSI-X Capability结构。
PCIe设备还支持0x100~0xFFF这段扩展配置空间。PCIe设备使用的扩展配置空间最大为4KB,在PCIe总线的扩展配置空间中,存放PCIe设备所独有的一些Capability结构,而PCI设备不能使用这段空间。
在x86处理器中,使用CONFIG_ADDRESS寄存器与CONFIG_DATA寄存器访问PCIe配置空间的0x00~0xFF,而使用ECAM方式访问0x000~0xFFF这段空间;而在PowerPC处理器中,可以使用CFG_ADDR和CFG_DATA寄存器访问0x000~0xFFF。
PCI-X和PCIe总线规范要求其设备必须支持Capabilities结构。在PCI总线的基本配置空间中,包含一个Capabilities Pointer寄存器,该寄存器存放Capabilities结构链表的头指针。在一个PCIe设备中,可能含有多个Capability结构,这些寄存器组成一个链表,其结构如图4 14所示。
其中每一个Capability结构都有唯一的ID号,每一个Capability寄存器都有一个指针,这个指针指向下一个Capability结构,从而组成一个单向链表结构,这个链表的最后一个Capability结构的指针为0。
一个PCIe设备可以包含多个Capability结构,包括与电源管理相关、与PCIe总线相关的结构、与中断请求相关的Capability结构、PCIe Capability结构和PCIe扩展的Capability结构。
IC发展趋势
2022国际集成电路展览会暨研讨会(IIC)是您了解产业趋势、行业痛点、解决方案、技术分享、政策解析等硬核干货的重点窗口!
部分参会参展厂商
重磅演讲嘉宾
参考文献链接
https://mp.weixin.qq.com/s/elZQwZT1SKoDMrZ7qhlqwg
https://mp.weixin.qq.com/s/MzPlBKmK5CigFKWd7WbC1A
https://mp.weixin.qq.com/s/gfEj6cFqNM09LKQ2H--sFQ
https://mp.weixin.qq.com/s/ordM_ITgTBW61RHGld1HAw
https://mp.weixin.qq.com/s/xULgZ6mbyicChOdZkTnk3A
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2021-08-15 CMOS图像传感器与DDI显示芯片