Microarchitecture
마이크로 아키텍처
- ISA를 이해하고 명령어의 의도대로 실행되는 CPU 내부의 하드웨어 구조를 의미한다.
- 기능적인 동작, 최소 비용, 최소 전력, 최대 퍼포먼스 설계를 지향한다.
- 명령어를 처리하는 방법에 따라, 크게 두 가지의 설계 방법이 존재한다. (Single Cycle, Pipeline)
1. Single Cycle Microarchitecture
- 모든 종류의 명령어가 한 사이클에 처리될 수 있도록 설계된 구조이다.
- 직관적인 설계가 가능하며, 모든 경우에 CPI = 1.0 으로 유지된다.
- 복잡한 명령어도 한 사이클에 처리해야 하므로, 클럭 주기가 길어질 수 있다.
2. Pipeline Microarchitecture
- Task를 병렬로 처리하도록 설계된 구조이다.
- 대부분의(모든) 하드웨어 설계 시, 채택되는 방식이다.
- 마이크로 아키텍처는 크게 두 가지 요소로 구성되어 있다. (중요!)
1. Data Path
- 데이터가 전달되는 경로이다.
- Data Path Element*들의 집합을 의미하기도 하며, 프로세서의 대부분이 Data Path로 구성된다.
* Data Path Element
- 프로세서가 수행하는 작업(Data Processing, Data Hold)을 보조하는 소자들을 의미한다.
- Register File, ALU, MUX, Memory 등이 이에 해당된다.
2. Control
- Data Path를 경우에 따라 다르게 제어되도록 하는 장치이다.
- 경우에 따라 다르게 작동하므로써 CPU는 Programmable한 H/W 소자라고 할 수 있다.
- 레지스터 파일에 Read/Write 신호를 부여하고, MUX의 Select 신호, ALU의 연산 종류를 결정하는 신호들이 Control에 해당된다.
Combinational Logic (조합 회로)
- 조합 회로는 입력에 따른 출력이 곧바로 정해지는 회로이다.
- 위 그림의 소자들은 조합 회로를 구현하는 데 사용되는 대표적인 소자들이다.
- MUX는 S 신호에 의해 Y가 I0 혹은 I1 중 하나에 대응된다.
- ALU는 F 신호에 의해 피연산자 A, B에 수행될 연산의 종류가 정해진다. ALU는 다양한 산술/논리 연산을 수행할 수 있는 소자이다.
Sequential Logic (순차 회로)
- 순차 회로는 현재 입력에 더불어 이전의 입력까지 현재 출력값에 영향을 미치는 State Element*로 구성된 회로이다.
* State Element
- 이전의 값을 기억할 수 있는 소자로, 대표적으로 Latch와 Flip Flops가 있다.
- Latch는 Level-Sensitive한 소자이며, Flip Flops는 Edge-Triggered한 구조로 이루어져 있다.
- 입력 신호 중 하나인 Clock 신호는 소자의 값을 업데이트할 것을 지시한다.
- 값을 업데이트 하는 방법은 Clock 신호가 변화하는 양상에 따라 크게 두 가지로 분류된다.
1. Rising-Edge Triggered : 클럭 신호가 0에서 1로 변할 때 업데이트 된다. (그림에서의 업데이트 방식)
2. Falling-Edge Triggered : 클럭 신호가 1에서 0으로 변할 때 업데이트 된다.
- Write 신호 : 입력의 일종으로, Write = 1인 경우에만 D값에 의해 Q가 변하고, Write = 0인 경우에는 Q값(결과값)은 변하지 않는다. 즉, Write 신호는 결과값의 변화를 허용(Enable)하는 역할을 한다.
Clocking Methodology (클러킹 방법론)
- 일반적으로, 조합 회로는 두 State Element(Flip Flops) 사이에 위치하고 이는 한 클럭 주기에 실행되는 구조로 설계된다.
- Longest Delay(Critical Path) : 두 State Element과 가장 오랜 시간이 소요되는 조합 회로부분이 합쳐진 형태로, 이들은 클럭 사이클을 결정하는 요소가 된다.
MIPS CPU
- CPU는 Instruction Fetch와 Data Access를 수행하기 위해 메모리에 접근이 가능해야 한다.
- BUS : Wire들의 묶음을 의미하며, 데이터(신호)가 오가는 경로이다.
- Address Bus는 CPU가 Load할 데이터의 주소를 메인 메모리에게 알릴 때 이용하는 경로이므로, 단방향이다.
- Data Bus는 CPU와 메인 메모리가 데이터를 서로 주고받을 때 이용하는 경로이므로, 양방향이다.
※ Off-Chip 메모리(CPU 외부의 메모리)는 D-RAM 기반의 메모리로, 실제 CPU에서는 그림처럼 주소와 데이터를 위한 BUS가 따로 존재하지 않는다.
※ CPU 내부의 Cache 메모리는 그림처럼 용도에 따른 BUS를 구분해놓은 구조로 설계된다.
Verilog-HDL (VHDL) Modeling(베릴로그 모델링)
- VHDL은 널리 사용되는 H/W Description Language(H/W Programming Language) 중 하나이다.
- VHDL 코드 파일의 확장자는 .v 이다.
1. Behavioral Modeling
- 모듈이 수행하는 가장 세부적인 동작까지 직접 기술하는 방법이다.
- Main 함수의 길이가 길어지고, 가독성이 저하된다.
- C언에에서 OS가 지원하는 Function들만을 이용해 기술한 코드가 Behavioral Modeling의 한 예시가 될 수 있다.
2. Structural Modeling
- Instantiation을 통해 보다 단순화하여 표현한 모듈을 통해 체계적으로 동작을 기술하는 방법이다.
- C언어에서 프로그램을 Subsystem(User-Defined Function)으로 분할하여 기술한 코드가 Structural Modeling의 한 예시가 될 수 있다.
- 단, Leaf Function 레벨은 결국 Behavioral Modeling으로 설계된 구조이다. (즉, 추상화 개념과 일맥상통한다.)
- CPU는 mips.v 코드에, 메모리는 mem.v 코드에 동작을 기술한다 가정하자.
- CPU와 메모리를 한 데 엮은 하나의 시스템을 MIPS_System_tb.v 파일에 기술한다. (tb : Test Bench)
- 두 개의 VHDL 코드로 분할하여 구현함으로써, Structural Modeling 방식을 따른다.
- CPU는 외부의 Clock/Reset 입력에 따라 설계된 대로 동작하게 된다. 외부 신호는 Test Bench 상에서 가상으로 Generation하여 테스팅을 진행하게 된다.
mips.v
1. Fetch, PC : PC에 저장된 주솟값을 토대로 메모리에 위치한 명령어를 읽어온다.
2. Decoding : 읽어온 명령어를 해석한다.
3. Register File : 대부분의 명령어는 피연산자로 레지스터를 필요로 한다.
4. ALU : 산술/논리 연산을 수행하기 위한 소자이다.
5. Memory Access : 메모리에 접근하기 위한 로직이다.
이미지 출처 : 권건우 교수님 강의록