MIPS의 Type
명령어 실행
- Program Counter: instruction Memory에서 Instruction Fetch
- Register Numbers: Register File, Read Registers에서 사용
- Instruction Class에 따라 다음을 이용
- ALU 사용
- Load/Store을 통해 Data Memoty에 접근
- PC상대주소법 사용
CPU의 전반적인 구조
여기서 충돌이 발생하는 지점에 MUX를 이용해 처리하면 된다.
이곳에 컨트롤까지 추가하면 설계가 완성된다.
# 기본적인 이론
[ 정보를 이진으로 Encode 하는법 ]
- Low Voltage = 0 / Higj Voltage = 1
- 1비트 당 하나의 wire
[ Combinational element ]
- 현재 주어진 입력 값에 따라 동작함
- 같은 input = 같은 output
- 예) MUX
[ State(sequential) element ]
- 상태를 저장
- 주로 clock과 사용
- 예) FF
Wire Control 이란?
clk의 posedge에 무조건 발생하는 것이 아니라 Wire Control이 1일때만 clk의 값을 업데이트함
Datapath
- CPU에서 Data와 Address들을 처리하는 애
Insctuction Fetch
기본적으로 PC의 주소를 통해 Instruction Memory에서 Instruction을 가져오는 방식이다.
야기서 MIPS의 타입 별로 살짝 바뀐다
Datapath for R-Type
rs, rt, rd의를 이용하여 명령어를 가져와 ALU로 연산을 수행한다.
그리고 수행된 result를 writeData에 저장하여 추후 store를 진행한다.
Load/Store Instruction
- Register operand를 읽고 16-bit offset으로 주소를 계산한다. (ALU + SignExtend)
- Load: 메모리 읽기 & 레지스터 업데이트
- Store: 메모리에 레지스터 값 저장
Datapath for Load/Store
예를 들어 lw $1, 100($5) 를 사용하자.
$5 + 100에서 데이터를 가져와 $1에 저장을 해야하는 상황.
Read Register1에 $5를 넣고, 100은 Sign Extend를 통해 32비트로 변환
ALU에서 $5와 100을 통해 100($5)주소를 Data Memory에 보낸다 (Address)
Data Memory에서 읽은 Read Data는 다시 Instruction Memory로 결과를 반환한다.
반대로, sw $3, 108($5)의 예를 보자.
$3과 $5 모두 읽어야 하기에 Read Register1,2에 넣는다.
108은 lw와 똑같이 32비트로 Extend 시킨다.
읽어올 108($5)는 ALU를 통해 계간되어 Data Memory에 Addess로 들어가고
$3에 저장하기에 Write Data로 들어가서 저장된다.
Branch Instruction
- Register Operand들 읽고 값들 비교 (ALU) (뺄셈 및 Zero output 체크)
- Target Address 계산
1. SighExtend 후 2-bit 만큼 shift Left
2. PC + 4과 ADD
R-Type/Load/Store DataPath
지금까지의 로직을 하나로 합치자.
ALU Control
- ALU에서 어떤 연산을 할지 정해주는 코드
- 2bit ALUop는 opcode를 통해 ALU Control 생성
funct의 경우 lw, sw beq의 경우 연산이 정해져있어 없지만, R-type의 경우 여러 연산이 가능하므로 이를 구분 짓는다.
정리하자면,
ALUop = opcode를 통해 연산 파악
funct = 같은 ALUop에서의 연산 결정
ALUcontrol = funct에 따른 연산 의미
Main Control Unit
Control 신호는 Instruction으로 부터 생성된다.
- rs: 항상 읽기만
- rt: load를 제외하고 읽기만
Datapath with Control
'🏫CS > 컴퓨터구조' 카테고리의 다른 글
[컴구] 메모리 계층구조 (0) | 2023.12.13 |
---|---|
[컴구] 프로세서 - 2 (0) | 2023.11.21 |
[컴구] Multiplication and Division (0) | 2023.10.21 |
[컴구] 컴퓨터 추상화와 기술 (0) | 2023.10.21 |
[컴구] 연산자와 피연산자 (0) | 2023.10.11 |