Lab3 Y86流水线设计
说明:
对于某个Y86指令,模拟设计一个流水线流程。
例子:课本图 4.42
Y86指令如下:
# prog1
0x000: irmov1 $10, %edx
0x006: irmovl $3, %eax
0x00c: nop
0x00d: nop
0x00e: nop
0x00f: add %edx, %eax
0x011: halt
对应的Y86流水线如下:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
F | D | E | M | W | | | | | | |
| F | D | E | M | W | | | | | |
| | F | D | E | M | W | | | | |
| | | F | D | E | M | W | | | |
| | | | F | D | E | M | W | | |
| | | | | F | D | E | M | W | |
| | | | | | F | D | E | M | W |
| | | | 周期6 W R[%eax]<-3 | 周期7 D valA<-R[%eax] = 10 valB<-R[%eax] = 3 | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
Y86流水线模拟设计要求:
1. 自行设计一个Y86指令,要求该指令中必须包含movl指令(irmovl、rrmovl、mrmovl、rmmovl),四个整数操作指令(addl、subl、addl、xorl),七个跳转指令(jmp、jle、jl、je、jge、jg)。Call、pushl、popl、halt任选3个。
2. 流水线设计可以针对特定Y86指令,亦可对任意Y86指令有效(有加分)。
3. 对于每个周期,要求输出F D E M W对应的操作。比如周期6,W对应的操作为R[%eax]<-3。
4. 监视并输出每个周期对应的寄存器、条件码、存储器、PC的值。
5. 对于流水线流程中的冒险,应采取相应的避免数据冒险操作(有加分)。
6. 可加入任意你认为对Y86流水线设计合理的操作。
7. 本实验可用C/C++、java、VB等编写,最后提交一个实验报告和本实验相关的代码和可执行程序。(实验报告包括Y86指令、流水线设计思路和流程图、代码说明和演示、实验感想等)
8. 第十五周开始做报告,每组2~3人,提交日期:2012年6月18日23:59