실제 하드웨어를 한 번 설계해 보자!
PC가 있고, PC의 값을 주소로 하여 Instruction memory에 들어가게 된다.
Instruction memory에서 나오는 address가 정해지면 그 위치에 있는 데이터가 나오며, 이 데이터가 instruction(32비트)이 되는 것이다.
이 instruction의 32비트를 분석한다.
op(6비트) 5 5 5 (R : rs rt rd/ I : rs rt immd16)
이들이 각각 register file(32개의 register가 모여있는 하드웨어)에 저장된다.
여기서 regster1,2는 계산될 레지스터, regster3는 저장될 레지스터를 의미한다.
1,2를 통해 계산이 되고 이 data값이 다시 들어와서 쓰기가 되는데 register3에 저장되는 것이다.
만약 lw로 읽고 싶다면 rs와 immd16이 결합하여 계산이 되고 여기서 주소값이 나오며, 이를 통해 data memory에서 data 값을 읽어와서 쓰기가 진행된다.
sw의 경우는 rt값을 통해 data memory에 값을 저장하게 된다.

여기서 한 가지 궁금증이 생길 수 있다.
Q. 왜 instruction memory와 data memory를 구분했을까?
우리가 만들고자 하는 것은 1 clock cycle CPU이다. 즉 한 사이클에 모든 수행이 이루어져야 한다. 데이터를 읽어내거나 저장하는 lw나 sw의 경우 두 개를 구분해 놓지 않으면 절대 한 사이클 내에 동시적으로 이루어 질 수가 없게 된다. 따라서 이 둘을 구분하여 사용하는 것이다.
