计算机系统结构实验一流水线指令调度
计算机体系结构课程实验

– 指令
• 访存类、寄存器操作、算术类、逻辑类、控制流转移
– WinDLX的Trap机制
实验步骤
一. 学习WinDLX软件使用; 二. 学习DLX汇编程序的编写; 三. 将程序在WinDLX上运行调试; 四. 观察程序中出现的数据/控制/结构相关; 五. 优化代码(在有定向功能和无定向功能两种情 况下),尽量消除相关引起的暂停; 六. 对优化后的代码重新模拟,并观察优化效果; 七. 分析实验结果,书写实验报告。
计算机系统结构课程实验
—— 流水线篇
主要内容
• 实验目的 • 实验原理 • 实验平台
– WinDLX
• 实验内容 • 实验步骤 • 实验要求
实验目的
• 通过该模拟实验,进一步掌握和巩固流水 线的基本知识; • 初步掌握在特定体系结构下的汇编代码的 编写和优化;
• 培养运用所学知识解决实际问题的能力。
DLX的汇编语法
• DLX的汇编语法(1/2)
– 伪指令
.data [address] .text [address] .global label .word word1,word2,… .space size .double 常数、运算符…………
一般地,指令(code)均被导入 $CODE (起始地址为0x100) 而数据(data)则被导入$DATA (起 始地址为0x1000)
实验要求
• 实验报告要求包括:
1. 程序源代码 2. 实验结果、实验分析、优化过程、性能分析 3. 简单谈谈自己对流水线技术的认识
提交形式: 实验源代码 + 实验报告(Word编辑) 文件夹命名格式:学号1_姓名1
谢 谢
实验原理
• 流水线执行过程
计算机系统结构 实验报告 (截图 分析 总结)

实验一流水线中的相关一、实验目的1. 熟练掌握WinDLX模拟器的操作和使用,熟悉DLX指令集结构及其特点;2. 加深对计算机流水线基本概念的理解;3. 进一步了解DLX基本流水线各段的功能以及基本操作;4. 加深对数据相关、结构相关的理解,了解这两类相关对CPU性能的影响;5. 了解解决数据相关的方法,掌握如何使用定向技术来减少数据相关带来的暂停二、实验平台WinDLX 模拟器三、实验内容和步骤1.用WinDLX模拟器执行下列三个程序:(分别以步进、连续、设置断点的方式运行程序,观察程序在流水线中的执行情况,观察CPU中寄存器和存储器的内容。
熟练掌握WinDLX的操作和使用。
)●求阶乘程序fact.s⏹步进的运行方式:步进的运行方式是指,每次控制只执行一条语句,快捷键为F7键:图1-1 单步运行测试⏹设置断点的运行方式:鼠标点击某行,按下“Insert键”,设置断点:图1-2 设置断点图1-3 断点设置成功,按F5运行至断点⏹连续的运行方式:通过按下F5键,可直接运行至断点处;按下F8键,并在对话框内键入跳跃的步数,可以直接跳转指定的步数:图1-4 设置跳转步数●求最大公倍数程序gcm.s,观察程序在流水线中的执行情况:●求素数程序prim.s,观察CPU 中寄存器和存储器的内容2. 用WinDLX运行程序structure_d.s通过模拟找出存在资源相关的指令对以及导致资源相关的部件;记录由资源相关引起的暂停时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;论述资源相关对CPU性能的影响,讨论解决资源相关的方法。
●存在资源相关的指令、导致资源相关的部件⏹两条指令同时访问寄存器f4,造成资源相关:⏹两条指令同时访问ALU,造成资源相关:●由资源相关引起的暂停时钟周期数、暂停时钟周期数占总执行周期数的百分比由资源相关引起的暂停时钟周期数:30;总执行周期数:139;暂停时钟周期数占总执行周期数的百分比:21.6%3. 在采用、以及不采用定向技术的情况下,分别用WinDLX 运行程序data_d.s(记录数据相关引起的暂停时钟周期数以及程序执行的总时钟周期数,计算暂停时钟周期数占总执行周期数的百分比;并计算采用定向技术后性能提高的倍数)●采用定向技术:(左下图)⏹计算暂停时钟周期数占总执行周期数的百分比:30/128=23.4%图3-1 采用定向技术图3-2 不采用定向技术●不采用定向技术:(右上图)⏹计算暂停时钟周期数占总执行周期数的百分比:104/202=51.5%●采用定向技术后性能提高的倍数:202/128=1.58倍四、实验总结●资源相关对CPU性能的影响、讨论解决资源相关的方法资源相关使相关指令在流水线上停滞,降低了执行效率;为解决这一问题,应在编写代码时尽量避免总是使用同一寄存器;并通过指令调度,使相关的代码执行距离拉开。
计算机系统结构 流水线技术 3.4 MIPS R4000流水线计算机简介

3.4 MIPS R4000流水线计算机简介
3. 流水线中各段的功能
2/14
绩效管理与绩效考核
4.指令序列在流水线中的重叠执行过程
绩效管理与绩效考核
3.4 MIPS R4000流水线计算机简介
5. 载入延迟为两个时钟周期
4/14
绩效管理与绩效考核
3.4 MIPS R4000流水线计算机简介
3. R4000浮点流水线是一种多功能非线性流水线 4. 双精度浮点操作指令的延迟、启动间隔以及 流水段的使用情况 (表3.9)
13/14
表3.9
浮点指令 延 迟
初始化 间隔 3
4 35 111 1 1
使用的流水段
加、减
乘 除 求平方根 取反 求绝对值
4
8 36 112 2 2
U,S+A,A+R,R+S
第三章 流水线技术
3.4
MIPS R4000流水线计算机简介
3.4.1 MIPS R4000 整型流水线
1. 指令集:MIPS-3 指令集(64位),类似于DLX 2.MIPS R4000 流水线结构 共8个段:较深的流水线有利于提高时钟频率。 超级流水 与DLX流水线相比:把访存操作进一步分段。 取指令:IF,IS 读写数据:DF,DS,TC
2.8个流水段
(表3.8)
11/14
表3.8
流水段 A D E M 功能部件 浮点加法器 浮点除法器 浮点乘法器 浮点乘法器 描 述
尾数加流水段 除法流水段 例外测试段 乘法器第一个流水段
N
R S U
浮点乘法器
浮点加法器 浮点加法器
乘法器第二个流水段
计算机系统结构实验报告-指令调度与延迟分支

验
内
容
、
步
骤
及
结
果
实验步骤:
1、启动MIPSsim。
2、根据2.5节相关内容关于流水线的描述,进一步理解流水线窗口中各段的功能;
3、选择“配置”--“流水方式”选项;
4、用指令调度解决流水线中的数据冲突
(1)启动MIPSsim;
(2)用MIPSsim的“文件”—“载入程序”选项加载schedule.s;
SW $r4,0($r1)与上条指令写后读冲突;
LW $r6,4($r1)
ADD $r8,$r6,$r1同样,与上条指令写后读冲突;
MUL $r12,$r10,$r1
ADD $r16,$r12,$r1同样,与上条指令写后读冲突;
ADD $r18,$r16,$r1与上条指令组件冲突
SW $r18,16($r1)同样,与上条指令写后读冲突;;
ADDI $r1,$r1,1
SW $r1,0($r2)
LW $r8,32($r2)
ADDI $r8,$r8,1
SW $r8,32($r2)
LW $r9,64($r2)
ADDI $r9,$r9,1
SW $r9,64($r2)
LW $r10,96($r2)
ADDI $r10,$r10,1
SW $r10,96($r2)
1、加深对指令调度技术的理解;
2、加深对延迟分支技术的理解;
3、熟练掌握用指令调度技术解决流水线中的数据冲突的方法;
4、进一步理解指令调度技术对CPU性能的改进;
5、进一步理解延迟分支技术对CPU性能的改进。
实验平台:
1.采用指令级和流水线操作级模拟器MIPSsim;
2.Windows xp PC机一台
北邮计算机系统结构实验报告

高级计算机系统结构实验报告实验二指令流水线相关性分析实验三DLX处理器程序设计实验四代码优化实验五循环展开专业计算机科学与技术班级2015姓名学号2015实验二指令流水线相关性分析1. 实验目的:通过使用WINDLX模拟器,对程序中的三种相关现象进行观察,并对使用专用通路,增加运算部件等技术对性能的影响进行考察,加深对流水线和RISC处理器的特点的理解。
2. 实验设备环境:2.1 WinDLX模拟器可以装入DLX汇编语言程序,然后单步、设置断点或者连续执行该程序;2.2 CPU的寄存器、流水线、I/O和存储器都可以使用图形的方式表示出来;2.3 模拟器还提供了对流水线操作的统计功能;2.4 该模拟器对理解流水线和RISC处理器的特点很有帮助;2.5 所有浮点运算部件的延时都设定为4个周期;3. 实验原理:指令流水线中主要有结构相关、数据相关、控制相关。
相关影响流水线性能。
3.1数据相关定义:原有先后顺序的两条指令(I1,I2)在对共享变量(位置)进行读、写时,指令流水线中实际完成的读、写顺序与原有顺序不一致,导致流水线输出错误。
三类数据相关:写读(WR)相关读写(RW)相关写写(WW)相关解决方法技术:1.使某些流水线指令延迟、停顿一或多个周期。
2.双端口存储器:如果指令和数据放在同一个存储器。
3.设置两个存储器:一个数据存储,一个为指令存储器。
4.软件优化编译:通过指令重新排序,消除数据相关。
5.定向技术:又称旁路技术或专用通路技术,是使后续指令提前得到前指令的运算结果(适合ALU类指令)3.2结构相关定义:如果某指令在流水线重叠执行过程中,硬件资源满足不了指令重叠执行的要求,会产生资源冲突或竞争,称为流水线结构相关解决方法技术:1.延迟技术:使某些指令延迟、停顿一或多个时钟周期2.双端口存储器:允许同时读两个数据或指令3.设置双存储器(哈弗结构):一个数据存储,一个指令存储。
4软件优化编译:通过指令重新排序消除结构相关。
计算机系统结构之流水线技术(205页)

入 求阶差
△t
对阶 △t
尾数相加 △t
出 规格化
△t
▲
31/206
1. 时空图 ➢ 时空图从时间和空间两个方面描述了流水线的工作 过程。时空图中,横坐标代表时间,纵坐标代表流 水线的各个段。 ➢ 4段指令流水线的时空图:
空间
存结果
123456
执行 译码
123456
5
123 45 6
取指令 1
2
3
4
k…+…1 k+j
已经由指令分析器预处理完成,存放在先行操作栈中的 RR*型指令,指令所需要的操作数已经读到先行读数栈中
k…+…j+1 k+j+n
已经由指令分析器预处理完成,存放在先行操作栈中,指 令所需要的操作数还没有读到先行读数栈中
k+j+n+1 正在指令分析器中进行分析和预处理的指令
k…+…j+n+2 已经从主存储器中预取到先行指令缓冲栈中的指令 k+j+n+m
1
2
3
…
1
2
3
…n
1
2
3
…
n
2
3
k
ti
i1
…n (n-1)t2
Tk 各段执行时间不相等的流水线及其时空图
n
时间
▲
33/206
2 流水线的基本概念
➢ 流水线每一个功能部件的后面都要有一个缓冲寄 存器(锁存器),称为流水寄存器。
站的某个存储单元(设其地址为j),同时用j替换原来指令
中的目标地址码字段。
✓ 立即数型指令:把指令中的立即数送入读数站(设为第l个 存储单元),同样也用l替换原来指令中的立即数字段。
计算机体系结构实训课程学习总结指令级并行与流水线设计

计算机体系结构实训课程学习总结指令级并行与流水线设计在计算机科学与技术领域中,计算机体系结构是一门关于计算机硬件与软件的核心学科。
在我修习的计算机体系结构实训课程中,我学习了指令级并行与流水线设计,掌握了该领域的核心概念与技术,下面是我对该课程的学习总结和心得体会。
一、指令级并行概述指令级并行是指在一个周期内同时执行多条指令,以减少指令的执行时间,提高计算机的性能。
在学习指令级并行的过程中,我了解了计算机指令的基本原理及其执行过程。
通过学习指令流水线、数据前推、乱序执行等技术,我深入理解了指令级并行的优势和实现方法。
在实训过程中,我通过搭建指令级并行的实验平台,进行了仿真实验和性能分析。
通过比较顺序执行和指令级并行执行的效果,我发现指令级并行可以大幅度提高计算机的执行效率。
而在实现指令级并行时,我也面临了一些挑战,如数据相关、控制相关等问题,但通过优化代码和调整指令执行顺序,我成功地解决了这些问题。
这个过程让我深刻体会到指令级并行设计的重要性和技术难点。
二、流水线设计与优化流水线设计是指将计算机指令的执行过程划分为多个阶段,并使不同阶段的指令并行执行,从而提高计算机的吞吐量。
在学习流水线设计的过程中,我深入了解了流水线的原理、特点和结构。
通过学习流水线的组织方式、数据冒险、控制冒险等问题,我掌握了流水线设计的关键技术。
在实验中,我设计了一个基于流水线的简单计算机,并通过编写适当的指令集和流水线寄存器,实现了流水线的功能。
通过性能测试,我发现流水线设计可以显著提高计算机的执行效率和吞吐量。
然而,我也发现了一些流水线设计中的问题,比如分支预测错误、资源冲突等,这些问题对流水线的性能产生了负面影响。
通过调整分支预测策略和添加冲突检测机制,我成功地进行了优化,提高了流水线设计的性能。
三、实训过程中的收获与反思通过学习指令级并行与流水线设计,我不仅极大地提高了对计算机体系结构的理解和掌握,还培养了解决实际问题的能力。
计算机体系结构与指令流水线

计算机体系结构与指令流水线计算机体系结构是指计算机硬件和软件之间的交互方式,它决定了计算机的组织结构、数据传输方式以及指令的执行过程。
在计算机体系结构中,指令流水线是一种重要的技术手段,它可以提高计算机的性能和效率。
本文将深入探讨计算机体系结构与指令流水线的相关知识。
一、计算机体系结构的基本原理计算机体系结构包括硬件体系结构和软件体系结构。
硬件体系结构代表了计算机硬件的组织和连接方式,它包括中央处理器(CPU)、存储器和输入输出设备等;软件体系结构则是指操作系统和编程语言等软件的组织方式。
在计算机体系结构中,指令的执行是一个重要的过程。
指令由操作码和操作数组成,计算机的执行方式是将指令从存储器中取出,经过解码和执行阶段完成相应的操作。
传统的计算机执行方式是按照指令的顺序一个一个地执行,这样会导致指令之间存在较大的时间间隔,浪费了计算机的效率。
二、指令流水线的原理与优势为了提高计算机的效率,减少指令之间的时间间隔,人们提出了指令流水线的概念。
指令流水线将指令的执行过程划分为多个阶段,每个阶段都由一个专门的电路来完成,不同的指令可以同时在不同的阶段执行,以实现多条指令的并行执行。
指令流水线的优势主要体现在以下几个方面:1. 提高了计算机的吞吐量。
由于指令流水线可以实现多条指令的并行执行,因此可以在同样的时间内完成更多的指令,从而提高了计算机的吞吐量。
2. 减少了指令之间的等待时间。
在指令流水线中,不同指令可以在不同阶段同时执行,减少了指令之间的等待时间,提高了计算机的效率。
3. 加快了指令的执行速度。
通过将指令的执行过程切分为多个阶段,并行执行不同指令的不同阶段,可以加快指令的执行速度,缩短了计算时间。
然而,指令流水线也存在一些限制和问题,例如:1. 指令相关性。
如果后续指令依赖于前面指令的结果,就会导致指令流水线的停顿,降低了计算机的效率。
2. 分支指令。
由于分支指令可能会改变指令的执行顺序,因此对于分支指令,指令流水线需要进行预测和处理,以避免出现时间浪费。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机专业类课程实验报告课程名称:计算机系统结构学院:计算机科学与工程专业:计算机科学与技术学生姓名:林怡学号:2012060020023指导教师:叶娅兰日期:2015年 5月 5日电子科技大学计算机学院实验中心电 子 科 技 大 学实 验 报 告实验一一、实验名称:流水线指令调度二、实验学时:4三、实验内容和目的:实验目的:1. 通过本实验,理解指令调度的方法。
2.掌握使用VC 开发平台模拟处理机内部指令流调度的编程策略。
实验内容:(一)给定要执行的任务和执行该任务的流水线结构流水线的调度方式能够提高任务的并行度,但是针对不同的任务,由于相关的存在,其并行度的提高是不一致的。
在开始程序设计前,我们首先要给定所要完成的任务: 这里我们使用最简单的累加操作∑=n1i Ai 。
n 的数值可以变化,通过变换n 的值用同一程序进行多次模拟。
给定流水线: 流水线分四个步骤,每个步骤的执行时间均为一个单位时间。
(二)对任务进行分解任务分解的目的是为了减少相关。
例如n =4时,任务分解为 A1+A2、A3+A4、 A1+A2+A3+A4 三个加法操作。
如果n 的大小是未知的,任务该怎样分解呢?换而言之,在程序模拟中,有没有一种通行的分解处理方式,可以实现对任意数目的源数据的累加的分解?(三)任务分解程序模拟的思路首先,Ai 是对称的,Ai 和Aj 都是一个源操作,任意更换其相对位置,计算的累加和的结果是不变的。
每次的加法操作能执行的必要条件是存在两个源数据,因此我1 2 3 4 X Y们可以把所有的源数据放入一个队列中,只要该队列中有两个源,那么就执行加法,加法计算的结果是下一次计算的源数据,我们把它再放回源数据队列,直到对列中只剩一个数据、同时加法流水线中没有执行加法操作时,整个累加过程完成。
(四)加法流水线的设计加法流水线分为四个步骤,每个步骤时间花费是一个单位时间。
模拟程序的目的是为了计算总的执行时间,因此对于每个步骤执行的功能并不需要关心。
为此设计一个总步数为4步的加法器,接收两个输入数据,经过4个时间片,输出加法的结果。
时间片可以用定时器来模拟。
(五)程序设计程序应包括一个队列,一个加法类,一个定时器,一个输出对话框。
队列用于存放源数据,一开始将n个源数据A1-An放入。
启动定时器,每一个时间片从队列中取出两个源数据,送入加法器(可以通过调用加法器中接口函数,把源数据作为参数传入)。
构造加法器类,可以考虑用一个长度对4的执行队列来模拟4个步骤,每个时间片将队列的数据依次下压一格,队列尾的数据进行加法计算并将结果压入源数据队列。
用一个记数值表示时间开销,每个时间片对该记数值加1。
当源队列只剩一个数据且加法器的执行队列为空时,整个程序结束,记数器的值就是任务执行的总体时间花费。
(五)多次模拟可以通过循环的方式对n从4-20进行循环,将每次模拟运行的时间开销值在对话框中显示出来。
如果可能将结果打印。
四、实验原理:程序设计及数据结构:实验程序共有6个类,分别是:①PipeAdditionTest 公共类,测试程序,每一个n的循环,将计时器清零并初始化长度为n的源操作数队列,当源操作数队列有多余一个操作数或者加法器的执行队列不为空的时候持续调用加法器类执行加法操作,在程序结束时输出n以及计时器timercounter的值;②OperaQueue 操作数队列类,包括一个操作数队列数据结构、队列初始化函数OperaQueue(int queueLength)、从队列中取一个源操作数函数getOperationNum()和将加法器计算的结果压入队尾的函数pushOperationNum(int op);电子科技大学计算机学院实验中心③Addition 加法器类,包含一个加法执行队列additionQueue,一个用于暂存操作数的队列addOperandQueue。
构造函数Addition(int len)用于初始化加法器执行队列,函数fetchOpNum在每一个时间片从源操作数队列中取出操作数,函数getAdditionResult()将两个源操作数相加并返回它们的和,以及一个空操作executeNop()用于模拟加法器四级流水线。
④Timer 成员变量timerCounter为时间片计数器。
⑤DialogFrame 对话框相关。
⑥DialogFrameComponent 对话框相关。
五、实验器材(设备、元器件)Win7操作系统、Eclipse集成开发环境、JDK1.8、Java程序语言六、实验步骤:程序流程图:七、实验数据及结果分析:当n=4时,时空图如下:此时时间片开销为t=9当n=5时,时空图如下:此时时间片开销为t=12t=13电子科技大学计算机学院实验中心实验程序结果如图:由截图可知,实验结果与时空图的结果是一致的,说明实验程序的正确性。
八、实验结论、心得体会和改进建议:1、通过本次实验,我自己动手实现了一个简单的加法流水线,增加了我对于流水线的工作流程的理解,也明白了通过指令的分解可以加快指令的运行速度并减少相关。
2、通过对流水线的模拟,不仅熟悉了流水线指令调度的过程,也训练了我多种数据结构的使用,以及将问题抽象的能力。
在模拟程序的实现中,我采用了队列、类等等基本的结构,这次实验,让我理解了流水线的调度策略,同时实际的程序开发也提高了我的编程能力。
实验代码如下:/*******PipeAdditionTest.java********/package Pipeline;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Font;import java.awt.Graphics;import java.util.LinkedList;import java.util.Queue;import javax.swing.JComponent;import javax.swing.JFrame;public class PipelineAdditionTest{public static String printStr = "";public static void main(String[] args) {int n = 0;String tempStr = "";for (n=4;n<=20;n++){Timer.timerCounter = 0; //计时器初始化为0int op1 = 0,op2 = 0;int sum = 0;OperaQueue operaQueue = new OperaQueue(n); //创建长度为n的操作数队列Addition addition = new Addition(4); //初始化创建一个空的加法器执行队列长度为4/**当源队列里有多于一个数据或者加法器的执行队列不为空时执行加法操作*/while ((operaQueue.opQueue.size() > 1)| !addition.additionQueue.toString().equals("[0, 0, 0, 0]")){/*若指令到达流水线最后一级,则求和并将结果压入源操作数队列*/if(addition.additionQueue.peek() == 1){sum =addition.getAddtionResult(addition.addOperandQueue.poll(),电子科技大学计算机学院实验中心addition.addOperandQueue.poll());operaQueue.pushOperationNum(sum); //加法操作得到的结果压入操作数队列System.out.println("peek后operaQueue.size()="+operaQueue.opQueue.size());}/*若源操作数队列中有多于两个操作数*/if (operaQueue.opQueue.size() > 1){System.out.println("beforeoperaQueue.size()="+operaQueue.opQueue.size());op1 = operaQueue.getOperationNum();op2 = operaQueue.getOperationNum(); //从操作数队列中取两个源操作数addition.addOperandQueue.offer(op1);addition.addOperandQueue.offer(op2); //暂存入加法器的操作数队列,以便后续进行加法操作System.out.println("取数后operaQueue.size()="+operaQueue.opQueue.size());addition.fetchOpNum(); //指令进入加法流水线,压入加法器执行队列}else {addition.executeNop(); // 若源操作数队列中的元素个数少于2个,执行空操作}System.out.println("执行后addQueue="+addition.additionQueue.toString());if (operaQueue.opQueue.size() == 1 &&addition.additionQueue.toString().equals("[0, 0, 0, 0]")){sum = operaQueue.opQueue.poll();break;}Timer.timerCounter++;System.out.println(" t"+Timer.timerCounter+"\n");}tempStr = "n = "+n+" timer = "+Timer.timerCounter+"sum="+sum+"\n";printStr = printStr + tempStr;}/*调用对话框*/EventQueue.invokeLater(new Runnable() {public void run() {JFrame frame = new DialogFrame();frame.setTitle("流水线加法指令调度");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);}});}}/*** 操作数队列,长度初始化为n*/class OperaQueue{Queue<Integer> opQueue;public OperaQueue(int queueLength){opQueue = new LinkedList<Integer>(); //初始化队列for (int i=1;i<queueLength+1;i++){opQueue.offer(i); //操作数1~n依次入队}}int getOperationNum(){return opQueue.poll();}void pushOperationNum(int op){opQueue.offer(op); //将相加后的操作数入队}}/*** 加法器类,分为四个步骤*/class Addition{Queue<Integer> additionQueue = new LinkedList<Integer>();Queue<Integer> addOperandQueue = new LinkedList<Integer>();Addition(int len){/*初始化加法器执行队列*/while (len--!=0)additionQueue.offer(0);}void fetchOpNum(){电子科技大学计算机学院实验中心/*执行队列下压一格,模拟4个步骤*//*第一级取数操作*/additionQueue.poll();additionQueue.offer(1);}void executeNop(){/*执行队列下压一格,模拟4个步骤*//*空操作*/additionQueue.poll();additionQueue.offer(0);}int getAddtionResult(int opa,int opb){/*将两个源操作数相加,返回它们的和*/return opa+opb;}}/*** 计时器timerCounter*/class Timer{public static int timerCounter; //计时器timercounter}/*** 对话框*/class DialogFrame extends JFrame{public DialogFrame(){add(new DialogFrameComponent());pack();}}class DialogFrameComponent extends JComponent{public static int MESSAGE_X = 40;public static int MESSAGE_Y = -200;private static final int DEFAULT_WIDTH = 400;private static final int DEFAULT_HEIGHT = 350;public void paintComponent(Graphics g){String[] str = PipelineAdditionTest.printStr.split("\n");for (int i = 0;i < str.length;i++){g.setFont(new Font("Tahoma", Font.BOLD, 12));g.drawString(str[i], MESSAGE_X, MESSAGE_Y);MESSAGE_Y += 15;}}public Dimension getPreferredSize(){return new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT);}}电子科技大学计算机学院实验中心。