하바드 아키텍처: 실시간 임베디드 시스템의 메모리 분리 구조
하바드 아키텍처의 명령어·데이터 메모리 분리 방식과 Cortex-M, DSP, Modified Harvard의 실무 적용을 정리한다.
2026-08-14 · 최초 발행 2026-01-02
실시간 제약은 메모리 접근 경로에서 먼저 드러난다
명령어를 가져오는 동안 데이터 접근이 막히면, 실시간 처리에서 필요한 예측 가능한 실행 시간을 확보하기 어렵다. Harvard 아키텍처는 명령어 메모리와 데이터 메모리를 물리적으로 나누고 각각에 동시에 접근하는 방식으로 이 병목을 줄인다.
이 구조는 DSP(Digital Signal Processor), ARM Cortex-M 마이크로컨트롤러, SHARC 프로세서처럼 응답 시간이 중요한 환경에서 활용된다. 현대 프로세서에서는 캐시를 분리하고 메인 메모리는 통합하는 Modified Harvard 방식으로 발전해, Von Neumann 구조의 유연성과 Harvard 구조의 병렬 접근을 함께 취한다.
임베디드 시스템은 보통 세 가지 조건을 동시에 안고 있다. 자동차와 의료기기처럼 데드라인을 반드시 지켜야 하는 Hard Real-Time, 위반하면 성능이 떨어지는 Soft Real-Time, 그리고 예측 가능한 실행 시간이다. 메모리는 KB~MB 수준으로 제한될 수 있고, 저전력과 작은 칩 면적도 요구된다. 특정 작업에 맞춘 고정 알고리즘을 오래 사용하는 경우도 많다.
이 조건에서는 명령어를 ROM/Flash에, 데이터를 RAM에 두는 분리가 자연스럽다. 명령어 영역은 읽기 전용으로, 데이터 영역은 읽기와 쓰기 용도로 운용하며, 동시 접근으로 성능을 높이고 전력 효율을 확보한다.
Cortex-M에서 분리된 버스가 맡는 역할
Cortex-M0/M0+는 초저전력·초소형 32비트 RISC 계열로 IoT와 웨어러블 기기에 쓰인다. Cortex-M3/M4는 산업 제어와 모터 드라이브를 겨냥하며, M4에는 DSP 명령어가 포함된다. Cortex-M7은 고성능과 Double Precision FPU를 제공해 자동차와 로보틱스에 사용된다.
Cortex-M의 Harvard 구조는 I-Code, D-Code, System 버스로 나뉜다. I-Code 버스는 32비트 폭으로 Flash 메모리에 접근하고 프리페치 버퍼를 사용한다. D-Code와 System 버스는 SRAM에 접근하며, 32비트 폭에서 DMA와 공유한다. System 버스는 주변장치와 연결된다.
명령어 인출과 데이터 읽기·쓰기가 겹치는 상황을 다음과 같이 볼 수 있다.
사이클 1: CPU가 Flash에서 명령어 인출 (I-Code)
+ CPU가 SRAM에서 데이터 읽기 (D-Code)
사이클 2: 다음 명령어 인출 + 데이터 쓰기
이 분리는 Von Neumann 구조 대비 2배 메모리 대역폭을 제공하며, 0 wait state가 이상적인 조건이다. 실시간 응답 보장에도 유리하다.
DSP는 명령어·샘플·계수를 함께 읽는다
DSP는 오디오, 비디오, 통신 신호를 실시간으로 필터링하고 FFT, FIR, IIR 알고리즘을 수행한다. 연속적으로 들어오는 샘플을 버퍼로 처리해야 하므로 낮은 지연 시간이 필요하다.
신호 처리에서는 MAC(Multiply-Accumulate) 연산이 핵심이다. 한 사이클에 곱셈과 덧셈을 수행하는 방식이며, 다음과 같은 연산으로 나타낼 수 있다.
result += data[i] * coeff[i]- 한 사이클에 곱셈 + 덧셈
- 신호 처리의 핵심
FIR 필터에서는 데이터와 계수를 읽으면서 누적 연산을 수행한다.
// FIR 필터 예시
for (int i = 0; i < N; i++) {
sum += data[i] * coeff[i];
// data 읽기 (데이터 메모리)
// coeff 읽기 (프로그램 메모리 또는 별도 데이터 메모리)
// 동시 접근 필요!
}
Harvard DSP는 프로그램 코드를 명령어 메모리에, 데이터 샘플을 X 메모리에, 계수(Coefficients)를 Y 메모리에 둘 수 있다. 한 사이클에 3개 읽기가 가능하므로 명령어 인출, 샘플 읽기, 계수 읽기를 MAC 연산에 맞춰 병렬로 처리할 수 있다. Texas Instruments TMS320 시리즈, Analog Devices SHARC, Qualcomm Hexagon이 대표 DSP로 언급된다.
캐시는 분리하고 메인 메모리는 통합하는 Modified Harvard
순수 Harvard 구조에서는 명령어 메모리가 읽기 전용이어서 동적 코드 생성과 JIT 컴파일이 어렵다. 명령어 메모리가 남아도 데이터 용도로 사용할 수 없고, 데이터 메모리가 부족해도 명령어 영역을 활용할 수 없다. 자가 수정 코드(Self-Modifying Code)도 불가능하며 프로그램 로딩은 복잡해진다.
Modified Harvard는 이 제약을 캐시와 메인 메모리의 역할을 분리해 다룬다. L1 I-Cache와 L1 D-Cache는 각각 명령어와 데이터를 처리하고, L2/L3는 통합 캐시로 구성한다. 메인 메모리는 Von Neumann 구조처럼 단일 메모리로 두어 명령어와 데이터가 공유하며 유연하게 할당된다.
캐시 레벨의 병렬 접근은 Harvard의 성능을, 메인 메모리 통합은 Von Neumann의 유연성을 가져온다. Intel x86(Core i7/i9), AMD Ryzen, Apple M1/M2, ARM Cortex-A가 이 방식을 사용하는 현대 프로세서로 제시된다.
지연을 예측해야 하는 장비에서의 선택
자동차 ECU에서는 연료 분사 타이밍과 점화 시기를 제어하며 밀리초 단위 정밀성이 필요하다. 제어 알고리즘은 Flash에, 센서 데이터는 RAM에 두고 동시 읽기를 활용해 빠르게 응답한다.
디지털 믹서는 실시간 이펙트와 다중 채널 믹싱을 낮은 레이턴시(< 10ms)로 처리해야 한다. Harvard DSP는 오디오 샘플을 X 메모리에, 필터 계수를 Y 메모리에 두고 한 사이클 MAC 연산을 수행한다.
LTE, 5G 기지국은 OFDM 처리와 실시간 FFT를 수행한다. SHARC DSP의 듀얼 포트 메모리, 초고속 MAC, Harvard 구조가 이 처리에 사용된다.
심전도(ECG) 모니터는 실시간 신호 필터링, 부정맥 탐지, 즉각적인 알람을 요구한다. ARM Cortex-M과 DSP 조합에서는 CMSIS-DSP 신호 처리 라이브러리를 사용하고 Harvard 구조를 활용해 저전력 설계를 적용한다.
범용성과 실시간성 사이의 구조 선택
Von Neumann 구조는 유연한 프로그램 로딩, 동적 메모리 할당, 다양한 소프트웨어를 다루는 PC와 서버에 적합하다. Pure Harvard는 고정된 알고리즘, 저전력 요구, 실시간 제약이 강한 임베디드 시스템에 맞는다. 스마트폰처럼 실시간성과 범용성을 함께 요구하는 고성능 임베디드 환경은 Modified Harvard가 균형점이 된다.
| 항목 | Von Neumann | Pure Harvard | Modified Harvard |
|---|---|---|---|
| 메모리 대역폭 | 낮음 | 높음 | 높음 (캐시) |
| 유연성 | 높음 | 낮음 | 높음 |
| 전력 소비 | 중간 | 낮음 | 중간 |
| 칩 면적 | 작음 | 큼 | 중간 |
| 실시간성 | 낮음 | 높음 | 높음 |
| 주 사용처 | PC, 서버 | DSP, MCU | 스마트폰, SoC |
IoT와 Edge AI로 이어지는 메모리 분리
TinyML은 마이크로컨트롤러에서 음성 인식과 이미지 분류를 수행하며, Harvard 구조를 이용해 효율적인 추론을 지원한다. Ultra-Low Power 환경에서는 배터리 수명 극대화와 항상 켜진 센서가 요구되며 Harvard의 전력 효율이 관련된다.
RISC-V 임베디드 영역에서는 Harvard 구조 지원과 맞춤형 확장이 가능하고, 임베디드 시장 확대가 언급된다. 뉴로모픽 칩에서는 시냅스 가중치를 계수 메모리로, 뉴런 상태를 데이터 메모리로 볼 수 있어 Harvard 구조를 활용할 수 있다.