오래 못 할 짓 하지 않기
[ 컴퓨터 구조 ] 2. Datapath (1) 본문
한 CLK Cycle 내에 모든 명령어의 실행이 끝나도록 Datapath 설계
= Single Clock Cycle CPU
→
Fetch : 메모리에 있는 명령어를 CPU로 가져오는 것
Decode : CPU로 가져온 명령어를 해석하는 것
Execute : 해석한 명령어를 실행하는 것
1. CPU에 있는 프로그램 카운터(PC)값은 Instruction memory에 해당 address(명령어가 있는 주소)로 간다.
(load임?, 그럼 memory에 저장되나?)
2. 메모리의 해당 주소에서 Instruction을 받는다.
그 Instruction은 여러 필드로 나누어진다.
3. 레지스터에는 Instruction에서 받은 피연산자들이 들어간다.
4. ALU에서 Instruction을 사용하여 피연산자들에 대한 연산을 수행한다.
5. 결과는 Rd 레지스터에 저장한다 (R type일 때)
6. 다음 Instruction을 가리킬 수 있도록 PC값을 설정한다.
3. 레지스터를 읽고 분석한다.
4. 3에서 분석한 것을 바탕으로 Instruction을 사용하여 어떤 것을 수행할지 정한다.
※ 항상 첫 줄은 명령어를 Fetch한다.
위에서 외워둘 것 : OP = 000000이면, R type
Function = 100000이면 add operation
- 첫 줄
IR = Instruction Register : 가져온 명령어를 저장하는 register ,
메모리에서 읽은 명령어를 임시저장하는 CPU 내장 register
첫 6bit를 읽고, 이게 어느 명령어를 수행하는지 알 수 있음. - 두 번째 줄
R[rd] = R[rs] + R[rt] ;
rd번째 Regist에, [ rs번째 register 값 ] + [ rt 번째 register 값 ] 의 결괏값을 넣는다.
- 세 번째 줄
PC = PC +4;
다음 address로 넘어간다.
2번째 줄만 다름.
- 대신 2의 보수를 더하는 방식을 사용했다.
Load : 메모리에 있는 값을 CPU(rt Register)로 가져오는 연산
메모리 값 → rt Register
- 첫 줄
IR = Instruction Register : 가져온 명령어를 저장하는 register ,
메모리에서 읽온 명령어를 임시저장하는 CPU 내장 register
첫 6bit를 읽고, 이게 어느 명령어를 수행하는지 알 수 있음. - 두 번째 줄
Addr = R[rs] + SignExt(imm16);
메모리의 주소(인덱스)를 구하기 위해서 rs와 16비트 상수를 rs와 더하기 위해 32비트로 바꿈. - 세 번째 줄
R[rt] = Mem[ Addr ];
메모리로부터 주소 인덱스에 있는 데이터를 읽어내서 rt 에 넣는다.
Store : CPU에 있는 rt Register 값을 메모리로 전달
rt Register 값 → 메모리
두 번째 줄까지는 이전과 같음.
세 번째 줄에서는 rt값을 메모리로 보냄.
beq : rs - rt 를 수행한다.
- 두 번째 줄
Cond = R[rs] + ~R[rt] + 1;
rs - rt 연산을 한다. (2의 보수를 더하면서 연산) - 세 번째 줄
PC = Cond ? PC+4 ;
: PC + 4 + (SignExt(imm16) << 2)
Cond가 0이 아니면 PC +4를 하고
0이면 PC+4 + (SignExt(imm16) << 2)을 한다.
상수값 (Imm값)을 인덱스로 쓰는 경우에는 <<2 ( = *4 ) 를 해주어야 한다.
출처 : SW 중심대학
'2학년 2학기 > 컴퓨터 구조' 카테고리의 다른 글
[ 컴퓨터 구조 ] 6. (Multiple Cycle) Multiple Clock Cycle (0) | 2023.07.04 |
---|---|
[ 컴퓨터 구조 ] 5. Single Cycle 제어부 (0) | 2023.07.04 |
[ 컴퓨터 구조 ] 4. Datapath (3) - Instruction Datapath (0) | 2023.06.30 |
[ 컴퓨터 구조 ] 3. Datapath (2) - Simple Datapath (0) | 2023.06.28 |
[ 컴퓨터 구조 ] 1. RISC / MIPS (0) | 2023.06.27 |