今天我们讲处理器。我们之前实现了一个ALU,可以接受二进制数字并执行计算;然后我们根据寄存器实现了一个内存,能够在不同地址存储数字。然后我们就可以使用ALU以及RAM建造CPU了。
CPU负责执行程序。程序由一个个操作组成,这些操作叫做指令(Instruction),因为他们指示计算机去做什么。我们以微体系架构的视角来关注CPU的组成结构,也就是说,我们不会专注与具体怎么连接每一位每一位的一根根线,而是关注于每个模块之间数据怎么通信,功能怎么关联的问题。
我们先获得一个RAM,假设它只有16个位置,每个位置存8位。我们再用四个寄存器临时存数据与操作数据。程序也是可以存储在CPU里面的,每个CPU支持的指令我们都分配一个ID。如果一个指令存在一个内存的位置中,在这个假设的例子里我们用前四位存储“操作代码”(OPCODE),后四位我们用来指定存数据的来源——寄存器或者是RAM。此外我们使用两个寄存器来完成CPU,一个是“指令地址寄存器”,用来跟踪程序运行到哪里了,存储当前指令的内存地址;另一个寄存器存储当前指令,叫做“指令寄存器”。启动计算机时,所有的寄存器都从0开始。我们在RAM中放了一个程序,我们今天会过一遍。
CPU的第一个阶段叫做“取指令阶段”,我们将指令地址寄存器连接到RAM,在下图的例子里,指令地址寄存器中的地址0的00101110会复制到指令寄存器中,接下来我们要弄清是什么指令然后才能执行。所以我们进入下一个阶段叫做“解码阶段”,在这个例子中,指令寄存器中的指令前四位是操作代码,0010指示要进行LOAD A指令,也就是说要将RAM的值放入寄存器A中。后4位1110是RAM的地址,转成十进制是14。接下来由“控制单元”进行解码,如同ALU和RAM,控制单元也是由逻辑门组成的,例如,会有专门的逻辑电路来识别操作代码是否为LOAD A指令,如果是,那么逻辑电路就输出1.
在知道了我们应该执行什么样的指令之后,我们就可以开始执行了,叫做“执行阶段”,用控制单元检查是否LOAD_A指令的电路我们可以打开RAM的允许读取线,然后我们在将后4个bits的地址通过地址输入线传递过去,这样我们就获得了第14个位置的内存00000011,也就是十进制的3。我们用检查是否LOAD_A指令的电路启用寄存器A的“允许写入线”,虽然RAM有4条数据输出线接在4个寄存器上,但是因为只有寄存器A允许写入,所以数据被成功写入到寄存器A中。
第一条指令LOAD_A正式结束,我们可以将指令地址寄存器+1,结束执行阶段。
LOAD_A只是所有的指令中的其中一条,不同的指令会有不同的逻辑电路进行解码,解码后再根据电脑配置执行相应操作。我们这里进行更高一层的抽象,将整个控制单元包成一个整体。
“取指令–解码–执行”的流程执行完毕之后,我们可以再来一次,从取指令开始。指令地址寄存器现在的值是1,那么就会从地址1取值,获得00011111,并将该值存入指令寄存器中。
然后我们到达解码阶段,控制单元将前4位解码,获得指令LOAD B,然后将后4位解码,获得内存地址15。然后到达执行阶段,控制单元让RAM读取地址15,并且配置寄存器B接受数据。我们成功地将十进制的14存储到了寄存器B中。
最后我们成功地将值00001110也就是十进制的14存入到了寄存器B中,然后我们令指令地址寄存器+1,结束执行阶段。下一条指令、也就是地址2的指令是10000100,获取之后我们将指令放在指令寄存器中解码,1000是ADD指令、0100对应两个寄存器的ID—01代表寄存器B,00代表寄存器A。因此意思就是将寄存器A和寄存器B的值相加。控制单元选择对应的寄存器将输入以及从指令寄存器中获得的操作码交给ALU。存储的结果要保存到寄存器A中,所以控制单元会用自己内部得一个寄存器保存结果,然后关闭ALU,再将结果写入进寄存器A中。
最后,我们在将指令地址寄存器中的指令地址+1。然后完成循环。
我们接下来按照指令地址寄存器中的地址获取最后一个指令01001101,并存储到指令寄存器中,控制单元对指令解码。前4位表示指令STORE_A,后4位指令RAM的地址1101也就是13。然后我们将地址交给RAM,并且打开RAM的允许写入,这样我们就可以将寄存器A的值存入地址为13的RAM中了。
以上我们完成了第一个程序——从内存中加载两个值,相加,然后将结果放回内存。 实际上上述的“取指令——解码——执行”的循环不是手工实现,而是由时钟负责管理CPU实现的。时钟以精确的间隔触发电信号, 控制单元会利用这个信号推进CPU内部的操作。确保一切按照步骤进行。CPU“取指令–解码–执行”的速度称为“时钟速度”,单位为hertz,hertz是用来表示频率的单位,1赫兹代表1秒1个周期。第一个单芯片CPU——intel 4004的时钟速度达到了每秒74万次,也就是74万赫兹。此外还有所谓“超频”的说法,也就是修改时钟速度并加快CPU的速度。厂商一般会为CPU的性能留一点余地,允许超频,但是超频太多会令CPU过热或者产生乱码。还有一种说法叫做“降频”,在运行性能要求低的程序时启用,可以省很多店。现代处理器可以按需求动态调整时钟周期,这就叫“动态调整频率”。然后CPU的芯片还可封装起来,变成一个独立组件。
CPU和RAM之间使用地址线、数据线和“允许读写线”进行通信。下一集我们要加强CPU,给它更多的扩展指令。
七、中央处理器
最新推荐文章于 2024-09-07 15:29:32 发布