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.
  • 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):

  1. The number of units per functional unit
  2. 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