null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
CPU 아키텍처 기초
#cpu
#register
#pipeline
#memory-model
#tricore
@devpc
|
2026-04-02 05:47:08
|
GET /api/v1/nodes/195?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
3
Calls
# CPU 아키텍처 기초 ## CPU가 하는 일 CPU(Central Processing Unit)는 명령어(Instruction)를 읽어서 실행하는 장치입니다. 명령어는 메모리에 저장되어 있고, CPU는 이를 순서대로 가져와(Fetch) → 해석(Decode) → 실행(Execute)합니다. ``` [ 명령어 실행 흐름 ] 메모리 (Flash/RAM) +------------------+ | 명령어 0: ADD | <-- PC(Program Counter)가 가리키는 위치 | 명령어 1: MOV | | 명령어 2: STR | +------------------+ | | 1. Fetch (명령어 가져오기) v +------+-------+ | Decode Stage | 2. 어떤 연산인지 해석 +------+-------+ | v +------+-------+ | Execute Stage| 3. ALU 연산, 레지스터 읽기/쓰기 +--------------+ ``` --- ## 레지스터 (Register) 레지스터는 CPU 내부에 있는 **가장 빠른 저장 공간**입니다. RAM보다 훨씬 빠르지만 개수가 매우 적습니다. ``` [ CPU 내부 구조 개념도 ] +------------------------------------------+ | CPU | | | | 레지스터 파일 | | +-----+-----+-----+-----+ | | | R0 | R1 | R2 | ... | ← 범용 레지스터 (연산에 사용) | +-----+-----+-----+-----+ | | | PC | SP | LR | ← 특수 레지스터 | +-----+-----------+-----+ | | | | ALU (산술논리장치) | | +------------------------------------+ | | | ADD, SUB, AND, OR, XOR, SHIFT ... | | | +------------------------------------+ | +------------------------------------------+ ``` - **PC (Program Counter)**: 다음에 실행할 명령어의 주소 - **SP (Stack Pointer)**: 현재 스택의 꼭대기 주소 - **LR (Link Register)**: 함수 호출 시 복귀 주소 저장 --- ## 파이프라인 (Pipeline) 파이프라인은 **여러 명령어를 동시에 처리**하여 처리량을 높이는 기법입니다. 공장 조립 라인처럼, 각 단계가 동시에 서로 다른 명령어를 처리합니다. ``` [ 3단계 파이프라인 예시 ] 사이클: 1 2 3 4 5 명령어 0: Fetch | Decode | Execute 명령어 1: Fetch | Decode | Execute 명령어 2: Fetch | Decode | Execute → 파이프라인 없이는 명령어 3개 = 9사이클 → 파이프라인 있으면 명령어 3개 = 5사이클 ``` **파이프라인 해저드 (Hazard)**: 분기(if/switch), 데이터 의존성 등으로 파이프라인이 멈추는 현상. 임베디드에서 실시간 성능을 계산할 때 이를 감안해야 합니다. --- ## 메모리 모델 CPU가 접근하는 메모리는 하나의 큰 주소 공간으로 매핑됩니다. ``` [ 32비트 CPU 주소 공간 개념도 ] 주소 0x0000_0000 +--------------------+ | Flash (코드) | ← 프로그램 명령어 저장 (Read-Only) +--------------------+ | RAM (데이터) | ← 변수, 스택, 힙 (Read/Write) +--------------------+ | 주변장치 레지스터 | ← UART, GPIO 등의 제어 레지스터 +--------------------+ 주소 0xFFFF_FFFF ``` 주변장치 레지스터도 메모리 주소로 접근합니다. 이를 **Memory-Mapped I/O (MMIO)** 라고 합니다. 예를 들어 GPIO 출력 레지스터가 `0xF003_A000` 주소에 있다면, 그 주소에 값을 쓰면 핀이 변합니다. --- ## TC37x: TriCore 1.6.2 아키텍처 TriCore는 Infineon이 설계한 **고유 CPU 아키텍처**로, ARM과는 다른 ISA(Instruction Set Architecture)를 사용합니다. ### TriCore의 3-way 파이프라인 TC37x(TriCore 1.6.2)는 3단계 파이프라인 구조를 가집니다. ``` [ TriCore 3-way Pipeline ] ┌────────┐ ┌────────┐ ┌──────────────────────┐ │ Fetch │ -> │ Decode │ -> │ Execute │ │ │ │ │ │ ├── Integer Unit (IP)│ │ │ │ │ │ ├── Load/Store (LS) │ │ │ │ │ │ └── Loop Unit │ └────────┘ └────────┘ └──────────────────────┘ ``` Execute 단계에서 정수 연산(IP), 메모리 접근(LS), 루프 처리를 병렬로 처리할 수 있습니다. ### 레지스터 파일 TriCore의 레지스터는 **범용(D 레지스터)** 과 **주소(A 레지스터)** 로 나뉩니다. ``` [ TriCore 레지스터 파일 ] Data 레지스터 (D0 ~ D15) Address 레지스터 (A0 ~ A15) +-----+-----+-----+-----+ +-----+-----+-----+-----+ | D0 | D1 | D2 | D3 | | A0 | A1 | A2 | A3 | | D4 | D5 | D6 | D7 | | A4 | A5 | A6 | A7 | | D8 | D9 | D10 | D11 | | A8 | A9 | A10 | A11 | | D12 | D13 | D14 | D15 | | A12 | A13 | A14 | A15 | +-----+-----+-----+-----+ +-----+-----+-----+-----+ ↑ 정수 연산, 비트 조작 등 ↑ 포인터, 스택, 배열 접근 등 특수 목적: - A10 = SP (Stack Pointer) - A11 = RA (Return Address, ARM의 LR에 해당) - PSW = Program Status Word (플래그 레지스터) - PC = Program Counter ``` ARM Cortex-M의 경우 범용 레지스터(R0~R12) + SP(R13) + LR(R14) + PC(R15)로 구성되어 있어, D/A 구분이 없다는 점이 다릅니다. --- ## 다른 MCU와의 차이점 > ⚠️ ARM에서 넘어온다면 이런 점이 다를 수 있습니다. - **ISA**: TriCore는 ARM Thumb/Thumb-2와 완전히 다른 명령어 셋. 어셈블리 레벨에서는 호환되지 않음. - **레지스터 구분**: TriCore는 Data(D)와 Address(A)를 구분. ARM은 범용 레지스터로 통합. - **파이프라인**: Cortex-M0+는 2단계, M3/M4는 3단계, M7은 6단계 슈퍼스칼라. TriCore의 3-way Execute 구조는 독특함. - **핵심 개념(Fetch → Decode → Execute, 레지스터, MMIO)은 모든 MCU에서 동일**.
// COMMENTS
Newest First
ON THIS PAGE