P10: Register file

Published

April 3, 2026

Due
2026-04-08T23:59

Goals

  • Create a critical part of the ARM processor

Objective

For this problem, you will construct a register file for an ARM32 processor. It will contain 16 32-bit registers and will support the ISA we have discussed in class.

Requirements

You may create as many subcircuits as you find necessary. However, your main circuit should be in the reg_file subcircuit. If you need to rewire main because you have moved pins in reg_file around, that is fine, but DO NOT rearrange the pins in main.

  • The circuit will have the follow interface
name size direction
Rd 4 bits in
Rn 4 bits in
Rm 4 bits in
Rd_val 32 bits in
Rn_val 32 bits out
Rm_val 32 bits out
new_pc 32 bits in
we 1 bit in
clk 1 bit in
r0 32 bits out
r1 32 bits out
r2 32 bits out
r3 32 bits out
r4 32 bits out
r5 32 bits out
r6 32 bits out
r7 32 bits out
r8 32 bits out
r9 32 bits out
r10 32 bits out
r11 32 bits out
r12 32 bits out
r13 32 bits out
r14 32 bits out
r15 32 bits out
  • Rn_val and Rm_val should always show the values stored in Rn and Rm respectively
  • Registers r0 and r15 should always display the values of the associated registers (primarily for debugging)
  • On the rising edge of clk, if we is 1, Rd_val should be written into register Rd
  • On the rising edge of clk, r15 should store the value on new_pc (you can assume that Rd will never be 1111)
  • You are restricted to the contents of the Wiring, Gates, Plexers, and Memory libraries

Submission

Upload your .circ file to Gradescope.