SitaraTM 프로세서의 PRU를 활용한 예측 가능한 실시간 응답 달성
오늘날의 복잡한 애플리케이션들은 아주 간단한 범용 시스템이라 할지라도 흔히 예측 가능성, 확정성, 저지연 시간 응답을 필요로 한다. 그런데 이런 특성들은 오직 실시간 프로세싱을 이용해서만 제공할 수 있다. TI의 Sitara 프로세서 제품군은 고성능 ARM Cortex-A 코어에 PRU를 결합함으로써 이 두 세계의 장점을 결합적으로 제공한다.
글/멜리사 왓킨스(Melissa Watkins), 애플리케이션 엔지니어
카를로스 베탄쿠르(Carlos Betancourt), 제품 마케팅 매니저
텍사스 인스트루먼트
오늘날 많은 애플리케이션이 잘 조합된 고속 소프트웨어 프로세싱과 실시간 하드웨어 성능을 필요로 한다. 이는 다시 말해서 고성능이 반드시 실시간 성능으로 이어지는 것은 아니다. 실제로 이 두 성능은 요구사항이 각기 다르고 또 어떤 경우에는 서로 배타적이기까지하여 어느 한 쪽이 다른 한 쪽의 제대로 된 역할 수행을 방해하기도 한다.
예를 들어서 ARMⓡ Cortexⓡ-A 코어 같은 고성능 프로세서는 TI의 Sitara 프로세서에 들어가는 PRU(Programmable Real-Time Unit) 코프로세서 같은 실시간 프로세싱 코어와는 필요로 하는 자원이나 프로세싱 기능들이 전혀 다르다. ARM 코어를 소프트웨어 프로세싱 측면에서 매우 강력하게 하는 특성들이 실시간적 확정성과 예측가능성을 저해하는 작용을 한다. 그런데 오늘날 많은 고도로 정교한 애플리케이션에서는 실시간 성능이 고성능보다 더 중요하지는 않더라도 마찬가지로 중요하게 요구되고 있다.
실시간 성능의 요구사항
데이터 센터는 물론이고 많은 시스템들이 어떤 방식으로든 실시간 프로세싱의 저지연 시간 예측을 필요로 한다. 실제로 HLOS(high-level operating system)를 필요로 하는 많은 범용 시스템들까지도 통신 프로토콜 프로세싱, 오디오 프로세싱, 조명 제어, 센서 모니터링, 공장자동화 및 홈 자동화, 모터 제어 등을 비롯한 실시간 컴포넌트나 서브시스템을 포함하고 있다.
이러한 유형의 시스템들에서는 범용 프로세서(general-purpose processor, GPP)는 성능이 아무리 뛰어나도 실시간 애플리케이션과 서브시스템의 특징이라고 할 수 있는 엄격한 시간 제약 이내에 보장된 응답 시간을 제공하지 못한다. 명령 파이프라인이나 메모리 및 인터커넥트 아키텍처 같이 HLOS(그림 1)를 실행하기에 효과적이도록 하는 GPP의 많은 특성들이 실시간 애플리케이션에서는 역으로 작용한다. 시스템온칩(SoC)에서 GPP 코어를 둘러싼 통상적인 아키텍처는 프로세싱 코어에 내부적이거나 외부적인 것과 또 공유 메모리거나 어느한 코어에 전용인 것을 비롯해서 여러 층에 걸친 메모리를 포함한다. 여기에 더해서 통상적인 SoC 아키텍처는 또한 다양한 온칩 모듈, 주변장치, 그리고 최종적으로는 전용적이거나 범용적인 입/출력(GPIO) 핀을 통해서 칩을 외부로 연결하기 위해서 위해서 다수 층에 걸친 인터 커넥트를 포함한다. 이러한 모든 기능과 구조가 실시간 프로세싱을 방해할 수 있다.
GPP의 주변 아키텍처는 실시간 애플리케이션으로 보장해야 하는 예측 가능한 저지연 시간 응답 시간을 제공하지 못한다. 다양한 수준의 메모리에 들어 있는 데이터를 액세스해야 하고 다수 층에 걸친 인터커넥트의 일부 또는 전부를 거쳐서 통신해야 함으로써 코어의 응답 시간을 추가시키고 응답의 예측 불가능성을 초래한다. 예를 들어서 센서로부터 들어오는 시간에 민감한 인터럽트에 대해서 프로세서의 응답 시간이, 필요한 데이터가 어디에 저장되어 있는지, 그 데이터를 액세스하거나 저장하기 위해서 얼마나 많은 층의 인터커넥트를 거쳐야 하는지, GPP 코어로 현재 얼마만큼의 프로세싱 부하를 처리하고 있는지 등의 여러 요인에 따라서, 그때그때 달라진다. 특정한 GPP아키텍처에 대한 시험에서는 GPIO 핀으로 간단한 토글에 최고 200나노초(ns)가 걸릴 수 있는 것으로 나타낸 데 반해서, GPIO 핀을 직접적으로 액세스하는 실시간 프로세서로는 동일한 토글에 대해서 응답 시간이 5ns로서 40배나 더 빠른 것으로 나타났다. GPP 프로세서는 통상적으로 응답이 더 느릴 뿐만 아니라 실제적으로 응답 시간을 예측할 수 없다. 다시 말해서 GPP가 실시간 이벤트를 처리할 때의 응답 시간이 이벤트 때마다 매번 달라질 수 있다는 것이다.
GPP 코어의 실시간 측면의 한계를 극복하기 위해서 흔히 SoC 아키텍처로 실시간 코프로세서와 같은 특정한 기능들을 도입하고 있다. 아래 그림의 예에서는(그림 2) 텍사스 인스트루먼트(TI)의 PRU가 프로세서 상에서 실시간 서브시스템의 토대를 이루고 있다. 이 같은 아키텍처는 각기 PRU가 각기 자체적인 단일 사이클 I/O를 이용함으로써 SoC가 외부 세계를 직접적으로 신속하게 액세스할 수 있는 수단을 제공한다. 뿐만 아니라 각기 실시간 엔진으로 전용적인 로컬 메모리와 주변장치를 지정함으로써 각기 유닛이 저지연 시간 응답을 보장할 수 있다. 이와 더불어서 외부로부터 들어오는 인터럽트가 다수 층에 걸친 인터커넥트와 메모리를 거쳐야 함으로써 발생되는 지연을 겪을 필요 없이 실시간 프로세싱 엔진을 직접적으로 액세스할 수 있다.
프로그래머블 실시간 유닛(PRU)
Sitara AM335x, AM437x, AM5x 프로세서에서 ARM 코어와 함께 구현하고 있는 PRU(그림 3)는 저지연 시간 확정적 실시간 서브시스템이다. 각각의 PRU 서브시스템은 각기 명령당 5나노초(ns) 사이클 시간인 2개의 200MHz 실시간 코어(또는 PRU)로 이루어져 있다. 이들 실시간 코어는 명령 파이프라인을 이용하지 않으므로 단일 사이클 명령 실행을 보장한다. PRU는 다중의 비트 조작 명령을 이용해서 소규모의 확정적 명령 셋을 제공하므로 학습하고 사용하기가 쉽다.
공유 메모리뿐만 아니라 각기 실시간 코어의 전용적인 명령 및 데이터 메모리는 SoC를 이루고 있는 모든 실시간 및 GPP ARM 코어들 사이에 유연한 프로그램 실행을 가능하게 한다. 어떤 프로그램이나 작업은 특정한 한코어로 실행하는 것이 더 나을 수 있고, 또 다른 프로그램이나 작업은 프로세싱 부하를 다수의 PRU와 ARM 코어에 걸쳐서 공유할 때 더 빠르게 실행할 수 있다. PRU에서 ARM 코어의 인터커넥트 층으로 직접적으로 액세스할 수 있으므로 엄밀하게 결합된 실행이든 독립적인 코어 동작이든 어느 것이나 가능하다.
시스템의 모든 인터커넥트를 액세스할 수 있으므로 PRU는 특정한 프로그램 구현에 필요로 할 때 시스템 내의 어느 자원이든 소환할 수 있다. 뿐만 아니라 각기 PRU서브시스템이 각기 자체적인 전용 주변장치 세트를 갖춤으로써 해당 유닛의 응답성을 보장한다. 이들 주변장치는 PRU의 실시간 코어를 직접적으로 액세스함으로써 시스템 내의 2차 및 3차 인터커넥트로 데이터 트래픽을 유발하지 않는다. Management Data Input/Output(MDIO)과 Media Independent Interface(MII) 같은 다수의 주변장치들이 실시간 이더넷 기능을 가능하게 한다. 그 밖의 PRU 서브시스템 주변장치로 enhanced-Capture(eCAP)와 UART 인터페이스를 포함한다.
인터럽트 컨트롤러를 포함하고 듀얼 코어 PRU 각각에 전용적인 고속 I/O 핀들을 지정함으로써 외부적 이벤트를 면밀하게 모니터링하고 예측 가능한 시간 내에 응답할 수 있다. 각기 PRU는 각기 최대 30개 입력 및 32개 출력을 이용해서 디바이스 패키지 상의 외부적 핀들을 직접적으로 액세스할 수 있다.
두 세계의 장점 결합: ARM과 PRU 코어
TI의 Sitara 멀티코어 프로세서는 ARM Cortex-A 코어와 PRU를 계단식으로 결합하고 있다. 이러한 아키텍처이므로(그림 4) 시스템 설계자가 특정 애플리케이션의 필요에 따라서 고성능 범용 프로세싱과 실시간 성능을 적절히 조합할 수 있다. ARM 코어는 HLOS이든, RTOS(real-time operating system)이든, 아니면 이 둘을 동시에든, 고성능 운영체제 실행에 필요로 하는 모든 자원과 명령 지원을 포함하고 있다.
이와 함께 PRU 코어는 5ns 사이클 시간과 저지연 시간 데이터 전송 및 고속 I/O 액세스이므로 전송과 데이터 조작이 예측 가능한 시간 안에 이루어질 것이라고 신뢰할 수 있다. PRU 코어는 응답 측면의 단순성에 의해서 SPI(Serial Peripheral Interface), I2C(Inter -IC) 버스 인터페이스, 그 밖에 다수의 산업 자동화 프로토콜 등을 비롯해서, 비트 뱅잉(bit-banged) 통신 인터페이스에 특성적으로 적합하다.
일부 최종 장비 아키텍처는 실시간 프로세싱에 FPGA(field programmable gate array)를 이용한다. 내부적으로 통합하고 있는 PRU 코프로세서(그림 4)와 달리, ARM 기반 시스템 프로세서의 외부에 추가하는 FPGA는 BOM(bill of materials)을 증가시킬 수 밖에 없으며, 추가적인 보드 공간을 필요로 하고, 디자인 복잡성을 가중시키고, 시스템 전력 소모를 증가시킨다. 뿐만 아니라 PRU 솔루션을 이용하면 또 다른 이점으로서 시스템 개발자가 공통적인 소프트웨어 코드 베이스를 활용할 수 있으므로 기능 업그레이드를 간소화하고 시스템 간에 걸친 또는 동일 시스템 상에서 멀티프로토콜 프로세싱을 간소화한다. 그러므로 어떤 제품 라인의 다음 모델로 간편하게 코드 베이스를 이전할 수 있으므로 후속 세대 시스템의 개발 시간을 단축할 수 있다.
그림 4에서 보는 Sitara 하드웨어는 ARM 코어와 PRU를 긴밀하게 결합한 소프트웨어 아키텍처(그림 5)에 이용해서 매끄러운 고속 애플리케이션 프로세싱을 달성할 수 있다. 통상적으로 ARM 코어로 실행하기 위한 리눅스 커널은 PRU 서브시스템에 이용하도록 RemoteProc과 rpmsg 커널 드라이버를 포함한다. RemoteProc은 기본적 제어 메커니즘으로서, ARM 코어가 PRU 펌웨어를 로드할 수 있게 하므로 PRU 프로세싱과 기타 기능들을 가능하게 한다. rpmsg 드라이버를 통해서는 사용자 공간 애플리케이션과 PRU가 메시지(버퍼)를 주고받을 수 있다.
애플리케이션
단순 구현의 PRU에 포괄적인 리소스를 결합함으로써 다양한 유형의 실시간 작업, 서브시스템, 애플리케이션 모듈에 이용할 수 있는 범용성 뛰어난 프로세싱 엔진을 달성할 수 있다. 이미 설계자들은 PRU를 활용해서 스텝퍼 모터 제어 유닛 같은 간단한 서브시스템에서부터, 비트 뱅잉 통신 프로세서, 카메라나 LCD 디스플레이 인터페이스 같은 좀더 복잡한 작업으로의 센서 인터페이스, 스마트 카드 프로세싱, 이더넷 산업 자동화 프로토콜 프로세싱 같은 매우 복잡한 애플리케이션에 이르는 다양한 유형의 애플리케이션을 구현하고 있다.
PRU를 활용한 또 다른 좀더 흥미로운 애플리케이션은 3D 프린터이다(그림 6). 이 예에서는 설계자가 Sitara AM335x 프로세서를 기반으로 한 BeagleBone 개발 보드를 활용하였다. ARM Cortex-A8 코어로는 리눅스, 사용자 인터페이스, 모델 프로세싱을 실행하고, PRU를 이용해서는 5개 스텝퍼 모터의 실시간 제어를 수행하고 있다.
ARM 코어와 PRU 사이의 통신을 위해서 공유 메모리 구역을 지정하고 있다.
요약
오늘날의 복잡한 애플리케이션들은 아주 간단한 범용 시스템이라 할지라도 흔히 예측 가능성, 확정성, 저지연시간 응답을 필요로 한다. 그런데 이런 특성들은 오직 실시간 프로세싱을 이용해서만 제공할 수 있다. TI의 Sitara프로세서 제품군은 고성능 ARM Cortex-A 코어에 PRU를 결합함으로써 이 두 세계의 장점을 결합적으로 제공한다. 단일 패키지로 범용 프로세서와 실시간 프로세서의 이점들을 결합적으로 제공함으로써 완제품의 비용과 전력소모를 최적화할 수 있을 뿐만 아니라 효율적인 재프로그래밍을 통해서 유연하게 기능 업그레이드가 가능하다.
<반도체네트워크 10월>