9.1 单周期处理器
本节先引入一个简单的CPU模型。这个CPU可以取指令并执行,实现程序员的期望。根据第2章的介绍,指令系统按照功能可以分为运算指令、访存指令、转移指令和特殊指令四类。根据指令集的定义,可以得知CPU的数据通路包括以下组成要素:
·程序计数器,又称PC,指示当前指令的地址;
·指令存储器,按照指令地址存储指令码,接收PC,读出指令;
·译码部件,用于分析指令,判定指令类别;
·通用寄存器堆,用于承载寄存器的值,绝大多数指令都需要读取及修改寄存器;
·运算器,用于执行指令所指示的运算操作;
·数据存储器,按照地址存储数据,主要用于访存指令。
将这些组成要素通过一定规则连接起来,就形成了CPU的数据通路。图9.1给出了这个简单CPU的数据通路。
图9.1 简单CPU的数据通路
数据通路上各组成要素间的具体连接规则如下:根据PC从指令存储器中取出指令,然后是译码部件解析出相关控制信号,并读取通用寄存器堆;运算器对通用寄存器堆读出的操作数进行计算,得到计算指令的结果写回通用寄存器堆,或者得到访存指令的地址,或者得到转移指令的跳转目标;load指令访问数据存储器后,需要将结果写回通用寄存器堆。通用寄存器堆写入数据在计算结果和访存结果之间二选一。由于有控制流指令的存在,因此新指令的PC既可能等于顺序下一条指令的PC(当前指令PC加4),也可能来自转移指令计算出的跳转目标。
译码部件在这个数据通路中有非常重要的作用。译码部件要识别不同的指令,并根据指令要求,控制读取哪些通用寄存器、执行何种运算、是否要读写数据存储器、写哪个通用寄存器,以及根据控制流指令来决定PC的更新。这些信息从指令码中获得,传递到整个处理器中,控制了处理器的运行。根据LoongArch指令的编码格式,可以将指令译码为op、src1、src2、src3、dest和imm几个部分,示例见图9.2。
图9.2 译码功能示意
图9.3展示了带控制逻辑的数据通路,图中虚线是新加入的控制逻辑。此外,还加入了时钟和复位信号。引入时钟是因为更新PC触发器、写通用寄存器以及store类访存指令写数据存储器时都需要时钟。而引入复位信号是为了确保处理器每次上电后都是从相同位置取回第一条指令。数据通路再加上这些逻辑,就构成了处理器。
图9.3 带有时序控制逻辑的数据通路
简要描述一下这个处理器的执行过程:
1)复位信号将复位的PC装载到PC触发器内,之后的第一个时钟周期内,使用PC取指、译码、执行、读数据存储器、生成结果;
2)当第二个时钟周期上升沿到来时,根据时序逻辑的特性,将新的PC锁存,将上一个时钟周期的结果写入寄存器堆,执行可能的数据存储器写操作;
3)第二个时钟周期内,就可以执行第二条指令了,同样按照上面两步来执行。
依此类推,由一系列指令构成的程序就在处理器中执行了。由于每条指令的执行基本在一拍内完成,因此这个模型被称为单周期处理器。