KR100888369B1 - 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템 - Google Patents

영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템 Download PDF

Info

Publication number
KR100888369B1
KR100888369B1 KR1020070034573A KR20070034573A KR100888369B1 KR 100888369 B1 KR100888369 B1 KR 100888369B1 KR 1020070034573 A KR1020070034573 A KR 1020070034573A KR 20070034573 A KR20070034573 A KR 20070034573A KR 100888369 B1 KR100888369 B1 KR 100888369B1
Authority
KR
South Korea
Prior art keywords
data
instruction
register
memory
cpu
Prior art date
Application number
KR1020070034573A
Other languages
English (en)
Other versions
KR20070120877A (ko
Inventor
고우지 호소기
마사까즈 에하마
히로아끼 나까따
겐이찌 이와따
세이지 모찌즈끼
다까후미 유아사
유끼후미 고바야시
데쯔야 시바야마
히로시 우에다
마사끼 노보리
Original Assignee
가부시끼가이샤 르네사스 테크놀로지
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 가부시끼가이샤 르네사스 테크놀로지 filed Critical 가부시끼가이샤 르네사스 테크놀로지
Publication of KR20070120877A publication Critical patent/KR20070120877A/ko
Application granted granted Critical
Publication of KR100888369B1 publication Critical patent/KR100888369B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Image Processing (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

프로세서에서 화상 처리를 행하는 경우의 저전력화 기술을 제공한다. 이 때문에 예를 들면, 명령의 오퍼랜드에 2차원의 소스 레지스터와 데스티네이션 레지스터를 지정하는 수단을 설치하고, 복수 사이클에서, 복수의 소스 레지스터를 사용한 연산을 실행하여, 복수의 데스티네이션을 얻는 수단을 갖는다. 또한, 복수 소스 레지스터를 이용하여, 복수 사이클 소비하여 데스티네이션을 얻는 명령에서, 데이터 사사오입 연산기를 파이프라인의 최종단에 접속한다. 이들 구성에 의해 예를 들면, 명령 메모리의 액세스 횟수를 삭감함으로써, 명령 메모리 읽어내기 시에 소비하는 전력을 삭감한다.
스트림 처리부, PCI 인터페이스, DMA 컨트롤러, 시프트형 버스, 시프트 레지스터 슬롯, 내부 버스 브릿지, 공유 로컬 메모리, BID 디코더

Description

영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템{PICTURE PROCESSING ENGINE AND PICTURE PROCESSING SYSTEM}
도 1은 본 실시예에서의 내장 시스템의 블록도.
도 2는 본 실시예에서의 영상 처리부(6)의 블록도.
도 3은 본 실시예에서의 시프트형 버스(50)의 블록도.
도 4는 본 실시예에서의 시프트 레지스터 슬롯(500)의 블록도.
도 5는 본 실시예에서의 시프트형 버스(50)의 타이밍차트.
도 6은 본 실시예에서의 영상 처리 엔진(66)의 블록도.
도 7은 본 실시예에서의 연산의 일례.
도 8은 본 실시예에서의 CPU부(30)의 블록도.
도 9는 본 실시예에서의 명령 디코드부(303)가 생성하는 레지스터 파일(304)의 읽어내기 포트와 기입 포트를 제어하는 제어선(308)과, 데이터 메모리(35)의 액세스 어드레스(45)를 생성하는 플로우차트.
도 10은 본 실시예에서의 명령 메모리 제어부(32)의 블록도.
도 11은 본 실시예에서의 데이터 메모리 제어부(33)의 블록도.
도 12는 본 실시예에서의 로컬 DMAC(34)의 블록도.
도 13은 본 실시예에서의 데이터 패스부(36)의 블록도.
도 14는 제2 실시예에서의 영상 처리부(66)의 블록도.
도 15는 제2 실시예에서의 벡터 연산부(46)의 블록도.
도 16은 제2 실시예에서의 명령 메모리 제어부(47)의 블록도.
도 17은 본 실시예에서의, 입력 동기의 스톨(stall) 조건을 설명하기 위한 도면.
도 18은 본 실시예에서의, 출력 동기의 스톨 조건을 설명하기 위한 도면.
도 19는 본 실시예에서의, 영상 처리 엔진간 동기의 스톨 조건을 설명하기 위한 도면.
도 20은 제3 실시예에서의, 영상 처리 엔진(66) 내에 배치되는 CPU부의 구성을 도시한 도면.
도 21은 내적 연산의 예를 설명하기 위한 도면.
도 22는 종래적인 SIMD형 연산기의 구성.
도 23은 본 실시예에서의 연산기의 구성을 도시한 도면.
도 24는 전치를 수반하는 내적 연산의 예를 설명하기 위한 도면.
도 25는 컨볼루션 연산의 예를 설명하기 위한 도면.
도 26은 본 실시예에서의 연산기의 구성을 도시한 도면.
<도면의 주요 부분에 대한 부호의 설명>
1 : CPU
2 : 스트림 처리부
3 : 음성 처리부
4 : 외부 메모리 제어부
5 : PCI 인터페이스
6 : 영상 처리부
7 : DMA 컨트롤러
8 : 표시 제어부
9 : 내부 버스
10 : DMA 버스
11 : 영상 입력부
12 : 영상 출력부
13 : 음성 입력부
14 : 음성 출력부
15 : 시리얼 입력부
16 : 시리얼 출력부
17 : 스트림 입력부
18 : 스트림 출력부
19 : IO 디바이스
20 : 외부 메모리
21 : 디스플레이
22 : PCI 버스
23 : PCI 디바이스
21 : 디스플레이
50 : 시프트형 버스
60 : 내부 버스 브릿지
61 : 내부 버스 마스터 제어부
62 : 내부 버스 슬레이브 제어부
65 : 공유 로컬 메모리
66, 67 : 영상 처리 엔진
68 : 전용 하드웨어
500, 501, 505 : 시프트 레지스터 슬롯
[특허 문헌 1] 일본 특개 2000-57111호 공보
[특허 문헌 2] 일본 특개 2000-298652호 공보
[특허 문헌 3] 일본 특개 2001-100977호 공보
본 출원은 일본 특허 출원 제2006-170382호(2006년 6월 20일)에 기초한 것으로서, 그 우선권을 주장하며, 그 전체 내용이 본 명세서에서 참조로서 인용된다.
기술분야는, 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템에 관한 것으로, 특히 CPU와 다이렉트 메모리 액세스 컨트롤러가 버스 접속된 영상 처리 엔 진 및 그것을 포함하는 영상 처리 시스템에 관한 것이다.
반도체 프로세스의 미세화에 수반하여, 대규모의 시스템을 1개의 LSI 상에서 실현하는 SOC(시스템 온 칩)화나 1개의 패키지 내에 복수의 LSI를 탑재하는 SIP(시스템 인 패키지)라고 하는 기술이 주류로 되어 있다. 이 논리의 대규모화에 의해, 내장 용도로 보여지는 바와 같이, CPU 코어와 화상 코덱 액셀러레이터나 대규모의 DMAC 모듈과 같은 전혀 상이한 기능을 1개의 LSI 내에 실장하는 것이 가능하게 되었다.
또한, 반도체 프로세스의 미세화는, LSI 정상 상태에서의 리크 전류를 증가시키고, 리크 전류에 의한 소비 전력의 증가가 문제로 되어 있다. 최근에는, 미사용 모듈에의 클럭 공급 정지나, 공급 전원 차단 등에 의해, 소비 전력 삭감을 실현하고 있다. 이들 저전력화는, 슬립 등의 대기 상태 시의 저전력화이다.
한편, 휴대 단말기 등에서 영상을 시청하는 경우, LSI 내의 거의 전부의 모듈이 정상 상태로서 동작하기 때문에, 앞에 나타낸 대기 상태 시의 저전력화 방법을 이용할 수는 없다. 정상 상태 시의 소비 전력은, 동작 주파수, 논리물량, 트랜지스터의 활성화율, 및 공급 전압의 2승에 비례한다. 따라서, 저전력화는, 이들 요소를 작게 함으로써 실현할 수 있다.
동작 주파수를 낮추기 위해서는, 병렬화 등에 의해, 1 사이클에서 처리하는 처리량을 늘림으로써 실현할 수 있다. 이것은, 필요로 하는 논리물량을 늘리고, 소비 전력을 증가시키는 경향으로 되지만, 저속 동작이 가능하여, 타이밍 크리티컬 패스를 적게 할 수 있기 때문에, 공급 전압을 낮추는 것이 가능하며, 이것에 수반 하여, 소비 전력을 삭감할 수 있다. 따라서, 최근에는, 동작 주파수 향상보다도, SIMD형 ALU나, 멀티프로세서 등, 병렬도 향상에 의한 저전력화가 주류로 되어 있다.
상기 특허 문헌 1은, SIMD형 ALU에 대하여 나타내고 있다. 이것은, 병렬로 연산기를 동작시킴으로써 1 사이클로 연산하는 처리량을 늘리고, 그 결과, 동작 주파수 삭감을 실현하고 있다. 화상 처리 등, 화소마다 동일한 연산을 실시하는 경우, 본 SIMD형 ALU는 유효하다.
상기 특허 문헌 2는, 멀티프로세서에 대하여 나타내고 있다. 이것은, 멀티프로세서가 사용하는 명령 메모리를 공유함으로써, 명령 메모리의 총 논리물량을 삭감하여, 저전력화를 실현하고 있다.
상기 특허 문헌 3은, VLIW형 CPU에 대하여 나타내고 있다. VLIW는, 연산기를 병렬로 배치하고, 이것을 병렬 동작시킴으로써, 필요 처리 사이클을 삭감하여, 저전력화를 실현하고 있다.
특허 문헌 1에서는, SIMD형 ALU에 대하여 개시되어 있다. 일반적인 화상 처리는, 동일 연산을 2차원의 블록 전체에 실시하는 알고리즘이다. 이것을 SIMD형 ALU에서 실현하는 경우, 범용 레지스터의 리드 레지스터 번호와 라이트 레지스터 번호만이 상이한 동일한 명령을 매사이클 공급한다. 이것은, 매사이클, 명령 페치를 행하는 것을 의미하며, 명령이 저장된 메모리를 매사이클 액세스해야만 한다. LSI 전체의 소비 전력에 대하여, 메모리가 소비하는 전력의 비율은, 비교적 높다. 따라서, 매사이클 명령 메모리의 읽어내기를 행하는 것은, 소비 전력을 증가시킨다.
또한, SIMD형 ALU에서는, 한정된 입력 데이터에 대하여 연산을 행하는 구성이다. 예를 들면, 세로 방향의 컨볼루션 연산 등을 행하는 경우, 복수의 명령열에서 각 요소의 연산을 행하고, 마지막으로 각 연산 결과를 가산한다. 자릿수 올림을 고려한 경우, 전처리로서의 비트 확장이나, 후처리로서의 사사오입 처리 등, 실제의 컨볼루션 연산에 대하여, 처리 사이클이 커진다. 따라서, 높은 동작 주파수가 필요하여, 소비 전력이 높아진다.
특허 문헌 2에서는, 멀티프로세서의 면적 삭감에 의한 저전력화에 대하여 개시되어 있다. 본 문헌에 따르면, 프로세스가 동작하고 있는 프로세서만이 공유 명령 메모리를 액세스한다. 따라서, 복수의 프로세서에서 동시에 프로세스가 동작하고 있는 경우, 명령 메모리 액세스 경합이 발생하고, 실질적으로 프로세서의 가동률이 저하하여, 성능 저하가 발생한다. 이들과 같이, 프로세서의 명령 공급은, 명령 메모리 액세스에 의존하여, 소비하는 전력의 비율도 크다.
특허 문헌 3에서는, VLIW형 CPU에 대하여 개시되어 있다. 본 방식에 따르면, 병렬 동작시키는 연산기 수를 증가시킴에 따라서, 1 사이클에 읽어내는 명령수도 증가하여, 소비 전력이 크다. 또한, 연산기 수에 비례하여, 레지스터의 포트수가 증가하여, 면적 코스트가 크며, 이것도 소비 전력을 크게 한다.
따라서 본 출원에서는, 프로세서에서 화상 처리를 행하는 경우의 저전력화 기술을 제공한다.
예를 들면, 명령의 오퍼랜드에 2차원의 소스 레지스터와 데스티네이션 레지스터를 지정하는 수단을 설치하고, 복수 사이클에서, 복수의 소스 레지스터를 사용한 연산을 실행하며, 복수의 데스티네이션을 얻는 수단을 갖는다. 또한, 복수 소스 레지스터를 이용하여, 복수 사이클 소비하여 데스티네이션을 얻는 명령에서, 데이터 사사오입 연산기를 파이프라인의 최종단에 접속한다.
또한, 복수의 CPU를 직렬 접속하고, 공유형의 명령 메모리를 공유하여 사용한다. 이 때, 각 CPU의 명령 오퍼랜드에, 인접하는 CPU간의 동기를 제어하기 위한 필드를 갖고, 동기화 제어를 행하는 수단을 설치한다.
이들 구성에 의해 예를 들면, 명령 메모리의 액세스 횟수를 삭감함으로써, 명령 메모리 읽어내기 시에 소비하는 전력을 삭감한다. 또한, 명령수의 삭감과, 명령 메모리의 공유화에 의해, 명령 메모리의 총 용량을 삭감함으로써, 트랜지스터의 충방전 개수를 삭감하여, 저소비 전력화를 실현한다.
<실시예>
이하에, 본 발명의 실시예를 도면을 이용하여 설명한다.
(제1 실시예)
본 발명의 제1 실시예에 대하여, 도면을 참조하여 상세하게 설명한다. 도 1은, 본 실시예에서의 내장 시스템의 블록도이다. 본 내장 시스템은, 시스템의 제어와 범용적인 처리를 행하는 CPU(1)와, MPEG 등의 화상 코덱의 1처리인 스트림 처리를 행하는 스트림 처리부(2)와, 스트림 처리부(2)와 제휴하여 화상 코덱의 부호 화나 복호화를 행하는 영상 처리부(6)와, AAC나 MP-3 등의 음성 코덱의 부호화나 복호화를 행하는 음성 처리부(3)와, SDRAM 등으로 구성하는 외부 메모리(20)의 액세스를 제어하는 외부 메모리 제어부(4)와, 표준 버스인 PCI 버스(22)와 접속하기 위한 PCI 인터페이스(5)와, 화상 표시를 제어하는 표시 제어부(8)와, 다양한 IO 디바이스에 대하여, 다이렉트 메모리 액세스를 행하는 DMA 컨트롤러(7)가, 내부 버스(9)에 서로 접속된다.
DMA 컨트롤러(7)에는, DMA 버스(10)를 통하여, 다양한 IO 디바이스가 접속된다. IO 디바이스에는, 카메라나 NTSC 신호 등의 영상 입력을 행하는 영상 입력부(11), NTSC 등 영상을 출력하는 영상 출력부(12), 마이크 등 음성의 입력을 행하는 음성 입력부(13)와, 스피커나 광 출력 등의 음성 출력을 행하는 음성 출력부(14), 리모콘 등의 시리얼 전송을 행하는 시리얼 입력부(15), 시리얼 출력부(16), PCI 버스 등의 스트림을 입력하기 위한 스트림 입력부(17), 하드디스크 등 스트림을 출력하기 위한 스트림 출력부(18) 및 다양한 IO 디바이스(19)가 접속된다. PCI 버스(22)에는, 하드디스크나 플래시 메모리 등의 다양한 PCI 디바이스(23)가 접속된다.
표시 제어부(8)에는, 표시 디바이스인 디스플레이(21)가 접속된다. 영상 처리부(6)는, 화상 코덱이나 화상의 확대 축소, 또한 화상의 필터링 등, 2차원 화상에 대하여 처리를 실시하는 처리부이다. 이와 같이, 본 내장 시스템은, 영상이나 음성의 입출력을 갖고, 영상이나 음성 처리를 행하는 시스템이다. 예를 들면, 휴대 전화나, HDD 레코더, 감시 장치, 차량 탑재용 화상 처리 장치 등을 들 수 있다.
도 2는, 본 실시예에서의 영상 처리부(6)의 블록도이다. 영상 처리부(6)는, 내부 버스 브릿지(60)를 통하여 내부 버스(9)에 접속된다. 내부 버스 브릿지(60)는, 패스(63)를 통하여 내부 버스 마스터 제어부(61)와, 패스(64)를 통하여 내부 버스 슬레이브 제어부(62)에 접속된다. 내부 버스 마스터 제어부(61)는, 영상 처리부(6)가 내부 버스(9)에 대하여 버스 마스터로 되어, 리드 액세스나 라이트 액세스의 리퀘스트를 생성하고, 내부 버스 브릿지(60)에 리퀘스트를 출력하는 블록이다. 내부 버스(9)에 대한 라이트 액세스 시에는, 리퀘스트, 어드레스, 데이터를 출력한다. 내부 버스(9)에 대한 리드 액세스 시에는, 리퀘스트와 어드레스를 출력하고, 수사이클 후, 리드 데이터가 반송된다. 내부 버스 슬레이브 제어부(62)는, 내부 버스(9)로부터 입력되며, 내부 버스 브릿지(60)를 경유하여 입력되는 리드 요구나 라이트 요구를 접수하여, 대응하여 처리를 행하는 블록이다. 내부 버스 브릿지(60)는, 내부 버스(9)와 내부 버스 마스터 제어부(61) 사이, 및 내부 버스(9)와 내부 버스 슬레이브 제어부(62) 사이에서 주고 받는 리퀘스트나 데이터의 조정을 행하는 블록이다. 시프트형 버스(50)는, 영상 처리부(6) 내의 블록간 데이터 전송을 행하는 버스이다. 각 블록과 시프트형 버스(50)는, 3종류의 신호선군으로 접속된다. 우선, 도 3과 도 4를 사용하여, 시프트형 버스(50)의 설명을 행한다.
도 3은, 시프트형 버스(50)의 블록도이다. 시프트형 버스(50)에는, 각 블록과의 인터페이스로서 3종의 신호선군으로 접속된다. 따라서, 신호선군(50a, 50b, 50c)이 1개의 블록에 접속되고, 신호선군(51a, 51b, 51c)이 다른 1개의 블록에 접속되며, 신호선군(55a, 55b, 55c)이 다른 1개의 블록에 접속된다. 신호선군(50a, 50b, 50c)은, 시프트 레지스터 슬롯(500)에 접속되고, 신호선군(51a, 51b, 51c)은, 시프트 레지스터 슬롯(501)에 접속되고, 신호선군(55a, 55b, 55c)은, 시프트 레지스터 슬롯(505)에 접속된다. 각 시프트 레지스터 슬롯(500, 501, 505)은, 직렬로 접속된다. 예를 들면, 시프트 레지스터 슬롯(500)의 출력(50e)은, 시프트 레지스터 슬롯(501)의 51d에 입력되고, 시프트 레지스터 슬롯(501)의 출력(51f)은, 시프트 레지스터 슬롯(500)의 50g에 입력된다. 마찬가지로, 시프트 레지스터 슬롯(505)의 출력(55e)은, 시프트 레지스터 슬롯(500)의 50d에 입력되고, 시프트 레지스터 슬롯(500)의 출력(50f)은, 시프트 레지스터 슬롯(505)의 55g에 입력된다. 신호선(500p)은, 시프트 레지스터 슬롯마다 공급되는 클럭 정지 신호(500p)로서, 50p 단자, 51p 단자, 55p 단자에 입력된다. 클럭 정지 신호(500p)에 관해서는 후술한다. 시프트 레지스터 슬롯(500, 501, 505)은, 후술하는 자신 블록 ID를 제외하면, 동일한 구성이다. 따라서, 대표하여, 시프트 레지스터 슬롯(500)에 대하여, 상세하게 설명한다.
도 4는, 시프트 레지스터 슬롯(500)의 블록도이다. 시프트 레지스터 슬롯(500)에는, 각 블록과의 인터페이스인 신호선군(50a, 50b, 50c)과, 블록간 인터페이스의 신호선군인 50d, 50e, 50f, 50g가 접속된다. 이들 신호선군(50a, 50b, 50c, 50d, 50e, 50f, 50g)에 대하여, 표 1 내지 표 7에 신호의 의미를 정리한다. 여기서, 신호선군(50b, 50d, 50g)은 입력 신호이고, 참조 부호 50a, 50c, 50e, 50f는 출력 신호이다. 또한, 각 신호선군(50a, 50b, 50c, 50d, 50e, 50f, 50g)은, 동일 사이클에서 유효한 값이다.
신호선군(50a)
신호명 신호의 의미
R_WE_IN 우회전 시프트형 버스로부터의 라이트 인에이블
R_CMD_IN 우회전 시프트형 버스로부터의 전송 커맨드
R_LAST_IN 우회전 시프트형 버스로부터의 전송 종료 플래그
R_TRID_IN[3:0] 우회전 시프트형 버스로부터의 트랜잭션 ID
R_ADDR_IN[12:0] 우회전 시프트형 버스로부터의 전송 어드레스
R_DATA_IN[63:0] 우회전 시프트형 버스로부터의 전송 데이터
신호선군(50b)
신호명 신호의 의미
SBR_OUT_REQ 우회전 시프트형 버스에의 출력 리퀘스트 신호
SBL_OUT_REQ 좌회전 시프트형 버스에의 출력 리퀘스트 신호
SB_BID_OUT[3:0] 전송처 블록 ID
SB_EID_MSK_OUT[3:0] 블록 ID 마스크
SB_CMD_OUT 전송 커맨드
SB_LAST_OUT 전송 종료 플래그
SB_TRID_OUT[3:0] 트랜잭션 ID
SB_ADDR_OUT[12:0] 전송 어드레스
SB_DATA_OUT[63:0] 전송 데이터
신호선군(50c)
신호명 신호의 의미
L_WE_IN 좌회전 시프트형 버스로부터의 라이트 인에이블
L_CMD_IN 좌회전 시프트형 버스로부터의 전송 커맨드
L_LAST_IN 좌회전 시프트형 버스로부터의 전송 종료 플래그
L_TRID_IN[3:0] 좌회전 시프트형 버스로부터의 트랜잭션 ID
L_ADDR_IN[12:0] 좌회전 시프트형 버스로부터의 전송 어드레스
L_DATA_IN[63:0] 좌회전 시프트형 버스로부터의 전송 데이터
신호선군(50d)
신호명 신호의 의미
SBR_WE_IN 우회전 시프트형 버스의 라이트 인에이블
SBR_BID_IN[4:0] 전송처 블록 ID
SBR_EID_MSK_IN[4:0] 블록 ID 마스크
SBR_CMD_IN 전송 커맨드
SBR_LAST_IN 전송 종료 플래그
SBR_TRID_IN[3:0] 트랜잭션 ID
SBR_ADDR_IN[12:0] 전송 어드레스
SBR_DATA_IN[63:0] 전송 데이터
신호선군(50e)
신호명 신호의 의미
SBR_WE_OUT 우회전 시프트형 버스의 라이트 인에이블
SBR_BID_OUT[4:0] 전송처 블록 ID
SBR_EID_MSK_OUT[4:0] 블록 ID 마스크
SBR_CMD_OUT 전송 커맨드
SBR_LAST_OUT 전송 종료 플래그
SBR_TRID_OUT[3:0] 트랜잭션 ID
SBR_ADDR_OUT[12:0] 전송 어드레스
SBR_DATA_OUT[63:0] 전송 데이터
신호선군(50f)
신호명 신호의 의미
SBL_WE_OUT 좌회전 시프트형 버스의 라이트 인에이블
SBL_BID_OUT[4:0] 전송처 블록 ID
SBL_EID_MSK_OUT[4:0] 블록 ID 마스크
SBL_CMD_OUT 전송 커맨드
SBL_LAST_OUT 전송 종료 플래그
SBL_TRID_OUT[3:0] 트랜잭션 ID
SBL_ADDR_OUT[12:0] 전송 어드레스
SBL_DATA_OUT[63:0] 전송 데이터
신호선군(50f)
신호명 신호의 의미
SBL_WE_IN 좌회전 시프트형 버스의 라이트 인에이블
SBL_BID_IN[4:0] 전송처 블록 ID
SBL_EID_MSK_IN[4:0] 블록 ID 마스크
SBL_CMD_IN 전송 커맨드
SBL_LAST_IN 전송 종료 플래그
SBL_TRID_IN[3:0] 트랜잭션 ID
SBL_ADDR_IN[12:0] 전송 어드레스
SBL_DATA_IN[63:0] 전송 데이터
신호선군(50d)은 입력 신호로서, 레지스터(510)에 저장된다. 레지스터(510)의 출력인, 1 사이클 딜레이한 우회전 입력 신호군(511)은 BID 디코더(512)와 셀렉터(513), 및 신호선군(50a)에 입력된다. BID 디코더(512)에는, 입력 신호군(511) 중, 적어도, WE, BID가 입력된다. BID 디코더(512)는, 자신의 블록 번호를 인지하기 위한 블록 ID[4:0]을 갖는다.
도 5에, 우회전 시프트형 버스의 타이밍차트에 대하여 도시한다. 본 타이밍차트와, 도 4의 시프트 레지스터 슬롯(500)의 신호선군을 이용하여, 우회전 시프트형 버스의 버스 프로토콜을 설명한다. 또한, 본 타이밍차트에서의, 자신의 블록 ID는 "B"이다. 입력된 EID와 블록 ID가 동일하지 않고, 또한, WE가 1인 경우, 셀렉터(513)에는, 신호선군(511)을 선택하고, 신호선군(50e)에는, 신호선군(511)이 출력된다. 그 결과, 신호선군(50d)이 1 사이클 지연되어, 신호선군(50e)에 출력되고, 다음단의 시프트 레지스터 슬롯에 투입되어, 유효한 데이터 라이트 트랜잭션으로서 인계된다. 본 프로토콜은, 도 5에서의 데이터 시프트 출력이다. 다음으로, 입력된 EID와 블록 ID가 동일하며, 또한, WE가 1인 경우, 자신의 블록에의 입력으로서 인지하고, 신호선군(50a)의 R_WE_IN 신호를 1로 한다. 본 R_WE_IN 신호가 1인 경우, 각 블록은, 우회전 시프트형 버스로부터의 입력이 데이터 라이트 트랜잭션이라고 인식하고, 데이터 라이트 처리를 실행한다. 본 프로토콜은, 도 5에서의 데이터 라이트이다.
또한, 데이터 라이트 조건이 성립한 경우, 셀렉터(513)를 입력 신호선군(50b) 측에 선택하고, 신호선군(50e)에는, 입력 신호선군(50b)이 출력된다. 이 때, 입력 신호선군(50e)의 SBR_WE_OUT에 입력 신호선군(50b)의 SBR_OUT_REQ를 출력한다. SBR_OUT_REQ가 0인 경우에는, 다음단 시프트 레지스터 슬롯에는, 무효한 트랜잭션으로서 입력된다. 본 프로토콜은, 도 5에서의 데이터 라이트와 마찬가지이다. SBR_OUT_REQ가 1인 경우에는, 다음단 시프트 레지스터 슬롯에는, 유효한 트랜잭션으로서 입력된다. 이것은, 도 5에서의 데이터 라이트&데이터 출력이다. 또한, 입력된 WE가 0인 경우, 무효한 트랜잭션이 입력되었다고 인지하고, 셀렉터(513)를 입력 신호선군(50b) 측에 선택하고, 자신 블록으로부터의 데이터 라이트가 가능하다.
이들 BID 디코더(512)의 동작에 의해, 신호선군(50d)으로부터의 입력을, 데이터 라이트 트랜잭션으로서 수탁하는 동작과, 신호선군(50b)을 다음단 시프트 레지스터 슬롯에 데이터 라이트 트랜잭션으로서 출력하는 동작과, 자신의 블록에 대한 데이터 라이트 트랜잭션이 아닌 경우에도, 그 트랜잭션을 다음단에 인계하는 것이 가능하게 된다. 이에 의해, 좌측의 블록으로부터 우측의 블록에의 우회전의 데이터 전송을 실현한다.
마찬가지로, 앞의 설명에 대하여, 신호선군(50d)을 신호선군(50g)으로 치환하고, 신호선군(50e)을 신호선군(50f)으로 치환하고, 신호선군(50a)을 신호선군(50c)으로 치환하고, 레지스터(510)를 레지스터(514)로 치환하고, BID 디코더(512)를 BID 디코더(516)로 치환하고, 셀렉터(513)를 셀렉터(517)로 치환하고, SBR_OUT_REQ 신호를 SBL_OUT_REQ 신호로 치환함으로써, 우측의 블록으로부터 좌측의 블록으로의 좌회전의 데이터 전송을 실현한다.
또한, 메모리 등, 1포트 메모리를 사용한 메모리에 대하여, 신호선군(50a)과 신호선군(50c)으로부터 동시에 데이터 라이트 트랜잭션이 발생한 경우, 메모리 라이트 포트의 경합이 발생한다. 이것을 회피하기 위해, 몇가지의 방식이 있다. 하나는, 한쪽의 시프트형 버스를 스톨시키고, 한쪽으로부터의 데이터 라이트를 우선하는 것이다. 이 경우, 경합 신호를 전체 블록에 브로드캐스트하여 정지한다. 또한, 신호선군(50a)과 신호선군(50c)을 FIFO에 투입함으로써, 경합의 빈도를 삭감할 수 있다. 또한, 이와 같은 메모리를 사용하는 경우에는, 인터리브형 메모리 구성을 취하여, 우회전 시프트형 버스와 좌회전 시프트형 버스로부터의 기입을 별도 뱅크 메모리로 함으로써 경합을 회피할 수 있다. 단, 데이터 플로우가 심플하고, 블록간의 데이터 전달은 우회전 시프트형 버스를 사용하고, 외부 메모리로부터의 읽어들여, 즉 내부 버스 브릿지(60)를 통한 데이터 라이트 트랜잭션은 좌회전 시프트형 버스를 사용함으로써, 경합을 회피할 수 있다. 또한, 하나의 메모리에 대하여, 우회전 시프트형 버스와 좌회전 시프트형 버스로부터 동일 사이클에서, 데이터 라이트 트랜잭션이 발생하여 경합할 확률은 매우 작다. 이 때문에, 성능 저하의 비율은 작다고 할 수 있다.
본 방식에 의해, 일반적으로 타이밍 크리티컬로 되는 글로벌한 버스 조정 회로를 갖지 않고, 버스 전송을 실현할 수 있다. 또한, 시프트 레지스터 슬롯(500) 내의 레지스터(510, 514)에 의해, 블록 단위로 레지스터를 통함으로써, 실제의 LSI의 플로어플랜에서, 긴 배선과 타이밍 크리티컬 패스를 삭감할 수 있다. 일반적으로, 트라이 스테이트 버스 방식이나, 크로스바 스위치형 버스에서는, 블록수가 증가한 경우, 타이밍 크리티컬이나, 배선물량이 증가하지만, 본 방식에 따르면, 버스에 접속하는 블록수를 증가시킨 경우에도, 타이밍 크리티컬과 배선량 증가를 억지하는 것이 가능하다.
또한, 복수의 블록간에서, 동일 사이클에서, 병렬로 데이터 전송을 행하는 것이 가능하여, 높은 데이터 전송 성능을 얻을 수 있다. 특히, 인접하는 블록에 대해서만 데이터 전송하는 경우, 블록수에 비례한 데이터 밴드 폭을 얻는 것이 가능하다. 이와 같이, 시프트형 버스(50)의 버스 프로토콜은, 데이터의 라이트뿐이다. 데이터 라이트의 버스 프로토콜에서는, 리퀘스트 신호(WE_OUT)와 동일 사이클에서, 어드레스(ADDR_OUT)나 데이터(DATA_OUT)를 출력하는 것이 가능하며, FIFO나 큐를 이용하여, 상태를 유지하면서 실행하는 버스 구조와 비교하여, 보다 심플한 버스를 구성할 수 있다.
클럭 정지 신호(500p)는 50p 단자에 입력된다. 본 클럭 정지 신호(50p) 신호가 액티브인 경우, 셀렉터(513)와 셀렉터(517)는, 모두 신호선군(50d)과 신호선군(50g)이 선택된다. 이에 의해, 입력으로부터 출력까지, 레지스터를 통하지 않고 스루로 전파한다. 본 방식에 의해, 예를 들면, 1개의 블록의 클럭을 정지한 경우에도, 데이터 전송을 가능하게 한다. 본 시프트형 버스(50)는, 글로벌한 버스 조정 회로를 갖지 않기 때문에, 적어도 동작할 블록에만 클럭을 공급함으로써, 블록간의 데이터 전송을 가능하게 하고, 동작하는 레지스터수의 삭감에 의해, 소비 전력을 저감 가능하다. 또한, 시프트형 버스(50) 전체에는 클럭을 공급하고, 각 블록에는 클럭을 공급하지 않음으로써, 레지스터(510, 514, 518)분의 전력 증가로, 각 블록을 정지시키는 것도 가능하다.
이와 같이 시프트형 버스(50)는, 인접하는 블록간을 심플한 인터페이스로 접속할 수 있다. 따라서, 블록 ID 필드를 늘림으로써, 복수의 블록을 접속 가능하다. 본 실시예의 설명에서는, 영상 처리부(6) 내의 공통 버스로서 설명하고 있지만, 이것에 한정되지 않는다. 예를 들면, LSI의 핀에 시프트형 버스 인터페이스를 이용함으로써, 복수의 LSI를 직렬 접속 가능하게 되고, 인접하는 LSI뿐만 아니라, 배치적으로 떨어진 LSI와의 통신을 가능하게 한다. 또한, LSI간 접속에서는, 고속 시리얼 인터페이스 등을 사용하여, 핀수 삭감도 실현할 수 있다.
또한, 시프트형 버스(50)에서는, Last 신호를 갖는다. 데이터 전송과 동시에, 본 신호선이 "1"인 경우, 후술하는 동기 제어부(473) 내의 데이터 메모리 레디 카운터 DMRC를 카운트업한다. 이에 의해, 명령 레벨로 블록간의 동기화를 실현한다. 상세에 대해서는 후술한다. 또한, 시프트형 버스에서는, 리드 트랜잭션도 갖는다. 본 리드 트랜잭션에 대해서도 후술한다.
다시, 도 2를 이용하여, 영상 처리부(6)의 설명을 행한다. 시프트형 버스(50)에는, 복수의 블록이 접속된다. 앞에 나타낸 내부 버스 마스터 제어부(61), 내부 버스 슬레이브 제어부(62) 외에, 영상 처리부(6) 전체에서 공유 가능한 메모리를 갖는 공유 로컬 메모리(65), 소프트웨어에 의해 동작하는, 영상 코덱이나 화상의 회전, 확대 축소 등, 2차원의 화상에 대하여 처리를 행하는 복수의 영상 처리 엔진(66, 67), 화상 처리의 일부의 처리를 실행하는 전용 하드웨어(68) 등이 접속된다. 전용 하드웨어(68)의 일례로서는, MPEG-2나 H.264 부호화 규격에서의, 인코드 시의 움직임 예측 등을 처리하는 블록이다. 단, 전용 하드웨어(68)의 처리 내용은, 본 발명의 본질에 관계를 갖지 않기 때문에, 설명을 생략한다. 영상 처리 엔진(66, 67)은, 프로세서형의 블록으로, 시프트형 버스 상에 복수 접속할 수 있다. 공유 로컬 메모리(65), 영상 처리 엔진(66, 67), 전용 하드웨어(68), 내부 마스터 제어부(61), 내부 버스 슬레이브 제어부(62)는, 각각 독자적인 블록 ID를 갖고, 시프트형 버스(50)의 공유 버스 프로토콜로, 서로 접속된다.
다음으로, 도 6을 이용하여, 제1 실시예에서의, 영상 처리 엔진(66)의 보다 상세한 설명을 행한다. 도 6은 영상 처리 엔진(66)의 블록도이다. 영상 처리 엔진(66)의 인터페이스는, 시프트형 버스(50)와의 인터페이스뿐이며, 우회전 시프트형 버스의 입력 신호(51a), 좌회전 시프트형 버스의 입력 신호(51c), 및, 시프트형 버스(50)에의 출력 신호(51b)이다. 이들 3종의 신호는, 데이터 패스부(36)에 접속된다. 데이터 패스부(36)에는, 신호선(44)을 통하여, 시프트형 버스(50)에 대하여 데이터 출력 처리를 행하는 로컬 DMAC(34)가 접속된다.
또한, 영상 처리 엔진(66)은, 시프트형 버스(50)로부터 데이터 라이트를 행하는 것이 가능한 명령 메모리(31)와 데이터 메모리(35)를 갖고, 데이터 패스부(36)에는, 패스(42)를 통하여, 명령 메모리(31)의 제어를 행하는 명령 메모리 제어부(32)와 접속되고, 패스(43)를 통하여, 데이터 메모리 제어부(33)가 접속된다. 명령 메모리 제어부(32)는, 시프트형 버스(50)로부터의 명령 메모리(31)에의 데이터 라이트와, CPU부(30)에의 명령 공급을 제어하는 블록으로, 패스(40)를 통하여 명령 메모리(31)와, 패스(37)를 통하여 CPU부(30)와, 패스(42)를 통하여 데이터 패스부(36)에 접속된다. 데이터 메모리 제어부(33)는, 시프트형 버스(50)로부터의 데이터 메모리(35)에의 데이터 라이트와, 로컬 DMAC(34)가 제어하는, 데이터 메모리(35)로부터 시프트형 버스(50)에의 데이터 출력의 제어와, CPU(30)로부터 데이터 메모리(35)에의 액세스의 제어를 행하는 블록이다. 데이터 메모리(35)의 제어는, 패스(41)를 사용하여 행한다.
시프트형 버스(50)로부터의 데이터 메모리(35)에의 데이터 라이트와, 데이터 메모리(35)로부터 시프트형 버스(50)에의 데이터 출력은, 패스(43)를 통하여, 데이터 패스부(36)와 강조하여 제어한다. CPU부(30)와의 접속은, 2개의 패스에서 제어된다. 데이터 메모리(35)로부터 CPU부(30)에의 데이터 읽어내기 처리는, 패스(38)에 의해 제어되고, CPU부(30)로부터, 데이터 메모리(35)에의 데이터 기입은 패스(39)에 의해 제어된다. 모두, 데이터 메모리(35)의 액세스 어드레스는 패스(45)로 공급된다.
또한, 본 실시예의 설명에서는, 설명을 용이하게 하기 위해, 데이터 메모리(35)의 개수를 1개로 하지만, 복수의 데이터 메모리를 사용한 인터리브 구성도 가능하다. 인터리브 구성에 의해, 복수의 데이터 메모리(35)의 액세스를 병렬로 행하는 것이 가능하다. 본 발명을 설명함에 있어서, CPU(30)에 의한 연산 내용을 정의한다. 단, 본 연산 내용은, 본 발명의 본질을 설명하기 위한 것으로서, 연산 내용의 종류에 대해서는 한정을 갖지 않는다.
도 7에, 연산 내용의 개요를 도시한다. 도 7이 나타내는 바와 같이, 연산 내용은, 2차원의 화상 A와 2차원 화상 B의 화소마다 가산을 행하고, 메모리에 기입을 행하는 것이다. 특허 문헌 1에 나타낸 SIMD형 연산기를 사용한 경우, 필요 사이클은, 행렬 A의 읽어내기에 4 사이클, 행렬 B의 읽어내기에 4 사이클, 가산에 4 사이클, 감산에 4 사이클 소비하여, 합계 16 사이클 필요로 된다. 또한, SIMD형 연산기의 병렬수를 8로 한 경우, 가산에 필요한 사이클수는 2로 되지만, 본 설명에서는, 4병렬의 SIMD형 연산기로서 설명한다. 이 때, SIMD형 연산기가 필요한 총 명령수는, 필요 사이클수와 동일한 16명령이다. 본 연산 내용을 사용하여, 본 발명의 실현 방식에 대하여 설명한다.
CPU부(30)는, 2차원 화상에 대한 연산 등을 행하는 CPU이다. 본 실시예에서는, 설명을 용이하게 하기 위해, CPU부(30)는, 다음에 설명하는 4명령을 갖는 것으로 한다. 단, 본 명령의 종류는, 설명을 용이하게 하기 위한 것으로, 명령 종류에 대한 제한은 갖지 않는다. 단, 후술하는, 레지스터 포인터와 높이 방향을 지정하는 수단에 대해서는, 필요한 요소이다. 4명령은, 분기 명령, 리드 명령, 라이트 명령, 가산 명령으로 한다. 각 명령의 명령 포맷에서, 필요한 비트 필드를 표 8 내지 표 11에 나타낸다.
분기 명령의 명령 포맷
필드 필드의 의미
분기 명령 오피코드 본 명령이 분기 명령이라고 나타낸다
ADDR 분기처 어드레스
CBR_IDX 분기 조건 레지스터의 읽어내기 인덱스
리드 명령의 명령 포맷
필드 필드의 의미
리드 명령 오피코드 본 명령이 리드 명령이라고 나타낸다
ADDR 데이터 메모리(35)의 읽어내기 어드레스. 본 설명에서는, 설명을 용이하게 하기 위해, 명령 자신에 나타내는 즉치로 어드레스를 지정한다.
DestReg 리드 데이터를 저장하는 레지스터 번호 포인터. 지정 가능한 레지스터는, 레지스터 파일 공간과 마스터 S/D 레지스터이다. 마스터 S/D 레지스터는, 로컬 DMAC(34) 내에 배치된다.
Width 리드하는 데이터의 폭
Count 리드하는 데이터의 높이(카운트 수)
Pitch 2차원 데이터를 읽어들일 때의 데이터 간격
라이트 명령의 명령 포맷
필드 필드의 의미
라이트 명령 오피코드 본 명령이 라이트 명령이라고 나타낸다
ADDR 데이터 메모리(35)의 기입 어드레스. 본 설명에서는, 설명을 용이하게 하기 위해, 명령 자신에 나타내는 즉치로 어드레스를 지정한다.
SrcReg 라이트 데이터가 저장되어 있는 레지스터 번호 포인터
Width 라이트하는 데이터의 폭
Count 라이트하는 데이터의 높이(카운트 수)
Pitch 2차원 데이터를 기입할 때의 데이터 간격
분할 가산 명령 포맷
필드 필드의 의미
분할 가산 명령 오피코드 본 명령이 분할 가산 명령이라고 나타낸다
Src1Reg 소스 데이터가 저장되어 있는 제1 레지스터 번호 포인터
Src2Reg 소스 데이터가 저장되어 있는 제2 레지스터 번호 포인터
DestReg 연산 결과를 저장하는 레지스터 번호 포인터
Width 분할 가산 연산하는 데이터의 폭(바이트수로 함)
Count 분할 가산 연산하는 데이터의 높이(카운트 수)
도 8은 CPU부(30)의 블록도이다. 명령 메모리 제어부(32)와의 인터페이스(37)는, 2종의 신호로 나뉘며, 1개는, 명령 디코드부(303)가 명령 메모리 제어부(32)에 대하여 출력하는 명령 페치 요구(37r)와, 명령 메모리 제어부(32)가 출력하고, CPU부(30)에 입력되는 명령(37i)이다. 명령 디코드부(303)는, 1개의 명령 처리가 종료한 시점에서, 명령 페치 요구(37r)를 출력한다. 대응하여, 명령(37i)과 명령 레디 신호(37d)가 입력되고, 명령 레지스터(301)에 저장된다. 여기에서의 설명에서는, 명령 레지스터(301)의 세트수를 1로서 설명한다. 단, 명령의 읽어내기 레이턴시는 1 사이클보다도 크기 때문에, 복수 세트의 명령 레지스터(301)를 갖는 것도 가능하다. 명령 레지스터(301)의 값은, 명령 디코드부(303)에 공급되어, 명령을 디코드한다. 명령 디코드부(303)에서는, 레지스터 파일(범용 레지스터)(304)의 읽어내기 포트와 기입 포트를 제어하는 제어선(308)과, 연산기(313)를 제어하기 위한 명령 디코드 신호(309)와, 명령의 종류에 의해, 셀렉터(311)를 제어하기 위한 제어선(310)을 생성한다. 또한, 1개의 명령 처리가 종료한 시점에서, 명령 페치 요구(37r)를 출력한다.
본 설명에서는, 분기 명령을 제외하고, 리드 명령, 라이트 명령, 분할 가산 명령을 갖는 CPU부(30)로서 설명한다. 따라서, 제어선(308)은, 리드 명령 시에는, 리드 데이터(38)가 반송된 시점에서, 리드 데이터를 저장하는 레지스터 번호 포인터값을 저장처 레지스터 번호 포인터로서 사용한다. 라이트 명령 시에는, 레지스터 파일(304)의 읽어내기가 필요하기 때문에, 라이트 데이터 레지스터 번호를 사용한다. 분할 가산 명령 시에는, 레지스터 파일(304)의 읽어내기와 기입 모두 필요하여, 이것을 제어한다. 명령 디코드 신호(309)는, 본 설명에서는, 분할 가산 명령 시에만 액티브로 되지만, 다른 명령을 갖는 경우, 명령 종류에 따라, 연산기를 제어하기 위한 신호를 출력한다. 제어선(310)은, 리드 명령 시에는, 리드 데이터(38)를 선택하고, 분할 가산 명령 시에는 연산기(313)의 연산 결과(314)를 선택한다. 선택된 연산 데이터(315)는, 레지스터 파일(304)에 저장된다. 또한, 명령 디코드부(303)는, 리드 명령 시와 라이트 명령 시, 연산부(313)를 제어하고, 데이터 메모리(35)의 액세스 어드레스(45)를 생성한다.
또한, 연산기(303)는, 특허 문헌 1과 마찬가지로 8병렬의 SIMD형의 연산기로 구성되며, 8비트폭의 가산을 병렬로 8개 연산 가능한 구성으로 한다. 즉, 분할 가산을 8개 병렬로 연산할 수 있다. 또한, CPU(30)의 데이터폭을 8바이트로 한다. 따라서, 리드 명령, 라이트 명령, 분할 가산 명령에는 8바이트 단위로 실행할 수 있는 구성이다. 또한, 리드 명령, 라이트 명령, 분할 가산 명령의 Width 필드에는, 8, 16, 32를 정의할 수 있는 것으로 하고, 카운트 필드에는, 1 내지 16까지, 1간격으로 지정할 수 있는 것으로 한다.
도 9를 이용하여 명령 디코드부(303) 및 연산부(313)의 액세스 어드레스(45)의 생성 동작을 설명한다. 도 9는, 명령 디코드부(303)가 생성하는 레지스터 파일(304)의 읽어내기 포트와 기입 포트를 제어하는 제어선(308)과, 데이터 메모리(35)의 액세스 어드레스(45)를 생성하는 플로우차트이다.
명령 디코드부(303)는, Wc 카운터를 갖고, 명령 기동 시에 0으로 클리어된다(스텝 90). 다음으로, 스텝 91에서, Src와 Dest, (Addr+Wc)를 사용하여, 리드 명령, 라이트 명령, 분할 가산 명령을 실행한다. 다음으로 스텝 92에서, Src와 Dest에 1을 가산하고, Wc에 8을 가산한다. 스텝 93에서, 명령 필드에서 지정된 Width 필드와 Wc의 비교를 행한다. Width가 Wc보다 큰 경우, 재차 스텝 91로 되돌아가서, 명령 실행을 반복한다. Width가 Wc와 동일하거나, 혹은 작은 경우, 스텝 94로 천이하여, 명령 필드에 나타낸 Count값이 0인지를 판정한다. Count값이 0이 아닌 경우, 스텝 95로 천이하여, Count값으로부터 1을 감산하고, Addr에 Pitch를 가산하고, 재차, 스텝 90으로 천이하여, 명령 실행을 반복한다. Count값이 0인 경우, 명령 실행을 종료한다. 이 때, 명령 디코드부(303)는 명령 페치 요구(37r)를 출력한다.
도 9의 타이밍 차트의 동작에 의해, 1개의 명령으로, 2차원 직사각형에 대한 연산을 가능하게 한다. 특히 리드 명령에서는, Pitch를 지정함으로써, 데이터 메모리(35) 상에 분산적으로 배치된 2차원 직사각형을, 레지스터 파일(304)에 연속 데이터로서 저장할 수 있다. 또한, 라이트 명령에서는, 마찬가지로 Pitch를 지정함으로써, 레지스터 파일 상에 배치된 연속 데이터를, 데이터 메모리(35) 상의 분산적으로 배치된 2차원 직사각형 영역에 라이트하는 것이 가능하다.
도 7에서 설명한 연산 내용에서는, 2개의 리드 명령, 1개의 분할 가산 명령, 1개의 라이트 명령이라고 하는, 합계 3명령만으로 연산을 종료할 수 있다. 즉, 명령 메모리(31)로부터는, 4명령만을 페치하면 된다. 단, 특허 문헌 1에 나타낸 SIMD형의 명령 길이에 대하여, 본 발명의 명령은, Width, Count, Picth 등의 오퍼랜드가 부가되어, 명령 길이가 길어진다. 특허 문헌 1의 명령폭을 32비트로 한 경우, 본 발명에서의 명령 길이는 64비트 정도이다. 1회의 명령 메모리 액세스에서 소비하는 전력은 2배로 되지만, 액세스 횟수를 16으로부터 4로 삭감 가능하며, 명령 메모리가 소비하는 총 소비 전력은 2×4÷6으로 표현되어, 전력을 절반으로 삭감할 수 있다. 또한, 1개의 명령으로 2차원의 데이터에 대하여 처리를 행하는 것은, 실질적으로 프로그램의 동일 명령에 의한 루프의 횟수를 삭감한다. 이것은, 명령 메모리(31)의 용량을 삭감할 수 있는 것을 의미한다.
또한, 도 8에서, 입력 데이터(30i)는, 레지스터 파일(304)에 입력되고, 레지스터 파일(304)의 데이터를 갱신 가능하다. 또한, 연산 데이터(315)는, 연산 데이터(30wb)로서 출력된다. 이 입력 데이터(30i)와 연산 데이터(30wb)에 대해서는, 제2 실시예의 설명에서 행한다.
도 10을 이용하여, 제1 실시예에서의 명령 메모리 제어부(32)의 설명을 행한다. 도 10은 명령 메모리 제어부(32)의 블록도이다. 명령 메모리 제어부(32)는, 명령 메모리(31)의 메모리 액세스를 제어하는 블록이다. 명령 메모리(31)에는, CPU부(30)로부터의 명령 페치 액세스와, 시프트형 버스(50)로부터의 액세스가 있으며, 명령 메모리 제어부(32)는 이들 액세스를 조정하여, 명령 메모리(31)를 액세스하는 것이다. 액세스 조정은 조정부(320)에서 행한다. 메모리 액세스 요구는, CPU부(30)로부터 입력되는 명령 페치 요구(37r)와, 데이터 패스부(36)로부터 입력되는 패스(42)이다. 조정 결과에 의해, 셀렉터(323)를 제어하고, 명령 메모리(31)를 액세스하기 위한 어드레스 등의 제어선(40c)을 산력한다.
명령 페치 액세스의 경우, 조정부(320)는, 셀렉터(323)에 명령의 프로그램 카운터(322)의 출력을 선택하고, 명령 메모리(31)를 읽어내기와 함께, 제어선(321)을 출력하고, 프로그램 카운터(322)를 인크리먼트한다. 명령 메모리(31)로부터 반송된 명령(40d)은 명령 레지스터(324)에 저장되고, 명령(37i)으로서, CPU부(30)에 반송한다. 동시에, 명령의 오피코드 필드는 분기 제어부(325)에 입력되고, 분기 명령인지 판단하여, 분기 명령 시에 1로 되는 신호(326)를 조정부(320)에 입력한다. 또한, 분기 조건 레지스터의 읽어내기 인덱스 필드는, 분기 조건 레지스터(327)에 입력된다. 분기 조건 레지스터(327)란 1비트폭의 복수 워드로 구성하는 레지스터군으로, 분기 조건 레지스터의 읽어내기 인덱스 필드에서 워드를 지정하고, 1비트폭의 신호(328)를 조정부(320)에 입력한다.
실제의 분기는, 신호(326)가 1 또는, 신호(328)가 1일 때에 분기된다. 본 조합 이외에는, 분기 명령 이외의 명령으로서 인식한다. 조정부(320)는, 분기 명령 이외의 명령 시에만, 명령 레디 신호(37d)를 반송한다. 분기 명령 시에는, 명령 레디 신호(37d)를 반송하지 않고, 셀렉터(323)를 명령 레지스터(324) 내에 저장된 즉치를 선택한다. 이 때, 본 즉치를 인크리먼트한 값으로 프로그램 카운터(322)를 갱신한다.
본 방식에 따르면, CPU의 명령 페치 요구(37r)의 발행 간격이 수 사이클 필요한 경우, 분기 명령에 의한 명령의 재읽어내기에 필요로 하는 사이클을 완전히 은폐하는 것이 가능하게 되며, 분기에 의한 성능 저하를 억지 가능하게 된다. 본 발명에서의 CPU부(30)에서는, 2차원의 오퍼랜드를 지정함으로써, 명령 페치 요구(37r)의 발행 피치는 크고, 본 효과는 크다.
도 11을 이용하여, 제1 실시예에서의 데이터 메모리 제어부(33)의 설명을 행한다. 도 11은 데이터 메모리 제어부(33)의 블록도이다. 데이터 메모리(35)는, CPU부(30)로부터의 리드 및 라이트 액세스와, 시프트형 버스(50)로부터의 라이트 처리와, 로컬 DMAC(34)로부터의 리드 액세스가 가능하며, 데이터 메모리 제어부(33)는, 이들 액세스의 조정을 행하는 블록이다. 이들 조정은, 조정부(330)에서 행하고, 어드레스 셀렉터(331)와 데이터 셀렉터(332)의 제어를 행한다. 또한, 데이터 메모리(35)와의 신호선(41)은, 41a, 41d, 41w의 3개의 신호선으로 분류된다. 또한 데이터 패스부(36)와의 신호선(43)은, 신호선(43a, 43d, 41l, 43r)의 4개의 신호선으로 분류된다.
우선, CPU부(30)와의 접속에 대하여 설명한다. 리드 명령 시 및 라이트 명령 시의 데이터 메모리 어드레스(45)는, 어드레스 셀렉터(331)를 통과하여, 데이터 메모리 어드레스(41a)로서, 데이터 메모리(35)에 입력된다. 라이트 명령 시에는, 라이트 데이터(39)가 데이터 셀렉터(332)를 경유하여, 라이트 데이터(41w)로서 데이터 메모리(35)에 입력된다. 리드 명령 시에는, 데이터 메모리 어드레스(41a)에 따라, 리드 데이터(41d)가 읽어내어져, 데이터 레지스터(333)에 저장된다. 저장된 리드 데이터는, 리드 데이터(38)로서 CPU부(30)에 반송된다. 또한, 리드 명령의 DestReg에, 마스터 S/D 레지스터의 값을 지정한 경우, 리드 데이터(43r)에 리드 데이터는 출력된다. 다음으로 시프트형 버스(50)로부터의 라이트 처리에서는, 어드레스선(43a)이 어드레스 셀렉터(331)를 통과하여, 데이터 메모리 어드레스(41a)로서, 데이터 메모리(35)에 입력된다. 동시에 데이터 선(43d)이 데이터 셀렉터(332)를 경유하여, 라이트 데이터(41w)로서 데이터 메모리(35)에 입력된다.
마지막으로, 로컬 DMAC(34)로부터의 액세스 시에는, 어드레스(43p)가 어드레스 셀렉터(331)를 통과하여, 데이터 메모리 어드레스(41a)로서, 데이터 메모리(35)에 입력된다. 대응하여 읽어내어진 리드 데이터(41d)는 데이터 레지스터(333)에 저장되고, 리드 데이터(43r)로서 반송된다.
도 12를 이용하여, 제1 실시예에서의 로컬 DMAC(34)의 설명을 행한다. 도 12는 로컬 DMAC(34)의 블록도이다. 로컬 DMAC(34)는, 시프트형 버스(50)에 대하여 데이터 출력하는 처리에서의, 데이터 메모리 어드레스(44da)와, 시프트형 버스(50)로부터 입력되는 데이터 메모리(35)로부터의 리드 액세스에 대응하여, 리드 처리를 행하기 위한 데이터 메모리 어드레스(44da)를 생성하는 기능과, 시프트형 버스(50)에 대하여 데이터 출력할 때의, 시프트형 버스 어드레스(44sa)를 생성하는 기능과, 시프트형 버스(50)에 대하여, 리드 커맨드를 발생시키기 위한 기능을 갖는다. 로컬 DMAC(34)는, 신호선(44)으로 데이터 패스부(36)만이 접속된다. 여기서, 신호선(44)은, 신호선(44pw, 44swb, 44da, 44sa, 44dw)의 5종의 신호선으로 분류할 수 있다.
로컬 DMAC(34) 내에는, 리드 명령에 의해 재기입 가능한 마스터 D 레지스터(340) 및 마스터 S 레지스터(341)와, 시프트형 버스(50)로부터 기입하는 것이 가능한 슬레이브 D 레지스터(342) 및 슬레이브 S 레지스터(343)의 4세트의 레지스터군을 갖는다. 각 레지스터의 포맷을 표 12 내지 표 15에 나타낸다.
마스터 D 레지스터(340)의 포맷
필드 필드의 의미
Mode 마스터 D 레지스터와 마스터 S 레지스터의 페어에서의 동작 모드를 지정한다. 값0: 데이터 라이트 모드 값1:리드 커맨드 모드
MDIR 데이터 출력, 혹은 데이터 리드 시에서의 데이터 전송에서, 우회전 시프트형 버스를 사용할지 좌회전 시프트형 버스를 사용할지 지정한다. 값0: 좌회전 시프트형 버스를 사용함 값1: 우회전 시프트형 버스를 사용함
MBID 리드하는 영상 처리 엔진의 블록 ID를 지정한다. 라이트 모드 시에는, 본 값을 사용하지 않는다.
MADDR 리드하는 데이터 메모리(35)의 액세스 어드레스를 지정한다.
MWidth 리드하는 데이터의 횡폭을 지정한다.
MCount 리드하는 데이터의 높이를 지정한다.
MPitch 리드하는 데이터의 간격을 지정한다.
Last 최종 데이터 전송 시에, 시프트형 버스 인터페이스의 Last 신호를 세트할지 하지 않을지를 지정한다.
마스터 S 레지스터(341)의 포맷
필드 필드의 의미
SBID 라이트하는 영상 처리 엔진의 블록 ID를 지정한다. 라이트 모드 시에는, 자신의 블록 ID를 지정한다. 리드 커맨드 시에는, 리드 데이터의 반송처 블록의 블록 ID를 지정한다.
SBIDMsk 라이트하는 영상 처리 엔진의 블록 ID의 비교 마스크를 지정한다. 본 값이 "0"인 필드만, 블록 ID의 비교를 행한다. 단, 리드 시에는, 본 값은 모두 "0"으로 지정한다.
SDIR 데이터 리드 커맨드 모드에서, 우회전 시프트형 버스를 사용할지 좌회전 시프트형 버스를 사용할지 지정한다. 값0: 좌회전 시프트형 버스를 사용함 값1: 우회전 시프트형 버스를 사용함
SADDR 라이트하는 데이터 메모리(35)의 액세스 어드레스를 지정한다.
SWidth 라이트하는 데이터의 횡폭을 지정한다.
SCount 라이트하는 데이터의 높이를 지정한다.
SPitch 라이트하는 데이터의 간격을 지정한다.
마스터 D 레지스터(342)의 포맷
필드 필드의 의미
VALID 데이터 리드를 실행 중인지를 나타낸다. 값0: 무효 값1; 유효
MDIR 데이터 리드 시에서의 데이터 전송에서, 우회전 시프트형 버스를 사용할지 좌회전 시프트형 버스를 사용할지 지정한다. 값0: 좌회전 시프트형 버스를 사용함 값1: 우회전 시프트형 버스를 사용함
MADDR 리드하는 데이터 메모리(35)의 액세스 어드레스를 지정한다.
MWidth 리드하는 데이터의 횡폭을 지정한다.
MCount 리드하는 데이터의 높이를 지정한다.
MPitch 리드하는 데이터의 간격을 지정한다.
Last 최종 데이터 전송 시에, 시프트형 버스 인터페이스의 Last 신호를 세트할지 하지 않을지를 지정한다.
슬레이브 S 레지스터(343)의 포맷
필드 필드의 의미
SBID 라이트하는 영상 처리 엔진의 블록 ID를 지정한다. 통상, 데이터 리드 시에 사용하는 본 필드는, 데이터 리드 커맨드를 발행한 영상 처리 엔진의 블록 ID로 된다. 단, 서로 다른 블록 ID가 지정되어 있는 경우, 그 블록 ID를 갖는 영상 처리 엔진 등에 데이터가 반송된다.
SADDR 라이트하는 데이터 메모리(35)의 액세스 어드레스를 지정한다.
SWidth 라이트하는 데이터의 횡폭을 지정한다.
SCount 라이트하는 데이터의 높이를 지정한다.
SPitch 라이트하는 데이터의 간격을 지정한다.
로컬 DMAC(34)를 사용한 데이터 전송은, 3종의 동작 모드를 갖는다.
1개째는, 데이터 라이트 모드이다. 데이터 라이트 모드에서는, 마스터 D 레지스터(340)의 파라미터를 이용하여, 자신의 데이터 메모리(35)를 읽어내고, 마스터 S 레지스터(341)의 파라미터를 이용하여, 다른 영상 처리 엔진 등의 블록에 데이터를 전송하고, 데이터 메모리(35) 등의 어드레스 맵핑된 영역에 데이터를 라이트하는 모드이다.
2개째는, 리드 커맨드 모드이다. 리드 커맨드 모드에서는, 마스터 D 레지스터와 마스터 S 레지스터의 값 그 자체를 데이터로 하여, 다른 영상 처리 엔진 등의 블록에 데이터를 전송하고, 그 외 블록 내의 슬레이브 D 레지스터와 슬레이브 S 레지스터에 값을 저장하는 처리이다. 이것은, 다른 블록에의 리드 요구로서 동작한다. 또한, 리드 커맨드 모드 시에는, 시프트형 버스(50)의 인터페이스로서, CMD 신호를 1로서 전송한다. 리드 커맨드를 수탁하는 블록은, CMD 신호에 의해, 그 시프트형 버스 전송이 리드 커맨드인지를 인식한다.
3개째는, 리드 모드이다. 앞의 리드 커맨드 모드에서 수탁한 리드 요구에 대하여, 슬레이브 D 레지스터(342)의 파라미터를 이용하여, 데이터 메모리(35)를 읽어내고, 슬레이브 S 레지스터(343)의 파라미터를 이용하여, 다른 영상 처리 엔진 등의 블록에 데이터를 전송하고, 데이터 메모리(35) 등의 어드레스 맵핑된 영역에 데이터를 저장하는 모드이다. 이들 3개의 모드의 조합에 의해, 영상 처리 엔진 등의 블록간에서, 데이터 전송을 실현한다.
마스터 D 레지스터(340)와 마스터 S 레지스터(341)는, CPU부(30)가 발행하는 리드 명령에 의해 갱신 가능하며, 이 때, 신호선(44pw)으로부터 데이터가 입력되고, 2개의 레지스터가 갱신된다. 즉, 미리, 데이터 전송 내용을 기술한 기술자를 데이터 메모리(35)에 저장하고, 그 내용을 마스터 D 레지스터(340)와 마스크 S 레지스터(341)에 카피함으로써, 데이터 전송을 개시한다.
2개의 레지스터가 갱신된 시점에서, 마스터 D 레지스터(340)의 Mode 필드에 의해 2개의 상태로 천이한다. Mode 필드가 데이터 라이트 모드를 나타내고 있는 경우, 어드레스 셀렉터(344)를 통하여, 마스터 D 레지스터(340)의 MADDR, MWidth, MCount, MPitch는 데이터 메모리 어드레스 생성기(346)에 전송된다. 데이터 메모리 어드레스 생성기(346)는, 데이터 메모리(35)를 읽어내기 위한 어드레스 생성을 행하고, 어드레스(44da)를 출력한다. 어드레스 생성의 방식은, CPU부(30) 내의 명령 디코드부(303)가 생성하는 액세스 어드레스(45)와 동일한 방식으로 생성된다. 따라서, 데이터 메모리 어드레스 생성기(346)에는 Wc 카운터를 갖고, MWidth, MCount, MPitch를 각각 Width, Count, Pitch와 치환한 어드레스 생성에 의해, 2차원 직사각형의 어드레스를 생성한다.
마찬가지로, 마스터 S 레지스터(341)의 SADDR, SWidth, SCount, SPitch는 어드레스 셀렉터(345)를 경유하여, 시프트형 버스 어드레스 생성기(347)에 입력되고, 시프트형 버스(50)에 출력하는 어드레스를 생성하고, 어드레스(44sa)를 출력한다. 이 시프트형 버스 어드레스 생성기(347)에 의한 어드레스 생성도, 데이터 메모리 어드레스 생성기(346)의 어드레스 생성과 마찬가지로, 2차원 직사각형을 표현한다. 이들 2개의 어드레스에 의해, 데이터 메모리(35)로부터 순차적으로 리드 데이터(43r)가 읽어내어지고, 그 결과, 신호선군(50b)으로서, 영상 처리 엔진(66)으로부터 시프트형 버스(50)에 대하여 데이터 라이트 처리를 실현한다. 이 때, 전송처 블록은, 마스터 S 레지스터(341)의 SBID가 나타내는 필드이다. 이 때, MDIR 플래그에 따라, 우회전의 시프트형 버스를 사용할지, 좌회전의 시프트형 버스를 사용할지 결정된다.
또한, 본 방식에서는, MWidth, MCount, MPitch와 SWidth, SCount, SPitch 각각을 사용하여, 데이터 메모리(35)의 어드레스(44da)와 시프트형 버스에 출력하기 위한 어드레스(44sa)를 생성한다. 이와 같이, 2개의 레지스터 세트에서, 각각 어드레스 생성을 행함으로써, 2차원 직사각형의 형을 변환하여 데이터 전송을 가능하게 하고 있다. 단, 동일 직사각형으로서 전송하는 경우에는, 한쪽만의 파라미터로 어드레스 생성 가능하다.
한편, Mode 필드가 리드 커맨드 모드라고 나타내고 있는 경우, 마스터 D 레지스터(340)와 마스터 S 레지스터(341)의 값은, 직접 출력 신호(44swb)로서 출력되고, 리드 커맨드를 다른 블록에 전송한다. 이 때, 전송처 블록은, 마스터 D 레지스터(340)의 MBID 필드가 나타내는 블록이다. 전송처 블록이 본 리드 커맨드를 수탁한 경우, 슬레이브 D 레지스터(342)와 슬레이브 S 레지스터(343)를 갱신하고, 리드 모드로서 처리를 개시한다. 리드 커맨드는, 패스(44sw)를 통하여, 슬레이브 D 레지스터(342)와 슬레이브 S 레지스터(343)에 갱신된다. 전송처 블록이 리드 커맨드를 수탁 후, 앞의 데이터 라이트 처리와 거의 마찬가지의 동작으로, 리드 데이터를 읽어내고, 시프트형 버스(50)에 대하여 출력한다. 슬레이브 D 레지스터(342)의 MADDR, MWidth, MCount, MPitch는, 어드레스 셀렉터(344)를 경유하여, 데이터 메모리 어드레스 발생기(346)에 입력되며, 어드레스(44cd)로서 데이터 메모리(35)를 액세스한다. 그 후의 동작은, 데이터 라이트 시와 마찬가지이다. 마찬가지로, 슬레이브 S 레지스터(343)의 SADDR, SWidth, SCount, SPitch는, 셀렉터(345)를 경유하여, 시프트형 버스 어드레스 생성기(347)에 입력되고, 어드레스(44sa)가 생성된다. 그 후의 동작은, 데이터 라이트 시와 마찬가지이다. 이들 3개의 로컬 DMAC(34)의 동작에 의해, 시프트형 버스(50)에서는, 어드레스와 데이터가 동일 사이클에서 출력 가능한 라이트 트랜잭션만으로 데이터 전송을 실현한다. 일반적으로, 버스의 성능을 향상하기 위해서, 어드레스와 데이터를 분리한 스플리트형의 버스가 사용된다. 스플리트형 버스란, 어드레스와 데이터를 동일한 트랜잭션 ID 등의 ID로 관리하고, 리퀘스트 슬레이브 측은, 어드레스를 FIFO 등에 큐잉하여, 데이터 수신까지 대기한다. 따라서, 큐나 FIFO의 단수에 의해, 버스 성능이 제한된다. 한편, 본 방식에서는, 모든 버스 전송에서, 동일 사이클에서 어드레스와 데이터를 전송 가능하며, FIFO 단수 등에 의한 성능의 포화가 발생하지 않는다.
또한, 로컬 DMAC(34)의 동작은, 리드 명령에 의해 기동되고, 기동된 시점에서, CPU부(30)는 다음의 명령을 실행 가능하게 된다. 단, 로컬 DMAC(34)를 사용한 전송이 실행 중에만, 다음의 로컬 DMAC(34)의 사용은 금지 상태로 되고 스톨한다. 단, 로컬 DMAC(34) 기동의 발행 피치를 크게 함으로써, 경합에 의한 성능 저하는 발생하지 않는다. 그 동안, CPU부(30)는 다른 처리 시퀀스를 실행함으로써, CPU부(30)의 처리와 블록간 전송을 병렬로 실행 가능하며, 필요한 처리 사이클수를 삭감할 수 있다. 또한, 리드 전송에 관해서는, 1세트의 슬레이브 D 레지스터(342)와 슬레이브 S 레지스터(343)만 갖기 때문에, 리드 처리 실행 중에는, 다음의 리드 커맨드 수탁을 금지하고, 시프트형 버스(50) 상에서 종단을 행하지 않는다. 시프트형 버스(50)는, 루프 형상을 하고 있고, 본 리드 커맨드가 시프트형 버스(50)를 일주한 시점에서, 리드 커맨드를 수탁함으로써, 리드 커맨드의 재기동을 가능하게 한다. 블록간의 데이터 전송의 대부분을 라이트 모드로 행하고, 리드의 발생 빈도를 억제함으로써, 이 성능 저하를 저감 가능하다. 영상 처리는, 데이터 플로우적인 동작이 많고, 블록간 전송은, 라이트 모드의 사용이 대부분으로 되기 때문에, 본 방식은 성능 저하를 억지할 수 있다.
로컬 DMAC(34)에 의한 전송에서는, 시프트형 버스(50)에 대하여, "Last" 신호를 출력할 수 있다. 이것은, 마스터 D 레지스터(340) 혹은 슬레이브 D 레지스터(342) 내의 Last 필드가 "1"인 전송 시, 2차원 직사각형의 전송의 최후의 전송 시에, 1 사이클만 어서트한다. 이에 의해, 대상으로 하는 다이렉트 메모리 전송이 종료하였는지 인식 가능하게 된다. 이것은, 후술하는 블록간 동기 시에 사용한다.
도 13을 이용하여, 제1 실시예에서의 데이터 패스부(36)의 설명을 행한다. 도 13은 데이터 패스부(36)의 블록도이다. 데이터 패스부(36)는, 시프트형 버스(50)과, 명령 메모리 제어부(32)와 데이터 패스부(33)와 로컬 DMAC(34) 사이의 데이터 주고 받기를 행하는 블록이다. 우선, 시프트형 버스부(50)로부터의 데이터 입력에 대하여 설명한다. 우회전 시프트형 버스의 입력인 신호선군(51a)과 좌회전 시프트형 버스의 입력인 신호선군(51c)은, 명령 메모리(31)에의 기입 패스인 패스(42)와, 데이터 메모리(35)에의 기입 패스로, 그 중 어드레스인 패스(43a)와 데이터인 패스(43d), 및 로컬 DMAC(34) 내의 슬레이브 D 레지스터(342)와 슬레이브 S 레지스터(343)에의 기입 패스인 패스(44sw)에 접속된다. 시프트형 버스(50)에의 데이터 출력인 신호선군(51b)은, 2개의 블록으로부터 입력되고, 1개는 데이터 메모리(35)로부터의 리드 데이터(43r)이며, 2개째는, 로컬 DMAC(34)로부터의 출력인, 마스터 D 레지스터(340)와 마스터 S 레지스터(341)의 직접 출력 신호(44swb)와, 시프트형 버스(50)에의 출력 어드레스(44sa)이다. 이들은, 배타적으로 처리되며, 시프트형 버스(50)의 프로토콜로써 제어된다. 또한, 로컬 DMAC(34)가 데이터 메모리(35)를 읽어내기 위한 어드레스(44da)는, 데이터 메모리 제어부(33)의 어드레스(43p)에 접속된다.
이와 같이, 제1 실시예에 따르면, 명령 메모리(31)의 액세스 빈도 삭감과, 각 블록에의 클럭 공급 정지 등에 의해, 소비 전력을 삭감 가능하다. 또한, 분기 명령에 은폐나, 로컬 DMAC(34)와의 병렬 동작 등에 의해, 실질적으로 처리 사이클수를 삭감하여, 저전력화를 실현한다.
(제2 실시예)
도 14를 이용하여, 본 발명의 제2 실시예에 대하여 설명한다. 도 14는, 본 실시예에서의 영상 처리 엔진(66)의 블록도이다. 도 6에 도시한, 제1 실시예의 영상 처리 엔진(66)에 대하여, 3개의 차분이 있다. 1개째는, CPU부(30)의 입력 데이터(30i)와 연산 데이터(30wb)가, 벡터 연산부(46)에 접속된 것이다. 입력 데이터(30i)는, CPU부(30) 내의 레지스터 파일(304)에 입력하는 데이터로서, 레지스터 파일(304)의 데이터를 갱신 가능하다. 연산 데이터(30wb)는, CPU부(30)의 연산 결과로서, 벡터 연산부(46)에 입력된다. 2개째는, 도 6의 명령 메모리 제어부(32)에 대해, 명령 메모리 제어부(47)가 접속된다. 명령 메모리 제어부(47)는, 복수의 프로그램 카운터를 갖고, 명령 메모리(31)의 제어를 행한다. 이것에 수반하여, 3개째의 차분은, 벡터 연산부(46)가, 명령 메모리 제어부(47)에 패스(37)를 통하여 접속된다.
도 15에, 제2 실시예에서의 벡터 연산부(46)의 블록도를 도시한다. 벡터 연산부(46)의 기능은, 도 8에서 도시한 CPU부(30)에 대하여, 데이터 메모리(35)에 대한 액세스를 할 수 없는 점이다. 인터페이스의 차는, 패스(38), 패스(39), 패스(45)가 존재하지 않는다. 또한, 연산부(463)는, 도 8의 연산부(313)와 동일 구성, 혹은, 명령 세트가 상이해도 된다. 벡터 연산부(46)의 연산 내용에 대해서는, 도 21 내지 도 26을 이용하여 후술한다.
도 16에 명령 메모리 제어부(47)의 블록도를 도시한다. 명령 메모리 제어부(47)와 도 10에 도시한 명령 메모리 제어부(32)의 차는 2개이다. 1개째는, 조정부(470)에서, CPU부(30)와 벡터 연산부(46)로부터의 2개의 명령 페치 요구(37r)를 수탁하고, 조정한다. 조정 결과(471)는, 벡터 연산부(46)용의 프로그램 카운터(472)에 입력된다. 또한, 셀렉터(475)를 제어하여, 명령 메모리(31)를 액세스하기 위한 어드레스 등의 제어선(40c)을 출력한다. 이와 같이, 명령 메모리(31)로부터는 2개의 CPU의 명령열이 저장되고, 명령 메모리(31)를 공유하는 것이 가능하다. 제1 실시예의 설명에서, 본 방식에서는, 명령 페치의 발행 간격을 크게 할 수 있다고 설명하였다. 따라서, 복수의 CPU가 공유의 명령 메모리(31)를 액세스한 경우에도, 액세스 경합이 발생하는 빈도는 낮아, 성능 저하를 억지 가능하다. 2개째의 차분은, 동기 제어부(473)이다. 동기 제어부(473)는, CPU부(30)와 벡터 연산부(46)의 동기 처리를 행하는 블록으로, 각 CPU에 대한 스톨 신호(474)를 생성한다.
도 14 및 도 15의 설명에서, CPU부(30)와 벡터 연산부(46)의 연산 결과는, 다른 쪽의 레지스터 파일(304과 462)에 저장 가능하다고 설명하였다. 동기 제어는, 2개의 방식이 있으며, 1개는, 입력 데이터의 준비가 되어 있는지를 나타내는 동기화이다. 예를 들면, CPU부(30)의 연산 데이터(30wb)가 유효하게 된 시점에서, 벡터 연산부(46)는, 그 연산 데이터(30wb)를 사용 가능하게 된다. 따라서, 연산 데이터(30wb)가 유효로 될 때까지, 벡터 연산부(46)는 스톨해야만 한다. 이것을 입력 동기로 한다. 2개째는, 기입처의 레지스터 파일이, 기입 가능 상태인지를 아는 동기화이다. 예를 들면, 벡터 연산부(46)의 레지스터 파일(462)이 기입 가능하게 될 때까지, CPU부(30)는 스톨해야만 한다. 이것을 출력 동기로 한다.
또한, 다른 영상 처리 엔진(6)으로부터, 로컬 DMAC(34)를 사용하여, 데이터 메모리(35)에 데이터를 다이렉트 메모리 전송하고, 본 전송 데이터를 CPU부(30)가 읽어내는 경우, 그 다이렉트 메모리 전송이 종료하고 있는 것을 인식해야만 한다. 데이터 전송이 종료하고 있지 않은 경우, CPU부(30)는 스톨한다. 이것을 블록간 동기라고 부른다. 또한, 블록간 동기에 대해서는, 제1 실시예에서도 사용 가능하지만, 이 제2 실시예에서만 설명을 행한다. 동기 제어부(473)는, 이들 3개의 동기화 처리를 행한다. 다음으로, 동기 제어 방식에 대하여 설명한다. 동기 제어에는, CPU마다 배치되는 4개의 카운터와, 블록에 1페어로 배치되는 2개의 카운터와, 명령 상에 정의된 5개의 플래그에 의해 동기화를 행한다. 표 16에 카운터의 정의를 나타낸다. 또한, 표 17에 명령 내에 배치하는 동기화 필드의 정의를 나타낸다.
동기화 카운터의 정의
카운터명 내용
SRC(슬레이브 요구수 카운터) 입력 동기를 행한 횟수를 카운트하는 카운터.
ERC(실행 레디 카운터) 후단 CPU가 사용하는 데이터가 준비 가능하게 되었을 때에 카운트업하는 카운터.
MRC(마스터 요구수 카운터) 출력 동기를 행한 횟수를 카운트하는 카운터.
RFRC(레지스터 파일 레디 카운터) 레지스터 파일에 몇 개의 빈 곳이 있는지를 나타내는 카운터.
DARC(데이터 메모리 액세스 요구수 카운터) 블록간 동기를 행한 횟수를 카운트하는 카운터.
DMRC(데이터 메모리 레디 카운터) 다른 엔진으로부터 데이터 메모리(35)에 대해 다이렉트 메모리 액세스에 의한 라이트를 행한 횟수를 카운트하는 카운터.
명령 내의 동기화 필드
필드 필드의 의미
ISYNC(입력 동기 인에이블 플래그) 입력 동기가 필요한 명령에서 본 필드가 "1"인 경우, 입력 동기 처리를 행한다. 본 필드가 "0"인 경우, 입력 동기를 행하지 않고, 명령을 실행한다. 입력 동기에서, 실행 가능하게 된 시점에서, 슬레이브 요구수 카운터 SRC를 카운트업한다.
DRE(데이터 레디 인에이블 플래그) 본 필드가 "1"인 경우, 명령 실행 종료 시점에서, 다음단 블록에 배치된 실행 레디 카운터 ERC를 카운트업한다.
OSYNC(출력 동기 인에이블 플래그) 출력 동기가 필요한 명령에서 본 필드가 "1"인 경우, 출력 동기 처리를 행한다. 본 필드가 "0"인 경우, 출력 동기를 행하지 않고, 명령을 실행한다. 출력 동기를 필요로 하는 명령이 종료 시점에서, 마스터 요구수 카운터 MRC를 카운트업한다.
RFR(레지스터 파일 레디 플래그) 본 필드가 "1"인 경우, 명령 종료 시점에서, 전단 블록에 배치된, 자신 블록의 레지스터 파일에 빈 곳이 몇 개 있는지를 카운트하는 레지스터 파일 레디 카운터를 카운트업한다.
MSYNC 정보 처리 엔지간의 블록 동기 처리를 제어하는 필드에서 리드 명령만 본 필드를 갖는다. 본 필드가 "1"인 경우, 정보 처리 엔진간의 동기 처리를 행한다. 블록간 동기에서, 본 리드 명령이 실행 가능하게 된 시점에서, 데이터 액세스 요구수 카운터 DARC를 카운트업한다.
우선, 도 17을 이용하여, 입력 동기에 대하여 설명한다. CPU부(30)의 연산 데이터(30wb)가 유효하게 된 시점에서, 벡터 연산부(46)는, 그 연산 데이터(30wb)를 사용 가능하게 된다. 따라서, 연산 데이터(30wb)가 유효로 될 때까지, 벡터 연산부(46)는 스톨할 필요가 있다. CPU부(30)의 명령에서, DRE 필드가 1인 명령이 종료 시점에서, 벡터 연산부(46) 내의 실행 레디 카운터 ERC〔벡터 연산부(46)〕를 카운트업한다. 본 명령에서, 연산 데이터(30wb)를 벡터 연산부(46)에 저장하고, 본 명령 종료 시점에서, 벡터 연산기(46)는, 데이터(30wb)를 사용한 연산이 가능하게 된다. 지금까지 벡터 연산기(46)에서의, ISYNC를 가진 명령은 스톨한다. 본 스톨 조건은, ERC〔벡터 연산부(46)〕가 SRC〔벡터 연산부(46)〕보다도 작거나 동일할 때로, ISYNC를 가진 명령 시이다. 앞의 실행 레디 카운터 ERC〔벡터 연산부(46)〕가 카운트업된 시점에서, 실행 레디 카운터 ERC〔벡터 연산부(46)〕는 슬레이브 요구수 카운터 SRC〔벡터 연산부(46)〕보다도 커진다. 이 시점에서, 벡터 연산기(46)는, 스톨을 해제하고 연산을 스타트할 수 있다. 동시에 슬레이브 요구수 카운터 SRC〔벡터 연산부(46)〕를 카운트업한다. 이 2개의 카운터의 갱신 1세트에서, 1개의 입력 동기를 행한다.
또한, 벡터 연산기(46)의 처리 속도가 느리고, SRC와 ERC의 카운트업에 괴리가 있었던 경우에도, CPU부(30)에 의한 연산 데이터(30wb)의 준비, 즉, 실행 레디 카운터 ERC의 카운트업은 가능하며, 데이터의 프리 페치로서 동작 가능하다.
마찬가지로, 벡터 연산기(46)가 생성한 연산 데이터(30i)를 CPU부(30)가 사용하는 경우에는, 앞의 설명과는 반대로, 벡터 연산기(46)의 명령에서, DRE 필드를 사용하고, CPU부(30)의 명령에서 ISYNC 필드를 사용하며, CPU부(30) 내에 배치된 실행 레디 카운터 ERC〔CPU부(30)〕와 슬레이브 요구수 카운터 SRC〔CPU부(30)〕에 의해, 입력 동기가 가능하게 된다. 또한, 여기서는, 실행 레디 카운터 ERC와 슬레이브 요구수 카운터 SRC를 사용한 입력 동기에 대하여 설명하였지만, 1비트폭의 플래그이어도 가능하다. 예를 들면, 실행 레디 카운터 ERC의 갱신 조건으로 플래그를 세트한다. 본 플래그와 연산 데이터의 수신측의 CPU 명령의 ISYNC 플래그가 모두 1로 될 때까지, 2개의 CPU는 스톨한다. 스톨 해제 시점에서, 플래그를 클리어함으로써, 적은 논리 회로로, 2개의 CPU간의 동기화를 가능하게 한다.
다음으로, 도 18을 사용하여, 출력 동기에 대하여 설명한다. 출력 동기도 입력 동기와 마찬가지로 2개의 카운터와 2개의 명령 내에서 정의하는 동기 필드에 의해 동기화를 행한다. 출력 동기는, 기입처의 레지스터 파일이, 기입 가능 상태인지를 아는 동기화로서, 예를 들면, 벡터 연산부(46)의 레지스터 파일(462)이 기입 가능하게 될 때까지, CPU부(30)는 스톨해야만 한다. 입력 동기는, 후단 CPU의 스톨이었던 것에 대해, 출력 동기는 전단 CPU의 스톨이다.
본 예의 동작에서는, 벡터 연산기(46)의 명령에서, RFR 필드가 1로 세트된 명령이 종료한 시점에서, 벡터 연산기(46)의 레지스터 파일(462)에 대하여, CPU부(30)로부터 기입 가능하게 한다. 이 RFR 필드가 1로 세트된 명령이 종료한 시점에서, CPU부(30)의 레지스터 파일 레디 카운터 RFRC〔CPU부〕를 카운트업한다. 지금까지, CPU(30)부의 OSYNC가 세트된 명령은 기동 요구 시점에서 스톨한다. 본 스톨 조건은, 레지스터 파일 레디 카운터 RFRC〔CPU부〕의 값이, 마스터 요구수 카운터 MRC〔CPU부〕보다도 작거나 동일할 때이다. CPU부(30)의 OSYNC가 세트된 명령을 기동 수탁 시점에서, 마스터 요구수 카운터 MRC〔CPU부〕를 카운트업한다. 본 방식도 입력 동기와 마찬가지로, 전단 CPU의 처리가 매우 느리고, 후단 CPU의 처리가 빠른 경우, 레지스터 파일의 빈 용량을 많이 비우는 것이 가능하다. 이 경우, 전단 CPU의 출력 동기 시에는 스톨이 발생하지 않는다. 마찬가지로, CPU부(30)의 레지스터 파일(304)이 기입 가능하게 될 때까지, 벡터 연산부(46)는 스톨하는 출력 동기에서는, 벡터 연산부(46)가 OSYNC를 사용하고, CPU부(30)가 RFR 필드를 세트함으로써, 2CPU간의 출력 동기를 실현한다. 이들 입력 동기와 출력 동기의 조합에 의해, 2개의 CPU간의 레지스터 파일 레벨의 세립도의 동기화를 실현한다. 이들 동기화 방식에서는, 명령 자신에 동기화 필드를 갖는 것이 특징이다.
마지막으로, 도 19를 이용하여, 블록간 동기에 대하여 설명한다. 블록간 동기란, 다른 정보 처리 엔진(6) 등이, 다이렉트 메모리 전송에 의해, 데이터 메모리(35)에 데이터를 저장하고, 본 전송 데이터를 CPU부(30)에 의한 리드 명령에서 사용할 때의 동기화이다. CPU부(30)는, 다이렉트 메모리 전송이 종료하고, 모든 데이터가 데이터 메모리(35) 내에 저장되어 있는 것을 인식할 필요가 있으며, 저장되어 있지 않은 경우, 입력 데이터는 무효인 값으로 되기 때문에, 스톨해야만 한다. 즉, 리드 명령 시에서, 그 리드 명령이 실행 가능한지의 여부를 조사하기 위해, 앞에 나타낸, 입력 동기와 거의 마찬가지의 방식으로 동기화를 행한다. 즉, 2개의 카운터의 대소 비교에 의해 동기화를 행한다. 1개째의 카운터는, 데이터 메모리 레디 카운터 DMRC로서, 앞에 나타낸 시프트형 버스(50)의 전송에서, "Last" 신호를 수반하는 전송으로 카운트업하는 카운터이다. 이것은 로컬 DMAC(34)의 마스터 D 레지스터(340)의 "Last" 플래그의 설정에 의해, 다이렉트 메모리 전송의 최종 전송, 즉, 2차원 직사각형 전송의 최후의 전송 시점에서 어서트된다. 즉, 다이렉트 메모리 전송이 종료한 것을 인지 가능한 신호에서, 이것이 "1" 일 때에, 데이터 메모리 레디 카운터 DMRC를 카운트업한다. 즉, CPU부(30)로부터 본 경우, 데이터의 준비가 되어 있는 것을 나타낸다.
2개째의 카운터는, 데이터 메모리 액세스 카운터 DARC로서, 리드 명령의 오피코드 내에 배치된 MSYNC가 "1"인 명령이 실행 가능하게 된 시점에서 카운트업하는 카운터이다. 따라서, CPU부(30)가 리드를 실행 가능한 타이밍은, 데이터 메모리 레디 카운터 DMRC가 데이터 메모리 액세스 카운터 DARC보다도 클 때이다. 바꿔 말하면, 데이터 메모리 레디 카운터 DMRC가 데이터 메모리 액세스 카운터 DARC보다도 동일하거나 작은 경우, CPU부(30)는 스톨한다. 이와 같이, 리드 명령이라고 하는 명령 레벨에서, 블록간의 동기화를 가능하게 한다.
이와 같이, 제2 실시예에 따르면, 복수의 2차원의 오퍼랜드를 사용 가능한 CPU가 명령 메모리를 공유화한 경우에도, 명령의 발행 간격이 크기 때문에, 성능 저하를 억지 가능함과 함께, 명령 메모리의 공유화에 의한 메모리 면적의 삭감이 가능하다. 또한, CPU부(30)에서, 데이터 메모리(35)에의 리드와 라이트 처리, 및 벡터 연산기(46)에서, 연산 처리를 행하고, 동기 수단에서 2개의 CPU간의 레지스터 파일 레벨의 동기화에 의해, 연산 스루풋을 향상할 수 있다. 또한, 명령 레벨에서, 블록간의 동기화를 실현한다.
(제3 실시예)
도 20을 이용하여, 제3 실시예에 대하여 설명한다. 도 20은, 본 실시예에서의 영상 처리 엔진(66) 내에 배치되는 CPU부의 구성이다. 제1 실시예에서는, 1개의 CPU부(30)로 구성하고, 제2 실시예에서는, CPU부(30)와 벡터 연산부(46)의 2개의 CPU에 의한 구성으로 설명하였다. 제3 실시예에서는, 2개 이상의 복수의 CPU를 직렬 또한 링형으로 접속하는 것이다. 도 3에서는, 선두의 CPU에, 데이터 메모리(35)에의 액세스가 가능한 CPU부(30)를 배치하고, 복수의 벡터 연산부(46, 46n)를 직렬 접속하고, 종단에 데이터 메모리(35)에의 액세스가 가능한 CPU부(30s)를 접속한다. CPU부(30s)의 연산 데이터(30i)는, 재차, CPU부(30)의 입력 데이터부에 접속된다. 이 때, 각 CPU는 각각 프로그램 카운터를 갖는 구성으로 되고, 실제로는 도 16에서 도시한 명령 메모리 제어부(47) 내의 프로그램 카운터를 복수 갖는 구성으로 된다. 조정부(470)는, 복수의 명령 페치 요구(37r)로부터, 명령 페치의 선택을 행한다.
또한, 동기화 처리에 대해서도, 제어가 상이하다. 제2 실시예의 설명에서는, 2개의 인접하는 CPU간의 입력 동기 방식과 출력 동기화 방식에 대하여 설명하였다. 제3 실시예에서도 마찬가지의 동기화 처리를 행한다. 즉, 인접하는 CPU끼리에서, 입력 동기와 출력 동기를 행하는 것이다. 또한, 최종단의 CPU부(30s)와 초단의 CPU(30) 사이에서도, 동기화를 행한다. 또한, CPU부(30)와 CPU부(30s)는 모두 데이터 메모리(35)를 액세스한다. 따라서, 도 11에서 도시한 데이터 메모리 제어부(33)도, 복수의 데이터 메모리 액세스를 제어한다. 본 방식에 따르면, CPU부(30)에서, 데이터 메모리(35)로부터의 데이터 읽어들이기를 행하고, 벡터 연산부(46)에 전송한다. 벡터 연산기(46)의 연산 결과를 벡터 연산기(46n)에 전송하고, 벡터 연산기(46n)는, 다음의 처리를 행하고, CPU부(30s)에 연산 데이터를 전송한다. CPU부(30s)는, 연산 결과를 데이터 메모리(35)에 전송함으로써, 데이터의 리드, 연산, 데이터의 저장이 파이프라인에서 동작하여, 높은 연산 스루풋을 얻을 수 있다. 특히 데이터 메모리(35)를 인터리브 구성으로 하고, 리드 명령과 라이트 명령, 및 다이렉트 메모리 액세스의 블록을 분할함으로써, 높은 스루풋을 얻는 것이 가능하다.
또한 본 방식에 따르면, 2개 이상의 CPU를 직렬 또한 링적으로 접속한 구성에서도, CPU간의 동기화를 수반하는 멀티 CPU 구성을 실현한다. 또한, CPU수가 늘어난 경우에도, 레지스터 파일의 리드 라이트 포트수는 증가하지 않아, 네트워크나 레지스터 파일의 면적을 증가시키지 않는다. 예를 들면, 상게한 특허 문헌 3에 개시된 VLIW 구성 등에 의한 CPU수의 증가에서는, 연산기수에 비례하여, 레지스터의 포트수가 증가하고, 면적 코스트가 커지는 것에 대해, 본 방식의 직렬 접속에서는, 이것이 증가하지 않는다.
또한, VLIW 방식에서는, 복수의 연산기가 활성하는 타이밍이 상이하다. 예를 들면, 동일 연산 루프 내에서, 1개의 연산기는 메모리 리드를 행하고, 2개째의 연산기는, 범용 연산을 행하고, 3개째의 연산기가 메모리 라이트하는 예를 생각한다. 이 때, 각각의 CPU가 실제로 동작하는 연산 사이클수는 상이하지만, 동일 연산 루프에서 처리가 이루어지기 때문에, 연산기의 가동률이 저하하고, 그 결과, 필요 처리 사이클수가 증가하여, 소비 전력이 증가한다. 한편, 본 방식에서는, 각 CPU가 각각 프로그램 카운터를 갖는 것이 가능하며, 다른 CPU의 동작 및 프로그램 카운터의 동작에 의존하지 않고, 각자의 연산을 처리할 수 있다. 예를 들면, 10회의 루프 중, 5회째 6회째 사이에, 1개의 파라미터를 변경하는 경우, VLIW 방식에서는, 5회씩의 2루프로 명령열을 기술할 필요가 있지만, 본 방식에서는, 각각 프로그램 카운터를 가짐으로써, 파라미터 변경을 행하는 CPU만 2개의 루프로 명령열을 지정 가능하며, 연산 가동률을 향상 가능함과 동시에, 사용하는 명령 메모리(31)의 용량을 삭감할 수 있다.
다음으로, 명령의 오퍼랜드에 Width 필드와 Count 필드에 의한 2차원 오퍼랜드 지정 방식에 대해서, 그 실시예를 설명한다. 지금까지, 2차원 오퍼랜드 지정에 의해, 명령수를 삭감하고, 명령 메모리(31)의 읽어내기 횟수 삭감에 의한 저전력화, 명령 메모리(31)의 용량 삭감에 의한 저전력화와 면적 코스트 삭감에 대하여 설명하였다. 그 외에, 처리 사이클수 삭감에 의한, 저전력화도 실현할 수 있다. 여기서는, 내적 연산과 컨볼루션 연산을 이용하여, 그 실시예에 대하여 설명한다.
내적 연산은, 화상 코덱이나 화상 필터 등에 사용되는 범용적인 화상 처리의 1개이다. 여기서는, 4×4 행렬의 내적 연산을 예로 하여 설명을 행한다. 본 내적 연산예를 도 21에 도시한다. 도면이 도시하는 바와 같이, 4×4 행렬의 내적 연산의 1개의 데이터 출력은, 승산을 4회 실행하고, 그들 연산 결과를 가산한 값이다. 본 연산을 4×4 행렬로 하여, 16요소에 대하여, 마찬가지의 연산을 행하는 것이다. 본 예에서의 설명에서는, 각 데이터 요소의 사이즈를 16비트(2바이트)로 하고, 64비트폭 연산기에서 연산하는 것으로 한다. 또한, 벡터 연산기(46)의 레지스터 파일(462) 내의 레지스터에는, 행렬 A와 행렬 B가 이하와 같이 저장되어 있는 것으로 하고, 연산 결과는, 레지스터(8, 9, 10, 11)에 저장하는 것으로 한다.
레지스터 0:{A00, A10, A20, A30}
레지스터 1:{A01, A11, A21, A31}
레지스터 2:{A02, A12, A22, A32}
레지스터 3:{A03, A13, A23, A33}
레지스터 4:{B00, B10, B20, B30}
레지스터 5:{B01, B11, B21, B31}
레지스터 6:{B02, B12, B22, B32}
레지스터 7:{B03, B13, B23, B33}
이와 같이, 2차원 내적 연산에서는, 연산의 입력에 복수의 레지스터를 사용하는 것이 특징이다. 도 22에 도시하는 일반적인 1 사이클에 1명령을 발행하는 4병렬의 SIMD형 연산기에서는, 이하와 같은 명령열로 처리된다. 또한, 행렬 A는, 하기와 같이 전치된 값이 저장되어 있는 것으로 한다.
레지스터 0:{A00, A01, A02, A03}
레지스터 1:{A10, A11, A12, A13}
레지스터 2:{A20, A21, A22, A23}
레지스터 3:{A30, A31, A32, A33}
명령1:Src1(레지스터 0), Src2(레지스터 4), Dest(레지스터 8[0])로 하는, 곱합 연산.
명령2:Src1(레지스터 0), Src2(레지스터 5), Dest(레지스터 8[1])로 하는, 곱합 연산.
명령3:Src1(레지스터 0), Src2(레지스터 6), Dest(레지스터 8[2])로 하는, 곱합 연산.
명령4:Src1(레지스터 0), Src2(레지스터 7), Dest(레지스터 8[3])로 하는, 곱합 연산.
이 4명령에서, 내적 연산에 제1행을 연산하고, Src1 레지스터를 변경함으로써, 4행분의 연산을 행한다. 따라서, 합계 16명령을 16 사이클 곱하여 연산한다. 또한, 전처리로서, 행렬 A의 전치가 필요로 된다. 따라서, 실질적으로 필요 사이클수가 16 사이클보다도 크다.
한편, 2차원 오퍼랜드를 지정 가능한 본 실시예에서는, 도 23에 도시하는 연산기 구성을 취한다. 도 22에 도시한 SIMD형의 연산기와 비교하여, Src2 입력의 전단에 셀렉터(609)를 배치하고, Src2와 Src2[0]의 값을 선택 입력한다. 또한, 연산 1 사이클마다, 패스(610)를 사용하여, Src2의 값을 좌측 시프트한다. 또한 승산기(600)의 연산 결과를 저장하는 레지스터(601)의 출력은, 시그마 가산기(607)에 입력되고, 시그마 가산기(607)의 연산 결과는 레지스터(608)에 저장된다. 시그마 가산기(607)는, 레지스터(601)의 결과와 레지스터(608)의 결과를 순차적으로 시그마 가산하는 연산기이다. 본 예에서는, 4 사이클분의 승산 결과를 시그마 가산하고, 사사오입을 행하여, Dest로서 연산 결과를 얻는다.
도 21의 내적 연산예의 연산 결과의 제1행째에 주목한다. 행렬 B에 관해서는, 16요소의 데이터 입력이 필요한 것에 대해, 행렬 A의 입력은, A00, A10, A20, A30에서, 레지스터 0에 저장된 값뿐이다. 또한 제1 요소의 승산에 관해서는, 모두 A00이 입력된다. 본 연산의 처리예를 도 23에 도시하는 연산기에서 실현한다. Src1에는 행렬 B, 즉 레지스터 4를 설정하고, Src2에는 행렬 A, 즉 레지스터 0을 설정한다. Src1 측은, 클럭이 공급될 때마다, 레지스터 4, 레지스터 5, 레지스터 6, 레지스터 7, 다시 레지스터 4의 순으로 공급한다. Src2 측은, 1 사이클째에 레지스터 0을 입력하고, 2, 3, 4 사이클째는, 패스(610)를 사용하여 좌측 시프트한다. 이 때 셀렉터(609)는, Src2[0] 데이터를 선택한다. 이에 의해, Src2 출력은, 1 사이클째는 A00으로 되고, 2 사이클째는 A10으로 되고, 3 사이클째는 A20으로 되고, 4 사이클째는 A30으로 된다. 5 사이클째에는 레지스터 1을 공급하고, 6, 7, 8 사이클은 마찬가지로 시프트한다. 이러한 데이터 공급에 의해, 4 사이클에서 1행의 연산 결과를 얻을 수 있다. 이에 의해, 4 사이클에 1회, 연산 결과 Dest(606)가 생성되고, 이 타이밍에서, 레지스터 파일(462)을 갱신한다. 본 방식에 의해, 레지스터 파일(462)의 기입에 바이트 인에이블을 필요로 하지 않고, 레지스터 파일의 면적을 축소할 수 있음과 함께, 데이터의 전치를 필요로 하지 않고, 합계 16 사이클에서 내적 연산을 실현한다.
다음으로 전치 행렬에 대한 내적 연산에 대하여, 도 24의 내적 연산예를 이용하여 동작을 설명한다. 도 24에서는, 제1 행렬인 행렬 A를 전치한 경우의 내적이다. 여기서도, 연산 결과의 제1행째에 주목한다. 행렬 B에 관해서는, 16요소의 데이터 입력이 필요한 것에 대해, 행렬 A의 입력은, A00, A01, A02, A03에서, 레지스터 0으로부터 레지스터 3까지의 데이터 요소[0]에 저장된 값뿐이다. 본 연산에서는, 앞의 전치가 없는 내적 연산과 비교하여, Src2의 공급 방법을 변경함으로써, 제1 행렬이 전치의 내적 연산을 실현한다. 앞의 전치가 없는 행렬 연산에서는, 사이클 2, 3, 4시에 패스(610)를 이용하여, Src2를 시프트하여 데이터 공급한 것에 대해, 본 예에서는, 사이클 1에서는 레지스터 0을 사용하고, 사이클 2에서는 레지스터 1을 사용하고, 사이클 3에서는 레지스터 2를 사용하고, 사이클 4에서는 레지스터 3을 사용한다. 제1행의 내적에서는, 레지스터 0으로부터 3까지의 데이터 요소[0]을 사용하고, 제2행의 내적에서는 데이터 요소[1]를 사용하고, 제3행의 내적에서는 데이터 요소[2]를 사용하고, 제3행의 내적에서는 데이터 요소[3]를 사용한다. 본 방식에 의해, 이전에 설명한 Src2의 공급 방법만을 변경함으로써, 제1 행렬이 전치의 내적 연산을 실현한다. 이 때, 승산기 이후의 데이터 패스가 상이한 동작은 존재하지 않는다. 따라서, 일반적인 SIMD형 연산기에서는, 내적 연산 전의 전처리로서 전치가 필요로 되지만, 본 방식에서는 필요 없고, 처리 사이클수를 삭감할 수 있다.
또한, 제2 행렬만 전치의 행렬 연산에서는, Src1과 Src2의 입력은 전치를 수반하지 않는 내적과 마찬가지의 데이터 공급을 행하고, 연산기는 통상의 SIMD형 연산기와 마찬가지로, 1 사이클에서 4요소를 가산하는 구성으로 실현한다. 본 방식에서는, 시그마 가산기(607)의 입력에 레지스터(608)를 사용하지 않고, 4개의 레지스터(601)의 출력을 가산한다. 다음으로 컨볼루션 연산의 동작예에 대하여 설명한다. 컨볼루션 연산은, 화상의 로우 패스 필터나 하이패스 필터 등에 의한 필터링 처리나 엣지 강조 등에 사용된다. 또한, 화상 코덱의 움직임 보상 처리 등에서도 사용되는 연산이다. 컨볼루션 연산은, 내적 연산과 달리, 제2 행렬(컨볼루션 계수로 함)이 고정이고, 본 컨볼루션 계수를, 제1 행렬의 전체 데이터 요소에 대하여 연산하는 것이다. 도 25에 2차원의 컨볼루션 연산예를 도시한다. 도면이 도시하는 바와 같이, 출력 데이터의 전체 데이터 요소에는, 제2 배열의 컨볼루션 계수를 곱해져, 시그마 가산한 것이다.
이것을 실현하는 연산기 구성의 일부를 도 26에 도시한다. 본 구성에서는, 도 23에서 도시한 내적 연산기 구성의 레지스터(601)의 입력 전까지의 구성을 설명하고 있다. 내적 연산기 구성과의 차이는, Src1도 마찬가지로, 패스(612)에 의한 시프트 레지스터 구성인 것이다. 컨볼루션 연산의 동작을 도시한다. 우선, 배열 A와 배열 B는, 이하에 기재하는 레지스터에 배치되어 있는 것으로 한다. 이 때, 배열 A의 1열째 내지 4열째의 데이터와 5열째의 데이터는 서로 다른 레지스터에 배치한다. 배열 B는 1개의 레지스터에 배치한다.
레지스터 0:{A00, A10, A20, A30}
레지스터 1:{A40, 없음, 없음, 없음}
레지스터 2:{A01, A11, A21, A31}
레지스터 3:{A41, 없음, 없음, 없음}
레지스터 4:{A02, A12, A22, A32}
레지스터 5:{A42, 없음, 없음, 없음}
레지스터 6:{A03, A13, A23, A33}
레지스터 7:{A43, 없음, 없음, 없음}
레지스터 8:{B00, B01, B10, B11}
Src1에는, 레지스터 0을 투입하고, Src2에는 레지스터 8을 투입한다. 이 때, Src2의 출력은 셀렉터(609)에 의해, Src2의 제1 데이터 요소가 투입된다. 즉, Src2[0], Src2[0], Src2[0], Src2[0]이다. 1 사이클째에서의, 4개의 승산기(600)의 출력은 이하와 같다.
1 사이클째:
600[0]출력:A00*B[00]
600[1]출력:A10*B[00]
600[2]출력:A20*B[00]
600[3]출력:A30*B[00]
2 사이클째에서는, Src1과 Src2 모두 패스(610과 612)를 사용하여 좌측 시프트한다. Src1은, 레지스터 1의 제1 데이터 요소인 A40을 Src1의 [3]에 투입한다. 그 결과, 4개의 승산기(600)의 출력은 이하로 된다.
2 사이클째:
600[0]출력:A10*B[01]
600[1]출력:A20*B[01]
600[2]출력:A30*B[01]
600[3]출력:A40*B[01]
3 사이클째에서는,
3 사이클째:Src2는 패스(612)를 사용하여 좌측 시프트한다. Src1은 읽어내기 레지스터 포인터를 갱신하고, 레지스터 2를 투입한다. 그 결과, 4개의 승산기(600)의 출력은 이하로 된다.
3 사이클째:
600[0]출력:A01*B[10]
600[1]출력:A11*B[10]
600[2]출력:A21*B[10]
600[3]출력:A31*B[10]
4 사이클째에서는, 2 사이클째와 마찬가지로, Src1과 Src2 모두 패스(610)와 패스(612)를 사용하여 좌측 시프트한다. 그 결과, 4개의 승산기(600)의 출력은 이하로 된다.
4 사이클째:
600[0]출력:A11*B[10]
600[1]출력:A21*B[10]
600[2]출력:A31*B[10]
600[3]출력:A41*B[10]
이 4 사이클분의 데이터를 시그마 가산기(607)에서 시그마 가산함으로써, 1행째의 컨볼루션 연산 결과를 얻는다. 5 사이클째에서는, 재차, Src1에 레지스터 2를 투입하고, Src2에는 다시 레지스터 8을 투입하고, 제2행째의 컨볼루션 연산을 행한다. 그 결과, 16 사이클에서, 4×4행렬의 컨볼루션 연산 결과를 얻는다.
또한, 이들 설명에서는, Src1과 Src2의 공급에 시프트 레지스터를 사용한다고 설명하였지만, 셀렉터를 사용한 데이터의 선택을 행하고, 마찬가지의 데이터 공급을 행함으로써, 마찬가지의 효과를 얻는다. 따라서, 데이터의 공급 수단이 특징이다.
도 22에 도시한 일반적인 SIMD형 연산기에서는, 수직 방향의 컨볼루션 연산은, 데이터 요소마다의 곱합 연산을 이용한다. 단, 4개의 곱합 연산을 종료한 시점에서, 데이터의 사사오입이 필요하기 때문에, 각 곱합 연산의 스테이지에서는, 8비트 데이터를 16비트 데이터로 비트 확장하여 곱합 연산을 행해야만 한다. 또한 4개의 곱합 연산이 종료한 시점에서, 재차, 16비트 데이터를 8비트 데이터로 사사오입한다. 곱합 연산 시에는, 비트 확장 때문에, 실질적으로 병렬 사용하는 연산기수가 반감되고, 처리 사이클수가 증가한다. 또한, 비트 확장 자신과 사사오입 자신의 연산 사이클수가 증가한다. 본 방식과 같이, 2차원 오퍼랜드를 지정함으로써, 처리 사이클수를 삭감할 수 있다.
한편, 도 22에 도시한 일반적인 SIMD형 연산기에 의한, 수평 방향의 컨볼루션 연산에서는, 데이터 요소를 생성할 때마다, 배열 A를 데이터 요소 단위로 시프트하여, 연산기에 투입해야만 하여, 처리 사이클수가 증가한다. 또한, 2차원의 컨볼루션에서는, 비트 확장, 시프트, 사사오입 등에 의해 처리 사이클수가 증가한다.
따라서, 본 방식과 같이 2차원의 오퍼랜드를 지정하는 것은, 복수의 소스 사용하는 명령을 1개의 명령으로 표현하는 것을 의미하며, 정말로 필요한 곱합 연산 이외의 전처리나 후처리를 포함시켜 처리 사이클을 삭감할 수 있다. 그 결과, 낮은 동작 주파수로 처리를 실현할 수 있어, 더욱 소비 전력을 삭감할 수 있다.
본 발명에 따르면, 프로세서에서 화상 처리를 행하는 경우의 저전력화 기술을 제공한다.

Claims (10)

  1. 명령 메모리와 데이터 메모리와 상기 명령 메모리에 저장된 명령에 따라 2차원 화상 데이터에 대응하는 연산을 행하는 CPU를 포함한 영상 처리 엔진으로서,
    상기 CPU는, 명령 디코더와 범용 레지스터와 연산기를 더 갖고,
    상기 CPU의 명령 오퍼랜드는, 상기 2차원 화상 데이터의 직사각형 영역의 데이터 폭 및 상기 2차원 화상 데이터의 직사각형 영역의 높이 방향을 나타내는 데이터 카운트 수를 지정하는 필드와, 연산 처리에 사용하는 데이터가 저장된 범용 레지스터의 기점을 나타내는 소스 레지스터 포인터와, 연산 결과를 저장하는 범용 레지스터의 기점을 나타내는 데스티네이션 레지스터 포인터를 갖고,
    상기 데이터 폭과 상기 데이터 카운트 수와 상기 소스 레지스터 포인터와 상기 데스티네이션 레지스터 포인터에 기초하여, 액세스하는 상기 소스 레지스터의 어드레스 및 상기 데스티네이션 레지스터의 어드레스를, 사이클마다, 순차적으로 생성하는 수단을 갖고,
    상기 소스 레지스터로부터 읽어내어진 데이터를 상기 연산기에 투입하여 연산을 실행하고, 얻어진 연산 결과를 순차적으로, 상기 데스티네이션 레지스터에 저장함으로써, 1개의 명령으로, 복수 사이클을 소비하여, 복수의 연산을 행하는 영상 처리 엔진.
  2. 제1항에 있어서,
    상기 CPU에서,
    상기 데이터 메모리에 대하여 리드 명령 및 라이트 명령을 발행하는 명령의 오퍼랜드가, 상기 2차원 화상 데이터의 직사각형 영역의 데이터 폭과 상기 2차원 화상 데이터의 직사각형 영역의 높이 방향을 나타내는 데이터 카운트 수와 상기 데이터 메모리를 2차원 화상 데이터로 하여 액세스하기 위한 데이터 간격을 지정하는 필드를 갖고,
    상기 데이터 메모리에의 액세스 시에, 상기 데이터 폭과 상기 데이터 카운트 수와 상기 데이터 간격으로부터, 2차원 직사각형을 표현 가능한 데이터 메모리 어드레스를 생성하고, 상기 데이터 메모리 어드레스를 이용하여, 1명령으로, 복수 사이클을 소비하여, 복수회에 걸쳐, 상기 데이터 메모리를 액세스함으로써, 2차원의 데이터를 1명령으로 액세스 가능한 영상 처리 엔진.
  3. 제1항에 있어서,
    상기 CPU에서, 상기 CPU가 발행하는 컨볼루션 연산 명령과 내적 연산 명령을 갖고,
    상기 소스 레지스터 포인터에 의해 지정되어 읽어내어진 소스 데이터를 입력하는 데이터 입력단에서, 공급하는 클럭마다 상기 소스 데이터를 시프트 출력하는 수단과, 컨볼루션 연산 및 내적 연산에 특화한 소스 레지스터 어드레스와 데스티네이션 레지스터 어드레스를 생성하는 수단을 갖고,
    상기 연산기는, 승산기와 시그마 가산기와 데이터 사사오입 연산기가 직렬 접속되고, 1차원 혹은 2차원의 상기 컨볼루션 연산, 및 상기 내적 연산을 1개의 명령으로 실행 가능한 영상 처리 엔진.
  4. 제1항에 있어서,
    상기 CPU에서, 상기 명령 메모리로부터 읽어낸 명령을 저장하는 명령 레지스터를 복수 세트 갖고,
    상기 명령 레지스터 모두가 유효하지 않은 경우, 자동적으로 다음의 명령 읽어내기를 행하는 수단을 갖고,
    상기 명령 읽어내기 시에, 읽어낸 명령이 분기 명령인 경우, 상기 분기 명령을 상기 명령 레지스터에 저장하지 않고, 분기처의 명령을 즉시 읽어내고, 상기 분기처의 명령을 상기 명령 레지스터에 저장하고, 상기 분기 명령의 오퍼랜드 중 1개에, 분기할지 하지 않을지를 지정하는 분기 조건 레지스터를 지정하는 필드를 갖고,
    상기 분기 명령 시에, 선택된 분기 조건 레지스터의 값에 의해, 분기할지 분기하지 않을지를 판정하는 수단을 갖고, 분기하지 않는 경우, 다음의 명령을 읽어내고, 상기 분기 명령을 명령 레지스터에는 저장하지 않고,
    상기 명령 메모리로부터의 명령 읽어내기를 매 사이클 행하지 않음으로써, 상기 분기 명령에 의한 명령의 재읽어내기에 필요한 사이클을 은폐하는 영상 처리 엔진.
  5. 제1항 내지 제3항 중 어느 한 항의 CPU를 포함하는 영상 처리 엔진으로서,
    상기 영상 처리 엔진은, 시프트형 버스를 통하여, 복수의 영상 처리 엔진과 링형으로 접속 가능하고,
    상기 영상 처리 엔진은, CPU의 연산 결과를 인접하는 영상 처리 엔진에 전송하는 수단을 갖는 것을 특징으로 하는 영상 처리 엔진.
  6. 제5항에 있어서,
    상기 CPU가 발행하는 명령의 오퍼랜드 중에, 상기 CPU의 다음단측의 CPU가 갖는 레지스터에 데이터를 저장하는 것이 가능한지의 여부를 확인하기 위한 제1 플래그를 갖고,
    상기 다음단측의 CPU가 발행하는 명령의 오퍼랜드 중에는, 전단의 CPU로부터의 데이터 기입이 수탁 가능한지의 여부를 나타내는 제2 플래그를 갖고,
    인접하는 2개의 CPU간에서, 상기 제1 및 제2 플래그에 의해 동기화를 행하는 회로를 갖고, 기입이 불가능한 경우, 전단 CPU는 스톨(stall)하는 수단을 갖고, 또한, 상기 CPU가 발행하는 명령의 오퍼랜드 중에, 전단의 CPU로부터 레지스터에 대하여 데이터 기입이 종료하고, 데이터가 사용 가능한지의 여부를 판단하기 위한 제3 플래그를 갖고, 전단의 CPU가 발행하는 명령의 오퍼랜드에는, 후단의 CPU에 데이터의 기입을 종료한 것을 전달하기 위한 제4 플래그를 갖고, 2개의 CPU간에서, 상기 제3 및 제4 플래그의 정보로부터, 동기화를 행하는 회로를 갖고, 데이터의 준비가 종료하지 않은 경우, 후단의 CPU를 대기시키기 위한 스톨 신호를 출력하는 수단을 갖고,
    명령의 오퍼랜드에 인접하는 2개의 CPU간의 동기화를 행하기 위한 플래그를 갖고, 이들 플래그와 함께, 동기화를 제어하는 회로를 갖는 영상 처리 엔진.
  7. 제5항에 있어서,
    상기 복수의 CPU는, 명령 메모리를 공유하고, 명령의 반송을 사이클마다 시분할로 행하는 영상 처리 엔진.
  8. 제1항 내지 제4항 중 어느 한 항의 영상 처리 엔진이, 시프트형 버스를 통하여 복수개 접속되어 영상 처리부를 구성하고, 상기 영상 처리부를 포함한 영상 처리 시스템으로서,
    상기 영상 처리 엔진의 각각에는, 상기 영상 처리 엔진의 하나가 갖는 데이터 메모리로부터 데이터를 읽어내고, 다른 1개의 영상 처리 엔진 내의 데이터 메모리에 대하여, 상기 데이터를 다이렉트 메모리 액세스 전송하는 다이렉트 메모리 액세스 컨트롤러를 갖고,
    상기 CPU는, 다이렉트 메모리 액세스 컨트롤러를 기동 및 제어하는 수단을 갖고, 복수의 영상 처리 엔진간에서 다이렉트 메모리 액세스에 의한 데이터 전송을 행하는 것이 가능한 영상 처리 시스템.
  9. 제8항에 있어서,
    상기 영상 처리부는, 해당 영상 처리 시스템의 시스템 버스 등의 내부 버스 사이에서 데이터 전송을 행하는 내부 버스 마스터 제어부와 내부 버스 슬레이브 제어부, 및 내부 버스 브릿지로 이루어지는 데이터 전송 회로를 갖고,
    상기 내부 버스 마스터 제어부와 내부 버스 슬레이브 제어부는, 상기 시프트형 버스에 접속되고,
    상기 시프트형 버스에 접속된 영상 처리 엔진은, 상기 데이터 전송 회로를 통하여, 상기 내부 버스에 접속된 외부 메모리 사이에서 데이터 전송을 가능하게 하는 영상 처리 시스템.
  10. 제9항에 있어서,
    상기 시프트형 버스는, 복수의 시프트 레지스터로 구성되고,
    상기 시프트 레지스터 간마다, 동시에 복수의 데이터 전송이 가능하며, 상기 시프트 레지스터의 접속 방향을 서로 반대로 하는 신호선으로, 상기 시프트 레지스터가 링형으로 접속됨과 함께,
    상기 시프트 레지스터마다, 영상 처리부의 공유 로컬 메모리와 영상 처리 엔진과 전용 하드웨어와 내부 버스 마스터 제어부와 내부 버스 슬레이브 제어부에 접속되는 영상 처리 시스템.
KR1020070034573A 2006-06-20 2007-04-09 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템 KR100888369B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JPJP-P-2006-00170382 2006-06-20
JP2006170382A JP4934356B2 (ja) 2006-06-20 2006-06-20 映像処理エンジンおよびそれを含む映像処理システム

Publications (2)

Publication Number Publication Date
KR20070120877A KR20070120877A (ko) 2007-12-26
KR100888369B1 true KR100888369B1 (ko) 2009-03-13

Family

ID=38862873

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020070034573A KR100888369B1 (ko) 2006-06-20 2007-04-09 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템

Country Status (4)

Country Link
US (1) US20070294514A1 (ko)
JP (1) JP4934356B2 (ko)
KR (1) KR100888369B1 (ko)
CN (1) CN100562892C (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100932667B1 (ko) * 2007-10-26 2009-12-21 숭실대학교산학협력단 적응적 비동기 파이프라인 구조의 h.264 디코더
CN101369345B (zh) * 2008-09-08 2011-01-05 北京航空航天大学 一种基于绘制状态的多属性对象绘制顺序优化方法
JP5100611B2 (ja) 2008-10-28 2012-12-19 株式会社東芝 画像処理装置
JP5488609B2 (ja) * 2009-03-30 2014-05-14 日本電気株式会社 リングバスによって相互接続された複数の処理要素を有する単一命令多重データ(simd)プロセッサ
JP5641878B2 (ja) 2010-10-29 2014-12-17 キヤノン株式会社 振動制御装置、リソグラフィー装置、および、物品の製造方法
JP2014186433A (ja) * 2013-03-22 2014-10-02 Mitsubishi Electric Corp 信号処理システム及び信号処理方法
CN104023243A (zh) * 2014-05-05 2014-09-03 北京君正集成电路股份有限公司 视频前处理方法和系统,视频后处理方法和系统
US20160125263A1 (en) * 2014-11-03 2016-05-05 Texas Instruments Incorporated Method to compute sliding window block sum using instruction based selective horizontal addition in vector processor
US9769356B2 (en) * 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
JP6712052B2 (ja) 2016-06-29 2020-06-17 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US10402527B2 (en) 2017-01-04 2019-09-03 Stmicroelectronics S.R.L. Reconfigurable interconnect
US10474600B2 (en) 2017-09-14 2019-11-12 Samsung Electronics Co., Ltd. Heterogeneous accelerator for highly efficient learning systems
CN108958801B (zh) * 2017-10-30 2021-06-25 上海寒武纪信息科技有限公司 神经网络处理器及使用处理器执行向量最大值指令的方法
WO2019127538A1 (zh) * 2017-12-29 2019-07-04 深圳市大疆创新科技有限公司 数据处理方法、设备、dma控制器及计算机可读存储介质
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
US20220197634A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Efficient divide and accumulate instruction when an operand is equal to or near a power of two
CN118069224B (zh) * 2024-04-19 2024-08-16 芯来智融半导体科技(上海)有限公司 地址生成方法、装置、计算机设备和存储介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980703033A (ko) * 1995-03-17 1998-09-05 가나이 츠토무 프로세서
JP2003271361A (ja) 2002-03-18 2003-09-26 Ricoh Co Ltd 画像処理装置及び複合機

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3794984A (en) * 1971-10-14 1974-02-26 Raytheon Co Array processor for digital computers
JPS5039437A (ko) * 1973-08-10 1975-04-11
US4967340A (en) * 1985-06-12 1990-10-30 E-Systems, Inc. Adaptive processing system having an array of individually configurable processing components
JPH0740252B2 (ja) * 1986-03-08 1995-05-01 株式会社日立製作所 マルチプロセツサシステム
CA1320003C (en) * 1987-12-22 1993-07-06 Steven J. Frank Interconnection system for multiprocessor structure
US5119481A (en) * 1987-12-22 1992-06-02 Kendall Square Research Corporation Register bus multiprocessor system with shift
JPH04113444A (ja) * 1990-09-04 1992-04-14 Oki Electric Ind Co Ltd 双方向リングバス装置
US5991865A (en) * 1996-12-31 1999-11-23 Compaq Computer Corporation MPEG motion compensation using operand routing and performing add and divide in a single instruction
US6282634B1 (en) * 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
JP3869947B2 (ja) * 1998-08-04 2007-01-17 株式会社日立製作所 並列処理プロセッサ、および、並列処理方法
KR100331565B1 (ko) * 1999-12-17 2002-04-06 윤종용 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치
JP2001188675A (ja) * 1999-12-28 2001-07-10 Nec Eng Ltd データ転送装置
US6959378B2 (en) * 2000-11-06 2005-10-25 Broadcom Corporation Reconfigurable processing system and method
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US20040128475A1 (en) * 2002-12-31 2004-07-01 Gad Sheaffer Widely accessible processor register file and method for use

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR19980703033A (ko) * 1995-03-17 1998-09-05 가나이 츠토무 프로세서
JP2003271361A (ja) 2002-03-18 2003-09-26 Ricoh Co Ltd 画像処理装置及び複合機

Also Published As

Publication number Publication date
KR20070120877A (ko) 2007-12-26
JP4934356B2 (ja) 2012-05-16
CN100562892C (zh) 2009-11-25
JP2008003708A (ja) 2008-01-10
US20070294514A1 (en) 2007-12-20
CN101093577A (zh) 2007-12-26

Similar Documents

Publication Publication Date Title
KR100888369B1 (ko) 영상 처리 엔진 및 그것을 포함하는 영상 처리 시스템
US11921643B2 (en) Method and apparatus for dual multiplication units in a data path
US6289434B1 (en) Apparatus and method of implementing systems on silicon using dynamic-adaptive run-time reconfigurable circuits for processing multiple, independent data and control streams of varying rates
KR101061345B1 (ko) 비디오 처리
US6539467B1 (en) Microprocessor with non-aligned memory access
US5606520A (en) Address generator with controllable modulo power of two addressing capability
US10078551B2 (en) Streaming engine with error detection, correction and restart
US20110249744A1 (en) Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core
US9508112B2 (en) Multi-threaded GPU pipeline
US9594395B2 (en) Clock routing techniques
US10699366B1 (en) Techniques for ALU sharing between threads
TWI754310B (zh) 純函數語言神經網路加速器系統及電路
CN114830082A (zh) 从多个寄存器中选择的simd操作数排列
JP4906734B2 (ja) ビデオ処理
US20080010436A1 (en) Parallel data processing apparatus
KR100267092B1 (ko) 멀티미디어신호프로세서의단일명령다중데이터처리
EP1238343B1 (en) Digital signal processor having a plurality of independent dedicated processors
JP2003099249A (ja) データ処理装置
GB2348982A (en) Parallel data processing system
JP2000172628A (ja) データ転送装置
GB2394815A (en) Scheduling instruction streams in a SIMD array wherein a determination is made as to which stream has priority and that stream is transferred to the array
Uchiyama et al. Processor Cores
GB2348983A (en) Parallel data processing system
GB2348980A (en) Parallel data processing system with SIMD array
GB2348972A (en) Array controller for array of processing elements

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130227

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140220

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20150224

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160219

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170221

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180219

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee