블랙핀

블랙핀 BF535
블랙핀(Blackfin)은 16/32 비트 마이크로프로세서(CPU) 계열이다. 보통 디지털 신호 처리장치(DSP) 기능을 내장한다.
예전에 DSP는 전통적으로 전력 소모를 절감할 수 있는 마이크로콘트롤러에 붙었었다. 하지만, DSP 장치를 CPU 안으로 임베딩함으로써, 리얼 타임 H.264 비디오 인코딩 같은 복잡한 수치 연산 작업을 해내는 동시에 운영 체제를 돌릴 수 있는 저전력 통합 프로세서 아키텍처가 나오기 시작하였는데, 그 중 하나가 블랙핀 패밀리이다.
블랙핀 프로세서에는 여러 하드웨어 개발 도구가 딸려온다. 블랙핀 용 uClinux 포트도 나와 있다. 현재 이 마이크로프로세서 패밀리는 아날로그 디바이시즈 사가 제조하고 있다.

**아키텍처**
블랙핀 프로세서(Blackfin Processor)는 SIMD 아키텍처에 기반한 32비트 마이크로콘트롤러 유닛(MCU) 프로그래밍 모델을 사용한다. 이는 인텔, 아날로그 디바이시즈, MSA(마이크로 시그날 아키텍처) 사가 공동 개발했다.
블랙핀 프로세서 아키텍처는 2000년 12월에 발표되었다. 2001년 6월에 임베디드 시스템즈 콘퍼런스(Embedded Systems Conference)에서 시연되었다.
블랙핀 아키텍처는 아날로그 디바이시즈(ADI) 사의 SHARC 아키텍처와, 인텔의 Xscale 아키텍처의 장점을 취합하여 싱글 코어에 집어 넣은 것이라 말할 수 있다. 또한 DSP와 마이크로콘트롤러 기능도 함께 내장한다. 코어 아키텍처 중 블랙핀/MSA과 Xscale/ARM 혹은 SHARC 사이에는 많은 차이가 존재하기는 하나, 이 조합은 예전의 DSP 혹은 RISC 아키텍처 디자인보다 성능, 프로그램 가능성(programmability) 및 전력 소모 등의 면에 있어서 더 나은 것으로 알려져 있다.
블랙핀 아키텍처에 해당하는 CPU 모델은 꽤 많이 존재한다. 특수한 응용(목적)에 사용되는 변종이 많다. 요약하면 다음과 같다:
아날로그 디바이시즈 사는 제품 목록을 다음 웹페이지에 나열하고 있다: 
위의 표에 나온 특징 외에도, 모든 블랙핀 프로세서는 다음과 같은 장치를 포함한다:- 인-시스템 디버깅을 위한 디버그/JTAG 인터페이스- 리얼 타임 클럭- 인터널 코어 전압 스위칭 레귤레이터- 와치독 타이머(Watchdog timer)- 타이머(들)/PWM 출력(들)/PWM 캡처 포트(들)- 코어 타이머(core timer, 코어 클럭 스피드와 동일한 클럭으로 작동)

**아키텍처의 특징**

**코어의 특징**
블랙핀에는 다음과 같은 다양한 측면이 있다.- 블랙핀은 디지털 신호 처리장치(DSP)이다. 두 개의 16 비트 하드웨어 곱셈-덧셈(MAC) 명령, 두 개의 40 비트 산술 논리 장치, 40 비트 배럴 쉬프터를 갖추고 있다. 클럭 사이클 하나 당 최대 3개의 인스트럭션의 수행(execute)이 가능하다. 이는 컴파일러의 최적화 레벨에 의해 좌우된다. (혹은 프로그래머가 어떻게 코드를 작성했느냐에 따라 좌우된다.)- 다른 측면에서는, 블랙핀은 RISC 코어이다. 메모리 보호(memory protection), 차별화된 동작 모드(유저, 커널), 싱글-사이클 오피코드(opcode), 데이터 및 명령어 캐시, 비트 테스트(bit test)를 위한 인스트럭션, 바이트•워드•정수 접근을 위한 명령어 등을 제공하며, 또한 다양한 종류의 온-칩 장치(peripherals)를 제공한다.
블랙핀의 명령어 집합 구조는 하이 레벨(high level)의 표현 유연성(expressiveness)을 갖추고 있다. 어셈블리 프로그래머(혹은 컴파일러)가 꽤 고수준으로 알고리즘이나 하드웨어 기능을 최적화(옵티마이즈)할 수 있게 해주고 있다.

**메모리 및 DMA**
블랙핀 프로세서는 바이트 단위의 어드레싱을 하는(byte-addressable), 플랫 메모리 맵(flat memory map)을 사용한다. 내부 L1 메모리(internal L1 memory), 내부 L2 메모리(internal L2 memory), 외부 메모리(external memory) 및 모든 메모리-맵트(memory-mapped) 콘트롤 레지스터(control register)들은 이 32 비트 어드레스 공간(address space)에 위치한다.
L1 SRAM 메모리는, 코어 클럭 속도와 동일한 속도의 클럭 하에 동작한다. L1 SRAM 메모리는 하버드 아키텍처를 사용하고 있다. 인스트럭션 메모리와 데이터 메모리가 분리되어 있으며, 각각 전용의 메모리 버스를 통해 코어와 연결된다. 이 때문에, 코어와 L1 메모리 간의 빠른 속도이면서 동시에 지속적인 데이터 전송이 가능하다.
인스트럭션 L1 SRAM 메모리나 데이터 L1 SRAM 메모리의 일부분을 캐시로 선택적으로 바꿔 쓸 수 있다. (각각)
일부 블랙핀 프로세서들은 64KB 내지 256KB 가량의 L2 메모리를 갖추고 있다. 이 메모리는 코어 클럭 속도보다 느리게 작동한다. 인스트럭션과 데이터는 L2에서는 섞일 수 있다.
블랙핀 프로세서는 다양한 종류의 외부 메모리를 지원한다. SDRAM, DDR-SDRAM, NOR 플래시, NAND 플래시, SRAM 등을 지원한다. 일부 블랙핀 프로세서는ATAPI나 SD/SDIO 같은 매스-스토리지 인터페이스를 내장한다. 외부 메모리 공간으로서 수백 메가바이트의 메모리 공간을 가진다.
더러 주변장치와 메인(즉 외부) 메모리 사이에서 작동하는 기업 직접 접근 엔진(DMA engine)도 갖추고 있다. 일반적으로 블랙핀 프로세서들은 각각의 주변장치에 대해 전용의 DMA 채널을 갖고 있다. 이로써 리얼 타임 SD급(D1) 비디오 인코딩 및 디코딩을 가능케 하는 높은 스루풋이 달성 가능하다.

**마이크로콘트롤러 기능**
블랙핀 아키텍처는 마이크로프로세서나 마이크로콘트롤러가 흔히 갖추고 있는 기능들 몇 가지도 내장하고 있다.- 메모리 보호 장치 : 모든 블랙핀 프로세서는 메모리 보호 장치(MPU)를 갖추고 있다. MPU는 전체 메모리 공간에 대해 보호 기능을 제공하며 캐시 스트라테지즈(caching strategies)를 적용시켜준다. MPU가 있는 까닭에, 완전한 형태의 운영체제, RTOS, ThreadX ·µC/OS-II · (noMMU) 리눅스 같은 커널 지원이 가능하다. 블랙핀 MPU는 예전의 메모리 관리 장치(MMU)이 해줬던 주소 변환 기능을 제공하지는 않는다. 그러므로 가상 메모리(virtual memory)나 프로세스별 독립된 메모리 공간(separate memory address per process)는 지원해주지는 않는다. 이것이 블랙핀이, WinCE나 QNX 같은 가상 메모리를 필요로 하는 운영체제를 지원하지 않는 까닭이다. 혼란스럽게도, 블랙핀 프로세서의 문서에서는, MPU를 MMU라고 칭하고 있다.- 사용자/관리자 모드 : 블랙핀은 세 가지의 런타임 모드를 지원한다: 수퍼바이저, 유저, 에뮬레이션 세 가지의 런타임 모드를 지원한다. 수퍼바이저 모드일 때는 수행중인 프로세스는 모든 프로세서 자원에 접근 가능하다. 유저 모드일 때는, 보호된 시스템 리소스 및 메모리 일부 영역을 접근하지 못한다. 오늘날의 운영체제나 RTOS에서는, 커널(kernel)은 보통 수퍼바이저 모드 상에서 수행되며, 스레드/프로세스들은 유저 모드에서 수행된다. 만약 스레드 하나가 죽었거나 보호된 자원(메모리, 주변장치 등)에 접근하려 했을 경우, 익셉션(exception)이 드로우되어 커널은 그 스레드/프로세스를 죽일 수 있게 된다.- 가변 길이의 RISC 사용자 명령어 집합: 블랙핀은 16, 32, 64 비트 명령어를 제공한다. 자주 사용되는 제어 인스트럭션은 16 비트 오피코드로 인코드된다. 복잡한 DSP 함수나 수치 연산을 많이 필요로 하는 함수는 32 비트 및 64 비트 오피코드로 인코드된다. 가변 길이의 명령어 집합 덕분에, 블랙핀은 오늘날의 마이크로프로세서 아키텍처와 비슷한 코드 덴시티를 갖게 된다.

**미디어 처리 기능**
블랙핀 명령어 집합은 미디어 처리를 위한 확장 명령어 집합을 갖추고 있다. 영상이나 그림 압축/압축해제 알고리즘에 자주 사용되는 화소 처리 동작을 빠르게 해준다.

**주변 기기**
블랙핀 프로세서는 다음과 같은 주변 기기를 내부에 포함할 수 있다:- USB 2.0 OTG (온-더-고)- ATAPI- MXVR : MOST (미디어 오리엔티드 시스템즈 트랜스포트) 네트워크 인터페이스 콘트롤러. MOST는 SMSC의 등록된 상표이다.- PPI (Parallel Peripheral Interface) : 병렬 입출력 포트이다. LCD나 비디오 인코더(video DACs), 비디오 디코더(video ADCs), CMOS 센서, CCD, 일반적인 병렬의 고속 장치 등에 연결할 때 쓰인다. 최대 65MHz로서 동작 가능하며, 너비는 8 내지 16 비트이다.- SPORT : 싱크로너스(synchronous) 하이 스피드 시리얼 포트이다. TDM, I2S, ADC, DAC, 다른 프로세서, FPGA를 연결하는 데 쓰이는 입출력 포트이다.- 콘트롤러 에이리어 네트워크 : 와이드 에이리어, 로-스피드 시리얼 버스이다. 공장 자동화 업계, 자동차 제조업계에서 꽤 많이 쓰인다.- UART (Universal Asynchronous Receiver Transmitter) : RS232 장치들 (PC, 모뎀, PC 주변장치 등), MIDI 장치, IRDA 장치 등과 통신하는 데 쓰인다.- Serial Peripheral Interface : (비교적) 하이-스피드인 임베디드 일렉트로닉스와의 인터페이스이다.- I²C (다른 말로, TWI (two-wire interface)) : 낮은 속도의, (공유되는) 직렬 버스이다.
모든 주변장치 콘트롤 레지스터들은 일반적인 주소 공간 위의 메모리 맵 입출력으로 동작한다.

**개발 도구 소프트웨어**
ADI 사는 고유의 소프트웨어 개발 툴체인(toolchain)인, 크로스코어(비주얼디에스피++)(CROSSCORE(VisualDSP++))를제공한다. 이것 말고도, 그린 힐즈 소프트웨어 사의 MULTI IDE, GNU GCC 툴체인, 내셔널 인스트루먼츠 사의 랩뷰(LabVIEW) 임베디드 모듈 등을 사용할 수 있다.

**블랙핀 소프트웨어 개발 킷 (SDK)**
아날로그 디바이시즈 블랙핀 SDK url=https://web.archive.org/web/20071017034839/http://www.analog.com/processors/platforms/sdk.html는 무료 애플리케이션을 포함한다. 소스 코드도 제공되며, 유틸리티, 툴 등이 제공된다. 이를 가지고 블랙핀 프로세서에 기반한 애플리케이션을 작성할 수 있다. 이 소프트웨어는 프레임워크로서 작동하는데, 예를 들면 블랙핀 프로세서와 붙은 주변장치의 특정 기능을 어떻게 이용할 수 있을까 알려주는 프레임워크로서 작동한다.

**지원되는 운영체제, RTOS 및 커널**
블랙핀은 다음과 같은 상용/오픈 소스 운영체제를 지원한다:

**블랙핀을 사용하는 상용 디바이스**
 JXD 301 (휴대용 멀티미디어 플레이어 겸 게임기)

**같이 보기**
 SHARC- TigerSHARC

**외부 링크**
 en  블랙핀 프로세서 웹사이트 url=https://web.archive.org/web/20070923064839/http://www.analog.com/processors/blackfin/index.html- en  블랙핀 포럼, 블랙핀 패밀리 사용자들의 웹 커뮤니티- en  리눅스 포 블랙핀, 블랙핀에 대한 다양한 오픈 소스 프로젝트- en  Express Logic RTOS 개발 업체. (블랙핀 용도의 것도 개발)- en  Cambridge Signal Processing 블랙핀을 사용한 컴퓨터 모듈즈.- en  UoC ECE-ADI-Project University of Calgary project homepages (links to other university projects and helpful material).- en  Bluetechnix Blackfin Modules 초소형의 블랙핀 기반 코어 모듈을 만드는 업체- en  PEEDI, 블랙핀 용도의 JTAG 에뮬레이터 및 플래시 프로그래머- en  MP4 Nation url=https://web.archive.org/web/20071113123621/http://www.mp4nation.com/products/index.php?PID=J301, JXD 301에 사용된 블랙핀에 대한 이야기
분류:마이크로프로세서
분류:디지털 신호 처리 장치
분류:명령어 집합 구조
분류:마이크로컨트롤러