Suggested ideas for projects in computer architecture

Due date in 2 weeks  (Monday 23 June 1999)

Basically what you have to do is to "design" a machine, i.e. its instruction set and/or its behaviour (microstep),  modify/write a simulator and run some benchmark program chosen from my integer benchmark suite.  If you cannot make the simulation work  you can submit your design and simulate it by hand. The objective is to design or modify a machine and run one or two benchmark programs on its simulator and report its performance (CPI).
 

Project list

Superscalar S1 with 2 ALUs
Add extra ALU to S1.  You can use non-pipe or pipe version.  Invent a way to issue two instructions at the same time when possible.

S1 with branch prediction
Add branch prediction capability to S1 pipe.   You have to decide the method to do branch prediction, branch-target buffer. (Hint:  you can use only one or two entries in BTB, it will yield very good result).

Compare different prediction heuristic
Comparing one-bit, two-bit scheme with different heuristic for deciding whether to take or not take the jump.

Change the number of pipeline stages
Design S1 with 2,3,4 stages pipeline.  Compare its performance with S1p which has 5 stages pipe.

Simulate scoreboard
Assume multifunctional units for S1, design and simulate how dynamic instruction scheduling work.

Using delay slot to reduce branch penalty
Modify S1p jump instruction to have  ability to use the delay slot, rearrange the assembly code by hand to use this feature.

How to do the project

You have to design an instruction set with enough instruction to execute some benchmark program (no I/O).  You have to design "micro architecture", i.e. the internal structure of a cpu and write its "micro step".  A set of benchmark program (Stanford integer benchmark) written in C is provided.  You must choose some portion of programs to measure your design. The benchmark should be taken from several parts of high level program and should be at least 10-20 lines of assembly code in total.  To validate (check that the design is correct) and evaluate (measure how fast your cpu is) the design, you can either :
  1. Write (modify) a simulator and run the benchmark programs to count the number of clocks required to complete the tasks  (you will earn extra bonus for doing the simulation) or
  2. Estimate the number of clocks by hand.  You need to make sure that you count the right thing.
You must hand in a report containing the following sections :
  1. Motivation behind your design (why you did it that way).
  2. Instruction set details : opcode, opcode format, number of clock required by each instruction.
  3. Microarchitecture and its microstep.
  4. Your benchmark program ( in your assembly language) and why you choose this particular part of the program.  Programs should be well commented so that I can read and understand what it does.
  5. How you validate and evaluate your design.
  6. Performance of your design (Cycle Per Instruction)
  7. Conclusion, what you learn from this project.

How I evaluate your project

I will look for the "quality" of your work including: Any question regarding the project, please contact me promptly.