《CPU通识课》读书笔记

在图书馆借了《CPU通识课》这个本书,读完了,感觉还是有不少收获,有很多入门知识得到了回顾和加强,也有收获部分新的知识,这不是很深的技术和理论,对,就如标题所说只是一个入门。总的来说,还是觉得是不错的一本书,让我至少跟开发FPGA、ASIC、CPU的同事/朋友等交流时有一定的基本概念不止于完全听不懂。
同时经过这些年的工作,再结合这本书来看,其实里面的东西都很实用,再回过头来看十多年前大学时老师教过的课程,其实底层的基本原理和技术,如《模拟电路》、《数字电路》、《微机原理》、《Verilog-FPGA设计》、《集成电路》等都是我们的大学专业课,但当时自己似乎没有很努力或有兴趣去学习。当时老师们也没有特别强调课程的价值,没有和CPU芯片研发等工业界的实践结合起来(当然芯片研发热 是这几年才特别热门),当时学的时候没感觉特别重要,认为还不如学点C语言/Java语言有用。其实,这些基础的知识的生命周期比较长,现在想想大学那些专业课,其实也没太过时,关键老师要激发学生学习的兴趣、并教得专业和生动。
如下只记录了书中的一些有用的笔记。

冯诺依曼体系结构:运算器、控制器、存储器、输入设备、输出设备。运算器、控制器两部分常被一起设计,合称为中央处理器(CPU)。
为了增强性能、降低功耗,CPU的核心模块经常需要手工定制电路。在纳米级尺度上对晶体管进行排兵布阵。
MIPS(million instructions per second)、MFLOPS(million floating-point operations per second)的衡量指标比较适用于高性能计算机这种计算模式单一的场景,现在计算机性能强大经常使用功能GFLOPS。国际上比较认可和通用的计算性能测试工具 SPECCPU。
用Intel ICC 或 AMD AOCC等编译的speccpu跑分可能更高 但仅做为参考 有点 为了跑分而优化的味道。
CPU的发展主要受三方面动力的驱使:1. 应用需求牵引 2. 生产工艺进步 3. 科学探索的内在动力
https://opencores.org/ 上面有各种类型的开源处理器。
指令集又称为指令系统架构(Instruction System Architecture,ISA)是CPU运行的软件的二进制编码格式,是一种指令编码的标准规范。
复杂指令集计算机 CISC、精简指令集计算机 RISC。
1971年 Intel 4004指令集只有50条,到2000年intel CPU的指令集超过1000条。
RISC计算机的指令条数一般不超过100条。
主流的CISC指令集,目前现存的住剩下Intel的x86。
CISC和RISC融合,CISC = 预译码 + RISC
汇编语言把“功能表示”和“硬件机制”分离开来,实现了程序员的第一次解放。汇编器。
高级语言的发明是程序员的第二次解放。编译器。 高级语言“平台无关”。
汇编语言使用的两种场景:1. 实现高级语言不能实现的功能 2. 对性能要求极高,需要针对CPU优化代码。
微架构 micro-architecture,是指一个实际CPU的电路设计,也就是CPU的硬件实现方案。
IP核(Intellectual Property Core)是指一个设计好的电路模块。IP核实现了一个预定义的电路功能,可以在不同的芯片中重复使用。软IP:用硬件描述语言描述的电路模块。 硬IP:电路模块的版图,是对电路进行布局、布线,并且确定了所采用的全部晶体管的电路模块。
SoC(System on Chip) “片上系统”,是在一个芯片中集成多个电路模块,组合形成具有接近完整计算机功能的电路系统。
功耗(Power Consumption)是电子设备在单位时间内所消耗的电能。一般来说,计算机能力越强的CPU,功耗也越大。服务器CPU、台式计算机CPU、移动计算CPU、嵌入式CPU/微控制器CPU,功耗逐渐降低。
降低功耗的方法:采用先进的半导体生产工艺;通过操作系统实现电源管理;根据运行负载自动调整主频。
晶体管尺寸已经接近极限;晶体管会失去可靠性,无法精确控制电子的进出,从而无法稳定地表示0和1。
Intel Tick-Tock模型:Tick 提升CPU的制造工艺; Tock 更新微结构设计。本质上是“分而治之”的方法。
CPU性能提升慢的原因:新的应用需求变少;Intel已占据最大市场份额,不急于退出高性能产品在争夺市场;学术领域很多年没有新的CPU突破性理论。
异构计算的两个本质思想:“专人干专事”;“把原来软件干的活,交给硬件来做”。
ARM的Big.little架构在一个芯片中集成两种CPU核,一种性能高、功耗高,另一种性能低、功耗低。
CPU的后门(Backdoor),是指能够绕过正常的安全机制的防反;可认为是一种“有意设下的秘密通道”。漏洞(Vulnerability),是指在CPU设计中存在的一种缺陷,可以被攻击者你用来实现非正常的功能;可认为是一种“不小心造成的隐患”。
CVE (Common Vulnerabilities and Exposures,通用漏洞披露)是国际权威的漏洞库,也还是信息安全领域的权威字典,是事实上的工业标准。其他漏洞库,包括:美国的NVD、中国的CNNVD、中国CNVD 以及一些安全厂商的漏洞库、Intel的安全中心等等。

CPU专业设计人员需要学习的基础理论:布尔代数、数字电路设计、计算机系统结构。
学习CPU原理的三本经典书籍:《计算机体系结构:量化研究方法》、《计算机组成与设计:硬件/软件接口》、《深入理解计算机系统》。
电路设计比编程难:1. 软件编程语言比硬件描述语言更方便使用 2. 电路系统的复杂程度高于软件系统 3. 电路系统中存在大量”有状态“模块,复杂程度高于”无状态“的软件模块。
EDA 是CPU设计软件,有两个主要功能:设计、验证。
像写软件一样设计CPU:Verilog语言
Verilog描述的是抽象电路结构,而不是真正实现电路的门单元,因此Verilog源代码被称为寄存器传输层(Register Transfer Level,RTL)模型。
门电路组成的一张网,”网表“。
以网表位分界点,整个CPU的设计分为“前端”和“后端”两个阶段。第一个阶段,使用Verilog进行RTL设计,描述的是电路的逻辑功能,因此称为“逻辑设计”,经过“逻辑综合”(Logic Synthesis)后形成网表。第二个阶段,网表还要经过布局布线才能确定晶体管在芯片中的实际位置,形成交付给流片厂商的最终成品——版图,这个过程称为“物理设计”。

晶体管是CPU的基础构成单元;物理器件的最小单元是CMOS晶体管。
晶体管的引脚上电压的低、高代表二进制的0、1。
根据布尔代数理论,使用“非门”可以构成所有二进制计算单元。
“补码”:正数的补码和原码相同,负数的补码是原码中的所有数字按位取反后再整体加一。
加法器是CPU最基础的运算单元。
寄存器(register)是CPU中用于存储数据的单元。

流水线(pipeline)是指CPU将一条指令切分为不同的执行阶段,不同的阶段由独立的电路模块负责执行,宏观上实现多条指令同时执行。
增大流水线级数的直接好处是可以提高指令的并行度;另一个好处是可以提高CPU主频。
但增大流水线也有负面影响,两个相邻阶段之间都需要增加寄存器,会增大电路的复杂度,增加成本、功耗;增加的寄存器也会使数据的传输时间变得更长,增加了执行指令的额外时间。
Intel Pentium 4的流水线达到了惊人的31级。
动态流水线是CPU使用电路硬件判断指令相关性,对没有相关性的指令进行重新排列的一种技术,也成为“动态调度”技术。
动态流水线中,保留站(reservation station)是新增的电路单元,用来保存一组等待执行的指令,在有的文献中也成为“发射队列”(issue queue)。
乱序执行(out-of-order execution)是指在CPU内部执行过程中,指令执行的实际顺序可能和软件中的顺序不同。 特点:有序取指、重新排列执行顺序、有序结束。
“寄存器重命名”是指保留站中设置了寄存器单元的备份,用来保存每条指令临时的计算结果。
在乱序执行的CPU中,电路至少分为4级流水线:取指令(IF)、指令译码(ID)、发射(ISSUE)、执行(EX)。
只有正常执行、不产生例外(Exception)的指令才能提交。
“重排列队列“又叫”重排序缓存“(Reorder Buffer, ROB),位于发射队列之前,记录了指令在软件中的原始顺序。
在流水线中增加一个新的”提交“(COMMIT)阶段,位于执行(EX)之后。
乱序执行的3个重要概念:保留站、重命名寄存器、ROB。
多发射(multiple issue)是指流水线的每一个阶段都能处理多于一条的指令;在一条流水线上增加了处理指令的宽度。
转移猜测(Branch Prediction)(分支预测),是CPU流水线对转移指令的优化机制。
CPU的流水线中,对内存控制器的调用一般作为一个独立的流水线阶段,称为”访存阶段“(MEM),位于提交(COMMIT)阶段之前。

向量指令(Vector Instruction)是指一条指令能够同时计算两组以上的操作数。向量,每一组操作数由多个数值组成。与”向量“对应的是”标量“,一组操作数只由单一的数值组成。
可信计算是一种安全管理机制,是采用专用安全模块对计算机的硬件、软件进行加农,确保计算机上安全的硬件和软件都经过身份鉴别、符合预期功能。
多核(Multicore)是指在一个芯片中集成多个独立的CPU单元,所有的CPU可以共同执行计算工作。这样的芯片称为一个Chip,而芯片集成的每一个CPU成为一个处理器核(core)。
多路是指在一个计算机主板上安装多个独立的CPU芯片。”横向扩展“
硬件支持的多线程 SMT (Simultaneous Multi-Threading)。
缓存设计的关键问题是数据同步;基于目录的Cache一致性协议,以很简单的结构实现了并行计算机中多个CPU之间的数据同步,既适用于SMP也适用于NUMA。
”强一致性“、”弱一致性“;目前绝大多数并行CPU都采用弱一致性。
原子指令(Atomic Instruction)用于在多个CPU之间维护同步关系。 与数据库中的事务(Transaction)概念类似。
总线(Bus)是模块之间的通信线路,是把所有模块连接起来的纽带,是CPU作为计算机的大脑来指挥其他模块的神经中枢。
主板(Motherboard)是计算机中的一块电路板,所有主要的电子元器件都焊接在主板上,还有一些外围设备以独立的电路板插到主板的I/O扩展槽上。
固件(Firmware)是指向电子硬件中嵌入的软件程序。
BIOS是CPU运行的第一个软件,主要功能:系统自检、初始配置、加载操作系统。
基本电路元件:电阻、电容、电感。
二极管(Diode)是具有单向导电性能的器件。
场效应管(Field Effect Transistor, FET)也是一种晶体管,是一个三端器件。FET的一种实现工艺是MOS结构的晶体管。
数字信号是取值上是离散的、不连续的信号。
CMOS反相器是所有集成电路的基础单元,数字电路的基本单元。
CPU的制造成本:晶片成本、测试成本、封装成本。
现场可编程逻辑门阵列(Filed Programming Gate Array,FPGA)是能够运行CPU的一种替代方案。
先进的制造工艺:SOI、FinFET。

CPU的纳米工艺是指”栅极沟道的最小宽度”。一个晶体管有3个引脚,晶体管导通时,电流从源极(Source)流入漏极(Drain),中间的栅极(Gate)相当于一个水龙头的闸门,它负责控制源极和漏极之间电流的通断。

CPU与应用软件生态之间的接口:ISA、System Call、API
产业链内部的利益分成主要是由生态主导者定的。
优秀生态的三个原则:开放、兼容、优化。
兼容至上的Windows-Intel体系; 开放的Android-ARM体系;优化到像素级的苹果生态。
CPU发展的两条路线:“市场换技术”;“市场带技术”(自研技术、自建生态、通过市场引导带动技术进步)。
龙芯团队做产品的3个设计原则:先提高通用处理能力,再提高专用处理能力;先提高单核性能,再提高核数;先提高设计能力,再依靠先进工艺。
对高度复杂核心技术,“试错”是一个绕不过去的路径。 创新=f(资金,人才,体制机制,时间)
龙芯成熟的4个标志:功能丰富、架构稳定、性能优化、问题收敛。

master

Stay hungry, stay foolish.

发表评论

邮箱地址不会被公开。 必填项已用*标注

*