APP下载

基于MIPS指令集的流水线CPU设计与实现

2017-09-03刘秋菊张光照王仲英

实验室研究与探索 2017年8期
关键词:指令集流水线原理图

刘秋菊, 张光照, 王仲英

(1.郑州工程技术学院 信息工程学院,郑州 450000; 2.河南经贸职业学院 技术科学系,郑州 450018)

基于MIPS指令集的流水线CPU设计与实现

刘秋菊1, 张光照2, 王仲英2

(1.郑州工程技术学院 信息工程学院,郑州 450000; 2.河南经贸职业学院 技术科学系,郑州 450018)

提出了一种CPU设计方案,实现指令集为MIPS指令集中选取15条指令作为本CPU的基本指令,采用基本5步流水线CPU设计。分析了流水线CPU的逻辑结构与指令的处理过程,给出了取指阶段IF、译码阶段ID、执行阶段EX、内存访问阶段MEM、寄存器写回阶段WB阶段的设计与实现。对流水线产生的相关性问题,采用Bubble法和Forwarding法相结合的方法来消除相关性,在FPGA平台上进行了测试,测试结果表明,该方案符合设计要求。

流水线; 中央处理器; 设计; 指令集

0 引 言

在工业设计和机器人研究中,微处理器作为控制部件的核心是设计的关键,其性能直接影响整个系统的性能。CPU作为微处理器的核心其设计得到很多学者的研究,刘明达在研究中很粗略的介绍了CPU各模块的设计,何克东在研究教学实验平台中提到了如何设计高性能CPU,提到五级流水线CPU设计,介绍了CPU设计有单周期和流水线两种设计CPU方式[1-5]。现代微处理器广泛采用流水线CPU设计,本文详细介绍了流水线CPU设计的5个阶段以及对遇到的Hazard数据相关问题提出了解决方法。

1 总体设计

1.1 实现的指令

本次设计从MIPS指令集中选取15条指令作为本CPU的基本指令,其他指令在译码阶段均解释为未定义指令[6-8],指令格式如图1所示。

图1 CPU基本指令格式

1.2 五步流水线组成

流水线5个阶段分别是指取指阶段IF、译码阶段ID、执行阶段EX、内存访问阶段MEM、寄存器写回阶段WB(见图2)。

图2 五步流水线组成

1.3 流水线CPU逻辑原理图

基本5步流水线CPU的逻辑原理图如图3所示。总的来说由5个Stage Register和5个Stage部分组成:在各阶段执行完成后所产生的结果将锁存在Stage Register中以供下一阶段使用;CPU控制信号在译码阶段由控制单元产生,也将后面阶段才发生作用的控制信号锁存在Stage Register中。执行结果和控制信号就是这样在Stage Register中一级一级传递,以满足各个阶段的执行与控制需求。因此,Stage Register在流水线结构中起着非常重要的作用,它必须是边沿触发的,以保证本条指令的中间数据不会被后续指令干扰。

图3 基本5步流水线CPU的逻辑原理图

这样由5个Stage部分和5个Stage Register的流水线结构设计非常清晰,各个阶段执行自己的任务,由Stage Register作为数据通路,使得具体实现过程中可以对各个阶段单独进行测试,最后再将各阶段串联起来进行集成测试,功能调试与测试将变得简单。

1.4 流水线CPU实现原理图

基本5步流水线CPU的实现原理图如图4所示。实现原理图保持了逻辑原理图中5个Stage Register和5个Stage的清晰的设计结构:前缀为REG的部件是Stage Register;前缀为STAGE的部件为Stage。整体数据流向为从上往下、自左往右,结构比较清晰,且各个部件均经过单独测试成功后才集成在一起。本实现原理图为基本5步流水线结构,还不包括Cache和精确中断响应部分。增加Cache和精确中断响应部分需要对总体流水线结构做适当扩充,具体扩充后的原理图以及实现在今后继续研究。

图4 基本5步流水线CPU实现原理图

2 各流水阶段具体实现

2.1 IF阶段实现

IF阶段要完成的任务是:从指令存储器中取出指令、将当前PC值加4、选择出PC的下一个值。实现原理图如图5所示,IF阶段需要判断下一个PC值是PC+4还是跳转的目的地址,判断的依据是ID阶段所给的BRANCH控制信号,因此输入脚必须包括BRANCH控制线和跳转目标地址数据线PCTAR。

2.2 ID阶段实现

ID阶段需要完成的任务比较重:指令译码、根据指令类型产生控制信号、从寄存器文件中选择需要的寄存器、判断是否是绝对跳转或分支指令,如果是还要计算出它们的跳转目标地址、检测是否存在可能的Data Hazard,并选择是否使用Bubble法和Forwarding法消除Hazard[9-12]。实现原理图如图6所示,其中需要特别说明的是寄存器文件只实现了8个,而不是MIPS指令集的32个。最重要的部分是控制单元,它是用Verilog语言实现的,任务是解释指令、产生控制信号、检测与消除Data Hazard。

图5 IF实现原理图

控制单元的输出脚都是控制信号,而输入脚中有6个是为了Data Hazard的检测与消除。在检测Data Hazard时,首先测试 EWREG和EM2REG输入脚:如果EWREG为1,那么本条指令的前一条指令是回写寄存器指令;如果EM2REG为1,那么前一条指令是Load指令。再用本条指令的RS和RT字段(即本条指令可能引用的寄存器地址)与EDESR比较就可以知道是否存在Data Hazard数据相关性。同样通过测试MWREG、MM2REG及MDESR即可知道本条指令与前前条指令是否存在Data Hazard。

图6 ID实现原理图

如果存在Hazard,则根据不同情况发出不同的信号控制Hazard的消除。NOSTALL输出信号用于Bubble技术的控制,而FWDA、FWDB及 FWDC输出信号用于FORWARDING技术的控制。

2.3 EX阶段实现

EX阶段执行运算任务,本CPU可以执行加减、逻辑及移位三类运算。EX阶段最主要的任务是进行运算,运算单元ALU实现原理图如图7所示。

2.4 MEM阶段实现

MEM阶段执行访问数据存储器任务,本次设计中将指令与数据存储器分开,且存储容量都是32个字。实现原理图如图8所示。

图7 ALU实现原理图

图8 MEM阶段实现原理图

2.5 WB阶段实现

WB阶段执行将指令执行结果写回寄存器的任务,而执行结果有两种可能:一种是ALU运算结果;另一种是MEM取数据结果。实现原理图如图9所示,根据WM2REG控制信号(即判断指令是否为Load指令)来选择最终的回写数据。实际上从这可以看出本设计中所用的都是开关式控制方式,它的特点是不管指令属于何种类型,按其所有可能的形式执行操作,让所有的部件都运转起来,最后可能产生多种结果数据,再由控制信号来控制开关以选择所需的结果。

图9 WB阶段实现原理图

3 功能模拟测试

功能模拟测试需要设计典型的代码序列来测试流水线的运行状况及Hazard问题的解决[13-16]。图10所示为测试代码与测试波形图。

测试结果表明,该设计是成功的,同时该设计的应用成果在电子设计大赛中也取得了很好的成绩。

图10 测试代码与测试波形图

4 结 语

提出了一种流水线CPU的设计方法。介绍了5步流水线CPU设计的步骤,并针对逻辑图介绍了每个阶段的详细实现,CPU设计中还要考虑数据相关性问题,本次设计中在ID阶段通过不同的控制信号来解决不同的数据相关性问题,最后进行了功能测试,测试结果符合设计要求。CPU设计中会遇到很多问题,例如缓冲、中断等,这也是下一步要继续研究的问题。

[1] 朱子玉,李亚民.CPU芯片逻辑设计技术[M]. 北京:清华大学出版社,2005.31-110.

[2] John L.Computer architecture: A quantitative approach, fourth edition[M].3rd ed. Boston: AP ProtwaaionL, 2006. 2009:88-172.

[3] 刘明达.基于VerilogHDL的简单CPU设计[J].计算机光盘软件与应用,2013,16(13):302-304.[4] 何克东,王恒才.高性能CPU设计实验平台及其应用[J].实验室研究与探索,2007(12): 212-214.

[5] 陈国强.基于AD9954的信号发生器设计[J].实验室研究与探索,2010,29(8):222-225.

[6] 刘 明,蔡启先,余祖峰.改进MIPS指令集模拟方法的研究[J].广西工学院学报,2009(12): 54-57.

[7] 薛 勃,周玉洁.MIPS32指令集兼容的CPU模拟器设计[J].计算机工程,2009,35(1):263-265.

[8] 袁 婷,刘怡俊.自主设计精简指令集的流水线CPU[J].微电子学与计算机,2015,32(2):124-128.

[9] 李山山,刘敬晗.利用Tomasulo算法处理数据相关的流水线CPU设计[J].实验室研究与探索,2014,33(12):90-95.

[10] 刘秋菊,李 飞,刘书伦.一种流水线CPU设计中的Hazard消除法[J].微电子学与计算机,2012,29(8):33-36.

[11] 王艳秋.基于FPGA的CPU设计与实现[D].天津:河北工业大学,2008.

[12] 赖兆磬,潘 明,张 辉.基于FPGA流水线CPU控制器的设计与实现[J].微计算机信息,2008(20):233-235.

[13] 曹学飞,张盛兵,张 骏.32位CISC微处理器流水线的设计[J].微电子学与计算机,2007,24(4):186-189.

[14] 刘秋菊,李 飞,刘书伦.带Cache和精确中断响应的CPU设计[J].实验室研究与探索,2012,31(3):68-74.

[15] 曹学飞,张盛兵.“LongtiumC2”微处理器流水线设计[J].微处理机,2010(1):9-12.

[16] 东野长磊,戚 梅.一种带Cache的嵌入式CPU的设计与实现[J].微型机与应用,2010,29(14):17-19.

Design and Implementation of Pipeline CPU Based on MIPS Instruction Set

LIU Qiuju1, ZHANG Guangzhao2, WANG Zhongying2

(1. School of Information Engineering, Zhengzhou Institute of Technology, Zhengzhou 450000, China; 2. Department of Technical, Henan Institute of Economics and Trade, Zhengzhou 450018, China)

In this paper, a design method of CPU was proposed, the instruction set of the CPU contained 15 items of MIPS instruction set, and the basic method of five step pipeline CPU design was used. Analyses were conducted on the logic structure of the pipeline CPU and the processing of the instruction. This paper also gave design and realization of stage IF, stage ID, stage EX, stage MEM and stage WB. About the pipeline-related problems, the paper adopted Bubble and Forwarding technologies to eliminate it. The tests on the FPGA platform show that the scheme meets the design requirements.

pipelines; CPU; design; instruction set

2016-11-20

河南省科技攻关项目(172102210606);河南省高等学校重点科研项目(17B520040)

刘秋菊(1970-),女,河南孟州人,教授,现主要从事计算机应用教学研究。Tel.:15737152760;E-mail:mzlqj@126.com

TP 332

A

1006-7167(2017)08-0148-05

猜你喜欢

指令集流水线原理图
基于Kubernetes的RISC-V异构集群云任务调度系统①
3DNow指令集被Linux淘汰
浅谈STM32核心板原理图设计
流水线
电路原理图自动布图系统的设计与实现
基于Protel DXP 2004层次原理图的设计
实时微测量系统指令集及解析算法
报废汽车拆解半自动流水线研究
流水线生产杀死艺术
什么是AMD64