※"컴퓨터 구조 및 설계 6판 MIPS EDITION" 책을 간단하게 정리한 내용의 글입니다.※
4.3 데이터패스 만들기
다음은 데이터패스 구성요소이다.
- Instruction memory
프로그램의 명령어를 저장하고 있다가 주소가 주어지면 명령어를 읽어서 보내 주는 메모리 유닛 - Program counter
현재 명령어의 주소가 주어지면 명령어를 읽어서 보내 주는 메모리 유닛 - Adder
ALU의 제어선을 항상 덧셈을 하도록 고정시키면 영구히 덧셈기가 된다.
다음 명령어를 가리키기 위해 4를 증가시킬 때 사용한다.
위는 명령어를 인출하고 프로그램 카운터를 증가시키는 데 사용하는 데이터패스의 일부분이다.
위는 레지스터 파일과 ALU이다.
레지스터 파일은 범용 레지스터 32개가 들어있는 것으로, 접근할 레지스터 번호를 지정함으로써 읽고 쓸 수 있는 레지스터들의 집합으로 구성된 상태 소자이다.
위의 레지스터 파일에서 Read Register는 2개가 있다. R타입의 경우 2곳에서 읽기 때문이다.
그리고 쓰기를 할 레지스터도 지정할 수 있다. 하지만 쓰기는 클럭 에지에서 유효해야하고, 쓰기 제어 신호를 인가하여 쓰기를 할 수 있다.
레지스터 번호 입력은 5비트(32개)이고, 데이터 선들은 32비트이다.
ALU는 32비트 입력 2개를 받아서 32비트 결과와 결과가 0이 아닌지를 나타내는 1비트 신호를 만든다.
lw나 sw 명령어 실행 시에 레지스터의 데이터와 명령어에 포함된 16비트 부호있는 변위 필드를 더하여 메모리 주소를 계산할 때 ALU를 사용한다.
위는 데이터 메모리 유닛과 부호확장 유닛이다.
데이터 메모리 유닛에는 MemWrite와 MemRead 제어선이 있는 것을 볼 수 있다.
위는 분기 명령어를 위한 데이터패스이다.
ALU를 사용하여 분기 조건을 계산하고 별도의 덧셈기를 사용하여 분기 목적지 주소를 계산한다. 분기 목적지 주소는 증가한 PC 값과 명령어의 하위 16비트(분기 변위)를 부호확장하고 왼쪽으로 2비트 자리이동한 값의 합이다.
(MIPS 명령어 집합에서 분기는 지연 분기(delayed branch)로, 분기 명령어 바로 다음에 나오는 명령어는 분기 조건이 참인지 거짓인지 상관없이 항상 실행된다.)
< 단일 데이터패스 만들기 >
앞서 각 명령어 종류에 필요한 데이터패스 구성 요소에 대해 알아보았다. 이제 이 데이터패스 구성 요소들을 하나로 묶고 제어를 추가해서 구현을 완성한다.
위는 메모리 명령어와 R형식 명령어를 위한 데이터패스이다.
R형식 명령어와 메모리 명령어를 위한 데이터패스를 위해서는 다음 두 가지를 고려해야 한다.
- ALU의 두 입력 값이 R형식 명령어는 둘 다 레지스터에서 오지만, 메모리 명령어는 하나는 16비트 변위 필드를 부호확장한 값이다.
- 목적지 레지스터에 저장되는 값은 R형식인 경우 ALU에서 오고, 메모리 명령어의 경우 메모리에서 온다.
이 두 가지를 해결하기 위해 멀티플렉서를 이용했다.
이제 다음 명령어를 선택하기 위한 데이터패스(위에서 본 분기 명령어를 위한 데이터패스)를 붙이고, 제어 유닛을 추가할 차례다.
위는 MIPS 구조를 위한 단순한 데이터패스로, 서로 다른 명령어 종류가 사용하는 구성 요소들을 합친 것이다.
'CS > 컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 4 프로세서 (4.6 파이프라이닝 개요) (0) | 2024.11.19 |
---|---|
[컴퓨터구조] 4 프로세서 (4.1 서론, 4.2 논리 설계 관례) (0) | 2024.11.11 |
[컴퓨터구조] 3 컴퓨터 연산 (3.5 부동 소수점 ~) (0) | 2024.11.05 |
[컴퓨터구조] 3 컴퓨터 연산 3.1 ~ 3.4 (1) | 2024.10.15 |
[컴퓨터구조] 2 명령어: 컴퓨터 언어 2.11 ~ (0) | 2024.10.15 |