ARM 아키텍처

임베디드 기기에 많이 사용되는 RISC 프로세서
(ARM 아키텍쳐에서 넘어옴)

ARM 아키텍처(ARM architecture, 과거 명칭: Advanced RISC Machine, 최초 명칭: Acorn RISC Machine)는 임베디드 기기에 많이 사용되는 RISC 프로세서이다. 1983년 컴퓨터과학자 소피 윌슨(Sophie Wilson)(이 당시에는 이름이 로저 윌슨(Roger Wilson)이었으나 1994년 성전환 수술을 받아 개명했다.)과 스티브 퍼버(Steve Furber)를 주축으로 개발을 진행했다. 저전력을 사용하도록 설계하여 ARM CPU는 모바일 시장 및 싱글 보드 컴퓨터로 불리는 개인용 컴퓨터에서 뚜렷한 강세를 보인다.

  • 1990년 11월에 애플VLSI의 조인트 벤처 형식으로 ARM(Advanced RISC Machines Ltd.)가 생김.
ARM 아키텍처
설계 기업 및 설계자ARM 홀딩스
비트32비트, 64비트
발표1985년
구조RISC
유형레지스터-레지스트링
분기조건 코드, 비교, 분기
64/32비트 아키텍처
발표2011년(13년 전)(2011)
버전Armv8-A, Armv8.1-A, Armv8.2-A, Armv8.3-A, Armv8.4-A, Armv8.5-A, Armv8.6-A
인코딩AArch64/A64 및 AArch32/A32는 32비트 명령어를 사용하며, T32(Thumb-2)는 혼재된 16비트, 32비트 명령어를 사용함. ARMv7 사용자 공간 호환성.[1]
엔디언Bi (기본값은 리틀/little임)
확장SVE;SVE2;TME; 모두 필수 요건: Thumb-2, NEON, VFPv4-D16, VFPv4 구식: Jazelle
레지스터
범용 목적31 × 64비트 정수 레지스터[1]
부동소수점32 × 128비트 레지스터[1] (스칼라 32, 64비트 FP 또는 SIMD FP 또는 정수용) 또는 암호화용
32비트 아키텍처 (Cortex)
버전Armv8-R, Armv8-M, Armv8.1-M, Armv7-A, Armv7-R, Armv7E-M, Armv7-M, Armv6-M
인코딩32비트 (예외: Thumb-2 확장은 혼재된 16비트, 32비트 명령어 사용)
엔디언Bi (기본값은 리틀/little임) Cortex-M은 고정이며 중도 변경 불가.
확장Thumb-2, 네온, Jazelle, DSP, Saturated, FPv4-SP, FPv5, 헬륨
레지스터
범용 목적15 × 32비트 정수 레지스터. R14(링크 레지스터)를 포함하지만 R15(PC)를 포함하지는 않음
부동소수점최대 32 × 64비트 레지스터,[2] SIMD/부동 소수점 (선택사항)
32비트 아키텍처 (레거시)
버전ARMv6, ARMv5, ARMv4T, ARMv3, ARMv2
인코딩32비트 (예외: Thumb 확장은 혼재된 16비트, 32비트 명령어를 사용함)
엔디언Bi (기본값은 리틀/little임) - ARMv3 이상 기준
확장ARM Thumb, Jazelle
레지스터
범용 목적15 × 32비트 정수 레지스터. R14(링크 레지스터)를 포함하지만 R15(PC 기준. 구형에 26비트 어드레싱 사용)를 포함하지는 않음

계보 편집

  • ARMv4 아키텍처는 32비트 주소 영역에서 32비트 ISA(Instruction Set Architecture) 동작이 가능하다. 16비트 Thumb 명령어 셋을 탑재한 ARMv4T 아키텍처는 32비트 코드의 이점을 그대로 살리고, 메모리 공간을 35% 이상 절약할 수 있도록 해주었다.
  • ARMv5TE(1999년) 아키텍처는 개선된 thumb 아키텍처와 ‘Enhanced’ DSP 명령어 셋을 ARM ISA에 추가하였다. 이러한 Thumb의 변화에는 소수의 명령어 추가와 함께 ARM/Thumb 인터워킹(interworking)의 개선, 컴파일 성능의 대폭적인 향상, ARM/Thumb 루틴의 혼합 사용, 코드 크기와 성능에 대한 균형도 포함되어 있다. 또한 ‘Enhanced’ DSP 명령어들은 복잡한 수치연산에서 70%의 성능 개선을 보여주었다.
  • ARMv5TEJ(2000년) 아키텍처에는 Jazelle(자바 하드웨어 가속기) 확장명령어가 추가되었으며, 이로써 자바 가속 기술을 탑재한 아키텍처가 탄생하게 된다. ARMv5TJE 아키텍처는 Jazelle의 탄생함에 따라 가속 기술을 사용하지 않은 JVM(Java Virtual Machine)보다 속도 면에서 8배가 향상되었으며, 소비전력의 측면에서도 80%를 줄일 수 있게 된다.
  • ARMv6(2001년) 아키텍처가 발표되면서 여러 방면에서 기능 개선이 이루어졌다. 특히 메모리 시스템, 예외 처리의 개선, 멀티프로세싱 환경을 위한 더 많은 지원 등이 이에 해당한다. 이것 이외도 ARMv6 아키텍처에는 SIMD(Single Instruction Multiple Data) 소프트웨어 실행을 지원하는 미디어 명령이 포함되어 있으며, SIMD 명령들은 오디오 및 비디오 코덱을 포함하는 응용 프로그램들의 사용 확대를 위해 최적화되었다.
  • ARM1136J(2002년) (F)-8 코어. 스트롱암 CPU는 DEC(Digital Equipment Corporation)에 의해서 ARM과 함께 개발되었다. 이것이 최초의 modified-Harvard 아키텍처(명령어 캐시와 데이터 캐시를 분리해서 사용)를 채용한 제품이며, modified-Harvard 아키텍처로 ARM의 쓰기 처리 능력의 고속화가 가능하게 되었다. 스트롱암의 주요 특징 중에는 5단 파이프라인의 채용, 64비트 곱셈 및 일부 곱셈 기능을 제외한 모든 일반 명령어들의 싱글 사이클 처리 등이 포함되어 있다.

ARM 코어 편집

계열 아키텍처 버전 코어 기능 캐시 (명령어/데이터)/MMU 일반적인 MIPS @ MHz
ARM1 ARMv1 ARM1 없음
ARM2 ARMv2 ARM2 곱하기 명령 (MUL) 추가 없음 4 MIPS @ 8 MHz
0.33 DMIPS/MHz
ARMv2a ARM250 MEMC (MMU) 구현, 그래픽과 IO 프로세스. 아키텍처 2a:SWP와 SWPB 등의 스왑 명령추가. 없음, MEMC1a 7 MIPS @ 12 MHz
ARM3 ARMv2a ARM2a ARM에 프로세스 캐시 최초 사용 4K 통합 12 MIPS @ 25 MHz
0.50 DMIPS/MHz
ARM6 ARMv3 ARM60 v3 아키텍처, 최초로 32 비트 메모리 지원(26 비트에 반대된) 없음 10 MIPS @ 12 MHz
ARM600 캐시와 코프로세스 버스(FPA10 부동소수점 모듈). 4K 통합 28 MIPS @ 33 MHz
ARM610 캐시, 코프로세서 버스 없음. 4K 통합 17 MIPS @ 20 MHz
0.65 DMIPS/MHz
ARM7 ARMv3 ARM700 8 KB 통합 40 MHz
ARM710 8KB 통합 40 MHz
ARM710a 8 KB 통합 40 MHz
0.68 DMIPS/MHz
ARM7100 SoC. 8 KB 통합 18 MHz
ARM7500 SoC. 4 KB 통합 40 MHz
ARM7500FE SoC. "FE" FPA와 EDO 메모리 컨트롤러 추가 4 KB 통합 56 MHz
0.73 DMIPS/MHz
ARM7TDMI ARMv4T ARM7TDMI(-S) 3-단계 파이프라인, Thumb 없음 15 MIPS @ 16.8 MHz
63 DMIPS @ 70 MHz
ARM710T 8 KB 통합, MMU 36 MIPS @ 40 MHz
ARM720T 8 KB 통합, MMU 60 MIPS @ 59.8 MHz
ARM740T MPU
ARMv5TEJ ARM7EJ-S Jazelle DBX, 향상된 DSP 명령, 5-단계 파이프라인 없음
StrongARM ARMv4 SA-110 16 KB/16 KB, MMU 203 MHz
1.0 DMIPS/MHz
SA-1110 16 KB/16 KB, MMU 233 MHz
ARM8 ARMv4 ARM810[3] 5-단계 파이프라인, 고정된 예측 분기, 이중 대역폭 메모리 8 KB 통합, MMU 84 MIPS @ 72 MHz
1.16 DMIPS/MHz
ARM9TDMI ARMv4T ARM9TDMI 5-단계 파이프라인 없음
ARM920T 16 KB/16 KB, MMU 200 MIPS @ 180 MHz
ARM922T 8 KB/8 KB, MMU
ARM940T 4 KB/4 KB, MPU
ARM9E ARMv5TE ARM946E-S 향상된 DSP 명령 가변적, 메모리 밀착형 MPU
ARM966E-S 캐시없음, TCMs
ARM968E-S 캐시없음, TCMs
ARMv5TEJ ARM926EJ-S Jazelle DBX, 향상된 DSP 명령 가변적, TCMs, MMU 220 MIPS @ 200 MHz,
ARMv5TE ARM996HS Clockless 프로세서, 향상된 DSP 명령 캐시없음, TCMs, MPU
ARM10E ARMv5TE ARM1020E VFP, 6-단계 파이프라인, 향상된 DSP 명령 32 KB/32 KB, MMU
ARM1022E VFP 16 KB/16 KB, MMU
ARMv5TEJ ARM1026EJ-S Jazelle DBX, 향상된 DSP 명령 가변적, MMU or MPU
XScale ARMv5TE 80200/IOP310/IOP315 I/O 프로세서, 향상된 DSP 명령
80219 400/600 MHz
IOP321 600 BogoMips @ 600 MHz
IOP33x
IOP34x 1-2 core, RAID Acceleration 32K/32K L1, 512K L2, MMU
PXA210/PXA250 응용분야 프로세서, 7-단계 파이프라인
PXA255 32KB/32KB, MMU 400 BogoMips @ 400 MHz
PXA26x default 400 MHz, up to 624 MHz
PXA27x 응용분야 프로세서 32 KiB/32 Kb, MMU 800 MIPS @ 624 MHz
PXA800(E)F
Monahans 1000 MIPS @ 1.25 GHz
PXA900
IXC1100 Control Plane 프로세서
IXP2400/IXP2800
IXP2850
IXP2325/IXP2350
IXP42x
IXP460/IXP465
ARM11 ARMv6 ARM1136J(F)-S SIMD, Jazelle DBX, VFP, 8-단계 파이프라인 가변적, MMU 740 @ 532-665 MHz (i.MX31 SoC), 400-528 MHz
ARMv6T2 ARM1156T2(F)-S SIMD, Thumb-2, VFP, 9-단계 파이프라인 가변적, MPU
ARMv6KZ ARM1176JZ(F)-S SIMD, Jazelle DBX, VFP 가변적, MMU+TrustZone
ARMv6K ARM11 MPCore 1-4 코어 SMP, SIMD, Jazelle DBX, VFP 가변적, MMU
Cortex ARMv7-A Cortex-A8 응용분야 형상, VFP, NEON, Jazelle RCT, Thumb-2, 13-단계 슈퍼스칼라 파이프라인 가변적 (L1+L2), MMU+TrustZone 2000 (2.0 DMIPS/MHz, 600 MHz부터 1 GHz) 까지
Cortex-A9 응용분야 형상, VFP, (NEON), Jazelle RCT and DBX, Thumb-2 MMU+TrustZone 2.5 DMIPS/MHz
Cortex-A9 MPCore As Cortex-A9, 1-4 코어 SMP MMU+TrustZone 2.0 DMIPS/MHz
Cortex-A12 2.96 DMIPS/MHz
Cortex-A15 3.5 DMIPS/MHz
ARMv7-R Cortex-R4(F) 임베디드 형상, (FPU) 가변적 캐시, MPU optional 600 DMIPS
ARMv6-M Cortex-M1 FPGA와 연동, 마이크로컨트롤러 형상, Thumb-2 (BL, MRS, MSR, ISB, DSB, and DMB). 없음, 선택적 메모리 밀착형.
ARMv7-M Cortex-M3 마이크로컨트롤러 형상, Thumb-2 only. 캐시없음, (MPU) 125 DMIPS @ 100 MHz
ARMv7E-M Cortex-M4 마이크로컨트롤러 형상 125 DMIPS
ARMv8-A Cortex-A53 64비트 명령어 지원 MMU, TrustZone, 64bit 가상 주소 2.3 DMIPS/MHz
Cortex-A57 64비트 명령어 지원 MMU, TrustZone, 64bit 가상 주소 4.1 DMIPS/MHz
Cortex-A72 64비트 명령어 지원 MMU, TrustZone, 64bit 가상 주소

32비트 아키텍처 편집

보안 확장 편집

트러스트존 (Cortex-A 프로파일) 편집

트러스트존 테크놀로지(TrustZone Technology)라는 이름으로 마케팅된 보안 확장 기능은 ARMv6KZ 이상의 애플리케이션 프로파일 아키텍처에 포함된다. 하드웨어 기반 접근 제어의 지원을 받는 2개의 가상 프로세서를 제공함으로써 SoC의 다른 전용 보안 코어를 추가하지 않으므로 비용을 낮출 수 있다.

ARMv8-M용 트러스트존 (Cortex-M 프로파일) 편집

TrustZone for ARMv8-M Technology로 마케팅되는 보안 확장 기능은 ARMv8-M 아키텍처에 도입되었다.

어셈블리어 예제 편집

C 언어로 다음과 같은 코드를,

    while (i != j) {
       if (i > j)
           i -= j;
       else
           j -= i;
    }

ARM 어셈블리어로는 다음과 같이 작성할 수 있다.

loop:   CMP  Ri, Rj         ; set condition "NE" if (i != j),
                            ;               "GT" if (i > j),
                            ;            or "LT" if (i < j)
        SUBGT  Ri, Ri, Rj   ; if "GT" (Greater Than), i = i-j;
        SUBLT  Rj, Rj, Ri   ; if "LT" (Less Than), j = j-i;
        BNE  loop           ; if "NE" (Not Equal), then loop

크로스 컴파일 편집

현재 이클립스WAF 등을 통해서 운영체제와 상관없이 일정수준을 만족하는 기준에서 작성된 소스코드를 원하는 운영체제에 맞는 실행파일로 빌드를 지원하고있다. 한편 ARM社 역시 이러한 오픈소스와 작동하는 GNU Compiler (GCC) 툴체인 프로그램을 제공하고있다.[4][5]

이에따라 특히 기존 인텔이나 AMD x86계열의 리눅스 프로그램들은 자유로이 싱글보드 컴퓨터에 포팅되어 사용할 수 있는 생태계가 형성되었다.

마이크로컨트롤러 타입 편집

일부 마이크로컨트롤러유닛인 MCU타입 보드는 아두이노 IDE에서의 개발환경을 공식적으로 지원한다.[6][7]

아두이노 보드 편집

MCU타입 보드인 cortex-M4칩을 장착한 ST社의 STM32 NUCLEO-F303K8는 오픈 소스 하드웨어인 아두이노 나노 보드와 헤더배치에서 호환되도록 설계되었다.[8][9] 한편 cortex-M4칩은 FPU를 포함한 32비트 CPU이다.

싱글보드컴퓨터 편집

Cortex-A8을 채택한 10 cm X6cm 전후의 초소형 크기에 5V 전력을 사용하는 단일보드컴퓨터는 본격적으로 스마트폰이나 싱글보드컴퓨터등에 특화되어 사용되기 시작했다.[10][11]

운영체제로는 우분투계열의 우분투 메이트아크 리눅스등이 리눅스 OS로서 지원되며 리눅스 운영체제를 기반으로하는 안드로이드가 스마트폰등에서 그리고 다양한 임베디드 기기를 위해 웹OS타이젠등이 사용되고있다.

같이 보기 편집

각주 편집

외부 링크 편집