ECE 690 Term Project

Use the QTSPIM or MARS simulator for the MIPS microprocessor architecture. 

Assume only integer operations in this project (i.e., no operations of the floating-point type). 

PROGRAM TO DEVELOP AND SIMULATE

GIVEN an array of ten 64-bit numbers in memory starting at a known location (say SOURCE), apply RUN-LENGTH ENCODING to its binary contents to achieve lossless data compression. Store the result (i.e., the counts of alternating sequences of “0”s and “1”s) in the memory starting at a known location (say DEST). Assume that each count is stored in a byte (i.e., the count fits in 8 bits) and another output (say SIZE) contains the total number of 8-bit counts.

Assume the big endian representation for stored numbers.

EXAMPLE

Assume the 32-bit input at SOURCE:

00000000010011111111000000001111

Step 1: Identify contiguous sequences of “0”s and “1”s in this 32-bit input

Step 2: Count the “0”s and “1”s in these sequences and store the counts sequentially in the array DEST assuming that the first count is for “0”s (the most significant bits in the 32-bit sequence).

ð The result in DEST for our input is “912884” (with SIZE=6) since the binary input contains 9 “0”s which are followed by 1 “1”, which is followed by 2 “0”s, which are followed by 8 “1”s, etc.

NOTE: Short MIPS tutorials can be found at many sites, such as:

  • http://logos.cs.uic.edu/366/notes/mips%20quick%20tutorial.htm
  • http://www.eecs.harvard.edu/~ellard/Courses/cs50-asm.pdf (with example codes at the end of the tutorial that you could use to get experience with the simulator)
  • http://chortle.ccsu.edu/assemblytutorial/

Run your code for the following hexadecimal input:

The lowest address (SOURCE) stores the most significant byte of the first 64-bit number.

{`4444440000000000 (first 64-bit number)
FFFFFFFFFFFF0000
0000000000055555
00000000000FFFFF
FFFFFFFF00000000
000000FFFFFFFFFF
0000000000000000
FFFFFFFFFFFFFFFF
FFFFFFFFFFFFFFFA
AAAAAAAAA0000000
`}

Binary representation of this input:

Lowest address (SOURCE)

{`0100010001000100010001000000000000000000000000000000000000000000
1111111111111111111111111111111111111111111111110000000000000000
0000000000000000000000000000000000000000000001010101010101010101
0000000000000000000000000000000000000000000011111111111111111111
1111111111111111111111111111111100000000000000000000000000000000
0000000000000000000000001111111111111111111111111111111111111111
0000000000000000000000000000000000000000000000000000000000000000
1111111111111111111111111111111111111111111111111111111111111111
1111111111111111111111111111111111111111111111111111111111111010 
1010101010101010101010101010101010100000000000000000000000000000
`}