Datapath Elements(데이터 경로 요소)에는 Instruction memory, Program counter, Adder가 있다.
Instruction memory(명령어 메모리): 프로그램의 명령어를 저장하는 메모리로, 주소(입력)이 주어지면, 해당하는 명령어(출력)을 공급
Program counter: 현재 명령어의 주소를 보유하는 레지스터
Adder(덧셈기): 다음 명령어의 주소를 위해 PC를 증가시키는 논리 회로로, 산술 논리 장치(ALU)에서 수행되는 산술/비트 연산에서 구성됨
프로세서는 PC의 주소를 명령어 메모리(Instruction memory)에 입력함으로 해당 명령어(Instruction)를 가져온다.
다음 명령어를 실행하기 위해서는 PC를 증가시켜야하는데, 명령어 하나의 크기는 4바이트이고, 분기(branch)와 점프(jump) 명령어의 경우 PC는 해당 목표 주소(instruction)를 가리키게 된다.
R-type 명령어는 두 개의 레지스터를 읽어들이고, 레지스터 내용에 대해 ALU(산술논리장치) 연산을 수행하고 결과를 레지스터에 기록한다. (add, sub, and, or, slt ...)
Register file : 32개의 범용 레지스터들의 모음
두 개의 데이터 워드를 읽기 위해 레지스터 번호를 지정하는 두개의 입력(Read register 1 & 2)과 해당 레지스터의 값 (Read data 1 & 2)을 반환하는 두 개의 출력을 제공한다.
데이터 워드를 쓰기 위해서는 레지스터 번호를 지정하는 입력(Write register)과 쓰여질 데이터를 공급하는 입력(Write data)을 제공한다.
쓰기는 제어신호(RegWrite)에 의해 제어되고, 쓰기를 위해서는 이 신호가 활성화 되어야 하며, 읽기는 항상 Read register 입력에서 수행된다.
레지스터 입력은 5bit wide를 가지고, data IO buses는 각각 32bit wide를 가지고 있다.
ALU(산술 논리 장치) : 주어진 입력에 대해 다양한 산술 및 논리 연산을 수행하는 장치
32비트 피연산자 2개를 입력으로 받고, 32비트 결과를 출력으로 생성한다.
결과가 0이면 1비트 신호인 Zero를 출력한다.
4비트 제어 신호 ALU operation은 ALU가 수행할 연산을 결정한다. 각 비트에 따른 수행할 연산은 위 표와 같다.
load/store instruction은 16bit의 signed offset field를 base register에 더해서 메모리 주소를 계산한다.
예를 들어, lw $t1, offset_value($t2) , sw $t1, offset_value($t2)라고 할 때
$t2의 값은 레지스터 파일에서 읽어오고, $t2+offset_value는 ALU에서 수행한다.
lw의 경우 메모리에서 읽은 값이 레지스터 파일 ($t1)에 쓰여져야 하므로 write register, write data, regwrite 활성화가 설정되어야 한다.
sw의 경우 저장할 값을 레지스터 파일($t1)에서 읽어와야한다. 따라서 메모리 주소 계산을 위해 $t2도 읽어야 한다.
또, 16bit의 offset field를 32bit의 signed value로 바꿔줄 필요도 있다.
Sign extension unit(부호 확장 단위): 16bit의 signed value를 입력으로 받아서 32bit의 signed value를 출력
Data memory: 데이터가 읽혀지거나 저장되는 메모리 장치
쓰기와 읽기 각각을 위한 별도의 제어 신호인 MemWrite와 MemRead를 제공
메모리 읽기(lw)의 경우, 계산된 주소(Address)가 주어지고 해당 데이터(Read data)가 출력됨
메모리 쓰기(sw)의 경우, 쓰여질 데이터(Write data)가 주어지고 계산된 주소 또한 주어짐
Datapath에서의 명령어 실행을 설명하기전에, 아직 안다룬 내용을 다루고 넘어가자.
Mux는 두 개 이상의 입력 중 하나를 선택해서 하나의 출력을 만드는 논리 회로이다.
ALUSrc 신호는 ALU의 두 번째 입력으로 선택할 데이터를 제어할 것이고, MemtoReg는 레지스터 파일에 쓰일 데이터를 선택할 것이다.
R-type 명령어 실행의 예제로, add $t1, $t2, $t3 이 입력됐다고 가정하자. 그러면 ALUSrc와 MemtoReg는 0이 된다.
3가지 필드는 Registers의 Write register, Read register 1과 2에 들어가게 된다.
그리고 Read data 1과 Read data 2는 각각 $t2와 $t3의 데이터를 출력해준다.
출력된 두 데이터는 ALU의 입력이 되고, add 연산이므로 ALU operation은 add를 나타내는 비트가 들어간다.
MemtoReg가 0이므로 ALU의 출력값은 MemtoReg와 연결된 Mux를 지나 Write data에 들어가게 된다.
그 다음 I-type 명령어 실행의 예제로, lw $t1, 3($s1) 이 입력됐다고 가정하자. 그러면 ALUSrc와 MemtoReg는 1이 된다.
Registers의 Write register에는 $t1, Read register 1에는 $s1이 들어가고 $s1은 ALU의 첫 번째 입력이 된다.
16bit의 3은 sign-extend를 통해 32bit가 되고 ALU의 두 번째 입력이 된다.
ALU를 통해 출력된 $s1+3은 Data memory의 입력 중 Address가 되고,
이때 MemRead가 활성화되어 있으므로, Address의 데이터는 출력이 되어 MemtoReg와 연결된 Mux를 지나 Registers의 Write data에 들어가게 된다.
마지막으로 sw $t1, 3($s1)이 입력됐다고 가정하자. 그러면 ALUSrc는 1이고, Data memory의 출력이 없으므로 MemtoReg는 사용되지 않는다. (1 또는 0을 갖지만 의미가 없다.)
Registers의 Read register 1에는 $s1, Read registers 2에는 $t1이 들어간다. 쓸 것이 없으므로 Write register에는 아무 것도 들어가지 않는다.
lw때와 마찬가지로 ALU의 출력값은 $s1+3이 되고, Data memory의 입력 중 Address에 들어간다.
메모리에 쓰는 명령어이므로 MemWrite가 활성화되어 Write data에 $t1이 들어가고 입력받은 Address에 $t1이 저장된다.
MemRead가 활성화돼있진 않으므로 출력은 없다.
'학교강의필기장 > 컴퓨터구조' 카테고리의 다른 글
컴퓨터구조[12]: ALU Control Unit, Signal 정리 (0) | 2023.04.12 |
---|---|
컴퓨터구조[11]: Execution of Branch Instruction on the DataPath (0) | 2023.04.10 |
컴퓨터구조[9]: MIPS 구조 요약 (0) | 2023.04.09 |
컴퓨터구조[8]: address mode - PC-relative / Pseudo-direct (0) | 2023.04.09 |
컴퓨터구조[7]: 프로시저 프레임과 메모리 공간 (0) | 2023.04.09 |