基于proteus的一个流水线CPU

本文介绍了设计一个四级流水线CPU的过程,该CPU在满载时每时钟周期可执行一条指令。CPU指令集兼容之前基于Proteus的CPU设计,包括系统指令、寄存器操作、存储器操作、跳转指令和算术逻辑运算等。文章详细阐述了指令流水线的取指、译码、执行和写回阶段,以及如何处理数据相关、暂停、气泡和旁路机制。通过流水线技术,CPU效率显著提高,解决了非流水线CPU的效率问题。
摘要由CSDN通过智能技术生成

指令集与CPU架构

本文设计了一个四级流水线架构的CPU,在流水线满载的情况下,一个时钟周期可以完成一条机器指令。该CPU的指令集完全兼容博客基于proteus的一个微程序CPU基于proteus的一个硬布线CPU中的CPU指令集,分为以下五大类共38条机器指令,指令OP码如下表1所示:
1)系统指令:NOP、HLT、IRET;
2)寄存器及I/O操作指令:MOV、SET、IN、OUT/OUTA;
3)存储器及堆栈操作指令:LAD/POP、STO/PUSH;
4)跳转系列指令:JMP、JMPR、Jx(JC/JZ/JS)、JxR(JCR/JZR/JSR);
5)算术逻辑运算指令:SHT (RLC/ LLC/ RRC/ LRC)、SOP (INC/DEC/NOT/THR)、ADD/ADDI、SUB/SUBI、AND/ANDI、OR/ORI、XOR/XORI;

表1. 流水线CPU指令集
在这里插入图片描述
通过分析可知,上述表1中的指令执行过程部分或全部包含了以下四个相互独立的阶段:
1)取指(Fetch):指令从程序存储器打入指令寄存器IR,且PC+1,指向下一条指令地址。
2)译码(Decode):主要功能是取数(取出指令所需操作数),并且把取出的操作数打入运算器的缓存器DA/DB。根据所取的操作数来源,不同指令在该阶段的取数操作还可以分为从通用寄存器堆Rx取数和从程序存储器(指令第二字节)取立即数或地址。
3)执行(Execute):主要功能是处理译码阶段取到的数据,包括以下操作:执行算术/逻辑运算,通过IO接口与外围设备交换数据;或是刷新程序计数器PC,实现程序跳转;或者把地址打入数据存储器ROM/RAM的地址寄存器AR,在下一阶段再读写数据存储器。
4)写回(Writeback):把上述执行阶段结果写回通用寄存器堆Rx或数据存储器RAM。
前述博客中的微程序CPU硬布线CPU基于单总线架构,在一个CPU周期中只能执行一条指令中一个阶段的操作,一条指令的执行过程需要多个CPU周期,效率较低。而流水线版CPU架构的不同之处则是采用多总线架构,把上述四个阶段组合成四级流水线。指令依次顺序遍历四个阶段(没有操作的阶段直接通过),四条相邻的指令在四个阶段同时执行,如下图1所示。当流水线满载后(即图中第4个CPU周期以后),每一个CPU周期就输出一条指令的执行结果,效率得到极大提升。

图1. 流水线CPU的指令周期
在这里插入图片描述
流水线CPU的电路如下图2所示,每个阶段的硬布线逻辑电路都相当于一个小型的硬布线CPU,相互独立,依次衔接。图中红色方框标注的D区E区W区就是译码、执行和写回阶段各自的硬布线逻辑(取指阶段较简单,没有独立硬布线逻辑),红线左侧是数据通路,包括数据存储器DATA MEMORY,程序存储器PRO,指令流水线通路I-pipe,外设电路I/O,通用寄存器REGISTER,运算器ALU,程序计数器PC和运算结果标志位寄存器PSW。红线下方是中断电路(INT)及其他辅助电路。

图2. 流水线CPU电路图
在这里插入图片描述
流水线版CPU的数据通路如下图3所示,其中指令和数据的路径互相独立:指令在取指(F)阶段从程序存储器PRO取出后,进入指令流水线I-pipe;而该指令对应的数据则在数据通路其余部分组成的数据流水线运行。为了适应指令流水线CPU的指令周期的需要(参见上述图1),数据流水线没有统一的总线,而是分为译码(D)、执行(E)和写回(W)段电路,各段电路内部有独立的寄存器和总线。当一条指令进入指令流水线中的某个阶段,其相关数据将保存在数据流水线中该段寄存器内,并且通过段内总线传输到下一阶段电路。指令的上述执行过程可以在寄存器传输级(Register Transfer Level, RTL)层次进行抽象描述。

图3. 流水线CPU的数据通路
在这里插入图片描述
流水线CPU的数据通路RTL描述如下图4所示:图左侧是指令流水线I-pipe由三个级联的指令寄存器D_IR、E_IR和W_IR构成,分别对应图右侧数据流水线的译码(D)、执行(E)和写回(W)段。数据流水线各段由不同的寄存器(实线框)组成,相邻段的寄存器通过指定的段内总线(虚线框)互连。当指令沿着指令流水线依次推进(D_IR→E_IR→W_IR),指令相关的数据也在数据流水线各阶段同步推进:段内寄存器存储当前指令(即该段指令寄存器内的指令)的相关数据,由该段的当前指令译码形成的微操作信号完成对数据的处理,并且指定相应的段内总线把数据送往下一段寄存器。

图4. 数据通路的RTL描述
在这里插入图片描述
如上述图4所示:在每一个时钟周期的CLK上升沿,指令推进到指令流水线某段的指令寄存器x_IR,译码控制本段寄存器输出该指令的相关数据,经过组合逻辑(圆头连线)传输到对应的总线;在CLK下降沿,数据从总线打入下一个阶段的寄存器(箭头连线),与此同时,段内寄存器保存前一个阶段送来的数据,即下一条指令相关数据(注:寄存器BUS_REG和MEM_REG例外,是在W段周期的CLK上升沿保存下一条指令相关数据)。
根据上述图4可以列出所有CPU指令在数据通路各段的RTL操作,如下表2所示。其中大部分指令是单字节指令“i”,亦有带立即数IMM和指令地址ADDR的双字节指令“i+IMM”和“i+ADDR”。此外,部分指令在某些阶段没有任何操作,即 “空”。

表2. CPU指令的RTL操作列表
在这里插入图片描述
值得注意的是,在译码(D)段,“【D2】”表示该指令在D段插入了一个额外的CPU周期“D2段”,流水线的其它段在该特殊周

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值