Book/COMPUTER ORGANIZATION AND DESIGN RISC-V

5.9 Using a Finite-State Machine to Control a Simple cache

S0LL 2024. 12. 2. 17:18

1. Simple Cache 설계

 

캐시의 주요 특성:

 

구조: Direct-Mapped Cache.

쓰기 정책: Write-Back 및 Write-Allocate.

블록 크기: 4워드 (16 바이트 = 128비트).

캐시 크기: 16KiB, 총 1024블록.

주소 크기: 32-bit.

추가 필드:

Valid Bit: 블록의 유효 여부.

Dirty Bit: 블록이 수정되었는지 여부.

 

주소 필드 계산:

 

Cache Index: 10-bit.

 1024블록, 각 블록을 식별하는 인덱스.

Block Offset: 4-bit.

16Bytes. 블록 내부 데이터를 구분.

Tag: 32-10-4 = 18-bit.

 

프로세서와 캐시 간 신호:

 

1-bit Read/Write 신호.

1-bit Valid 신호: 캐시 작업 여부.

32-bit 주소, 32-bit 데이터(프로세서 ↔ 캐시).

1-bit Ready 신호: 캐시 작업 완료 여부.

 

캐시와 메모리 간 신호:

 

128-bit 데이터(메모리 ↔ 캐시).

32-bit 주소.

1-bit Ready 신호.

 

2. Finite-State Machine (FSM)와 제어

 

FSM은 복잡한 작업(여러 클록 사이클 요구)을 순서대로 처리하기 위해 사용된다.

 

FSM 구성 요소:

 

1. State Register: 현재 상태 저장.

2. Combinational Logic: 입력(Current State + Signals)에 따라 다음 상태와 출력을 결정.

 

FSM 설계 방식:

 

Moore Machine:

출력은 현재 상태에만 의존.

장점: 빠르고 구현이 간단.

Mealy Machine:

출력은 현재 상태와 입력에 모두 의존.

장점: 적은 상태 수로 설계 가능.

 

 

FSM 구현 구조 (그림 5.37):

상태 레지스터는 현재 상태를 저장.

결합 논리(Combinational Logic)는 다음 상태와 출력 신호를 결정.

제어 신호는 데이터 경로의 작업을 결정.

 

3. FSM for Simple Cache Controller

 

FSM은 간단한 캐시 컨트롤러의 동작을 제어하며, 4개의 상태로 구성된다.

 

상태 정의 (그림 5.38):

1. Idle:

CPU 요청 대기 상태.

유효한 Read/Write 요청이 들어오면 Compare Tag 상태로 전환.

2. Compare Tag:

Hit: 데이터 읽기/쓰기 완료 후 Idle로 복귀.

쓰기 요청인 경우 Dirty Bit 설정.

Miss:

Clean 블록: 바로 Allocate 상태로 전환.

Dirty 블록: 먼저 Write-Back 상태로 전환.

3. Write-Back:

Dirty 블록을 메모리에 기록.

완료 후 Allocate 상태로 전환.

4. Allocate:

요청된 데이터를 메모리에서 캐시로 로드.

완료 후 Compare Tag로 복귀.

 

4. 동작 과정

 

Miss 처리 과정:

 

1. Compare Tag 상태에서 Cache Miss 발생.

2. Dirty Bit 확인:

Dirty 블록이면 Write-Back으로 전환하여 메모리에 기록.

Clean 블록이면 바로 Allocate로 전환.

3. Allocate 상태에서 새 블록을 메모리에서 읽어 캐시에 저장.

4. 데이터 준비 후 Compare Tag로 복귀하여 작업 완료.

 

Write-Back과 Write-Allocate:

 

Write-Back 방식: Dirty Bit이 설정된 블록만 하위 메모리에 기록하여 쓰기 비용 절감.

Write-Allocate 방식: Miss 시 새 데이터가 캐시에 로드됨.

 

5. 성능 개선 옵션

 

FSM 모델은 단순하지만, 성능을 개선할 수 있는 방법도 있다:

1. 더 많은 상태 추가:

Compare Tag 상태를 분리하여 비교와 읽기/쓰기를 병렬로 처리.

2. Write Buffer 사용:

Dirty 블록을 버퍼에 저장하여 프로세서가 데이터를 기다리지 않도록 함.