Programming Homework Help
Implement a Scoreboard Simulator Small Program
Project Specification
undefined
In this project, you will work in groups of 1-2 students to implement a Scoreboard simulator.
The maximum students per group will be 2.
undefined
Deliverables:
undefined
You can use one of the following languages to implement the program:
- C
- C++
- Python
- Java
- Verilog
- VHDL
You will also need to:
- Write clean code
- Make sure your code is readable even for someone not versed in the particular language
- Comment your code where necessary (too much commenting of code sometimes makes it hard to read)
- Submit a user manual for your code detailing how to run it; step by step instructions as well as what OS to use and how to compile the source code.
- Your instructor has access to the following OS:
- a Mac OS Catalina (unix) platform
- a Linux via linux.gl.umbc.edu
- Windows 10
- I would suggest you test your code on one of these platforms to ensure it runs as you expect.
- Your instructor has access to the following OS:
- Make sure that it is possible to run your code without needing to purchase any additional software. (I count Trials as a purchase)
undefined
You will need to submit a zip file named lastname_firstname_project.zip and containing:
undefined
- An executable of your simulator if the language you used requires one.
- The program files and source code.
- A text file (README) detailing how to run your simulator and recompile it if needed.
- Only one submission per group. You will need to make sure all your names are shown in the README as well as in the program code.
undefined
Your program should take as an input a text file with MIPS code (see Instructions section), and output a table similar to one used in class showing:
- When each instruction completed each stage
- The values in all the registers at the end of execution
- See input and output sections for further details
undefined
Due Date:
May 9th 2021 at 11.59pm
undefined
Grading:
undefined
The code and program will be graded according to the following:
undefined
10% -if the program works. It does not have to be perfect for you to get this credit
undefined
50%- Implementation
- How close is your simulator to mimicking a true scoreboard
- How well does it meet the specifications in this document
- Do values in the register match what is expected
- How does it handle corner cases
undefined
40%-Well written code:
- use of good variable names
- code is easy to follow an understand and is well organized
- Good instructions on how to run/compile your code
undefined
Late submissions will incur a 10 point deduction for every 6 hours they are late.
undefined
This project follows the UMBC Academic Integrity Policy and any work submitted must be your own. In addition to that policy, Collaboration between teams should only involve discussion of ideas but no sharing of code.
Any work copied from online resources MUST be cited.
Processor Configuration:
undefined
The algorithm will model a processor with the following configuration:
- Pipelined FP adder/s for FP adds and subtracts -2cycles
- Pipelined FP multiplier/s for FP multiplies -10cycles
- Pipelined FP divider/s for FP divides -40cycles
- Integer Unit/s for Loads, Stores, Integer Adds and Subtracts -1cycle
- Your program should ask the user for how many units there are for each functional units, that is, how many adders, how many multipliers, how many dividers and how many integer units.
32 FP registers and 32 integer registers.
- All registers will be initialized to 0 at the beginning.
Memory:
undefined
You can initialize your data memory to the following values:
undefined
Memory Location |
Value in Memory |
0 |
45 |
1 |
12 |
2 |
0 |
3 |
0 |
4 |
10 |
5 |
135 |
6 |
254 |
7 |
127 |
8 |
18 |
9 |
4 |
10 |
55 |
11 |
8 |
12 |
2 |
13 |
98 |
14 |
13 |
15 |
5 |
16 |
233 |
17 |
158 |
18 |
167 |
undefined
The memory location will be the index of the value and we will use that index as the actual address for loads and stores.
For simplicity the value at the memory location is what gets loaded into a register and if the memory location is offset then it loads whatever value is at that offset.
Example:
LD F2, 0(17) would load 158 into register F2
LD F2, 1(17) would load 167 into register F2
Instructions:
undefined
You can program your algorithm for the following instructions:
undefined
Memory Instructions:
L.D Fa, Offset(addr) |
Load a floating point value into Fa |
S.D Fa, Offset(addr) |
Store a floating point value from Fa |
LI $d, IMM64 -Integer Immediate Load |
Load a 64 bit Integer Immediate into $d |
LW $d, Offset(addr) |
Load an integer value into $d |
SW $s, Offset(addr) |
Store an integer from $s |
ALU Instructions:
ADD $d, $s, $t – Integer add |
$d = $s + $t |
ADDI $d, $s, immediate – Integer Add with Immediate |
$d = $s + immediate |
ADD.D Fd, Fs, Ft – Floating Point Add |
Fd = Fs + Ft |
SUB.D Fd, Fs, Ft – Floating Point Subtract |
Fd = Fs – Ft |
SUB $d, $s, $t -Integer Subtract |
$d = $s – $t |
*MUL.D Fd, Fs, Ft -Floating Point Multiply |
Fd = Fs X Ft |
DIV.D Fd, Fs, Ft – Floating Point Divide |
Fd = Fs ÷ Ft |
*You can assume that Fd is big enough to hold the value of the result.
$s/$d are integer registers and Fa/Fd are floating point registers
undefined
Inputs
Your program should take the following inputs (how it takes them is up to you):
- The number of units per functional unit
- Text file with a program written using MIPS instructions outlined above
- You do not have to account for MIPS instructions not outlined in this document
undefined
Outputs