KR20080010377A - 신호 처리 장치 - Google Patents
신호 처리 장치 Download PDFInfo
- Publication number
- KR20080010377A KR20080010377A KR1020077001405A KR20077001405A KR20080010377A KR 20080010377 A KR20080010377 A KR 20080010377A KR 1020077001405 A KR1020077001405 A KR 1020077001405A KR 20077001405 A KR20077001405 A KR 20077001405A KR 20080010377 A KR20080010377 A KR 20080010377A
- Authority
- KR
- South Korea
- Prior art keywords
- data
- scu
- signal processing
- input
- pixel
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Image Processing (AREA)
- Image Input (AREA)
Abstract
기억 수단에의 액세스를 수반하는 처리에 있어서 처리 능력을 높일 수 있는 신호 처리 장치를 제공한다. 스트림 제어 유닛(SCU)(203_0∼3)은, 호스트 프로세서로부터의 제어에 의한 쓰레드에 따라서, 외부 메모리 시스템 혹은 로컬 메모리(204_0∼3)에 데이터의 액세스를 행한다. 프로세서 유닛(PU) 어레이(202_0∼202_3)는, SCU(203_0∼3)의 쓰레드와는 별도의 쓰레드로 화상 처리를 행한다.
스트림 제어 유닛(SCU), 프로세서 유닛(PU) 어레이, 스트림 레지스터, 사각형 화상 영역, 화소 데이터, 기억 영역, 프로세서 엘리먼트(PE), 스트림 레지스터
Description
본 발명은, 신호 처리 장치에 관한 것이다.
본 발명은, 특히, 화상 처리에 적합한, 신호 처리 장치에 관한 것이다.
예를 들면, 일본 특허 공개 평성 O6-4690호 공보는, CCD(Charge Coupled Device)나 CMOS(Complementary Metal Oxide Semiconductor) 등의 촬상 소자로부터 입력된 동화상 혹은 정지 화상의 촬상 정보를 처리하여, 표시 혹은 기록을 행하기 위한 화상 처리 장치를 개시하고 있다.
이 화상 처리 장치는, 예를 들면, 촬상 정보를 구성하는 화소 데이터를 병렬로 연산 처리함으로써, 처리 시간의 단축을 도모하고 있다.
또한, 이 화상 처리 장치에서는, 메모리에 대한 화소 데이터의 판독 및 기입 처리(메모리 액세스)와, 화소 데이터를 이용한 연산 처리를 동일한 쓰레드에 기초하여 동기해서 행하고 있다.
<발명의 개시>
<발명이 해결하고자 하는 과제>
화상 처리 장치의 처리 능력을 더욱 향상시키고자 하는 요청이 있다.
마찬가지의 요청은 화상 처리 이외의 처리에 있어서도 있다.
본 발명의 목적은, 기억 수단에의 액세스를 향상시켜 신호 처리 능력을 향상시키는 신호 처리 장치를 제공하는 데에 있다.
본 발명에 따르면, 기억부와, 상기 적어도 1개의 기억부 중 어느 소정의 1개의 기억부에의 데이터의 판독 및/또는 기입을 제어하는 입출력 데이터 제어부(SCU)와, 상기 입출력 데이터 처리부가 판독한 데이터에 대하여 소정의 신호 처리를 행하는 신호 처리부(PU 어레이 혹은 PU_SIMD)를 갖는 신호 처리 장치에 있어서, 상기 입출력 데이터 제어부와, 상기 신호 처리부는 별도의 쓰레드에 기초하여 동작하는 신호 처리 장치가 제공된다.
<발명의 효과>
본 발명에 따르면, 기억 수단에의 액세스를 수반하는 처리에 있어서, 서로 다른 쓰레드를 이용함으로써, 화상 처리 능력을 더욱 높일 수 있는 신호 처리 장치를 제공할 수 있었다.
도 1은 본 발명의 신호 처리 장치의 실시 형태에 관한 화상 처리 장치의 전체 구성도.
도 2는 도 1에 도시한 화상 처리 엔진의 구성도.
도 3은 도 2에 도시한 프로세서 유닛(PU) 어레이의 구성도.
도 4는 도 3에 도시한 PU의 구성도.
도 5는 PU 어레이에 할당하는 화상 영역을 설명하기 위한 도면.
도 6은 복수의 프로세서 엘리먼트(PE)에 처리를 할당하는 화소 데이터를 설명하기 위한 도면.
도 7은 필터 처리에 있어서의 복수의 PE의 할당을 설명하기 위한 제1 부분도.
도 8은 필터 처리에 있어서의 복수의 PE의 할당을 설명하기 위한 제2 부분도.
도 9는 필터 처리에 있어서의 복수의 PE의 할당을 설명하기 위한 제3 부분도.
도 10은 필터 처리에 있어서의 복수의 PE의 할당을 설명하기 위한 제4 부분도.
도 11은 도 4에 도시한 PE의 구성도.
도 12는 복수의 PE에 있어서 행하는 필터 처리를 설명하기 위한 제1 부분도.
도 13은 복수의 PE에 있어서 행하는 필터 처리를 설명하기 위한 제2 부분도.
도 14는 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제1 부분도.
도 15는 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제2 부분도.
도 16은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제3 부분도.
도 17은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제4 부분도.
도 18은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제5 부분도.
도 19는 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제6 부분도.
도 20은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제7 부분도.
도 21은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제8 부분도.
도 22는 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제9 부분도.
도 23은 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제10 부분도.
도 24는 도 13에 도시한 필터 처리에 있어서의 각 PE의 스트림 레지스터의 동작을 설명하기 위한 제11 부분도.
도 25는 PU 내의 공유 기능 유닛을 설명하기 위한 도면.
도 26은 도 3 등에 도시한 스트림 제어 유닛(SCU: Stream Control Unit)에 의한 기억 영역의 관리 방법을 설명하기 위한 제1 부분도.
도 27은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제2 부분도.
도 28은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제3 부분도.
도 29는 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제4 부분도.
도 30은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제5 부분도.
도 31은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제6 부분도.
도 32는 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제7 부분도.
도 33은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 제8 부분도.
도 34는 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR_lof4x4_sam」의 실행 처리를 설명하기 위한 도면.
도 35는 도 3 등에 도시한 SCU에 의한 커맨드 「set_bxy」의 실행 처리를 설명하기 위한 도면.
도 36은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR_8x1#to#bxy」의 실행 처리를 설명하기 위한 도면.
도 37은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR4567#lof4x4」의 실행 처리를 설명하기 위한 도면.
도 38은 도 3 등에 도시한 SCU에 의한 커맨드 「set_in#buf#straight」의 실행 처리를 설명하기 위한 도면.
도 39는 도 3 등에 도시한 SCU에 의한 커맨드 「set_in#buf#with#BR#2x1」의 실행 처리를 설명하기 위한 도면.
도 4O는 도 3 등에 도시한 SCU에 의한 커맨드 「set_in#buf#with#BR#4x1」의 실행 처리를 설명하기 위한 도면.
도 41은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#16x1」의 실행 처리를 설명하기 위한 도면.
도 42는 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#32x1」의 실행 처리를 설명하기 위한 도면.
도 43은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x1」의 실행 처리를 설명하기 위한 도면.
도 44는 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x2」의 실행 처리를 설명하기 위한 도면.
도 45는 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x2x2」의 실행 처리를 설명하기 위한 도면.
도 46은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x3」의 실행 처리를 설명하기 위한 도면.
도 47은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x3x3」의 실행 처리를 설명하기 위한 도면.
도 48은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x4」의 실행 처리를 설명하기 위한 도면.
도 49는 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x4x4」의 실행 처리를 설명하기 위한 도면.
도 50은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x9」의 실행 처리를 설명하기 위한 도면.
도 51은 도 3 등에 도시한 SCU에 의한 커맨드 「set_BR#64x9x3」의 실행 처리를 설명하기 위한 도면.
도 52는 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 도면.
도 53은 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 도면.
도 54는 도 3 등에 도시한 SCU에 의한 기억 영역의 관리 방법을 설명하기 위한 도면.
도 55는 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#mask#64x1」의 실행 처리를 설명하기 위한 도면.
도 56은 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#packed#64x1」의 실행 처리를 설명하기 위한 도면.
도 57은 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#64x1」의 실행 처리를 설명하기 위한 도면.
도 58은 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#l28x1」의 실행 처리를 설명하기 위한 도면.
도 59는 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#192x1」의 실행 처리를 설명하기 위한 도면.
도 60은 도 3 등에 도시한 SCU에 의한 커맨드 「set#DR#256x1」의 실행 처리를 설명하기 위한 도면.
도 61은 SCU가 실행하는 커맨드 「exec」를 설명하기 위한 도면.
도 62는 SCU가 실행하는 커맨드 「Branch」를 설명하기 위한 도면.
도 63은 SCU가 실행하는 커맨드 「set」를 설명하기 위한 도면.
도 64는 SCU가 실행하는 커맨드 「addition」을 설명하기 위한 도면.
도 65는 SCU가 실행하는 특수 커맨드, 및 파라미터를 설명하기 위한 도면.
도 66은 SCU와, 프로세서 유닛과의 처리의 관계를 설명하기 위한 도면.
도 67은 SCU에 있어서의 커맨드 및 데이터의 큐 처리를 설명하기 위한 도면.
도 68은 도 2에 도시한 화상 처리 엔진의 그 밖의 구성도.
도 69는, 제2 실시 형태의 화상 처리 엔진(102)의 전체 구성도.
도 70은, 도 69에 도시한 PU 어레이(202_0)의 구성도.
도 71은, 제2 실시 형태에 있어서의 PEn의 구성도.
도 72는, SCU#10의 구조를 도시하는 블록도.
도 73은, 제2 실시 형태에서, 스트림 제어 유닛(SCU: Stream Control Unit)에 의한 기억 영역의 관리 방법을 설명하기 위한 부분도.
도 74는, SCU#10 내부에 설정되는 다중 사각형 화상 영역에 관한 처리를 행하는 기능을 설명하기 위한 도면.
도 75는, 제2 실시 형태에 있어서의 기억 영역 내의 사각형 화상 영역 WIR 내의 사각형 화상 영역 BR의 규정 방법의 일례를 도시하는 도면.
도 76은, 제2 실시 형태에 있어서의 기억 영역 내의 사각형 화상 영역 WOR 내의 사각형 화상 영역 DR의 규정 방법을 일례를 도시하는 도면.
<부호의 설명>
100: 화상 처리 장치
101: 호스트 프로세서
102: 화상 처리 엔진
103: 코덱 엔진
104: 메모리 I/F
105: 메모리 시스템
106: 센서 I/F
107: 카메라 모듈
108: 기록 매체 I/F
109: 기록 매체
110: 내장 표시 장치 I/F
111: 내장 표시 장치
112: 비디오 I/F
201: 제어 프로세서
202_0∼3: 프로세서 유닛(PU) 어레이
203_0∼3: SCU
204_0∼3: 로컬 메모리
PU: 프로세서 유닛
401: 입력 라인 버퍼
403: 공유 기능 유닛
404: 출력 라인 버퍼
PE: 프로세서 엘리먼트
SR0∼2: 스트림 레지스터
ALU: 연산 논리 유닛
<발명을 실시하기 위한 최량의 형태>
<제1 실시 형태>
이하, 본 발명의 신호 처리 장치의 실시 형태에 대해서, 화상 데이터의 처리를 예시하여 설명한다.
우선, 본 실시 형태의 구성 요소와, 본 발명의 구성 요소의 대응 관계를 설명한다.
도 2 등에 도시한 스트림 제어 유닛(SCU: Stream Control Unit)(203_0∼3)이 본 발명의 입출력 데이터 제어부의 일례이다.
도 3 등에 도시한 프로세서 유닛 PU가 본 발명의 신호 처리 회로의 일례이 다.
도 4 등에 도시한 PE가 본 발명의 신호 처리 엘리먼트의 일례이다.
도 1에 도시한 호스트 프로세서(101)가 본 발명의 호스트 처리 회로의 일례이다.
도 1 등에 도시한 메모리 시스템(105) 혹은 도 2 등에 도시한 로컬 메모리(204_0∼3)가 본 발명의 기억부의 일례이다.
본 발명의 기록 매체는, 반도체 메모리, 자기 디스크, 광 디스크, 광 자기 디스크 등의 임의의 기록 매체를 적용할 수 있다.
도 1은, 본 발명의 신호 처리 장치의 일 실시 형태에 관한 화상 처리 장치(100)의 전체 구성도이다.
화상 처리 장치(100)는, 예를 들면, 호스트 프로세서(Host CPU)(101), 화상 처리 엔진(102), 코덱(CODEC) 엔진(103), 메모리 인터페이스(I/F)(104), 메모리 시스템(105), 센서 I/F(106), 카메라 모듈(107), 기억 매체 I/F(108), 기억 매체(109), 내장 표시 장치 I/F(110), 내장 표시 장치(111), 및 비디오 I/F(112)를 갖는다.
화상 처리 장치(100)는, 호스트 프로세서(101)에 의한 화상 처리 엔진(102) 내의 처리의 쓰레드의 제어에 특징을 가지고 있다.
[호스트 프로세서(101)]
호스트 프로세서(101)는, 화상 처리 장치(100) 전체를 제어하는 프로세서이며, 예를 들면, 실시간 오퍼레이팅 시스템(OS)을 동작시키고, 화상 처리 장치(100) 에서 실행되는 각종 태스크의 스케줄링, 기억 매체(109)를 이용한 파일 시스템의 실현, 데이터 입출력 제어 등을 행한다.
[화상 처리 엔진(102)]
화상 처리 엔진(102)은, 프로그래머블한 화상 프로세서이며, 화상 처리 장치(100)에서 실행되는 애플리케이션 프로그램에 따라서 호스트 프로세서(101)가 지시하는 화상 처리를 실행한다.
화상 처리의 대상으로 되는 화상 데이터로서는, 센서 I/F(106)를 통하여 입력되는 카메라 모듈(107)에서 촬영된 데이터, 메모리 I/F(104)를 통하여 입력되는 메모리 시스템(105)에 저장된 데이터, 기억 매체 I/F(108)를 통하여 입력되는 기억 매체(109)에 저장된 데이터, 혹은 코덱 엔진(103)으로부터 공급되는 데이터, 코덱 엔진(103)에서 처리된 데이터가 있다.
화상 처리 엔진(102)은, 자기의 처리 결과를, 메모리 I/F(104)를 통하여 메모리 시스템(105)에 저장하고, 기억 매체 I/F(108)를 통하여 기억 매체(109)에 저장하고, 코덱 엔진(103)에 출력하고, 내장 표시 장치 I/F(110)를 통하여 내장 표시 장치(111)에 표시하거나, 혹은 비디오 I/F(112)를 통하여 외부의 장치에 출력한다.
[코덱 엔진(103)]
코덱 엔진(103)은, 화상 및/또는 음성의 압축 신장을 행하는 유닛이며, 예를 들면 MPEG(Motion Picture Experts Group)-2, MPEG-4, H.264 등의 동화상용 CODEC이나, JPEG(Joint Photographic Coding Experts Group)나 JPEG2000이라고 하는 주 로 정지 화상에 이용되는 CODEC 등을 실현한다.
[메모리 시스템(105)]
메모리 시스템(105)은, 호스트 프로세서(101), 화상 처리 엔진(102), 코덱 엔진(103)에서 처리되는 데이터, 및 호스트 프로세서(101), 화상 처리 엔진(102), 코덱 엔진(103)에서 실행되는 프로그램 PRG를 저장하는 메모리이며, 예를 들면 DRAM을 이용한다.
메모리 I/F(104)는, 상기 메모리 시스템(105)과 시스템 버스(113)를 연결하는 인터페이스이다.
[카메라 모듈(107)]
카메라 모듈(107)은, 렌즈, 조리개, 셔터 등의 광학계 장치, CCD 이미지 센서 혹은 CM0S 이미지 센서 등의 촬상 소자, 이들을 제어하는 컨트롤 유닛을 포함하는 장치이다.
카메라 모듈(107)은, 그 촬상 결과를 디지털 신호로 변환한 후, 센서 I/F(106)를 통하여, 화상 처리 엔진(102), 또는, 메모리 시스템(105)에 출력한다.
호스트 프로세서(101) 혹은 화상 처리 엔진(102)은, 센서 I/F(106)를 통하여, 카메라 모듈(107)에 대하여 제어 신호를 출력한다.
[기록 매체(109)]
기억 매체(109)는, 예를 들면 하드디스크, 플래시 메모리 등의 불휘발성 메모리, DVD(Digital Versatile Disk) 등의 광 디스크, 혹은 테이프형의 기억 매체이 며, 기억 매체 I/F(108)를 통하여 판독 기입이 행하여진다.
[내장 표시 장치(111)]
내장 표시 장치(111)는, 카메라 모듈(107)에서 촬상된 화상을 화상 처리 엔진(102)에서 처리한 결과, 혹은 기억 매체(109)에 저장되어 있는 화상 데이터를 표시한다.
내장 표시 장치(111)는, 내장 표시 장치 I/F(110)를 통하여 입력된 화상 데이터에 따른 화상을 표시한다.
[비디오 인터페이스(112)]
비디오 I/F(112)는, 외부의 화상 표시 장치나 화상 기록 장치에 대하여 화상 데이터를 공급하기 위한 인터페이스이다.
[화상 처리 엔진(102)]
도 2는, 도 1에 도시한 화상 처리 엔진(102)의 구성도이다.
화상 처리 엔진(102)은, 제어 프로세서(CPU)(201), PU(프로세서 유닛) 어레이(202_0∼202_3), 스트림 제어 유닛(SCU: Stream Control Unit)(203_0∼203_3), 및 로컬 메모리(204_0∼204_3)를 갖는다.
화상 처리 엔진(102)에서는, SCU(203_0∼3)와, PU 어레이(202_0∼202_3) 내의 PE가 서로 다른 쓰레드로 동작한다.
제어 프로세서(201)는, 화상 처리 엔진(102) 전체를 제어하는 프로세서이며, PU 어레이(202_0∼202_3) 및 SCU(203_0∼203_3)에 대한 설정이나 기동, 및 SIMD(Single Instruction Multiple Data)형 프로세서 어레이인 PU 어레이(202)에서 의 병렬화가 곤란한 처리의 실행을 담당한다.
PU 어레이(202_0∼202_3)는, 프로그래머블한 연산부이며, 후술하는 바와 같이 복수의 SIMD형 프로세서 어레이로 구성된다.
SCU(203_0∼203_3)는, PU 어레이(202_0∼202_3)가 필요로 하는 데이터를 내부 버스를 통하여 메모리 시스템(105)으로부터 판독하는 경우, 혹은 PU 어레이(202_0∼202_3)가 처리한 결과를 내부 버스를 통하여 메모리 시스템(105)에 기입하는 경우의 데이터 입출력을 제어한다.
로컬 메모리(204_0∼204_3)는, 화상 처리 엔진(102)의 워킹 메모리이며, 메모리 시스템(105)에 저장된 화상 데이터의 일부의 유지, 각각 PU 어레이(202_0∼202_3)에서 처리된 중간 결과의 저장, 각각 PU 어레이(202_0∼202_3)에서 실행되는 프로그램이나 각종 파라미터의 저장 등을 행한다.
화상 처리 엔진(102)은, 호스트 프로세서(101)의 제어에 의해, 예를 들면, 도 2에 도시한 PU 어레이(202_0∼202_3)를 공통의 쓰레드로 동작시킨다.
공통의 쓰레드란, 예를 들면, 공통의 프로그램에 기초하여 처리를 진행시키는 것을 의미한다.
호스트 프로세서(101)의 제어에 의해, SCU(203_0∼203_3)는, PU 어레이(202_0∼202_3)와는 다른 쓰레드로 동작시킨다.
PU 어레이(202_0∼202_3)]
PU 어레이(202_0)에 대하여 설명한다.
PU 어레이(202_1∼202_3)는, PU 어레이(202_0)와 마찬가지의 구성을 가지고 있다.
도 3은, 도 2에 도시한 PU 어레이(202_0)의 구성도이다.
PU 어레이(202_0)는, 4개의 PU_SIMD(Single Instruction Multiple Data) 처리 회로 #0∼#3을 갖는다.
PU_SIMD 처리 회로 #0∼#3은, SCU(Stream Control Unit)(203_0)에 대하여 병렬로 접속되어 있다.
PU_SIMD 처리 회로 #0은, 컨트롤 유닛(303_0)과, 4개의 프로세서 유닛 PU#00∼#03을 갖는다.
4개의 프로세서 유닛 PU#00∼#03은, 동일 명령으로 동작하는 SIMD형 프로세서를 구성한다.
4개의 프로세서 유닛 PU#00∼#03은, 일차원 형상으로 가로 접속되어 있다.
프로세서 유닛 PU#00∼#03 사이의 접속을 인접하는 프로세서 유닛 사이로 한정함과 함께, SCU(203_0)로부터의 데이터 공급에 이용하는 I_BUS0을 4개의 프로세서 유닛에서 공유함으로써, 배선을 적게 할 수 있음과 함께, 버스 제어를 간단하게 할 수 있다.
프로세서 유닛 PU#00∼#03은, 시리얼로 접속한 것에 의해, 인접 화소 데이터를 빈번하게 사용하는 화상 처리에 있어서, SCU(203_0)를 통하지 않고 화소 데이터를 직접적으로, 인접하는 프로세서 유닛에 출력할 수 있어, 처리 시간을 단축할 수 있다.
PU_SIMD 처리 회로 #1∼#3은, PU_SIMD 처리 회로 #0과 마찬가지의 구성을 가 지고 있다.
[프로세서 유닛 PU#00]
도 4는 도 3에 도시한 프로세서 유닛 PU#00의 구성도이다.
프로세서 유닛 PU#00은, 예를 들면, 입력 라인 버퍼(In Line Buffer)(401), 복수개의 프로세서 엘리먼트 PE0∼15, PE 사이에서 공유하는 공용 기능 유닛(Shared Function Unit)(403), 출력 라인 버퍼(404)를 갖는다.
도 4에 도시한 입력 라인 버퍼(401)는, 도 3에 도시한 입력 데이터 버스 I_BUS0에 접속되어 있다.
출력 라인 버퍼(404)는, 34에 도시한 출력 데이터 버스 O_BUS0에 접속되어 있다.
공유 기능 유닛(403) 및 PE0∼15는, 입력 라인 버퍼(401)와 출력 라인 버퍼(404) 사이에 병렬로 접속되어 있다.
PE0∼15는, 도면 중 좌우로 인접하는 PE 간에서 접속을 갖고, 인접하는 PE 사이에서 데이터 교환을 행할 수 있다.
도 3 및 도 4에서 도시한 예에서는, 하나의 프로세서 유닛 PU당 16개의 프로세서 엘리먼트 PE를 갖고, 하나의 PU_SIMD 처리 회로당 4개의 프로세서 유닛 PU를 가지이므로, 합계 64개의 PE로 PU 어레이(202_0∼202_3)의 각각이 구성되어 있다.
도 3에 도시한 바와 같이, 프로세서 유닛 PU 간에는, 도 4에서의 프로세서 엘리먼트 PE 간와 마찬가지의 접속을 갖는다.
즉, 어느 한 프로세서 유닛 PU에 있어서의 우단의 PE15는, 그 우측의 프로세싱 유닛에 있어서의 좌단의 PE0과 접속한다.
구체적으로는, 도 3에 도시한 프로세서 유닛 PU#01의 도 4에 도시한 PE15는, 도 3에 도시한 프로세서 유닛 PU#02의 도 4에 도시한 PE0과 접속되어 있다.
도 4에 도시한 바와 같이, 프로세서 엘리먼트 PE0∼15가, 인접하는 양측의 PE 사이에서만 직접 데이터 입출력을 할 수 있게 구성한 것에 의해, 배선 구조를 매우 간단하게 할 수 있다. 또한, 인접하는 PE0∼15 사이에서 화소 데이터를 입출력하여 공용함으로써, 기억 영역에의 액세스 횟수를 저감할 수 있다.
SCU(Stream Control Unit)(203_0)로부터 입력 데이터 버스 I_BUS0을 통하여 프로세서 유닛 PU#00에 입력된 데이터는, PU#00 내의 입력 라인 버퍼(401)에 기입된다.
프로세서 엘리먼트 PE0∼15 각각은, 입력 라인 버퍼(401)로부터 판독한 데이터를 이용하여 연산을 행하고, 그 연산 결과를 출력 라인 버퍼(404)에 기입한다.
SCU(203_0)는, 출력 라인 버퍼(404)로부터 연산 결과를 판독한다.
도 3에 도시한 바와 같이, PU 어레이(202_0)는, 4개의 PU_SIMD 처리 회로 #0∼#3을 독립하여 병렬로 동작시킬 수도, 직렬 동작시킬 수도 있다. 그 동작 제어는, SCU(203_0)가, 입력 데이터 버스 I_BUS0∼3 및 출력 데이터 버스 O_BUS0∼3을 절환함으로써 실현된다.
도 3에 도시한 컨트롤 유닛(303_0)은, 도시되지 않은 명령 저장용 메모리를 갖고, 그 명령 저장용 메모리로부터 판독한 명령을 디코드하여 얻은 제어 신호를, PU_SIMD#0 내의 모든 PE에 출력한다.
컨트롤 유닛(303_0) 내에는, 여기에는 도시되지 않은 프로그램 플로우 제어용 루프 레지스터나, 후술하는 PE 내의 스트림 레지스터에 액세스하기 위한 포인터 레지스터가 포함된다.
루프 레지스터는, 프로그램 내의 루프 횟수를 제어하는 레지스터이며, 제어 프로세서(201)가 설정하거나, 혹은 프로그램 실행 시에 명령에 의해 설정할 수 있다.
명령에 의해 루프 레지스터를 설정하는 경우에, PE 내의 레지스터값을 소스 오퍼랜드로서 지정할 수 있다. 이 때에는 복수의 PE 중, 미리 결정된 PE, 예를 들면 도면 중 좌단의 PE, 예를 들면, 프로세서 유닛 PU#00의 PE0의 레지스터값을 사용한다.
포인터 레지스터에 대해서도, PE 내의 레지스터값을 소스 오퍼랜드로서 지정할 수 있지만, 루프 레지스터의 경우와 마찬가지로 특정의 PE의 레지스터값을 사용한다.
컨트롤 유닛(303_1 내지 303_3)에 대해서도 마찬가지이다.
카메라 모듈(107)을 이용하여 촬상된 정지 화상을 기록하는 경우를 예로 들어, 화상 처리 장치(100)에서의 처리 수순 및 처리 분배를 설명한다.
카메라 모듈(107) 내의 촬상 소자에서 촬영된 데이터는, 수평 스캔 라인마다 센서 I/F(106)를 통하여 판독되고, 화상 처리 엔진(102)에 출력됨과 함께, 메모리 시스템(105)에 저장된다. 이 때, 화상 처리 엔진(102)에서는, 검파 처리의 일부가 실행된다.
메모리 시스템(105)에 1 프레임 분의 화상 데이터가 저장되면, 화상 처리 엔진(102)은, 내부의 PU_SIMD 처리 회로를 효율적으로 병렬 동작시키기 위해서, 1 프레임 분의 화상 데이터 중, 필요한 사각형 화상 영역을 판독하면서 검파 처리의 나머지나 각종 카메라 신호 처리, 및 각종 화상 처리를 실행한다.
화상 처리 엔진(102)의 처리 결과는, 메모리 시스템(105)에 저장된다.
화상 처리 엔진(102)은, 해상도 변환도 행한다. 해상도 변환된 화상 데이터는, 내장 표시 장치 I/F(110)를 통하여 내장 표시 장치(111)에 표시된다.
코덱 엔진(103)은, 메모리 시스템(105)에 저장되어 있는 화상 처리 엔진(102)에 의해 처리된 복수 프레임의 화상 데이터를 이용하여 화상 압축을 행한다. 압축된 화상 데이터는, 기억 매체 I/F(108)를 통하여 기억 매체(109)에 기록된다.
화상 처리 엔진(102)은, 복수개의 PU 어레이(202_0∼202_3)로 구성되는데, 각각의 PU 어레이(202_0∼202_3)는, 프레임 내의 서로 다른 영역을 처리한다.
본 실시 형태와 같이 4개의 PU 어레이(202_0∼202_3)로 구성하는 경우, 예를 들면 도 5에 도시한 바와 같이 각 PU 어레이(202_0∼202_3)에 영역을 할당할 수 있다.
PU 어레이(202_0∼202_3)의 각각은, 전술한 바와 같이 64개의 PE로 이루어지는 PU_SIMD 처리 회로를 복수개 갖고, 예를 들면 도 6에 도시한 바와 같이, 각 PU 어레이(202_0∼202_3)에 할당한 영역을, 가로 64 픽셀 폭의 사각형 화상 영역으로 더욱 분할하고, 각 픽셀을 1개의 PE에 할당할 수 있다.
이 때, 각 PE는, 도 7에 도시한 바와 같이, 스스로의 할당된 세로 방향의 픽셀 열을 순차로 처리한다.
예를 들면, PU 어레이(202_0)가 도 8에 도시한 바와 같이, 5×5 화소의 필터 처리를 행하는 경우를 생각한다.
이 때, PU 어레이(202_0) 내의 각 PE는, 도 8에 도시한 바와 같이, 처리 대상의 화소 위치 Pixel의 화소 데이터의 필터 처리를 행하기 위해서, 화소 위치 Pixel을 중심으로 한 5×5의 화소 위치의 화소 데이터를 이용한다.
PU 어레이(202_0) 내의 각 PE는, 도 8에 도시한 화살표(도면 중 아래 방향)로 순차로 처리 대상의 화소 위치를 이동시킨다.
PU 어레이(202_0) 내의 각 PE가 화소 위치 Pixel의 상기 5×5 화소의 필터 처리를 종료하면, SCU(203_0)는, 도 9에 도시한 바와 같이, 다음의 1 라인 분의 화소 위치의 화소 데이터를 로컬 메모리(204_0) 혹은 메모리 시스템(105)으로부터 판독하여 도 4에 도시한 PU 어레이(202_0) 내의 프로세서 유닛 PU의 입력 라인 버퍼(401)에 기입한다.
그리고, PU 어레이(202_0) 내의 각 PE는, 도 10에 도시한 바와 같이, 다음의 화소 위치 Pixel_next의 화소 데이터의 5×5 화소의 필터 처리를 행한다.
도 3에 도시한 PU_SIMD#0을 중심으로 설명했지만, PU_SIMD#1∼#3은 PU_SIMD#0과 마찬가지이다.
PU 어레이(202_1∼202_3)는, PU 어레이(202_0)와 마찬가지이다.
[프로세서 엘리먼트 PE]
도 4에 도시한 PEn(n=1∼14)을 설명한다.
또한, PE0은 PE 사이에서는 PE1과의 사이에서만 데이터 입출력을 행하고, PE15는 PE14와의 사이에서만 데이터 입출력을 행하는 점을 제외하고 PEn과 동일하다.
도 11은, 도 4에 도시한 PEn의 구성도이다.
PEn은, 멀티플렉서 MUX1000∼1005, 스트림 레지스터 SR0, SR1, SR2, 레지스터 in0, in1 등의 각종 레지스터, 연산 논리 유닛 ALU를 갖는다.
PEn은, 입력 라인 버퍼(401)로부터 스트림 레지스터 SR0, SR1, SR2에 데이터, 또는, 제어 플래그가 전송되고, 스트림 레지스터 SR0, SR1, SR2로부터 연산 논리 유닛용 레지스터군의 일부에 데이터, 또는, 제어 플래그가 입력된다.
연산 논리 유닛 ALU에서는, 연산 논리 유닛용 레지스터군을 일시 저장처로서 이용하면서 연산이 행해지고, 연산 결과는 출력 라인 버퍼(404)에 기입된다. 이들 일련의 동작은, 내용이 개별로 정해진 명령의 동시, 혹은, 순차 실행에 의해 행해진다.
입력 라인 버퍼(401)에는, 데이터용과 제어 플래그용이 있으며, 각각 1개의 PE당 16 비트와 4 비트이다.
출력 라인 버퍼(404)에도, 입력 라인 버퍼(401)와 마찬가지로, 데이터용과 제어 플래그용이 있으며, 각각 1개의 PE당 16 비트와 4 비트이다.
스트림 레지스터 SR0, SR1, SR2의 엔트리 수는, 각각 16이다.
스트림 레지스터 SR0, SR1의 데이터 길이는 16 비트이고, 스트림 레지스터 SR2의 데이터 길이는 4 비트이다.
여기에서, 스트림 레지스터 SR2가 4 비트인 것은, 스트림 레지스터 SR2가 주로 제어 플래그의 저장에 이용되기 때문이며, 연산 논리 유닛용 레지스터군의 cond 레지스터의 데이터 길이와 같다.
스트림 레지스터 SR0, SR1, SR2는, 주로 SCU(203_0)로부터 입력 라인 버퍼(401)를 통과시켜 공급되는 연산에 필요한 데이터의 저장이나, 연산 결과의 일시 대피를 행할 때에 사용되며, 직접 참조의 이외에 포인터에 의한 참조가 가능하다.
또한, 각 스트림 레지스터 SR0, SR1, SR2마다 최대 4개의 포인터를 정의 가능하고, 각 포인터는, 포인터 정의 영역의 시점을 나타내는 Start값, 포인터 정의 영역의 종점을 나타내는 End값, 현재의 포인터 위치를 나타내는 Current값의 3개의 값을 갖는다.
포인터의 조작에 대해서는, 하기 (1)∼(5)에 도시한 바와 같은 포인터 조작을 실현하는 명령이 있다.
(1) 전술한 4개의 포인터 중에서 선택한 1개의 포인터가 갖는 3개의 값으로부터 선택한 1개의 값을 즉치에 의해 재기입하는 명령.
(2) 전술한 4개의 포인터 중에서 선택한 1개의 포인터가 갖는 3개의 값으로부터 선택한 1개의 값을 PE0 내의 일시 퇴피용 레지스터 temp0∼3, temps의 임의의 1개의 값에 의해 재기입하는 명령. 단, 지정한 값이 반영되기 위해서는 소정의 레 이턴시가 걸린다.
(3) 전술한 4개의 포인터 중에서 선택한 1개의 포인터가 갖는 Current값에 정부의 즉치를 가산하여 재기입하는 명령.
(4) 전술한 4개의 포인터 중에서 선택한 1개의 포인터가 갖는 Current값을 동일한 포인터의 Start값으로 재기입하는 명령.
(5) 전술한 4개의 포인터 중에서 선택한 1개의 포인터가 갖는 3개의 값으로부터 선택한 1개의 값을 판독하고, 그 값에 의해 PU_SIMD 내의 전체 PE에 있어서 일시 퇴피용 레지스터 temp0∼3, temps의 임의의 1개를 재기입하는 명령.
이상과 같은 구성에 의한 스트림 레지스터 SR0, SR1, SR2는, 예를 들면, 2종류의 포인터를 이용하여, 제1 포인터를 라이트(WRite) 포인터, 제2 포인터를 리드(read) 포인터로 하고, 데이터의 기입과 라이트 포인터의 인크리먼트를 반복하고, 기입이 완료된 엔트리의 데이터의 판독과 리드 포인터의 인크리먼트를 반복함으로써, 스트림 레지스터를 FIFO(First-In First-Out)로서 사용 가능하다.
스트림 레지스터 SR0, SR1, SR2의 엔트리 수는 16이지만, 3개 있는 스트림 레지스터 중, 스트림 레지스터 SR0과 SR1을 연결하여, 32 엔트리의 스트림 레지스터로서 사용할 수도 있는데, 연결 모드 시에는, 32 엔트리의 스트림 레지스터 SR0으로서 동작하기 때문에, 스트림 레지스터 SR0의 포인터만 사용 가능하고, 스트림 레지스터 SR1은 참조할 수 없다.
통상 모드와 연결 모드는, 모든 명령의 실행 전에 소정의 방법에 의해 설정하며, 명령의 순차 실행중에는 변경할 수 없다.
스트림 레지스터 SR0, SR1, SR2의 참조나 포인터 조작을 행했을 때에, [Start, End]에 의해 정의되는 영역, 또는, [0, EN-1]의 영역을 초과하는 경우가 있다. 여기에서, EN은, 스트림 레지스터 SR0, SR1, SR2의 엔트리 수(통상 모드 시 16, 연결 모드 시 32)로 한다. 이 경우에는, 포인터의 값이 존재하는 엔트리로 되도록 이하와 같은 회입 처리가 행해진다.
스트림 레지스터 SR0, SR1, SR2의 엔트리에의 회입 처리 전과 후의 index를 각각 idx, idxw로 한다. 또한, 2종류의 회입 처리의 방식은, 스트림 레지스터 참조 명령에 부가하여 지정한다.
[Start, End]에 의해 정의되는 영역에서 회입 처리하는 경우
if(idx>End)idxw=Start+(idx-End-1)%(End-Start+1);
else if(idx<Start)idxw=End-(Start-idx-1)%(End-Start+1);
else idxw=idx;
[0, EN-1]의 영역에서 회입 처리하는 경우
if(idx≥EN)idxw=idx%EN;
else if(dx≤0)idxw=(EN×(1-idx/EN)+idx)%EN;
else idxw=idx;
연산 논리 유닛용 레지스터군에 속하는 레지스터는, PE0에 있어서 행해지는 연산의 소스 오퍼랜드, 혹은, 데스티네이션 오퍼랜드에 지정 가능한 레지스터이다. 도 11의 레지스터 in0, in1, temp0∼3, temps, acc.H/L, cond, penum, const가 그것에 해당한다.
레지스터 in0 및 in1은 데이터 길이가 16 비트인 입력 레지스터이며, 스트림 레지스터로부터 판독한 내용을 저장한다. 산술 논리 연산 명령의 소스 오퍼랜드로서 지정할 수 있지만, 데스티네이션 오퍼랜드로는 지정할 수 없다.
레지스터 temp0∼3 및 temps는 데이터 길이가 16 비트인 일시 퇴피용 레지스터이다.
이 중, 레지스터 temps는, 후술하는 공유 기능 유닛(403)을 이용할 때에 이용되는 레지스터이며, 공유 기능 유닛(403)에의 액세스 이외의 경우에서는, 레지스터 temp0∼3과 완전 마찬가지로 워킹 레지스터로서 사용할 수 있다. 이들 레지스터는, 산술 논리 연산 명령의 소스 오퍼랜드와 데스티네이션 오퍼랜드의 양방으로 지정할 수 있다.
레지스터 acc.H/L은 주로 누적 가산 명령에서 이용되고, 데이터 길이가 합쳐서 32 비트의 누적 가산용 레지스터이며, 산술 논리 연산 명령의 소스 오퍼랜드와 데스티네이션 오퍼랜드의 양방으로 지정할 수 있다. 32 비트 중, 상위 16 비트를 레지스터 acc.H로 하고, 하위 16 비트를 레지스터 acc.L로 하여, 소스 오퍼랜드로서 이용할 때에 상위인지 하위인지의 지정을 행한다.
레지스터 cond는, 주로 조건 실행을 행할 때에 이용되는 데이터 길이가 4 비트인 컨디션 레지스터이다. 산술 논리 연산의 데스티네이션 오퍼랜드로서 지정 가능하며, 이 때에는, 연산 결과 중의 임의의 1 비트, 연산 논리 유닛 ALU에 있어서의 연산의 결과, 캐리가 선 것을 나타내는 캐리 플래그, 혹은 연산 결과가 0인 것을 나타내는 제로 플래그 중 어느 하나의 선택과 컨디션 레지스터의 어느 비트에 반영시킬지를 지정한다.
레지스터 penum은, 자신의 프로세싱 엘리먼트 번호(0∼63)가 저장되어 있는 데이터 길이가 6 비트인 프로세서 번호 레지스터이며, 판독 전용이다.
레지스터 const는, 상수값을 저장하는 데이터 길이가 16 비트인 상수 레지스터이며, 엔트리 수는 64이다. 상수 레지스터는, 각 프로세싱 엘리먼트마다 공유하는 것이 아니라, 공유 기능 유닛(403) 내에 갖는다.
PU_SIMD 처리 회로 내의 전체 PE 공통으로 1개의 엔트리를 지정하여 사용하지만, 산술 논리 연산의 소스 오퍼랜드로서 직접 지정 가능하므로, 연산 논리 유닛용 레지스터군에 포함시키고 있다.
연산 논리 유닛용 레지스터군 중에는, 인접 PE로부터 참조 가능한 레지스터도 준비되어 있다. PU_SIMD 처리 회로 내의 n번째의 PE#n에 주목한다.
이 경우, 그 PE#n은, 연산을 행할 때, 그 PE#n 내의 레지스터뿐만 아니라, 인접 PE#n-1, #n+1의 레지스터 in0, in1, acc.H, acc.L을 참조 가능하다.
PE#n의 레지스터 cond, acc.H, acc.L, 및 인접 PE#n-1, #n+1의 레지스터 in0, in1, acc.H, acc.L에 대해서는, 그 값을 PE#n의 스트림 레지스터 SR0, SR1, SR2에 재기입할 수 있다.
PE#n에서는, 연산 논리 유닛 ALU에서의 연산 효율을 높이기 위해서, 연산 논리 유닛 ALU에서의 연산 처리와 복수의 레지스터에의 로드, 또는, 스토어가 동시에 실행 가능하게 되어 있다.
동시 실행 가능한 오퍼레이션은 하기의 A∼J이다. 또한, A∼I에 대해서는, 명령의 조건 실행이 가능하다. 명령의 조건 실행이란, 주로 제어 플래그가 저장되어 있는 레지스터 cond의 임의의 비트를 지정하여, 그 값이 1일 때에 명령을 실행하고, O의 시에 명령을 실행하지 않는다고 하는 동작이다.
A: 스트림 레지스터 SR0에의 기입
B: 스트림 레지스터 SR1에의 기입
C: 스트림 레지스터 SR2에의 기입
D: 레지스터 in0에의 기입
E: 레지스터 in1에의 기입
F: 스트림 레지스터 SR2로부터 레지스터 cond에의 기입
G: 공유 기능 유닛(403)에의 기능 호출
H: 출력 라인 버퍼(404)에의 기입
I: 산술 논리 연산
J: 플로우 제어 명령
PE#n 내의 연산 논리 유닛 ALU에서 실행 가능한 산술 논리 연산을 하기 표 1에 나타낸다. 역수는 후술한 공유 기능 유닛(403)의 룩업 테이블 기능을 이용하여 실현한다.
표 1 중, 비트 번호 명령이란, 소스의 16 비트의 최상위 비트로부터 세서 최초로 1이 나타난 비트 번호를 돌려보내는 명령이다.
이하, 5x3 화소 데이터의 필터 처리를 예로, 프로세서 유닛 PU 및 PE의 동작예를, 도 11에 도시한 스트림 레지스터 SR0, SR1에 주목하여 설명한다.
도 12에 도시한 바와 같이, 각 PE는 세로의 화소 데이터 열을 담당하고, 근방의 화소 데이터에 대하여 가중치 부여 가산을 행한 결과를 로컬 메모리(204) 혹은 메모리 시스템(105)에 재기입한다.
예를 들면 5x3의 필터 처리를 행하는 경우, 도 13에 도시한 바와 같이, 801의 영역에 있는 화소 데이터 00, 01, 02, 10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42의 15개의 화소 데이터에 대하여 가중치 부여 가산을 행하고, 802의 위치의 화소 데이터를 산출한다.
이하, 인접하는 PE 사이에서 어떻게 데이터 교환이 행해지는지 도면을 이용하여 설명한다. 이하에서 이용하는 도면은, 데이터 교환에 주목하기 위해서 모식적으로 도시하고 있다.
도 13에 도시한 802의 위치의 화소 데이터를 포함하는 세로의 화소 데이터 열을 담당하는 PE가 PE#n이라고 하면, 도 14에 도시한 바와 같이, 화소 데이터 20, 21, 22의 세로 3 화소 데이터가 PE#n의 스트림 레지스터 SR0에 유지되고, 화소 데이터 10, 11, 12는 인접하는 프로세서 엘리먼트 PE#(n-1), 화소 데이터 00, 01, 02는 또한 그 옆의 프로세서 엘리먼트 PE#(n―2)의 스트림 레지스터 SR0에 유지되고 있다.
마찬가지로, 화소 데이터 30, 31, 32는 PE#(n+1), 화소 데이터 40, 41, 42는 PE#(n+2)의 스트림 레지스터 SR0에 유지되어 있다.
본 실시 형태에서는, 스트림 레지스터마다 최대 4개의 포인터를 정의 가능하다. 단, PU_SIMD 처리 회로 #0∼#3 내의 전체 PE에 공통하고, 컨트롤 유닛(303_0) 내에 포함된다. 이하의 예에서는, 스트림 레지스터 SR0, SR1 각각 하나의 포인터를 리드 포인터, 하나의 포인터를 라이트 포인터로서 정의하고, 스트림 레지스터를 FIFO로서 이용하고 있다. 도면에서는, 리드 포인터의 위치가 최하단으로 되도록 모식적으로 도시하고 있다.
본 실시예에서는, 레지스터 in0에는 스트림 레지스터 SR0, SR1의 양방으로부터 데이터의 로드가 가능하다. 마찬가지로 레지스터 in1에도 스트림 레지스터 SR0, SR1의 양방으로부터 데이터의 로드가 가능하다. 한편, 스트림 레지스터 SR0, SR1, SR2에는, 인접하는 PE의 레지스터 in0, in1, acc.H/L로부터의 데이터를 기입할 수 있지만, 레지스터 in0은 스트림 레지스터 SR0, 레지스터 in1은 스트림 레지스터 SR1에만 기입할 수 있다. 그러나, 회로 규모는 증가하지만 양방으로부터 기입 가능하게 하여도 된다.
제1 사이클에서는, 도 15에 도시한 바와 같이, 스트림 레지스터 SR0에서의 리드 포인터의 Current값에 있는 화소 데이터가 레지스터 in1에 기입된다. 즉, PE#n의 경우에는, 화소 데이터 20이 레지스터 in1에 기입된다. 연산 논리 유닛 ALU에서는, 레지스터 in1에 기입된 화소 데이터값을 소스 오퍼랜드로서 판독하고, 계수를 승산한다. 연산에 필요한 계수는, 상수 레지스터인 레지스터 const에 저장되어 있다.
스트림 레지스터 SR0, SR1, SR2에 액세스하는 경우, 포인터 레지스터의 Current값의 위치뿐만 아니라 Current값으로부터의 오프셋을 지정하여 액세스할 수 있다. 제2 사이클에서는, 도 16에 도시한 바와 같이, 스트림 레지스터 SR0에서의 리드 포인터의 Current값에 오프셋 1을 가한 위치에 있는 화소 데이터가 레지스터 in1에 기입된다. 즉, PE#n의 경우에는, 화소 데이터 21이 레지스터 in1에 기입된다. 연산 논리 유닛 ALU에서는, in1(1102)에 기입된 화소 데이터값을 소스 오퍼랜드로서 판독하고, 계수를 승산한다. 또한, 전 사이클에서 레지스터 in1에 저장된 화소 데이터는, 우측 옆의 PE의 스트림 레지스터 SR1에 기입된다.
이후 마찬가지의 동작을 계속함으로써, 도 17에 도시하는 상태로 된다. 이 시점에서, 자신의 스트림 레지스터 SR0에 저장하고 있는 세로 3 화소 데이터 분의 처리가 완료된다.
또한 다음 사이클 이후에는, 도 18에 도시한 바와 같이, 스트림 레지스터 SR1에 저장된 화소 데이터를 순차적으로 처리해 간다. 이 때, 스트림 레지스터 SR1로부터의 판독 시에, 리드 포인터를 인크리먼트한다.
이후 마찬가지의 동작을 계속함으로써, 도 19에 도시하는 상태로 된다. 이 시점에서, 원래 좌측 옆의 프로세서 엘리먼트(PE)(402)가 갖는 스트림 레지스터 SR0에 저장되어 있던 세로 3 화소 데이터 분의 처리가 완료된다.
다음 사이클 이후에도 같은 동작을 반복하지만, 앞서 기재한 것처럼, 스트림 레지스터 SR1에는, 레지스터 in0부터 기입할 수 없다. 따라서, 스트림 레지스터 SR1에 저장된 화소 데이터의 처리를 행하면서, 스트림 레지스터 SR0에 저장된 자신의 화소 데이터를 좌측 옆의 PE가 갖는 스트림 레지스터 SR1로 전달하여 가기 때문에, 도 20에 도시한 바와 같이, 스트림 레지스터 SR0의 화소 데이터를 레지스터 in1에, 스트림 레지스터 SR1의 화소 데이터를 레지스터 in0에 기입한다. 이 때, 스트림 레지스터 SR0과 SR1의 양방의 리드 포인터를 인크리먼트한다. 연산 논리 유닛 ALU에서는, 레지스터 in0에 기입된 화소 데이터값을 소스 오퍼랜드로서 판독하고, 계수를 승산한다.
이후 마찬가지의 동작을 계속함으로써, 도 21에 도시하는 상태로 된다. 이 시점에서, 두 개 좌측 옆의 세로 3 화소 데이터 분의 처리가 완료된다. 또한, 스트림 레지스터 SR1에는, 우측 옆의 PE가 갖는 스트림 레지스터 SR0에 저장되어 있던 화소 데이터가 저장되어 있다.
이후에는, 도 22에 도시한 바와 같이, 재차 스트림 레지스터 SR1로부터 레지스터 in1에의 기입, 레지스터 in1에 기입된 화소 데이터값과 계수의 승산, 레지스터 in1로부터 좌측 옆의 PE가 갖는 스트림 레지스터 SR1에의 기입을 병행하여 행하여 간다.
이후 마찬가지의 동작을 계속함으로써, 도 23에 도시하는 상태로 된다. 이 시점에서, 도 13의 801로 나타낸 5x3의 영역에 포함되는 화소 데이터의 필터 처리가 완료된다. 또한, 이 시점까지, 입력 라인 버퍼(401)에는, SCU(203_0)로부터 다음 라인의 화소 데이터 데이터가 기입되어 있다.
마지막으로, 입력 라인 버퍼(401)로부터 스트림 레지스터 SR0에 다음 라인의 화소 데이터를 로드함과 함께, 필터 처리의 결과를 출력 라인 버퍼(404)에 기입한다. SCU(203_0)는, 출력 라인 버퍼(404)에 기입된 연산 결과를 판독하고, 로컬 메모리(204) 혹은 메모리 시스템(105)에 재기입한다.
이상과 같이, 본 실시 형태에 따르면, 연산 논리 유닛 ALU의 연산 처리와 병행하여, 스트림 레지스터 SR0, SR1을 이용한 인접 PE 사이의 데이터 교환을 효율적으로 행할 수 있고, 연산 논리 유닛 ALU에 대하여 끊임없이 데이터를 공급하는 것이 가능하며, 또한 인접 PE 사이에서 데이터를 공용함으로써, 로컬 메모리(204_0)로부터의 판독 빈도를 저감하고 있다.
[공유 기능 유닛(403)]
도 4를 참조하여 설명한 바와 같이, 프로세서 유닛 PU#00은, 공유 기능 유닛(403)을 갖는다.
공유 기능 유닛(403)은, 도 4에 도시한 PE#0∼15의 도 11에 도시한 연산 논리 유닛 ALU에서 실행 가능한 연산 명령 이외의 연산을 위해서 이용된다.
프로세서 엘리먼트 PE#0∼15는, 공유 기능 유닛(403)을 이용하기 위해서, 기능 호출 명령을 사용한다. 이 때, PE#0∼15는, 후술하는 이용 가능한 기능과의 대응을 미리 정한 기능 식별 번호를 명령에 부가하여 지정한 요구를 공유 기능 유닛(403)에 출력한다.
PE#0∼15는, 소스 오퍼랜드에 지정하는 레지스터에 필요한 데이터를 세트하여 기능 호출 명령을 실행하면, 소정의 레이턴시 후에 결과가 레지스터 temps로 돌려 보내진다. 또한, 소스 오퍼랜드에 지정한 레지스터는, 참조 결과가 재기입될 때까지 재기입 불가능하다.
공유 기능 유닛(403)이 이용 가능한 기능을 이하에 기재한다.
공유 기능 유닛(403)은, 예를 들면, 도 25에 도시한 바와 같이, 룩업 테이블(1202), 가산 연산기(1203), 최대 최소값 연산기(1204) 및 벡터 연산 유닛(1205) 등의 기능을 갖는다.
룩업 테이블(1202)은, 복수의 프로세서 엘리먼트(PE) 사이에서 공용하고, 엔트리 수에 의존하여 레이턴시가 가변하는 기능이다.
가산 연산기(1203)는, 복수의 PE로부터의 데이터를 입력으로 하고, 데이터 수에 의존하여 레이턴시가 가변하는 기능이다.
최대 최소값 연산기(1204)는, 복수의 PE로부터의 데이터를 입력으로 하고, 데이터 수에 의존하여 레이턴시가 가변하는 기능이다.
벡터 연산 유닛(1205)은, 차원에 의존하여 레이턴시가 가변하는 기능이다.
공유 기능 유닛(403)의 룩업 테이블(1202)로서의 기능을 설명한다.
룩업 테이블(1202)은 1024 엔트리의 단일 테이블로서의 이용뿐만 아니라, 512 엔트리나 256 엔트리 등, 엔트리 수를 바꾸어서 사용할 수 있다.
또한, 룩업 테이블(1202)은, 1종류뿐만 아니라, 복수의 종류의 테이블을 유지할 수도 있다. 예를 들면, 룩업 테이블(1202)은, 역수 테이블과 대수 테이블을 1024 엔트리 내의 서로 다른 영역에 저장할 수 있다.
룩업 테이블(1202)은, 16개의 PE에서 공유하고 있으므로, 1024 엔트리를 단일 테이블로서 사용한 경우에는, 참조에 필요로 하는 사이클 수는 16으로 된다.
이것에 1 사이클의 액세스 지연을 가한 17이 1024 엔트리의 룩업 테이블(1202)의 레이턴시이다.
엔트리 수를 적게 하고, 동일 종류의 테이블을 복수개 저장한 경우에는, 1개의 테이블을 공유하는 PE의 수가 감소하기 때문에, 참조에 필요로 하는 사이클 수도 감소한다. 예를 들면, 256 엔트리의 테이블로 한 경우에는, 4개씩의 PE에서 공유하게 되기 때문에, 참조에 필요로 하는 사이클 수는 4, 레이턴시는 5로 된다. 또한, 룩업 테이블(1202)의 구성은, 공유 기능 유닛(403)이 프로그램 실행 전에 설정한다.
공유 기능 유닛(403)의 가산 연산기(1203)로서의 기능에 대하여 설명한다.
가산 연산기(1203)는, 복수개의 PE로부터 데이터를 입력하면, 그 데이터의 합계치를 소정의 레이턴시 후에 데이터를 출력한 PE에 출력한다.
공유 기능 유닛(403)에 1개의 가산 연산기(1203)가 있으며, 이것을 16개의 PE에서 공유하는 경우에는, 연산에 필요로 하는 사이클 수는 16으로 된다. 이것에 1 사이클의 액세스 지연을 가한 17이 가산 연산기(1203)의 레이턴시이다.
공유 기능 유닛(403)에 2개의 가산 연산기(1203)가 있으며, 각각을 8개의 PE에서 공유하는 경우에는, 연산에 필요로 하는 사이클 수는 8이다. 이것에 1 사이클의 액세스 지연을 가한 9가 가산 연산기(1203)의 레이턴시이다. 또한, 복수의 가산 연산기(1203)의 구성은, 공유 기능 유닛(403)이 프로그램 실행 전에 설정한다.
공유 기능 유닛(403)의 최대 최소값 연산기(1204)로서의 기능에 대하여 설명한다.
최대 최소값 연산기(1204)는, 복수개의 PE로부터 데이터를 입력하면, 이들 데이터의 최대값, 최소값이 소정의 레이턴시 후에, 데이터를 출력한 PE에 출력된다.
공유 기능 유닛(403)에 1개의 최대 최소값 연산기(1204)가 있으며, 이것을 16개의 PE에서 공유하는 경우에는, 연산에 필요로 하는 사이클 수는 16으로 된다. 이것에 1 사이클의 액세스 지연을 가한 17이 최대 최소값 연산기(1204)의 레이턴시이다.
공유 기능 유닛(403)에 2개의 최대 최소값 연산기(1204)가 있으며, 각각을 8개의 PE에서 공유하는 경우에는, 연산에 필요로 하는 사이클 수는 8로 된다. 이것에 1 사이클의 액세스 지연을 가한 9가 최대 최소값 연산기(1204)의 레이턴시이다. 또한, 복수의 최대 최소값 연산기(1204)의 구성은, 공유 기능 유닛(403)이 프로그램 실행 전에 설정한다.
공유 기능 유닛(403)의 벡터 연산 유닛(1205)의 기능에 대하여 설명한다.
벡터 연산 유닛(1205)은, 복수개의 PE로부터 입력된 데이터 수를 차원으로 하는 벡터 연산을 행하며, 결과가 소정의 레이턴시 후에, 데이터를 출력한 PE에 출력한다.
이하의 수학식 1은 2개의 PE에 의한 2차원의 벡터 연산이기 때문에 연산에 요하는 사이클 수는 3이다. 이것에 1 사이클의 액세스 지연을 가한 3이 벡터 연산 유닛(1205)의 레이턴시이다.
마찬가지로 이하의 수학식 2의 4개의 PE에 의한 4차원의 벡터 연산이기 때문에 연산에 요하는 사이클 수는 4이다. 이것에 1 사이클의 액세스 지연을 가한 5가 벡터 연산 유닛(1205)의 레이턴시이다.
어느 경우에나 계수로 되는 행렬의 각 요소의 값은, 미리 유지해 둔다.
[SCU(Stream Control Unit)(203_0∼203_3)]
이하, SCU(203_0)에 대하여 설명한다.
SCU(203_1∼203_3)는, SCU(203_0)와 동일하다.
SCU(203_0)는, 도 3 등에 도시한 바와 같이, 복수의 PU_SIMD(Single Instruction Multiple Data) 처리 회로 #O∼#3에 대해서, 그것을 구성하는 개개의 프로세서 엘리먼트 PE의 처리에 필요한 데이터를 효율적으로 데이터를 입출력하기 위한 제어를 행한다.
SCU(203_0)는, 처리에 필요한 데이터를 반도체 메모리 등으로 대표되는 기억 장치에 수납한다.
PU_SIMD 처리 회로 #0∼#3은, SIMD형 프로세서이기 때문에, 모든 PE에 대한 입출력은 시간적으로 동시에 행해진다. 따라서, SCU(203_0)에 의한 PU_SIMD#0∼#3에 대한 입출력은, PE의 개수분의 입출력 데이터를 동시에 입출력하게 된다. 이하 동시에 입출력되는 데이터를, 스트림 데이터라고 부르기로 한다.
한편, PU_SIMD 처리 회로 #0∼#3은 화상 정보의 처리를 주로 행하지만, 처리 대상인 화상 정보는, 메모리 등의 기억 장치에 있어서, 물리적인 1차원의 어드레스로 관리된 기억 영역 내에, 논리적인 2차원 기억 영역을 확보하여 기억되어 있다. 그 화상 데이터의 기본 단위는 화소 데이터라고 불린다.
SCU(203_0)는, PU_SIMD 처리 회로 #0∼#3과, 메모리 시스템(105) 및 로컬 메모리(204_0)사이에 위치하고, 복수의 화소 데이터를 스트림 데이터로 변환하여 입출력을 행하는 기능을 가지고 있다.
SCU(203_0)의 기능을 구체적으로 설명한다.
(1) SCU(203_0)는, 로컬 메모리(204_0) 또는 메모리 시스템(105)(이하, 기억 영역이라고도 함)으로부터 데이터군을 판독하고, 그 데이터를 PU_SIMD#0∼#3에서 필요하게 되는 스트림 데이터로 변환하여, PU_SIMD#0∼#3에 출력한다.
(2) SCU(203_0)는, PU_SIMD#0∼#3이 출력하는 출력 스트림 데이터를, 기억 영역 내부에서 필요하게 되는 데이터 형식으로 변환하여, 기억 영역에 기입 전송한다.
(3) SCU(203_0)의 기억 영역은, 작업 영역으로서 사용하는 반도체 메모리이며, 기억 영역은 SCU(203_0)와 함께 SOC(System On Chip)에 포함되는 경우나, SOC의 외부에 포함되는 경우 등의 베리에이션을 상정할 수 있다.
(4) SCU(203_0)가 상기 기억 영역을 액세스하는 경우에는, SCU(203_0)로부터는 1차원의 물리 어드레스로서 액세스할 수 있다.
(5) SCU(203_0) 내부에 있어서, 기억 영역 상의 데이터는, PU_SIMD 처리 회로 #0∼#3에서의 프로그램 개발의 용이함과 화상 정보의 취급의 용이함 때문에, 논리적인 2차원 좌표로 배열된 화소 데이터를 단위로 하여 취급하는 것이 가능하다.
(6) 기억 영역 상에서는, 복수의 화소 데이터로 구성된 1워드 데이터가, 1차원 물리 어드레스에 의한 액세스 단위로 된다.
(7) 1 워드 데이터 내의 화소 데이터 개수 및 2차원 좌표에서 본 경우의 화소 데이터 배열은, 사용하는 메모리 종류에 따라서 가변이며, SCU(203_0)는 복수의 화소 데이터 배열에 대처 가능하다.
(8) SCU(203_0)의 기억 영역은, SCU(203_0)에 접속되는 PU_SIMD 처리 회로 #0∼#3 단위로, 기억 영역에의 read 액세스와 데이터 변환을 행하기 위한 설정을 필요로 하고, 그 설정을 SCU(203_0) 내부의 레지스터에 호스트 프로세서(101)로부터 기입함으로써 가능하게 된다.
(9) SCU(203_0)는, 기억 영역에의 read 액세스를 행하기 위해서 이하의 사항을 설정한다.
a. 기억 영역에 포함되는 복수의 사각형 화상 영역을 지정하는 제1 개시 어드레스.
b. 제1 개시 어드레스로부터 시작되는 기억 영역 내에 포함되고, 2차원 논리 좌표로 지정되는, 제2 복수의 사각형 화상 영역의 폭 높이.
c. 제2 사각형 화상 영역 내에, 계층적으로 포함되는 2차원 논리 좌표로 지정되는 제3 사각형 화상 영역의 폭 높이.
d. 제3 사각형 화상 영역 내부의 데이터에 대해서, 선택적으로 데이터를 판독하고, 재배열이나 연산 등의 처리를 실시하여, PU_SIMD 처리 회로 #0∼#3이 필요로 하는 스트림 데이터로 변환하는 방식의 지정.
(10) SCU(203_0)는, 기억 영역에의 WRite 액세스를 행하기 위해서 이하의 실행을 설정한다.
e. 기억 영역에 포함되면 복수의 사각형 화상 영역을 지정하는 제4 개시 어드레스.
f. 제4 개시 어드레스로부터 시작되는 기억 영역 내에 포함되고, 2차원 논리 좌표로 지정되는, 제5 복수의 사각형 화상 영역의 폭 높이.
g. 제5 사각형 화상 영역 내에, 계층적으로 포함되는 2차원 논리 좌표로 지정되는 제6 사각형 화상 영역의 폭 높이.
h. 제6 사각형 화상 영역 내부의 데이터에 대해서, PU_SIMD 처리 회로 #0∼#3이 출력하는 스트림 데이터로부터 선택적으로 데이터를 판독하고, 재배열이나 연산 등의 처리를 실시하여, 제6 사각형 화상 영역 내부의 데이터형으로 기입하는 방식의 지정.
i. SCU(203_0)는 복수의 기억 영역간의 데이터 전송을 실현한다.
j. SCU(203_0)를 제어 가능한 컨트롤러인 호스트 프로세서(101)와의 사이에서, 통신을 행하기 위한 인터페이스를 통하여 접속한다.
PU_SIMD 처리 회로 #0∼#3이, 스트림 데이터를 처리하는 경우, 기억 영역 상에 사각형 화상 영역을 다중(계층) 지정하고, 각각의 사각형 화상 영역을 이동시키면서, 데이터의 Read/WRite 처리를 행함으로써 효율적으로 처리를 행한다.
이를 위해, SCU(203_0) 내부에 다중 구조의 사각형 화상 영역을 정의한다.
도 26은, 기억 영역 상의 다중 사각형 화상 영역으로부터, PU_SIMD 처리 회로 #0∼#3에 스트림 데이터를 Write하는 경우 및, PU_SIMD 처리 회로 #0∼#3으로부터 기억 영역 상의 다중 사각형 화상 영역에, 스트림 데이터를 WRite하는 경우의 동작을 도시하고 있다.
SCU(203_0)가 취급하는 기억 영역 내의 사각형 화상 영역의 계층 구성을, 도 26을 참조하여 설명한다.
SCU(203_0)는, 기억 영역 내에, 작업 영역으로서 사각형 화상 영역 WR을 지정한다.
또한, SCU(203_0)는, 사각형 화상 영역 WR을, PU_SIMD 처리 회로 #O∼#3마다 지정한다.
SCU(203_0)는, 사각형 화상 영역 WR 내에, 화소 데이터의 판독원인 사각형 화상 영역 AR을 지정한다.
SCU(203_0)는, 사각형 화상 영역 AR 내에, 사각형 화상 영역 BR을 지정한다.
SCU(203_0)는, 호스트 프로세서(101)로부터 입력된 프로그램에 기초하여, 사각형 화상 영역 BR로부터 판독한 화소 데이터를, PU_SIMD 처리 회로 #0∼#3이 필요로 하는 스트림 데이터로 변환하는 데이터 변환 커맨드 WI#data#op를 실행(지정) 한다.
SCU(203_0)는, 후술하는 바와 같이 사각형 화상 영역 AR, BR, WI_data_op 지정의 일련의 반복 처리를 프로그램 가능하다.
SCU(203_0)는, 사각형 화상 영역 WR 내에, 화소 데이터의 기입처인 사각형 화상 영역 CR을 지정한다.
SCU(203_0)는, 사각형 화상 영역 CR 내에, 사각형 화상 영역 DR을 지정한다.
SCU(203_0)는, PU_SIMD#0∼#3의 출력 스트림 데이터로부터, 사각형 화상 영 역 DR에의 데이터 변환 커맨드 WO#data#op를 실행한다.
SCU(203_0)는, 후술하는 바와 같이 사각형 화상 영역 CR, DR, WO_data_op 지정은 일련의 반복 처리를 프로그램 가능하다.
SCU(203_0)는, 사각형 화상 영역 AR, BR, CR, DR은 사각형 화상 영역 WR 내의 임의의 위치에의 배치와 이동 가능하다.
SCU(203_0)는, 사각형 화상 영역 WR 내에 있어서, 사각형 화상 영역 AR, BR, CR, DR을, 2차원 논리 좌표로 지정이 가능하다.
SCU(203_0)는, 기억 영역에 대하여 사각형 화상 영역 WR을 물리 어드레스로 지정할 수 있다.
SCU(203_0)는, 사각형 화상 영역 WR, AR, DR, CR. DR 내부의 화소 데이터가 액세스된 경우에는, 기억 영역에 액세스가 필요하게 되기 때문에, 논리 어드레스로부터 물리 어드레스로의 변환을 행하여 기억 영역에 액세스한다.
도 27은, SCU(203_0) 내부에 설정되는 다중 사각형 화상 영역에 관한 처리를 행하는 기능을 설명하기 위한 도면이다.
도 27에 도시한 바와 같이, SCU(203_0)는, PU_SIMD 처리 회로 #0∼#3 각각에, 기억 영역 내의 사각형 화상 영역 WR0∼3 각각을 할당한다.
사각형 화상 영역 WR0∼3은, 메모리 시스템(105)이나 로컬 메모리(204_0) 등의 기억 영역 내에 규정된다.
사각형 화상 영역 WR0∼3 각각에, 사각형 화상 영역 AR0∼7, BR0∼7, CR0∼3, DR0∼3이 규정된다.
도 27에 도시하는 SCU(203_0)는, WI_data_op에 의해, 사각형 화상 영역 BR 내의 데이터를 스트림 데이터로 변환하여, 출력 버퍼 out_buf에 WRite한다.
또한, SCU(203_0)는, 데이터 변환 커맨드 WO#data#op에 의해, PU_SIMD 처리 회로 #0∼#3으로부터 입력되어 입력 버퍼 in#buf에 수납되어 있는 스트림 데이터를 데이터 변환하여 사각형 화상 영역 DR에 WRite한다.
도 26을 참조하여 전술한 바와 같이, 사각형 화상 영역 WR 내에, 사각형 화상 영역 AR, BR, CR, DR을 계층 구조에 의해 규정함으로써, 예를 들면, 사각형 화상 영역 AR, CR 내에서 사각형 화상 영역 BR, DR을 상대적으로 이동시키는 경우에, 기준 좌표를 사각형 화상 영역 AR, BR, CR, DR 내의 로컬한 좌표에 가산하는 형식으로의 어드레스 표현이 가능하게 되어, 프로그래밍이 간단해진다.
본 실시 형태에서는, 사각형 화상 영역의 개수나 다중 지정의 계층 수 등을 구체적인 숫자로 표현하고 있지만, 그 구성이나 수량은 조합이 자유로워, 폭넓은 화상 처리의 필요성에 따라서 구성을 바꾸는 것이 가능하다.
SCU(203_0)가 데이터 전송을 위해서 행하는 접속을 설명한다.
[시스템 버스 접속]
도 1에 도시한 시스템 버스(113)는, SCU(203_0)를, 호스트 프로세서(101) 및 메모리 시스템(105) 등의 다른 처리 모듈을 접속하는 버스이며, 이하의 특징을 갖는다.
(1) 시스템 버스(113)는, LSI나 SOC 내부에서 표준화된 버스 규격을 채용하는 것이 가능하다.
(2) 시스템 버스(113)의 버스 폭은 128 비트이며, 연속 데이터 전송(버스트 전송)이 가능한 구성으로 함으로써, 버스 사용 효율을 향상할 수 있다.
(3) 시스템 버스(113) 상의 기억 장치(예를 들면, 메모리 시스템(105))에 대해서, SCU(203_0)는 버스 마스터로서 액세스한다.
(4) 시스템 버스(113) 상의 SCU(203_0) 이외의 버스 마스터로부터, SCU(203_0)의 내부 레지스터나 SCU 전용 기억 장치(예를 들면, 로컬 메모리(204_0))에의 액세스를 행한다.
(5) 시스템 버스(113)는, 데이터 전송 효율이나 기능이 만족되는 것이면, 버스 규격에는 구애받지 않는 선택이 가능하다.
[SCU(203_0)의 전용 기억 영역 접속]
SCU(203_0)는, 전용 기억 영역으로서 전용 기억 장치를 접속하는 것이 가능하다.
전용 기억 장치는 SRAM이나 DRAM 등의 반도체 메모리가 SOC 내부 외부의 어느 쪽에 있더라도 선택 가능하다.
상기 전용 기억 장치는, 시스템 버스(113)보다 광대역의 버스에 접속된다.
상기 전용 기억 장치는, 1개의 SCU(203_0)가 점유하여 사용할 목적으로 준비되어 있다.
시스템 버스(113) 상의 버스 마스터로부터, 상기 전용 기억 장치에의 액세스가 가능하다.
[PU_SIMD#0∼#3 접속]
SCU(203_0)에는, 4개의 PU_SIMD 처리 회로 #0∼#3이 버스 접속된다.
SCU(203_0)로부터 PU_SIMD 처리 회로 #0∼#3에의 스트림 데이터 입력은, 각 PU_SIMD 처리 회로에 256 비트의 단방향 버스를 사용하고, 전송 효율은 256 bit/clock이다.
data/ 전송 프로토콜로서 2선식의 핸드세이크를 채용한다.
SCU(203_0) 내부에는 출력 버퍼 out_buf를 준비한다.
SCU(203_0)로부터 출력을 행하는 경우에는, PU_SIMD 처리 회로 #0∼#3에 대하여 어드레스를 지정함으로써 PU_SIMD 처리 회로 내부 레지스터를 식별한다.
PU_SIMD 처리 회로 #0∼#3으로부터 SCU(203_0)에의 스트림 데이터 입력은, 각 PU_SIMD의 256 비트의 단방향 버스를 사용하고, 전송 효율은 256 bit/clock이다.
또한, 데이터 전송 프로토콜로서 2선식의 핸드세이크를 채용한다.
SCU(203_0) 내부에는 입력용의 입력 버퍼 in_buf를 준비한다.
PU_SIMD 처리 회로 #0∼#3으로부터 SCU(203_0)에 입력을 행하는 경우에는, PU_SIMD에 대하여 어드레스를 지정함으로써 PU_SIMD 처리 회로 내부 레지스터를 식별한다.
[SCU(203_0)의 물리 논리 어드레스 변환]
SCU(203_0)가 액세스하는 도 26 및 도 27을 이용하여 설명한 기억 영역 내의 사각형 화상 영역 WR 내부의 화소 대응 위치 Pixel은 2차원 논리 어드레스로 표현되어 있지만, 메모리 시스템(105) 및 로컬 메모리(204_0)는 물리 어드레스로 표현 되어 있다. 따라서, SCU(203_0)는, 사각형 화상 영역 WR 내의 사각형 화상 영역 AR, BR, CR, DR 내부에 지정된 화소 대응 위치 Pixel에 대하여 Read 또는 WRite를 행하는 경우에는, 2차원 논리 어드레스로부터 물리 어드레스에의 어드레스 변환을 행한다.
여기에서, 사각형 화상 영역 WR 내의 임의의 화소 대응 위치를 pixel(x, y)로 한다. 단 x, y는 2차원 논리 어드레스이다.
화소 대응 위치 L_Pixel(x, y)의 물리 어드레스(adrs)는 이하와 같이 계산된다.
또한, 어드레스 지정되는 word 중에서, 화소 대응 위치 L_Pixel(x, y)이 차지하는 비트 위치를 Word[a:b]라고 표현한다(단 a, b는 word 내에서 pixel을 구성하는 비트 범위로 함).
하기 수학식 3∼수학식 4에 있어서, ww는 화소 위치 단위의 사각형 화상 영역 WR의 폭(X 방향)이다.
또한, 1워드 데이터(1 word) 중의 x 방향 Pixel 수를 pw로 한다.
ph는, 1 word 내의 y 방향 Pixel 수이다.
n은, 1 word 내의 비트 위치를 계산하기 위한 값이다.
WR#bp는, 기억 영역 내부에서의 사각형 화상 영역 WR의 개시를 나타내는 어드레스이다.
1개의 Pixel=16 비트로 표현하고 있지만 비트 길이로서는 다른 값을 채용하는 것도 가능하다.
Int()는 괄호 내의 값을 초과하지 않는 정수를 나타낸다.
X mod y는 정수 x를 정수 y로 나눈 잉여이다.
도 28은, SCU(203_0)에 의한 물리 논리 어드레스 변환을 설명하기 위한 도면이다.
도 28에 도시한 바와 같이, 메모리 시스템(105) 및 로컬 메모리(204_0)의 물리적인 어드레스 공간 ADRS 내에 사각형 화상 영역 WR이 규정된다.
SCU(203_0)는, 1개의 물리 어드레스에 의한 액세스 단위를 1 word로 한다.
WR#bp+는, 사각형 화상 영역 WR의 개시 어드레스이다.
ww는, 사각형 화상 영역 WR의 폭이며, 화소 대응 위치 Pixel 단위 또한 pw의 배수이다.
도 28에 도시한 바와 같이, 어드레스 공간 ADRS의 화소 대응 위치 L_Pixel은, 2차원 논리 어드레스로 지정 가능하다.
도 28에 도시한 pw는, 1 word 내의 x 방향의 pixel 수(화소 데이터 수)를 나 타낸다.
도 28에 도시한 ph는, 1 word 내의 y 방향의 pixel 수를 나타낸다.
1 pixel에 포함되는 정보량을 n비트로 하고, 1 word에 포함되는 총 비트 용량을 wordsize로 하면 이하의 관계식이 성립한다.
본 실시 형태에서는, 전술한 바와 같이 기억 영역을 2차원 논리 어드레스로 관리함으로써, 기억 영역 내의 임의의 사각형 화상 영역에 액세스하는 경우에, 종래의 스캔 라인 방식과 같이 카운트 처리(데트 라인의 검출 처리) 등이 불필요해져, 프로그래밍이 간단해진다.
본 실시 형태에서는 1 pixel=16 비트의 구성으로 설명을 행하고 있지만, 1 pixel의 정보량은 특별히 한정되지 않고, 8 비트나 32 비트 등이어도 된다.
[SCU(203_0)에 의한 기억 영역에의 액세스]
SCU(203_0)는, 전술한 바와 같이, 기억 영역으로서, 시스템 버스(113)에 접속된 대규모 외부 기억 장치인 메모리 시스템(105)과, 소규모의 전용 기억 장치인 로컬 메모리(204_0)를 사용할 수 있다.
메모리 시스템(105)은, 예를 들면, SCU(203_0)가 포함되는 SOC의 외부에 접속되는 DRAM-CHIP이며, 일반적인 DDR나 RAMBUS 등의 메모리 chip 등이다.
로컬 메모리(204_0)는, 예를 들면, SCU(203_0)가 포함되는 SOC 내부의 SRAM이나 eDRAM(Embedede-DRAM: SCU와 동일한 SOC에 포함되는 On-chip DRAM) 등이다.
일반적으로, DRAM은, Raw/Column/bank라고 하는 어드레스의 계층 구조가 있고, 동일한 Raw에 포함되는 연속 데이터 액세스는 고속이지만, Raw 경계를 걸친 연속 데이터 액세스나, 원격의 Raw끼리의 연속 액세스는, 페이지 프리차지 등의 처치를 필요로 하기 때문에, 저속으로 된다고 하는 특징이 있다.
본 실시 형태에서는, SCU(203_0)는, 예를 들면, 메모리 시스템(105)이나 로컬 메모리(204_0)로서, DRAM을 사용하고 있지만, SRAM이더라도 문제는 없다. 또한, DRAM을 사용하는 경우, 상기 액세스 성능의 불연속성을 가능한 한 피할 목적으로, 기억 영역 내의 화소 데이터의 사각형 화상 배열을, 스트림 데이터 생성 시에는 가능한 한 동일 페이지에 배치하는 연구를 함으로써, DRAM 액세스의 불연속성을 가능한 한 저감하는 처치를 취할 수 있다.
이 연구는, 예를 들면 앞서 설명한 물리 논리 어드레스 변환에서의 bp와 ww의 값에, 이하에 기재하는 바와 같은 제약을 주는 등에 의해 용이하게 실현 가능하다.
(제약예 1) ww는 DRAM의 column의 배수이며, 또한 pw의 배수이다.
(제약예 2) WR#bp의 값은 DRAM의 Raw 단위이다.
[SCU(203_0)에 의한 다중 사각형 화상 영역 정의(판독 시)]
SCU(203_0)는, 전술한 바와 같이, 기억 영역 내의 사각형 화상 영역 WR 내에, 도 29에 도시한 바와 같이, 2차원 논리 어드레스 표현으로 다중 사각형 화상 영역으로서, 사각형 화상 영역 AR, BR을 규정할 수 있다.
각각의 위치 관계를 나타내는 값으로서 이하의 좌표값이 사용된다.
ww는, 사각형 화상 영역 WR의 x 방향 사각형 화상 영역 폭.
ax, ay는, 사각형 화상 영역 WR 내의 사각형 화상 영역 AR의 2차원 좌표를 나타낸다. 이것은, 사각형 화상 영역 WR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 AR의 왼쪽 위의 화소 대응 위치 Pixel의 좌표를 나타낸다.
aw 및 ah는, 사각형 화상 영역 AR의 폭과 높이를 나타낸다.
bx 및 by는, 사각형 화상 영역 AR 내의 사각형 화상 영역 BR의 2차원 좌표를 나타낸다. 사각형 화상 영역 AR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 BR의 왼쪽 위의 화소 대응 위치 Pixel의 좌표를 나타낸다.
bw 및 bh는, 사각형 화상 영역 BR의 폭과 높이를 나타낸다.
x 및 y는, 사각형 화상 영역 BR 내의 화소 대응 위치 Pixel의 2차원 좌표를 나타낸다. 사각형 화상 영역 BR의 왼쪽 위를 원점(0, 0)으로 한 좌표계이다.
[SCU(203_0)에 의한 사각형 화상 영역 BR의 정의 모드]
SCU(203_0)는, bx, by 및 bw, bh의 값을 조정함으로써, 도 30에 도시한 바와 같이, 사각형 화상 영역 AR을 일탈하도록 사각형 화상 영역 BR을 지정할 수 있다.
이에 의해, SCU(203_0)는, 다양한 형태에서 PU_SIMD 처리 회로 #0∼#3에 스트림 데이터를 출력할 수 있다.
이하, SCU(203_0)에 의한 사각형 화상 영역 BR의 지정의 형태를 나타내는 각종의 BR 모드를 설명한다.
(사각형 화상 영역) BR 모드 1:
SCU(203_0)는, BR 모드 1로 설정되어 있는 경우에, 사각형 화상 영역 AR로부터 일탈하여 사각형 화상 영역 BR을 설정 가능하다.
SCU(203_0)는, 사각형 화상 영역 BR이 사각형 화상 영역 AR로부터 일탈한 경우에, 일탈한 영역에 대응한 화소 데이터 Pixel의 값을 미리 설정된 값(COL)으로 한다.
SCU(203_0)는, 사각형 화상 영역 BR 내의 화소 데이터 Pixel(x, y)을, 사각형 화상 영역 AR 내의 화소 데이터 AR()을 이용하여 하기 수학식 7과 같이 결정한다.
(사각형 화상 영역) BR 모드 2:
SCU(203_0)는, BR 모드 2로 설정되어 있는 경우에, 사각형 화상 영역 AR로부터 일탈하여 사각형 화상 영역 BR을 설정 가능하다.
SCU(203_0)는, 도 31에 도시한 바와 같이, 사각형 화상 영역 BR이 X 방향으로 사각형 화상 영역 AR로부터 일탈한 경우, 일탈 영역을 사각형 화상 영역 AR 내부에 절첩하도록 제어한다.
SCU(203_0)는, 도 31에 도시한 바와 같이, 사각형 화상 영역 BR이 X 방향과 Y방향으로 사각형 화상 영역 AR로부터 일탈한 경우, 사각형 화상 영역 AR에는 절첩되지 않는 것으로 하고, 화소 데이터 Pixel의 값을 (COL)로 한다.
SCU(203_0)는, 사각형 화상 영역 BR 내의 화소 데이터 Pixel(x, y)을, 사각형 화상 영역 AR 내의 화소 데이터 AR()을 이용하여 하기 수학식 8과 같이 결정한다.
(사각형 화상 영역) BR 모드 3:
SCU(203_0)는, BR 모드 3으로 설정되어 있는 경우에, 사각형 화상 영역 AR로부터 일탈하여 사각형 화상 영역 BR을 설정할 수 없다.
SCU(203_0)는, 사각형 화상 영역 AR로부터 일탈한 사각형 화상 영역 BR을 지정한 경우에는, 일탈한 영역의 화소 데이터 Pixel(x, y)은 그 값을 보장하지 않는다.
SCU(203_0)는, 도 32에 도시한 바와 같이, 사각형 화상 영역 AR의 외주로부터 2 화소 대응 위치의 영역에, 사각형 화상 영역 BR이 설정된 경우에, 사각형 화상 영역 AR의 외주로부터 내측 3 화소 대응 위치의 사각형 화상 영역 BR 내의 화소 대응 위치의 화소 데이터 Pixel(x, y)을, 사각형 화상 영역 BR의 외주로부터 2 화소 대응 위치의 화소 데이터 Pixel(x, y)로서 설정하는 클램프(Clamp) 동작을 행한다.
사각형 화상 영역 BR 내의 화소 데이터 Pixel(x, y)은, 하기 수학식 9에 의 해 규정된다. 간략하게 하기 위해서 xp=x+bx;yp=y+by;로 하고 있다.
사각형 화상 영역 BR이, 사각형 화상 영역 AR의 외주로부터 1 화소 대응 위치만큼 내측에 위치하는 경우에는, SCU(203_0)는, 도 33에 도시한 바와 같이, 클램프 동작을 행한다.
본 실시 형태에서는, 전술한 바와 같이 클램프 동작(처리)을 행함으로써, 임의의 사각형 화상 영역의 필터 처리 등을 행하는 경우에, 사각형 화상 영역의 외주에 있어서 그 사각형 화상 영역 외의 화소 데이터를 적절하게 대용할 수 있다.
[SCU(203_0)에 의한 PU_SIMD에의 데이터 입력 처리]
SCU(203_0)는, 사각형 화상 영역 BR로부터 화소 데이터 Pixel(x, y)을 판독하고, 이것을 데이터 스트림 데이터로 변환하여(입력 데이터 변환 처리를 행하여) 도 3에 도시한 PU_SIMD 처리 회로 #0∼#3에 입력시킨다.
여기에서, SCU(203_0)는, PU_SIMD#0∼#3 각각에 대해서, 상기 변환의 내용을 지정할 수 있다.
SCU(203_0)는, 각 PU_SIMD#0∼#3에 대응한 출력 버퍼 out_buf를 구비하고 있다.
SCU(203_0)는, 사각형 화상 영역 BR을 지정하는 레지스터를 구비하고 있다.
SCU(203_0)는, 각 PU_SIMD#0∼#3에 대응한 입력 버퍼 in_buf를 구비하고 있다.
SCU(203_0)는, 사각형 화상 영역 BR로부터 화소 데이터 Pixel(x, y)을 판독하고, 재배열 등의 데이터 변환 처리를 실시한 후에, 스트림 데이터로서 도 27에 도시하는 출력 버퍼 out_buf에 기입한다.
SCU(203_0)는, 사각형 화상 영역 BR을 지정하는 레지스터값을, 스트림 데이터로서 출력 버퍼 out_buf에 기입한다.
SCU(203_0)는, 사각형 화상 영역 BR로부터 화소 데이터 Pixel(x, y)을 판독하고, 재배열 등의 데이터 변환 처리를 실시한 후에, SCU(203_0) 내에 있는 사각형 화상 영역 BR을 지정하는 레지스터에 기입한다.
SCU(203_0)는, 입력 버퍼 in_buf로부터 판독한 데이터를, 데이터 변환 처리를 실시한 후에, 스트림 데이터로서 출력 버퍼 out_buf에 기입한다.
SCU(203_0)는, 전술한 입력 데이터 변환 처리, 즉 PU_SIMD#0∼#3에 기입하기 위한 데이터 스트림으로의 변환 처리로서, 예를 들면, 하기 표 2에 나타내는 입력 데이터 변환 커맨드에 따라서 입력 데이터 변환 처리를 행한다.
SCU(203_0)는, 도 1에 도시한 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드를 입력하여 실행한다.
SCU(203_0)는, 표 2에 나타내는 각 입력 데이터 변환 커맨드에 있어서, 표 3에 나타내는 종속 파라미터를 지정할 수 있다.
표 2에 나타낸 데이터 변환 커맨드에 기초하는 입력 데이터 변환 처리의 각각을 설명한다.
[set#BR#1of4x4#same]
SCU(203_0)는, 예를 들면, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#1of4x4#same」을 실행하면, 도 34에 도시한 바와 같이, 그 종속 파라미터에 의해 지정된 사각형 화상 영역 BR 내의 1 화소 대응 위치로부터 화소 데이터 Pixel을 판독하고, 그것을 64개 복제하여 화소 데이터 Pixel(0, … 63)을 생성하고, 이것을 화소 데이터 내부의 비트 선택 후에, 출력 버퍼 out_buf를 통하여 PU_SIMD 처리 회로 #0∼#3에 입력한다.
SCU(203_0)는, 종속 파라미터 BR#num에 의해, 4x4 화소 대응 위치의 사각형 화상 영역 BR을 특정한다.
SCU(203_0)는, 멀티플렉서 MUX1, MUX2 및 논리 회로 LOG1를 갖는다.
멀티플렉서 MUX1은, 상기 특정한 사각형 화상 영역 BR로부터, 종속 파라미터 ysel에 의해, x 방향의 4 화소 대응 위치의 화소 데이터 Pixel을 판독한다.
그리고, 멀티플렉서 MUX2는, 상기 판독한 x 방향의 4개의 화소 데이터 Pixel 중에서, 종속 파라미터 xsel에 의해, 1개의 화소 데이터 Pixel을 선택하여 논리 회로 LOG1에 출력한다.
논리 회로 LOG1은, 종속 파라미터 wsel에 의해, 상기 선택한 1개의 화소 데이터 Pixel을 각각이 나타내는 64개의 화소 데이터 Pixel을, 출력 버퍼 out_buf에 기입한다.
논리 회로 LOG1은, 종속 파라미터 wsel에 의해, 64개의 화소 데이터 Pixel을 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 종속 파라미터 ld에 의해, 4 화소 데이터 Pixel마다 load 제어를 행한다.
[set#bxy]
SCU(203_0)는, 예를 들면, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#bxy」를 실행하면, 도 35에 도시한 바와 같이, 종속 파라미터 xsel, ysel로 선택된 사각형 화상 영역 BR의 좌단 좌표(bx, by)를 32개씩 복제하여 64개의 화소 데이터의 스트림 데이터를 생성하고, 종속 파라미터 wsel에 의한 화소 데이터 내부의 비트 선택 후에, 종속 파라미터 ld에 의해 출력 버퍼 out_buf에 설정한다.
본 실시 형태에서는, 사각형 화상 영역 BR로서 좌단 좌표가 서로 다른 8 종류가 준비되어 있다.
SCU(203_0)는, 사각형 화상 영역 BR의 y 방향의 값을 지정하는 레지스터 by0∼7과, x 방향의 값을 지정하는 레지스터 bx0∼7을 구비하고 있다.
SCU(203_0)는, 8개의 멀티플렉서 MUX11을 갖는다.
멀티플렉서 MUX11의 각각은, 각각 대응하는 레지스터 by의 값과 레지스터 xy의 값 중 한 방향을, 종속 파라미터 ysel에 의해 선택하고, 멀티플렉서 MUX12에 출력한다.
SCU(203_0)는, 2개의 멀티플렉서 MUX12를 구비하고 있다.
멀티플렉서 MUX12는, 각각 4개의 멀티플렉서 MUX11로부터 입력된 값 중 하나를, 종속 파라미터 xsel에 의해 선택하여 논리 회로 LOG31에 출력한다.
논리 회로 LOG31은, 종속 파라미터 wsel에 의해, 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD#0∼#3에의 load 제어를, 종속 파라미터 ld에 의해, 4 화소 데이터 Pixel마다 행한다.
이와 같이, 사각형 화상 영역 BR의 좌단 좌표를 PU_SIMD 처리 회로 #0∼#3에 출력하는 것은, PU_SIMD 처리 회로 #0∼#3의 PE에 있어서, 필터 처리 등에 있어서, 그 좌표를 처리에 이용하기 때문이다.
[set#BR#8x1#to#bxy]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#8x1#to#bxy」를 실행하면, 예를 들면, 도 36에 도시한 바와 같이, 사각형 화상 영역 BR 내에 x 방향으로 연속하는 2 pixel을 좌표로서 취급하기 때문에, BR#num으로 선택된 사각형 화상 영역 BR4∼7로부터 8 화소 데이터 Pixel을 선택하여, 사각형 화상 영역 BR의 좌단 좌표(bx, by)에 설정한다.
이것은, 후술하는 입력 데이터 변환 커맨드 「WI#data#op=set#BR4567#1of4x4」와 조합하여 지정함으로써, 메모리 간접 어드레스를 실현한다.
즉, 이 예에서는, 사각형 화상 영역 BR 내에, 사각형 화상 영역 BR의 좌단 좌표가, 화소 데이터로서 기억되어 있다.
[set#BR4567#1of4x4]
SCU(Stream Control Unit)(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR4567#1of4x4」를 실행하면, 예를 들면, 도 37에 도시한 바와 같이, 종속 파라미터 xsel, ysel에 의해, 멀티플렉서 MUX1, MUX2에서 4개의 사각형 화상 영역 BR로부터 각각 1 화소 데이터를 판독하여, 이것을 논리 회로 LOG51에 출력한다.
논리 회로 LOG51은, SCU(203_0)로부터 입력된 화소 데이터를, 종속 파라미터 wsel에 의해, 출력 버퍼 out_buf의 소정의 비트 위치에 기입한다.
논리 회로 LOG51은, 종속 파라미터 wsel에 의해, 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD#0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
이 예에서는, 상기 4개의 사각형 화상 영역 BR의 좌단 좌표로서, 상기 「set#BR#8x1#to#bxy」에 의해 설정된 것을 이용함으로써, 상기 메모리 간접 어드레스를 실현한다.
[set#in#buf#straight]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#in#buf#straight」를 실행하면, 예를 들면, 도 38에 도시한 바와 같이,PU_SIMD#0∼#3마다 구비된 4개의 입력 버퍼 in_buf 중에서, 2개의 입력 버퍼 in_buf(n), (n-1)을 선택한다.
입력 버퍼 in_buf(n), (n-1)의 각각은, 1(높이)×64(폭) 화소 데이터의 사이즈를 가지고 있다.
SCU(203_0)는, 64개의 멀티플렉서 MUX1을 구비하고 있다.
64개의 멀티플렉서 MUX1 각각은, 입력 버퍼 in_buf(n), (n-1)이 대응하는 2개의 화소 데이터 중, 하나를 종속 파라미터 ysel에 의해 선택하여 논리 회로 LOG61에 출력한다.
논리 회로 LOG61은, 종속 파라미터 wsel에 의해, 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
입력 데이터 변환 커맨드 「set#in#buf#straight」에 의해, 도 3에 도시하는 PU_SIMD 처리 회로 #0∼#3 사이에서의 데이터의 입출력이 가능하게 된다. 또한, 그 입력 데이터 변환 커맨드 「set#in#buf#straight」에 의해, PU_SIMD#0∼#3을 직렬 및 병렬 중 어느 것으로 접속할지를 프로그래밍(규정)할 수 있다.
[set#in#buf#with#BR#2x1]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#in#buf#with#BR#2x1」을 실행하면, 예를 들면, 도 39에 도시한 바와 같이, PU_SIMD#0∼#3마다 구비된 4개의 입력 버퍼 in_buf 중에서, 2개의 입력 버퍼 in_buf(n), (n-1)을 선택한다.
입력 버퍼 in_buf(n), (n-1)의 각각은, 1(높이)×64(폭) 화소 데이터의 사이즈를 가지고 있다.
SCU(203_0)는, 62개의 멀티플렉서 MUX1을 구비하고 있다.
62개의 멀티플렉서 MUX1 각각은, 입력 버퍼 in_buf(n), (n-1)이 대응하는 2개의 화소 데이터 중, 하나를 종속 파라미터 ysel에 의해 선택하여 논리 회로 LOG71에 출력한다.
논리 회로 LOG71은, 종속 파라미터 wsel에 의해, 62 화소 데이터와, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR로부터 판독한 2 화소 데이터의 합계 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#in#buf#with#BR#4x1]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#in#buf#with#BR#4x1」을 실행하면, 예를 들면, 도 40에 도시한 바와 같이, PU_SIMD 처리 회로 #0∼#3마다 구비된 4개의 입력 버퍼 in_buf 중에서, 2개의 입력 버퍼 in_buf(n), (n-1)을 선택한다.
입력 버퍼 in_buf(n), (n-1)의 각각은, 1(높이)×64(폭) 화소 데이터의 사이즈를 가지고 있다.
SCU(203_0)는, 60개의 멀티플렉서 MUX1을 구비하고 있다.
60개의 멀티플렉서 MUX1 각각은, 입력 버퍼 in_buf(n), (n-1)이 대응하는 2개의 화소 데이터 중, 하나를 종속 파라미터 ysel에 의해 선택하여 논리 회로 LOG81에 출력한다.
논리 회로 LOG81은, 종속 파라미터 wsel에 의해, 60 화소 데이터와, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR로부터 판독한 4 화소 데이터의 합계 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#16x1]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#16x1」을 실행하면, 예를 들면, 도 41에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 16 화소 데이터를 4배로 복제하여 64 화소 데이터의 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
논리 회로 LOG91은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 16 화소 데이터를 4배로 복제하여 얻어진 64 화소 데이터를 입력하고, 이들 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다. 따라서 4배로 복제한 데이터를 out#buf에 대하여 16 pixel마다 기입하는 것도 가능하다.
[set#BR#32x1]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#32x1」을 실행하면, 예를 들면, 도 42에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 32 화소 데이터를 2배로 복제하여 64 화소 데이터의 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
논리 회로 LOG101은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 32 화소 데이터를 2배로 복제하여 얻어진 64 화소 데이터를 입력하고, 이들 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다. 따라서 2배로 복제한 데이터를 out#buf에 대하여 32 pixel마다 기입하는 것도 가능하다.
[set#BR#64x1]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x1」을 실행하면, 예를 들면, 도 43에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 64 화소 데이터의 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
논리 회로 LOG111은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 64 화소 데이터를 입력하고, 이들 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x2]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x2」를 실행하면, 예를 들면, 도 44에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 128×1 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
64개의 멀티플렉서 MUX2의 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 x 방향으로 인접한 2 화소 데이터를 입력하고, 종속 파라미터 xsel에 의해, 1 화소 데이터를 선택하여 논리 회로 LOG121에 출력한다.
논리 회로 LOG121은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX2로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD#0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x2x2]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x2x2」를 실행하면, 예를 들면, 도 45에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 128×2 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
128개의 멀티플렉서 MUX1 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 y 방향으로 인접한 2 화소 데이터를 입력하고, 종속 파라미터 ysel에 의해, 1 화소 데이터를 선택하여, 64개의 멀티플렉서 MUX2에 출력한다.
64개의 멀티플렉서 MUX2는, x 방향으로 인접하는 2개의 화소 데이터 중, 하나의 화소 데이터를, 종속 파라미터 xsel에 의해 선택하여 논리 회로 LOG131에 출력한다.
논리 회로 LOG131은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX2로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x3]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x3」을 실행하면, 예를 들면, 도 46에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 192×1 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
64개의 멀티플렉서 MUX3 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 x 방향으로 인접한 3 화소 데이터를 입력하고, 종속 파라미터 xsel에 의해, 1 화소 데이터를 선택하여 논리 회로 LOG141에 출력한다.
논리 회로 LOG141은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX3으로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD#0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x3x3]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x3x3」을 실행하면, 예를 들면, 도 47에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 192×3 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
192개의 멀티플렉서 MUX4의 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 y 방향으로 인접한 3 화소 데이터를 입력하고, 종속 파라미터 ysel에 의해, 1 화소 데이터를 선택하여, 64개의 멀티플렉서 MUX3에 출력한다.
64개의 멀티플렉서 MUX3은, 멀티플렉서 MUX4로부터 입력된 x 방향으로 인접하는 3개의 화소 데이터 중, 하나의 화소 데이터를, 종속 파라미터 xsel에 의해 선택하여 논리 회로 LOG151에 출력한다.
논리 회로 LOG151은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX3으로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x4]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x4」를 실행하면, 예를 들면, 도 48에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 256×1 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
64개의 멀티플렉서 MUX5 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 x 방향으로 인접한 4 화소 데이터를 입력하고, 종속 파라미터 xsel에 의해, 1 화소 데이터를 선택하여 논리 회로 LOG161에 출력한다.
논리 회로 LOG161은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX5로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x4x4]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x4x4」를 실행하면, 예를 들면, 도 49에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 256×4 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
256개의 멀티플렉서 MUX6의 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 y 방향으로 인접한 4 화소 데이터를 입력하고, 종속 파라미터 ysel에 의해, 1 화소 데이터를 선택하여, 64개의 멀티플렉서 MUX5에 출력한다.
64개의 멀티플렉서 MUX5은, 멀티플렉서 MUX4로부터 입력된 x 방향으로 인접하는 4개의 화소 데이터 중, 하나의 화소 데이터를, 종속 파라미터 xsel에 의해 선택하여 논리 회로 LOG161에 출력한다.
논리 회로 LOG161은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX5로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x9]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x9」를 실행하면, 예를 들면, 도 50에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 576×1 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
64개의 멀티플렉서 MUX7의 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 x 방향으로 인접한 9 화소 데이터를 입력하고, 종속 파라미터 xsel에 의해, 1 화소 데이터를 선택하여 논리 회로 LOG171에 출력한다.
논리 회로 LOG171은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX7로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[set#BR#64x9x3]
SCU(203_0)는, 호스트 프로세서(101)로부터 입력 데이터 변환 커맨드 「set#BR#64x9x3」을 실행하면, 예를 들면, 도 51에 도시한 바와 같이, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 576×3 화소 데이터 중에서, 종속 파라미터 xsel에 의해, 64 화소 데이터를 선택하여 스트림 데이터를 생성하고, 이것을 소정의 화소 데이터 선택 처리를 거쳐, 출력 버퍼 out_buf에 기입한다.
576개의 멀티플렉서 MUX8 각각은, 종속 파라미터 BR#num으로 선택된 사각형 화상 영역 BR 내의 y 방향으로 인접한 3 화소 데이터를 입력하고, 종속 파라미터 ysel에 의해, 1 화소 데이터를 선택하고, 64개의 멀티플렉서 MUX7에 출력한다.
64개의 멀티플렉서 MUX7은, 멀티플렉서 MUX8로부터 입력된 x 방향으로 인접하는 9개의 화소 데이터 중, 하나의 화소 데이터를, 종속 파라미터 xsel에 의해 선택하여 논리 회로 LOG181에 출력한다.
논리 회로 LOG181은, 종속 파라미터 wsel에 의해, 64개의 멀티플렉서 MUX7로부터 입력된 64 화소 데이터를 그대로 출력 버퍼 out_buf에 기입할지, 혹은 각 화소 데이터 Pixel의 LSB로부터 4 비트를 팩하여 16개의 화소 데이터 Pixel에 수납할지를 결정한다.
SCU(203_0)는, 출력 버퍼 out_buf로부터 PU_SIMD 처리 회로 #0∼#3에의 load 제어를, 4 화소 데이터마다, 종속 파라미터 ld에 의해 행한다.
[SCU(203_0)에 의한 다중 사각형 화상 영역 정의(기입 시)]
SCU(203_0)는, 기억 영역 내의 사각형 화상 영역 WR 내에, 도 52에 도시한 바와 같이, 2차원 논리 어드레스 표현에 의해 다중 사각형 화상 영역으로서, 사각형 화상 영역 CR, DR을 규정할 수 있다.
각각의 위치 관계를 나타내는 값으로서 이하의 좌표값이 사용된다.
ww는, 사각형 화상 영역 WR의 x 방향 사각형 화상 영역 폭을 나타낸다.
cx, cy는, 사각형 화상 영역 WR 내의 사각형 화상 영역 CR의 2차원 좌표를 나타낸다. 이것은, 사각형 화상 영역 WR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 CR의 왼쪽 위의 좌표를 나타낸다.
cw 및 ch는, 사각형 화상 영역 CR의 폭과 높이를 나타낸다.
dx 및 dy는, 사각형 화상 영역 CR 내의 사각형 화상 영역 DR의 2차원 좌표를 나타낸다. 사각형 화상 영역 CR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 DR의 왼쪽 위의 좌표를 나타낸다.
dw 및 dh는, 사각형 화상 영역 DR의 폭과 높이를 나타낸다.
[SCU(203_0)에 의한 사각형 화상 영역 DR의 정의 모드]
SCU(203_0)는, dx, dy 및 dw, dh의 값을 조정함으로써, 도 53에 도시한 바와 같이, 사각형 화상 영역 CR을 일탈하도록 사각형 화상 영역 DR을 지정할 수 있다.
이에 의해, SCU(203_0)는, PU_SIMD 처리 회로 #0∼#3으로부터의 다양한 형태의 스트림 데이터를 입력할 수 있다.
이하, SCU(203_0)에 의한 사각형 화상 영역 DR의 지정의 형태를 나타내는 각종의 DR 모드를 설명한다.
DR 모드 1:
SCU(203_0)는, DR 모드 1로 설정되어 있는 경우에, 사각형 화상 영역 CR로부터 일탈하여 사각형 화상 영역 DR을 설정 가능하다.
SCU(203_0)는, 사각형 화상 영역 DR이 사각형 화상 영역 CR로부터 일탈한 경우에, 일탈한 영역에 포함되는 화소 대응 위치의 화소 데이터의 값을 사각형 화상 영역 CR에 기입하지 않는다.
사각형 화상 영역 DR 내의 화소 데이터는, 사각형 화상 영역 CR 내에서는 하기 수학식 10에 의해 규정된다.
DR 모드 2:
SCU(203_0)는, DR 모드 2로 설정되어 있는 경우에, 사각형 화상 영역 CR로부터 일탈하여 사각형 화상 영역 DR을 설정 가능하다.
SCU(203_0)는, 도 54에 도시한 바와 같이, 사각형 화상 영역 DR이 x 방향으로 사각형 화상 영역 CR로부터 일탈한 경우, 일탈 영역을 사각형 화상 영역 CR 내부로 절첩하도록 제어한다.
또한, SCU(203_0)는, 도 54에 도시한 바와 같이, 사각형 화상 영역 DR이 x 방향과 y 방향으로 사각형 화상 영역 CR로부터 일탈한 경우, 사각형 화상 영역 DR 내의 화소 데이터를 사각형 화상 영역 CR 내에 기입하지 않는다.
사각형 화상 영역 DR 내의 화소 데이터는, 사각형 화상 영역 CR 내에 있어 서, 하기 수학식 11과 같이 규정된다.
[PU_SIMD 처리 회로 #0∼#3의 출력 데이터 변환 처리]
PU_SIMD 처리 회로 #0∼#3이 출력한 스트림 데이터는, 입력 버퍼 in_buf에 기입된다.
SCU(203_0)는, 입력 버퍼 in_buf로부터 데이터를 판독하고, 재배열 등의 데이터 변환 처리를 실시한 후에, 사각형 화상 영역 DR에 기입한다.
또한, SCU(203_0)는, 필요에 따라서, 입력 버퍼 in_buf로부터 데이터를 판독하고, 마스크 데이터 DR#mask를 따른 재배열 등의 데이터 변환 처리를 실시한 후에, 사각형 화상 영역 DR에 기입한다.
SCU(203_0)는, PU_SIMD 처리 회로 #0∼#3 각각에 대해서, 상기 변환 처리를 지정할 수 있다.
SCU(203_0)는, 마스크 데이터 DR#mask를 기록하는 레지스터를 구비하고 있다.
SCU(203_0)는, PU_SIMD 처리 회로 #0∼#3 각각에 대응한 입력 버퍼 in_buf를 구비하고 있다.
SCU(203_0)는, 전술한 출력 데이터 변환 처리, 즉 PU_SIMD 처리 회로 #0∼#3 이 출력한 스트림을 사각형 화상 영역 DR에 기입하는 처리를, 예를 들면, 하기 표 4에 나타내는 출력 데이터 변환 커맨드 WO#data#op에 따라서 행한다.
SCU(203_0)는, 도 1에 도시하는 호스트 프로세서(101)로부터 출력 데이터 변환 커맨드를 입력하여 실행한다.
SCU(203_0)는, 표 4에 나타내는 각 출력 데이터 변환 커맨드에 있어서, 표 5에 나타내는 종속 파라미터를 지정할 수 있다.
이하, 상기 표 4에 나타낸 출력 데이터 변환 처리의 각각을 설명한다.
[set#DR#mask#64x1]
입력 버퍼 in_buf(0-15)의 각각에는, PU_SIMD#0∼#3으로부터 입력된 64 화소 데이터가 기입된다. 또한, 1 화소 데이터는, 4 비트에 의해 표현되어 있다.
여기에서, 예를 들면, 각 출력 버퍼 out_buf는, 각각 도 3에 도시한 하나의 프로세서 유닛 PU에 미리 대응시켜져 있다.
SCU(203_0)는, 도 55에 도시한 바와 같이, 각 화소 데이터를 구성하는 4 비트로부터 1 비트를 선택하고, 64 비트의 마스크 데이터 DR#mask로서, 마스크 레지스터 MR11에 기입한다.
마스크 데이터 DR#mask를 구성하는 각 비트는, 프로세서 유닛 PU의 출력을, 사각형 화상 영역 DR에 기입하는 경우에, 화소 데이터 단위의 마스크 정보로서 이용된다.
예를 들면 마스크 데이터 DR#mask의 비트가 「1」인 경우에는 화소 데이터를 사각형 화상 영역 DR에 기입하는 것을 의미하고, 「0」인 경우에는 기입하지 않는 것을 의미한다.
SCU(203_0)가, 사각형 화상 영역 DR에 실제로 화소 데이터를 기입하는 것은, 후술하는 출력 데이터 변환 처리 커맨드가 set#DR#packed=64x1인 경우이다.
SCU(203_0)는, 종속 파라미터 DR#num으로 선택된 64 비트 구성의 마스크 레지스터 MR1에 64 비트의 마스크 데이터 DR#mask를 기입한다.
또한, SCU(203_0)는, 종속 파라미터 DR#num으로 선택된 마스크 사이즈 레지스터 MSR11에는 64 비트의 마스크 데이터 DR#mask 중에서 「1」로 되어 있는 비트 수를 기입한다.
따라서, 마스크 사이즈 레지스터 MSR11에 기억되는 값은, 0∼64 중 어느 하나이다.
도 55에 도시하는 바와 같이 입력 버퍼 in_buf(0-15)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입된다.
비트 선택기 SEL11은, 입력 버퍼 in_buf(0-l5)에 저장되어 있는 64 화소 데이터를 구성하는 각 4∼1 비트를 종속 파라미터 bsel에 의해 선택한다. 선택은 4 종류이며 각 화소 데이터에서 동일한 bit가 선택된다.
SCU(203_0)는, 종속 파라미터 DR#num에서 선택한 마스크 레지스터 MR11에, 비트 선택기 SEL11로 선택된 데이터를 마스크 데이터 DR#mask으로서 저장한다.
[set#DR#packed#64x1]
도 56에 도시한 입력 버퍼 in_buf(0-63)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입되어 있다.
SCU(203_0)의 기입 제어 회로 WC11은, 종속 파라미터 DR#num으로 선택된 64 비트 구성의 마스크 레지스터 MR11에 기억되어 있는 마스크 데이터 DR#mask에 따라서, 입력 버퍼 in_buf에 기억되어 있는 화소 데이터를, 종속 파라미터 DR#num으로 선택된 사각형 화상 영역 DR에 기입한다.
이 때, 기입 제어 회로 WC11은, 마스크 데이터 DR#mask의 「1」을 나타내는 비트에 대응하는 화소 데이터를, 사각형 화상 영역 DR의 x 좌표의 작은 쪽부터 순차로 채워넣어(pack하여) 기입한다.
사각형 화상 영역 DR의 폭은 64 화소 데이터이고, 높이는 1 화소 데이터인데, 마스크 데이터 DR#mask에 따라서 화소 데이터를 팩(pack)하여 사각형 화상 영역 DR에 기입하기 때문에, 사각형 화상 영역 DR 전체에 화소 데이터가 기입된다고는 할 수 없다.
[set#DR#64x1]
도 57에 도시하는 입력 버퍼 in_buf(0-63)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입되어 있다.
SCU(203_0)는, 입력 버퍼 in_buf로부터 판독한 64 화소 데이터를, 종속 파라미터 DR#num으로 선택된 사각형 화상 영역 DR 내에 기입한다.
본 실시 형태에서는, 상기 사각형 화상 영역 DR의 사이즈는, 64×1 화소 데이터이다.
[set#DR#128x1]
도 58에 도시하는 입력 버퍼 in_buf(0-63)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입되어 있다.
SCU(203_0)는, 종속 파라미터 sel에 따라서, 입력 버퍼 in_buf로부터 판독한 64 화소 데이터를, 종속 파라미터 DR#num으로 선택된 사각형 화상 영역 DR 내에 기입한다.
본 실시 형태에서는, 상기 사각형 화상 영역 DR의 사이즈는, 128×1 화소 데이터이다.
SCU(203_0)는, 종속 파라미터 psel=0의 경우에는 사각형 화상 영역 DR의 x 좌표가 2의 배수인 좌표(화소 대응 위치)에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=1의 경우에는, 사각형 화상 영역 DR의 x 좌표가 2의 배수+1인 좌표에 화소 데이터를 기입한다.
[set#DR#192x1]
도 59에 도시하는 입력 버퍼 in_buf(0-63)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입되어 있다.
SCU(203_0)는, 종속 파라미터 sel에 따라서, 입력 버퍼 in_buf로부터 판독한 64 화소 데이터를, 종속 파라미터 DR#num으로 선택된 사각형 화상 영역 DR 내에 기입한다.
본 실시 형태에서는, 상기 사각형 화상 영역 DR의 사이즈는, 192×1 화소 데이터이다.
SCU(203_0)는, 종속 파라미터 psel=0인 경우에는 사각형 화상 영역 DR의 x 좌표가 3의 배수의 좌표(화소 대응 위치)에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=1인 경우에는, 사각형 화상 영역 DR의 x 좌표가 3의 배수+1인 좌표에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=2인 경우에는, 사각형 화상 영역 DR의 x 좌표가 3의 배수+2인 좌표에 화소 데이터를 기입한다.
[set#DR#256x1]
도 6O에 도시하는 입력 버퍼 in_buf(0-63)의 각각에는, 대응하는 프로세서 유닛 PU로부터 입력된 64 화소 데이터가 기입되어 있다.
SCU(203_0)는, 종속 파라미터 sel에 따라서, 입력 버퍼 in_buf로부터 판독한 64 화소 데이터를, 종속 파라미터 DR#num으로 선택된 사각형 화상 영역 DR 내에 기입한다.
본 실시 형태에서는, 상기 사각형 화상 영역 DR의 사이즈는, 256×1 화소 데이터이다.
SCU(203_0)는, 종속 파라미터 psel=0인 경우에는 사각형 화상 영역 DR의 x 좌표가 4의 배수의 좌표(화소 대응 위치)에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=1인 경우에는, 사각형 화상 영역 DR의 x 좌표가 4의 배수+1인 좌표에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=2인 경우에는, 사각형 화상 영역 DR의 x 좌표가 4의 배수+2인 좌표에 화소 데이터를 기입한다.
SCU(203_0)는, 종속 파라미터 psel=3인 경우에는, 사각형 화상 영역 DR의 x 좌표가 4의 배수+3인 좌표에 화소 데이터를 기입한다.
[SCU(203_0)의 동작 시퀀스]
도 2, 도 3, 도 27에 도시한 SCU(203_0)의 동작 시퀀스에 대하여 설명한다.
또한, SCU(203_1∼3)는, SCU(203_0)와 기본적으로 동일하다.
SCU(203_0)는, 4조의 내장 프로세서, 4조의 프로그램 메모리, 4조의 프로그램 카운터를 구비하고 있다.
SCU(203_0)는, 도 1에 도시한 호스트 프로세서(101)로부터 입력된 프로그램을 프로그램 메모리에 저장한다.
SCU(203_0)의 내장 프로세서는, 프로그램 카운터에 따라서, 상기 프로그램 메모리로부터 프로그램을 판독하여 실행한다. 그 프로그램에는, 전술한 데이터 변환 커맨드 WI#data#op, WO_data_op가 포함된다.
상기 내장 프로세서는, 예를 들면, RISC 프로세서이다.
상기 내장 프로세서는, PU_SIMD 처리 회로 #0∼#3의 처리 개시를 지시한다.
상기 내장 프로세서는, 사각형 화상 영역 WR/AR/BR/CR/DR의 어드레스, 사이즈를 지정함과 함께, 어드레스를 즉치 가산, 조건 분기 등을 행한다.
상기 내장 프로세서가 실행하는 커맨드(명령)는, instruction, operand0, displacement로 이루어진다.
상기 내장 프로세서는, finish 명령을 실행하면, 호스트 프로세서(101)에 인터럽트 신호를 출력하여 프로그램의 실행을 종료한다.
SCU(203_0)의 내장 프로세서가 실행하는 커맨드(명령)에 대하여 설명한다.
도 61에 도시한 바와 같이, 상기 내장 프로세서는, 커맨드 「exec」를 실행한다.
커맨드 「exec」는, 데이터 변환 커맨드 WI#data#op, WO#data#op, 및 그 파라미터인 WI#data#op#param, WO#data#op#param을 지정한다.
커맨드 「exec」는, DMA 전송을 지정하기 위하여 이용된다.
도 62에 도시한 바와 같이, 상기 내장 프로세서는, 커맨드 「branch」를 실행한다.
커맨드 「Branch」에는, 조건 없음의 정적 루프 처리와, 조건부의 처리가 있다.
그 조건부의 처리에서는, 사각형 화상 영역의 좌표 ax, ay, bx, by, cx, cy, dx, dy와 즉치의 비교 결과에 기초하여 조건을 판단한다.
도 63에 도시한 바와 같이, 상기 내장 프로세서는, 커맨드 「Set」를 실행한다.
커맨드 「Set」는, 사각형 화상 영역 ax, ay, aw, ah, bx, by, bw, bh 등 좌표 지정, 사각형 화상 영역 cx, cy, cw, ch, dx, dy, dw, dh 등의 좌표 지정 등을 규정한다.
커맨드 「Set」는, 사각형 화상 영역 WR을 규정하는 bp, ww를 지정한다.
커맨드 「Set」는, DMA 영역을 규정하는 전송원 개시 어드레스, 전송처 개시 어드레스, 전송 사이즈를 지정한다.
도 64에 도시한 바와 같이, 상기 내장 프로세서는, 커맨드 「add/sub」를 실행한다.
커맨드 「add/sub」는, 사각형 화상 영역 ax, ay, aw, ah, bx, by, bw, bh 등의 좌표의 가감산, 및 사각형 화상 영역 cx, cy, cw, ch, dx, dy, dw, dh 등의 좌표의 가감산을 행한다.
또한, 커맨드 「add/sub」는, dx에 있어서만, PU_SIMD 처리 회로 #0∼#3으로부터 설정 가능한 값을 가산 가능하다.
도 65(A)에 도시한 바와 같이, 상기 내장 프로세서는, 특별한 명령으로서 프로그램 카운터만큼 증가시키는 「no operation」이나, 프로그램 종료를 지시하는 「finish program」 등을 실행할 수 있다.
데이터 변환 커맨드의 종속 파라미터인 WI#data#op#param, WO#data#op#param은, 예를 들면, 도 65(B)에 도시한 바와 같이 규정된다.
그 종속 파라미터는, 데이터 변환 커맨드와 대응하고, SCU(203_0)의 메모리에 저장된다.
도 66에 도시한 바와 같이, SCU(203_0)는, 커맨드 「start PU_SIMD」를 실행함으로써, PU_SIMD#O∼#3에 처리를 개시시킨다.
SCU(203_0)는, 데이터 변환 커맨드 WI#data#op를 실행함으로써, 사각형 화상 영역 WR로부터 판독한 데이터를 변환하여 PU_SIMD 처리 회로 #0∼#3에 출력한다.
SCU(203_0)는, 데이터 변환 커맨드 W0_data_op를 실행함으로써, PU_SIMD#0∼#3으로부터 입력된 데이터를 변환하여 사각형 화상 영역 WR에 기입한다.
본 실시 형태에서는, SCU(203_0)의 처리(쓰레드)는, 도 1에 도시한 호스트 프로세서(101)가 개시 지시한다.
PU_SIMD(Single Instruction Multiple Data) 처리 회로 #0∼#3은 각 PU_SIMD 처리에 대응한 개별 쓰레드로 동작하고, 그 쓰레드는, SCU(203_0) 혹은 호스트 프로세서(101)에 의해 개시 지시된다.
데이터 변환 커맨드 WI#data#op, WO_data_op의 커맨드, 및 그 커맨드에 의해 입출력되는 데이터는, 도 67에 도시한 바와 같이, SCU(203_0) 내의 큐에 축적되어, 순차적으로 실행, 및 처리된다.
즉, 내장 프로세서는, 기억 영역의 리드/라이트 모두, 커맨드를 선행 발행하여 실행한다.
그리고, 내장 프로세서는, 데이터 변환 커맨드 WI#data#op, WO#data#op의 실행으로 어드레스 계산을 행하고, 그 어드레스를 리드 및 라이트별로 큐에 저장한다.
또한, 리드 및 라이트에 수반하는 데이터도 큐에 저장한다.
[화상 처리 장치(100)의 전체 동작예]
도 1에 도시한 호스트 프로세서(101)는 프로그램 PRG를 실행하고, 이에 의해 도 2에 도시한 SCU(203_0∼3)에 프로그램을 지정한다.
SCU(203_0∼3)는, 호스트 프로세서(101)에 의해 지정된 프로그램을 실행하여 얻은 각각 4개씩의 소정의 쓰레드에 기초하여, 각각 PU 어레이(202_0∼202_3) 내의 PE의 처리 진행에 따라서 메모리 시스템(105) 혹은 로컬 메모리(204_0∼3)에 대한 액세스를 실행한다.
PU 어레이(202_0∼202_3) 내의 도 3 및 도 4에 도시한 PE는, SCU(203_0∼3) 혹은 호스트 프로세서(101)의 제어에 따라서, SCU(203_0∼3)에 의한 메모리 액세스 결과를 이용하면서, SCU(203_0∼3)과는 서로 다른 쓰레드로 동작한다.
각 PU 어레이(202_0∼202_3) 내에서는, SCU(203_0∼203_3)에 의해, PU_SIMD#0∼#3이 병렬 혹은 직렬로 선택적으로 접속되어 동작한다.
PU_SIMD#0∼#3 내에서는, 도 4에 도시한 바와 같이, 16개의 PE0∼15가 시리얼로 접속되고, 인접하는 PE 사이에서 필요에 따라서 화소 데이터의 입출력이 행해진다.
이상 설명한 바와 같이, 본 실시 형태의 화상 처리 장치(100)에 따르면, 화상 처리 엔진(102)에 있어서, PU 어레이(202_0∼202_3) 내의 PU_SIMD(Single Instruction Multiple Data) 단위를 공통의 쓰레드로 동작시키고, 그 쓰레드와는 별도의 쓰레드로 SCU(203_0∼3)를 동작시킨다.
이에 의해, 방대한 화소 데이터에 대해서, 그것에 대한 처리를 미리 특별하게 지정할 수 있고, 또한 서로 독립인 것을 이용하여, 복수의 프로세서 엘리먼트(PE)에 있어서 공통의 쓰레드에 기초하여 병렬적으로 실행할 수 있다.
SCU(203_0∼3)의 쓰레드를, PU 어레이(202_0∼202_3)의 쓰레드와는 별도로 함으로써, PE의 처리의 백엔드로, 그 PE의 처리와 관련된 데이터에 관한 기억 영역에 대한 액세스를 효율적으로 실현할 수 있다.
화상 처리 엔진(102)에 따르면, PU 어레이(202_0∼202_3)의 처리와 관련된 데이터에 관한 기억 영역에의 액세스를 SCU(203_0∼3)가 행함으로써, PU 어레이(202_0∼202_3)의 PE는 기억 영역에의 액세스 처리를 행할 필요가 없어, 화상 처리를 효율적으로 행할 수 있다.
화상 처리 엔진(102)에 따르면, 도 3에 도시한 바와 같이 프로세서 유닛 PU가 시리얼 접속된 양측의 프로세서 유닛 PU에 화소 데이터를 입출력할 수 있음과 함께, 도 4에 도시한 바와 같이 프로세서 유닛 PU 내에서 시리얼 접속된 PE가 양측의 PE에 화소 데이터를 입출력할 수 있다. 이에 의해, 각 PE가 독립하여 메모리 액세스하는 경우에 비하여, 메모리 액세스 횟수를 대폭 삭감할 수 있다.
본 발명은 전술한 실시 형태에 한정되지는 않는다.
즉, 본 발명의 기술적 범위 또는 그 균등한 범위 내에 있어서, 전술한 실시 형태의 구성 요소에 관하여, 다양한 변경, 및 대체를 행하여도 본 발명은 적용된다.
예를 들면, 도 2에 도시한 예에서는, 제어 프로세서(201)에 의해, 복수의 SCU(203_0∼3)를 통괄하여 제어하는 예를 설명했지만, 도 68에 도시한 바와 같이, SCU(203_0∼3)의 각각을 제어하는 제어 프로세서(201_0∼201_3)를 개별로 설치하여도 된다.
<제2 실시 형태>
본 제2 실시 형태의 화상 처리 장치(100)는, 도 1에 도시한 바와 같은 제1 실시 형태와 마찬가지의 구성을 가지지만, 화상 처리 엔진(102)의 구성이 제1 실시 형태와 상이하다. 화상 처리 엔진(102) 이외의 화상 처리 장치(100)의 구성은, 제1 실시 형태와 마찬가지이므로, 여기에서는 설명을 생략한다.
이하, 제2 실시 형태의 화상 처리 엔진(102)의 구성에 대하여 설명한다.
[화상 처리 엔진(102)]
제1 실시 형태와 마찬가지로, 화상 처리 엔진(102)은, 프로그래머블한 화상 프로세서이며, 화상 처리 장치(100)에서 실행되는 애플리케이션 프로그램에 따라서 호스트 프로세서(101)가 지시하는 화상 처리를 실행한다.
화상 처리의 대상으로 되는 화상 데이터로서는, 센서 I/F(106)를 통하여 입력되는 카메라 모듈(107)에서 촬영된 데이터, 메모리 I/F(104)를 통하여 입력되는 메모리 시스템(105)에 저장된 데이터, 기억 매체 I/F(108)를 통하여 입력되는 기억 매체(109)에 저장된 데이터, 혹은 코덱 엔진(103)으로부터 공급되는 데이터, 코덱 엔진(103)에서 처리된 데이터가 있다.
화상 처리 엔진(102)은, 자기의 처리 결과를, 메모리 I/F(104)를 통하여 메모리 시스템(105)에 저장하고, 기억 매체 I/F(108)를 통하여 기억 매체(109)에 저장하고, 코덱 엔진(103)에 출력하고, 내장 표시 장치 I/F(110)를 통하여 내장 표시 장치(111)에 표시하거나, 혹은 비디오 I/F(112)를 통하여 외부의 장치에 출력한다.
도 69는, 제2 실시 형태의 화상 처리 엔진(102)의 전체 구성도이다.
도 69에 도시한 바와 같이, 화상 처리 엔진(102)은, 제어 프로세서(CPU)(201), PU(프로세서 유닛) 어레이(202_0∼202_3), 및 로컬 메모리(204_0∼204_3)를 갖는다.
제어 프로세서(201)는, 화상 처리 엔진(102) 전체를 제어하는 프로세서이며, 화상 처리 엔진(102)의 각 구성 요소에 대한 설정이나 기동, 및 SIMD(Single Instruction Multiple Data)형 프로세서 어레이인 PU 어레이(202)에서의 병렬화가 곤란한 처리의 실행을 담당한다.
PU 어레이(202_0∼202_3)는, 프로그래머블한 연산부이며, 후술하는 바와 같이 복수의 SIMD형 프로세서 어레이로 구성된다.
또한, 본 실시 형태의 PU 어레이(202_0∼203_0)는, 후술하는 바와 같이 SCU(Stream Control Unit)를 그 내부에 갖는 점이 제1 실시 형태와 상이하다.
로컬 메모리(204_0∼204_3)는, 화상 처리 엔진(102)의 워킹 메모리이며, 메모리 시스템(105)에 저장된 화상 데이터의 일부의 유지, 각각 PU 어레이(202_0∼202_3)에서 처리된 중간 결과의 저장, 각각 PU 어레이(202_0∼202_3)에서 실행되는 프로그램이나 각종 파라미터의 저장 등을 행한다.
화상 처리 엔진(102)은, 호스트 프로세서(101)의 제어에 의해, 예를 들면, 도 69에 도시한 PU 어레이(202_0∼202_3)를 공통의 쓰레드로 동작시킨다.
공통의 쓰레드란, 예를 들면, 공통의 프로그램에 기초하여 처리를 진행시키는 것을 의미한다.
[PU 어레이(202_0∼202_3)]
PU 어레이(202_0)에 대하여 설명한다.
PU 어레이(202_1∼202_3)는, PU 어레이(202_0)와 마찬가지의 구성을 가지고 있다.
도 70은, 도 69에 도시한 PU 어레이(202_0)의 구성도이다.
도 70에 도시한 바와 같이, PU 어레이(202_0)는, 4개의 PU_SIMD(Single Instruction Multiple Data) 처리 회로 #0∼#3과, 각각의 PU_SIMD에 대응하여 접속된 SCU#10∼#13을 갖는다.
PU_SIMD 처리 회로 #0은, 컨트롤 유닛(303_0)과, 4개의 프로세서 유닛 PU#00∼#03을 갖는다.
4개의 프로세서 유닛 PU#00∼#03은, 동일 명령에서 동작하는 SIMD형 프로세서를 구성한다.
4개의 프로세서 유닛 PU#00∼#03은, 일차원 형상으로 가로 접속되어 있다.
프로세서 유닛 PU#00∼#03 사이의 접속을 인접하는 프로세서 유닛 사이로 한정함과 함께, SCU로부터의 데이터 공급에 이용하는 I#BUS를 4개의 프로세서 유닛에서 공유함으로써, 배선을 적게 할 수 있음과 함께, 버스 제어를 간단하게 할 수 있다.
프로세서 유닛 PU#00∼#03은, 시리얼로 접속한 것에 의해, 인접 화소 데이터를 빈번하게 사용하는 화상 처리에 있어서, 로컬 메모리를 통하지 않고 화소 데이터를 직접적으로, 인접하는 프로세서 유닛에 출력할 수 있어, 처리 시간을 단축할 수 있다.
PU_SIMD 처리 회로 #1∼#3은, PU_SIMD 처리 회로 #0과 마찬가지의 구성을 가지고 있다.
[프로세서 유닛 PU#00]
프로세서 유닛 PU#00의 구성에 대해서는, 제1 실시 형태에 있어서 도 4와 관련시켜 행한 설명과 마찬가지이기 때문에, 여기서는 설명을 생략한다.
SCU(Stream Control Unit)#10으로부터 입력 데이터 버스 I_BUS0을 통하여 프로세서 유닛 PU#00에 입력된 데이터는, PU#00 내의 입력 라인 버퍼(401)에 기입된다.
프로세서 엘리먼트 PE0∼15 각각은, 입력 라인 버퍼(401)로부터 판독한 데이터를 이용하여 연산을 행하고, 그 연산 결과를 출력 라인 버퍼(404)에 기입한다.
SCU#10은, 출력 라인 버퍼(404)로부터 연산 결과를 판독한다.
도 70에 도시한 바와 같이, PU 어레이(202_0)는, 4개의 PU_SIMD 처리 회로 #0∼#3을 독립하여 병렬로 동작시킬 수도, 직렬 동작시킬 수도 있다. 직렬로 동작시키는 경우에는, SCU 사이의 접속을 이용하여 접속된다.
도 7O에 도시한 컨트롤 유닛(303_0)은, 도시되지 않은 명령 저장용 메모리를 갖고, 그 명령 저장용 메모리로부터 판독한 명령을 디코드하여 얻은 제어 신호를, PU_SIMD#0 내의 모든 PE에 출력한다.
컨트롤 유닛(303_0) 내에는, 여기에는 도시되지 않은 프로그램 플로우 제어용 루프 레지스터나, PE 내의 스트림 레지스터에 액세스하기 위한 포인터 레지스터가 포함된다.
루프 레지스터는, 프로그램 내의 루프 횟수를 제어하는 레지스터이며, 제어 프로세서(201)가 설정하거나, 혹은 프로그램 실행 시에 명령에 의해 설정할 수 있다.
명령에 의해 루프 레지스터를 설정하는 경우에, PE 내의 레지스터값을 소스 오퍼랜드로서 지정할 수 있다. 이 때에는 복수의 PE 중, 미리 결정된 PE, 예를 들면 도면 중 좌단의 PE, 예를 들면, 프로세서 유닛 PU#00의 PE0의 레지스터값을 사용한다.
포인터 레지스터에 대해서도, PE 내의 레지스터값을 소스 오퍼랜드로서 지정할 수 있지만, 루프 레지스터의 경우와 마찬가지로 특정 PE의 레지스터값을 사용한다.
컨트롤 유닛(303_1 내지 303_3)에 대해서도 마찬가지이다.
이하, 카메라 모듈(107)을 이용하여 촬상된 정지 화상을 기록하는 경우를 예로 들어, 화상 처리 장치(100)에서의 처리 수순 및 처리 분배를 설명한다.
카메라 모듈(107) 내의 촬상 소자에서 촬영된 데이터는, 수평 스캔 라인마다 센서 I/F(106)를 통하여 판독되고, 화상 처리 엔진(102)에 출력됨과 함께, 메모리 시스템(105)에 저장된다. 이 때, 화상 처리 엔진(102)에서는, 검파 처리의 일부가 실행된다.
메모리 시스템(105)에 1 프레임 분의 화상 데이터가 저장되면, 화상 처리 엔진(102)은, 내부의 PU_SIMD 처리 회로를 효율적으로 병렬 동작시키기 위해서, 1 프레임 분의 화상 데이터 중, 필요한 사각형 화상 영역을 판독하면서 검파 처리의 나머지나 각종 카메라 신호 처리, 및 각종 화상 처리를 실행한다.
화상 처리 엔진(102)의 처리 결과는, 메모리 시스템(105)에 저장된다.
화상 처리 엔진(102)은, 해상도 변환도 행한다. 해상도 변환된 화상 데이터는, 내장 표시 장치 I/F(110)를 통하여 내장 표시 장치(111)에 표시된다.
코덱 엔진(103)은, 메모리 시스템(105)에 저장되어 있는 화상 처리 엔진(102)에 의해 처리된 복수 프레임의 화상 데이터를 이용하여 화상 압축을 행한다. 압축된 화상 데이터는, 기억 매체 I/F(108)를 통하여 기억 매체(109)에 기록된다.
화상 처리 엔진(102)은, 복수개의 PU 어레이(202_0∼202_3)로 구성되지만, 각각의 PU 어레이(202_0∼202_3)는, 프레임 내의 서로 다른 영역을 처리한다.
본 제2 실시 형태와 같이 4개의 PU 어레이(202_0∼202_3)로 구성하는 경우, 예를 들면 제1 실시 형태에서 도 5에 관련시켜 설명한 바와 같이, 각 PU 어레이(202_0∼202_3)에 영역을 할당할 수 있다.
PU 어레이(202_0∼202_3)의 각각은, 전술한 바와 같이 64개의 PE로 이루어지는 PU_SIMD 처리 회로를 복수개 갖고, 예를 들면 제1 실시 형태에 있어서 도 6에 관련시켜 설명한 바와 같이, 각 PU 어레이(202_0∼202_3)에 할당한 영역을, 또한 가로 64 픽셀 폭의 사각형 화상 영역으로 분할하고, 각 픽셀을 1개의 PE에 할당할 수 있다.
이 때, 각 PE는, 제1 실시 형태에 있어서 도 7에 관련시켜 설명한 바와 같이, 스스로의 할당된 세로 방향의 픽셀 열을 순차로 처리한다.
예를 들면, PU 어레이(202_0)가 제1 실시 형태의 도 8에 도시한 바와 같이, 5×5 화소의 필터 처리를 행하는 경우를 생각한다.
이 때, PU 어레이(202_0) 내의 각 PE는, 제1 실시 형태의 도 8에 도시한 바와 같이, 처리 대상의 화소 위치 Pixel의 화소 데이터의 필터 처리를 행하기 위해서, 화소 위치 Pixel을 중심으로 한 5×5의 화소 위치의 화소 데이터를 이용한다.
PU 어레이(202_0) 내의 각 PE는, 도 8에 도시한 화살표(도면 중 아래 방향으로 순차로 처리 대상의 화소 위치를 이동시킨다.
PU 어레이(202_0) 내의 각 PE가 화소 위치 Pixel의 상기 5×5 화소의 필터 처리를 종료하면, 제1 실시 형태의 도 9에 도시한 바와 같이, 다음의 1 라인 분의 화소 위치의 화소 데이터를 로컬 메모리(204_0) 혹은 메모리 시스템(105)으로부터 판독하여 PU 어레이(202_0) 내의 프로세서 유닛 PU의 입력 라인 버퍼(401)에 기입한다.
그리고, PU 어레이(202_0) 내의 각 PE는, 제1 실시 형태의 도 10에 도시한 바와 같이, 다음의 화소 위치 Pixel_next의 화소 데이터의 5×5 화소의 필터 처리를 행한다.
또한, 이상의 설명에서는 도 70에 도시한 PU_SIMD#0을 중심으로 설명했지만, PU_SIMD#1∼#3은 PU_SIMD#0과 마찬가지이다.
PU 어레이(202_1∼202_3)는, PU 어레이(202_0)와 마찬가지이다.
[프로세서 엘리먼트 PE]
다음으로, PEn(n=1∼14)에 대하여 설명한다.
또한, PE0은 PE 사이에서는 PE1과의 사이에서만 데이터 입출력을 행하고, PE15는 PE14와의 사이에서만 데이터 입출력을 행하는 점을 제외하고 PEn과 동일하다.
도 71은, 제2 실시 형태에서의 PEn의 구성도이다.
도 71에 도시한 바와 같이, PEn은, 멀티플렉서 MUX1000, 1001, 스트림 레지스터 SR0∼SR3 등의 각종 레지스터, 연산 논리 유닛 ALU를 갖는다.
입력 라인 버퍼(401)는, SCU(Stream Control Unit)로부터 보내지는 입력 데이터를 수취하기 위한 버퍼이다. 1개의 PE당 16 bit의 데이터를 1단분 유지할 수 있다.
출력 라인 버퍼(404)는, PE에서의 연산 결과를 SCU에 보내기 위한 버퍼이다.
1개의 PE당 16 bit의 데이터를 1단분 유지할 수 있다.
스트림 레지스터 SR0∼3은, 16 bit 폭, 엔트리 수 16의 레지스터 파일이며, 각 PE는 합계 4개의 SR을 갖는다.
스트림 레지스터 SR0∼3은, 주로, SCU로부터 공급되는 연산에 필요한 데이터의 저장이나, 연산 결과의 일시 대피를 행하기 위한 레지스터로, 직접 어드레스 지정에 의한 참조에 의한 참조가 가능하다. 각 스트림 레지스터마다 최대 4개의 포인터를 정의할 수 있다. 각 포인터는, 이하의 3개의 값을 갖는다. 즉, 포인터 정의 영역의 시점인 「Start」와, 포인터 정의 영역의 종점인 「End」와, 현재의 포인터 위치인 「Current」이다. 단, End≥Start여야 한다. 2개의 포인터의 Start와 End를 동일하게 하고, 하나를 Read 포인터, 다른 쪽을 Write 포인터로서 사용함으로써, FIFO로서 기능시킬 수 있다. 또한, 포인터마다 Start와 End를 바꾸어도 된다.
또한, 동일 스트림 레지스터 내의 완전 독립된 포인터에 대해서, Start와 End에서 지정하는 영역이 상호 중복하는 것을 금지하지는 않는다.
이하, 스트림 레지스터 SR0∼3과 관련한 기능에 대하여 설명한다.
1) 스트림 레지스터 SR0∼3의 참조
스트림 레지스터 SR0∼3에 대하여 기입 혹은 판독을 행할 때의 참조 방법으로서는, 포인터 참조와 직접 참조의 2 종류가 있다.
포인터 참조는, 지정한 포인터의 Current로부터의 오프셋으로 참조한다. 오프셋 값은, 판독의 경우에는 0∼15의 범위의 양의 정수, 기입의 경우에는 0∼3의 범위의 양의 정수이다.
직접 참조는, 스트림 레지스터 SR0∼3 내의 엔트리를 즉치로 지정한다. 즉치는, 0∼15의 범위의 양의 정수이다.
2) 포인터 조작
이하에 기재한 바와 같은 포인터 조작을 실현하는 명령이 준비되어 있다.
a) 포인터가 갖는 값의 즉치 지정
Start, End의 각 값을 즉치에 의해 지정한다.
b) Current값에 대한 즉치 가산
가산하는 즉치는, ―8∼7의 범위의 정수이다.
c) 포인터가 갖는 값의 초기화
Start, End, Current의 각 값은, 리셋 후에, 각각, 0, 15, 0으로 초기화된다. 또한, Current값을 Start값으로 초기화하는 명령도 준비되어 있다.
3) Wraparound
스트림 레지스터 SR0∼3에 대한 포인터 참조나 포인터 조작을 행했을 때에, <Start, End>에서 정의되는 영역을 초과하는 경우가 있다. 이 경우에는, 이하와 같은 Wraparound가 행해진다. 여기에서, 스트림 레지스터 SR0∼SR3의 엔트리에의 Wraparound 전과 후의 index를 각각 idxbw, idxaw로 하면,
idxaw=(idxbw>End)?
Start+(idxbw-End-1)%(End-Start+1): idxbw
idxaw=(idxbw<Start)?
End-(Start-idxbw-1)%(End-Start+1): idxbw
이다.
4) 연결 모드
4개 있는 스트림 레지스터 SR0∼3 중, SR0과 SR1 혹은 SR2와 SR3의 조합에 대해서, 동일 포인터에서 지정되는 포인터 정의 영역끼리를 연결하여 사용할 수 있다. 예를 들면, SR0과 SR1의 조합에 대해서, 포인터 0을 연결한 경우에는, SR0용 포인터 0의 Start와 End에 의해 정의되는 영역과 SR1용 포인터 0의 Start와 End에 의해 정의되는 영역이 연결된다. 어떤 포인터에 대하여 연결 모드를 지정하면, 스트림 레지스터 페어 중 짝수측의 포인터만 유효로 된다. 짝수측의 포인터치가 End를 초과하면, 자동적으로 홀수측의 포인터 영역으로 포인터치가 변경되어, 마치 양 영역이 연속하고 있는 것처럼 사용할 수 있다. 또한, 홀수측의 포인터 영역의 End를 초과하면, 자동적으로 짝수측의 Start값으로 변경되는 Wraparoud 기능도 실현한다. 이 기능에 의해, 2개의 스트림 레지스터의 빈 영역을 유효 이용하거나, 16 엔트리를 초과하는 포인터 영역을 정의하거나 할 수 있다. 포인터의 동작 모드로서 연결 모드가 설정된 경우에는, 짝수측의 포인터만 사용할 수 있다. 연결 모드의 설정은, 스트림 레지스터 단위가 아니라, 포인터 단위로 설정한다. 따라서, 각 포인터에 대한 연결 모드의 설정은 상호 독립되어 있다.
PE가 갖는 다른 레지스터군에 대하여 간단히 설명한다.
레지스터 S0∼S3은, 4개의 범용 레지스터이며, 각각 16 bit 길이이다. 32 bit 데이터를 취급하는 연산을 행하는 경우에는, 연속하는 2개의 레지스터, 즉 S0과 S1 혹은 S2와 S3을 레지스터 페어로서 오퍼랜드 지정할 수 있다.
레지스터 TEMPS는 데이터 길이가 16 비트인 일시 퇴피용 레지스터이다.
레지스터 TEMPS는, 공유 기능 유닛(403)을 이용할 때에 이용되는 레지스터이며, 공유 기능 유닛(403)에의 액세스 이외의 경우에서는, 워킹 레지스터로서 사용할 수 있다. 이들 레지스터는, 산술 논리 연산 명령의 소스 오퍼랜드와 데스티네이션 오퍼랜드의 양방으로 지정할 수 있다.
레지스터 COND는, 주로 조건 실행을 행할 때에 이용되는 데이터 길이가 4 비트인 컨디션 레지스터이다. 산술 논리 연산의 데스티네이션 오퍼랜드로서 지정 가능하며, 이 때에는, 연산 결과 중의 임의의 1 비트, 연산 논리 유닛 ALU에서의 연산의 결과, 캐리가 선 것을 나타내는 캐리 플래그, 혹은 연산 결과가 O인 것을 나타내는 제로 플래그 중 어느 것인가의 선택과 컨디션 레지스터의 어느 비트에 반영시킬지를 지정한다.
레지스터 PENUM은, 자신의 프로세싱 엘리먼트 번호(0∼63)가 저장되어 있는 데이터 길이가 6 비트인 프로세서 번호 레지스터이며, 판독 전용이다.
도 71에 있어서 Const라고 기재된 패스는, 레지스터 CONSTANT를 소스 오퍼랜드로서 지정한 경우에 상수값을 전달하는 패스이며, 16 bit 폭이다. 레지스터 CONSTANT는, 복수의 레지스터로 구성된다. 레지스터 CONSTANT는, PE마다 갖는 것이 아니라, SCU 내에 가져진다.
PE에서는, 연산을 행할 때에, 자신의 레지스터뿐만 아니라, 인접하는 PE의 레지스터를 참조할 수 있다. 즉, PE1은 PE0과 PE2의 레지스터를 참조할 수 있다. 단, 인접 PE 사이에서 참조할 수 있는 것은, 범용 레지스터 S0∼S3뿐이다. 도 71에 있어서, To Left PE, To Right PE라고 기재한 패스가, 각각 좌인접 PE, 우인접 PE에 범용 레지스터 S0∼S3의 값을 전달하는 패스이다. 또한, From Left PE, From Right PE라고 기재한 패스가, 각각 좌인접 PE, 우인접 PE로부터 선택된 레지스터의 값을 수취하는 패스이다. 본 제2 실시 형태의 PE는, 좌인접 PE용과 우인접 PE용으로 별도의 멀티플렉서를 준비하고 있으므로, 좌우 각각 서로 다른 범용 레지스터 참조를 동일 사이클에서 행할 수 있으므로, 처리를 빠르게 행할 수 있다. 또한, PE0 및 PE15를 참조할 수 있는 것은, 좌우 어느 한쪽의 PE의 레지스터만으로 된다.
다음에 연산 논리 유닛 ALU에 대하여 설명한다.
도 71에 도시한 바와 같이, PE는 3종류의 연산 논리 유닛을 갖고, 이들 3개의 연산 논리 유닛을 이용한 연산을 동시 실행 가능하다. 3 종류의 연산 논리 유닛은, 승산을 행하는 유닛인 Operator Resource M과, 주로 가감산이나 비교 연산을 행하는 유닛인 Operator Resource A/B와, 주로 논리 연산이나 시프트를 행하는 유닛인 Operator Resource L이다.
PE에서의 연산에 필요한 데이터는, SCU에 의해 입력 라인 버퍼(401)에 기입된다. 입력 라인 버퍼(401)의 용량은, 1 PE당 16bit 폭 1단분이다. 또한, PE에서 연산된 결과는 출력 라인 버퍼(404)에 기입된다. 입력 라인 버퍼(401)와 마찬가지로, 그 용량은, 1 PE당 16bit 폭 1단분이다.
PE는, 로드 명령에 의해 입력 라인 버퍼(401)에 기입된 데이터를 스트림 레지스터 SR0∼SR3에 전송한다. 스트림 레지스터 SR0∼SR3에는, 입력 라인 버퍼 이외에, 레지스터 COND로부터의 로드도 가능하다. 반대로, 스트림 레지스터 SR0∼SR3으로부터 레지스터 COND에 데이터를 이동하는 명령도 준비되어 있다.
출력 라인 버퍼(404)에의 기입은, 통상은 연산 명령의 데스티네이션 오퍼랜드에 직접 지정하는 것에 의해 행하지만, 레지스터 COND로부터 출력 라인 버퍼(404)에 데이터를 이동하는 명령도 준비되어 있다.
이들 데이터 전송은, 연산 논리 유닛 ALU가 행하는 연산과 병행되어 행해진다.
즉, 제2 실시 형태의 PE에서는, 동시에 복수의 연산을 행할 수 있다.
공유 기능 유닛(403)에 대해서는, 제1 실시 형태에서 행한 설명과 마찬가지이기 때문에, 설명을 생략한다.
[SCU(Stream Control Unit)#10∼#13]
이하, SCU#10에 대하여 설명한다.
SCU#11∼#13은, SCU#10과 동일하다.
SCU#10은, 도 7O 등에 도시한 바와 같이, 복수의 PU_SIMD(Single Instruction Multiple Data) 처리 회로 #0에 대해서, 그것을 구성하는 개개의 프로세서 엘리먼트 PE의 처리에 필요한 데이터를 효율적으로 데이터를 입출력하기 위한 제어를 행한다.
마찬가지로, SCU#11은 PU_SIMD 처리 회로 #1에 대해서, SCU#12는 PU_SIMD 처리 회로 #2에 대해서, SCU#13은 PU_SIMD 처리 회로 #3에 대해서, 그것을 구성하는 개개의 프로세서 엘리먼트 PE의 처리에 필요한 데이터를 효율적으로 데이터를 입출력하기 위한 제어를 행한다.
SCU#10은, 처리에 필요한 데이터를 반도체 메모리 등으로 대표되는 기억 장치에 수납한다.
PU_SIMD 처리 회로 #0∼#3은, SIMD형 프로세서이기 때문에, 모든 PE에 대한 입출력은 시간적으로 동시에 행해진다. 따라서, SCU#10에 의한 PU_SIMD#0에 대한 입출력은, PE의 개수분의 입출력 데이터를 동시에 입출력하게 된다. 이하 동시에 입출력되는 데이터를, 스트림 데이터라고 부르기로 한다.
한편, PU_SIMD 처리 회로 #0∼#3은 화상 정보의 처리를 주로 행하지만, 처리 대상인 화상 정보는, 메모리 등의 기억 장치에 있어서, 물리적인 1차원의 어드레스로 관리된 기억 영역 내에, 논리적인 2차원 기억 영역을 확보하여 기억되어 있다. 그 화상 데이터의 기본 단위는 화소 데이터라고 불린다.
SCU#10은, PU_SIMD 처리 회로 #0과, 메모리 시스템(105) 및 로컬 메모리(204_0)의 사이에 위치하고, 복수의 화소 데이터를 스트림 데이터로 변환하여 입출력을 행하는 기능을 가지고 있다.
다음으로, SCU#10의 구조에 대하여 설명한다.
도 72는, SCU#10의 구조를 도시하는 블록도이다.
도 72에 도시한 바와 같이, SCU#10은, 기입부(#101)과, 판독부(#102)와, 제어부(#103)으로 이루어진다.
기입부(#101)은, 로컬 메모리(204_0) 또는 메모리 시스템(105)(이하 기억 영역)에의 기입을 행한다.
판독부(#102)는, 기억 영역으로부터의 판독을 행한다.
제어부(#103)은, SCU#10의 전체적인 제어를 행하는 CPU 등의 제어 장치이며, 데이터 처리나 PU_SIMD 처리 회로 #0에의 데이터 공급을 행한다.
이하, SCU#10이 기억 영역 내에 정의하는 사각형 화상 영역에 대하여 설명한다.
SCU#10이 취급하는 기억 영역 내의 사각형 화상 영역의 계층 구성을, 도 73을 참조하여 설명한다.
도 73에 도시한 바와 같이, SCU#10은, 기억 영역 내에, 입력 작업 영역으로서 사각형 화상 영역 WIR을 지정한다.
SCU#10은, 사각형 화상 영역 WIR 내에, 화소 데이터의 판독원인 사각형 화상 영역 BR을 지정한다.
SCU#10은, 호스트 프로세서(101)로부터 입력된 프로그램에 기초하여, 사각형 화상 영역 BR로부터 판독한 화소 데이터를, PU_SIMD 처리 회로 #0∼#3이 필요로 하는 스트림 데이터로 변환하는 데이터 변환 커맨드 WI#data#op를 실행(지정)한다.
SCU#10은, 후술하는 바와 같이 사각형 화상 영역 BR 및 WI_data_op 지정의 일련의 반복 처리를 프로그램 가능하다.
도 73에 도시한 바와 같이, SCU#10은, 기억 영역 내에, 출력 작업 영역으로서 사각형 화상 영역 WOR을 지정한다.
SCU#10은, 사각형 화상 영역 WOR 내에, 화소 데이터의 기입처인 사각형 화상 영역 DR을 지정한다.
SCU#10은, PU_SIMD#0의 출력 스트림 데이터로부터, 사각형 화상 영역 DR에의 데이터 변환 커맨드 WO#data#op를 실행한다.
SCU#10은, 후술하는 바와 같이 사각형 화상 영역 DR, WO_data_op 지정은, 일련의 반복 처리를 프로그램 가능하다.
SCU#10은, 사각형 화상 영역 BR은 사각형 화상 영역 WIR 내의, 사각형 화상 영역 DR은 사각형 화상 영역 WOR 내의, 임의의 위치에의 배치와 이동 가능하다.
SCU#10은, 사각형 화상 영역 WIR 혹은 WOR 내에 있어서, 사각형 화상 영역 BR 혹은 DR을, 2차원 논리 좌표로 지정이 가능하다.
SCU#10은, 기억 영역에 대하여 사각형 화상 영역 WIR 혹은 WOR을 물리 어드레스로 지정할 수 있다.
SCU#10은, 사각형 화상 영역 WIR, WOR, BR, DR 내부의 화소 데이터가 액세스된 경우에는, 기억 영역에 액세스가 필요로 되기 때문에, 논리 어드레스로부터 물리 어드레스로의 변환을 행하여 기억 영역에 액세스한다.
도 74는, SCU#10 내부에 설정되는 다중 사각형 화상 영역에 관한 처리를 행하는 기능을 설명하기 위한 도면이다.
도 74에 도시한 바와 같이, SCU#10은, PU_SIMD 처리 회로 #0에, 기억 영역 내의 사각형 화상 영역 WIR0 및 WOR0을 할당한다.
사각형 화상 영역 WIR0 및 WOR0은, 메모리 시스템(105)이나 로컬 메모리(204_0) 등의 기억 영역 내에 규정된다.
또한, 본 실시 형태의 SCU#10은, 기억 영역 내에 WIR0∼WIR7의 8 종류의 WIR과, WOR0∼WOR7까지의 8 종류의 WOR을 정의하는 것이 가능하다. 또한, 각각의 사각형 화상 영역 WIR0∼WIR7에 사각형 화상 영역 BR0∼BR7이, WOR0∼WOR7에 DR0∼DR7이, 각각 1개씩 규정된다.
도 72에 도시한 SCU#10은, 데이터 변환 커맨드 WI_data_op에 의해, 사각형 화상 영역 BR 내의 데이터를 스트림 데이터로 변환하여, 출력 버퍼 out_buf에 Write한다.
또한, SCU#10은, 데이터 변환 커맨드 WO#data#op에 의해, PU_SIMD 처리 회로 #0으로부터 입력되어 입력 버퍼 in#buf에 수납되어 있는 스트림 데이터를 데이터 변환하여 사각형 화상 영역 DR에 Write한다.
도 72를 참조하여 전술한 바와 같이, 사각형 화상 영역 WIR 내에 사각형 화상 영역 BR, WOR 내에 DR을 계층 구조에 의해 규정함으로써, 예를 들면, 사각형 화상 영역 WIR 내에서 사각형 화상 영역 BR을, WOR 내에서 DR을 상대적으로 이동시키는 경우에, 기준 좌표를 사각형 화상 영역 BR, DR 내의 로컬한 좌표에 가산하는 형식으로의 어드레스 표현이 가능하게 되어, 프로그래밍이 간단해진다.
본 실시 형태에서는, 사각형 화상 영역의 개수나 다중 지정의 계층 수 등을 구체적인 숫자로 표현하고 있지만, 그 구성이나 수량은 조합이 자유로워, 폭넓은 화상 처리의 필요성에 따라서 구성을 바꾸는 것이 가능하다.
즉, 제1 실시 형태의 SCU(203_0)가 사각형 화상 영역 내에 AR 혹은 CR을 설정하고, 또한 그 중에 BR 혹은 DR을 설정하고 있었지만, 본 제2 실시 형태의 SCU#10에 따르면, WR중에 AR 및 CR을 설정하지 않고서 BR 및 DR을 설정하고 있으므로, SCU#10의 동작이 간략해져, 동작 속도가 빨라진다.
다음으로, SCU#10이 데이터 전송을 위해서 행하는 접속을 설명한다.
[시스템 버스 접속]
도 1에 도시한 시스템 버스(113)는, SCU#10을, 호스트 프로세서(101) 및 메모리 시스템(105) 등의 다른 처리 모듈을 접속하는 버스이며, 이하의 특징을 갖는다.
(1) 시스템 버스(113)는, LSI나 SOC 내부에서 표준화된 버스 규격을 채용하는 것이 가능하다.
(2) 시스템 버스(113)의 버스 폭은 128 비트이며, 연속 데이터 전송(버스트 전송)이 가능한 구성으로 함으로써, 버스 사용 효율을 향상시킬 수 있다.
(3) 시스템 버스(113) 상의 기억 장치(예를 들면, 메모리 시스템(105))에 대해서, SCU#10은 버스 마스터로서 액세스한다.
(4) 시스템 버스(113) 상의 SCU#10 이외의 버스 마스터로부터, SCU#10의 내부 레지스터나 SCU 전용 기억 장치(예를 들면, 로컬 메모리(204_0))에의 액세스를 행한다.
(5) 시스템 버스(113)는, 데이터 전송 효율이나 기능이 만족되는 것이라면, 버스 규격에는 구애받지 않는 선택이 가능하다.
[SCU#10의 전용 기억 영역 접속]
SCU#10은, 전용 기억 영역으로서 전용 기억 장치를 접속하는 것이 가능하다.
전용 기억 장치는 SRAM이나 DRAM 등의 반도체 메모리가 SOC 내부와 외부의 어느 쪽에 있더라도 선택 가능하다.
상기 전용 기억 장치는, 시스템 버스(113)보다 광대역의 버스에 접속된다.
상기 전용 기억 장치는, 1개의 SCU#10이 점유하여 사용할 목적으로 준비되어 있다.
시스템 버스(113) 상의 버스 마스터로부터, 상기 전용 기억 장치에의 액세스가 가능하다.
[PU_SIMD 접속]
SCU#10에는, PU_SIMD 처리 회로 #0이 버스 접속된다.
마찬가지로, SCU#11에는 PU_SIMD 처리 회로 #1이, SCU#12에는 PU_SIMD 처리 회로 #2가, SCU#13에는 PU_SIMD 처리 회로 #3이 버스 접속된다.
SCU#10으로부터 PU_SIMD 처리 회로 #0에의 스트림 데이터 입력은, PU_SIMD 처리 회로 #0에 256 비트의 단방향 버스를 사용한다. 전송 효율은 256 bit/clock이다.
data/ 전송 프로토콜로서 2선식의 핸드세이크를 채용한다.
SCU#10 내부에는 출력 버퍼 out_buf를 준비한다.
SCU#10으로부터 출력을 행하는 경우에는, PU_SIMD 처리 회로 #0에 대하여 어드레스를 지정함으로써 PU_SIMD 처리 회로 내부 레지스터를 식별한다.
PU_SIMD 처리 회로 #0으로부터 SCU#10에의 스트림 데이터 입력은, 각 PU_SIMD의 256 비트의 단방향 버스를 사용하고, 전송 효율은 256 bit/clock이다.
또한, 데이터 전송 프로토콜로서 2선식의 핸드세이크를 채용한다.
SCU#10 내부에는 입력용의 입력 버퍼 in_buf를 준비한다.
PU_SIMD 처리 회로 #0으로부터 SCU#10에 입력을 행하는 경우에는, PU_SIMD에 대하여 어드레스를 지정함으로써 PU_SIMD 처리 회로 내부 레지스터를 식별한다.
[SCU#10의 물리 논리 어드레스 변환]
SCU#10이 액세스하는 도 73 및 도 74를 이용하여 설명한 기억 영역 내의 사각형 화상 영역 WR 내부의 화소 대응 위치 Pixel은 2차원 논리 어드레스로 표현되어 있지만, 메모리 시스템(105) 및 로컬 메모리(204_0)는 물리 어드레스로 표현되어 있다. 따라서, SCU#10은, 사각형 화상 영역 WR 내의 사각형 화상 영역 AR, BR, CR, DR 내부에 지정된 화소 대응 위치 Pixel에 대하여 Read 또는 WRite를 행하는 경우에는, 2차원 논리 어드레스로부터 물리 어드레스에의 어드레스 변환을 행한다.
어드레스 변환의 방법에 대해서는, 제1 실시 형태로 마찬가지이기 때문에 여기서는 설명을 생략한다.
[SCU#10에 의한 기억 영역에의 액세스]
SCU#10은, 전술한 바와 같이, 기억 영역으로서, 시스템 버스(113)에 접속된 대규모 외부 기억 장치인 메모리 시스템(105)과, 소규모의 전용 기억 장치인 로컬 메모리(204_0)를 사용할 수 있다.
메모리 시스템(105)은, 예를 들면, SCU#10이 포함되는 SOC의 외부에 접속되는 DRAM-CHIP이며, 일반적인 DDR나 RAMBUS 등의 메모리 chip 등이다.
로컬 메모리(204_0)는, 예를 들면, SCU#10이 포함되는 SOC 내부의 SRAM이나 eDRAM(Embedede-DRAM: SCU와 동일한 SOC에 포함되는 On-chip DRAM) 등이다.
일반적으로, DRAM은, Raw/Column/bank라고 하는 어드레스의 계층 구조가 있으며, 동일한 Raw에 포함되는 연속 데이터 액세스는 고속이지만, Raw 경계를 걸친 연속 데이터 액세스나, 원격의 Raw끼리의 연속 액세스는, 페이지 프리차지 등의 처치를 필요로 하기 때문에, 저속으로 된다고 하는 특징이 있다.
본 실시 형태에서는, SCU#10은, 예를 들면, 메모리 시스템(105)이나 로컬 메모리(204_0)로서, DRAM을 사용하고 있지만, SRAM이라도 문제는 없다. 또한, DRAM을 사용하는 경우, 상기 액세스 성능의 불연속성을 가능한 한 피할 목적으로, 기억 영역 내의 화소 데이터의 사각형 화상 배열을, 스트림 데이터 생성 시에는 가능한 한 동일 페이지에 배치하는 연구를 함으로써, DRAM 액세스의 불연속성을 가능한 한 저감하는 처치를 취할 수 있다.
이 연구는, 예를 들면 제1 실시 형태에서 설명한 방법 등에 의해 실현할 수 있다.
[SCU#10에 의한 다중 사각형 화상 영역 정의(판독 시)]
SCU#10은, 전술한 바와 같이, 기억 영역 내의 사각형 화상 영역 AUR 내에, 도 75에 도시한 바와 같이, 2차원 논리 어드레스 표현으로 다중 사각형 화상 영역으로서, 사각형 화상 영역 BR을 규정할 수 있다.
WIR은, 기억 영역 내에 물리 어드레싱 가능한 연속 영역으로서 정의된다.
또한, WIR 내부의 pixel의 지정은, SCU에 의해 논리 어드레싱에 의해 정의된다.
여기서 pixel은 16 bit 고정 사이즈로 논리 어드레싱된다. 단, 기억 영역의 정보량 삭감을 위해서, 1 pixel을 12 bit 혹은 8 bit로 표현할 수도 있으며, 이 경우에는, 기억 영역 내부와 SCU에서의 pixel 표현의 차이(예를 들면, 기억 영역 내에서는 8 bit/pixel의 경우, SCU 내부의 1 pixel이 기억 영역 내의 2 pixel과 등가)에 유의할 필요가 있다.
또한, WIR 내에는 BR을 정의할 수 있다.
BR은, WIR 내에 논리 어드레스 공간에서 정의된다.
BR은, WIR의 부분 카피가 아니라 어드레스 맵핑 변환에 의해 액세스한다.
BR을 정의할 때에는, WIR을 일탈하여 정의할 수도 있지만, 일탈한 경우의 pixel값은 보장되지 않는다.
BR은, BR0∼BR7의 8 종류 존재한다.
BR 영역은, BRn(n=0∼7)마다 사각형의 좌단 좌표(도 75에서의 bx, by)를 지정할 수 있다.
BR 영역의 사각형 사이즈는, 이하의 8 종류 중에서 wi_data_op에 의해 지정된다. 즉, 수평 방향 16, 32, 48, 64 pixel이고 수직 방향으로 1 pixel인 영역, 혹은 수평 방향으로 1 pixel이고 수직 방향으로 16, 32, 48, 64 pixel인 영역 중 어느 하나이다.
각각의 위치 관계를 나타내는 값으로서 이하의 좌표값이 사용된다.
wirw는, 사각형 화상 영역 WIR의 x 방향 사각형 화상 영역 폭이다.
bx 및 by는, 사각형 화상 영역 WIR 내의 사각형 화상 영역 BR의 2차원 좌표를 나타낸다. 사각형 화상 영역 WIR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 BR의 왼쪽 위의 화소 대응 위치 Pixel의 좌표를 나타낸다.
bw 및 bh는, 사각형 화상 영역 BR의 폭과 높이를 나타낸다.
x 및 y는, 사각형 화상 영역 BR 내의 화소 대응 위치 Pixel의 2차원 좌표를 나타낸다. 사각형 화상 영역 BR의 왼쪽 위를 원점(0, 0)으로 한 좌표계이다.
[SCU#10에 의한 PU_SIMD#0에의 데이터 입력 처리]
SCU#10은, 사각형 화상 영역 BR로부터 화소 데이터 Pixel(bx, by)을 판독하고, 이것을 데이터 스트림 데이터로 변환하여(입력 데이터 변환 처리를 행하여) PU_SIMD 처리 회로 #0에 입력시킨다. 이 처리는, 제1 실시 형태에서 설명한 처리와 마찬가지이기 때문에, 설명을 생략한다.
[SCU#10에 의한 다중 사각형 화상 영역 정의(기입 시)]
SCU#10은, 기억 영역 내의 사각형 화상 영역 WOR 내에, 도 76에 도시한 바와 같이, 2차원 논리 어드레스 표현으로 다중 사각형 화상 영역으로서, 사각형 화상 영역 DR을 규정할 수 있다.
WOR은, 기억 영역 내에 물리 어드레싱 가능한 연속 영역으로서 정의된다.
또한, WOR 내부의 pixel의 지정은, SCU에 의해 논리 어드레싱에 의해 정의된다.
여기서 pixel은 16 bit 고정 사이즈로 논리 어드레싱된다. 단, 기억 영역의 정보량의 삭감을 위해서, 1 pixel을 12 bit 혹은 8 bit로 표현할 수도 있으며, 이 경우에는, 기억 영역 내부와 SCU에서의 pixel 표현의 차이(예를 들면, 기억 영역 내에서는 8 bit/pixel의 경우, SCU 내부의 1 pixel이 기억 영역 내의 2 pixel과 등가)에 유의할 필요가 있다.
또한, WOR 내에는 DR을 정의할 수 있다.
DR은, WOR 내에 논리 어드레스 공간에서 정의된다.
DR은, WOR의 부분 카피가 아니라 어드레스 맵핑 변환에서 액세스한다.
DR을 정의할 때는, WOR을 일탈하여 정의할 수도 있지만, 일탈한 경우의 pixel값은 보장되지 않는다.
DR은, DR0∼DR7의 8 종류 존재한다.
DR 영역은, DRn(n=0∼7)마다 사각형의 좌단 좌표(도 76에서의 dx, dy)를 지정할 수 있다.
DR 영역의 사각형 사이즈는, 이하의 8 종류 중에서 wo_data_op에 의해 지정된다. 즉, 수평 방향 16, 32, 48, 64 pixel에서 수직 방향으로 1 pixel의 영역, 혹은 수평 방향으로 1 pixel에서 수직 방향으로 16, 32, 48, 64 pixel의 영역 중 어느 하나이다.
각각의 위치 관계를 나타내는 값으로서 이하의 좌표값이 사용된다.
worw는, 사각형 화상 영역 WOR의 x 방향 사각형 화상 영역 폭을 나타낸다.
dx 및 dy는, 사각형 화상 영역 WOR 내의 사각형 화상 영역 DR의 2차원 좌표를 나타낸다. 사각형 화상 영역 WR의 왼쪽 위를 원점(0, 0)으로 한 좌표계에서, 사각형 화상 영역 DR의 왼쪽 위의 좌표를 나타낸다.
dw 및 dh는, 사각형 화상 영역 DR의 폭과 높이를 나타낸다.
[PU_SIMD 처리 회로 #0의 출력 데이터 변환 처리]
PU_SIMD 처리 회로 #0이 출력한 스트림 데이터는, 입력 버퍼 in_buf에 기입된다.
SCU#10은, 입력 버퍼 in_buf로부터 데이터를 판독하고, 재배열 등의 데이터 변환 처리를 실시한 후에, 사각형 화상 영역 DR에 기입한다.
또한, SCU#10은, 필요에 따라서, 입력 버퍼 in_buf로부터 데이터를 판독하고, 마스크 데이터 DR#mask를 따른 재배열 등의 데이터 변환 처리를 실시한 후에, 사각형 화상 영역 DR에 기입한다.
이들 처리에 관해서는, 제1 실시 형태에서 SCU(203_0)가 행하는 처리와 마찬가지이기 때문에, 설명을 생략한다.
[화상 처리 장치(100)의 전체 동작예]
도 1에 도시한 호스트 프로세서(101)는 프로그램 PRG를 실행하고, 이에 따라 도 70에 도시한 SCU#10∼#13에 프로그램을 지정한다.
SCU#10∼#13은, 호스트 프로세서(101)에 의해 지정된 프로그램을 실행하여 얻은 각각 4개씩의 소정의 쓰레드에 기초하여, 각각 PU 어레이(202_0∼202_3) 내의 PE의 처리 진행에 따라서 메모리 시스템(105) 혹은 로컬 메모리20-40∼3에 대한 액세스를 실행한다.
PU 어레이(202_0∼202_3) 내의 PE는, SCU(203_0∼3) 혹은 호스트 프로세서(101)의 제어에 따라서, SCU#10∼#13에 의한 메모리 액세스 결과를 이용하면서, SCU#10∼#13과는 서로 다른 쓰레드로 동작한다.
각 PU 어레이(202_0∼202_3) 내에서는, SCU#10∼#13과 PU_SIMD#0∼#3이 각각 접속되어 동작한다.
PU_SIMD#0∼#3 내에서는, 16개의 PE0∼15가 시리얼로 접속되고, 인접하는 PE 사이에서 필요에 따라서 화소 데이터의 입출력이 행해진다.
이상 설명한 바와 같이, 본 제2 실시 형태의 화상 처리 장치(100)에 따르면, 화상 처리 엔진(102)에 있어서, PU 어레이(202_0∼202_3) 내의 PU_SIMD(Single Instruction Multiple Data) 단위를 공통의 쓰레드로 동작시키고, 그 쓰레드와는 별도의 쓰레드로 SCU#10∼#13을 동작시킨다.
이에 의해, 방대한 화소 데이터에 대해서, 그것에 대한 처리를 미리 특정할 수 있고, 또한 서로 독립인 것을 이용하여, 복수의 프로세서 엘리먼트(PE)에 있어서 공통의 쓰레드에 기초하여 병렬적으로 실행할 수 있다. 또한, 제2 실시 형태의 PE에서는, 동시에 복수의 연산을 행할 수 있기 때문에, 장치 전체의 처리 속도가 향상된다.
또한, SCU#10∼#13의 쓰레드를, PU 어레이(202_0∼202_3)의 쓰레드와는 별도로 함으로써, PE의 처리의 백엔드로, 그 PE의 처리와 관련된 데이터에 관한 기억 영역에 대한 액세스를 효율적으로 실현할 수 있다.
화상 처리 엔진(102)에 따르면, PU 어레이(202_0∼202_3)의 처리와 관련된 데이터에 관한 기억 영역에의 액세스를 SCU#10∼#13 행함으로써, PU 어레이(202_0∼202_3)의 PE는 대규모의 기억 영역에의 액세스 처리를 행할 필요가 없어, 화상 처리를 효율적으로 행할 수 있다.
화상 처리 엔진(102)에 따르면, 프로세서 유닛 PU가 시리얼 접속된 양측의 프로세서 유닛 PU에 화소 데이터를 입출력할 수 있음과 함께, 프로세서 유닛 PU 내에서 시리얼 접속된 PE가 양측의 PE에 화소 데이터를 입출력할 수 있다. 이에 의해, 각 PE가 독립하여 메모리 액세스하는 경우에 비하여, 메모리 액세스 횟수를 대폭 삭감할 수 있다.
또한, 본 제2 실시 형태의 화상 처리 장치(100)에 따르면, PU_SIMD마다 SCU를 할당하여 개별로 처리를 행하므로, SCU에 관한 부하가 경감되어, 화상 처리에 필요로 하는 시간이 단축된다.
또한, 본 제2 실시 형태의 화상 처리 장치(100)에 따르면, SCU#10∼#13의 기억 영역 내에 정의하는 다중 사각형 화상 영역이 WR과 BR(혹은 DR)의 2중뿐이므로, 처리가 간략화되고, 화상 처리 장치(100) 전체에 관한 부하가 경감되어, 처리에 필요로 하는 시간이 단축된다.
본 발명은 전술한 실시 형태에 한정되지는 않는다.
즉, 본 발명의 기술적 범위 또는 그 균등한 범위 내에 있어서, 전술한 실시 형태의 구성 요소에 관하여, 다양하게 변경, 및 대체를 하여도 본 발명은 적용된다.
전술한 실시 형태에서는, 다량의 데이터를 취급하는 화상 처리를 예시했지만, 화상 처리 이외에 각종의 데이터 처리에 대해서도 본 발명을 적용 가능하다.
즉, 본 발명은, PU_SIMD 처리 회로와 같이, 각각 복수의 프로세서 엘리먼트 PE를 갖는 복수의 프로세서 유닛 PU를 이용하여 신호 처리를 분산 처리하는 경우에, 각 프로세서 유닛 PU 내의 대응하는 각 프로세서 엘리먼트 PE에 기억 수단으로부터 아무리 효율적으로 대응하는 데이터를 제공하거나, 혹은, 역의 각 프로세서 엘리먼트 PE로부터의 데이터를 정합성을 유지하여 기억 수단에 기입한다고 하는 처리를 행하는, 각종 신호 처리에 적용할 수 있다.
본 실시 형태에서 설명한 PU 어레이(202_0∼202_3), SCU(203_0∼203_3), 프로세서 유닛 PU, 프로세서 엘리먼트 PE의 수는 임의이다.
Claims (18)
- 기억부와,상기 적어도 1개의 기억부 중 어느 소정의 1개의 기억부에의 데이터의 판독 및/또는 기입을 제어하는 입출력 데이터 제어부(SCU)와,상기 입출력 데이터 처리부가 판독한 데이터에 대하여 소정의 신호 처리를 행하는 신호 처리부(PU 어레이 혹은 PU_SIMD)를 갖는 신호 처리 장치로서,상기 입출력 데이터 제어부와, 상기 신호 처리부는 별도의 쓰레드에 기초하여 동작하는 신호 처리 장치.
- 제1항에 있어서,상기 신호 처리부는, SIMD(Single Instruction Multiple Data) 방식의 신호 처리 회로(PU)를 복수 갖고,상기 복수의 신호 처리 회로는 상호 직렬로 접속되어 있고,상기 복수의 신호 처리 회로의 하나는, 상기 입출력 데이터 제어부가 상기 기억부로부터 판독하여 상기 신호 처리부에 입력한 데이터에 기초하여 상기 소정의 처리를 행함과 함께, 인접하는 다른 신호 처리 회로와의 사이에서 데이터의 교환을 행하는 신호 처리 장치.
- 제2항에 있어서,상기 입출력 데이터 제어부는, 상기 복수의 신호 처리 회로 중 임의의 적어도 1개의 신호 처리 회로를, 직렬 혹은 병렬 중 어느 한쪽으로 선택적으로 접속 가능한 신호 처리 장치.
- 제2항에 있어서,상기 신호 처리부를 소정 수 갖는 신호 처리 장치로서,상기 신호 처리부와 동일 수의 상기 입출력 데이터 처리부를 갖는 신호 처리 장치.
- 제2항에 있어서,상기 입출력 데이터 제어부는, 내장 메모리를 갖고,상기 입출력 데이터 제어부는, 상기 복수의 신호 처리 회로 중 하나의 처리 회로가 다른 처리 회로의 결과를 이용하는 경우에, 상기 다른 처리 회로의 처리 결과를 상기 내장 메모리에 기입하고, 그 내장 메모리로부터 그 결과를 상기 처리 회로에 읽어내는 신호 처리 장치.
- 제2항에 있어서,상기 복수의 신호 처리 회로는, 각각 소정의 수의 신호 처리 엘리먼트(PE)를 갖고,상기 소정의 수의 신호 처리 엘리먼트는 상호 직렬로 접속되어 있고,상기 복수의 신호 처리 엘리먼트의 하나는, 상기 입출력 데이터 제어부가 상기 기억부로부터 판독하여 상기 신호 처리부에 입력한 데이터에 기초하여 상기 소정의 처리를 행함과 함께, 인접하는 다른 신호 처리 회로와의 사이에서 데이터의 교환을 행하는 신호 처리 장치.
- 제2항에 있어서,상기 데이터는 화상 데이터이고,상기 복수의 신호 처리 회로는, 화상 데이터를 처리하는 회로이고,상기 입출력 데이터 제어부는, 상기 기억부 내에 계층적으로 사각형의 화상 데이터 기억 영역을 규정하고,상기 사각형의 화상 데이터 기억 영역 내의 어드레스를 그 사각형의 화상 데이터 기억 영역에 로컬한 2차원 어드레스로 관리하고,상기 기억 영역 내에서의 상기 사각형의 화상 데이터 기억 영역의 위치를 나타내는 기준 어드레스와 상기 2차원 어드레스에 기초하여, 1차원 어드레스를 생성하고,상기 1차원 어드레스에 기초하여 상기 기억부에 기억된 화상 데이터에 액세스하는 신호 처리 장치.
- 제1항에 있어서,상기 데이터는 화상 데이터이고,상기 복수의 신호 처리 회로는, 화상 데이터를 처리하는 회로이고,상기 입출력 데이터 제어부는,상기 기억부로부터 화상 데이터를 판독하여 상기 신호 처리부에 출력할 수 있는 형식으로 변환하고, 및/또는 상기 신호 처리부로부터 입력된 화상 데이터를 상기 기억부에 기억할 수 있는 형식으로 변환하는 변환부(제어부)와,상기 기억 수단으로부터 판독되어 상기 변환부가 변환한 화상 데이터를, 상기 신호 처리부에 출력하기 전에 일시 유지하는 제1 버퍼와,상기 신호 처리부로부터 입력되어 상기 변환부가 변환한 화상 데이터를, 상기 기억부에 기입될 때까지 일시 유지하는 제2 버퍼를 갖는 신호 처리 장치.
- 제6항에 있어서,상기 데이터는 화상 데이터이고,상기 복수의 신호 처리 회로는, 화상 데이터를 처리하는 회로이고,상기 입출력 데이터 제어부는, 상기 기억부로부터 판독한 화상 데이터를 구성하는 복수의 부분 화상 데이터를 대응하는 상기 복수의 신호 처리 엘리먼트에 출력하는 신호 처리 장치.
- 제7항에 있어서,상기 입출력 데이터 제어부는,상기 사각형의 화상 데이터 기억 영역 내의 미리 결정된 복수의 기준 어드레스 중에서 선택한 기준 어드레스를 상기 복수의 처리 회로에 출력하는 신호 처리 장치.
- 제7항에 있어서,상기 입출력 데이터 제어부는,상기 기억부로부터 상기 기준 어드레스를 판독하고,그 판독한 기준 어드레스에 기초하여, 상기 사각형의 화상 데이터 기억 영역에의 액세스를 관리하는 신호 처리 장치.
- 제8항에 있어서,상기 입출력 데이터 제어부는, 상기 복수의 신호 처리 회로 각각에 대응하여 상기 제1 및 제2 버퍼를 각각 갖고,임의의 상기 신호 처리 회로에 대응시켜진 상기 제2 버퍼로부터 그 임의의 신호 처리 회로가 출력한 데이터를 판독하여, 다른 신호 처리 회로에 대응시켜진 상기 제1 버퍼에 기입하는 신호 처리 장치.
- 제1항에 있어서,상기 입출력 데이터 제어부는, 상기 복수의 신호 처리 회로의 상기 제1 쓰레 드의 실행 개시를 지시하는 신호 처리 장치.
- 제13항에 있어서,상기 신호 처리 엘리먼트는,산술 연산 및/또는 논리 연산을 행하는 연산 논리 회로와,상기 신호 처리 엘리먼트가 직렬로 접속된 다른 2개의 상기 신호 처리 엘리먼트와 상기 입출력 데이터 제어부로부터 입력된 데이터를 기억하는 제1 레지스터와,상기 제1 레지스터로부터 판독되어, 상기 다른 2개의 신호 처리 엘리먼트, 상기 연산 논리 회로 및 상기 입출력 데이터 제어부 중 어느 하나에 선택적으로 출력되는 데이터를 기억하는 제2 레지스터를 갖는 신호 처리 장치.
- 제14항에 있어서,상기 제1 레지스터는, 포인터 액세스형의 레지스터인 신호 처리 장치.
- 제15항에 있어서,상기 연산 논리 회로에서의 연산 처리와, 상기 제1 레지스터 및 상기 제2 레지스터에 대한 로드 및 스토어 처리는 병렬로 실행 가능한 신호 처리 장치.
- 제16항에 있어서,복수의 상기 제1 레지스터 중 적어도 하나의 상기 제1 레지스터는, 상기 연산 수단에 의한 상기 연산 처리를 제어하는 제어 플래그를 설정하기 위한 레지스터인 신호 처리 장치.
- 호스트 처리 회로와,기억부와,상기 적어도 1개의 기억부 중 어느 소정의 1개의 기억부에의 데이터의 판독 및/또는 기입을 제어하는 입출력 데이터 제어부(SCU)와,상기 입출력 데이터 처리부가 판독한 데이터에 대하여 소정의 신호 처리를 행하는 신호 처리부(PU 어레이 혹은 PU_SIMD)를 갖는 신호 처리 장치로서,상기 신호 처리부는, 상기 호스트 처리 회로 혹은 상기 입출력 데이터 제어부의 제어에 의해, 공통의 제1 쓰레드에 기초하여 동작하고,상기 입출력 데이터 제어부는, 상기 호스트 처리 회로의 제어에 의해, 상기 제1 쓰레드와는 별도의 제2 쓰레드에 기초하여 동작하는 신호 처리 장치.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JPJP-P-2005-00148301 | 2005-05-20 | ||
JP2005148301 | 2005-05-20 | ||
PCT/JP2006/310174 WO2006123822A1 (ja) | 2005-05-20 | 2006-05-22 | 信号処理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20080010377A true KR20080010377A (ko) | 2008-01-30 |
KR101270925B1 KR101270925B1 (ko) | 2013-06-07 |
Family
ID=37431382
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077001405A KR101270925B1 (ko) | 2005-05-20 | 2006-05-22 | 신호 처리 장치 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8464025B2 (ko) |
EP (1) | EP1883045A4 (ko) |
JP (1) | JP4893621B2 (ko) |
KR (1) | KR101270925B1 (ko) |
CN (1) | CN1993709B (ko) |
WO (1) | WO2006123822A1 (ko) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101048413B1 (ko) * | 2010-12-30 | 2011-07-11 | 재단법인 광양만권 유아이티연구소 | 통합 에너지 관리 클라이언트용 엠씨유 |
KR20160023150A (ko) * | 2014-08-21 | 2016-03-03 | 삼성전자주식회사 | 이미지 처리 장치, 이미지 처리 시스템, 이미지 처리 시스템의 동작방법 및 이미지 처리 시스템을 포함하는 시스템 온 칩 |
KR20170038484A (ko) * | 2015-09-30 | 2017-04-07 | 엘지디스플레이 주식회사 | 영상 처리 장치 및 이를 포함하는 표시장치 |
US11102436B2 (en) | 2016-10-31 | 2021-08-24 | Sony Semiconductor Solutions Corporation | Solid-state imaging device and signal processing method thereof, and electronic device |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8169440B2 (en) | 1999-04-09 | 2012-05-01 | Rambus Inc. | Parallel data processing apparatus |
US20070242074A1 (en) * | 1999-04-09 | 2007-10-18 | Dave Stuttard | Parallel data processing apparatus |
US20080162875A1 (en) * | 1999-04-09 | 2008-07-03 | Dave Stuttard | Parallel Data Processing Apparatus |
US8174530B2 (en) * | 1999-04-09 | 2012-05-08 | Rambus Inc. | Parallel date processing apparatus |
US7802079B2 (en) | 1999-04-09 | 2010-09-21 | Clearspeed Technology Limited | Parallel data processing apparatus |
US20080162874A1 (en) * | 1999-04-09 | 2008-07-03 | Dave Stuttard | Parallel data processing apparatus |
US7526630B2 (en) | 1999-04-09 | 2009-04-28 | Clearspeed Technology, Plc | Parallel data processing apparatus |
US7506136B2 (en) * | 1999-04-09 | 2009-03-17 | Clearspeed Technology Plc | Parallel data processing apparatus |
US8171263B2 (en) * | 1999-04-09 | 2012-05-01 | Rambus Inc. | Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions |
US20070294510A1 (en) * | 1999-04-09 | 2007-12-20 | Dave Stuttard | Parallel data processing apparatus |
EP1181648A1 (en) * | 1999-04-09 | 2002-02-27 | Clearspeed Technology Limited | Parallel data processing apparatus |
US7966475B2 (en) | 1999-04-09 | 2011-06-21 | Rambus Inc. | Parallel data processing apparatus |
US8762691B2 (en) | 1999-04-09 | 2014-06-24 | Rambus Inc. | Memory access consolidation for SIMD processing elements using transaction identifiers |
US8643661B1 (en) * | 2006-06-21 | 2014-02-04 | Marvell International Ltd. | Non raster row pixel processing |
US7952588B2 (en) * | 2006-08-03 | 2011-05-31 | Qualcomm Incorporated | Graphics processing unit with extended vertex cache |
US8009172B2 (en) * | 2006-08-03 | 2011-08-30 | Qualcomm Incorporated | Graphics processing unit with shared arithmetic logic unit |
US7787021B2 (en) * | 2006-10-30 | 2010-08-31 | Texas Instruments Incorporated | Programmable architecture for flexible camera image pipe processing |
US7797514B2 (en) * | 2006-11-16 | 2010-09-14 | Texas Instruments Incorporated | Scalable multi-threaded sequencing/synchronizing processor architecture |
JP2010003151A (ja) * | 2008-06-20 | 2010-01-07 | Renesas Technology Corp | データ処理装置 |
JP5100611B2 (ja) * | 2008-10-28 | 2012-12-19 | 株式会社東芝 | 画像処理装置 |
US8797376B2 (en) * | 2010-05-28 | 2014-08-05 | Polycom, Inc. | Videoconferencing system with enhanced telepresence using a single wide aspect ratio camera |
US9552206B2 (en) * | 2010-11-18 | 2017-01-24 | Texas Instruments Incorporated | Integrated circuit with control node circuitry and processing circuitry |
KR20130043322A (ko) * | 2011-10-20 | 2013-04-30 | 삼성전자주식회사 | 디스플레이 컨트롤러 및 이를 포함하는 디스플레이 장치 |
US9501331B2 (en) * | 2012-08-09 | 2016-11-22 | Fujitsu Limited | Satisfiability checking |
CN105431819A (zh) | 2013-09-06 | 2016-03-23 | 华为技术有限公司 | 异步处理器消除亚稳态的方法和装置 |
WO2015035306A1 (en) * | 2013-09-06 | 2015-03-12 | Huawei Technologies Co., Ltd. | System and method for an asynchronous processor with token-based very long instruction word architecture |
CN104837006B (zh) * | 2014-02-11 | 2017-11-10 | 京元电子股份有限公司 | 半导体元件测试系统及其影像处理加速方法 |
US9665372B2 (en) | 2014-05-12 | 2017-05-30 | International Business Machines Corporation | Parallel slice processor with dynamic instruction stream mapping |
US9672043B2 (en) | 2014-05-12 | 2017-06-06 | International Business Machines Corporation | Processing of multiple instruction streams in a parallel slice processor |
RU2571575C1 (ru) * | 2014-06-20 | 2015-12-20 | Александр Сергеевич Зубачев | Общественный компьютер |
US9760375B2 (en) | 2014-09-09 | 2017-09-12 | International Business Machines Corporation | Register files for storing data operated on by instructions of multiple widths |
US9720696B2 (en) | 2014-09-30 | 2017-08-01 | International Business Machines Corporation | Independent mapping of threads |
US9977678B2 (en) | 2015-01-12 | 2018-05-22 | International Business Machines Corporation | Reconfigurable parallel execution and load-store slice processor |
US10133581B2 (en) | 2015-01-13 | 2018-11-20 | International Business Machines Corporation | Linkable issue queue parallel execution slice for a processor |
US10133576B2 (en) | 2015-01-13 | 2018-11-20 | International Business Machines Corporation | Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries |
US9983875B2 (en) | 2016-03-04 | 2018-05-29 | International Business Machines Corporation | Operation of a multi-slice processor preventing early dependent instruction wakeup |
US10037211B2 (en) | 2016-03-22 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor with an expanded merge fetching queue |
US10346174B2 (en) | 2016-03-24 | 2019-07-09 | International Business Machines Corporation | Operation of a multi-slice processor with dynamic canceling of partial loads |
US10761854B2 (en) | 2016-04-19 | 2020-09-01 | International Business Machines Corporation | Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor |
US10037229B2 (en) | 2016-05-11 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions |
US9934033B2 (en) | 2016-06-13 | 2018-04-03 | International Business Machines Corporation | Operation of a multi-slice processor implementing simultaneous two-target loads and stores |
US10042647B2 (en) | 2016-06-27 | 2018-08-07 | International Business Machines Corporation | Managing a divided load reorder queue |
US10318419B2 (en) | 2016-08-08 | 2019-06-11 | International Business Machines Corporation | Flush avoidance in a load store unit |
CN109298886A (zh) * | 2017-07-25 | 2019-02-01 | 合肥君正科技有限公司 | Simd指令执行方法、装置及处理器 |
JP2020004247A (ja) * | 2018-06-29 | 2020-01-09 | ソニー株式会社 | 情報処理装置、情報処理方法およびプログラム |
Family Cites Families (40)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA1311063C (en) * | 1988-12-16 | 1992-12-01 | Tokumichi Murakami | Digital signal processor |
US5280474A (en) * | 1990-01-05 | 1994-01-18 | Maspar Computer Corporation | Scalable processor to processor and processor-to-I/O interconnection network and method for parallel processing arrays |
US5293596A (en) * | 1990-02-21 | 1994-03-08 | Matsushita Electric Industrial Co., Ltd. | Multidimensional address generator and a system for controlling the generator |
US5765011A (en) * | 1990-11-13 | 1998-06-09 | International Business Machines Corporation | Parallel processing system having a synchronous SIMD processing with processing elements emulating SIMD operation using individual instruction streams |
US5815723A (en) * | 1990-11-13 | 1998-09-29 | International Business Machines Corporation | Picket autonomy on a SIMD machine |
US5243699A (en) * | 1991-12-06 | 1993-09-07 | Maspar Computer Corporation | Input/output system for parallel processing arrays |
US5991866A (en) * | 1992-03-25 | 1999-11-23 | Tm Patents, Lp | Method and system for generating a program to facilitate rearrangement of address bits among addresses in a massively parallel processor system |
JPH06162226A (ja) * | 1992-11-20 | 1994-06-10 | Nec Corp | 並列プロセッサ制御装置 |
JPH0736858A (ja) * | 1993-07-21 | 1995-02-07 | Hitachi Ltd | 信号処理プロセッサ |
US5659780A (en) * | 1994-02-24 | 1997-08-19 | Wu; Chen-Mie | Pipelined SIMD-systolic array processor and methods thereof |
JPH07271764A (ja) * | 1994-03-24 | 1995-10-20 | Internatl Business Mach Corp <Ibm> | 計算機プロセッサ及びシステム |
US5790879A (en) * | 1994-06-15 | 1998-08-04 | Wu; Chen-Mie | Pipelined-systolic single-instruction stream multiple-data stream (SIMD) array processing with broadcasting control, and method of operating same |
JPH0877002A (ja) * | 1994-08-31 | 1996-03-22 | Sony Corp | 並列プロセッサ装置 |
US5606707A (en) * | 1994-09-30 | 1997-02-25 | Martin Marietta Corporation | Real-time image processor |
KR100262453B1 (ko) | 1996-08-19 | 2000-08-01 | 윤종용 | 비디오데이터처리방법및장치 |
US6343309B1 (en) * | 1996-09-30 | 2002-01-29 | International Business Machines Corporaton | Method and apparatus for parallelizing a graphics pipeline |
US6088788A (en) * | 1996-12-27 | 2000-07-11 | International Business Machines Corporation | Background completion of instruction and associated fetch request in a multithread processor |
US5961628A (en) * | 1997-01-28 | 1999-10-05 | Samsung Electronics Co., Ltd. | Load and store unit for a vector processor |
JPH10304184A (ja) * | 1997-05-02 | 1998-11-13 | Fuji Xerox Co Ltd | 画像処理装置および画像処理方法 |
ATE362623T1 (de) * | 1997-11-07 | 2007-06-15 | Altera Corp | Verfahren und gerät für effiziente, synchrone mimd-operationen mit ivliw pe-zu-pe kommunikationen |
US6079008A (en) * | 1998-04-03 | 2000-06-20 | Patton Electronics Co. | Multiple thread multiple data predictive coded parallel processing system and method |
US20080007562A1 (en) * | 1999-04-09 | 2008-01-10 | Dave Stuttard | Parallel data processing apparatus |
EP1181648A1 (en) * | 1999-04-09 | 2002-02-27 | Clearspeed Technology Limited | Parallel data processing apparatus |
US6732126B1 (en) * | 1999-05-07 | 2004-05-04 | Intel Corporation | High performance datapath unit for behavioral data transmission and reception |
US6427196B1 (en) * | 1999-08-31 | 2002-07-30 | Intel Corporation | SRAM controller for parallel processor architecture including address and command queue and arbiter |
US6668317B1 (en) * | 1999-08-31 | 2003-12-23 | Intel Corporation | Microengine for parallel processor architecture |
US6606704B1 (en) * | 1999-08-31 | 2003-08-12 | Intel Corporation | Parallel multithreaded processor with plural microengines executing multiple threads each microengine having loadable microcode |
US6728419B1 (en) * | 2000-02-17 | 2004-04-27 | Xerox Corporation | Multi-tasking multi-threaded image processing system and method for image capture devices |
US6924807B2 (en) * | 2000-03-23 | 2005-08-02 | Sony Computer Entertainment Inc. | Image processing apparatus and method |
JP3504240B2 (ja) * | 2000-07-24 | 2004-03-08 | 株式会社ソニー・コンピュータエンタテインメント | 画像処理システム、デバイス、方法及びコンピュータプログラム |
US6934336B2 (en) * | 2001-07-26 | 2005-08-23 | Matsushita Electric Industrial Co., Ltd. | Area expansion apparatus, area expansion method, and area expansion program |
JP3892829B2 (ja) * | 2003-06-27 | 2007-03-14 | 株式会社東芝 | 情報処理システムおよびメモリ管理方法 |
GB0323950D0 (en) * | 2003-10-13 | 2003-11-12 | Clearspeed Technology Ltd | Unified simid processor |
US20050251649A1 (en) * | 2004-04-23 | 2005-11-10 | Sony Computer Entertainment Inc. | Methods and apparatus for address map optimization on a multi-scalar extension |
ITTO20040415A1 (it) * | 2004-06-22 | 2004-09-22 | St Microelectronics Srl | Architettura di processore multidimensionale |
GB2417105B (en) * | 2004-08-13 | 2008-04-09 | Clearspeed Technology Plc | Processor memory system |
US7492368B1 (en) * | 2006-01-24 | 2009-02-17 | Nvidia Corporation | Apparatus, system, and method for coalescing parallel memory requests |
US7755631B1 (en) * | 2006-10-24 | 2010-07-13 | Nvidia Corporation | Transposition structures and methods to accommodate parallel processing in a graphics processing unit (“GPU”) |
JP2008287562A (ja) * | 2007-05-18 | 2008-11-27 | Sony Corp | 処理装置及びデバイス制御ユニット |
US8180975B2 (en) * | 2008-02-26 | 2012-05-15 | Microsoft Corporation | Controlling interference in shared memory systems using parallelism-aware batch scheduling |
-
2006
- 2006-05-22 KR KR1020077001405A patent/KR101270925B1/ko not_active IP Right Cessation
- 2006-05-22 CN CN2006800005263A patent/CN1993709B/zh active Active
- 2006-05-22 US US11/572,331 patent/US8464025B2/en active Active
- 2006-05-22 WO PCT/JP2006/310174 patent/WO2006123822A1/ja active Application Filing
- 2006-05-22 EP EP06746708.4A patent/EP1883045A4/en not_active Withdrawn
- 2006-05-22 JP JP2007516362A patent/JP4893621B2/ja not_active Expired - Fee Related
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101048413B1 (ko) * | 2010-12-30 | 2011-07-11 | 재단법인 광양만권 유아이티연구소 | 통합 에너지 관리 클라이언트용 엠씨유 |
KR20160023150A (ko) * | 2014-08-21 | 2016-03-03 | 삼성전자주식회사 | 이미지 처리 장치, 이미지 처리 시스템, 이미지 처리 시스템의 동작방법 및 이미지 처리 시스템을 포함하는 시스템 온 칩 |
US11470337B2 (en) | 2014-08-21 | 2022-10-11 | Samsung Electronics Co., Ltd. | Image processor, image processing system including image processor, system-on-chip including image processing system, and method of operating image processing system |
KR20170038484A (ko) * | 2015-09-30 | 2017-04-07 | 엘지디스플레이 주식회사 | 영상 처리 장치 및 이를 포함하는 표시장치 |
US11102436B2 (en) | 2016-10-31 | 2021-08-24 | Sony Semiconductor Solutions Corporation | Solid-state imaging device and signal processing method thereof, and electronic device |
Also Published As
Publication number | Publication date |
---|---|
CN1993709B (zh) | 2010-12-15 |
US20090006773A1 (en) | 2009-01-01 |
JPWO2006123822A1 (ja) | 2008-12-25 |
EP1883045A4 (en) | 2016-10-05 |
EP1883045A1 (en) | 2008-01-30 |
JP4893621B2 (ja) | 2012-03-07 |
CN1993709A (zh) | 2007-07-04 |
KR101270925B1 (ko) | 2013-06-07 |
WO2006123822A1 (ja) | 2006-11-23 |
US8464025B2 (en) | 2013-06-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101270925B1 (ko) | 신호 처리 장치 | |
US7100026B2 (en) | System and method for performing efficient conditional vector operations for data parallel architectures involving both input and conditional vector values | |
JP4733894B2 (ja) | 並列データの処理及びシャッフリング | |
US6237079B1 (en) | Coprocessor interface having pending instructions queue and clean-up queue and dynamically allocating memory | |
EP0607988B1 (en) | Program controlled processor | |
US20050160406A1 (en) | Programmable digital image processor | |
US9984432B2 (en) | Processor, system, and method for efficient, high-throughput processing of two-dimensional, interrelated data sets | |
JP2003517649A (ja) | 機械視覚システムにおける画像データ等の論理的に近接したデータサンプル用データ処理システム | |
US6269435B1 (en) | System and method for implementing conditional vector operations in which an input vector containing multiple operands to be used in conditional operations is divided into two or more output vectors based on a condition vector | |
WO2021097010A1 (en) | Simd operand permutation with selection from among multiple registers | |
JP3971535B2 (ja) | Simd型プロセッサ | |
JP2005514677A (ja) | メモリアドレス技術に関する改良 | |
US20070233976A1 (en) | Data processor with a built-in memory | |
US8612664B2 (en) | Memory management process and apparatus for the same | |
KR19990008388A (ko) | 연산기능을 갖는 반도체메모리 및 그것을 사용한 처리장치 | |
JP5358315B2 (ja) | 並列計算装置 | |
AU760297B2 (en) | Memory controller architecture | |
AU728882B2 (en) | Compression | |
JP2024000852A (ja) | プログラマブル信号処理回路及び当該回路用のプログラム | |
Katagiri et al. | Extension of memory controller equipped with muccra-3-dp: Dynamically reconfigurable processor array | |
AU717336B2 (en) | Graphics processor architecture | |
JP2011103025A (ja) | データ入出力装置およびそれを用いたデータ処理装置 | |
Audio | On-Chip~ 20 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
LAPS | Lapse due to unpaid annual fee |