안녕하세요. WH입니다.
이번 글은 데이터 패스 동작과 관련된 글입니다.
앞의 내용을 알아야만 이번 글은 이해를 하실 수 있습니다,
앞의 내용이 기억나지 않으시면 반드시 아래 글을 참조하시길 바랍니다.
2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정
2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세스 2- Load or Store 명령어, branch 명령어
2022.02.09 - [컴퓨터 구조론( MIPS )] - 프로세스 3 - ALU 제어와 주 제어 유닛 설계
R-type 명령어
위의 그림은 add $t1, $t2, $t3 와 같은 R-tye의 명령어의 데이터 패스에요. 순서대로 설명해볼게요
1. 명령어를 가져오고 PC 값을 증가 시킴.
2. 두 레지스터 $t2, $t3를 레지스터 파일로 부터 읽음. 이 단계에서 주 제어 유닛이 제어선의 값들을 계산.
3. ALU는 레지스터 파일에서 읽어 들인 값들에 대해 연산, funct 필드인 비트 5:0을 사용하여 ALU 제어 신호를 만듦
4. ALU의 결과 값이 레지스터 파일에 기록되는데, 목적지 레지스터 ($t1)는 명령어의 비트 15:11를 이용하여 선택.
이게 뭐하는 건가 싶겠지만 1 - 4번의 과정을 따라가며 빨간선을 따라가보시길 바랍니다. 위의 그림에서는 ALU 와 관련한 제어선만 빨간선으로 표시하였습니다만, 아래 제어 신호를 표시하니 해당 제어선이 언제 들어갈지 역시 파악해보시길 바랍니다.
lw 명령어
위 그림은 lw $t1. offset($t2) 명령어를 실행시킬 때 데이터 패스 동작 방식입니다. 천천히 같이 살펴 볼까요?
1. 명령어를 명령어 메모리에서 가져오고 PC값 증가
2. 레지스터 ($t2) 값을 레지스터 파일로 부터 읽음
3. ALU는 레지스터 파일에서 읽어 들인 값과 명령어 하위 16비트 (offset)를 부호확장한 값과의 합을 구함
4. 이 합을 데이터 메모리 접근을 위한 주소로 사용
5. 메모리 유닛에서 가져온 데이터를 레지스터 파일에 기록함. 목적지 레지스터 ($t1)는 20:16이 지정함
마찬 가지로 lw 명령어의 제어 신호입니다. 천천히 따라가면서 생각해보시길 바랍니다.
분기 명령어
beq $t1, $t2, offset 과 같은 분기 명령어의 데이터 패스입니다
1.명령어를 명령어 메모리에서 가져오고 PC 값을 증가시킴
2. 두 레지스터 $t1과 $t2를 레지스터 파일로 부터 읽음
3. ALU는 레지스터 파일에서 읽어 들인 값들에 대해 뺄셈. 명령어의 하위 16 비트를 부호확장한 후 2 비트 왼쪽 자리 이동 값에다 PC+4 값을 더함. 결과 값이 목적지 주소임.
4. 어떤 덧셈기의 결과를 PC에 저장할지 ALU의 Zero 출력을 이용하여 판단
여기까지가 단일 사이클 구현과 데이터 패스에 대해 알아보았습니다. 물론 점프 명령어 구현이나, 저장 명령어 구현 등과 같은 일이 있지만, 지금까지의 내용을 충분히 숙지하셨다면 어렵지 않게 만들어보실수 있을 겁니다. 중요한 점은 오늘날에는 단인 사이클 구현을 사용하지 않는다는 점입니다. 그렇지만 이론적으로 알고 계셔서 나쁠 것은 없다는 점 알려드리며, 이만 마무리 하겠습니다. 이상 WH였습니다
'컴퓨터 구조론( MIPS )' 카테고리의 다른 글
프로세서 6 - 파이프라인 데이터 패스 및 제어 (0) | 2022.02.10 |
---|---|
프로세서 5 - 파이프라이닝 개요 (0) | 2022.02.10 |
프로세서 3 - ALU 제어와 주 제어 유닛 설계 (0) | 2022.02.09 |
프로세서 2- Load or Store 명령어, branch 명령어 (0) | 2022.02.09 |
프로세서 1 - R-type 명령어 데이터 패스, 명령어 인출과정 (0) | 2022.02.09 |