📜  多周期数据路径和控制

📅  最后修改于: 2022-05-13 01:57:01.130000             🧑  作者: Mango

多周期数据路径和控制

概述

多周期数据路径将指令分解为单独的步骤。它减少了平均教学时间。每个步骤需要一个时钟周期 每个功能单元可以在一条指令中多次使用,只要它在不同的时钟周期中使用即可。它减少了所需的硬件数量。

(一) 取指令:

通过向存储器提供相应给定指令的地址,将存储在存储器中的指令取出到CPU的控制单元中。

  • 假设每条指令都存储在一个字中,每个字有 4 个字节,所以我们可以在这里声明内存是字节可寻址的。
  • 我们知道,程序计数器(PC)包含下一条指令的地址。

(二)解码(解释指令):

处理器的控制单元对指令进行解码,以便找到执行相应指令所需的操作序列。

  • 读取操作码以确定指令的类型和字段长度。
  • 然后,从所有必要的寄存器中读入数据。

例子:

(III) 执行、内存地址计算或分支指令:

例子 :

Memory Reference : ALUout   <=   A + sign-extend ( IR[15:0] )
Branch : if (A == B)   PC  <=  ALUout     // Conditional , it will calculate PC= Register + Branch Address
Jump :  PC  <=  PC [ 31:28 ] . ( IR [25 : 0] << 2 )    //// unconditional

(IV) 内存存取/R型指令完成步骤:

例子 :

Memory Reference:  MDR  <=  Memory [ALUout ];    // LOAD  or  Memory [ALUout ]  <=  B;    // Store from register to memory
Arithmetic Logic Instruction (R-type) :  Reg [ IR[15:11]]  <=  ALUout ;      // register destination in opcode  

(V) 内存读取完成步骤(寄存器写入):

  • 大多数指令将某些计算的结果写入寄存器。
  • 示例:算术、逻辑、移位、负载等。负载:Reg [ IR [20:16]] <= MDR
  • 存储、分支、跳转最后不写入寄存器,它们保持空闲。

例子 :

Q1。找到数据路径和控制(执行序列)的阶段
添加R1,R2,R3;
这意味着 R3 <– R1 + R2

解决方案:给出指令 – 添加 R3、R1、R2;

  • 阶段 1:获取指令并增加程序计数器。
  • 第 2 阶段:解码以确定它是 ADD 指令,并读取寄存器 R1 和 R2。
  • 第 3 阶段:添加在第 2 阶段检索到的相应两个值。
  • 第 4 阶段:空闲(没有内容可写入内存)
  • 阶段 5:将阶段 3 的结果写入寄存器 R3。

Q2。找到数据路径和控制(执行序列)的阶段
移动 30 (R1), R2;
这意味着 [30 + R1] <– R2

解决方案:给定指令 – MOV 30 (R1), R2;

  • 阶段 1(取指):取指令并增加程序计数器。
  • 第 2 阶段(解码):解码找到相应的指令是 MOV 和,读取寄存器 R1 和 R2
  • 第 3 阶段(执行):将 30 加到相应寄存器 R1 中的值。
  • 第 4 阶段(内存访问):将寄存器 R2 中的值写入在第 3 阶段计算的内存地址。
  • 第 5 阶段(寄存器写入):这一步是空闲的(寄存器中没有写入内容)