我对于指令集、微架构、内存、CPU的认识

目录

前言

大家好,我是沉默之海。
CPU,全名中央处理器单元,简称CPU。这是一句正确的废话
上面这条CPU的解释,即使是非专业人士,也略知一二。但是,如果配上指令集、架构、内核、微架构这些概念呢?小白见到直接糊了。这些词,如果只看术语本身,也能基本看懂其含义;但是,如果想要理解它们在计算机体系结构中的地位,则需要更加深入的学习。
我一开始也迷迷糊糊分不清这些概念,即使去百度,看了这些概念的解释,也只能理解其字面意思,而不能知晓它们之间的关联。所以,我不求看了这个专栏的人立刻理解这些概念的含义,读者只要能在心中留下一个引子,在以后的学习中少走一点弯路,那就够了。

从宏观到微观

我是嵌入式开发出身,因此我对计算机体系结构的理解,也是从嵌入式处理器的角度出发。如有不足之处,欢迎指正。

处理器

处理器,其实是一个非常广泛的概念。它是计算机运行的核心,但又不只是核心。家用电脑的intel i5 6500, amd 3500x 能被称作处理器;手机中的SoC,如k990,s855,也能被称作处理器;嵌入式设备中的ESP32,STC8等MCU也能被称作处理器;在FPGA上搭一个8051软核也能被称作处理器;甚至PPT也能被称作处理器(PPT图灵完备!)。
处理器为了能运行程序,运算单元是必不可少的;为了效能,需要有定时器、SRAM等外设;为了与外部电路交互,需要有IO接口;为了控制功耗,需要有电源和时钟控制。
以MCU,即微控制器为例,处理器内部大致可以分为内核和外设。内核负责执行程序指令,控制外设的工作;外设为内核服务,向内核传递程序指令,同时也受内核控制。内核和外设,就像人的大脑和躯干,两者相辅相成。
处理器的实例:i5 6500,k990,STM32F1/F4/H7,STC8,AT89C52

内核

内核是处理器最重要的部分,它负责执行程序指令,决定了处理器可以执行什么指令,执行得多快。以ARM Cortex-M3内核为例,ST拿它做出了STM32F1系列MCU,GD拿它做出了GD32F1系列MCU。因为用的是同一个内核,所以把STM32的bin程序之间写到GD32里,也能运行,只不过因为两者外设的区别会出现一些问题。
因此,虽然APM32F1与STM32F1是两个不同的处理器,但由于内核相同,外设的寄存器配置相同,两者可以相互替换。
内核的实例:ARM Cortex-M3/A8/A76,蜂鸟E203,E8051

微架构

微架构是比内核更抽象的概念,它们有时候又可以划等号。例如,i5 6500的微架构是SkyLake,i7 6700的微架构也是SkyLake,但是它们内核有所差别,性能也有差距。微架构是指某个指令集的具体实现方式,而内核是根据这种实现方式做出来的实体。同样,以MCU为例,STM32F1是ARM CM3内核,但ARM CM3也可以被称为微架构。
微架构的实例:ARM Cortex-M3/A8/A76,蜂鸟E203,E8051,SkyLake

指令集

指令集,又称指令集架构(ISA),定义了一套指令集合和程序编写指南,它是处理器的灵魂。例如,8051指令集,定义了一大堆指令的格式,定义了存储/数据空间的读写方式,定义了寄存器的行为,等等。
指令集通过各种功能指令的配合,满足顺序、选择、循环结构的实现,让程序员知道汇编程序写,让编译器知道C语言转换成什么东西。
指令集的实例:x86/64,ARMv7,RISC-V,8051

反过来走一遍

以上内容,从处理器到指令,由浅入深,读者越看越费劲,我也越写越费劲。实际的处理器开发流程,其实是 指令集->微架构/内核->处理器。以这个顺序去梳理思路,其实会更顺畅。
关注我的朋友应该都知道,我正在从零开始不完全是零,设计大黄鸭处理器。这也就意味着,指令集需要我来规划,内核需要我来设计,处理器需要我来集成,而这些工作是依次进行的。大黄鸭处理器很简单,微架构/内核就没必要分开谈了。下面,我将依照大黄鸭处理器的开发流程,对以上内容进行梳理。

指令集

大黄鸭指令集是我工作的起点。设计指令集不是乱设计,必须至少考虑两个问题:功能完备,硬件实现。
功能完备指的是,指令需要具备顺序选择循环结构,可以访问足够的数据空间,有充足的算术/逻辑运算指令。硬件实现指的是,单条指令必须是硬件可以完成的工作,比如逻辑移位、无符号加法;如果我设计一条指令的功能是播放Bad apple,数字前端会觉得我脑子有问题。
我设计的大黄鸭指令集属于RISC(精简指令集),16条指令,可以顺序执行、条件跳转,8/16位长度,16个寄存器,16位寻址位宽。即具备合理的功能,也易于硬件实现。

内核

大黄鸭内核在指令集的指导下完成,是指令集的具体实现。设计处理器内核,不是拿着verilog乱设计,这一切需要符合指令集的规则。为了实现大黄鸭指令集,我切出一个2级流水线,并为流水线的每一级分配功能,如寄存器读写、算术逻辑运算、访存等。
内核设计阶段,我不考虑指令存储器有多大,SRAM有多大,只需要内核可以正常执行指令集中的所有指令。

处理器

处理器是内核+外设的整合。内核只能执行指令,并且指令还得由外设喂给内核。为了降低内核访问外设的负载,还塞进去了一条总线。将各种功能结合,内核+总线+外设,外面套一层封装,就是可以用的处理器了。

打赏?

取消

不用哦

扫码支持
这里只有暗黑赛钱箱

深邃♂黑暗♂幻想

>