电子科技大学CPU流水线 高级语言模拟 - 图文

更新时间:2023-03-15 19:17:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

计算机科学与工程学院

课程设计报告

题目全称: 使用高级程序语言模拟实现流水线CPU的工作过程

课程名称: 计算机系统结构 、任课教师:

指导老师: 徐洁 职称: 教授 序号 学生姓名 学号 班号 成绩 (注:学生姓名填写按学生对该课程设计的贡献及工作量由高到底排列,分数按排名依次递减。序号排位为“1”的学生成绩最高,排位为“5”的学生成绩最低。)

指导老师评语:

签字:

本小组成员任务分工情况

序号 姓名 学号 任务分工 完成情况 摘 要

摘 要

本文在Qt5.2.1集成开发环境下,使用C++语言,设计并实现了指定模型机的流水线CPU,用图形界面完成了指令序列在5级流水线上执行过程的模拟,设计功能完善,解决了数据相关、控制相关等问题,灵活性较好。CPU作为计算机的核心部件,设计极为复杂,本文仅对一个简化的模型机进行讨论,执行特定的几条指令,旨在对流水线CPU的工作方式进行深入研究。

关键词: 流水线;模型机;指令序列;相关

- I -

Abstract

ABSTRACT

In this paper, with Qt5.2.1 integrated development environment and C++, we design and implement a pipelined CPU of a specified model machine, which use a graphical interface to simulate a sequence of instructions to complete the implementation process on five levels. It can effectively solve the data hazard and branch hazard issues with better flexibility. CPU designing is extremely complicated. This paper only discusses a simplified model machine, and performs a few specific instructions, aim at in-depth study of pipelined CPU.

Keywords: pipeline; model machine; sequence of instructions; hazard

- II -

目 录

目录

第一章 绪论 ................................................................................................................................................... 1

1.1 选题背景及意义 .............................................................................................................................. 1 1.2 相关技术介绍 .................................................................................................................................. 1 1.3 主要设计内容 .................................................................................................................................. 2 1.4 论文结构 .......................................................................................................................................... 2 第二章 需求分析 ........................................................................................................................................... 3

2.1 环境需求 .......................................................................................................................................... 3 2.2 功能需求 .......................................................................................................................................... 3 2.3 性能需求 .......................................................................................................................................... 3 2.4 本章小结 .......................................................................................................................................... 3 第三章 流水线CPU设计 ............................................................................................................................. 4

3.1 总体设计 .......................................................................................................................................... 4 3.2 功能模块设计 .................................................................................................................................. 4 3.3 本章小结 .......................................................................................................................................... 5 第四章 流水线CPU实现 ............................................................................................................................. 6

4.1 开发环境介绍 .................................................................................................................................. 6 4.2 主要功能模块的实现 ...................................................................................................................... 6 4.3 本章小结 ........................................................................................................................................ 19 第五章 测试及成果展示 ............................................................................................................................. 20

5.1 测试环境 ........................................................................................................................................ 20 5.2 测试用例和结果 ............................................................................................................................ 20 5.3 成果展示 ........................................................................................................................................ 25 5.4 本章小结 ........................................................................................................................................ 25 第六章 总结与展望 ..................................................................................................................................... 26 参考文献 ....................................................................................................................................................... 27

- III -

电子科技大学本科课程设计报告

WIR = 0; BTAKEN = 1; DSE = split_ins[1].toInt(); setZero(); return; } if(ID_OPCODE==\ if(EXE_WZ==1){ setZero(); WPC = 0; WIR = 0; success = 1; return; }else if(EXE_WZ==0){ if((ID_OPCODE==\ BTAKEN = 1; DSE = split_ins[1].toInt(); }else{ BTAKEN = 0; WIR = 1; } WPC = 1; success = 0; return; } } //如果不是转移指令 //判断ALUOP信号 if(ID_OPCODE==\ ID_ALUOP[0] = 1; else ID_ALUOP[0] = 0; if(ID_OPCODE==\==\ ID_ALUOP[1] = 1; else ID_ALUOP[1] = 0; //判断SST信号 if(ID_OPCODE==\ ID_SST = 1; else ID_SST = 0; //判断WZ信号 - 10 -

第四章 流水线CPU实现

if(ID_OPCODE==\ ID_OPCODE==\ ID_WZ = 1; else ID_WZ = 0; //判断WREG信号 if(ID_OPCODE==\ ID_OPCODE==\\ ID_WREG = 1; else ID_WREG = 0; //判断WMEM信号 if(ID_OPCODE==\ ID_WMEM = 1; else ID_WMEM = 0; //判断SLD信号 if(ID_OPCODE==\ ID_SLD = 1; else ID_SLD = 0; //判断ID_rs2IsReg信号 if(ID_OPCODE==\ ID_rs2IsReg = 1; else ID_rs2IsReg = 0; //根据操作码判断操作数 if(ID_WZ==1){ op = split_ins[1].split(\ } else if(ID_OPCODE==\如果是load或store指令 op.push_back(split_ins[1].mid(0,2)); int rear = split_ins[1].indexOf(\ int front = split_ins[1].indexOf(\ op.push_back(split_ins[1].mid(rear+1,2)); op.push_back(split_ins[1].mid(front+1,rear-front-1)); } //向d,A,B,I打入数据 QString temp = op[0][1]; ID_d = temp.toInt(); temp = op[1][1]; - 11 -

电子科技大学本科课程设计报告

int rs1 = temp.toInt(); int rs2; A = reg[rs1]; if(ID_rs2IsReg==1){ temp = op[2][1]; rs2 = temp.toInt(); B = reg[rs2]; I = rs2; }else if(ID_SST==1){ temp = op[0][1]; B = reg[temp.toInt()]; rs2 = B; temp = op[2].toInt(); I = temp.toInt(); }else{ I = op[2].toInt(); rs2 = I; } //判断数据相关,即判断ADEPEN和BDEPEN信号 if(EXE_WREG==1&&rs1==EXE_d) ID_ADEPEN = 2; else if(MEM_WREG==1&&rs1==MEM_d) ID_ADEPEN = 3; else ID_ADEPEN = 0; if(ID_rs2IsReg==0) ID_BDEPEN = 1; else if(EXE_WREG==1&&rs2==EXE_d) ID_BDEPEN = 2; else if(MEM_WREG==1&&rs2==MEM_d) ID_BDEPEN = 3; else ID_BDEPEN = 0; //实现load前推 if((EXE_SLD==1&&rs1==EXE_d)||(EXE_SLD==1&&rs2==EXE_d&&ID_rs2IsReg)){ WPC = 0; ID_WMEM = 0; ID_WREG = 0; ID_WZ = 0; LOADDEPEN = 1; }else{ WPC = 1; LOADDEPEN = 0; } - 12 -

第四章 流水线CPU实现

if(MEM_SLD==1&&rs1==MEM_d) ID_ADEPEN = 3; if(MEM_SLD==1&&rs2==MEM_d&&ID_rs2IsReg) ID_BDEPEN = 3; } void CPU::EXE_next(){ if(LOADDEPEN){ EXE_ins = \ EXE_WMEM = 0; EXE_WREG = 0; EXE_WZ = 0; EXE_ADEPEN = 0; EXE_BDEPEN = 0; EXE_ALUOP[0] = 0; EXE_ALUOP[1] = 0; EXE_d = 0; EXE_OPCODE = \ EXE_rs2IsReg = 0; EXE_SLD = 0; R = 0; S = 0; return; } EXE_ins = ID_ins; EXE_ADEPEN = ID_ADEPEN; EXE_BDEPEN = ID_BDEPEN; EXE_ALUOP[0] = ID_ALUOP[0]; EXE_ALUOP[1] = ID_ALUOP[1]; EXE_d = ID_d; EXE_OPCODE = ID_OPCODE; EXE_rs2IsReg = ID_rs2IsReg; EXE_SLD = ID_SLD; EXE_WMEM = ID_WMEM; EXE_WREG = ID_WREG; EXE_WZ = ID_WZ; S = B; //bne或beq指令需要等待Z寄存器准备好,所以暂停一个时间 if((EXE_OPCODE==\ EXE_OPCODE = \ EXE_ins = \ } - 13 -

电子科技大学本科课程设计报告

int a = 0,b = 0; //多路选择器 switch(EXE_ADEPEN){ case 0:a = A;break; case 2:a = R;break; case 3:a = WB_SLD?EXE_D:EXE_C;break;//根据WB_SLD信号判断从D还是C取数据 } switch(EXE_BDEPEN){ case 0:b = B;break; case 1:b = I;break; case 2:b = R;break; case 3:b = WB_SLD?EXE_D:EXE_C;break; } //ALU计算 if(EXE_ALUOP[1]==0&&EXE_ALUOP[0]==0){ R = a&b; }else if(EXE_ALUOP[1]==0&&EXE_ALUOP[0]==1){ R = a|b; }else if(EXE_ALUOP[1]==1&&EXE_ALUOP[0]==0){ R = a+b; }else if(EXE_ALUOP[1]==1&&EXE_ALUOP[0]==1){ R = a-b; } if(EXE_WZ==1&&R==0)Z = 1; if(EXE_WZ==1&&R!=0)Z = 0; } void CPU::MEM_next(){ MEM_ins = EXE_ins; MEM_WMEM = EXE_WMEM; MEM_OPCODE = EXE_OPCODE; MEM_SLD = EXE_SLD; MEM_WREG = EXE_WREG; MEM_WZ = EXE_WZ; MEM_d = EXE_d; C = R; EXE_C = R; //由于本实验重点不在于存储器的存取,所以对本部分加以简化 //store不予执行,并假设load指令将得到9 if(MEM_OPCODE==\ D = 9; else D = 0; - 14 -

第五章 测试及成果展示

执行到第五步时,可以看到load指令后面流水线暂停一次,并且EXE级指令的ADEPEN信号为3,从D寄存器取数据。

5.3 成果展示

实验成果见5.2

5.4 本章小结

经过各种情况实验用例的测试,本程序运行良好,所有寄存器和控制信号都通过图形界面正确地显示,指令执行的顺序正确,并在必要的时候通过CPU硬件控制的方式暂停流水线。总体来说,课程设计较为成功。

- 25 -

电子科技大学本科课程设计报告

第六章 总结与展望

通过这次课程设计,我们了解到了许多计算机系统结构方面的知识,更重要的是知道了自己在设计方面的不足和改进的方法。在设计之初,我遇到了很多问题,有一种无从下手的感觉,后来经过对课上第三章PPT的认真研究和组内成员的讨论,才明白本课程设计需要达到的效果,以及实现的具体方案,才使得实验顺利的进行下去。在此过程中,我们对流水线CPU的构造和执行过程有了深刻的认识,每一个步骤、每一个信号都需要仔细钻研。此外,我们深刻体会到了需求分析的在项目设计中的重要性,一个完美的需求分析会简化设计过程,从而时思路清晰化,为之后的设计实现做好充分准备。

总的来说,这次课程设计,使得我们流水线的原理了解更为清晰了。同时,我使用C++进行编程的能力和编写图形界面的能力都得到了提高。本次设计给我们带来的提高并不止这些:离我们最近的是期末考试,我们在准备过程中对系统结构课程做了一次全面、透彻的复习,相信在考试成绩上会有所体现;放眼未来,我在设计过程中的团结合作、严谨细致的工作态度,必将成为我们一生的财富。

- 26 -

第六章 总结与展望

参考文献

[1] 徐洁. 计算机系统结构. 北京:中国铁道出版社,2012.1

[2] Jasmin Blanchette. C++GUI Qt4编程(第2版). 北京:电子工业出版社,2008.1

- 27 -

本文来源:https://www.bwwdw.com/article/cj6v.html

Top