CPU的组成结构及其原理(二)

CPU的组成结构及其原理(二)4 再说些 CPU 的事情 让我试着用图片总结一下前面的基础知识 上图概括了 CPU 和计算机其他部分的互动方式 该图与实际的计算机有很大差距 but you get the idea 现在让我们把注意力集中在 CPU 身上 CPU 只知道执行指令 而指令是在内存里的 实际上不一定

大家好,我是讯享网,很高兴认识大家。 4.再说些CPU的事情

让我试着用图片总结一下前面的基础知识。。

讯享网
上图概括了CPU和计算机其他部分的互动方式。该图与实际的计算机有很大差距,but you get the idea...现在让我们把注意力集中在CPU身上!

CPU只知道执行指令,而指令是在内存里的(实际上不一定,但是为了让事情简单些,我们假设指令都是在内存里的)。所以CPU需要从内存里取出指令,这一步叫做提取(Fetch)。

CPU还需要知道这条指令是干什么的,所以被编码过的指令会被传到CPU的控制电路那边解码以正确设置控制信号,这样CPU才能正确执行指令,这一步叫解码(Decode)。

上面两步完成后CPU就可以执行该条指令了,也就是执行(Execute)
运算后的结果经常需要保存,用来进行下一个指令的运算。那保存在哪里呢?无非就是寄存器组和内存。这一步叫做写回(Writeback)

CPU的结构简图(省略了到输入/输出设备的连接):

时钟信号(Clock Signal)说白了其实就是一个频率很高的方波,就像这样:

它控制着CPU内核的工作节奏,每当时钟信号由0变1(rising edge)的时候,CPU里面的元件就会做点什么。

数据通路(Datapath)是一个能够执行任何指令集内的指令的电路,但是它需要控制电路告诉它应该在什么时候执行什么指令。数据通路包括了寄存器组,算术逻辑单元(Arithmetic logic unit, ALU)以及很多其他的元件。

控制电路负责解码指令并且正确设置控制信号,于是数据通路就能根据这些控制信号知道应当执行哪一条指令。

----------------------------------------------------------------------------------------------------------

5. 好了,开始搭CPU吧 = =

如果读者到目前为止都还能懂的话,那么恭喜!你终于有了足够的基础知识来搭建一个简单的CPU了。
当然了,CPU这玩意不是说搭就搭的。我们的CPU能干些什么?能执行些什么指令?指令是怎么编码的?它由哪些小模块组成?都有哪些控制信号?这些问题都必须有明确的回答。

从现在开始,我强烈建议读者拿几张空白的纸出来记下这些问题的回答,因为我们即将面对的是众多的指令,模块以及控制信号。这可比拼装家具复杂多了,如果不记下来的话到时大概会头晕目眩。

当初LZ对这个CPU做一丁点儿小改动的时候,可得对着一张电路图,大大的控制信号表格以及超长的Verilog HDL代码,花了不少时间和草稿纸呢

I will be back tomorrow or after 3 hours...~

--------------------------------------------------------------------------------------------------------------

我们的CPU能做什么?

从现在开始将进入本文最复杂,最能绕晕人的部分,请做好准备。。
下面要开始说明这个CPU的规格,信息量略大,推荐写在纸上记着。

现在我们对下面的行几个简化约定(要是不简化的话,读者就会看到一大堆密密麻麻的描述文字),请务必记好。

TMP = MEM[R2]
这个语句表示从寄存器R2指定的内存地址读取数据,然后把读到的数据赋值给TMP。
举个例子:如果寄存器R2里的数字是0001 0011
而内存地址0001 0011处所存的数据是1111 1111
那么这个语句就表示TMP被赋值1111 1111,TMP = 1111 1111

MEM[R2] = TMP
这个语句表示TMP的值被写入内存,写入的位置是内存地址R2。
举个例子:如果TMP = 1111 1110,R2 = 0000 0001
那么这个语句就表示内存地址0000 0001处的数据变成了1111 1110

R1 = TMP
这个语句表示寄存器R1写入TMP的值
举个例子:如果TMP = 0000 1111
那么这个语句表示寄存器R1里的数字变成了0000 1111

PC = PC + 1
几乎每个指令都会带有这个语句,意思是PC寄存器里的数字加1
PC寄存器中有指令所在的内存地址。每执行完一条指令后,这个内存地址一般都会加1,好让CPU调出下一条指令

-------------------------------------------------------------------------------------------------

前面说过,我们的CPU是8-bit的,也就是说它最多只能支持2^8=256个内存地址。我们的CPU内部将会有四个通用寄存器(General Purpose Register)R0~R3,一个PC寄存器(Program Counter Register),每个寄存器容量为8 bit。这个CPU不支持中断,意味着它不接受键盘和鼠标的输入,只会从内存里读取并执行指令。另外,CPU内部还有两个特殊的比特位,N和Z。如果某个运算的结果是负数,那么N就会被设定为1;如果某个运算结果为零,那么Z就被设定为1。我们将会在跳转指令里用到这两个比特位。

该CPU可以执行10种指令:

1. LOAD R1 (R2)
实现方法:
TMP = MEM[R2]
R1 = TMP
PC = PC + 1
这条指令是把内存地址R2处的数据读出来,然后放进寄存器R1里。接着PC寄存器加一为下一条指令做准备。看出来了吗?下面将不再有这种文字描述,全部使用简写。

2. STORE R1 (R2)
实现方法:
MEM[R2] = R1
PC = PC + 1

3. ADD R1 R2 [加法运算]
实现方法: 
TMP = R1 + R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1

4. SUB R1 R2 [减法运算]
实现方法:
TMP = R1 - R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1

5. NAND R1 R2 [NAND逻辑运算]
实现方法:
TMP = R1 NAND R2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1

6. ORI IMM5 [OR逻辑运算]
实现方法:
TMP = R1 OR IMM5, IMM5是一个5-bit的二进制数
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1

7. SHIFT L/R R1 IMM2 [移位运算]
实现方法:
IF (L) THEN TMP = R1 << IMM2
ELSE TMP = R1 >> IMM2
R1 = TMP
IF (TMP == 0) Z = 1; ELSE Z = 0;
IF (TMP < 0) N = 1; ELSE N = 0;
PC = PC + 1

8. BZ IMM4 [如果Z=1,就跳过IMM4个指令]
实现方法:
IF (Z == 1) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1

9. BNZ IMM4 [跟上一条指令相反]
实现方法:
IF (Z == 0) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1

10. BPZ IMM4 [若N = 0,就跳过IMM4个指令]
实现方法:
IF (N == 0) PC = PC + 1 + (SIGN-EXTEND8(IMM4))
ELSE PC = PC + 1

这些描述都比较抽象,做拼装的时候这些东西应该会表现得更具体些。

---------------------------------------------------------------------------------------------------

CPU的指令编码

前5个指令的编码方式都是:
7-6位是寄存器R1的编号
5-4位是寄存器R2的编号
3-0位是操作码


ORI指令的编码


SHIFT指令的编码


三个跳转指令的编码

--------------------------------------------------------------------------------------------------------------------------
小讯
上一篇 2025-03-09 21:29
下一篇 2025-03-11 14:00

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129690.html