Green
From Ece
Contents |
Team Members
Team Leader: Richard Sween
Team Member: Sean Bradford
Team Member: Matt Campassi
Design Overview
Instruction Format
- R-Format:
| Opcode | rs | rt | rd | Func |
|---|---|---|---|---|
| 4 bits | 3 bits | 3 bits | 3 bits | 3 bits |
- I-Format:
| Opcode | rs | rt | Immediate | Func |
|---|---|---|---|---|
| 4 bits | 3 bits | 3 bits | 3 bits | 3 bits |
- J-Format:
| Opcode | address |
|---|---|
| 4 bits | 12 bits |
- L-Format:
| Opcode | rd | Immediate | Half (upper = 0, lower = 1) |
|---|---|---|---|
| 4 bits | 3 bits | 8 bits | 1 bit |
- B-Format:
| Opcode | rs | rt | Address |
|---|---|---|---|
| 4 bits | 3 bits | 3 bits | 6 bit |
Instructions
| Name | Mnemonic | Operation | Opcode | Func | Format |
|---|---|---|---|---|---|
| Add | add | add $s1, $s2, $s3; $s3 = $s1 + $s2 | 0001 | 000 | R |
| Add immediate | addi | addi $s1, $s2, 100; $s2 = $s1 + 100 | 1000 | 000 | I |
| Branch Equal | beq | beq $s1, $s2, Loc; if($s1==$s2) goto Loc | 0100 | 000 | B |
| Branch Not Equal | bne | bne $s1, $s2, Loc; if($s1!=$s2) goto Loc | 0100 | 001 | B |
| Divide | div | div $s1, $s2, $s3; $s3 = $s1 / $s2 | 0001 | 001 | R |
| Exclusive Or | xor | xor $s1, $s2, $s3; $s3 = $s1 ⊕ $s2 | 0001 | 010 | R |
| Jump | j | j Loc; goto Loc | 0110 | 000 | J |
| Load Word | lw | lw $s1, $s2, 0; $s2 = Mem[$s1] | 1001 | 000 | I |
| Load Half Immediate | lhi | lhi $s1, imm, 0; $s1(15-8) = imm | 1011 | 000 | L |
| Multiply | mult | mult $s1, $s2, $s3; $s3 = $s1 * $s2 | 0001 | 011 | R |
| Null Operation | nop | nop | 0000 | 000 | R |
| Or | or | or $s1, $s2, $s3; $s3 = $s1 ¦ $s2 | 0001 | 100 | R |
| Set Greater Than | sgt | sgt $s1, $s2, $s3; if($s1 > $s2) $s3 = 1 else $s3 = 0 | 0001 | 101 | R |
| Set Greater Than Immediate | sgti | sgti $s1, $s2, 0; if ($s1 > 0) $s2 = 1 else $s2 = 0 | 1000 | 001 | I |
| Shift Left Logical | sll | sll $s1, $s2, 2; $s2 = $s1 << 2 | 1000 | 010 | I |
| Shift Right Logical | srl | srl $s1, $s2, 2; $s2 = $s1 >> 2 | 1000 | 011 | I |
| Store Word | sw | sw $s1, $s2, 0; Mem[$s1] = $s2 | 1010 | 000 | I |
| Subtract | sub | sub $s1, $s2, $s3; $s3 = $s1 - $s2 | 0001 | 110 | R |
Assembly Language and Machine Code for the Test Program
Test Program:
while ($a1 > 0) do {
$a1 = $a1 –1;
$t0 = Mem[$a0];
if ($t0 > 0100hex) then {
$v0 = $v0 ÷ 8;
$v1 = $v1 | $v0; //or
Mem[$a0] = FF00hex;
}
else {
$v2 = $v2 × 4;
$v3 = $v3 ⊕ $v2; //xor
Mem[$a0] = 00FFhex;
}
$a0 = $a0 + 2;
}
return;Assembly Language and Machine Code:
| Label | Assembly Language | Machine Code |
|---|---|---|
| while: | sgti $t1, $a1, 0; | 1000 010 101 000 001 |
| beq $t1, $0, end_while; | 0100 101 000 011110 | |
| addi $t1, $0, 1; | 1000 000 101 001 000 | |
| sub $a1, $a1, $t1; | 0001 010 101 010 110 | |
| lw $t0, 0($a0); | 1001 001 100 000 000 | |
| lhi $t1, 00000001, 0 | 1011 101 00000001 0 | |
| lhi $t1, 00000000, 1 | 1011 101 00000000 1 | |
| sgt $t1, $t0, $t1; | 0001 100 101 101 101 | |
| beq $t1, $0, else; | 0100 101 000 010011 | |
| lw $v0, 0($a2) | 1001 011 110 000 000 | |
| lw $v1, 2($a2) | 1001 011 111 010 000 | |
| srl $v0, $v0, 3 | 1000 110 110 011 011 | |
| or $v1, $v1, $v0; | 0001 111 110 111 100 | |
| lhi $t1, 11111111, 0 | 1011 101 11111111 0 | |
| lhi $t1, 00000000, 1 | 1011 101 00000000 1 | |
| sw $t1, 0($a0) | 1010 001 101 000 000 | |
| sw $v0, 0($a2) | 1010 011 110 000 000 | |
| sw $v1, 2($a2) | 1010 011 111 010 000 | |
| j endif; | 0110 000000011100 | |
| else: | lw $v0, 4($a2) | 1001 011 110 100 000 |
| lw $v1, 6($a2) | 1001 011 111 110 000 | |
| sll $v0, $v0, 2; | 1000 110 110 010 010 | |
| xor $v1, $v1, $v0; | 0001 111 110 111 010 | |
| lhi $t1, 00000000, 0; | 1011 101 00000000 0 | |
| lhi $t1, 11111111, 1; | 1011 101 11111111 1 | |
| sw $t1, 0($a0) | 1010 001 101 000 000 | |
| sw $v0, 4($a2) | 1010 011 110 100 000 | |
| sw $v1, 6($a2) | 1010 011 111 110 000 | |
| endif: | addi $a0, $a0, 2 | 1000 001 001 010 000 |
| j while; | 0110 000000000000 | |
| end_while: | nop | 0000 000 000 000 000 |
Tasks & Schedule
| Name | Tasks | 1st Week | 2nd Week | 3rd Week | 4th Week | 5th Week |
|---|---|---|---|---|---|---|
| Richard Sween |
| -------- | -------- -------- | -------- -------- -------- | -------- -------- | -------- -------- |
| Matthew Campassi |
| -------- | -------- -------- | -------- -------- -------- | -------- -------- | -------- -------- |
| Sean Bradford |
| -------- | -------- -------- | -------- -------- | -------- -------- | -------- -------- |
Planned Meetings
- Weekly on Thursday afternoons at 2pm
- Saturday afternoons, as needed
Meeting Notes
- Wednesday April 6
- Members Present: Richard, Sean, Matt
- Discussed data path design, selected Java programming language, set next meeting for Friday afternoon
- Sunday April 10
- Members Present: Richard, Sean, Matt
- Worked on data path, tweaked instruction set, started hazard detection and forwarding design
- Tuesday April 12
- Members Present: Richard, Sean, Matt
- Worked on data path, worked on hazard detection and forwarding units
- Thursday April 14
- Members Present: Richard, Sean, Matt
- Finished implementing data path, continued hazard detection and forwarding units
- Saturday April 16
- Members Present: Richard, Sean, Matt
- Tested data path, started implementation of hazard detection and forwarding units




