[SOLVED] COA Lab 3-add a memory unit to single-Cycle CPU

30.00 $

Programming resource
Digital learning resource
Category:
✓ Practical programming resource
✓ Suitable for guided study and reference
✓ Tutor guidance available when needed

Description

Rate this product

Based on Lab 2 (simple single-cycle CPU), add a memory unit to implement a complete single-cycle CPU which can run R-type, I-type and jump instructions.

2. Requirement

  • Please use Icarus Verilog and GTKWave as your HDL simulator.
  • Please attach your names and student IDs as comment at the top of each file.
  • Top module’s name and IO port reference Lab2.

Reg_File[29] represents stack point. Initialize Reg_file[29] to 128 while others to

You may add control signals to Decoder, e.g.

  • Branch_o
  • Jump_o
  • MemRead_o
  • MemWrite_o
  • MemtoReg_o

3. Requirement description

Lw instruction  memwrite is 0, memread is 1, regwrite is 1

Reg[rt] ← Mem[rs+imm]

 

Sw instruction memwrite is 1, memread is 0

Mem[rs+imm] ← Reg[rt]

 

Branch instruction branch is 1,and decide branch or not by do AND with the zero signal from ALU.

PC = PC + 4 + (sign_Imm <<2)

Jump instruction jump is 1

PC = {PC[31:28], address<<2}

 

NOP instruction

No operation – do nothing

 

  1. Code (80 pts.)

(1) Basic Instruction: (50 pts.)

Lab2 instruction + mul, lw, sw, j, NOP

 

R-type

Op[31:26] Rs[25:21]- Rt[20:16] Rd[15:11] Shamt[10:6] Func[5:0]
 

I-type

     
Op[31:26] Rs[25:21]- Rt[20:16] Immediate[15:0]
 

Jump

     
Op[31:26]     Address[25:0]

 

instruction op[31:26]      
lw 6’b100011 Rs[25:21] Rt[20:16] Immediate[15:0]
sw 6’b101011 Rs[25:21] Rt[20:16] Immediate[15:0]
j 6’b000010   Address[25:0]

 

Mul is R-type instruction

0 Rs[25:21]- Rt[20:16] Rd[15:11] 0 6’b011000

 

NOP instruction

32 bits 0.

 

(2) Advance set 1: (10 pts.)

instruction op rs rt rd shamt func
jal 6’b000011     Address[25:0]  
jr 6’b000000 rs 0 0 0 6’b001000

 

Jal: jump and link

In MIPS, the 31st register is used to save return address for function call.

Reg[31] saves PC+4 and address for jump

 

Reg[31] = PC + 4

PC = {PC[31:28], address[25:0]<<2}

 

Jr: jump to the address in the register rs

PC = Reg[rs];

e.g.:In MIPS, return could be used by jr r31 to jump to return address from JAL

 

Example: when CPU executes function call,

 

0x00000000                  Fibonacci(4);

0x00000004                  Add r0, r0, r1

 

1

 

 3

0x00001000                  Fibonacci(){                                                                                         .                                     

2                            .    

0x00001020                  }

 

if you want to execute recursive function, you must use the stack point (Reg_File[29]).

First, store the register to memory and load back after function call has been finished. The second testbench CO_P3_test_data2.txt is the Fibonacci function. After it is done, r2 stores the final answer. Please refer to test2.txt.

 

(3) Advance set 2: (20 pts.)

ble(branch less equal than): if( rs <= rt ) then branch

6’b000110 rs rt offset

 

bnez(branch non equal zero): if( rs != 0 ) then branch (It is same as bne)

6’b000101 rs 0 offset

 

bltz(branch less than zero): if( rs < 0 ) then branch

6’b000001 rs 0 offset
 

li(load immediate) by) addi.

You don’t have to implement it, because it is similar to (and thus can be replaced
6’b001111 0 rt immediate

 

 

  1. Testbench

CO_P3_test_data1.txt tests the basic instructions (50 pts.)  CO_P3_test_data2.txt tests the advanced set 1 (10 pts.).

Please refer to test1.txt and test2.txt for details. The following MIPS code is bubble sort. Please transform the MIPS code to machine code, store the machine code in CO_P3_test_data3.txt and run it (for testing advance set 2 (20 pts.)).

You don’t have to submit machine code.

 

    addu

addi     addi     mul     j Jump bubble:

li      li

mul outer:     addi     subu

li  inner:     lw     lw

ble

 

$t0, $0, $0

$t1, $0, 10

$t2, $0, 13

$t3, $t1, $t1

$t0, 10

$t1, 4

$t4, $t0, $t1

$t6, $0, 8

$t0, $t4, $t6 $t1, 0

$t2, 4($t0)

$t3, 0($t0)

$t2,$t3,no_swap

    sw     sw

li no_swap:

addi     subu     bltz

j next_turn:

bnez

j

Jump:

subu Loop:

addu     beq

j

End:

$t2, 0($t0)

$t3, 4($t0) $t1, 1

$t5, $0, 4

$t0, $t0, $t5 $t0, next_turn inner

$t1, outer

End

$t2, $t2,     $t1

$t4, $t3,           $t2 $t1, $t2,             Loop bubble

 

 

  1. Reference architecture

This lab might be used extra signal to control. Please draw the architecture you designed on

Resource details

Understand the Task Before You Use the Resource

Review the requirements, identify the programming concepts involved, study the implementation and test your understanding with your own examples and modifications.