shopkeeper/korean_wiki_content_only_120125 huggingface dataset:
《연개소문》(淵蓋蘇文)은 2006년 7월 8일부터 2007년 6월 17일까지 방영된 총 100부작의 대하사극이자 SBS 주말극장으로 단재 신채호의 조선상고사를 근거로 하였다. DSP 미디어에서 제작하였고 총 400억 원의 막대한 제작비와 투자비(세트장 건립 비용 등)까지 만만치 않게 투입된 블록버스터급 대작 드라마이다. 고구려 후기 막리지의 난부터 고구려의 멸망까지 연개소문의 생애를 다루었다.
ARM 아키텍처(ARM architecture, 과거 명칭: Advanced RISC Machine, 최초 명칭: Acorn RISC Machine)는 컴퓨터 프로세서를 위한 RISC 명령어 집합 아키텍처(ISA) 제품군이다. ARM 홀딩스는 이 ISA를 개발하여 다른 회사에 라이선스를 부여하고, 이 회사들은 해당 명령어 집합을 사용하는 물리적 장치를 제작한다. 또한 이 ISA를 구현하는 코어를 설계하고 라이선스를 부여한다.
저렴한 비용, 낮은 전력 소비, 낮은 발열 덕분에 ARM 프로세서는 스마트폰, 랩톱, 태블릿 컴퓨터는 물론 임베디드 시스템을 포함한 가볍고 휴대하기 편리하며 배터리로 구동되는 장치에 유용하다. 그러나 ARM 프로세서는 2020년부터 2022년까지 세계에서 가장 빠른 슈퍼컴퓨터였던 후가쿠를 포함하여 데스크톱 컴퓨터 및 서버에도 사용된다. 2,300억 개 이상의 ARM 칩(그중 최소 1,300억 개가 ARM 프로세서)이 생산되면서, , ARM은 가장 널리 사용되는 명령어 집합 아키텍처 제품군이다.
ARM 설계는 여러 세대에 걸쳐 발전해왔다. 원래의 ARM1은 32비트 내부 구조를 사용했지만, 64 MB의 주기억장치로 제한되는 26비트 주소 공간을 가졌다. 이러한 제한은 32비트 주소 공간을 가진 ARMv3 시리즈에서 제거되었고, ARMv7까지 여러 세대에 걸쳐 32비트 구조를 유지했다. 2011년에 발표된 ARMv8-A 아키텍처는 새로운 32비트 고정 길이 명령어 집합을 통해 64비트 주소 공간과 64비트 연산 지원을 추가했다. ARM 홀딩스는 또한 다양한 역할을 위한 추가 명령어 집합을 발표했다. "Thumb" 확장 기능은 코드 밀도 향상을 위해 32비트 및 16비트 명령어를 모두 추가했으며, Jazelle은 자바 바이트코드를 직접 처리하기 위한 명령어를 추가했다. 최근의 변경 사항으로는 성능이나 내결함성 향상을 위한 동시 멀티스레딩 (SMT) 추가가 있다.
BBC 마이크로.
아콘 컴퓨터의 첫 번째 성공적인 설계는 1981년 12월에 출시된 BBC 마이크로였다. 이 기기는 MOS 6502 CPU를 기반으로 한 비교적 평범한 기기였지만, 더 빠른 동적 램(DRAM)을 사용하여 애플 II와 같은 경쟁 설계보다 약 두 배의 성능을 냈다. 당시 일반적인 DRAM은 약 2 MHz로 작동했지만, 아콘은 더 빠른 4 MHz 부품을 공급받기 위해 히타치 제작소와 계약했다.
당시의 기기들은 일반적으로 프로세서와 프레임버퍼 사이에 메모리를 공유하여, 프로세서가 별도의 I/O를 수행할 필요 없이 화면 내용을 빠르게 업데이트할 수 있었다. 비디오 디스플레이의 타이밍은 매우 정밀하기 때문에, 비디오 하드웨어는 해당 메모리에 우선적으로 접근해야 했다. 6502 설계의 특성상 CPU는 시간의 절반 동안 메모리를 건드리지 않았다. 따라서 CPU를 1 MHz로 실행함으로써, 비디오 시스템은 이러한 휴지 시간 동안 데이터를 읽을 수 있었고, 이는 RAM의 총 2 MHz 대역폭을 모두 사용했다. BBC 마이크로에서는 4 MHz RAM을 사용하여 동일한 기술을 두 배 빠른 속도로 사용할 수 있었다. 이로 인해 당시 시장의 유사한 어떤 기기보다도 뛰어난 성능을 낼 수 있었다.
아콘 비즈니스 컴퓨터.
1981년은 IBM PC가 출시된 해이기도 했다. 최근 출시된 인텔 8088을 사용하여, 6502의 8비트 설계에 비해 16비트 CPU는 전반적으로 더 높은 성능을 제공했다. 이 제품의 출시는 데스크톱 컴퓨터 시장을 급진적으로 변화시켰다. 지난 5년간 주로 취미 및 게임 시장이었던 것이, 이전 8비트 설계로는 도저히 경쟁할 수 없는 필수적인 비즈니스 도구 시장으로 바뀌기 시작했다. 모토로라 68000과 내셔널 세미컨덕터 NS32016 같은 새로운 32비트 설계도 시장에 출시되고 있었다.
아콘은 이 시장에서 경쟁하는 방법을 모색하기 시작하여 아콘 비즈니스 컴퓨터라는 새로운 종이 설계를 만들었다. 그들은 BBC 마이크로의 10배 성능을 가지면서도 동일한 가격으로 기기를 생산하는 것을 목표로 했다. 이는 PC보다 성능이 뛰어나고 가격도 저렴할 것이다. 동시에 최근 출시된 애플 리사는 GUI 개념을 더 넓은 대중에게 알렸고, 미래가 GUI를 갖춘 기기에 속할 것임을 시사했다. 그러나 리사는 지원 칩, 대량의 메모리, 하드 디스크 드라이브 등 당시 매우 비싼 부품으로 가득 차 있어 9,995달러나 되었다.
엔지니어들은 모든 사용 가능한 CPU 설계를 연구하기 시작했다. 기존 16비트 설계에 대한 그들의 결론은 훨씬 비쌌고 여전히 "조금 형편없다"는 것이었다. BBC 마이크로 설계보다 약간만 더 높은 성능을 제공했을 뿐이었다. 또한 이러한 설계는 거의 항상 많은 지원 칩을 필요로 하여 컴퓨터 전체 비용을 증가시켰다. 이 시스템들은 설계 목표를 달성할 수 없었다. 그들은 또한 새로운 32비트 설계도 고려했지만, 이들은 훨씬 더 비쌌고 지원 칩 문제도 동일했다. 소피 윌슨에 따르면, 당시 테스트된 모든 프로세서들은 약 4 Mbit/s의 대역폭으로 거의 동일한 성능을 보였다.
두 가지 중요한 사건이 아콘을 ARM의 길로 이끌었다. 하나는 캘리포니아 대학교 버클리에서 발표된 일련의 보고서로, 간단한 칩 설계가 시장에 나와 있는 최신 32비트 설계보다 훨씬 더 높은 성능을 가질 수 있음을 시사했다. 두 번째는 스티브 퍼버와 소피 윌슨이 빌 멘쉬와 그의 누이가 운영하는 회사인 웨스턴 디자인 센터를 방문한 것이었다. 이 회사는 MOS 팀의 논리적 후계자가 되었고 WDC 65C02와 같은 새로운 버전을 제공하고 있었다. 아콘 팀은 고등학생들이 애플 II 기기에서 칩 레이아웃을 생산하는 것을 보고, 누구든 할 수 있다는 생각을 했다. 이와 대조적으로, 현대 32비트 CPU를 개발하는 다른 설계 회사를 방문했을 때, 그들은 이미 설계의 H 버전을 진행 중임에도 불구하고 여전히 버그를 포함하고 있는 12명 이상의 팀을 발견했다. 이는 1983년 말 자체 CPU 설계인 아콘 RISC 머신을 시작하기로 한 그들의 결정을 확고히 했다.
설계 개념.
원래 버클리 RISC 설계는 어떤 면에서 순수한 성능을 목표로 설계된 것이 아니라 교육 시스템이었다. RISC의 기본적인 레지스터 중심 및 로드/스토어 개념에 ARM은 6502의 잘 받아들여진 설계 특징들을 추가했다. 그중 가장 중요한 것은 인터럽트를 빠르게 처리하는 능력으로, 이를 통해 기기는 추가 외부 하드웨어 없이도 합리적인 입출력 성능을 제공할 수 있었다. 6502와 유사한 성능으로 인터럽트를 제공하기 위해, ARM 설계는 물리적 주소 공간을 총 64 MB의 주소 지정 가능 공간으로 제한하여 26비트의 주소를 요구했다. 명령어가 4바이트(32비트) 길이이고 4바이트 경계에 정렬되어야 했기 때문에, 명령어 주소의 하위 2비트는 항상 0이었다. 이는 프로그램 카운터(PC)가 24비트만 필요하다는 것을 의미했으며, 8비트 프로세서 플래그와 함께 단일 32비트 레지스터에 저장할 수 있게 했다. 이는 인터럽트가 발생하면 전체 기기 상태를 단일 연산으로 저장할 수 있음을 의미했으며, 만약 PC가 전체 32비트 값이었다면 PC와 상태 플래그를 저장하기 위해 별도의 연산이 필요했을 것이다. 이 결정은 인터럽트 오버헤드를 절반으로 줄였다.
또 다른 변화이자 실제 성능 면에서 가장 중요한 변화 중 하나는 페이지 모드 DRAM을 활용하도록 명령어 집합을 수정한 것이었다. 최근 도입된 페이지 모드는 메모리에 대한 후속 접근이 DRAM 칩의 동일한 위치 또는 "페이지"에 대략적으로 위치할 경우 두 배 빠르게 실행될 수 있게 했다. 버클리 설계는 페이지 모드를 고려하지 않고 모든 메모리를 동일하게 취급했다. ARM 설계는 "S-사이클"이라는 특수 벡터형 메모리 접근 명령어를 추가하여 페이지 모드를 사용하여 단일 페이지에서 여러 레지스터를 채우거나 저장할 수 있게 했다. 이는 사용 가능한 경우 메모리 성능을 두 배로 높였으며, 특히 그래픽 성능에 중요했다.
버클리 RISC 설계는 레지스터 윈도를 사용하여 프로시저 호출에서 수행되는 레지스터 저장 및 복원 횟수를 줄였지만, ARM 설계는 이를 채택하지 않았다.
윌슨은 명령어 집합을 개발했으며, BBC 마이크로에서 BBC 베이직으로 프로세서 시뮬레이션을 작성하여 6502 보조 프로세서를 사용하여 실행했다. 이것은 아콘 엔지니어들이 올바른 방향으로 가고 있음을 확신시켰다. 윌슨은 아콘의 CEO인 헤르만 하우저에게 더 많은 자원을 요청했다. 하우저는 승인했고, 윌슨의 ISA를 기반으로 실제 프로세서를 설계할 소규모 팀을 구성했다. 공식 아콘 RISC 머신 프로젝트는 1983년 10월에 시작되었다.
ARM1.
아콘은 아콘을 위한 ROM 및 맞춤형 칩 공급원인 VLSI 테크놀로지를 "실리콘 파트너"로 선택했다. 아콘은 설계를 제공하고 VLSI는 레이아웃과 생산을 담당했다. ARM 실리콘의 첫 번째 샘플은 1985년 4월 26일에 처음 수령되어 테스트되었을 때 제대로 작동했다. ARM1으로 알려진 이 버전은 6 MHz로 작동했다.
첫 번째 ARM 애플리케이션은 BBC 마이크로의 보조 프로세서였는데, 여기서는 지원 칩(VIDC, IOC, MEMC) 개발을 완료하기 위한 시뮬레이션 소프트웨어를 개발하고, ARM2 개발에 사용되는 CAD 소프트웨어의 속도를 높이는 데 도움이 되었다. 윌슨은 나중에 BBC 베이직을 ARM 어셈블리어로 다시 작성했다. 명령어 집합 설계에서 얻은 깊이 있는 지식 덕분에 코드가 매우 밀집되어 ARM BBC 베이직은 모든 ARM 에뮬레이터에 대한 매우 좋은 테스트가 되었다.
ARM2.
ARM1 보드 시뮬레이션 결과 1986년 말에 8 MHz로 작동하는 ARM2 설계가 도입되었고, 1987년 초에는 10~12 MHz로 속도가 향상된 버전이 출시되었다. 기본 아키텍처의 중요한 변화는 부스 곱셈기의 추가였다. 이전에는 곱셈을 소프트웨어로 수행해야 했다. 또한 FIQ(Fast Interrupt reQuest)라는 새로운 모드가 추가되어 레지스터 8부터 14까지를 인터럽트의 일부로 교체할 수 있게 되었다. 이는 FIQ 요청이 레지스터를 저장할 필요가 없어 인터럽트 속도를 더욱 높였다.
ARM2의 첫 번째 사용은 1986년 7월부터 BBC 마이크로 및 마스터 머신의 보조 프로세서로 제공된 ARM 평가 시스템, 내부 아콘 A500 개발 머신, 그리고 1987년 6월 6일에 출시된 아콘 아르키메데스 개인용 컴퓨터 모델 A305, A310, A440이었다.
드라이스톤 벤치마크에 따르면, ARM2는 아미가나 매킨토시 SE와 같은 일반적인 7 MHz 68000 기반 시스템보다 약 7배 빠른 성능을 보였다. 16 MHz로 작동하는 i386보다 2배 빨랐고, 멀티프로세서 VAX-11/784 슈퍼미니컴퓨터와 거의 같은 속도를 냈다. ARM2를 능가하는 유일한 시스템은 선 SPARC와 MIPS R2000 RISC 기반 워크스테이션이었다. 또한 CPU는 고속 I/O를 위해 설계되었기 때문에, 이 기기들에서 볼 수 있는 많은 지원 칩들을 없앴다. 특히, 워크스테이션에서 흔히 발견되는 전용 DMA 컨트롤러가 없었다. 그래픽 시스템 또한 메모리 및 타이밍에 대한 동일한 기본 가정에 기반하여 단순화되었다. 그 결과, dramatically 단순화된 설계는 고가 워크스테이션과 동등한 성능을 제공하면서도 현대 데스크톱과 유사한 가격대를 유지했다.
ARM2는 32비트 데이터 버스, 26비트 주소 공간, 그리고 27개의 32비트 프로세서 레지스터를 특징으로 했으며, 이 중 16개는 언제든지 접근 가능했다(PC 포함). ARM2는 트랜지스터 수가 30,000개에 불과했으며, 이는 6년 전에 출시된 모토로라의 68000 모델이 약 68,000개였던 것과 비교된다. 이러한 단순함의 대부분은 68000 트랜지스터의 약 1/4에서 1/3을 차지하는 마이크로코드의 부재와 (대부분의 당시 CPU와 마찬가지로) 캐시의 부재에서 비롯되었다. 이러한 단순함 덕분에 ARM2는 전력 소비가 적고 전원 공급 트랜지스터 수가 적어 열 관리가 더 간단했다. 그럼에도 불구하고 ARM2는 1987년 당시 인텔 80286을 사용하던 IBM PS/2 모델 50 (10 MHz에서 1.8 MIPS)보다 뛰어난 성능을 제공했으며, 같은 해 후반에는 Intel 386 DX가 장착된 PS/2 70의 16 MHz에서 2 MIPS와 비슷한 속도를 냈다.
후속작인 ARM3은 4 KB 캐시를 갖추어 성능을 더욱 향상시켰다. 주소 버스는 ARM6에서 32비트로 확장되었지만, 프로그램 코드는 상태 플래그를 위한 예약 비트 때문에 26비트 호환성 모드에서 여전히 메모리의 첫 64MB 내에 있어야 했다.
어드밴스드 RISC 머신즈 Ltd. – ARM6.
1980년대 후반, 애플과 VLSI 테크놀로지는 아콘과 협력하여 ARM 코어의 새로운 버전을 개발하기 시작했다. 1990년, 아콘은 디자인 팀을 어드밴스드 RISC 머신즈 Ltd.라는 새로운 회사로 분사시켰다. 이 회사는 1998년 모회사인 ARM 홀딩스 plc가 런던 증권거래소와 나스닥에 상장되면서 ARM Ltd.가 되었다. 새로운 애플-ARM 협력은 결국 1992년 초에 처음 출시된 ARM6으로 발전했다. 애플은 ARM6 기반의 ARM610을 애플 뉴턴 PDA의 기반으로 사용했다.
초기 라이선스 사용자.
1994년에 아콘은 ARM610을 RiscPC 컴퓨터의 주요 CPU로 사용했다. DEC는 ARMv4 아키텍처를 라이선스 받아 StrongARM을 생산했다. 233 MHz에서 이 CPU는 단 1와트의 전력만 소비했다(최신 버전은 훨씬 적은 전력을 소비한다). 이 작업은 나중에 소송 합의의 일환으로 인텔에 넘어갔고, 인텔은 이 기회를 통해 i960 라인에 StrongARM을 보강했다. 인텔은 나중에 자체 고성능 구현인 XScale을 개발했으며, 이를 마벨에 매각했다. ARM 코어의 트랜지스터 수는 이러한 변화에도 불구하고 거의 동일하게 유지되었다. ARM2는 30,000개의 트랜지스터를 가졌고, ARM6는 35,000개로 증가했을 뿐이다.
2005년에는 판매된 모든 휴대폰의 약 98%가 최소 하나의 ARM 프로세서를 사용했다. 2010년에는 ARM 아키텍처 기반 칩 제조업체들이 61억 개의 ARM 기반 프로세서를 출하했다고 보고했는데, 이는 스마트폰의 95%, 디지털 텔레비전 및 셋톱박스의 35%, 모바일 컴퓨터의 10%를 차지한다. 2011년에는 32비트 ARM 아키텍처가 모바일 장치에서 가장 널리 사용되는 아키텍처였고, 임베디드 시스템에서 가장 인기 있는 32비트 아키텍처였다. 2013년에는 100억 개가 생산되었고, "ARM 기반 칩은 전 세계 모바일 장치의 거의 60%에서 발견된다."
코어 라이선스.
ARM 홀딩스의 주요 사업은 IP 코어 판매이며, 라이선스 사용자는 이를 사용하여 해당 코어를 기반으로 마이크로컨트롤러(MCU), CPU, 그리고 시스템 온 칩을 제작한다. 원천 디자인 제조업자는 ARM 코어를 다른 부품과 결합하여 완전한 장치를 생산하며, 일반적으로 기존의 반도체 제조 공장(팹)에서 저렴한 비용으로 제작될 수 있고 상당한 성능을 제공한다. 가장 성공적인 구현은 ARM7TDMI로, 수억 개가 판매되었다. 아트멜은 ARM7TDMI 기반 임베디드 시스템에서 선구적인 설계 센터였다.
스마트폰, PDA 및 기타 모바일 장치에 사용되는 ARM 아키텍처는 ARMv5부터 까지 다양하다.
2009년, 일부 제조업체는 인텔 아톰 기반 넷북과 직접 경쟁하기 위해 ARM 아키텍처 CPU를 기반으로 한 넷북을 출시했다.
ARM 홀딩스는 비용 및 제공물에 따라 다양한 라이선스 조건을 제공한다. ARM 홀딩스는 모든 라이선스 사용자에게 ARM 코어의 통합 가능한 하드웨어 설명과 완전한 소프트웨어 개발 도구 세트(컴파일러, 디버거, 소프트웨어 개발 키트), 그리고 ARM CPU가 포함된 제조된 실리콘을 판매할 권리를 제공한다.
ARM의 코어 설계를 통합하는 SoC 패키지에는 엔비디아 테그라의 첫 3세대, CSR plc의 쿼트로 제품군, ST-에릭슨의 노바 및 노바토르, 실리콘 랩스의 Precision32 MCU, 텍사스 인스트루먼츠의 OMAP 제품, 삼성의 Hummingbird 및 삼성 엑시노스 제품, 애플의 A4, A5, 및 A5X가 포함된다. 그리고 NXP 반도체의 i.MX도 포함된다.
자체 칩 설계에 ARM 코어를 통합하려는 팹리스 라이선스 사용자들은 일반적으로 즉시 제조 가능한 검증된 반도체 IP 코어를 획득하는 데만 관심이 있다. 이러한 고객을 위해 ARM 홀딩스는 선택된 ARM 코어의 게이트 넷리스트 설명과 추상화된 시뮬레이션 모델 및 설계 통합 및 검증을 돕기 위한 테스트 프로그램을 제공한다. 통합 디바이스 제조업체(IDM) 및 파운드리 사업자를 포함한 더 야심찬 고객들은 합성 가능한 RTL (베릴로그) 형태로 프로세서 IP를 획득하는 것을 선택한다. 합성 가능한 RTL을 통해 고객은 아키텍처 수준의 최적화 및 확장을 수행할 수 있다. 이는 수정되지 않은 넷리스트로는 불가능한 이국적인 설계 목표(높은 클럭 속도, 매우 낮은 전력 소비, 명령어 집합 확장 등)를 달성할 수 있게 한다. ARM 홀딩스는 라이선스 사용자에게 ARM 아키텍처 자체를 재판매할 권리를 부여하지 않지만, 라이선스 사용자들은 칩 장치, 평가 보드 및 완전한 시스템과 같은 제조된 제품을 자유롭게 판매할 수 있다. 파운드리 업체는 특별한 경우일 수 있다. 그들은 ARM 코어를 포함하는 완성된 실리콘을 판매할 수 있을 뿐만 아니라, 일반적으로 다른 고객을 위해 ARM 코어를 재제조할 권리를 가진다.
ARM 홀딩스는 인식된 가치에 따라 IP 가격을 책정한다. 성능이 낮은 ARM 코어는 일반적으로 성능이 높은 코어보다 라이선스 비용이 낮다. 구현 측면에서, 합성 가능한 코어는 하드 매크로(블랙박스) 코어보다 비용이 더 많이 든다. 가격 문제를 복잡하게 만드는 것은, 삼성이나 후지쯔와 같이 ARM 라이선스를 보유한 파운드리 업체가 팹 고객에게 라이선스 비용을 줄여줄 수 있다는 점이다. 파운드리의 사내 설계 서비스를 통해 ARM 코어를 획득하는 대가로, 고객은 ARM의 초기 개발비(NRE) 지불을 줄이거나 없앨 수 있다.
사내 설계 서비스가 없는 전용 반도체 파운드리(TSMC 및 UMC 등)와 비교할 때, 후지쯔/삼성은 제조된 웨이퍼당 2~3배 더 높은 비용을 청구한다. 저용량에서 중용량 애플리케이션의 경우, 설계 서비스 파운드리는 더 낮은 전체 가격(라이선스 비용 보조를 통해)을 제공한다. 고용량 대량 생산 부품의 경우, 낮은 웨이퍼 가격을 통해 달성할 수 있는 장기적인 비용 절감은 ARM의 NRE 비용 영향을 줄여 전용 파운드리를 더 나은 선택으로 만든다.
ARM이 설계한 코어로 칩을 개발한 회사에는 아마존닷컴의 아나푸르나 랩스 자회사, 아날로그 디바이스, 애플, 어플라이드마이크로 (현재: MACOM 테크놀로지 솔루션즈), 아트멜, 브로드컴, 카비움, 사이프러스 세미컨덕터, 프리스케일 세미컨덕터 (현재 NXP 반도체), 화웨이, 인텔, 맥심 인터그레이티드, 엔비디아, NXP, 퀄컴, 르네사스, 삼성전자, ST마이크로일렉트로닉스, 텍사스 인스트루먼트, 자일링스가 있다.
ARM Cortex 기술 라이선스 기반 구축.
2016년 2월, ARM은 Built on ARM Cortex Technology 라이선스를 발표했으며, 이는 종종 Built on Cortex(BoC) 라이선스로 줄여 부른다. 이 라이선스는 기업이 ARM과 협력하여 ARM Cortex 설계를 수정할 수 있도록 허용한다. 이러한 설계 수정 사항은 다른 회사와 공유되지 않는다. 이러한 세미 커스텀 코어 설계는 브랜드 자유도 가지는데, 예를 들어 Kryo 280이 있다.
Built on ARM Cortex Technology의 현재 라이선스 사용자로는 퀄컴이 있다.
아키텍처 라이선스.
기업은 ARM 명령어 집합을 사용하여 자체 CPU 코어를 설계하기 위한 ARM 아키텍처 라이선스도 얻을 수 있다. 이 코어는 ARM 아키텍처를 완전히 준수해야 한다. ARM 아키텍처를 구현하는 코어를 설계한 회사로는 애플, 어플라이드마이크로 (현재: 앰페어 컴퓨팅), 브로드컴, 카비움 (현재: 마벨), 디지털 이큅먼트 코퍼레이션, 인텔, 엔비디아, 퀄컴, 삼성전자, 후지쯔, NUVIA Inc. (2021년 퀄컴에 인수됨)가 있다.
ARM 플렉서블 액세스.
2019년 7월 16일, ARM은 ARM 플렉서블 액세스를 발표했다. ARM 플렉서블 액세스는 개발을 위해 포함된 ARM IP에 대한 무제한 액세스를 제공한다. 고객이 파운드리 테이프아웃 또는 프로토타이핑에 도달하면 제품당 라이선스 수수료가 필요하다.
지난 2년간 ARM의 최신 IP 중 75%가 ARM 플렉서블 액세스에 포함된다. 2019년 10월 현재:
ARM은 ARM 코어를 설계에 구현하는 벤더 목록(애플리케이션 특정 표준 제품(ASSP), 마이크로프로세서 및 마이크로컨트롤러)을 제공한다.
ARM 코어의 응용 사례.
ARM 코어는 여러 제품, 특히 PDA 및 스마트폰에 사용된다. 몇 가지 컴퓨팅 사례는 마이크로소프트의 1세대 서피스, 서피스 2 및 포켓 PC 장치 (2002년 이후), 애플의 아이패드, 에이수스의 이패드 트랜스포머 태블릿 컴퓨터, 그리고 여러 크롬북 랩톱이다. 다른 제품으로는 애플의 아이폰 스마트폰 및 아이팟 포터블 미디어 플레이어, 캐논 파워샷 디지털 카메라, 닌텐도 스위치 하이브리드, Wii 보안 프로세서 및 3DS 휴대용 콘솔 게임기, 그리고 톰톰 내비게이션 시스템 등이 있다.
2005년, ARM은 맨체스터 대학교의 스핀내커 컴퓨터 개발에 참여했는데, 이 컴퓨터는 인간의 뇌를 시뮬레이션하기 위해 ARM 코어를 사용했다.
ARM 칩은 라즈베리 파이, 비글보드, 비글본, 팬더보드 및 기타 단일 보드 컴퓨터에도 사용되는데, 이는 매우 작고 저렴하며 전력 소모가 매우 적기 때문이다.
32비트 아키텍처.
ARMv7-A (AArch32 구현; 자세한 내용은 Armv8-A 섹션 참조)와 같은 32비트 ARM 아키텍처(ARM32)는 모바일 장치에서 가장 널리 사용되는 아키텍처였다.
1995년부터 ARM 아키텍처 참조 매뉴얼의 다양한 버전(외부 링크 참조)은 ARM 프로세서 아키텍처 및 명령어 집합에 대한 주요 문서 소스가 되었으며, 모든 ARM 프로세서가 지원해야 하는 인터페이스(예: 명령어 의미론)와 달라질 수 있는 구현 세부 사항을 구별한다. 아키텍처는 시간이 지남에 따라 발전했으며, 아키텍처의 7번째 버전인 ARMv7은 세 가지 아키텍처 "프로필"을 정의한다:
아키텍처 프로필은 ARMv7에서 처음 정의되었지만, ARM은 나중에 ARMv6-M 아키텍처(Cortex M0/M0+/M1에 사용됨)를 더 적은 명령어를 가진 ARMv7-M 프로필의 하위 집합으로 정의했다.
CPU 모드.
M-프로필을 제외하고, 32비트 ARM 아키텍처는 구현된 아키텍처 기능에 따라 여러 CPU 모드를 지정한다. 특정 시점에 CPU는 하나의 모드에만 있을 수 있지만, 외부 이벤트(인터럽트) 또는 프로그래밍 방식으로 모드를 전환할 수 있다.
원래(및 후속) ARM 구현은 이전 아콘 마이크로컴퓨터에 사용된 훨씬 더 간단한 8비트 MOS 6502 프로세서처럼 마이크로코드 없이 하드와이어링되었다.
32비트 ARM 아키텍처(대부분의 64비트 아키텍처도 마찬가지)에는 다음 RISC 기능이 포함되어 있다.
인텔 80286 및 모토로라 68020과 같은 프로세서와 비교하여 더 간단한 설계를 보완하기 위해 몇 가지 추가 설계 기능이 사용되었다.
산술 명령어.
ARM에는 더하기, 빼기, 곱하기를 위한 정수 산술 연산이 포함되어 있다. 아키텍처의 일부 버전은 나누기 연산도 지원한다.
ARM은 32비트 결과 또는 64비트 결과와 함께 32비트 × 32비트 곱셈을 지원하지만, Cortex-M0/M0+/M1 코어는 64비트 결과를 지원하지 않는다. 일부 ARM 코어는 16비트 × 16비트 및 32비트 × 16비트 곱셈도 지원한다.
나누기 명령어는 다음 ARM 아키텍처에만 포함된다.
R0부터 R7까지의 레지스터는 모든 CPU 모드에서 동일하며, 절대 뱅크되지 않는다.
R8부터 R12까지의 레지스터는 FIQ 모드를 제외한 모든 CPU 모드에서 동일하다. FIQ 모드는 자체적으로 구별되는 R8부터 R12까지의 레지스터를 가진다.
R13과 R14는 시스템 모드를 제외한 모든 특권 CPU 모드에서 뱅크된다. 즉, 예외로 인해 진입할 수 있는 각 모드는 자체적인 R13과 R14를 가진다. 이 레지스터들은 일반적으로 각각 스택 포인터와 함수 호출의 반환 주소를 포함한다.
별칭:
현재 프로그램 상태 레지스터(CPSR)에는 다음 32비트가 있다.
조건부 실행.
거의 모든 ARM 명령어에는 조건부 실행이라는 기능이 있으며, 4비트 조건 코드 선택기(프레디케이트)로 구현된다. 무조건 실행을 허용하기 위해 4비트 코드 중 하나는 명령어가 항상 실행되도록 한다. 다른 대부분의 CPU 아키텍처는 분기 명령에만 조건 코드를 가지고 있다.
프레디케이트는 명령어 코드의 32비트 중 4비트를 차지하여 메모리 접근 명령어의 변위 사용 가능한 인코딩 비트를 크게 줄이지만, 작은 `if` 문에 대한 코드를 생성할 때 분기 명령어를 피할 수 있다. 분기 명령어 자체를 없애는 것 외에도, 이는 건너뛴 명령어당 단 한 사이클의 비용으로 페치/디코드/실행 파이프라인을 유지한다.
조건부 실행의 좋은 예시를 제공하는 알고리즘은 뺄셈 기반의 유클리드 호제법으로 최대 공약수를 계산하는 것이다. C 프로그래밍 언어로 이 알고리즘은 다음과 같이 작성할 수 있다.
int gcd(int a, int b) {
while (a != b) // a &lt; b 또는 a &gt; b일 때 루프에 진입하지만, a == b일 때는 아님
if (a &gt; b) // a &gt; b일 때 이를 수행
a -= b;
else // a &lt; b일 때 이를 수행 (while 조건에서 a != b를 확인하므로 "if (a &lt; b)"는 필요 없음)
b -= a;
동일한 알고리즘은 ARM 명령어에 더 가깝게 다음과 같이 다시 작성할 수 있다.
// a와 b를 비교
GT = a &gt; b;
LT = a &lt; b;
NE = a != b;
// 플래그 결과에 따라 연산 수행
if (GT) a -= b; // '보다 큼'인 경우에만 뺄셈
if (LT) b -= a; // '보다 작음'인 경우에만 뺄셈
if (NE) goto loop; // 비교값이 같지 않은 경우에만 루프
그리고 어셈블리어로 다음과 같이 코딩할 수 있다.
loop: CMP r0, r1 ; (a ≠ b)이면 "NE" 조건 설정,
; (a &gt; b)이면 "GT" 조건 설정,
; (a &lt; b)이면 "LT" 조건 설정
SUBGT r0, r0, r1 ; "GT" (Greater Than)이면 a = a − b
SUBLT r1, r1, r0 ; "LT" (Less Than)이면 b = b − a
BNE loop ; "NE" (Not Equal)이면 loop
B lr ; 반환
이는 `then`과 `else` 절 주변의 분기를 피한다. 만약 `r0`과 `r1`이 같다면 `SUB` 명령어 중 어느 것도 실행되지 않아, 예를 들어 `SUBLE`(작거나 같음)가 사용되었을 경우 루프 상단에서 `while` 검사를 구현하기 위한 조건부 분기가 필요 없어진다.
Thumb 코드가 더 밀집된 인코딩을 제공하는 방법 중 하나는 비분기 명령어에서 4비트 선택기를 제거하는 것이다.
명령어 집합의 또 다른 특징은 시프트 및 회전 연산을 데이터 처리(산술, 논리, 레지스터-레지스터 이동) 명령어에 포함시킬 수 있다는 점이다. 따라서, 예를 들어 C 언어의 문:
a += (j « 2);
는 한 단어, 한 사이클 명령어:
ADD Ra, Ra, Rj, LSL #2
로 표현될 수 있다. 이는 일반적인 ARM 프로그램이 예상보다 더 밀집되어 메모리 접근이 적어져 파이프라인이 더 효율적으로 사용된다는 결과를 낳는다.
ARM 프로세서는 다른 RISC 아키텍처에서는 보기 드문 기능도 가지고 있는데, 예를 들어 PC-상대 주소 지정(실제로 32비트 ARM에서는 PC가 16개의 레지스터 중 하나이다)과 전후 증분 주소 지정 모드 등이 있다.
ARM 명령어 집합은 시간이 지남에 따라 증가했다. 예를 들어 일부 초기 ARM 프로세서(ARM7TDMI 이전)는 2바이트 수량을 저장하는 명령어가 없었다.
파이프라인 및 기타 구현 문제.
ARM7 및 이전 구현은 3단계 파이프라인을 가지고 있다. 단계는 페치, 디코드, 실행이다. ARM9와 같은 고성능 설계는 더 깊은 파이프라인을 가지고 있다. Cortex-A8은 13단계이다. 고성능을 위한 추가 구현 변경 사항에는 더 빠른 가산기와 더 광범위한 분기 예측 논리가 포함된다. 예를 들어 ARM7DI와 ARM7DMI 코어의 차이점은 개선된 곱셈기였다. 따라서 "M"이 추가되었다.
코프로세서.
ARM 아키텍처(Armv8 이전)는 MCR, MRC, MRRC, MCRR 및 유사한 명령어를 사용하여 주소 지정할 수 있는 "코프로세서"를 통해 명령어 집합을 확장하는 비침해적인 방법을 제공한다. 코프로세서 공간은 논리적으로 0부터 15까지 16개의 코프로세서로 나뉘며, 코프로세서 15(cp15)는 캐시 및 MMU 작업 관리와 같은 일부 일반적인 제어 기능을 위해 예약되어 있다.
ARM 기반 기기에서 주변 장치는 일반적으로 물리적 레지스터를 ARM 메모리 공간, 코프로세서 공간에 매핑하거나 프로세서에 연결된 다른 장치(버스)에 연결하여 프로세서에 연결된다. 코프로세서 접근은 지연 시간이 짧으므로, 일부 주변 장치(예: XScale 인터럽트 컨트롤러)는 메모리를 통해서와 코프로세서를 통해서 모두 접근할 수 있다.
다른 경우, 칩 설계자는 코프로세서 메커니즘을 사용하여 하드웨어만 통합한다. 예를 들어, 이미지 처리 엔진은 특정 HDTV 트랜스코딩 기본 요소를 지원하는 특수 연산을 가진 코프로세서와 결합된 작은 ARM7TDMI 코어일 수 있다.
모든 최신 ARM 프로세서에는 하드웨어 디버깅 기능이 포함되어 있어 소프트웨어 디버거가 리셋부터 코드의 정지, 단계별 실행, 중단점 설정과 같은 작업을 수행할 수 있다. 이러한 기능은 JTAG 지원을 사용하여 구축되지만, 일부 최신 코어는 ARM의 자체 2선 "SWD" 프로토콜을 선택적으로 지원한다. ARM7TDMI 코어에서 "D"는 JTAG 디버그 지원을 나타내고, "I"는 "EmbeddedICE" 디버그 모듈의 존재를 나타냈다. ARM7 및 ARM9 코어 세대의 경우, JTAG를 통한 EmbeddedICE는 사실상 디버그 표준이었지만 아키텍처적으로 보장된 것은 아니었다.
ARMv7 아키텍처는 아키텍처 수준에서 기본적인 디버그 기능을 정의한다. 여기에는 "디버그 모드"에서의 중단점, 감시점, 명령어 실행이 포함된다. 유사한 기능은 EmbeddedICE에서도 제공되었다. "정지 모드" 및 "모니터" 모드 디버깅이 모두 지원된다. 디버그 기능에 접근하는 데 사용되는 실제 전송 메커니즘은 아키텍처적으로 지정되지 않지만, 구현은 일반적으로 JTAG 지원을 포함한다.
별도의 ARM "CoreSight" 디버그 아키텍처가 있으며, 이는 ARMv7 프로세서에 아키텍처적으로 요구되는 것은 아니다.
디버그 액세스 포트.
디버그 액세스 포트(DAP)는 ARM 디버그 인터페이스의 구현이다.
직렬 와이어 JTAG 디버그 포트(SWJ-DP)와 직렬 와이어 디버그 포트(SW-DP)의 두 가지 지원되는 구현이 있다.
CMSIS-DAP는 호스트 PC의 다양한 디버깅 소프트웨어가 USB를 통해 하드웨어 디버거에서 실행되는 펌웨어와 통신하는 방법을 설명하는 표준 인터페이스이며, 이 펌웨어는 SWD 또는 JTAG를 통해 CoreSight 지원 ARM Cortex CPU와 통신한다.
DSP 향상 명령어.
디지털 신호 처리 및 멀티미디어 애플리케이션을 위한 ARM 아키텍처를 개선하기 위해 DSP 명령이 명령어 집합에 추가되었다. 이는 ARMv5TE 및 ARMv5TEJ 아키텍처 이름의 "E"로 표시된다. E-변형은 또한 T, D, M, I를 의미한다.
새로운 명령어들은 DSP 아키텍처에서 흔히 볼 수 있다. 여기에는 부호 있는 곱셈-누산 변형, 포화 더하기 및 빼기, 선행 0 계산이 포함된다.
1999년에 처음 도입된 이 코어 명령어 집합 확장은 이전에 "피콜로"로 알려진 ARM의 DSP 코프로세서와 대조를 이뤘다. 피콜로는 별도의 프로그램 카운터를 사용하는 호환되지 않는 별개의 명령어 집합을 사용했다. 피콜로 명령어는 16개의 32비트 레지스터로 구성된 별개의 레지스터 파일을 사용했으며, 일부 명령어는 레지스터를 결합하여 48비트 누산기로 사용하고 다른 명령어는 16비트 하프 레지스터를 직접 다뤘다. 일부 명령어는 두 개의 16비트 값을 병렬로 처리할 수 있었다. 피콜로 레지스터 파일과의 통신은 8개의 32비트 항목으로 구성된 두 개의 버퍼를 통해 피콜로 로드 및 피콜로 저장 코프로세서 명령을 통해 이루어졌다. 히타치의 SH-DSP 및 모토로라의 68356과 같은 다른 접근 방식을 연상시킨다고 설명된 피콜로는 전용 로컬 메모리를 사용하지 않았고, DSP 피연산자 검색을 위해 ARM 코어의 대역폭에 의존하여 동시 성능에 영향을 미쳤다. 피콜로의 별개의 명령어 집합은 또한 "좋은 컴파일러 대상"이 아니라는 것이 입증되었다.
멀티미디어용 SIMD 확장.
ARMv6 아키텍처에 도입된 이 기능은 고급 SIMD의 전신이었고, Neon으로도 불렸다.
Jazelle.
Jazelle DBX (Direct Bytecode eXecution)는 자바 바이트코드를 ARM 아키텍처에서 기존 ARM 및 Thumb 모드와 함께 세 번째 실행 상태(및 명령어 집합)로 직접 실행할 수 있게 해주는 기술이다. 이 상태에 대한 지원은 ARMv5TEJ 아키텍처 및 ARM9EJ-S, ARM7EJ-S 코어 이름의 "J"로 표시된다. 이 상태에 대한 지원은 ARMv6부터(ARMv7-M 프로필 제외) 필수적이지만, 최신 코어는 하드웨어 가속을 제공하지 않는 단순한 구현만 포함한다.
컴파일된 코드 밀도를 개선하기 위해 ARM7TDMI(1994년 출시) 이후의 프로세서들은 자체 상태를 가진 Thumb 압축 명령어 집합을 특징으로 한다. ("TDMI"의 "T"는 Thumb 기능을 나타낸다.) 이 상태에서 프로세서는 ARM 명령어 집합의 하위 집합에 대한 간결한 16비트 인코딩인 Thumb 명령어 집합을 실행한다. 대부분의 Thumb 명령어는 일반 ARM 명령어로 직접 매핑된다. 공간 절약은 명령어 피연산자 중 일부를 암묵적으로 만들고 ARM 명령어 집합 상태에서 실행되는 ARM 명령어에 비해 가능성을 제한하는 데서 비롯된다.
Thumb에서는 16비트 연산 코드가 기능이 적다. 예를 들어, 분기만 조건부일 수 있으며, 많은 연산 코드는 CPU의 일반 목적 레지스터 중 절반만 접근하도록 제한된다. 더 짧은 연산 코드는 일부 연산에 추가 명령어가 필요함에도 불구하고 전반적으로 향상된 코드 밀도를 제공한다. 메모리 포트 또는 버스 폭이 32비트 미만으로 제한되는 상황에서는, 더 짧은 Thumb 연산 코드가 32비트 ARM 코드에 비해 향상된 성능을 제공한다. 이는 제한된 메모리 대역폭을 통해 프로세서로 로드해야 하는 프로그램 코드가 더 적을 수 있기 때문이다.
크레이-1이나 히타치 슈퍼H와 같이 가변 길이(16비트 또는 32비트) 명령어를 가진 프로세서 아키텍처와 달리, ARM 및 Thumb 명령어 집합은 서로 독립적으로 존재한다. 게임보이 어드밴스와 같은 임베디드 하드웨어는 일반적으로 완전한 32비트 데이터 경로로 접근할 수 있는 소량의 RAM을 가지고 있으며, 대부분은 16비트 또는 더 좁은 보조 데이터 경로를 통해 접근된다. 이러한 상황에서는 일반적으로 Thumb 코드를 컴파일하고 가장 CPU 집약적인 섹션 중 일부를 완전한 32비트 ARM 명령어를 사용하여 수동으로 최적화하여 이러한 더 넓은 명령어를 32비트 버스 접근 가능 메모리에 배치하는 것이 합리적이다.
Thumb 명령어 디코더를 가진 최초의 프로세서는 ARM7TDMI였다. ARM9부터 시작하여 32비트 명령어 집합을 지원하는 모든 프로세서는 XScale을 포함하여 Thumb 명령어 디코더를 포함했다. 여기에는 ARM이 라이선스한 히타치 슈퍼H (1992년)에서 채택된 명령어가 포함된다. ARM의 가장 작은 프로세서 제품군(Cortex M0 및 M1)은 최저 비용 애플리케이션에서 최대 성능을 위해 16비트 Thumb 명령어 집합만 구현한다. 32비트 주소 지정을 지원하지 않는 ARM 프로세서도 Thumb을 생략한다.
Thumb-2.
Thumb-2 기술은 2003년에 발표된 ARM1156 코어에 도입되었다. Thumb-2는 Thumb의 제한된 16비트 명령어 집합을 추가 32비트 명령어로 확장하여 명령어 집합에 더 넓은 범위를 부여함으로써 가변 길이 명령어 집합을 생성한다. Thumb-2의 목표는 32비트 메모리에서 Thumb과 유사한 코드 밀도를 ARM 명령어 집합과 유사한 성능으로 달성하는 것이었다.
Thumb-2는 비트 필드 조작, 테이블 분기, 조건부 실행으로 Thumb 명령어 집합을 확장한다. 동시에 ARM 명령어 집합도 두 명령어 집합에서 동등한 기능을 유지하도록 확장되었다. 새로운 "통합 어셈블리 언어"(UAL)는 동일한 소스 코드에서 Thumb 또는 ARM 명령어를 생성하는 것을 지원한다. ARMv7 프로세서에서 볼 수 있는 Thumb 버전은 기본적으로 ARM 코드만큼 능력이 있다(인터럽트 핸들러 작성 능력 포함). 이는 약간의 주의와 새로운 "IT"(if-then) 명령어를 사용해야 한다. 이 명령어는 테스트된 조건 또는 그 역에 따라 최대 4개의 연속 명령어를 실행할 수 있도록 허용한다. ARM 코드로 컴파일할 때는 이것이 무시되지만, Thumb으로 컴파일할 때는 실제 명령어를 생성한다. 예를 들면:
CMP r0, r1 ; r0과 r1을 비교
ITE EQ ; ARM: 코드 없음... Thumb: IT 명령어
MOVEQ r0, r2 ; ARM: 조건부; Thumb: ITE 'T' (then)를 통한 조건
MOVNE r0, r3 ; ARM: 조건부; Thumb: ITE 'E' (else)를 통한 조건
모든 ARMv7 칩은 Thumb 명령어 집합을 지원한다. ARMv7을 지원하는 Cortex-A 시리즈의 모든 칩, 모든 Cortex-R 시리즈, 모든 ARM11 시리즈는 "ARM 명령어 집합 상태"와 "Thumb 명령어 집합 상태"를 모두 지원하는 반면, Cortex-M 시리즈의 칩은 Thumb 명령어 집합만 지원한다.
Thumb 실행 환경 (ThumbEE).
Jazelle RCT (Runtime Compilation Target)로 판매되었던 ThumbEE(일부 ARM 문서에서는 Thumb-2EE로 잘못 불림)는 2005년에 발표되었고 2011년에 사용이 중단되었다. 이는 Cortex-A8 프로세서에서 처음 등장했다. ThumbEE는 Thumb-2 확장 명령어 집합에 작은 변경 사항을 적용하여 네 번째 명령어 집합 상태를 제공한다. 이러한 변경 사항은 관리형 실행 환경에서 런타임에 생성된 코드(예: JIT 컴파일)에 특히 적합하도록 명령어 집합을 만든다. ThumbEE는 자바, C 샤프, 펄, 파이썬과 같은 언어의 대상이며, JIT 컴파일러가 성능 저하 없이 더 작은 컴파일된 코드를 출력할 수 있도록 한다.
ThumbEE가 제공하는 새로운 기능에는 모든 로드 및 스토어 명령어에 대한 자동 널 포인터 검사, 배열 경계 검사를 수행하는 명령어, 핸들러를 호출하는 특수 명령어가 포함된다. 또한, Thumb-2 기술을 활용하므로 ThumbEE는 레지스터 r8–r15(Jazelle/DBX Java VM 상태가 저장되는 곳)에 접근할 수 있도록 한다. 핸들러는 자주 호출되는 코드의 작은 부분으로, 새로운 객체를 위한 메모리 할당과 같은 고수준 언어를 구현하는 데 일반적으로 사용된다. 이러한 변경 사항은 몇몇 연산 코드를 재활용하고, 코어가 새로운 ThumbEE 상태에 있다는 것을 아는 데서 비롯된다.
2011년 11월 23일, ARM은 ThumbEE 명령어 집합의 모든 사용을 중단했고, Armv8은 ThumbEE 지원을 제거한다.
부동소수점 (VFP).
VFP (Vector Floating Point) 기술은 ARM 아키텍처에 대한 FPU 코프로세서 확장이며 (Armv8에서는 다르게 구현되며 – 코프로세서는 거기에 정의되어 있지 않다). 이는 ANSI/IEEE Std 754-1985 이진 부동소수점 산술 표준을 완전히 준수하는 저비용의 단정밀도 및 배정밀도 부동소수점 연산을 제공한다. VFP는 PDA, 스마트폰, 음성 압축 및 압축 해제, 3차원 그래픽 및 디지털 오디오, 프린터, 셋톱박스, 자동차 애플리케이션과 같은 광범위한 애플리케이션에 적합한 부동소수점 연산을 제공한다. VFP 아키텍처는 짧은 "벡터 모드" 명령어 실행을 지원하기 위한 것이었지만, 이들은 각 벡터 요소를 순차적으로 처리했기 때문에 진정한 SIMD 벡터 병렬 처리의 성능을 제공하지 못했다. 따라서 이 벡터 모드는 도입 직후 제거되었고, 훨씬 더 강력한 고급 SIMD(Neon으로도 불림)로 대체되었다.
ARM Cortex-A8과 같은 일부 장치는 전체 VFP 모듈 대신 축소된 VFPLite 모듈을 가지고 있으며, 부동소수점 연산당 약 10배 더 많은 클럭 사이클을 요구한다. Armv8 이전 아키텍처는 코프로세서 인터페이스를 통해 부동소수점/SIMD를 구현했다. ARM 기반 프로세서에서 코프로세서 인터페이스를 사용하는 다른 부동소수점 및 SIMD 장치에는 FPA, FPE, iwMMXt가 포함되며, 일부는 트랩을 통해 소프트웨어로 구현되었지만 하드웨어로 구현될 수도 있었다. 이들은 VFP와 동일한 기능 중 일부를 제공하지만 opcode 호환성은 없다. FPA10은 또한 확장 정밀도를 제공하지만, IEEE 754에서 요구하는 정확한 반올림은 단정밀도에서만 구현한다.
데비안 리눅스 및 우분투와 리눅스 민트와 같은 파생 배포판에서 armhf (ARM 하드 플로트)는 추가 VFP3-D16 부동소수점 하드웨어 확장(및 Thumb-2)을 포함하는 ARMv7 아키텍처를 의미한다. 소프트웨어 패키지와 크로스 컴파일러 도구는 armhf 대 arm/armel 접미사를 사용하여 구별한다.
고급 SIMD (Neon).
고급 SIMD 확장 (Neon 또는 "MPE" Media Processing Engine으로도 알려짐)은 미디어 및 신호 처리 애플리케이션을 위한 표준화된 가속을 제공하는 64비트 및 128비트 SIMD 명령어 집합이다. Neon은 모든 Cortex-A8 장치에 포함되지만, Cortex-A9 장치에서는 선택 사항이다. Neon은 10 MHz로 작동하는 CPU에서 MP3 오디오 디코딩을 실행할 수 있으며, 13 MHz에서 GSM 적응형 멀티레이트 (AMR) 음성 코덱을 실행할 수 있다. 포괄적인 명령어 집합, 별도의 레지스터 파일, 독립적인 실행 하드웨어를 특징으로 한다. Neon은 8비트, 16비트, 32비트, 64비트 정수 및 단정밀도(32비트) 부동소수점 데이터와 오디오 및 비디오 처리, 그래픽 및 게임 처리를 위한 SIMD 연산을 지원한다. Neon에서 SIMD는 최대 16개의 연산을 동시에 지원한다. Neon 하드웨어는 VFP에서 사용되는 부동소수점 레지스터를 공유한다. ARM Cortex-A8 및 Cortex-A9와 같은 장치는 128비트 벡터를 지원하지만 한 번에 64비트로 실행하며, 최신 Cortex-A15 장치는 한 번에 128비트로 실행할 수 있다.
Armv7 장치의 Neon의 특이한 점은 모든 서브노멀 수를 0으로 플러시한다는 것이다. 그 결과 GCC 컴파일러는 데노멀 손실을 허용하는 가 켜져 있지 않으면 Neon을 사용하지 않는다. Armv8 이후 정의된 "향상된" Neon은 이러한 특이한 점이 없지만, 현재까지 Neon 명령어를 활성화하려면 동일한 플래그가 여전히 필요하다. 반면에 GCC는 AArch64에서 Armv8에 대해 Neon을 안전하다고 간주한다.
ProjectNe10은 ARM의 첫 번째 오픈 소스 프로젝트이다(시작부터; 이전 프로젝트를 인수하여 현재 Mbed TLS라는 이름이 붙었다). Ne10 라이브러리는 Neon과 C(호환성을 위해)로 작성된 공통적이고 유용한 함수들의 집합이다. 이 라이브러리는 개발자들이 Neon 최적화를 배우지 않고도 Neon을 사용할 수 있도록 만들어졌지만, 일반적인 DSP, 산술 및 이미지 처리 루틴에 대한 고도로 최적화된 Neon 내장 함수 및 어셈블리 코드 예제 세트 역할도 한다. 소스 코드는 GitHub에서 사용할 수 있다.
ARM 헬륨 기술.
헬륨은 M-프로필 벡터 확장(MVE)이다. 150개 이상의 스칼라 및 벡터 명령을 추가한다.
보안 확장.
TrustZone (Cortex-A 프로필용).
TrustZone 기술로 판매되는 보안 확장은 ARMv6KZ 및 이후 애플리케이션 프로필 아키텍처에 있다. 하드웨어 기반 접근 제어로 지원되는 두 개의 가상 프로세서를 제공하여 SoC에 다른 전용 보안 코어를 추가하는 저렴한 대안을 제공한다. 이를 통해 애플리케이션 코어는 두 가지 상태, 즉 월드(기능 도메인의 다른 이름과의 혼동을 줄이기 위해) 사이를 전환하여 더 신뢰할 수 있는 월드에서 덜 신뢰할 수 있는 월드로 정보가 유출되는 것을 방지할 수 있다. 이 월드 전환은 일반적으로 프로세서의 다른 모든 기능과 직교하므로, 각 월드는 동일한 코어를 사용하면서 서로 독립적으로 작동할 수 있다. 그런 다음 메모리와 주변 장치는 코어의 작동 월드를 인식하고 이를 사용하여 장치의 비밀 및 코드에 대한 접근 제어를 제공할 수 있다.
일반적으로, 풍부한 운영 체제는 덜 신뢰할 수 있는 월드에서 실행되고, 더 작은 보안 특화 코드는 더 신뢰할 수 있는 월드에서 실행되어 공격 표면을 줄이는 것을 목표로 한다. 일반적인 응용 프로그램에는 ARM 기반 장치에서 미디어 사용을 제어하는 DRM 기능과 장치의 무단 사용 방지가 포함된다.
실제로, 독점 TrustZone 구현의 특정 세부 사항이 공개적으로 검토를 위해 공개되지 않았기 때문에, 주어진 위협 모델에 대해 어떤 수준의 보장이 제공되는지는 불분명하지만, 공격에 면역되지 않는다.
Open Virtualization은 TrustZone을 위한 트러스트 월드 아키텍처의 오픈 소스 구현이다.
AMD는 TrustZone 기술을 라이선스하여 보안 프로세서 기술에 통합했다. AMD의 APU에는 보안 처리를 담당하는 Cortex-A5 프로세서가 포함되어 있으며, 일부 제품에서 활성화되지만 모든 제품에서 활성화되는 것은 아니다. 실제로 Cortex-A5 TrustZone 코어는 이전 AMD 제품에도 포함되어 있었지만, 시간 제약으로 인해 활성화되지 않았다.
삼성 녹스는 TrustZone을 사용하여 커널 수정 감지, 인증서 저장, 키 증명 등의 목적으로 사용한다.
Armv8-M용 TrustZone.
Armv8-M용 TrustZone 기술로 판매되는 보안 확장은 Armv8-M 아키텍처에 도입되었다. Armv8-A용 TrustZone과 유사한 개념을 포함하지만, 월드 전환이 예외를 사용하는 대신 분기 명령을 사용하여 수행되므로 아키텍처 설계가 다르다. 또한 현재 보안 상태와 관계없이 어느 월드에서든 안전하게 인터리브된 인터럽트 처리를 지원한다. 이러한 기능들은 보안 월드로의 낮은 지연 시간 호출과 응답성이 뛰어난 인터럽트 처리를 제공한다. ARM은 Trusted Firmware for M 및 PSA Certified 형태의 보안 월드 코드 참조 스택을 제공한다.
실행 금지 페이지 보호.
ARMv6부터 ARM 아키텍처는 실행 금지(eXecute Never)를 의미하는 XN으로 불리는 실행 금지 페이지 보호를 지원한다.
대규모 물리 주소 확장 (LPAE).
대규모 물리 주소 확장(LPAE)은 물리 주소 크기를 32비트에서 40비트로 확장하며, 2011년 Armv7-A 아키텍처에 추가되었다.
물리 주소 크기는 64비트(Armv8-A) 아키텍처 기반 프로세서에서 더 커질 수 있다. 예를 들어, Cortex-A75 및 Cortex-A65AE에서는 44비트이다.
Armv8-R 및 Armv8-M.
Armv8-A 아키텍처 이후에 발표된 Armv8-R 및 Armv8-M 아키텍처는 Armv8-A와 일부 기능을 공유한다. 그러나 Armv8-M은 64비트 AArch64 명령어를 포함하지 않으며, Armv8-R은 원래 AArch64 명령어를 포함하지 않았지만, 나중에 Armv8-R에 추가되었다.
Armv8.1-M.
2019년 2월에 발표된 Armv8.1-M 아키텍처는 Armv8-M 아키텍처의 향상된 버전이다. 여기에는 다음과 같은 새로운 기능이 포함된다.
64/32비트 아키텍처.
Armv8.
Armv8-A.