저번 포스터에서 전반적인 흐름을 살펴보았다.
이 Datapath를 구성하기 위해 각각을 자세하게 한 번 살펴보자.
우선 레지스터 32개 중 어떤 것을 읽을 지 식별하기 위해 Read Register1,2는 각각 5비트를 읽어 판단한다. 어디에 적을 지에 대한 Write Register도 5비트이며, 어떤 데이터를 적을 지에 대한 Write Data는 데이터가 32비트이기에 32비트이다.
Read Register 1,2에 대해 읽어 낸 데이터1,2는 각각 32비트이다.
이번에는 Register 내부 구조를 한 번 살펴보자.
우선 Read Register1의 5비트 값을 통해 32개 레지스터 중 하나를 선택하여 Read Data 32비트로 내보내게 된다. 동시에 Read Register2 또한 실행하여 32개 중 하나를 선택하여 내보낸다.
각 32비트로 구성된 레지스터 32개가 있고, 이들은 write enable port와 data 입력 port가 있다.
여기서 Write Register 5비트에 따라 어떤 레지스터에 적을 지 정하고 (하나만 1 나머지는 0) write enable를 통해 E에 1만 열고 0은 다 닫아버린다. 이렇게 열린 레지스터에 32bit Write Data를 D를 통해 저장하게 되는 것이다.
정리하자면 read register1,2로 어떤 데이터를 읽을 지를 수행하고, Write Register를 통해 정해진 레지스터에 값을 저장하는 것이다.
여기서 read동작은 clock과 관계없이 언제든지 일어날 수 있으며, write의 경우는 외부의 clock이 enalbe이 되었을 때(rising되었을 때) 특정 레지스터를 업데이트 하게 된다. 따라서 쓰기와 읽기가 동시에 일어날 수 있는 것이다!
이번에는 ALU를 살펴보자.
ALU는 Ainvert(1bit), Binvert(1bit), Operation(2bit) 총 4비트로 구성되어 있다.
자 이제 MIPS CPU를 만드는 데 필요한 구성요소들을 한 번에 살펴보자.
우선 Register File(read write)(write enable을 위한 write제어신호)이 있고, instruction을 저장하는 instruction memory(read only memory로 읽기만 하기에 따로 제어신호가 필요하지 않다.), data를 저장하는 data memory(data를 읽고 쓰는 두 가지 제어신호), 덧셈을 위한 Adder, 덧셈의 여러가지 연산을 수행하는 ALU(control신호로 더하기인지 빼기인지 등을 구분한다.), PC레지스터, 16bit상수값을 32비트로 만들어주는 sign extension회로 등으로 구성되어 있다.
여기서 Instruction Fetch는 e~g, R-format ALU operation은 a,b, beq instructino은 a,b,d,f,g가 필요하다.