1、MIPS 五级整数流水线模拟系统 报告- 1 -MIPS 五级整数流水线模拟系统 报告计算机 0106陆晓春2004-05-161 引言 .22 简单需求分析. .23 核心功能实现 .34 界面及使用4MIPS 五级整数流水线模拟系统 报告- 2 -5 测试81引言:1.1 实验要求:1) 以交互输入方式或从文件读入方式(输入文件名后缀为.mips)输入一段 MIPS 汇编程序,选择不同执行模式,能给出该段程序在 MIPS 流水线上执行的流水线状态图,能显示各寄存器或某一存储单元的值(16 进制或 10 进制值) ,各条指令的执行次数、频度,以及程序执行所用总的时钟周期数。2) 能正确执行下
2、列 MIPS 整数指令:LW, SW, ADD, SUB, MUT, DIV, AND, OR, XOR, ADDI, SUBI, MUTI, DIVI, ANDI, ORI, XORI, BEQZ, BNEZ, J, JR,Trap(表示程序结束指令) 。3) 提供界面交互设置或修改寄存器、存储单元的值,能够对寄存器、存储单元和执行统计结果进行清零操作。4) 要求提供两种模拟执行模式:有提前电路模式,无提前电路模式; 5) 实现四种不同的转移处理策略:流水线清除,预测成功,预测转移不成功,延时转移。(注意流水线清除和预测成功在 MIPS 整数流水线上结果是一样的)1.2 整体说明:基本程序在
3、 MIPS Simulator 文件夹里,binary 文件在 bin 下。其中 MIPS Simulator.exe是可执行文件。尚有很多问题,请原谅!2简单需求分析:2.1 简单数据流图和流程图:DFA:C o n t r o lD i a l o gC o n f i gC o n f i g f e e d b a c kc o n f i gR e a d m i p sa s m f i l e scontrolS c a n , p a r s e ,e r r o r c h e c k i n gFilestreamInstructionsetsN e x t o r p r
4、 e vC y c l e o r s t e ps h o wR e s e tc o n t r o lr e s u l tc o n t r o lcontrolR e s e t d a t aMIPS 五级整数流水线模拟系统 报告- 3 -基本操作流程图:S t a r t -M a i n c o n t r o l d i a l o gC o n f i g u r eL o a d M I P S A s m f i l e sN e x t c y c l eP r e v i o u s c y c l eS t e p f o r w a r dS t e p b a
5、 c kg oS h o w r e s u l tS t a t i s t i c sT R A C EM o d i f y R e g i s t e r d a t aM o d i f y M e m o r y d a t a进入主界面,configure,主要是设置模拟执行模式:有提前电路模式,无提前电路模式;四种不同的转移处理策略:流水线清除,预测成功,预测转移不成功,延时转移,以及数据段的大小(关系程序开始的地址) 。此外在运行前可以修改 MIPS Memory 和Register 的值 Memory 提供 Big ending 和 Little ending 以供选择,R
6、egister 提供 Hex 和Decimal。接着读入 MIPS 汇编文件。运行程序,首先要设置开始的 PC,默认紧接数据段开始。 Next cycle 运行下一个始终脉冲,Previous cycle 回到上一个时钟脉冲的状态。Step forward 和 Step back 以开始一条新指令为标志。Go 一直运行到程序结束。TRACE 要求输入文件名,然后对运行时的指令次序进行输出。Statistics 显示各条指令的执行次数、频度,以及程序执行所用总的时钟周期数。2.2 技术要求:使用 MFC 制作,用图形化显示流程图,能够显示各个 instruction 所在的 stage。3核心功
7、能实现:3.1 MIPS 汇编文件读入:Class CTokenizer:输入:文件流输出:通过 NextToken()得到 token 类型,定义在 tokenizer.h;Class CLexAnalyzer:Lexical analyze,是对 CTokenizer 的继承。通过 NextToken()得到 struct Lex,定义如下:MIPS 五级整数流水线模拟系统 报告- 4 -struct LexASMKey key; / Instruction 的类型CString str; / Instruction 的字符串;其中 ASMKey 是一个 enum 类型,定义在 LexAn
8、alyzer.h 里;Class CAsmInstruction:这是单个的 MIPS 指令,包含指令类型typedef enum TYPE_I,TYPE_R,TYPE_J inst_type_t;其中单个指令抽象成一个 struct:typedef struct inst_type_t type;union / I-typestruct UINT opcode : 6;UINT rs : 5;UINT rt : 5;int imm : 16; i;/ R-typestruct UINT opcode : 6;UINT rs : 5;UINT rt : 5;UINT rd : 5;UINT s
9、hamt : 5;UINT funct : 6; r;/ J-typestruct UINT opcode : 6;int offset : 26; j; inst;CString target;/ used in BEQZ, BNEZ and J instruction inst_t;MIPS 五级整数流水线模拟系统 报告- 5 -含有一个 union,包含 I,R, J 三种类型、寄存器、立即数部分以及运行时所分配的地址,节约空间。这个类只能通过 NextInst()调用,建立单个指令的 Object,如果没有输入指令就返回 NULL;Class CInstructions:对所输入的文件
10、建立指令集,里面是用 CList 模板构建的 CAsmInstruction 串。3.2 指令运行:Class CExecInst:这个是运行中的指令,模拟 MIPS 的五级流水线,主要通过 NextCycle()到达下一个时钟周期。Object 采用双链表形式,next 连接之后的,prev 连接之前的。当 NextCycle()经过此指令的最后一个 stage 后,object 通过调用 stageComplete()自动销毁(delete this) 。Class CMIPSSimulator:最核心的一个类,并有全局对象 CMIPSSimulator simulator;这个类里保留有
11、 MIPS 的基本设置,基本的硬件结构:PC、REGISTER 、MEMORY 以及IF/ID、ID/EX、 EX/MEM、MEM/WB 等 CPU 内部 Register。通过调用 NextCycle()实现一个时钟周期。上面两个类具体请看:MIPSSimulator.h 和 MIPSSimulator.cpp,有详细注释。4界面及使用:按照上面的流程图,对本程序的界面做一简单介绍:4.1 Main Control Dialog:MIPS 五级整数流水线模拟系统 报告- 6 -这是程序开始时的对话框,可以选择设置和编辑。4.2 edit MIPS Asm files:支持语法加亮,可以更方便
12、的编译汇编文件。4.3 Configure:流水线清除 Freeze(or flush)预测成功 Predicted-Taken预测转移不成功 Predicted-Untaken延时转移 Delayed提前电路 ForwardingMIPS 五级整数流水线模拟系统 报告- 7 -4.4 编辑内存(Memory):提供 Big Endian 和 Little Endian,方便编译。4.5 编辑寄存器(Register):可以显示十六进制和十进制。4.6 当程序运行时的状态图:MIPS 五级整数流水线模拟系统 报告- 8 -在 Basic MIPS Pipeline 对话框上点击 Registe
13、rs 和 Data memory,可以查看当前的结果。5测试:包括加减法测试,乘除测试,两种执行模式测试以及四种转移模式测试,测试文档在bin 目录下。现对关于 Delay slot 的测试做一简单概述:测试为一段 MIPS 汇编代码,从 1 加到 10,结果存到 r2 寄存器中,其中 要求使用DELAY SLOT 的程序必须在 Configure 的 branch strategies 中选 delayed,否则会死循环!程序如下:;test without DELAY SLOT;start:addi r1, r0, 1addi r2, r0, 0loop: add r2, r2, r1addi r1, r1, 1subi r3, r1, 11bnezr3, looptrap #1;test with DELAY SLOT;start:addi r1, r0, 1addi r2, r0, 0loop: add r2, r2, r1subi r3, r1, 10bnezr3, loopaddi r1, r1, 1 ;delay slottrap #1程序运行结果(R2 的值)都是 55,正确。Download by http:/END