KR101084806B1 - Video processing - Google Patents

Video processing Download PDF

Info

Publication number
KR101084806B1
KR101084806B1 KR1020117001766A KR20117001766A KR101084806B1 KR 101084806 B1 KR101084806 B1 KR 101084806B1 KR 1020117001766 A KR1020117001766 A KR 1020117001766A KR 20117001766 A KR20117001766 A KR 20117001766A KR 101084806 B1 KR101084806 B1 KR 101084806B1
Authority
KR
South Korea
Prior art keywords
execution unit
vector
scalar
memory
data
Prior art date
Application number
KR1020117001766A
Other languages
Korean (ko)
Other versions
KR20110011758A (en
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
Priority claimed from US11/267,599 external-priority patent/US8416251B2/en
Application filed by 엔비디아 코포레이션 filed Critical 엔비디아 코포레이션
Publication of KR20110011758A publication Critical patent/KR20110011758A/en
Application granted granted Critical
Publication of KR101084806B1 publication Critical patent/KR101084806B1/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/44Decoders specially adapted therefor, e.g. video decoders which are asymmetric with respect to the encoder
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression

Abstract

비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 설명된다. 스칼라 및 벡터 컴포넌트를 구비한 비디오 프로세서, 비디오 프로세서에서의 스트림 처리, 및 비디오 프로세서에서의 다차원 데이터 경로 처리도 설명된다.A delay tolerant system for performing video processing operations is described. A video processor with scalar and vector components, stream processing in the video processor, and multidimensional data path processing in the video processor are also described.

Description

비디오 처리{VIDEO PROCESSING}Video Processing {VIDEO PROCESSING}

본 발명은 디지털 전자 컴퓨터 시스템에 관한 것이다. 구체적으로는, 본 발명은 컴퓨터 시스템 상에서 비디오 정보를 효율적으로 처리하기 위한 시스템에 관한 것이다. 일 양태에서는, 비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 기술된다. 다른 양태에서는, 비디오 프로세서에서의 스트림 처리가 기술된다. 또한, 비디오 프로세서에서의 다차원 데이터 경로 처리가 기술된다. 스칼라 및 벡터 컴포넌트들을 구비한 비디오 프로세서도 기술된다.The present invention relates to a digital electronic computer system. Specifically, the present invention relates to a system for efficiently processing video information on a computer system. In one aspect, a delay tolerant system for performing video processing operations is described. In another aspect, stream processing in a video processor is described. Also described is multidimensional data path processing in a video processor. Also described is a video processor with scalar and vector components.

본 출원은 "비디오 처리 방법 및 시스템(A METHOD AND SYSTEM FOR VIDEO PROCESSING)"라는 명칭으로 가드레(Gadre) 등에 의해 2004년 11월 15일자로 출원된 미국 가출원 번호 제60/628,414호의 35 U.S.C. Section 119(e) 하의 이익을 청구하며, 이 가출원의 전체 내용은 본 명세서에 포함되어 있다.This application claims 35 U.S.C. Claims under Section 119 (e), the entire contents of this provisional application, are incorporated herein.

이미지 및 풀-모션 비디오의 디스플레이는 최근에 크게 발전하고 있는 전자 산업의 한 영역이다. 고품질 비디오, 특히 고선명도 디지털 비디오의 디스플레이 및 렌더링은 현대 비디오 기술 애플리케이션 및 장치의 주 목표이다. 비디오 기술은 셀룰러 전화, 개인용 비디오 레코더, 디지털 비디오 프로젝터, 고선명도 텔레비젼 등의 다양한 제품에 이용된다. 고선명 비디오 생성 및 디스플레이가 가능한 장치들의 출현 및 성장 보급은 고도의 혁신 및 진보를 겪는 전자 산업의 한 영역이다. Display of images and full-motion video is an area of the electronics industry that has developed significantly in recent years. Display and rendering of high-quality video, especially high-definition digital video, is the main goal of modern video technology applications and devices. Video technology is used in a variety of products, including cellular telephones, personal video recorders, digital video projectors, and high definition televisions. The emergence and growth of devices capable of producing and displaying high definition video is an area of the electronics industry that is undergoing a high degree of innovation and progress.

많은 소비자 전자 타입 및 전문가 레벨 장치들로 보급되는 비디오 기술은 디스플레이를 위해 비디오 신호를 포맷 및/또는 향상시키기 위하여 하나 이상의 비디오 프로세서에 의존한다. 이것은 특히 디지털 비디오 애플리케이션에 대해 사실이다. 예를 들어, 하나 이상의 비디오 프로세서는 일반적인 셋톱 박스 내에 포함되고, HDTV 방송 신호를 디스플레이에 의해 이용 가능한 비디오 신호로 변환하는 데 이용된다. 이러한 변환은 예를 들어 비디오 신호가 트루 16x9(예를 들어, 와이드 스크린) 디스플레이 상의 적절한 디스플레이를 위해 비(non-) 16x9 비디오 이미지로부터 변환되는 스케일링을 포함한다. 하나 이상의 비디오 프로세서는, 비디오 신호가 홀수 및 짝수 스캔 라인들이 개별적으로 디스플레이되는 인터레이스 포맷에서 전체 프레임이 단일 스위프 내에 묘화되는 진행 포맷으로 변환되는 스캔 변환을 수행하는 데 이용될 수 있다. Video devices, which are prevalent in many consumer electronic and professional level devices, rely on one or more video processors to format and / or enhance the video signal for display. This is especially true for digital video applications. For example, one or more video processors are contained within a typical set top box and used to convert HDTV broadcast signals into video signals available by the display. Such conversion includes, for example, scaling in which the video signal is converted from a non-16x9 video image for proper display on a true 16x9 (eg, wide screen) display. One or more video processors may be used to perform a scan conversion in which the video signal is converted from an interlace format in which odd and even scan lines are displayed separately, to a progressive format in which the entire frame is drawn within a single sweep.

비디오 프로세서 애플리케이션의 추가 예는 예를 들어 비디오 신호가 압축 포맷(예를 들어, MPEG-2)으로 수신되고 디스플레이를 위해 압축 해제되고 포맷되는 신호 압축 해제를 포함한다. 또 하나의 예는 리인터레이싱 스캔 변환(re-interlacing scan conversion)인데, 이는 수신 디지털 비디오 신호를 DVI(Digital Visual Interface) 포맷에서 시장에 설치된 많은 수의 구식 텔레비젼 디스플레이와 호환 가능한 합성 비디오 포맷으로 변환하는 것을 포함한다. Further examples of video processor applications include, for example, signal decompression where a video signal is received in a compressed format (eg, MPEG-2) and decompressed and formatted for display. Another example is re-interlacing scan conversion, which converts an incoming digital video signal from a DVI (Digital Visual Interface) format to a composite video format that is compatible with many older television displays on the market. It involves doing.

보다 세련된 사용자들은 예를 들어 루프내/루프외 디블록킹 필터, 개량된 모션 적응 디인터레이싱, 인코딩 동작을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 서브-픽처 합성, 및 칼라 공간 변환, 조정, 픽셀 포인트 조작(예를 들어, 샤프닝, 히스토그램 조정 등) 및 다양한 비디오 표면 포맷 변환 지원 동작과 같은 프로세서-증폭기 동작들과 같은 보다 정교한 비디오 프로세서 기능들을 필요로 한다.More sophisticated users can find, for example, in-loop / out-loop deblocking filters, improved motion adaptive deinterlacing, input noise filtering for encoding operations, multiphase scaling / resampling, sub-picture synthesis, and color space conversion, adjustment, pixel point It requires more sophisticated video processor functions such as manipulation (e.g., sharpening, histogram adjustment, etc.) and processor-amplifier operations such as various video surface format conversion support operations.

이러한 정교한 비디오 프로세서 기능을 제공하는 것과 관련된 문제는 이러한 기능을 구현하기에 충분히 강력한 아키텍처를 가진 비디오 프로세서가 많은 타입의 장치에 포함되기에는 과도하게 비용이 많이 들 수 있다는 것이다. 비디오 처리 기능이 더 정교할수록, 이러한 기능을 구현하는 데 필요한 집적 회로는 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등의 면에서 더 비용이 증가할 것이다. The problem with providing these sophisticated video processor features is that video processors with architectures that are powerful enough to implement these features can be overly expensive to include in many types of devices. The more sophisticated the video processing capabilities, the more expensive the integrated circuits needed to achieve these capabilities will be in terms of silicon die area, transistor count, memory speed requirements, and so on.

따라서, 종래의 시스템 설계자들은 비디오 프로세서 성능과 비용에 관련하여 절충점을 찾아야만 했다. 수용 가능한 비용/성능 비를 갖는 것으로 널리 간주되는 종래의 비디오 프로세서는 종종 지연 제한(예를 들어, 비디오 떨림 또는 비디오 처리 애플리케이션의 기능 정지를 방지하기 위해) 및 연산 밀도(예를 들어, 다이(die) 제곱 밀리미터당 프로세서 연산 횟수) 면에서 거의 충분하지 못했었다. 더욱이, 종래의 비디오 프로세서들은 일반적으로, 비디오 장치가 다수의 비디오 스트림을 처리(예를 들어, 다수의 수신 스트림 및 발신 디스플레이 스트림의 동시 처리)할 것으로 예상되는 경우에서와 같이 선형 스케일링 성능 요건에 적합하지 않다. Thus, conventional system designers had to find a tradeoff in terms of video processor performance and cost. Conventional video processors, which are widely considered to have an acceptable cost / performance ratio, often have delay limitations (e.g., to prevent video shake or malfunction of video processing applications) and computational densities (e.g. dies). It was hardly enough in terms of the number of processor operations per square millimeter). Moreover, conventional video processors are generally suitable for linear scaling performance requirements, such as where a video device is expected to process multiple video streams (eg, simultaneous processing of multiple receive streams and outgoing display streams). Not.

따라서, 종래 기술의 한계를 극복하는 새로운 비디오 프로세서 시스템이 필요하다. 새로운 비디오 프로세서 시스템은 더욱 세련된 사용자들에 의해 기대되는 정교한 비디오 프로세서 기능들을 처리하기 위해 스케일링이 가능해야 하고, 높은 연산 밀도를 가져야 한다.Therefore, there is a need for a new video processor system that overcomes the limitations of the prior art. The new video processor system must be scalable and have high computational density to handle the sophisticated video processor functions expected by more sophisticated users.

본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새로운 비디오 프로세서 시스템을 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위해 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다. Embodiments of the present invention provide a new video processor system that supports sophisticated video processing functions while efficiently utilizing integrated circuit silicon die area, transistor count, memory speed requirements, and the like. Embodiments of the present invention maintain high computational density to process multiple video streams and are easily scalable.

일 실시예에서는, 비디오 프로세서에서 비디오 처리 동작들을 실행하기 위한 지연 감내 시스템이 구현된다. 이 시스템은 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스, 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 호스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작하는 것을 가능하게 하기 위한 커맨드 FIFO가 포함된다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고, 벡터 실행 유닛에 대한 데이터 및 명령을 데이터 저장 메모리 및 명령 캐시에 로딩하기 위한 DMA 엔진이 메모리 인터페이스 내에 구축된다. In one embodiment, a delay tolerant system for implementing video processing operations in a video processor is implemented. The system includes a host interface for implementing communication between the video processor and the host CPU, a scalar execution unit connected to the host interface, configured to execute a scalar video processing operation, and a vector connected to the hose and configured to execute vector video processing operation. An execution unit. A command FIFO is included to enable the vector execution unit to operate on a request drive basis by accessing the memory command FIFO. A memory interface is included for implementing communication between the video processor and the frame buffer memory. A DMA engine is built in the memory interface for implementing DMA transfers between a plurality of different memory locations and for loading data and instructions for the vector execution unit into the data storage memory and the instruction cache.

일 실시예에서, 벡터 실행 유닛은 요구 구동 기반으로 동작하기 위해 커맨드 FIFO를 액세스함으로써 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성된다. 요구 구동 기반은 상이한 메모리 위치들(예를 들어, 프레임 버퍼 메모리, 시스템 메모리, 캐시 메모리 등)에서 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성될 수 있다. 커맨드 FIFO는 벡터 실행 유닛의 기능 정지를 방지하기 위한 파이프라인 FIFO일 수 있다. In one embodiment, the vector execution unit is configured to operate asynchronously with respect to the scalar execution unit by accessing the command FIFO to operate on demand drive basis. The request drive base may be configured to hide delays in data transfer from the vector execution unit to the command FIFO at different memory locations (eg, frame buffer memory, system memory, cache memory, etc.). The command FIFO may be a pipeline FIFO to prevent the functioning of the vector execution unit.

일 실시예에서, 본 발명은 비디오 처리 동작을 실행하기 위한 비디오 프로세서로서 구현된다. 비디오 프로세서는 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스를 포함한다. 비디오 프로세서는 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스를 포함한다. 스칼라 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다. 비디오 프로세서는 독립형 비디오 프로세서 집적 회로이거나, GPU 집적 회로 내에 집적된 컴포넌트일 수 있다. In one embodiment, the present invention is implemented as a video processor for performing video processing operations. The video processor includes a host interface for implementing communication between the video processor and the host CPU. The video processor includes a memory interface for implementing communication between the video processor and the frame buffer memory. A scalar execution unit is coupled to the host interface and the memory interface and configured to execute a scalar video processing operation. The vector execution unit is coupled to the host interface and the memory interface and is configured to execute the vector video processing operation. The video processor may be a standalone video processor integrated circuit or a component integrated within the GPU integrated circuit.

일 실시예에서, 스칼라 실행 유닛은 비디오 프로세서의 제어기로서 기능하여, 벡터 실행 유닛의 동작을 제어한다. 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성될 수 있고, 벡터 실행 유닛은 애플리케이션의 픽셀 처리 동작을 실행하도록 구성될 수 있다. 스칼라 실행 유닛과 벡터 실행 유닛을 인터페이스하기 위한 벡터 인터페이스 유닛이 비디오 프로세서 내에 포함될 수 있다. 일 실시예에서, 스칼라 실행 유닛 및 벡터 실행 유닛은 비동기적으로 동작하도록 구성된다. 스칼라 실행 유닛은 제1 클럭 주파수로 실행할 수 있고, 벡터 실행 유닛은 상이한 클럭 주파수(예를 들어, 더 빠르거나, 더 느린 등)로 실행할 수 있다. 벡터 실행 유닛은 스칼라 실행 유닛의 제어하에 요구 구동 기반으로 동작할 수 있다. In one embodiment, the scalar execution unit functions as a controller of the video processor to control the operation of the vector execution unit. The scalar execution unit may be configured to execute the flow control algorithm of the application, and the vector execution unit may be configured to execute the pixel processing operation of the application. A vector interface unit for interfacing the scalar execution unit and the vector execution unit may be included in the video processor. In one embodiment, the scalar execution unit and the vector execution unit are configured to operate asynchronously. The scalar execution unit may execute at a first clock frequency, and the vector execution unit may execute at a different clock frequency (eg, faster, slower, etc.). The vector execution unit may operate on a request driving basis under the control of the scalar execution unit.

일 실시예에서, 본 발명은 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템으로서 구현된다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리가 포함된다. 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 가진 복수의 타일을 포함한다. 뱅크 데이터 구조들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. In one embodiment, the present invention is implemented as a multidimensional data path processing system for a video processor to perform video processing operations. The video processor includes a scalar execution unit configured to execute a scalar video processing operation and a vector execution unit configured to execute a vector video processing operation. A data storage memory for storing data for the vector execution unit is included. The data storage memory includes a plurality of tiles with symmetrical bank data structures arranged in an array. Bank data structures are configured to support access to different tiles in each bank.

특정 구성의 요건에 따라, 뱅크 데이터 구조들 각각은 복수의 타일(예를 들어, 4x4, 8x8, 8x16, 16x24 등)을 포함할 수 있다. 일 실시예에서, 뱅크들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 이것은 단일 액세스가 2개의 인접 뱅크로부터 타일들의 행(row) 또는 열(column)을 검색하는 것을 가능하게 한다. 일 실시예에서, 복수의 뱅크 데이터 구조의 타일들(예를 들어, 행, 열, 블록 등)을 액세스하기 위한 구성을 선택하기 위해 크로스바가 사용된다. 크로스바에 의해 액세스되는 뱅크들의 타일들을 수신하고 타일들을 클럭 단위로 벡터 데이터 경로의 프론트 엔드에 제공하기 위한 콜렉터가 포함될 수 있다. Depending on the requirements of a particular configuration, each of the bank data structures may include a plurality of tiles (eg, 4x4, 8x8, 8x16, 16x24, etc.). In one embodiment, the banks are configured to support access to different tiles in each bank. This allows a single access to retrieve a row or column of tiles from two adjacent banks. In one embodiment, crossbars are used to select a configuration for accessing tiles (eg, rows, columns, blocks, etc.) of a plurality of bank data structures. A collector may be included for receiving the tiles of the banks accessed by the crossbar and for providing the tiles to the front end of the vector data path in clock units.

일 실시예에서, 본 발명은 비디오 프로세서용의 스트림 기반 메모리 액세스 시스템으로서 구현된다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리가 포함된다. 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 프레임 버퍼 메모리는 복수의 타일을 포함한다. 메모리 인터페이스는 스칼라 실행 유닛에 대한 제1 순차적 타일 액세스의 제1 스트림을 구현하고, 벡터 실행 유닛에 대한 제2 순차적 타일 액세스의 제2 스트림을 구현한다. In one embodiment, the present invention is implemented as a stream based memory access system for a video processor. The video processor includes a scalar execution unit configured to execute a scalar video processing operation and a vector execution unit configured to execute a vector video processing operation. Frame buffer memory for storing data for the scalar execution unit and the vector execution unit is included. A memory interface for implementing communication between the scalar execution unit and the vector execution unit and the frame buffer memory is included. The frame buffer memory includes a plurality of tiles. The memory interface implements a first stream of first sequential tile access to a scalar execution unit and a second stream of second sequential tile access to a vector execution unit.

일 실시예에서, 제1 스트림 및 제2 스트림은 발원 메모리 위치(예를 들어, 프레임 버퍼 메모리, 시스템 메모리 등)로부터의 액세스 지연을 숨기는 방식으로 프리페치되는 일련의 순차적 프리페치 타일들을 포함한다. 일 실시예에서, 메모리 인터페이스는 복수의 상이한 발원 위치로부터의 그리고 복수의 상이한 종료 위치로의 복수의 상이한 스트림을 관리하도록 구성된다. 일 실시예에서, 메모리 인터페이스 내에 구축된 DMA 엔진이 다수의 스트림을 지원하기 위해 복수의 메모리 판독 및 복수의 메모리 기입을 구현하는 데 사용된다. In one embodiment, the first stream and the second stream comprise a series of sequential prefetch tiles that are prefetched in a manner that hides access delays from source memory locations (eg, frame buffer memory, system memory, etc.). In one embodiment, the memory interface is configured to manage a plurality of different streams from a plurality of different origin locations and to a plurality of different end locations. In one embodiment, a DMA engine built in a memory interface is used to implement multiple memory reads and multiple memory writes to support multiple streams.

대체로, 본 발명은 적어도 다음 4개의 방법을 개시한다.In general, the present invention discloses at least the following four methods.

A) 본 명세서에 광범위하게 교시되는 방법은 비디오 처리 동작을 실행하기 위한 비디오 프로세서에서의 다차원 데이터 경로 처리 시스템의 방법으로서, 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 데이터 저장 메모리를 이용하여 벡터 실행 유닛에 대한 데이터를 저장하는 단계를 포함하고, 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하고, 뱅크 데이터 구조들은 각 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 또한, 상기 A 방법은 4x4 패턴으로 배열된 복수의 타일을 포함하는 뱅크 데이터 구조들 각각을 포함한다. 또한, 상기 A 방법은 8x8, 8x16 또는 16x24 패턴으로 배열된 복수의 타일을 포함하는 뱅크 데이터 구조들 각각을 포함한다. 또한, 상기 A 방법은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성된 뱅크 데이터 구조들을 포함하고, 적어도 하나의 액세스는 2개의 뱅크 데이터 구조의 타일들의 행을 포함하는 2개의 인접한 뱅크 데이터 구조에 대한 것이다. 상기 A 방법은 또한 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성된 타일들을 포함하며, 적어도 하나의 액세스는 2개의 인접 뱅크 데이터 구조의 타일들의 열을 포함하는 2개의 인접 뱅크 데이터 구조에 대한 것이다. 또한, 상기 A 방법은 데이터 저장 메모리에 연결된 크로스바를 이용하여 복수의 뱅크 데이터 구조의 타일들을 액세스하기 위한 구성을 선택하는 단계를 포함한다. 이 선택 단계에서, 크로스바는 클럭 단위로 벡터 데이터 경로에 데이터를 제공하기 위해 복수의 뱅크 데이터 구조의 타일들을 액세스한다. 또한, 콜렉터를 이용하여 크로스바에 의해 액세스되는 복수의 뱅크 데이터 구조의 타일들을 수신하는 단계, 및 클럭 단위로 벡터 데이터 경로의 프론트 엔드에 타일들을 제공하는 단계를 포함한다. A) A method broadly taught herein includes a method of a multidimensional data path processing system in a video processor for performing a video processing operation, the method comprising: performing a scalar video processing operation using a scalar execution unit; Executing a vector video processing operation using the vector execution unit; Storing data for the vector execution unit using the data storage memory, wherein the data storage memory includes a plurality of tiles including symmetrical bank data structures arranged in an array, wherein the bank data structures differ in each bank; Configured to support access to tiles. In addition, the method A includes bank data structures each including a plurality of tiles arranged in a 4x4 pattern. The method A also includes bank data structures each including a plurality of tiles arranged in an 8x8, 8x16 or 16x24 pattern. In addition, the method A includes bank data structures configured to support access to different tiles of each bank data structure, and at least one access includes two adjacent banks comprising a row of tiles of two bank data structures. For data structures. The method A also includes tiles configured to support access to different tiles of each bank data structure, wherein at least one access comprises a column of tiles of two adjacent bank data structures. It is about. The method A also includes selecting a configuration for accessing tiles of the plurality of bank data structures using a crossbar connected to the data storage memory. In this selection step, the crossbar accesses the tiles of the plurality of bank data structures to provide data to the vector data path on a clock basis. The method also includes receiving tiles of a plurality of bank data structures accessed by a crossbar using a collector, and providing tiles to the front end of the vector data path in clock units.

B) 본 명세서에서 광범위하게 교시되는 방법은 또한 비디오 처리 동작을 실행하기 위한 방법으로서, 컴퓨터 판독 가능 코드를 실행하는 컴퓨터 시스템의 비디오 프로세서를 이용하여 구현되며, 호스트 인터페이스를 이용하여 비디오 프로세서와 호스트 CPU 간의 통신을 설정하는 단계; 메모리 인터페이스를 이용하여 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 설정하는 단계; 호스트 인터페이스 및 메모리 인터페이스에 연결된 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 및 호스트 인터페이스 및 메모리 인터페이스에 연결된 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계를 포함한다. 상기 B 방법은 비디오 프로세서의 제어기로서 기능하여 벡터 실행 유닛의 동작을 제어하는 스칼라 실행 유닛을 더 포함한다. 상기 B 방법은 스칼라 실행 유닛과 벡터 실행 유닛을 인터페이스하기 위한 벡터 인터페이스 유닛을 더 포함한다. 상기 B 방법은 비동기적으로 동작하도록 구성된 스칼라 실행 유닛 및 벡터 실행 유닛을 더 포함한다. 또한, 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 벡터 실행 유닛은 제2 클럭 주파수로 실행한다. 상기 B 방법은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성된 스칼라 실행 유닛 및 애플리케이션의 픽셀 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 또한, 벡터 실행 유닛은 스칼라 실행 유닛의 제어하에 요구 구동 기반으로 동작하도록 구성된다. 또한, 스칼라 실행 유닛은 메모리 커맨드 FIFO를 이용하여 벡터 실행 유닛에 기능 호출들을 전송하도록 구성되며, 벡터 실행 유닛은 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작한다. 또한, 비디오 프로세서의 비동기 동작은 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성된다. 마지막으로, 상기 B 방법은 VLIW(very long instruction word) 코드를 이용하여 동작하도록 구성된 스칼라 실행 유닛을 포함한다. B) The methods broadly taught herein are also methods for performing video processing operations, implemented using a video processor of a computer system executing computer readable code, and using a host interface to provide a video processor and a host CPU. Establishing communication between them; Establishing communication between the video processor and the frame buffer memory using the memory interface; Executing a scalar video processing operation using a scalar execution unit coupled to the host interface and the memory interface; And executing a vector video processing operation using the vector execution unit connected to the host interface and the memory interface. The method B further includes a scalar execution unit that functions as a controller of the video processor to control the operation of the vector execution unit. The method B further includes a vector interface unit for interfacing the scalar execution unit and the vector execution unit. The method B further includes a scalar execution unit and a vector execution unit configured to operate asynchronously. Also, the scalar execution unit executes at the first clock frequency, and the vector execution unit executes at the second clock frequency. The method B includes a scalar execution unit configured to execute an application's flow control algorithm and a vector execution unit configured to execute an application's pixel processing operation. In addition, the vector execution unit is configured to operate on a request driving basis under the control of the scalar execution unit. In addition, the scalar execution unit is configured to send function calls to the vector execution unit using the memory command FIFO, the vector execution unit operating on a request drive basis by accessing the memory command FIFO. In addition, the asynchronous operation of the video processor is configured to support individual independent updates of the vector subroutine or scalar subroutine of the application. Finally, the method B includes a scalar execution unit configured to operate using very long instruction word (VLIW) code.

C) 본 명세서에 설명되는 방법은 또한 비디오 처리 동작을 실행하기 위한 비디오 프로세서에서의 스트림 기반 메모리 액세스를 위한 방법을 광범위하게 교시하고 있는데, 이 방법은 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 프레임 버퍼 메모리를 이용하여 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저장하는 단계; 및 메모리 인터페이스를 이용하여 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 구현하는 단계를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 벡터 실행 유닛 또는 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현한다. 상기 C 방법은 또한 적어도 하나의 프리페치 타일을 포함하는 제1 스트림 및 제2 스트림을 갖는다. 상기 C 방법은 프레임 버퍼 메모리 내의 제1 위치로부터 발원되는 제1 스트림, 및 프레임 버퍼 메모리의 제2 위치로부터 발원되는 제2 스트림을 더 포함한다. 상기 C 방법은 복수의 상이한 발원 위치로부터의 그리고 복수의 상이한 종료 위치로의 복수의 스트림을 관리하도록 구성된 메모리 인터페이스를 더 포함한다. 이와 관련하여, 발원 위치들 중 적어도 하나 또는 종료 위치들 중 적어도 하나는 시스템 메모리 내에 있다. 상기 C 방법은 메모리 인터페이스 내에 구축된 DMA 엔진을 이용하여 제1 스트림 및 제2 스트림을 지원하기 위해 복수의 메모리 판독을 구현하고, 제1 스트림 및 제2 스트림을 지원하기 위해 복수의 메모리 기입을 구현하는 단계를 더 포함한다. 또한, 상기 C 방법은 제2 스트림보다 높은 양의 지연을 경험하는 제1 스트림을 포함하고, 제1 스트림은 제2 스트림보다 많은 수의 타일 저장용 버퍼를 포함한다. 상기 C 방법은 또한 제1 스트림 또는 제2 스트림의 지연을 보상하기 위하여 제1 스트림 또는 제2 스트림의 조정 가능한 수의 타일들을 프리페치하도록 구성된 메모리 인터페이스를 포함한다. C) The method described herein also broadly teaches a method for stream-based memory access in a video processor for executing a video processing operation, which executes a scalar video processing operation using a scalar execution unit. Making; Executing a vector video processing operation using the vector execution unit; Storing data for the scalar execution unit and the vector execution unit using the frame buffer memory; And implementing communication between the scalar execution unit and the vector execution unit and the frame buffer memory using a memory interface, wherein the frame buffer memory comprises a plurality of tiles, and the memory interface is a vector execution unit or a scalar execution unit Implement a first stream comprising a first sequential tile access, and implement a second stream comprising a second sequential tile access. The method C also has a first stream and a second stream comprising at least one prefetch tile. The method C further includes a first stream originating from a first location in the frame buffer memory, and a second stream originating from a second location of the frame buffer memory. The method C further includes a memory interface configured to manage the plurality of streams from the plurality of different origin locations and to the plurality of different end locations. In this regard, at least one of the origin positions or at least one of the end positions is in system memory. The method C implements a plurality of memory reads to support the first and second streams using a DMA engine built in a memory interface, and implements a plurality of memory writes to support the first and second streams. It further comprises the step. Also, the method C includes a first stream that experiences a higher amount of delay than the second stream, and the first stream includes a larger number of tile storage buffers than the second stream. The method C also includes a memory interface configured to prefetch an adjustable number of tiles of the first or second stream to compensate for the delay of the first or second stream.

D) 본 명세서에 설명되는 방법은 또한 지연 감내 비디오 처리 동작을 위한 방법을 광범위하게 포함하는데, 이 방법은 호스트 인터페이스를 이용하여 비디오 프로세서와 호스트 CPU 간의 통신을 구현하는 단계; 호스트 인터페이스에 연결된 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작을 실행하는 단계; 호스트 인터페이스에 연결된 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작을 실행하는 단계; 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작할 수 있게 하는 단계; 메모리 인터페이스를 이용하여 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하는 단계; 및 메모리 인터페이스 내에 구축되고 벡터 실행 유닛에 대한 데이터 및 명령을 데이터 저장 메모리 및 명령 캐시에 로딩하도록 구성된 DMA 엔진을 이용하여 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하는 단계를 포함한다. 상기 D 방법은 요구 구동 기반으로 동작하기 위하여 커맨드 FIFO를 액세스함으로써 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성된 벡터 실행 유닛을 더 포함한다. 상기 D 방법은 상이한 메모리 위치들에서 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성된 요구 구동 기반을 더 포함한다. 또한, 상기 D 방법은 알고리즘 흐름 제어 처리를 구현하도록 구성된 스칼라 실행 유닛을 포함하고, 벡터 실행 유닛은 비디오 처리 작업 부하의 대부분을 구현하도록 구성된다. 이와 관련하여, 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위하여 벡터 실행 유닛에 대한 작업 파라미터를 사전 계산하도록 구성된다. 상기 D 방법은 벡터 서브 루틴의 후속 실행을 위한 커맨드를 프리페치하기 위해 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성된 벡터 실행 유닛을 포함한다. 여기서, 메모리 판독은 스칼라 실행 유닛에 의한 벡터 서브 루틴의 호출 이전에 벡터 서브 루틴의 실행을 위한 커맨드를 프리페치하도록 스케쥴링된다.D) The method described herein also broadly includes a method for delay tolerance video processing operation, the method comprising implementing communication between a video processor and a host CPU using a host interface; Executing a scalar video processing operation using a scalar execution unit connected to the host interface; Executing a vector video processing operation using a vector execution unit coupled to the host interface; Enabling the vector execution unit to operate on a request drive basis by accessing the memory command FIFO; Implementing communication between the video processor and the frame buffer memory using a memory interface; And implementing DMA transfers between a plurality of different memory locations using a DMA engine built within the memory interface and configured to load data and instructions for the vector execution unit into the data storage memory and the instruction cache. The method D further includes a vector execution unit configured to operate asynchronously with respect to the scalar execution unit by accessing the command FIFO to operate on demand drive basis. The method D further includes a request drive base configured to hide a delay of data transfer from the vector execution unit to the command FIFO at different memory locations. In addition, the method D includes a scalar execution unit configured to implement algorithmic flow control processing, wherein the vector execution unit is configured to implement most of the video processing workload. In this regard, the scalar execution unit is configured to precalculate the working parameters for the vector execution unit to hide the data propagation delay. The method D includes a vector execution unit configured to schedule a memory read through the DMA engine to prefetch a command for subsequent execution of the vector subroutine. Here, the memory read is scheduled to prefetch a command for execution of the vector subroutine prior to the call of the vector subroutine by the scalar execution unit.

본 발명의 또다른 특징에 따르면, 제1 양태는, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 및 상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리를 포함하고, 상기 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 포함하는 복수의 타일을 포함하고, 상기 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성되는 시스템이다.According to another feature of the invention, a first aspect comprises: a scalar execution unit configured to execute a scalar video processing operation; A vector execution unit configured to execute a vector video processing operation; And a data storage memory for storing data for the vector execution unit, wherein the data storage memory includes a plurality of tiles including symmetrical bank data structures arranged in an array, wherein the bank data structures comprise respective banks. Is a system configured to support access to different tiles of.

본 발명의 제2 양태는, 제1 양태에 있어서, 상기 시스템은 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템이다.In a second aspect of the present invention, in a first aspect, the system is a multidimensional data path processing system for a video processor for performing video processing operations.

본 발명의 제3 양태는, 비디오 처리 동작을 지원하기 위한 다차원 데이터 경로 처리용 시스템으로서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 및 상기 마더보드 및 상기 CPU에 연결되고, 제1항의 시스템을 포함하는 비디오 프로세서를 포함하는 시스템이다.A third aspect of the invention provides a system for multidimensional data path processing for supporting video processing operations, comprising: a motherboard; A host CPU connected to the motherboard; And a video processor coupled to the motherboard and the CPU and comprising the system of claim 1.

본 발명의 제4 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들 각각은 4x4 패턴으로 배열된 복수의 타일을 포함한다.In a fourth aspect of the invention, in any of the first to third aspects, each of the bank data structures comprises a plurality of tiles arranged in a 4x4 pattern.

본 발명의 제5 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들 각각은 8x8 또는 8x16 또는 16x24 패턴으로 배열된 복수의 타일을 포함한다.In a fifth aspect of the invention, in any one of the first to third aspects, each of the bank data structures comprises a plurality of tiles arranged in an 8x8 or 8x16 or 16x24 pattern.

본 발명의 제6 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 뱅크 데이터 구조들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 상기 뱅크 데이터 구조들의 타일들의 행을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것이다.In a sixth aspect of the invention, in any one of the first to third aspects, the bank data structures are configured to support access to different tiles of each bank data structure, wherein at least one access is two. For two adjacent bank data structures comprising a row of tiles of the said bank data structures.

본 발명의 제7 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 타일들은 각각의 뱅크 데이터 구조의 상이한 타일들로의 액세스를 지원하도록 구성되고, 적어도 하나의 액세스는 2개의 인접한 상기 뱅크 데이터 구조들의 타일들의 열을 포함하는 2개의 인접한 뱅크 데이터 구조들에 대한 것이다.In a seventh aspect of the invention, in any one of the first to third aspects, the tiles are configured to support access to different tiles of each bank data structure, with at least one access being two contiguous. For two adjacent bank data structures containing a column of tiles of the bank data structures.

본 발명의 제8 양태는, 제1 내지 제3 양태 중 어느 한 양태에 있어서, 상기 데이터 저장 메모리에 연결되고, 상기 복수의 뱅크 데이터 구조의 타일들을 액세스하기 위한 구성을 선택하기 위한 크로스바를 더 포함한다.An eighth aspect of the invention, in any one of the first to third aspects, further comprises a crossbar connected to the data storage memory and for selecting a configuration for accessing tiles of the plurality of bank data structures. do.

본 발명의 제9 양태는, 제8 양태에 있어서, 상기 크로스바는 데이터를 벡터 데이터 경로에 클럭 단위 기반으로 제공하기 위해 상기 복수의 뱅크 데이터 구조의 타일들을 액세스한다.In a ninth aspect of the invention, in an eighth aspect, the crossbar accesses the tiles of the plurality of bank data structures to provide data on a clock-by-clock basis to the vector data path.

본 발명의 제10 양태는, 제9 양태에 있어서, 상기 크로스바에 의해 액세스되는 상기 복수의 뱅크 데이터 구조의 타일들을 수신하고, 상기 타일들을 벡터 데이터 경로의 프론트 엔드에 클럭 단위 기반으로 제공하는 콜렉터를 더 포함한다.A tenth aspect of the present invention provides a collector that, in a ninth aspect, receives tiles of the plurality of bank data structures accessed by the crossbar and provides the tiles on a clock-by-clock basis to a front end of a vector data path. It includes more.

본 발명의 제11 양태는, 비디오 처리 동작을 실행하기 위한 비디오 프로세서로서, 상기 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스; 상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 및 상기 호스트 인터페이스 및 상기 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함하는 비디오 프로세서이다.An eleventh aspect of the present invention provides a video processor for performing a video processing operation, comprising: a host interface for implementing communication between the video processor and a host CPU; A memory interface for implementing communication between the video processor and frame buffer memory; A scalar execution unit coupled to the host interface and the memory interface and configured to execute a scalar video processing operation; And a vector execution unit coupled to the host interface and the memory interface, the vector execution unit configured to execute a vector video processing operation.

본 발명의 제12 양태는, 비디오 처리 동작을 실행하기 위한 시스템으로서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 및 상기 마더보드 및 상기 CPU에 연결된 제11 양태의 상기 비디오 프로세서를 포함하는 시스템이다.A twelfth aspect of the present invention is a system for performing a video processing operation, comprising: a motherboard; A host CPU connected to the motherboard; And the video processor of the eleventh aspect connected to the motherboard and the CPU.

본 발명의 제13 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛은 상기 비디오 프로세서의 제어기로서 기능하고, 상기 벡터 실행 유닛의 동작을 제어한다.In a thirteenth aspect of the present invention, in the eleventh aspect, the scalar execution unit functions as a controller of the video processor and controls the operation of the vector execution unit.

본 발명의 제14 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛을 상기 벡터 실행 유닛과 인터페이스하기 위한 벡터 인터페이스 유닛을 더 포함한다.A fourteenth aspect of the present invention, in the eleventh aspect, further includes a vector interface unit for interfacing the scalar execution unit with the vector execution unit.

본 발명의 제15 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛은 비동기적으로 동작하도록 구성된다.A fifteenth aspect of the present invention is the eleventh aspect, wherein the scalar execution unit and the vector execution unit are configured to operate asynchronously.

본 발명의 제16 양태는, 제15 양태의 비디오 프로세서 또는 제12 양태의 시스템으로서, 상기 스칼라 실행 유닛은 제1 클럭 주파수로 실행하고, 상기 벡터 실행 유닛은 제2 클럭 주파수로 실행한다.A sixteenth aspect of the present invention is the video processor of the fifteenth aspect or the system of the twelfth aspect, wherein the scalar execution unit executes at a first clock frequency and the vector execution unit executes at a second clock frequency.

본 발명의 제17 양태는, 제11 양태의 비디오 프로세서 또는 제12 양태의 시스템으로서, 상기 스칼라 실행 유닛은 애플리케이션의 흐름 제어 알고리즘을 실행하도록 구성되고, 상기 벡터 실행 유닛은 상기 애플리케이션의 픽셀 처리 동작을 실행하도록 구성된다.A seventeenth aspect of the present invention is the video processor of the eleventh aspect or the system of the twelfth aspect, wherein the scalar execution unit is configured to execute a flow control algorithm of an application, and the vector execution unit performs a pixel processing operation of the application. Configured to execute.

본 발명의 제18 양태는, 제17 양태에 있어서, 상기 벡터 실행 유닛은 상기 스칼라 실행 유닛의 제어하에 요구 구동 기반으로(on a demand driven basis) 동작하도록 구성된다.In an eighteenth aspect of the invention, in a seventeenth aspect, the vector execution unit is configured to operate on a demand driven basis under control of the scalar execution unit.

본 발명의 제19 양태는, 제17 양태에 있어서, 상기 스칼라 실행 유닛은 커맨드 FIFO를 이용하여 상기 벡터 실행 유닛에 기능 호출들(function calls)을 전송하도록 구성되고, 상기 벡터 실행 유닛은 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작한다.In a nineteenth aspect of the present invention, in a seventeenth aspect, the scalar execution unit is configured to send function calls to the vector execution unit using a command FIFO, the vector execution unit being the command FIFO. It operates on a request driven basis by accessing it.

본 발명의 제20 양태는, 제17 양태에 있어서, 상기 비디오 프로세서의 비동기적인 동작은 상기 애플리케이션의 벡터 서브 루틴 또는 스칼라 서브 루틴의 개별적인 독립적 갱신을 지원하도록 구성된다.In a twentieth aspect of the invention, in the seventeenth aspect, the asynchronous operation of the video processor is configured to support individual independent update of the vector subroutine or the scalar subroutine of the application.

본 발명의 제21 양태는, 제11 양태에 있어서, 상기 스칼라 실행 유닛은 VLIW(very long instruction word) 코드를 이용하여 동작하도록 구성된다.A twenty-first aspect of the present invention is the eleventh aspect, wherein the scalar execution unit is configured to operate using very long instruction word (VLIW) code.

본 발명의 제22 양태는, 비디오 처리 동작을 실행하기 위한 비디오 프로세서용 스트림 기반 메모리 액세스 시스템으로서, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리; 및 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛과 상기 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하는 시스템이다.A twenty second aspect of the present invention provides a stream based memory access system for a video processor for executing a video processing operation, comprising: a scalar execution unit configured to execute a scalar video processing operation; A vector execution unit configured to execute a vector video processing operation; A frame buffer memory for storing data for the scalar execution unit and the vector execution unit; And a memory interface for implementing communication between the scalar execution unit and the vector execution unit and the frame buffer memory, the frame buffer memory comprising a plurality of tiles, wherein the memory interface comprises the vector execution unit or the scalar A system for implementing a first stream comprising a first sequential tile access to an execution unit and implementing a second stream comprising a second sequential tile access.

본 발명의 제23 양태는, 비디오 처리 동작을 지원하기 위해 스트림 기반 메모리 액세스들을 실행하는 시스템으로서, 마더보드; 상기 마더보드에 연결되는 호스트 CPU; 상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서 - 상기 비디오 프로세서는, 상기 비디오 프로세서와 상기 호스트 CPU 간의 통신을 설정하기 위한 호스트 인터페이스, 상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함함 - ; 및 상기 스칼라 실행 유닛 및 상기 벡터 실행 유닛에 연결되고, 상기 스칼라 실행 유닛과 상기 벡터 실행 유닛과 프레임 버퍼 메모리 간의 스트림 기반 통신을 설정하기 위한 메모리 인터페이스를 포함하고, 상기 프레임 버퍼 메모리는 복수의 타일을 포함하고, 상기 메모리 인터페이스는 상기 벡터 실행 유닛 또는 상기 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고, 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현하는 시스템이다.A twenty third aspect of the present invention is a system for executing stream based memory accesses to support a video processing operation, comprising: a motherboard; A host CPU connected to the motherboard; A video processor coupled to the motherboard and the CPU, wherein the video processor is a host interface for establishing communication between the video processor and the host CPU, a scalar execution unit coupled to the host interface and configured to execute a scalar video processing operation A vector execution unit coupled to the host interface and configured to execute a vector video processing operation; And a memory interface coupled to the scalar execution unit and the vector execution unit, for establishing stream based communication between the scalar execution unit and the vector execution unit and a frame buffer memory, wherein the frame buffer memory includes a plurality of tiles. Wherein the memory interface implements a first stream comprising a first sequential tile access to the vector execution unit or the scalar execution unit and implements a second stream comprising a second sequential tile access.

본 발명의 제24 양태는, 제22 양태에 있어서, 상기 제1 스트림 및 상기 제2 스트림은 적어도 하나의 프리페치된 타일(prefetched tile)을 포함한다.In a twenty-fourth aspect of the invention, in the twenty-second aspect, the first stream and the second stream comprise at least one prefetched tile.

본 발명의 제25 양태는, 제22 양태에 있어서, 상기 제1 스트림은 상기 프레임 버퍼 메모리 내의 제1 위치로부터 발원되고, 상기 제2 스트림은 상기 프레임 버퍼 메모리 내의 제2 위치로부터 발원된다.In a twenty-fifth aspect of the present invention, in a twenty-second aspect, the first stream is derived from a first position in the frame buffer memory, and the second stream is derived from a second position in the frame buffer memory.

본 발명의 제26 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스는 복수의 상이한 발원 위치로부터, 그리고 복수의 상이한 종료 위치까지의 복수의 스트림을 관리하도록 구성된다.In a twenty sixth aspect of the present invention, in a twenty-second or twenty-third aspect, the memory interface is configured to manage a plurality of streams from a plurality of different origin positions and to a plurality of different end positions.

본 발명의 제27 양태는, 제26 양태에 있어서, 상기 발원 위치들 중 적어도 하나 또는 상기 종료 위치들 중 적어도 하나는 시스템 메모리 내에 있다.In a twenty seventh aspect of the present invention, in the twenty sixth aspect, at least one of the origin positions or at least one of the end positions is in system memory.

본 발명의 제28 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스 내에 구축되고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 판독을 구현하고, 상기 제1 스트림 및 상기 제2 스트림을 지원하기 위해 복수의 메모리 기입을 구현하도록 구성된 DMA 엔진을 더 포함한다.A twenty eighth aspect of the present invention is directed to the twenty-second or twenty-third aspect of the present invention, wherein the twenty-second or twenty-third aspect is implemented in the memory interface to implement a plurality of memory reads to support the first stream and the second stream, And a DMA engine configured to implement a plurality of memory writes to support the second stream.

본 발명의 제29 양태는, 제22 또는 제23 양태에 있어서, 상기 제1 스트림은 상기 제2 스트림보다 더 높은 양의 지연을 경험하고, 상기 제1 스트림은 상기 제2 스트림보다 많은 수의 타일 저장용 버퍼들을 통합한다.In a twenty-ninth aspect of the invention, in the twenty-second or twenty-third aspect, the first stream experiences a higher amount of delay than the second stream, and the first stream has a greater number of tiles than the second stream. Integrate storage buffers.

본 발명의 제30 양태는, 제22 또는 제23 양태에 있어서, 상기 메모리 인터페이스는 상기 제1 스트림 또는 상기 제2 스트림의 지연을 보상하기 위하여 상기 제1 스트림 또는 상기 제2 스트림의 조정 가능한 수의 타일을 프리페치하도록 구성된다.In a thirtieth aspect of the invention, in the twenty-second or twenty-third aspect, the memory interface further comprises an adjustable number of the first stream or the second stream to compensate for the delay of the first stream or the second stream. Configured to prefetch the tile.

본 발명의 제31 양태는, 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스; 상기 호스트 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛; 상기 호스트 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛; 커맨드 FIFO로서, 상기 벡터 실행 유닛이 상기 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작할 수 있게 하는 커맨드 FIFO; 상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 및 상기 메모리 인터페이스 내에 구축되고, 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고, 데이터 저장 메모리 및 명령 캐시에 상기 벡터 실행 유닛에 대한 데이터 및 명령을 로딩하기 위한 DMA 엔진을 포함하는 시스템이다.A thirty first aspect of the invention is a host interface for implementing communication between a video processor and a host CPU; A scalar execution unit coupled to the host interface and configured to execute a scalar video processing operation; A vector execution unit coupled to the host interface and configured to execute a vector video processing operation; A command FIFO, comprising: a command FIFO that enables the vector execution unit to operate on a request drive basis by accessing the command FIFO; A memory interface for implementing communication between the video processor and frame buffer memory; And a DMA engine built in the memory interface, for implementing DMA transfers between a plurality of different memory locations, and for loading data and instructions for the vector execution unit into a data storage memory and an instruction cache.

본 발명의 제32 양태는, 제31 양태에 있어서, 상기 시스템은 비디오 처리 동작을 실행하기 위한 지연 감내 시스템(latency tolerant system)이다.In a thirty-second aspect of the present invention, in a thirty-first aspect, the system is a latency tolerant system for performing video processing operations.

본 발명의 제33 양태는, 제32 양태에 있어서, 마더보드; 상기 마더보드에 연결된 호스트 CPU; 상기 마더보드 및 상기 CPU에 연결된 비디오 프로세서를 더 포함한다.A thirty-third aspect of the invention is the thirty-second aspect of the present invention comprising: a motherboard; A host CPU connected to the motherboard; It further comprises a video processor coupled to the motherboard and the CPU.

본 발명의 제34 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 벡터 실행 유닛은 요구 구동 기반으로 동작하기 위하여 상기 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 대하여 비동기적으로 동작하도록 구성된다.A thirty-fourth aspect of the present invention is the method of any one of thirty-first through thirty-third aspects, wherein the vector execution unit is configured to operate asynchronously with respect to the scalar execution unit by accessing the command FIFO to operate on a request driving basis. It is composed.

본 발명의 제35 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 요구 구동 기반은 상기 상이한 메모리 위치들로부터 상기 벡터 실행 유닛의 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성된다.In a thirty-fifth aspect of the invention, in any one of thirty-first through thirty-third aspects, the request drive base is configured to hide a delay of data transfer from the different memory locations to the command FIFO of the vector execution unit.

본 발명의 제36 양태는, 제31 내지 제33 양태 중 어느 한 양태에 있어서, 상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리를 구현하도록 구성되고, 상기 벡터 실행 유닛은 비디오 처리 작업 부하의 대부분을 구현하도록 구성된다.A thirty sixth aspect of the present invention is the subject matter of any one of thirty-first to thirty-third aspects, wherein the scalar execution unit is configured to implement algorithmic flow control processing, and wherein the vector execution unit is configured to implement most of the video processing workload. It is composed.

본 발명의 제37 양태는, 제36 양태에 있어서, 상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위해 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성된다.In a thirty-seventh aspect of the present invention, in the thirty-sixth aspect, the scalar execution unit is configured to precalculate the work parameters for the vector execution unit to hide the data propagation delay.

본 발명의 제38 양태는, 제31 양태에 있어서, 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성된다.In a thirty-eighth aspect of the present invention, in a thirty-first aspect, the vector execution unit is configured to schedule a memory read through the DMA engine to prefetch commands for subsequent execution of a vector subroutine.

본 발명의 제39 양태는, 제38 양태에 있어서, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링된다.In a thirty-third aspect of the present invention, in the thirty-eighth aspect, the memory read is scheduled to prefetch commands for execution of the vector subroutine prior to a call to the vector subroutine by the scalar execution unit.

본 발명의 제40 양태는, 제33 양태에 있어서, 상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되고, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴에 대한 호출 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링된다. In a forty-third aspect of the invention, in a thirty-third aspect, the vector execution unit is configured to schedule a memory read through the DMA engine to prefetch commands for subsequent execution of a vector subroutine, wherein the memory read is It is scheduled to prefetch commands for execution of the vector subroutine prior to the call to the vector subroutine by the scalar execution unit.

본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새로운 비디오 프로세서 아키텍처를 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위하여 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다. 본 발명의 실시예들은 예를 들어 MPEG-2/WMV9/H.264 인코드 지원(예를 들어, 루프내 디코더), MPEG-2/WMV9/H.264 디코드(예를 들어, 포스트 엔트로피 디코딩), 및 루프내/루프외 비블록킹 필터와 같은 다수의 정교한 비디오 처리 동작을 제공할 수 있다. Embodiments of the present invention provide a new video processor architecture that supports sophisticated video processing functions while efficiently utilizing integrated circuit silicon die area, transistor count, memory speed requirements, and the like. Embodiments of the present invention maintain a high computational density to process multiple video streams and are easily scalable. Embodiments of the present invention provide for example MPEG-2 / WMV9 / H.264 encode support (e.g., in-loop decoder), MPEG-2 / WMV9 / H.264 decode (e.g. post entropy decoding). And a number of sophisticated video processing operations such as in-loop and out-of-loop non-blocking filters.

본 발명의 실시예들에 의해 제공되는 추가적인 비디오 처리 동작은 예를 들어 향상된 모션 적응 디인터레이싱, 인코딩을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 및 서브 픽처 합성을 포함한다. 본 발명의 비디오 프로세서 아키텍처는 또한 예를 들어 칼라 공간 변환, 칼라 공간 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 조작, 및 다양한 비디오 표면 포맷 변환과 같은 소정의 비디오 프로세서-증폭기(프로캠프) 애플리케이션에 이용될 수 있다.Additional video processing operations provided by embodiments of the present invention include, for example, improved motion adaptive deinterlacing, input noise filtering for encoding, polyphase scaling / resampling, and subpicture synthesis. The video processor architecture of the present invention is also used in certain video processor-amplifier (procamp) applications, such as pixel point manipulation such as color space conversion, color space adjustment, sharpening, histogram adjustment, and various video surface format conversions, for example. Can be.

본 발명은 한정적이 아니라 예시적으로 설명되며, 첨부 도면들에서 동일한 참조 번호는 유사한 요소를 나타낸다.
도 1은 본 발명의 일 실시예에 따른 컴퓨터 시스템의 기본 컴포넌트를 나타내는 개략도.
도 2는 본 발명의 일 실시예에 따른 비디오 프로세서의 내부 컴포넌트를 나타내는 도면.
도 3은 본 발명의 일 실시예에 따른 비디오 프로세서에 대한 예시적인 소프트웨어 프로그램을 나타내는 도면.
도 4는 본 발명의 일 실시예에 따른 비디오 프로세서를 이용하는 비디오와의 서브 픽처 혼합의 일례를 나타내는 도면.
도 5는 본 발명의 일 실시예에 따른 벡터 실행 유닛의 내부 컴포넌트를 나타내는 도면.
도 6은 본 발명의 일 실시예에 따른 대칭 타일 어레이를 구비한 데이터 저장 메모리의 레이아웃을 나타내는 도면.
The invention is illustrated by way of example and not by way of limitation, like reference numerals in the accompanying drawings indicate like elements.
1 is a schematic diagram illustrating basic components of a computer system according to an embodiment of the present invention.
2 illustrates internal components of a video processor according to an embodiment of the present invention.
3 illustrates an exemplary software program for a video processor in accordance with one embodiment of the present invention.
4 illustrates an example of subpicture mixing with video using a video processor in accordance with an embodiment of the present invention.
5 illustrates an internal component of a vector execution unit according to an embodiment of the present invention.
6 illustrates a layout of a data storage memory having a symmetric tile array in accordance with one embodiment of the present invention.

이제 본 발명의 바람직한 실시예들을 상세히 참조하는데, 그 예는 첨부 도면들에 도시되어 있다. 본 발명은 바람직한 실시예들과 관련하여 설명되지만, 본 발명은 이들 실시예에 한정되는 것은 아니라는 것을 이해할 것이다. 오히려, 본 발명은 첨부된 청구범위에 의해 정의되는 발명의 사상 및 범위 내에 포함될 수 있는 대안, 변형 및 균등물을 포함하는 것으로 의도한다. 더욱이, 아래의 본 발명의 실시예들의 상세한 설명에서, 다양한 특정 상세는 본 발명의 완전한 이해를 제공하기 위해 설명된다. 그러나, 본 발명은 이러한 특정 상세 없이도 실시될 수 있다는 것을 이 분야의 전문가들은 이해할 것이다. 다른 사례에서, 본 발명의 실시예들의 양태를 불필요하게 불명확하게 하지 않기 위하여 공지 방법, 프로시저, 컴포넌트 및 회로는 상세히 설명되지 않는다. Reference is now made in detail to preferred embodiments of the invention, examples of which are illustrated in the accompanying drawings. While the invention has been described in connection with the preferred embodiments, it will be understood that the invention is not limited to these embodiments. Rather, the invention is intended to cover alternatives, modifications and equivalents that may be included within the spirit and scope of the invention as defined by the appended claims. Moreover, in the following detailed description of embodiments of the invention, various specific details are set forth in order to provide a thorough understanding of the present invention. However, it will be understood by those skilled in the art that the present invention may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail in order not to unnecessarily obscure aspects of embodiments of the present invention.

기호 및 용어Symbols and terms

이어지는 상세한 설명의 몇몇 부분은 프로시저, 단계, 논리 블록, 처리 및 컴퓨터 메모리 내의 데이터 비트 상의 동작의 다른 기호 표현을 이용하여 제공된다. 이들 설명 및 표현은 데이터 처리 분야의 전문가들이 그들의 작업의 내용을 다른 전문가에게 가장 효과적으로 전달하기 위해 사용하는 수단이다. 본 명세서에서, 일반적으로, 프로시저, 컴퓨터 실행 단계, 논리 블록, 프로세서 등은 원하는 결과를 도출하는 단계들 또는 명령들의 모순 없는 시퀀스인 것으로 고려된다. 이 단계들은 물리량의 물리적 조작을 요구하는 단계들이다. 통상적으로, 반드시 그렇지는 않지만, 이들 양은 컴퓨터 시스템에서 저장, 전송, 조합, 비교 및 조작될 수 있는 전기 또는 자기적 신호의 형태를 갖는다. 이들 신호를 비트, 값, 요소, 기호, 문자, 용어, 수 등으로 지칭하는 것이 때때로 주로 일반적인 사용을 위해 편리한 것으로 입증되었다. Some portions of the detailed description that follows are provided using procedures, steps, logical blocks, processing, and other symbolic representations of operations on data bits in computer memory. These descriptions and representations are the means used by those in the data processing arts to most effectively convey the substance of their work to others. In this specification, generally, a procedure, computer execution step, logical block, processor, or the like is considered to be a non-contradictory sequence of steps or instructions that produce a desired result. These steps are those requiring physical manipulation of physical quantities. Typically, but not necessarily, these quantities take the form of electrical or magnetic signals that can be stored, transmitted, combined, compared, and manipulated in a computer system. Referencing these signals by bits, values, elements, symbols, characters, terms, numbers, etc. has sometimes proved to be convenient primarily for general use.

그러나, 이들 및 유사한 용어들 모두는 적절한 물리량과 연관되며 이들 양에 적용되는 편리한 라벨일 뿐이라는 것에 유의해야 한다. 아래의 설명으로부터 명백하듯이, 특별히 달리 언급되지 않는 한, 본 발명을 통해, "처리" 또는 "액세스" 또는 "실행" 또는 "저장" 또는 "렌더링" 등과 같은 용어를 이용하는 설명은 컴퓨터 시스템의 레지스터 및 메모리 내의 물리(전자)량으로 표현되는 데이터를, 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장, 전송 또는 디스플레이 장치 내의 물리량으로 유사하게 표현되는 다른 데이터로 조작하고 변환하는 컴퓨터 시스템(예를 들어, 도 1의 컴퓨터 시스템(100)) 또는 유사한 전자 컴퓨팅 장치의 동작 및 프로세스를 지칭하는 것으로 이해된다. However, it should be noted that both these and similar terms are associated with appropriate physical quantities and are merely convenient labels applied to these quantities. As will be apparent from the description below, unless stated otherwise, and through this invention, descriptions using terms such as "processing" or "access" or "execution" or "storage" or "rendering", etc., shall be understood as registers of a computer system. And a computer system that manipulates and converts data represented by physical (electronic) quantities in memory into computer system memory or registers or other data similarly represented by physical quantities in other such information storage, transmission, or display devices (eg, It is understood to refer to the operation and process of computer system 100 of FIG. 1) or similar electronic computing device.

컴퓨터 시스템 플랫폼Computer system platform

도 1은 본 발명의 일 실시예에 따른 컴퓨터 시스템(100)을 나타낸다. 컴퓨터 시스템(100)은 소정의 하드웨어 기반 및 소프트웨어 기반 기능을 위한 실행 플랫폼을 제공하는 본 발명의 실시예들에 따른 기본 컴퓨터 시스템의 컴포넌트들을 나타낸다. 일반적으로, 컴퓨터 시스템(100)은 적어도 하나의 CPU(101), 시스템 메모리(115), 적어도 하나의 그래픽 프로세서 유닛(GPU;110) 및 하나의 비디오 프로세서 유닛(VPU;111)을 포함한다. CPU(101)는 브리지 컴포넌트(105)를 통해 시스템 메모리(115)에 연결되거나 CPU(101) 내부의 메모리 제어기(도시되지 않음)를 통해 시스템 메모리(115)에 직접 연결될 수 있다. 브리지 컴포넌트(105; 예를 들어, 노스브리지)는 다양한 I/O 장치들(예를 들어, 하나 이상의 하드 디스크 드라이브, 이더넷 어댑터, CD ROM, DVD 등)을 접속시키는 확장 버스들을 지원할 수 있다. GPU(110) 및 비디오 프로세서 유닛(111)은 디스플레이(112)에 연결된다. 연산 능력을 더 향상시키기 위하여 하나 이상의 추가 GPU가 옵션으로 시스템(100)에 연결될 수 있다. GPU(110) 및 비디오 프로세서 유닛(111)은 브리지 컴포넌트(105)를 통해 CPU(101) 및 시스템 메모리(115)에 연결된다. 시스템(100)은 예를 들어 전용 그래픽 렌더링 GPU(110)에 연결된 강력한 범용 CPU(101)를 구비한 데스크탑 컴퓨터 시스템 또는 서버 컴퓨터 시스템으로서 구현될 수 있다. 이러한 실시예에서, 주변 버스, 특수 그래픽 메모리 및 시스템 메모리, I/O 장치 등을 추가하는 컴포넌트들이 포함될 수 있다. 마찬가지로, 시스템(100)은 핸드헬드 장치(예를 들어, 셀폰 등) 또는 예를 들어 워싱톤 레드먼드의 마이크로소프트사로부터 입수할 수 있는 Xbox(등록 상표) 또는 일본, 도꾜의 소니 컴퓨터 엔터테인먼트사로부터 입수할 수 있는 PlayStation3(등록 상표)와 같은 셋톱 비디오 게임 콘솔 장치로서 구현될 수 있다. 1 illustrates a computer system 100 in accordance with one embodiment of the present invention. Computer system 100 represents components of a basic computer system in accordance with embodiments of the present invention that provide an execution platform for certain hardware-based and software-based functions. In general, computer system 100 includes at least one CPU 101, system memory 115, at least one graphics processor unit (GPU) 110, and one video processor unit (VPU) 111. The CPU 101 may be connected to the system memory 115 through the bridge component 105 or directly to the system memory 115 through a memory controller (not shown) inside the CPU 101. Bridge component 105 (eg, Northbridge) may support expansion buses that connect various I / O devices (eg, one or more hard disk drives, Ethernet adapters, CD ROM, DVD, etc.). GPU 110 and video processor unit 111 are connected to display 112. One or more additional GPUs may optionally be connected to the system 100 to further improve computing power. GPU 110 and video processor unit 111 are coupled to CPU 101 and system memory 115 through bridge component 105. System 100 may be implemented, for example, as a desktop computer system or server computer system with a powerful general purpose CPU 101 connected to a dedicated graphics rendering GPU 110. In such embodiments, components that add peripheral buses, special graphics memory and system memory, I / O devices, and the like may be included. Similarly, system 100 may be available from handheld devices (e.g., cell phones, etc.) or from Xbox (registered trademark) available from Microsoft Corporation, for example, Washington Redmond, or from Sony Computer Entertainment, Inc., Tokyo, Japan. Can be implemented as a set-top video game console device such as PlayStation3 (registered trademark).

GPU(110)는 개별 컴포넌트, 커넥터(예를 들어, AGP 슬롯, PCI 익스프레스 슬롯 등)를 통해 컴퓨터 시스템에 연결되도록 설계된 개별 그래픽 카드, 개별 집적 회로 다이(예를 들어, 마더보드에 직접 실장됨), 또는 컴퓨터 시스템 칩셋 컴포넌트의 집적 회로 다이 내에 포함된 집적 GPU(예를 들어, 브리지 칩(105) 내에 집적됨)로서 구현될 수 있다는 것을 이해해야 한다. 또한, 높은 대역폭 그래픽 데이터 저장을 위해 GPU(110)에 대해 로컬 그래픽 메모리가 포함될 수 있다. 또한, GPU(110) 및 비디오 프로세서 유닛(111)은 동일 집적 회로 다이 상에 집적되거나(예를 들어, 컴포넌트(120)로서) 컴퓨터 시스템(100)의 마더보드에 접속되거나 그 위에 실장되는 개별 집적 회로 컴포넌트들일 수 있다는 것을 이해해야 한다. GPU 110 is a discrete graphics card designed to be connected to a computer system via discrete components, connectors (e.g., AGP slots, PCI Express slots, etc.), discrete integrated circuit dies (e.g., mounted directly on the motherboard). Or, may be implemented as an integrated GPU (eg, integrated within bridge chip 105) contained within an integrated circuit die of a computer system chipset component. In addition, local graphics memory may be included for GPU 110 for high bandwidth graphics data storage. In addition, GPU 110 and video processor unit 111 may be integrated on the same integrated circuit die (eg, as component 120) or connected to or mounted on a motherboard of computer system 100. It should be understood that they may be circuit components.

본 발명의 Of the present invention 실시예들Examples

도 2는 본 발명의 일 실시예에 따른 비디오 프로세서 유닛(111)의 내부 컴포넌트를 나타내는 도면이다. 도 2에 도시된 바와 같이, 비디오 프로세서 유닛(111)은 스칼라 실행 유닛(201), 벡터 실행 유닛(202), 메모리 인터페이스(203) 및 호스트 인터페이스(204)를 포함한다. 2 is a diagram illustrating internal components of a video processor unit 111 according to an embodiment of the present invention. As shown in FIG. 2, the video processor unit 111 includes a scalar execution unit 201, a vector execution unit 202, a memory interface 203, and a host interface 204.

도 2의 실시예에서, 비디오 프로세서 유닛(이하 간단히 비디오 프로세서라 함; 111)은 비디오 처리 동작을 실행하기 위한 기능 컴포넌트들을 포함한다. 비디오 프로세서(111)는 호스트 인터페이스(204)를 이용하여 브리지(105)를 통해 비디오 프로세서(111)와 호스트 CPU(101) 간의 통신을 설정한다. 비디오 프로세서(111)는 메모리 인터페이스(203)를 이용하여 비디오 프로세서(111)와 프레임 버퍼 메모리(205)(예를 들어, 도시되지 않은 연결된 디스플레이(112)를 위한 것임) 간의 통신을 설정한다. 스칼라 실행 유닛(201)은 호스트 인터페이스(204) 및 메모리 인터페이스(203)에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛은 호스트 인터페이스(204) 및 메모리 인터페이스(203)에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다. In the embodiment of FIG. 2, a video processor unit (hereinafter simply referred to as a video processor) 111 includes functional components for performing a video processing operation. The video processor 111 establishes communication between the video processor 111 and the host CPU 101 via the bridge 105 using the host interface 204. The video processor 111 uses the memory interface 203 to establish communication between the video processor 111 and the frame buffer memory 205 (eg, for a connected display 112 not shown). The scalar execution unit 201 is coupled to the host interface 204 and the memory interface 203, and is configured to execute a scalar video processing operation. The vector execution unit is coupled to the host interface 204 and the memory interface 203 and configured to execute a vector video processing operation.

도 2의 실시예는 비디오 프로세서(111)가 그의 실행 기능을 스칼라 동작 및 벡터 동작으로 분할하는 방식을 설명한다. 스칼라 동작은 스칼라 실행 유닛(201)에 의해 구현된다. 벡터 동작은 벡터 실행 유닛(202)에 의해 구현된다. 2 illustrates a manner in which the video processor 111 divides its execution function into a scalar operation and a vector operation. Scalar operations are implemented by the scalar execution unit 201. Vector operation is implemented by the vector execution unit 202.

일 실시예에서, 벡터 실행 유닛(202)은 스칼라 실행 유닛(201)에 대해 슬레이브 코프로세서로서 기능하도록 구성된다. 이러한 실시예에서, 스칼라 실행 유닛은 벡터 실행 유닛(202)에 제어 스트림을 공급하고 벡터 실행 유닛(202)에 대한 데이터 입출력을 관리함으로써 벡터 실행 유닛(202)의 작업 부하를 관리한다. 제어 스트림은 일반적으로 기능 파라미터, 서브루틴 독립 변수 등을 포함한다. 대표적인 비디오 처리 애플리케이션에서, 애플리케이션의 처리 알고리즘의 제어 흐름은 스칼라 실행 유닛(210) 상에서 실행되는 반면, 실제 픽셀/데이터 처리 동작은 벡터 실행 유닛(202) 상에서 구현된다. In one embodiment, the vector execution unit 202 is configured to function as a slave coprocessor for the scalar execution unit 201. In this embodiment, the scalar execution unit manages the workload of the vector execution unit 202 by supplying a control stream to the vector execution unit 202 and managing data input and output to the vector execution unit 202. Control streams generally include function parameters, subroutine independent variables, and the like. In an exemplary video processing application, the control flow of the processing algorithm of the application is executed on the scalar execution unit 210 while the actual pixel / data processing operation is implemented on the vector execution unit 202.

도 2를 계속 참조하면, 스칼라 실행 유닛(201)은 RISC 기반 실행 기술을 포함하는 RISC 스타일 스칼라 실행 유닛으로서 구현될 수 있다. 벡터 실행 유닛(202)은 예를 들어 하나 이상의 SIMD 파이프라인을 구비한 SIMD 머신으로서 구현될 수 있다. 예를 들어, SIMD 파이프라인 실시예에서, 각각의 SIMD 파이프라인은 16 픽셀 폭의 데이터 경로(또는 더 넓음)로 구현되며, 따라서 벡터 실행 유닛(202)에 클럭당 최대 32 픽셀의 결과적인 데이터 출력을 생성하는 순수한 컴퓨팅 능력을 제공할 수 있다. 일 실시예에서, 스칼라 실행 유닛(201)은 클럭 단위로 스칼라 동작의 병렬 실행을 최적화하기 위해 VLIW 소프트웨어 코드를 이용하여 동작하도록 구성된 하드웨어를 포함한다. With continued reference to FIG. 2, scalar execution unit 201 may be implemented as a RISC style scalar execution unit that includes a RISC-based execution technique. The vector execution unit 202 can be implemented, for example, as a SIMD machine with one or more SIMD pipelines. For example, in the SIMD pipeline embodiment, each SIMD pipeline is implemented with a 16 pixel wide data path (or wider), thus outputting up to 32 pixels per clock to the vector execution unit 202. It can provide pure computing power to generate In one embodiment, scalar execution unit 201 includes hardware configured to operate using VLIW software code to optimize parallel execution of scalar operations on a clock basis.

도 2의 실시예에서, 스칼라 실행 유닛(201)은 스칼라 프로세서(210)에 연결된 명령 캐시(211) 및 데이터 캐시(212)를 포함한다. 캐시들(211, 212)은 예를 들어 프레임 버퍼(205)와 같은 외부 메모리로의 액세스를 위해 메모리 인터페이스(203)와 인터페이스한다. 스칼라 실행 유닛(201)은 벡터 실행 유닛(202)과의 통신을 설정하기 위한 벡터 인터페이스 유닛(213)을 더 포함한다. 일 실시예에서, 벡터 인터페이스 유닛(213)은 스칼라 실행 유닛(201)과 벡터 실행 유닛(202) 간의 비동기 통신을 가능하게 하도록 구성된 하나 이상의 동기 메일 박스(214)를 포함할 수 있다. In the embodiment of FIG. 2, the scalar execution unit 201 includes an instruction cache 211 and a data cache 212 coupled to the scalar processor 210. Caches 211 and 212 interface with memory interface 203 for access to external memory, such as, for example, frame buffer 205. The scalar execution unit 201 further includes a vector interface unit 213 for establishing communication with the vector execution unit 202. In one embodiment, the vector interface unit 213 may include one or more synchronous mailboxes 214 configured to enable asynchronous communication between the scalar execution unit 201 and the vector execution unit 202.

도 2의 실시예에서, 벡터 실행 유닛(202)은 벡터 실행 데이터 경로, 즉 벡터 데이터 경로(221)의 동작을 제어하도록 구성된 벡터 제어 유닛(220)을 포함한다. 벡터 제어 유닛(220)은 스칼라 실행 유닛(201)으로부터 명령 및 데이터를 수신하기 위한 커맨드 FIFO(225)를 포함한다. 벡터 제어 유닛(220)에 명령을 제공하도록 명령 캐시가 연결된다. 벡터 데이터 경로(221)에 입력 데이터를 제공하고 벡터 데이터 경로(221)로부터 결과적인 데이터를 수신하도록 데이터 저장 메모리(223)가 연결된다. 데이터 저장 메모리(223)는 벡터 데이터 경로(221)에 대한 명령 캐시 및 데이터 RAM으로서 기능한다. 명령 캐시(222) 및 데이터 저장 메모리(223)는 프레임 버퍼(205)와 같은 외부 메모리를 액세스하기 위해 메모리 인터페이스(203)에 연결된다. 도 2의 실시예는 또한 제2 데이터 벡터 경로(231) 및 각각의 제2 데이터 저장 메모리(223)(예를 들어, 점선)를 나타낸다. 제2 벡터 데이터 경로(231) 및 제2 데이터 저장 메모리(233)는 벡터 실행 유닛(202)이 2개의 벡터 실행 파이프라인(예를 들어, 듀얼 SIMD 파이프라인 구성)을 갖는 사례를 나타내도록 도시된다는 것을 이해해야 한다. 본 발명의 실시예들은 많은 수의 벡터 실행 파이프라인(예를 들어, 4, 8, 16 등)을 가진 벡터 실행 유닛에 적합하다. In the embodiment of FIG. 2, the vector execution unit 202 includes a vector control unit 220 configured to control the operation of the vector execution data path, ie the vector data path 221. The vector control unit 220 includes a command FIFO 225 for receiving instructions and data from the scalar execution unit 201. The instruction cache is connected to provide instructions to the vector control unit 220. Data storage memory 223 is coupled to provide input data to the vector data path 221 and to receive the resulting data from the vector data path 221. The data storage memory 223 functions as an instruction cache and data RAM for the vector data path 221. Instruction cache 222 and data storage memory 223 are coupled to memory interface 203 to access external memory, such as frame buffer 205. The embodiment of FIG. 2 also shows a second data vector path 231 and each second data storage memory 223 (eg, a dotted line). The second vector data path 231 and the second data storage memory 233 are shown to represent the case where the vector execution unit 202 has two vector execution pipelines (eg, dual SIMD pipeline configurations). You must understand that. Embodiments of the present invention are suitable for vector execution units having a large number of vector execution pipelines (eg, 4, 8, 16, etc.).

스칼라 실행 유닛(201)은 벡터 실행 유닛(202)에 대해 데이터 및 커맨드 입력을 제공한다. 일 실시예에서, 스칼라 실행 유닛(201)은 메모리 맵핑된 커맨드 FIFO(225)를 이용하여 벡터 실행 유닛(202)에 기능 호출들을 전송한다. 벡터 실행 유닛(202) 커맨드는 커맨드 FIFO(225) 내에 큐잉된다.The scalar execution unit 201 provides data and command inputs to the vector execution unit 202. In one embodiment, scalar execution unit 201 sends function calls to vector execution unit 202 using memory mapped command FIFO 225. The vector execution unit 202 command is queued in the command FIFO 225.

커맨드 FIFO(225)의 사용은 스칼라 실행 유닛(201)과 벡터 실행 유닛(202)을 효과적으로 분리한다. 스칼라 실행 유닛(201)은 그 자신의 개별 클럭 상에서 기능하여, 벡터 실행 유닛(202)의 클럭 주파수와 다르고 개별적으로 제어될 수 있는 그 자신의 개별 클럭 주파수로 동작할 수 있다. The use of command FIFO 225 effectively separates scalar execution unit 201 and vector execution unit 202. The scalar execution unit 201 can function on its own individual clock, operating at its own individual clock frequency that is different from the clock frequency of the vector execution unit 202 and can be controlled individually.

커맨드 FIFO(225)는 벡터 실행 유닛(202)이 요구 구동 유닛으로서 동작하는 것을 가능하게 한다. 예를 들어, 작업이 스칼라 실행 유닛(201)에서 커맨드 FIFO(225)로 핸드 오프된 후, 분리 비동기 방식으로 처리하기 위해 벡터 실행 유닛(202)에 의해 액세스될 수 있다. 벡터 실행 유닛(202)은 이런 식으로 필요에 따라 또는 요구에 따라 스칼라 실행 유닛(201)에 의해 그의 작업 부하를 처리한다. 이러한 기능은 벡터 실행 유닛(202)이 최대 성능이 요구되지 않을 때 (예를 들어, 하나 이상의 내부 클럭을 줄이거나 정지시킴으로써) 능력을 보존하는 것을 가능하게 한다. The command FIFO 225 enables the vector execution unit 202 to operate as a request drive unit. For example, a job may be handed off from scalar execution unit 201 to command FIFO 225 and then accessed by vector execution unit 202 for processing in a detached asynchronous manner. The vector execution unit 202 handles its workload in this way by the scalar execution unit 201 as needed or as required. This function enables the vector execution unit 202 to conserve capacity when maximum performance is not required (eg, by reducing or stopping one or more internal clocks).

비디오 처리 기능의 스칼라 부분(예를 들어, 스칼라 실행 유닛(201)에 의한 실행을 위해) 및 벡터 부분(예를 들어, 벡터 실행 유닛(202)에 의한 실행을 위해)으로의 분할은 비디오 프로세서(111)에 대해 구축된 비디오 처리 프로그램들이 개별 스칼라 소프트웨어 코드 및 벡터 소프트웨어 코드로 컴파일되는 것을 가능하게 한다. 스칼라 소프트웨어 코드 및 벡터 소프트웨어 코드는 개별적으로 컴파일된 후, 함께 링크되어 코히런트 애플리케이션을 형성할 수 있다. The division into a scalar portion (e.g., for execution by the scalar execution unit 201) and a vector portion (e.g., for execution by the vector execution unit 202) of the video processing function is performed by the video processor ( Video processing programs built for < RTI ID = 0.0 > 111 < / RTI > Scalar software code and vector software code can be compiled separately and then linked together to form a coherent application.

분할(partitioning)은 벡터 소프트웨어 코드 함수들이 스칼라 소프트웨어 코드 함수들과 별개로 다르게 작성되는 것을 가능하게 한다. 예를 들어, 벡터 함수들은 개별적으로(예를 들어, 상이한 시간에, 상이한 엔지니어 팀에 의해 등) 작성될 수 있으며, 스칼라 함수들(스칼라 스레드, 프로세스 등)에 의해/과 함께 사용하기 위해 하나 이상의 서브루틴 또는 라이브러리 함수로서 제공될 수 있다. 이것은 스칼라 소프트웨어 코드 및/또는 벡터 소프트웨어 코드의 개별적인 독립적 갱신을 가능하게 한다. 예를 들어, 벡터 서브루틴이 스칼라 서브루틴과 독립적으로 (예를 들어, 사전 배포된 프로그램, 배포된 프로그램의 기능을 향상시키기 위해 추가된 새로운 특징 등의 갱신을 통해) 갱신될 수 있으며, 그 역도 성립한다. 분할은 스칼라 프로세서(210)의 개별 캐시(예를 들어, 캐시 211, 212) 및 벡터 제어 유닛(220) 및 벡터 데이터 경로(221)의 개별 캐시(예를 들어, 캐시 222, 223)에 의해 용이해진다. 전술한 바와 같이, 스칼라 실행 유닛(201) 및 벡터 실행 유닛(202)은 커맨드 FIFO(225)를 통해 통신한다. Partitioning allows vector software code functions to be written separately from scalar software code functions. For example, vector functions may be written individually (eg, at different times, by different teams of engineers, etc.) and may be used in conjunction with / by scalar functions (scalar threads, processes, etc.) It can be provided as a subroutine or library function. This enables individual independent update of the scalar software code and / or the vector software code. For example, vector subroutines can be updated independently of scalar subroutines (eg, by updating pre-released programs, new features added to improve the functionality of the distributed program, etc.), and vice versa. Hold. Partitioning is facilitated by separate caches (eg, caches 211, 212) of the scalar processor 210 and individual caches (eg, caches 222, 223) of the vector control unit 220 and the vector data path 221. Become. As described above, the scalar execution unit 201 and the vector execution unit 202 communicate via the command FIFO 225.

도 3은 본 발명의 일 실시예에 따른 비디오 프로세서(111)용의 예시적인 소프트웨어 프로그램(300)을 나타내는 도면이다. 도 3에 도시된 바와 같이, 소프트웨어 프로그램(300)은 비디오 프로세서(111)에 대한 프로그래밍 모델의 속성을 나타내며, 이에 의해 스칼라 제어 스레드(301)가 벡터 데이터 스레드(302)와 함께 비디오 프로세서(111)에 의해 실행된다. 3 is a diagram illustrating an exemplary software program 300 for a video processor 111 in accordance with one embodiment of the present invention. As shown in FIG. 3, the software program 300 represents a property of the programming model for the video processor 111, whereby the scalar control thread 301 along with the vector data thread 302 may cause the video processor 111 to appear. Is executed by

도 3의 실시예의 소프트웨어 프로그램(300)의 예는 비디오 프로세서(111)에 대한 프로그래밍 모델을 나타내며, 이에 의해 스칼라 실행 유닛(301) 상의 스칼라 제어 프로그램(예를 들어, 스칼라 제어 스레드 301)이 벡터 실행 유닛(202) 상에서 서브루틴 호출(예를 들어, 벡터 데이터 스레드(302)을 실행한다. 소프트웨어 프로그램(300)의 예는 컴파일러 또는 소프트웨어 프로그래머가 비디오 처리 애플리케이션을 스칼라 부분(예를 들어, 제1 스레드) 및 벡터 부분(예를 들어, 제2 스레드)으로 분할한 사례를 나타낸다. An example of the software program 300 of the embodiment of FIG. 3 represents a programming model for the video processor 111, whereby a scalar control program (eg, scalar control thread 301) on the scalar execution unit 301 executes a vector. Executes a subroutine call (eg, vector data thread 302) on unit 202. An example of software program 300 is that a compiler or software programmer uses a scalar portion (e.g., a first thread) for a video processing application. ) And a vector portion (e.g., a second thread).

도 3에 도시된 바와 같이, 스칼라 실행 유닛(201) 상에서 실행되는 스칼라 제어 스레드(301)는 재빨리 작업 파라미터를 계산하고 이들 파라미터를 처리 작업의 대부분을 수행하는 벡터 실행 유닛(202)에 공급한다. 전술한 바와 같이, 2개의 스레드(301, 302)에 대한 소프트웨어 코드는 개별적으로 작성되고 컴파일될 수 있다. As shown in FIG. 3, the scalar control thread 301 executed on the scalar execution unit 201 quickly calculates job parameters and supplies these parameters to the vector execution unit 202 which performs most of the processing work. As mentioned above, the software code for the two threads 301, 302 can be written and compiled separately.

스칼라 스레드는 다음을 담당한다.Scala threads are responsible for:

1. 호스트 유닛(204)과의 인터페이싱 및 클래스 인터페이스의 구현1. Interfacing with Host Unit 204 and Implementation of Class Interface

2. 벡터 실행 유닛(202)의 초기화, 셋업 및 구성2. Initialization, setup and configuration of the vector execution unit 202

3. 루프 내의 작업 유닛들, 청크들 또는 작업 세트들 내의 알고리즘을 실행하여, 각각의 반복에 의해 3. Run the algorithm in the working units, chunks or working sets in the loop, with each iteration

a. 현재 작업 세트에 대한 파라미터가 계산되고,a. The parameters for the current working set are calculated,

b. 벡터 실행 유닛으로의 입력 데이터 전달이 개시되고,b. Input data delivery to the vector execution unit is started,

c. 벡터 실행 유닛으로부터의 출력 데이터의 전달이 개시된다.c. Delivery of the output data from the vector execution unit is started.

스칼라 스레드의 대표적인 실행 모델은 "파이어 앤드 포겟(fire-and-forget"이다. 파이어 앤드 포겟이라는 용어는, 비디오 기저 대역 처리 애플리케이션에 대한 대표적인 모델에 대해 커맨드 및 데이터가 스칼라 실행 유닛(201)으로부터 (예를 들어, 커맨드 FIFO(225)를 통해) 벡터 실행 유닛(202)으로 전송되고 알고리즘이 완료될 때까지 벡터 실행 유닛(202)으로부터 리턴 데이터가 존재하지 않는 속성을 지칭한다. A representative execution model of a scalar thread is "fire-and-forget." The term fire and fork means that commands and data are sent from the scalar execution unit 201 to the representative model for a video baseband processing application. Eg, via command FIFO 225) to the vector execution unit 202 and return data from the vector execution unit 202 until the algorithm is complete.

도 3의 프로그램(300) 예에서, 스칼라 실행 유닛(201)은 커맨드 FIFO(225) 내에 어떠한 공간도 더 이상 존재하지 않을 때까지(예를 들어, lend_of_alg &!cmd_fifo_full) 벡터 실행 유닛(202)에 대한 스케쥴링 작업을 유지한다. 스칼라 실행 유닛(201)에 의해 스케쥴링된 작업은 파라미터를 계산하고 파라미터를 벡터 서브루틴으로 전송한 후, 벡터 서브루틴을 호출하여 작업을 수행한다. 벡터 실행 유닛(202)에 의한 서브루틴(예를 들어, vector_funcB)의 실행은 주로 주 메모리(예를 들어, 시스템 메모리 115)로부터의 지연을 숨기기 위하여 적시에 지연된다. 따라서, 비디오 프로세서(111)의 아키텍처는 명령 및 데이터 트래픽 양자에 대해 벡터 실행 유닛(202) 측 상의 지연 보상 메카니즘을 제공한다. 이러한 지연 보상 메카니즘은 후술한다. In the program 300 example of FIG. 3, the scalar execution unit 201 is in the vector execution unit 202 until there is no longer any space in the command FIFO 225 (eg, lend_of_alg &! Cmd_fifo_full). Maintain scheduling work for The job scheduled by the scalar execution unit 201 calculates the parameter, sends the parameter to the vector subroutine, and then calls the vector subroutine to perform the job. Execution of the subroutine (eg, vector_funcB) by the vector execution unit 202 is delayed in a timely manner mainly to hide delays from main memory (eg, system memory 115). Thus, the architecture of video processor 111 provides a delay compensation mechanism on the vector execution unit 202 side for both instruction and data traffic. This delay compensation mechanism will be described later.

소프트웨어 프로그램(300)의 예는 2개 이상의 파이프라인(예를 들어, 도 2의 벡터 데이터 경로(221) 및 제2 벡터 데이터 경로(231))이 존재하는 사례에서 더 복잡하다는 점에 유의해야 한다. 마찬가지로, 소프트웨어 프로그램(300)의 예는 프로그램(300)이 2개의 벡터 실행 파이프라인을 가진 컴퓨터 시스템에 대해 작성되지만 단일 벡터 실행 파이프라인을 가진 시스템 상에서 실행될 수 있는 능력을 여전히 보유하는 상황에 대해 더 복잡할 것이다. It should be noted that the example of the software program 300 is more complicated in the case where there are two or more pipelines (eg, the vector data path 221 and the second vector data path 231 of FIG. 2). . Similarly, the example of software program 300 is more for situations where program 300 is written for a computer system with two vector execution pipelines but still retains the ability to run on a system with a single vector execution pipeline. It will be complicated.

따라서, 도 2 및 도 3의 설명에서 전술한 바와 같이, 스칼라 실행 유닛(201)은 벡터 실행 유닛(202) 상에서의 연산 개시를 담당한다. 일 실시예에서, 스칼라 실행 유닛(201)에서 벡터 실행 유닛(202)으로 전달된 커맨드는 아래의 주요 타입을 갖는다.Thus, as described above in the description of FIGS. 2 and 3, the scalar execution unit 201 is responsible for the start of computation on the vector execution unit 202. In one embodiment, the command passed from the scalar execution unit 201 to the vector execution unit 202 has the following main types.

1. 메모리로부터 벡터 실행 유닛(202)의 데이터 RAM으로 현재의 작업 설정 데이터를 전달하기 위해 스칼라 실행 유닛(201)에 의해 개시되는 판독 커맨드(예를 들어, memRd)1. Read command (eg, memRd) initiated by the scalar execution unit 201 to transfer the current job setting data from the memory to the data RAM of the vector execution unit 202.

2. 스칼라 실행 유닛(201)에서 벡터 실행 유닛(202)으로 전달되는 파라미터2. Parameters passed from scalar execution unit 201 to vector execution unit 202

3. 실행될 벡터 서브루틴의 PC(예를 들어, 프로그램 카운터) 형태의 실행 커맨드3. An execution command in the form of a PC (eg program counter) of the vector subroutine to be executed.

4. 벡터 연산의 결과를 메모리로 복사하기 위해 스칼라 실행 유닛(201)에 의해 개시되는 기입 커맨드(예를 들어, memWr)4. Write command initiated by scalar execution unit 201 to copy the result of the vector operation into memory (eg, memWr)

일 실시예에서, 벡터 실행 유닛(202)은 이들 커맨드의 수신시에 즉시 메모리 인터페이스(203)에 대해 memRd 커맨드를 스케쥴링한다(예를 들어, 프레임 버퍼(205)로부터 요청된 데이터를 판독하기 위해). 벡터 실행 유닛(202)은 또한 실행 커맨드를 검사하고, (캐시(222) 내에 존재하지 않는 경우) 실행될 벡터 서브루틴을 프리페치한다. In one embodiment, the vector execution unit 202 schedules the memRd command for the memory interface 203 upon receipt of these commands (eg, to read the requested data from the frame buffer 205). . The vector execution unit 202 also examines the execute command and prefetches the vector subroutine to be executed (if not present in the cache 222).

이 상황에서 벡터 실행 유닛(202)의 목적은 벡터 실행 유닛(202)이 현재의 실행 커맨드 상에서 작업하면서 다음 소수의 실행 커맨드의 명령 및 데이터 스트림을 미리 스케쥴링하는 것이다. 사전 스케쥴링 특징은 메모리 위치들로부터 명령/데이터를 페치하는 데 수반되는 지연을 효과적으로 숨긴다. 이러한 판독 요청을 재빨리 행하기 위하여, 벡터 실행 유닛(202), 데이터 저장 메모리(예를 들어, 223), 및 명령 캐시(예를 들어, 222)는 고속 최적 하드웨어를 이용하여 구현된다. The purpose of the vector execution unit 202 in this situation is for the vector execution unit 202 to preschedule the instruction and data stream of the next few execution commands while working on the current execution command. The prescheduling feature effectively hides the delays involved in fetching instructions / data from memory locations. To quickly make this read request, the vector execution unit 202, data storage memory (e.g., 223), and instruction cache (e.g., 222) are implemented using high speed optimal hardware.

전술한 바와 같이, 데이터 저장 메모리(예를 들어, 223)는 벡터 실행 유닛(202)의 작업 RAM으로서 기능한다. 스칼라 실행 유닛(201)은 데이터 저장 메모리가 FIFO의 집합인 것처럼 인식하고 그와 상호작용한다. FIFO는 비디오 프로세서(111)가 동작하는 "스트림"을 포함한다. 일 실시예에서, 스트림은 일반적으로 스칼라 실행 유닛(201)이 전송(예를 들어, 벡터 실행 유닛(202)에 대해)을 개시하는 입출력 FIFO이다. 전술한 바와 같이, 스칼라 실행 유닛(201) 및 벡터 실행 유닛(202)의 동작은 분리된다. As described above, the data storage memory (e.g., 223) functions as a working RAM of the vector execution unit 202. The scalar execution unit 201 recognizes and interacts with the data storage memory as a collection of FIFOs. The FIFO includes the "stream" in which the video processor 111 operates. In one embodiment, the stream is generally an input / output FIFO where the scalar execution unit 201 initiates a transmission (eg, to the vector execution unit 202). As described above, the operations of the scalar execution unit 201 and the vector execution unit 202 are separated.

입출력 스트림이 가득 찬 경우, 벡터 제어 유닛(220) 내의 DMA 엔진이 커맨드 FIFO(225)의 처리를 중지한다. 이것은 곧 커맨드 FIFO(225)가 가득 차게 한다. 스칼라 실행 유닛(201)은 커맨드 FIFO(225)가 가득 찬 때 벡터 실행 유닛(202)에 대한 추가 작업의 발행을 중지한다. When the input / output stream is full, the DMA engine in the vector control unit 220 stops processing of the command FIFO 225. This soon fills up the command FIFO 225. The scalar execution unit 201 stops issuing further work for the vector execution unit 202 when the command FIFO 225 is full.

일 실시예에서, 벡터 실행 유닛(202)은 입출력 스트림 외에 중간 스트림을 필요로 할 수 있다. 따라서, 전체 데이터 저장 메모리(223)는 스칼라 실행 유닛(201)과의 상호작용과 관련하여 스트림들의 집합으로 보여질 수 있다.In one embodiment, the vector execution unit 202 may require an intermediate stream in addition to the input and output streams. Thus, the entire data storage memory 223 can be viewed as a collection of streams in relation to interaction with the scalar execution unit 201.

도 4는 본 발명의 일 실시예에 따른 비디오 프로세서를 이용한 비디오와의 서브 픽처 혼합의 일례를 나타낸다. 도 4는 비디오 표면이 서브 픽처와 혼합된 후 ARGB 표면으로 변환되는 예시적인 사례를 나타낸다. 표면을 포함하는 데이터는 프레임 버퍼 메모리(205) 내에 휘도(Luma) 파라미터(412) 및 색도(Chroma) 파라미터(413)로서 위치한다. 도시된 바와 같이, 서브 픽처 픽셀 요소(414)도 프레임 버퍼 메모리(205) 내에 위치한다. 벡터 서브루틴 명령 및 파라미터(411)는 도시된 바와 같이 메모리(205) 내에 인스턴스화되어 있다. 4 illustrates an example of subpicture mixing with video using a video processor according to an embodiment of the present invention. 4 illustrates an example case where a video surface is mixed with a subpicture and then converted to an ARGB surface. The data comprising the surface is located in the frame buffer memory 205 as the Luma parameter 412 and the Chroma parameter 413. As shown, the subpicture pixel element 414 is also located within the frame buffer memory 205. Vector subroutine instructions and parameters 411 are instantiated in memory 205 as shown.

일 실시예에서, 각각의 스트림은 "타일"이라고 하는 데이터의 작업 2D 청크들의 FIFO를 포함한다. 이러한 실시예에서, 벡터 실행 유닛(202)은 각각의 스트림에 대해 판독 타일 포인터 및 기입 타일 포인터를 유지한다. 예를 들어, 입력 스트림에 대해, 벡터 서브 루틴이 실행될 때, 벡터 서브 루틴은 현재(판독) 타일로부터 소비하거나 판독할 수 있다. 그 배경에서, memRd 커맨드에 의해 데이터가 현재(기입) 타일로 전송된다. 벡터 실행 유닛은 또한 출력 스트림에 대한 출력 타일을 생성할 수 있다. 이어서, 이들 타일은 실행 커맨드에 이어지는 memWr0 커맨드에 의해 메모리로 이동된다. 이것은 타일들을 효과적으로 프리페치하며, 타일들이 조작될 준비가 되게 하여 지연을 효과적으로 숨긴다. In one embodiment, each stream includes a FIFO of working 2D chunks of data called "tiles." In this embodiment, the vector execution unit 202 maintains a read tile pointer and a write tile pointer for each stream. For example, for an input stream, when a vector subroutine is executed, the vector subroutine may consume or read from the current (read) tile. In the background, data is sent to the current (write) tile by the memRd command. The vector execution unit may also generate an output tile for the output stream. These tiles are then moved to memory by the memWr0 command following the execute command. This effectively prefetches the tiles and prepares the tiles to be manipulated to hide the delay effectively.

도 4의 서브 픽처 혼합 예에서, 벡터 데이터 경로(221)는 벡터 서브 루틴 명령 및 파라미터(411)(예를 들어, &v_subp_blend)의 인스턴스화된 인스턴스에 의해 구성된다. 이것은 라인 421로 도시되어 있다. 스칼라 실행 유닛(201)은 표면들의 청크들(예를 들어, 타일들)을 판독하고, 이들을 DMA 엔진(401)(예를 들어, 메모리 인터페이스(203) 내의)을 이용하여 데이터 저장 메모리(223)에 로딩한다. 로딩 동작은 라인 422, 423 및 424에 의해 도시된다. In the subpicture blending example of FIG. 4, the vector data path 221 is constructed by an instantiated instance of the vector subroutine instruction and parameter 411 (eg, & v_subp_blend). This is shown by line 421. The scalar execution unit 201 reads chunks (eg, tiles) of the surfaces and uses them to store the data storage memory 223 using the DMA engine 401 (eg, in the memory interface 203). Load in The loading operation is shown by lines 422, 423 and 424.

도 4를 계속 참조하면, 다수의 입력 표면이 존재하므로, 다수의 입력 스트림이 유지되는 것이 필요하다. 각각의 스트림은 대응 FIFO를 갖는다. 각각의 스트림은 상이한 수의 타일을 가질 수 있다. 도 4의 예는 서브 픽처 표면이 시스템 메모리(115)(예를 들어, 서브 픽처 픽셀 요소 414) 내에 있고, 따라서 추가 버퍼링(예를 들어, n, n+1, n+2, n+3 등)을 갖는 반면, 비디오 스트림(예를 들어, 휘도(412), 색도(413) 등)이 보다 적은 수의 타일을 가질 수 있는 사례를 나타낸다. 사용되는 버퍼/FIFO의 수는 스트림이 겪는 지연의 정도에 따라 조정될 수 있다. With continued reference to FIG. 4, there are multiple input surfaces, so multiple input streams need to be maintained. Each stream has a corresponding FIFO. Each stream may have a different number of tiles. The example of FIG. 4 shows that the subpicture surface is in system memory 115 (eg, subpicture pixel element 414) and thus additional buffering (eg, n, n + 1, n + 2, n + 3, etc.). ), While the video stream (eg, luminance 412, chromaticity 413, etc.) may have fewer tiles. The number of buffers / FIFOs used can be adjusted according to the degree of delay experienced by the stream.

전술한 바와 같이, 데이터 저장 메모리(223)는 지연을 숨기기 위하여 예측 프리페치 방법을 이용한다. 이 때문에, 데이터가 적절한 벡터 데이터 경로 실행 하드웨어(예를 들어, FIFO n, n+1, n+2 등으로 도시)에 대해 프리페치될 때, 스트림이 둘 이상의 타일 내에 데이터를 가질 수 있다. As described above, the data storage memory 223 uses a predictive prefetch method to hide the delay. Because of this, when data is prefetched for appropriate vector data path execution hardware (e.g., shown as FIFO n, n + 1, n + 2, etc.), the stream may have data in more than one tile.

데이터 저장 메모리가 로딩되면, FIFO는 벡터 데이터 경로 하드웨어(221)에 의해 액세스되고, 벡터 서브 루틴(예를 들어, 430)에 의해 조작된다. 벡터 데이터 경로 동작의 결과는 출력 스트림(403)을 포함한다. 이 출력 스트림은 스칼라 실행 유닛(201)에 의해 DMA 엔진(401)을 통해 프레임 버퍼 메모리(205)(예를 들어, ARGB_OUT 415)로 복사된다. 이것은 라인 425로 도시되어 있다. Once the data storage memory is loaded, the FIFO is accessed by the vector data path hardware 221 and manipulated by the vector subroutine (eg, 430). The result of the vector data path operation includes an output stream 403. This output stream is copied by the scalar execution unit 201 to the frame buffer memory 205 (eg, ARGB_OUT 415) via the DMA engine 401. This is shown by line 425.

이와 같이, 본 발명의 실시예들은 데이터 저장 메모리가 복수의 메모리 타일로서 추상화되는 스트림 처리의 중요한 양태를 이용한다. 따라서, 스트림은 순차적으로 액세스되는 타일들의 집합으로 볼 수 있다. 스트림들은 데이터를 프리페치하는 데 사용된다. 이 데이터는 타일의 형태를 갖는다. 타일들은 데이터가 발원되는 특정 메모리 소스(예를 들어, 시스템 메모리, 프레임 버퍼 메모리 등)로부터의 지연을 숨기기 위해 프리페치된다. 마찬가지로, 스트림들은 상이한 위치들(예를 들어, 벡터 실행 유닛에 대한 캐시, 스칼라 실행 유닛에 대한 캐시, 프레임 버퍼 메모리, 시스템 메모리 등)을 향할 수 있다. 스트림들의 또 하나의 특징은 이들이 일반적으로 예측 프리페치 모드로 타일들을 액세스한다는 것이다. 전술한 바와 같이, 지연이 클수록, 프리페치는 더 어렵고, 스트림에 대해 사용되는 버퍼링은 더 많다(예를 들어, 도 4에 도시된 바와 같이).As such, embodiments of the present invention utilize an important aspect of stream processing in which data storage memory is abstracted as a plurality of memory tiles. Thus, a stream can be viewed as a set of tiles that are sequentially accessed. Streams are used to prefetch data. This data is in the form of tiles. The tiles are prefetched to hide delays from the particular memory source from which the data originates (eg, system memory, frame buffer memory, etc.). Similarly, the streams may point to different locations (eg, cache for vector execution units, cache for scalar execution units, frame buffer memory, system memory, etc.). Another feature of the streams is that they generally access the tiles in predictive prefetch mode. As mentioned above, the greater the delay, the more difficult the prefetch is, and the more buffering is used for the stream (eg, as shown in FIG. 4).

도 5는 본 발명의 일 실시예에 따른 벡터 실행 유닛의 내부 컴포넌트들을 나타내는 도면이다. 도 5는 프로그램의 관점에서 벡터 실행 유닛(202)의 다양한 기능 유닛 및 레지스터/SRAM 자원의 배열을 나타낸다. 5 is a diagram illustrating internal components of a vector execution unit according to an embodiment of the present invention. 5 shows an arrangement of various functional units and register / SRAM resources of the vector execution unit 202 from the point of view of the program.

도 5의 실시예에서, 벡터 실행 유닛(202)은 비디오 기저 대역 처리의 성능 및 다양한 코덱(압축-압축 해제 알고리즘)의 실행을 위해 최적화된 VLIW 디지털 신호 프로세서를 포함한다. 따라서, 벡터 실행 유닛(202)은 비디오 처리/코덱 실행의 효율 향상을 지향하는 다수의 속성을 갖는다. In the embodiment of FIG. 5, the vector execution unit 202 includes a VLIW digital signal processor optimized for the performance of video baseband processing and execution of various codecs (compression-decompression algorithms). Thus, the vector execution unit 202 has a number of attributes aimed at improving the efficiency of video processing / codec execution.

도 5의 실시예에서, 속성들은 다음을 포함한다.In the embodiment of FIG. 5, the attributes include the following.

1. 다수의 벡터 실행 파이프라인의 포함을 위한 옵션을 제공함에 의한 스케일링 가능한 성능1. Scalable performance by providing options for inclusion of multiple vector execution pipelines

2. 파이프당 2개의 데이터 어드레스 생성기(DAG)의 할당2. Assignment of Two Data Address Generators (DAGs) per Pipe

3. 메모리/레지스터 피연산자3. Memory / Register Operands

4. 2D (x,y) 포인터/반복기4. 2D (x, y) pointers / repeaters

5. 디프(deep) 파이프라인(예를 들어, 11-12) 스테이지5. Deep pipeline (eg 11-12) stages

6. 스칼라(정수)/분기 유닛6. Scalar (integer) / branch unit

7. 가변 명령 폭(장/단 명령)7. Variable command width (long / short command)

8. 피연산자 추출을 위한 데이터 정렬기8. Data sorter for extracting operands

9. 대표적인 피연산자 및 결과의 2D 데이터 경로(4x4) 형상9. Representative Operands and Resulting 2D Data Path (4x4) Geometry

10. 원격 프로시저 호출을 실행하는 스칼라 실행 유닛에 대한 슬레이브 벡터 실행 유닛10. Slave vector execution unit for scalar execution unit executing remote procedure call

일반적으로, 벡터 실행 유닛(202)의 프로그래머의 뷰는 2개의 DAG(503)를 구비한 SIMD 데이터 경로로서이다. 명령들은 VLIW 방식으로 발행되며(예를 들어, 명령들은 벡터 데이터 경로(504) 및 어드레스 생성기(503)에 대해 동시에 발행된다), 명령 디코더(501)에 의해 디코딩되어 적절한 실행 유닛으로 발송된다. 명령들은 가변 길이를 가지며, 가장 일반적으로 사용되는 명령들은 짧은 형태로 인코딩된다. 풀 명령 세트는 VLIW 타입의 명령과 같이 긴 형태로 이용 가능하다. In general, the programmer's view of the vector execution unit 202 is as a SIMD data path with two DAGs 503. The instructions are issued in a VLIW manner (eg, instructions are issued simultaneously to the vector data path 504 and the address generator 503) and decoded by the instruction decoder 501 and sent to the appropriate execution unit. The instructions have a variable length, and the most commonly used instructions are encoded in short form. The full instruction set is available in the long form as a VLIW type instruction.

레전드(502)는 3개의 VLIW 명령을 가진 3개의 클럭 사이클을 나타낸다. 레전드(510)에 따르면, VLIW 명령들(502)의 최상위는 2개의 어드레스 명령(예를 들어, 2개의 DAG(503)에 대해) 및 벡터 데이터 경로(504)에 대한 하나의 명령을 포함한다. 중간 VLIW 명령은 하나의 정수 명령(예를 들어, 정수 유닛 505에 대해), 하나의 어드레스 명령 및 하나의 벡터 명령을 포함한다. 최하위 VLIW 명령은 분기 명령(예를 들어, 분기 유닛(506)에 대해), 하나의 어드레스 명령 및 하나의 벡터 명령을 포함한다. Legend 502 represents three clock cycles with three VLIW instructions. According to legend 510, the top of VLIW instructions 502 includes two address instructions (eg, for two DAGs 503) and one instruction for the vector data path 504. The intermediate VLIW instruction includes one integer instruction (eg, for integer unit 505), one address instruction and one vector instruction. The lowest VLIW instruction includes a branch instruction (eg, for branch unit 506), one address instruction and one vector instruction.

벡터 실행 유닛은 단일 데이터 파이프 또는 다수의 데이터 파이프를 갖도록 구성될 수 있다. 각각의 데이터 파이프는 로컬 RAM(예를 들어, 데이터 저장 메모리 511), 크로스바(516), 2개의 DAG(503), 및 SIMD 실행 유닛(예를 들어, 벡터 데이터 경로 504)으로 구성된다. 도 5는 하나의 데이터 파이프만이 인스턴스화된 설명을 위한 기본 구성을 나타낸다. 2개의 데이터 파이프가 인스턴스화될 때, 이들은 개별 스레드로서 또는 협동 스레드로서 실행될 수 있다. The vector execution unit can be configured to have a single data pipe or multiple data pipes. Each data pipe consists of local RAM (eg, data storage memory 511), crossbar 516, two DAGs 503, and a SIMD execution unit (eg, vector data path 504). 5 shows a basic configuration for description where only one data pipe is instantiated. When two data pipes are instantiated, they can run as individual threads or as cooperative threads.

6개의 상이한 포트(예를 들어, 4개의 판독 및 2개의 기입)가 어드레스 레지스터 파일 유닛(515)에 의해 액세스될 수 있다. 이들 레지스터는 스칼라 실행 유닛으로부터 또는 정수 유닛(505) 또는 어드레스 유닛(503)의 결과로부터 파라미터를 수신한다. DAG(503)는 또한 수집 제어기로서 기능하며, 데이터 저장 메모리(511; 예를 들어 RA0, RA1, RA2, RA3, WA0 및 WA1)의 내용에 어드레스하기 위해 레지스터들의 분배를 관리한다. 크로스바(516)가 주어진 명령을 구현하기 위해 출력 데이터 포트들(R0, R1, R2, R3)을 임의의 순서/조합으로 벡터 데이터 경로(504)에 할당하도록 연결된다. 벡터 데이터 경로(504)의 출력은 지시되는 바와 같이(예를 들어, W0) 데이터 저장 메모리(511)로 피드백될 수 있다. 상수 RAM(517)이 정수 유닛(505)에서 벡터 데이터 경로(504) 및 데이터 저장 메모리(511)로 자주 사용되는 피연산자를 제공하는 데 사용된다. Six different ports (eg, four reads and two writes) may be accessed by address register file unit 515. These registers receive parameters from scalar execution units or from the results of integer unit 505 or address unit 503. The DAG 503 also functions as a collection controller and manages the distribution of registers to address the contents of the data storage memory 511 (e.g. RA0, RA1, RA2, RA3, WA0 and WA1). Crossbar 516 is coupled to assign output data ports R0, R1, R2, R3 to the vector data path 504 in any order / combination to implement a given instruction. The output of the vector data path 504 can be fed back to the data storage memory 511 as indicated (eg, W0). Constant RAM 517 is used to provide operands that are frequently used in integer unit 505 to vector data path 504 and data storage memory 511.

도 6은 본 발명의 일 실시예에 따른 메모리(600)의 복수의 뱅크(601-604) 및 대칭 타일 어레이를 가진 데이터 저장 메모리(610)의 레이아웃을 나타낸다. 도 6에 도시된 바와 같이, 설명을 위해, 데이터 저장 메모리(610)의 일부만이 도시된다. 데이터 저장 메모리(610)는 논리적으로 타일들의 어레이(또는 어레이들)를 포함한다. 각각의 타일은 4x4 형태의 서브 타일들의 어레이이다. 물리적으로, 메모리(600)로 도시된 바와 같이, 데이터 저장 메모리(610)는 "N" 개의 물리적 메모리 뱅크(예를 들어, 뱅크 601-604)의 어레이 내에 저장된다. 6 shows a layout of a data storage memory 610 having a plurality of banks 601-604 and a symmetric tile array of a memory 600 according to one embodiment of the invention. As shown in FIG. 6, for the sake of explanation, only a portion of the data storage memory 610 is shown. Data storage memory 610 logically includes an array (or arrays) of tiles. Each tile is an array of 4x4 sub tiles. Physically, as shown by memory 600, data storage memory 610 is stored in an array of “N” physical memory banks (eg, banks 601-604).

또한, 데이터 저장 메모리(610)는 스트림 내의 논리적 타일을 시각적으로 도시한다. 도 6의 실시예에서, 이 타일은 16 바이트의 높이와 16 바이트의 폭을 갖는다. 이 타일은 서브 타일들의 어레이이다(이 예에서는 4x4). 각각의 서브 타일은 물리적 뱅크 내에 저장된다. 8개의 물리적 메모리 뱅크(예를 들어, 뱅크 0 내지 7)가 존재하는 경우, 이것은 도 6에서 각각의 4x4 서브 타일 내의 수로 표시된다. 뱅크들 내의 서브 타일들의 구성은 서브 타일들의 2x2 배열 내에 공통 뱅크가 존재하지 않도록 이루어진다. 이것은 어떠한 뱅크 충돌 없이 임의의 비정렬 액세스(예를 들어, x 및 y 방향 양자에서)를 가능하게 한다. Data storage memory 610 also visually illustrates logical tiles in the stream. In the embodiment of Figure 6, this tile has a height of 16 bytes and a width of 16 bytes. This tile is an array of subtiles (4x4 in this example). Each subtile is stored in a physical bank. If there are eight physical memory banks (e.g., banks 0-7), this is indicated by the number in each 4x4 subtile in FIG. The configuration of the subtiles in the banks is such that there is no common bank in the 2x2 array of subtiles. This allows any unaligned access (eg in both x and y directions) without any bank collision.

뱅크들(601-604)은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 예를 들어, 하나의 사례에서, 크로스바(516)는 뱅크(601)로부터 2x4 타일 세트(예를 들어, 뱅크(601)의 최초 2행)를 액세스할 수 있다. 다른 사례에서, 크로스바(516)는 2개의 인접 뱅크로부터 1x8 타일 세트를 액세스할 수 있다. 마찬가지로, 다른 사례에서, 크로스바(516)는 2개의 인접 뱅크로부터 8x1 타일 세트를 액세스할 수 있다. 각각의 사례에서, DAG/콜렉터(503)는 뱅크들이 크로스바(516)에 의해 액세스될 때 타일들을 수신하여, 이 타일들을 클럭 단위로 벡터 데이터 경로(504)의 프론트 엔드에 제공할 수 있다. Banks 601-604 are configured to support access to different tiles in each bank. For example, in one case, crossbar 516 may access a 2x4 tile set (eg, the first two rows of bank 601) from bank 601. In another example, crossbar 516 may access a 1x8 tile set from two adjacent banks. Likewise, in other cases, crossbar 516 may access an 8x1 tile set from two adjacent banks. In each case, the DAG / collector 503 may receive the tiles as the banks are accessed by the crossbar 516 and provide these tiles to the front end of the vector data path 504 in clock units.

이러한 방식으로, 본 발명의 실시예들은 집적 회로 실리콘 다이 면적, 트랜지스터 수, 메모리 속도 요건 등을 효율적으로 이용하면서 정교한 비디오 처리 기능들을 지원하는 새로운 비디오 프로세서 아키텍처를 제공한다. 본 발명의 실시예들은 다수의 비디오 스트림을 처리하기 위하여 높은 연산 밀도를 유지하며, 쉽게 스케일링이 가능하다. 본 발명의 실시예들은 예를 들어 MPEG-2/WMV9/H.264 인코드 지원(예를 들어, 루프내 디코더), MPEG-2/WMV9/H.264 디코드(예를 들어, 포스트 엔트로피 디코딩), 및 루프내/루프외 비블록킹 필터와 같은 다수의 정교한 비디오 처리 동작을 제공할 수 있다. In this manner, embodiments of the present invention provide a new video processor architecture that supports sophisticated video processing functions while efficiently utilizing integrated circuit silicon die area, transistor count, memory speed requirements, and the like. Embodiments of the present invention maintain a high computational density to process multiple video streams and are easily scalable. Embodiments of the present invention provide for example MPEG-2 / WMV9 / H.264 encode support (e.g., in-loop decoder), MPEG-2 / WMV9 / H.264 decode (e.g. post entropy decoding). And a number of sophisticated video processing operations such as in-loop and out-of-loop non-blocking filters.

본 발명의 실시예들에 의해 제공되는 추가적인 비디오 처리 동작은 예를 들어 향상된 모션 적응 디인터레이싱, 인코딩을 위한 입력 잡음 필터링, 다위상 스케일링/리샘플링, 및 서브 픽처 합성을 포함한다. 본 발명의 비디오 프로세서 아키텍처는 또한 예를 들어 칼라 공간 변환, 칼라 공간 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 조작, 및 다양한 비디오 표면 포맷 변환과 같은 소정의 비디오 프로세서-증폭기(프로캠프) 애플리케이션에 이용될 수 있다. Additional video processing operations provided by embodiments of the present invention include, for example, improved motion adaptive deinterlacing, input noise filtering for encoding, polyphase scaling / resampling, and subpicture synthesis. The video processor architecture of the present invention is also used in certain video processor-amplifier (procamp) applications, such as pixel point manipulation such as color space conversion, color space adjustment, sharpening, histogram adjustment, and various video surface format conversions, for example. Can be.

광범위하게 그리고 제한 없이, 본 발명은 다음을 개시하였다. 비디오 처리 동작을 실행하기 위한 지연 감내 시스템이 설명되었다. 이 시스템은 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스, 호스트 인터페이스에 연결되고 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛, 및 호스트 인터페이스에 연결되고 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛이 메모리 커맨드 FIFO를 액세스함으로써 요구 구동 기반으로 동작하게 하기 위한 커맨드 FIFO가 포함된다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 복수의 상이한 메모리 위치 간의 DMA 전달을 구현하고 벡터 실행 유닛에 대한 데이터 및 명령을 커맨드 FIFO에 로딩하기 위한 DMA 엔진이 메모리 인터페이스 내에 구축된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서가 설명되었다. 비디오 프로세서는 비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스를 포함한다. 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스가 포함된다. 스칼라 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 스칼라 비디오 처리 동작을 실행하도록 구성된다. 벡터 실행 유닛이 호스트 인터페이스 및 메모리 인터페이스에 연결되고, 벡터 비디오 처리 동작을 실행하도록 구성된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 다차원 데이터 경로 처리 시스템이 설명되었다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 벡터 실행 유닛에 대한 데이터를 저장하기 위한 데이터 저장 메모리가 포함된다. 데이터 저장 메모리는 어레이로 배열된 대칭 뱅크 데이터 구조들을 가진 복수의 타일을 포함한다. 뱅크 데이터 구조들은 각각의 뱅크의 상이한 타일들로의 액세스를 지원하도록 구성된다. 비디오 처리 동작을 실행하기 위한 비디오 프로세서용의 스트림 기반 메모리 액세스 시스템이 설명되었다. 비디오 프로세서는 스칼라 비디오 처리 동작을 실행하도록 구성된 스칼라 실행 유닛 및 벡터 비디오 처리 동작을 실행하도록 구성된 벡터 실행 유닛을 포함한다. 스칼라 실행 유닛 및 벡터 실행 유닛에 대한 데이터를 저장하기 위한 프레임 버퍼 메모리가 포함된다. 스칼라 실행 유닛 및 벡터 실행 유닛과 프레임 버퍼 메모리 간의 통신을 설정하기 위한 메모리 인터페이스가 포함된다. 프레임 버퍼 메모리는 복수의 타일을 포함한다. 메모리 인터페이스는 벡터 실행 유닛 또는 스칼라 실행 유닛에 대해 제1 순차적 타일 액세스를 포함하는 제1 스트림을 구현하고 제2 순차적 타일 액세스를 포함하는 제2 스트림을 구현한다. Broadly and without limitation, the present invention discloses the following. A delay tolerant system for performing video processing operations has been described. The system includes a host interface for implementing communication between the video processor and the host CPU, a scalar execution unit connected to the host interface and configured to execute a scalar video processing operation, and a vector execution connected to the host interface and configured to execute vector video processing operation. It includes a unit. A command FIFO is included for causing the vector execution unit to operate on a request drive basis by accessing the memory command FIFO. A memory interface is included for implementing communication between the video processor and the frame buffer memory. A DMA engine is built in the memory interface for implementing DMA transfers between a plurality of different memory locations and for loading data and instructions for the vector execution units into the command FIFO. A video processor for performing video processing operations has been described. The video processor includes a host interface for implementing communication between the video processor and the host CPU. A memory interface is included for implementing communication between the video processor and the frame buffer memory. A scalar execution unit is coupled to the host interface and the memory interface and configured to execute a scalar video processing operation. The vector execution unit is coupled to the host interface and the memory interface and is configured to execute the vector video processing operation. A multidimensional data path processing system for a video processor for performing video processing operations has been described. The video processor includes a scalar execution unit configured to execute a scalar video processing operation and a vector execution unit configured to execute a vector video processing operation. A data storage memory for storing data for the vector execution unit is included. The data storage memory includes a plurality of tiles with symmetrical bank data structures arranged in an array. Bank data structures are configured to support access to different tiles in each bank. A stream based memory access system for a video processor for performing video processing operations has been described. The video processor includes a scalar execution unit configured to execute a scalar video processing operation and a vector execution unit configured to execute a vector video processing operation. Frame buffer memory for storing data for the scalar execution unit and the vector execution unit is included. A memory interface for establishing communication between the scalar execution unit and the vector execution unit and the frame buffer memory is included. The frame buffer memory includes a plurality of tiles. The memory interface implements a first stream comprising a first sequential tile access and a second stream comprising a second sequential tile access for a vector execution unit or a scalar execution unit.

본 발명의 특정 실시예들의 전술한 설명은 예시 및 설명을 위해 제공되었다. 이들은 고갈적이거나 본 발명을 개시된 특정 형태로 한정하려는 것은 아니며, 위의 가르침에 비추어 많은 수정 및 변형이 가능하다. 실시예들은 발명의 원리 및 그의 실제 이용을 가장 잘 설명하여 이 분야의 전문가들이 고려된 특정 이용에 적합할 때 발명 및 다양한 수정이 이루어진 다양한 실시예를 가장 잘 이용할 수 있도록 하기 위하여 선택되고 설명되었다. 본 발명의 범위는 첨부된 청구범위 및 그의 균등물에 의해 정의되는 것을 의도한다. The foregoing descriptions of specific embodiments of the present invention have been presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed, and many modifications and variations are possible in light of the above teaching. The embodiments have been selected and described in order to best explain the principles of the invention and its practical use, so that those skilled in the art can best utilize the various embodiments in which the invention and various modifications have been made when suited for the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto and their equivalents.

부록 AAppendix A

1 개요1 Overview

VP2는 스칼라 제어 프로세서에 연결된 VLIW SIMD 비디오 DSP이다. 그의 주 초점은 비디오 코덱 및 비디오 기저 대역 처리이다. VP2 is a VLIW SIMD video DSP connected to a scalar control processor. His main focus is on video codecs and video baseband processing.

1.1 1.1 VP2VP2 .0의 정신Spirit of .0

- 효율: VP2.0은 perf/mm2 및 perf/mW의 면에서 비디오 애플리케이션들에 대한 연산 효율적인 머신이다. Efficiency: VP2.0 is a computationally efficient machine for video applications in terms of perf / mm2 and perf / mW.

- 프로그래밍 가능성: 매우 프로그래머블하고, 쉽게 호환 가능하며, 머신을 프로그래밍하는 데 보다 안전하다.Programmability: Very programmable, easily compatible, and safer to program the machine.

- 스케일링 가능성: VP2.0 설계/아키텍처는 다수의 애플리케이션 영역에 대한 성능 요건과 매칭되도록 스케일링 가능해야 한다.Scalability: The VP2.0 design / architecture must be scalable to match the performance requirements for multiple application areas.

1.2 설계 목표1.2 Design Goals

- 연산 밀도Computational density

- VP1.0보다 상당한 perf/mm2 이점을 제공한다.Provides significant perf / mm2 advantage over VP1.0.

- H.264와 같은 새로운 애플리케이션 영역의 효율적인 구현Efficient implementation of new application areas such as H.264

- SW 개발자의 부담을 덜어주는 HW에서의 지연 감내-Tolerate delays in HW to ease the burden on software developers

- 메모리 액세스 및 연산을 재배열함으로써 데이터 페치 지연을 숨김Hide data fetch delays by rearranging memory accesses and operations

- 명령 스트림의 자동 프리페치Automatic prefetch of command streams

- 데이터 경로 지연의 숨김-Hide data path delay

- 중간 결과의 선택적 전달-Selective delivery of intermediate results

- 스트리밍 연산 모델Streaming computation model

- 스케일링 가능성Scalability

- 구조적으로 VP2 벡터 유닛은 2x 만큼 위로, 그리고 1/2x 만큼 아래로 그의 데이터 경로를 스케일링할 수 있다. Structurally, the VP2 vector unit can scale its data path up by 2x and down by 1 / 2x.

- 선택적 리파이프라이닝에 의해 주파수 개선이 달성될 수 있다. Frequency improvement can be achieved by selective refining.

1.3 애플리케이션 1.3 Application 타겟target

VP2.0 설계 및 명령 세트는 다음의 애플리케이션을 매우 효율적으로 수행하도록 최적화된다.The VP2.0 design and instruction set are optimized to perform the following applications very efficiently.

- mpeg2/wmv9/H.264 인코드 지원(루프내 디코더)mpeg2 / wmv9 / H.264 encode support (in-loop decoder)

- mpeg2/wmv9/H.264 디코드(포스트 엔트로피 디코딩)mpeg2 / wmv9 / H.264 decode (post-entropy decoding)

- 루프내/루프외 디블록킹 필터In-loop / out-loop deblocking filter

- 향상된 모션 적응 디인터레이싱Enhanced motion adaptive deinterlacing

- 인코딩을 위한 입력 잡음 필터링Input Noise Filtering for Encoding

- 다위상 스케일링/리샘플링Multiphase Scaling / Resampling

- 서브 픽처 합성Subpicture Synthesis

- 프로캠프, 칼라 공간 변환, 조정, 샤프닝, 히스토그램 조정과 같은 픽셀 포인트 동작들 등Pixel point operations such as procamping, color space conversion, adjustment, sharpening, histogram adjustment, etc.

- 다양한 비디오 표면 포맷 변환 지원-Support various video surface format conversion

구조적으로 VP2.0은 다음 영역에서 효율적일 수 있다. Architecturally, VP2.0 can be efficient in the following areas.

- 2D 원시 함수, 블릿, 로테이트 등-2D primitive functions, bullets, rotates, etc.

- 정밀 기반 소프트웨어 모션 추정 알고리즘Precision-based Software Motion Estimation Algorithm

- 16/32 비트 MAC 애플리케이션16 / 32-bit MAC applications

2 최상위 레벨 아키텍처2 top-level architecture

VP2.0 머신은 스칼라 및 벡터 프로세서로 분할되어 있다. 벡터 프로세서는 스칼라 프로세서에 대해 슬레이브 코프로세서로서 동작한다. 스칼라 프로세서는 벡터 프로세서에 제어 스트림(파라미터, 서브 루틴 독립 변수)을 공급하고 벡터 프로세서로의 데이터 I/O를 관리하는 것을 담당한다. 알고리즘의 모든 제어 흐름은 스칼라 머신 상에서 실행되는 반면, 실제의 픽셀/데이터 처리 동작은 벡터 프로세서 상에서 행해진다. The VP2.0 machine is divided into scalar and vector processors. The vector processor operates as a slave coprocessor to the scalar processor. The scalar processor is responsible for supplying control streams (parameters, subroutine independent variables) to the vector processor and managing data I / O to the vector processor. All control flow of the algorithm is executed on the scalar machine, while the actual pixel / data processing operations are done on the vector processor.

스칼라 프로세서는 대표적인 RISC 스타일 스칼라이고, 벡터 코프로세서는 1 또는 2개의 SIMD 파이프(각 SIMD 파이프는 16 픽셀 데이터 경로를 가짐)를 가진 SIMD 머신이다. 따라서, 벡터 코프로세서는 순수 연산 능력으로서 결과의 최대 32 픽셀을 생성할 수 있다.The scalar processor is a representative RISC style scalar, and the vector coprocessor is a SIMD machine with one or two SIMD pipes (each SIMD pipe has a 16 pixel data path). Thus, the vector coprocessor can produce up to 32 pixels of the result with pure computing power.

스칼라 프로세서는 메모리 맵핑된 커맨드 FIFO를 이용하여 벡터 코프로세서에 기능 호출들을 전송한다. 코프로세서 커맨드는 이 FIFO에 큐잉된다. 스칼라 프로세서는 이 FIFO를 이용하여 벡터 프로세서로부터 완전히 분리된다. 스칼라 프로세서는 그 자신의 클럭 상에서 실행될 수 있다. 벡터 프로세서는 요구 구동 유닛으로서 동작한다.The scalar processor sends function calls to the vector coprocessor using a memory mapped command FIFO. Coprocessor commands are queued to this FIFO. The scalar processor uses this FIFO to completely separate it from the vector processor. The scalar processor can run on its own clock. The vector processor operates as a request drive unit.

VP2.0의 최상위 레벨도가 아래에 주어진다.The top level diagram of VP2.0 is given below.

Figure 112011005572915-pat00001
Figure 112011005572915-pat00001

VP2.O은 개별 스칼라 코드 및 벡터 코드로 컴파일된 후, 후에 함께 링크될 수 있다. 별개로, 벡터 함수들은 개별적으로 작성될 수 있으며, 서브 루틴 또는 라이브러리 함수로서 스칼라 스레드에 제공될 수 있다. 스칼라 프로세서는 그 자신의 명령 및 데이터 캐시를 갖는다. 벡터 유닛도 명령 캐시 및 데이터 RAM(데이터 저장 메모리로 지칭됨)을 갖는다. 이들 2개의 엔진은 분리되고, FIFO를 통해 통신한다. VP2.O can be compiled into separate scalar and vector code and then linked together later. Separately, vector functions can be written separately and provided to a scalar thread as a subroutine or library function. Scalar processors have their own instruction and data caches. The vector unit also has an instruction cache and a data RAM (referred to as data storage memory). These two engines are separated and communicate via FIFO.

3 단순 프로그래밍 모델3 Simple Programming Model

VP2.0에 대한 가장 간단한 프로그래밍 모델은 벡터 슬레이브 코프로세서 상에서 서브 루틴 호출을 실행하는 스칼라 제어 프로그램이다. 여기서 프로그래머는 문제를 2개의 스레드로 분해하였다는 고유한 가정이 존재한다. 스칼라 프로세서 상에서 실행되는 스레드는 재빨리 작업 파라미터를 계산하고 이들을 주 기계인 벡터 프로세서에 공급한다. 이들 2개의 스레드를 위한 프로그램은 개별적으로 작성되고 컴파일되는 것으로 예상된다.The simplest programming model for VP2.0 is a scalar control program that executes subroutine calls on the vector slave coprocessor. There is a unique assumption here that the programmer breaks down the problem into two threads. A thread running on a scalar processor quickly calculates job parameters and supplies them to the main machine, the vector processor. Programs for these two threads are expected to be written and compiled separately.

스칼라 스레드는 다음을 담당한다.Scala threads are responsible for:

1. 호스트 유닛과의 인터페이싱 및 클래스 인터페이스 구현1. Implement interface and class interface with host unit

2. 벡터 유닛의 초기화, 셋업 및 구성2. Initialization, setup and configuration of the vector unit

3. 루프 내의 작업 유닛들, 청크들 또는 작업 세트들 내의 알고리즘을 실행하여 각각의 반복은 3. Run the algorithm in the working units, chunks or working sets in the loop so that each iteration

a. 현재 작업 세트에 대한 파라미터를 계산한다.a. Calculate the parameters for the current working set.

b. 입력 데이터의 벡터 프로세서로의 전달을 개시한다.b. Initiates delivery of input data to the vector processor.

c. 벡터 프로세서로부터의 출력 데이터의 전달을 개시한다.c. Start delivery of output data from the vector processor.

스칼라 스레드의 대표적인 실행 모델은 파이어 앤드 포겟이다. 이것은 벡터 코프로세서로부터 리턴 데이터가 존재하지 않는 비디오 기저 대역 처리에 대한 대표적인 모델일 것으로 예상된다. 스칼라 프로세서는 커맨드 FIFO 내에 공간이 존재할 때까지 벡터 프로세서에 대한 스케쥴링 작업을 유지할 것이다. 벡터 프로세서에 의한 서브 루틴의 실행은 주로 주 메모리로부터의 지연으로 인해 적시에 지연된다. 따라서, 벡터 측에 지연 보상 메카니즘을 제공하는 것이 중요하다. VP2.0에서, 벡터 프로세서는 명령 및 데이터 트래픽 양자에 대한 지연 보상을 제공한다. 그를 위한 메카니즘이 섹션에서 요약된다. The typical execution model of Scala threads is Fire and Forget. This is expected to be a representative model for video baseband processing where there is no return data from the vector coprocessor. The scalar processor will keep scheduling for the vector processor until there is space in the command FIFO. Execution of subroutines by the vector processor is delayed in time, mainly due to delays from main memory. Therefore, it is important to provide a delay compensation mechanism on the vector side. In VP2.0, the vector processor provides delay compensation for both instruction and data traffic. The mechanism for him is summarized in the section.

대표적인 VP 프로그램은 아래와 같을 것이다.A typical VP program might look like this:

Figure 112011005572915-pat00002
Figure 112011005572915-pat00002

보다 복잡한 프로그래밍 모델은 2개의 데이터 파이프를 가질 때이다. 또는, 2개의 파이프에 대한 코드를 작성하고 이를 하나의 데이터 파이프 머신 상에서 실행시키기를 원할 때이다. 그를 위한 프로그래밍 모델은 섹션 6에서 조사된다.A more complex programming model is when you have two data pipes. Or, you may want to write code for two pipes and run them on one data pipe machine. The programming model for that is explored in section 6.

4 스트리밍 모델4 streaming models

앞에서 요약된 바와 같이, 스칼라 엔진은 벡터 프로세서 상의 연산 개시를 담당한다. 스칼라 엔진에서 벡터 엔진으로 전달되는 커맨드는 다음 주요 타입을 갖는다. As summarized above, the scalar engine is responsible for initiating operations on the vector processor. Commands sent from the scalar engine to the vector engine have the following main types:

1. 현재 작업 세트 데이터를 메모리에서 벡터 엔진의 데이터 RAM으로 전달하기 위해 스칼라에 의해 개시되는 판독 커맨드(memRd)1. Read command (memRd) initiated by scalar to transfer current working set data from memory to vector RAM in vector engine

2. 스칼라에서 벡터로 전달되는 파라미터2. Parameters passed from scalar to vector

3. 실행될 벡터 서브 루틴의 PC 형태의 실행 커맨드3. Execution command in PC form of vector subroutine to be executed

4. 벡터 연산의 결과를 메모리에 복사하기 위해 스칼라에 의해 개시되는 기입 커맨드(memWr)4. Write command (memWr) initiated by scalar to copy the result of the vector operation into memory

벡터 프로세서는 이들 커맨드의 수신시에 즉시 프레임 버퍼(FB) 인터페이스에 대해 memRd 커맨드를 스케쥴링한다. 또한, 실행 커맨드를 검사하고, 실행될 벡터 서브 루틴을 프리페치한다(캐시 내에 존재하지 않는 경우). 하나의 목적은 벡터 엔진이 현재 실행 커맨드 상에서 작업하고 있는 동안 다음 소수의 실행 커맨드의 명령 및 데이터 스트림을 미리 스케쥴링하는 것이다. 이러한 판독 요청을 재빨리 행하기 위하여, 벡터 엔진은 하드웨어에서 데이터 저장 메모리 및 명령 캐시를 관리한다. The vector processor schedules the memRd command for the frame buffer (FB) interface upon receipt of these commands. It also checks the execute command and prefetches the vector subroutine to be executed (if not present in the cache). One purpose is to preschedule the instruction and data streams of the next few execution commands while the vector engine is currently working on the execution commands. To quickly make this read request, the vector engine manages data storage memory and instruction cache in hardware.

데이터 저장 메모리는 벡터 프로세서의 작업 RAM이다. 스칼라 프로세서는 이 데이터 저장 메모리를 FIFO 또는 스트림의 집합으로 본다. 스트림들은 본질적으로 스칼라가 전달을 개시하는 입출력 FIFO이다. 입출력 스트림이 가득 차면, 벡터 DMA 엔진은 스칼라로부터 커맨드 FIFO의 처리를 중지하며, 곧 가득 차게 된다. 따라서, 스칼라는 벡터 엔진에 대한 더 이상의 작업 발행을 중지한다. 입출력 스트림 외에, 벡터는 중간 스트림을 필요로 할 수 있다. 따라서, 전체 데이터 저장 메모리는 스칼라 측으로부터 스트림의 집합으로서 보여질 수 있다. 각각의 스트림은 타일이라고 하는 작업 2D 청크들의 FIFO이다. 벡터 프로세서는 각각의 스트림에 대해 판독 타일 포인터 및 기입 타일 포인터를 유지한다. 입력 스트림에 대해, 벡터 서브 루틴이 실행될 때, 현재(판독) 타일로부터 소비하거나 판독할 수 있다. 그 배경에서, 데이터는 memRd 커맨드에 의해 현재(기입) 타일로 전송된다. 벡터 프로세서는 또한 출력 스트림에 대한 출력 타일을 생성할 수 있다. 이어서, 이 타일들은 실행 커맨드에 이어지는 memWr() 커맨드에 의해 메모리로 이동된다. The data storage memory is the working RAM of the vector processor. Scalar processors see this data storage memory as a set of FIFOs or streams. The streams are essentially input / output FIFOs where Scala initiates delivery. When the input / output stream is full, the vector DMA engine stops processing the command FIFO from the scalar and is soon full. Thus, Scala stops publishing more jobs for the vector engine. In addition to the input and output streams, vectors may require intermediate streams. Thus, the entire data storage memory can be seen as a collection of streams from the scalar side. Each stream is a FIFO of working 2D chunks called tiles. The vector processor maintains a read tile pointer and a write tile pointer for each stream. For an input stream, when a vector subroutine is executed, it can consume or read from the current (read) tile. In that background, data is sent to the current (write) tile by the memRd command. The vector processor may also generate an output tile for the output stream. These tiles are then moved to memory by the memWr () command following the execute command.

이 모델은 비디오와의 서브 픽처 혼합에 대한 예로 설명된다. 예를 들어, 비디오 표면(예를 들어, NV12 포맷)이 서브 픽처와 혼합된 후 ARGB 표면으로 변환되는 간단한 예를 고려한다. 이들 표면은 메모리 내에 위치한다. 스칼라 프로세서는 이들 표면의 청크들(타일들)을 판독하여 이들을 데이터 저장 메모리 내에 로딩한다. 다수의 입력 표면이 존재하므로, 다수의 입력 스트림을 유지해야 한다. 각각의 스트림은 상이한 수의 타일을 가질 수 있는 반면(예를 들어, 이 예에서, 서브 픽처 표면이 시스템 메모리 내에 있는 것으로 가정할 수 있고, 따라서 그것을 더 버퍼링해야 한다), 비디오 스트림은 보다 적은 수의 타일들을 가질 수 있다. This model is described as an example of subpicture mixing with video. For example, consider a simple example where a video surface (eg, NV12 format) is mixed with a subpicture and then converted to an ARGB surface. These surfaces are located in the memory. The scalar processor reads chunks (tiles) of these surfaces and loads them into data storage memory. Since there are multiple input surfaces, it is necessary to maintain multiple input streams. Each stream can have a different number of tiles (eg, in this example, it can be assumed that the subpicture surface is in system memory, and therefore must buffer it further), but the video stream has fewer May have tiles.

Figure 112011005572915-pat00003
Figure 112011005572915-pat00003

5 벡터 코프로세서5 Vector Coprocessor

VP2의 벡터 코프로세서는 비디오 기저대역 처리 및 코덱을 위해 설계된 VLIW DSP이다. 이 프로세서의 몇 가지 중요한 설계 속성은 다음을 포함한다.The VP2's vector coprocessor is a VLIW DSP designed for video baseband processing and codecs. Some important design attributes of this processor include:

1. 스케일링 가능한 성능, 1 또는 2개의 데이터 파이프.1. Scalable performance, 1 or 2 data pipes.

2. 각각의 파이프가 2개의 데이터 어드레스 생성기(DAG)를 구비한다.2. Each pipe has two data address generators (DAGs).

3. 메모리/레지스터 피연산자3. Memory / Register Operands

4. 2D (x,y) 포인터/반복기4. 2D (x, y) pointers / repeaters

5. 디프 파이프라인 (11-12) 스테이지5. Deep pipeline (11-12) stage

6. 스칼라(정수)/분기 유닛6. Scalar (integer) / branch unit

7. 가변 명령 폭(긴/짧은 명령)7. Variable command width (long / short command)

8. 피연산자 추출을 위한 데이터 정렬기8. Data sorter for extracting operands

9. 대표적인 피연산자 및 결과의 2D 데이터 경로 (4x4) 형상9. Representative Operands and Resulting 2D Data Path (4x4) Geometry

10. 스칼라 프로세서에 대한 슬레이브 프로세서, 원격 프로시저 호출을 실행한다.10. Execute the slave processor, remote procedure call to the scalar processor.

벡터 코프로세서의 프로그래머의 뷰는 가장 간단한 용어로 2개의 DAG를 구비한 SIMD 데이터 경로이다. 명령들은 VLIW 방식으로 발행된다(즉, 명령들은 벡터 데이터 경로 및 어드레스 생성기에 대해 동시에 발행된다). 명령들은 가변 길이를 가지며, 가장 일반적으로 사용되는 명령들은 짧은 형태로 인코딩된다. 풀 명령 세트는 긴 형태로 이용 가능하다. 예를 들어, 프로그래머의 관점에서, 다양한 기능 유닛 및 레지스터/SRAM 자원들의 배열은 아래 나타낸 바와 같다. The programmer's view of the vector coprocessor is, in simplest terms, a SIMD data path with two DAGs. The instructions are issued in a VLIW manner (ie, the instructions are issued simultaneously for the vector data path and address generator). The instructions have a variable length, and the most commonly used instructions are encoded in short form. The full instruction set is available in long form. For example, from the programmer's perspective, the arrangement of the various functional units and register / SRAM resources is as shown below.

Figure 112011005572915-pat00004
Figure 112011005572915-pat00004

벡터 유닛은 단일 데이터 파이프 또는 듀얼 데이터 파이프를 인스턴스화한다. 각각의 데이터 파이프는 로컬 RAM(데이터 저장 메모리), 2개의 DAG 및 SIMD 실행 유닛으로 구성된다. 기본 구성에 있어서는 하나의 데이터 파이프만이 존재한다. 2개의 데이터 파이프가 존재할 때, 이들은 독립적인 스레드로서 또는 협동 스레드로서 실행될 수 있다. 벡터 프로세서의 완전한 파이프라인도가 아래에 기술된다. 여기서, 전체 구성은 2개의 데이터 파이프를 갖는다.The vector unit instantiates a single data pipe or dual data pipes. Each data pipe consists of local RAM (data storage memory), two DAGs, and a SIMD execution unit. There is only one data pipe in the basic configuration. When there are two data pipes, they can run as independent threads or as cooperative threads. The complete pipeline diagram of the vector processor is described below. Here, the overall configuration has two data pipes.

Figure 112011005572915-pat00005
Figure 112011005572915-pat00005

6 향상된 프로그래밍 모델6 Improved Programming Model

섹션 3에서, 기본 아키텍처를 설명하기 위하여 RPC 모델이 소개되었다. 이 섹션에서는 보다 향상된 개념이 소개된다.In section 3, the RPC model was introduced to describe the basic architecture. In this section, more advanced concepts are introduced.

6.1 6.1 듀얼Dual 데이터 파이프 구성 Data pipe configuration

듀얼 파이프 구성에서는 아래의 프로세서 자원들이 공유된다.In a dual pipe configuration, the following processor resources are shared.

- 스칼라 제어기-Scalar controller

- 벡터 코프로세서 내의 벡터 제어 유닛-Vector control unit in the vector coprocessor

- 명령/데이터 페치를 위한 DMA 엔진DMA engine for command / data fetch

- 명령 캐시(듀얼 포트화될 수 있다)Instruction cache (can be dual ported)

다음의 자원들이 복제된다.The following resources are duplicated.

- 데이터 파이프(어드레스/분기/벡터 실행 유닛)Data pipes (addresses / branches / vector execution units)

- 데이터 저장 메모리Data storage memory

- 레지스터 파일-Register file

다음과 같은 점에 유의해야 한다.Note the following:

1. 1 파이프만을 가진 인스턴스 상에서 2 파이프에 대해 프로그램이 작성될 수 있다. 벡터 제어 유닛은 동일 물리적 파이프 상에 각 파이프에 대한 실행 커맨드를 맵핑할 것이다. 그러나, 양 파이프에 대한 스트림이 단지 하나의 데이터 저장 메모리에만 존재하므로, 데이터 저장소의 크기는 조정되어야 한다. 간단한 방법은 타일 크기를 줄이거나 스트림 내의 타일들의 수를 반감시키는 것이다. 이것은 구성시에 스칼라 스레드에 의해 행해진다. 마이크로 아키텍처 스테이지에서 해결되어야 하는 글로벌 레지스터의 복제 및 스트림 맵핑과 같은 문제가 존재한다. 1. A program can be written for two pipes on an instance with only one pipe. The vector control unit will map the execute command for each pipe on the same physical pipe. However, since the streams for both pipes exist in only one data storage memory, the size of the data storage must be adjusted. A simple way is to reduce the tile size or halve the number of tiles in the stream. This is done by a scalar thread at construction time. Problems exist such as replication of global registers and stream mapping that must be addressed at the micro-architecture stage.

2. 1 파이프에 대해 작성된 프로그램은 2 파이프를 가진 인스턴스 상에서 실행될 수 있다. 그러나, 이 코드는 하나의 파이프 상에서만 실행되고 나머지 파이프는 사용하지 않는다. 머신은 절반이 유휴 상태가 된다.2. A program written on 1 pipe can run on an instance with 2 pipes. However, this code runs on only one pipe and never uses the other. The machine is half idle.

3. 2개의 완전히 상이한 스레드를 각각 실행하는 2 파이프에 대해 프로그램이 작성될 수 있다. 멀티 스레드화되지 않은 단일 스칼라만을 구비하므로, 이것은 바람직하지 않을 수 있다. 하나의 스칼라 실행 스레드만을 지원하므로, 이것은 바람직하지 않을 수 있지만, 이 모델은 지원될 수도 있다. 3. A program can be written for two pipes, each running two completely different threads. This may be undesirable as it only has a single scalar that is not multithreaded. Since only one scalar execution thread is supported, this may not be desirable, but this model may be supported.

4. 동일 스레드를 각각 실행하는 2 파이프에 대해 프로그램이 작성될 수 있다. 이것은 대부분의 비디오 기저대역 처리와 같은 병렬 가능 알고리즘에 대해 예상되는 대표적인 모델이다. 이것은 비디오의 2개의 스트림 또는 2개의 절반 등에서 동작하기 위해 동일 명령 스트림을 사용하는 것을 허용한다. 각각의 데이터 파이프는 그 자신의 실행 유닛 및 데이터 저장소를 갖는다. 스칼라 제어기는 2개의 데이터 파이프를 제공해야 한다. 그러나, 파라미터, 판독 및 기입 커맨드는 서로 관련되며(오프셋), 따라서 스칼라 성능 요건이 정확하게 2배로 상승하는 것은 아니다. 이 모델의 일례가 아래에 도시된다.4. A program can be written for two pipes each running the same thread. This is a representative model expected for parallelable algorithms such as most video baseband processing. This allows using the same instruction stream to operate on two streams of video, two halves, and so forth. Each data pipe has its own execution unit and data store. Scalar controllers must provide two data pipes. However, the parameters, read and write commands are related to each other (offset), so the scalar performance requirements do not exactly double. An example of this model is shown below.

Figure 112011005572915-pat00006
Figure 112011005572915-pat00006

5. 2개의 협동 스레드를 갖는 프로그램이 작성될 수 있다. 이것은 단일 스칼라 제어 스레드를 갖지만 다수의 기능적인 벡터 기능 블록이 함께 접속되는 것이 필요할 수 있는 코덱에 대해 예상되는 모델이다. 이것은 기능 블록들의 다이렉트-쇼우 핀 모델과 유사하다. 이러한 애플리케이션의 일례가 아래 도시된다. 이 모델은 단지 2개의 협동 스레드로 제한되는데, 이는 2개의 데이터 파이프만을 갖기 때문이다. 또 하나의 제한은 스레드들이 2개의 스레드 사이에 균형을 이루어야 한다는 것이다. 그렇지 않으면 성능 손실이 발생한다. 이러한 제한 내에서, 이 모델은 2개의 데이터 파이프 상에서 동작하며, 또한 단일 파이프로 스케일링될 수 있다. 5. A program with two cooperative threads can be written. This is the expected model for codecs that have a single scalar control thread but may require that multiple functional vector function blocks be connected together. This is similar to the direct-show pin model of functional blocks. An example of such an application is shown below. This model is limited to only two cooperative threads, because it has only two data pipes. Another limitation is that threads must balance between two threads. Otherwise, there is a performance loss. Within this limitation, this model operates on two data pipes and can also be scaled to a single pipe.

Figure 112011005572915-pat00007
Figure 112011005572915-pat00007

6. 2개의 데이터 파이프가 서로 동기화될 수 있다. 동기화에 대한 기본 접근법은 데이터 구동 방식이다. 벡터 함수들은 데이터가 프로세스에 이용 가능할 때 실행된다. 스트림들은 메모리로부터의 판독들 또는 다른 데이터 파이프로부터의 기입들에 의해 채워진다. 데이터가 이용 가능하면, 벡터 제어 유닛은 실행 커맨드를 활성화시켜 실행한다. 스트림들은 또한 카운팅 세마포어로서 사용될 수 있다. 스칼라 제어기 및 벡터 데이터 파이프 양자는 타일 포인터들을 증감시킬 수 있으며, 데이터 전달이 존재하지 않는 경우에도 스트림 기술자를 카운팅 세마포어로서 사용할 수 있다. 6. Two data pipes can be synchronized with each other. The basic approach to synchronization is data driven. Vector functions are executed when data is available to the process. The streams are filled by reads from memory or writes from other data pipes. If data is available, the vector control unit activates and executes the execute command. Streams can also be used as counting semaphores. Both the scalar controller and the vector data pipe can increment or decrement the tile pointers and use the stream descriptor as counting semaphore even when no data transfer exists.

보충 개요:Supplementary summary:

일반적으로, 본 발명의 실시예들은 다음을 수행한다.In general, embodiments of the present invention perform the following.

1. 매체 알고리즘의 스칼라 및 벡터 부분으로의 분해1. Decomposition into scalar and vector parts of media algorithms

오프 더 셀프 스칼라 설계, 이는 또한 전력 및 성능 요건에 기초하여 상이한 클럭 속도로 스칼라 및 벡터 부분을 실행할 수 있는 능력을 제공한다. Off the self scalar design, which also provides the ability to run scalar and vector portions at different clock rates based on power and performance requirements.

2. 스트림 처리2. Stream Processing

3. 2D 데이터 경로 처리3. 2D data path processing

4. 지연 숨김(데이터 및 커맨드 페치 양자에 대해)4. Lazy hide (for both data and command fetch)

애플리케이션 영역Application area

숨김:hiding:

연산 코드 숨김Opcode hidden

암호화 프로그램은 단지 칩을 숨길 수 있다. 스칼라/제어기 블록은 단지 특정 동작이 수행되는 것을 요구하며, 암호화 엔진은 명령 등을 페치할 것이다. 스칼라는 심지어 알고리즘이 실행되고 있는지를 알 수 없으므로, 매우 안전하다. 이것은 사용자로부터 암호화 알고리즘을 숨기기 위한 메카니즘을 제공한다. The encryption program can only hide the chip. The scalar / controller block only requires certain operations to be performed, and the crypto engine will fetch instructions and the like. Scala is very safe because it doesn't even know if the algorithm is running. This provides a mechanism for hiding the encryption algorithm from the user.

2D2D

VP2 명령 세트 아키텍처는 2D 처리를 위한 명령들을 지원한다. 이들은 많은 GUI/윈도우 시스템에 사용되는 ROP3 및 ROP4 지원을 포함한다. 이것은 매체 프로세서가 매체 프로세서 상에서 2D 연산을 실행하는 것을 가능하게 한다. 여기서 고유한 이점은 전력 절감이다. The VP2 instruction set architecture supports instructions for 2D processing. These include the ROP3 and ROP4 support used in many GUI / windows systems. This allows the media processor to execute 2D operations on the media processor. The unique advantage here is power savings.

ISAISA

명령 슬롯으로서의 조건 코드:Condition code as an instruction slot:

조건 코드 연산을 위해 (다중 발행 명령 번들 내의) 개별 발행 슬롯을 구비한다. 종래 기술은 조건 코드/술어 레지스터에 영향을 미칠 수도 있는 사람 사용 SIMD 명령이다. 그러나, VP2에서 취해지는 접근법에서, 데이터 처리 및 술어 레지스터 처리는 독립적으로 스케쥴링되어, 보다 높은 성능을 얻을 수 있다. Have individual issue slots (in a multiple issue instruction bundle) for condition code operations. The prior art is a human use SIMD instruction that may affect the condition code / predicate register. However, in the approach taken in VP2, data processing and predicate register processing can be scheduled independently, resulting in higher performance.

메모리 I/OMemory I / O

마이크로코드화된 DMA 엔진:Microcoded DMA Engine:

DMA 엔진은 스트림에 대한 데이터 프리페치, 데이터 스트림 포맷팅, 에지 패딩 등과 같은 다양한 동작을 수행하도록 프로그래밍될 수 있다(또는 그 자신의 작은 마이크로코드를 가질 수 있다). 일반적으로, 프로그래머블 DMA 엔진이며, 유선 기능은 없다. 따라서, 메모리 I/O 프로세서와 매체 처리 코어의 조합은 전체 시스템 레벨 성능을 향상시킨다. 매체 프로세서 코어는 데이터 I/O 처리를 행해야 하는 부담이 없다. The DMA engine can be programmed (or have its own small microcode) to perform various operations, such as data prefetch, stream stream formatting, edge padding, and so on. Generally, it is a programmable DMA engine and has no wired functionality. Thus, the combination of memory I / O processors and media processing cores improves overall system level performance. The media processor core is not burdened with data I / O processing.

메모리 계층 구조:Memory hierarchy:

VP2 아키텍처에서, 메모리 계층 구조는 메모리 BW를 최소화하는 것은 물론 지연 보상을 제공하도록 최적화된다. 다음과 같은 많은 상이한 스킴이 제공된다.In the VP2 architecture, the memory hierarchy is optimized to provide delay compensation as well as to minimize memory BW. Many different schemes are provided, including:

- 스크래치 RAM으로서 벡터 코어에게 보일 수 있는 스트리밍 데이터 저장소의 제1 레벨. 스칼라 프로세서에 의해 생성된 요구 스트림을 사전에 조사하도록 HW에 의해 관리된다. 이 데이터 저장소는 데이터 재사용을 위한 L2 캐시에 의해 옵션으로 보강된다. L2 캐시는 스트림 기반으로 개별 섹터들로 분할될 수 있다. The first level of streaming data storage that can be seen by the vector core as scratch RAM. Managed by the HW to examine the request stream generated by the scalar processor in advance. This data store is optionally augmented by the L2 cache for data reuse. The L2 cache may be divided into individual sectors on a stream basis.

- 스트리밍 데이터 저장소에 의해 보강된 L1 캐시. 데이터 저장소는 다음 관련 데이터 세트를 프리페치하였다.L1 cache augmented by streaming data store. The data store prefetched the following related data sets.

- 스트림 포인터를 데이터 태그로서 사용하는 캐시-Cache using the stream pointer as the data tag

- 스칼라 생성 스트림 어드레스를 이용한 L1 데이터 저장소 및 L2 캐시의 프리페치/캐싱Prefetch / caching of L1 data store and L2 cache using scalar generated stream addresses

최적화된 스칼라-벡터 통신 링크:Optimized scalar-vector communication link:

MemRd/Wr 포맷:MemRd / Wr Format:

시스템 메모리를 로컬 메모리로 판독 및 기입하기 위한 스칼라로부터의 콤팩트 커맨드. DMA 엔진을 관리하는 데 필요한 제어 흐름 대역폭 상에 저장한다. 동시에 지원 트랜잭션들의 타입을 제한하지 않는다.Compact command from scalar to read and write system memory to local memory. Store on the control flow bandwidth needed to manage the DMA engine. At the same time, it does not limit the types of supported transactions.

벡터 L2에 대한 스칼라-벡터에 관한 고찰:Considerations on scalar-vectors for vector L2:

통신 대역폭을 줄이기 위해 파라미터 변경자 및 반복기를 지원하는 파라미터 압축.Parameter compression to support parameter modifiers and repeaters to reduce communication bandwidth.

파이프라인 캐시:Pipeline Cache:

파이프라인화된 명령 캐시. 다음과 같이 다양한 스킴이 지원된다.Pipelined instruction cache. Various schemes are supported as follows.

- 벡터와 스칼라 프로세서 사이의 인 플라이트 실행을 추적함으로써 각 캐시 라인의 수명을 관리한다. 이것은 벡터 프로세서가 실행을 시작하기 전에 명령들이 준비되는 것을 가능하게 한다. 명령들이 아직 캐시 내에 있지 않은 경우, 명령들은 프리페치된다. Manage the life of each cache line by tracking in-flight execution between vectors and scalar processors. This allows the instructions to be prepared before the vector processor starts executing. If the instructions are not yet in the cache, the instructions are prefetched.

- 적은 지연 구성에 대해, 명령 캐시는 작은 FIFO로 변경됨으로써 최소화된다. FIFO 내의 기존 실행들이 재이용될 수 있으며, 그렇지 않은 경우 다시 페치된다. For low latency configurations, the instruction cache is minimized by changing to a small FIFO. Existing runs in the FIFO can be reused, otherwise fetched again.

전체 아키텍처:Full architecture:

데이터 저장소는 다양한 처리 요소 사이에 공유될 수 있다. 이들은 스트림을 통해 통신하며 서로 공급할 수 있다. 이 아키텍처는 SIMD 벡터 코어들, DMA 엔진들, 스트림을 통해 접속된 고정 함수 유닛들과 같은 한 세트의 이종 기능 유닛들을 구상한다. The data store can be shared between the various processing elements. They can communicate via a stream and feed each other. This architecture envisions a set of heterogeneous functional units such as SIMD vector cores, DMA engines, fixed function units connected via a stream.

연산/DPArithmetic / DP

임의/유연 형상/절반 파이프:Arbitrary / flexible shape / half pipe:

데이터 경로는 가변 형상들 상에서 동작한다. 데이터 경로의 형상은 문제 세트에 매칭되도록 구성될 수 있다. 일반적으로, 사람들은 1D 데이터 경로를 행한다. VP2는 알고리즘에 매칭되도록 4x4, 8x4 또는 16x1 등의 가변 크기를 가질 수 있는 형상을 처리할 수 있다. The data path operates on variable shapes. The shape of the data path can be configured to match the problem set. In general, people follow a 1D data path. VP2 may process shapes that may have varying sizes, such as 4x4, 8x4 or 16x1, to match the algorithm.

스케일링 가능성:Scalability:

VP2 데이터 경로 아키텍처는 면적을 줄이기 위하여 다수의 사이클을 통해 보다 좁은 데이터 경로 상에서 보다 넓은 SIMD 명령들을 실행하기 위하여 명령 안내 기술을 이용한다(주: 16 웨이 SIMD 파이프를 갖는데, 각각의 피연산자는 1바이트 폭을 갖는다. 8 웨이 SIMD 파이프(2개의 파이프를 함께 그룹화함) 및 각각의 피연산자가 2 바이트인 보다 넓은 SIMD 데이터 경로를 가질 수 있으며, 마찬가지로 4 웨이 SIMD 파이프(4개의 파이프를 함께 그룹화함) 및 각각의 피연산자가 4 바이트인 보다 넓은 SIMD 데이터 경로를 가질 수 있다). The VP2 data path architecture uses instruction guidance technology to execute wider SIMD instructions on narrower data paths over multiple cycles to reduce area. You can have an 8-way SIMD pipe (grouping 2 pipes together) and a wider SIMD data path where each operand is 2 bytes, likewise a 4-way SIMD pipe (grouping 4 pipes together) and each Operand may have a wider SIMD data path of 4 bytes).

예를 들어, VP2는 데이터 경로를 16 웨이 SIMD에서 8 웨이 SIMD로 스케일링할 수 있다. For example, VP2 may scale the data path from 16 way SIMD to 8 way SIMD.

바이트 레인들의 연결:Connection of byte lanes:

피연산자 폭을 증가시키기 위한 SIMD 웨이들의 연결. 예를 들어, 현재 16 웨이 SIMD는 8 비트 피연산자를 갖는다. 이것을 8 웨이 SIMD의 16 비트 피연산자 및 4 웨이 SIMD의 32 비트 피연산자로 증가시킬 수 있다.Connection of SIMD ways to increase operand width. For example, current 16-way SIMDs have 8-bit operands. This can be increased with 16-bit operands of 8-way SIMDs and 32-bit operands of 4-way SIMDs.

SIMD 어드레스 생성기SIMD address generator

SIMD 파이프의 각 웨이에 대한 개별 스트림 어드레스 생성기.Individual stream address generator for each way of the SIMD pipe.

VP2는 요청들이 데이터 저장소에 대한 최소 액세스로 합체된 SIMD 어드레스 생성기를 이용할 수 있다.VP2 can use the SIMD address generator where requests are coalesced with minimal access to the data store.

크로스바 및 콜렉터를 이용한 데이터 확장Extend data with crossbars and collectors

크로스바를 이용하여 보다 많은 데이터 피연산자를 생성할 수 있는 능력. 판독 포트 압력을 줄이고 전력을 줄인다. Ability to create more data operands using crossbars. Reduce read port pressure and reduce power.

X2 명령들:X2 commands:

모든 명령들이 데이터 경로 내의 모든 HW 요소(가산기/승산기)를 이용할 수 있는 것은 아니다. 따라서, 복잡한 명령보다 넓은 데이터 형상을 처리할 수 있는 덧셈/뺄셈과 같은 간단한 명령에 대해 가능하다. 따라서, 성능을 최소 공통 크기로 제한하는 대신에, VP2는 판독 포트들이 동작 대역폭을 유지할 수 있는 한 보다 넓은 형상 상에서 동작하도록 적절히 시도하는 유연한 명령 세트를 이용한다. Not all instructions can use every HW element (adder / multiplier) in the data path. Thus, it is possible for simple instructions such as addition / subtraction which can handle wider data shapes than complex instructions. Thus, instead of limiting performance to the minimum common size, VP2 uses a flexible instruction set that properly attempts to operate on a wider shape as long as the read ports can maintain operating bandwidth.

멀티스레드/멀티코어 매체 처리Multithreaded / multicore media processing

VP2 아키텍처은 다음과 같은 다양한 멀티스레딩 옵션을 지원한다.The VP2 architecture supports a variety of multithreading options, including:

- 멀티스레드 스칼라 프로세서는 스트림을 통해 접속된 다수의 벡터 유닛 상에서 프로시저 호출을 스케쥴링한다.A multithreaded scalar processor schedules procedure calls on multiple vector units connected over a stream.

- 다수의 스레드는 명령 단위 또는 실행 단위의 스레드 스위칭에 의해 단일 벡터 엔진 상에서 실행된다. Multiple threads are executed on a single vector engine by thread switching in units of instructions or units of execution.

상이한 벡터/스칼라를 이용한 전력 관리Power Management with Different Vectors / Scalars

스칼라 및 벡터 부분이 분리되는 경우, 전력 및 성능 요건에 기초하여 이들 2 블록을 상이한 속도로 실행할 수 있다. If the scalar and vector portions are separated, these two blocks can run at different speeds based on power and performance requirements.

콘텍스트 스위치:Context switch:

이 매체 프로세서는 레지스터가 없는 구조를 가지므로 매우 빠른 콘텍스트 스위치를 지원하는 능력을 갖고 있다. HW 지원이 스칼라-벡터 커맨드 큐를 추적하고, 이것을 저장하고 재생하여 콘텍스트 스위칭을 달성하기 위해 존재한다. 또한, 콘텍스트 스위치는 페이지 고장시에 개시될 수 있다. The media processor has a registerless structure and therefore has the ability to support very fast context switches. HW support exists to track the scalar-vector command queue, store it, and play it back to achieve context switching. In addition, the context switch can be initiated upon page fault.

이것은 매체 프로세서가 입출력 디스플레이 처리와 같은 실시간 처리 태스크를 유지하면서 디스플레이 파이프라인을 공급하기 위해 2D 가속화 또는 최적시의 비디오 향상과 같은 비 실시간 태스크를 지원할 수 있게 한다. This allows the media processor to support non real-time tasks such as 2D acceleration or optimal video enhancement to supply the display pipeline while maintaining real-time processing tasks such as input and output display processing.

이러한 콘텍스트 스위치 능력은 그의 명령 세트와 함께 VP2가 통합 픽셀/코덱 처리하는 것을 가능하게 한다.This context switch capability, along with its instruction set, enables VP2 to integrate pixel / codec processing.

데이터 구성:Data configuration:

VP2는 다음과 같은 특성을 가진 데이터 저장소 구성을 이용한다.VP2 uses a data storage configuration with the following characteristics:

각 방향으로 최대 16 픽셀이 뱅크 충돌없이 액세스될 수 있다. 이것은 스트라이드 요건을 최소로 유지하면서 행해진다. Up to 16 pixels in each direction can be accessed without bank collision. This is done while keeping the stride requirements to a minimum.

데이터 저장소 구성은 데이터 형상들의 효율적인 전이를 가능하게 한다.The data store configuration enables efficient transition of data shapes.

2D 어드레싱이 데이터 저장소 내에서 지원되어, 비디오와 같은 대부분의 매체 처리 애플리케이션에서 선형 어드레스의 SW 연산을 제거한다.2D addressing is supported within the data store, eliminating SW operations of linear addresses in most media processing applications such as video.

Figure 112011005572915-pat00008
Figure 112011005572915-pat00008

Figure 112011005572915-pat00009
Figure 112011005572915-pat00009

Figure 112011005572915-pat00010
Figure 112011005572915-pat00010

Figure 112011005572915-pat00011
Figure 112011005572915-pat00011

Figure 112011005572915-pat00012
Figure 112011005572915-pat00012

Figure 112011005572915-pat00013
Figure 112011005572915-pat00013

Figure 112011005572915-pat00014
Figure 112011005572915-pat00014

Figure 112011005572915-pat00015
Figure 112011005572915-pat00015

Figure 112011005572915-pat00016
Figure 112011005572915-pat00016

Figure 112011005572915-pat00017
Figure 112011005572915-pat00017

Figure 112011005572915-pat00018
Figure 112011005572915-pat00018

Figure 112011005572915-pat00019
Figure 112011005572915-pat00019

Figure 112011005572915-pat00020
Figure 112011005572915-pat00020

Figure 112011005572915-pat00021
Figure 112011005572915-pat00021

Figure 112011005572915-pat00022
Figure 112011005572915-pat00022

Figure 112011005572915-pat00023
Figure 112011005572915-pat00023

Figure 112011005572915-pat00024
Figure 112011005572915-pat00024

101: CPU
105: 브리지
112: 디스플레이
115: 메모리
210: 스칼라 프로세서
211: 프로세서 명령 캐시
212: 프로세서 데이터 캐시
511: 데이터 저장 메모리
515: 어드레스 레지스터 파일
101: CPU
105: the bridge
112: display
115: memory
210: scalar processor
211: processor instruction cache
212: Processor Data Cache
511: data storage memory
515: address register file

Claims (22)

비디오 처리 동작들을 실행하기 위한 지연 감내 시스템(latency tolerant system)으로서,
비디오 프로세서와 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스;
상기 호스트 인터페이스에 연결되고 스칼라 비디오 처리 동작들을 실행하도록 구성된 스칼라 실행 유닛;
상기 호스트 인터페이스에 연결되고 벡터 비디오 처리 동작들을 실행하도록 구성된 벡터 실행 유닛;
커멘드 FIFO에 액세스함으로써 상기 벡터 실행 유닛이 요구 구동 기반(demand driven basis)으로 동작하는 것을 가능하게 하기 위한 커맨드 FIFO - 상기 벡터 실행 유닛은 상기 요구 구동 기반에 기초하여 상기 벡터 실행 유닛의 수행 레벨(performance level)을 조정하도록 동작할 수 있음 -;
상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 및
상기 메모리 인터페이스 내에 구축되고, 복수의 상이한 메모리 위치들 간의 DMA 전달들을 구현하며, 상기 벡터 실행 유닛에 대한 데이터 및 명령들을 데이터 저장 메모리 및 명령 캐시에 로딩하기 위한 DMA 엔진
을 포함하는 지연 감내 시스템.
As a latency tolerant system for performing video processing operations,
A host interface for implementing communication between the video processor and the host CPU;
A scalar execution unit coupled to the host interface and configured to execute scalar video processing operations;
A vector execution unit coupled to the host interface and configured to execute vector video processing operations;
Command FIFO for enabling the vector execution unit to operate on a demand driven basis by accessing a command FIFO, wherein the vector execution unit is configured to execute a performance level of the vector execution unit based on the request driving basis. operable to adjust the level);
A memory interface for implementing communication between the video processor and frame buffer memory; And
A DMA engine built within the memory interface, implementing DMA transfers between a plurality of different memory locations, and loading data and instructions for the vector execution unit into a data storage memory and an instruction cache
Delay tolerant system comprising a.
제1항에 있어서,
상기 벡터 실행 유닛은 상기 요구 구동 기반으로 동작하기 위해 상기 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성되는, 지연 감내 시스템.
The method of claim 1,
And the vector execution unit is configured to operate asynchronously with respect to the scalar execution unit by accessing the command FIFO to operate on the request drive basis.
제1항에 있어서,
상기 요구 구동 기반은 상기 상이한 메모리 위치들에서 상기 벡터 실행 유닛의 상기 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성되는, 지연 감내 시스템.
The method of claim 1,
And the request drive base is configured to hide a delay of data transfer from the vector execution unit to the command FIFO at the different memory locations.
제1항에 있어서,
상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리(algorithm flow control processing)를 구현하도록 구성되는, 지연 감내 시스템.
The method of claim 1,
And the scalar execution unit is configured to implement algorithm flow control processing.
제4항에 있어서,
상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위하여 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성되는, 지연 감내 시스템.
The method of claim 4, wherein
And the scalar execution unit is configured to precalculate the working parameters for the vector execution unit to hide the data propagation delay.
제1항에 있어서,
상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되는, 지연 감내 시스템.
The method of claim 1,
And the vector execution unit is configured to schedule a memory read through the DMA engine to prefetch commands for subsequent execution of a vector subroutine.
제6항에 있어서,
상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴의 호출들 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링되는, 지연 감내 시스템.
The method of claim 6,
And the memory read is scheduled to prefetch commands for execution of the vector subroutine prior to calls of the vector subroutine by the scalar execution unit.
지연 감내 비디오 처리 동작들을 위한 방법으로서,
호스트 인터페이스를 이용하여 비디오 프로세서와 호스트 CPU 간의 통신을 구현하는 단계;
상기 호스트 인터페이스에 연결된 스칼라 실행 유닛을 이용하여 스칼라 비디오 처리 동작들을 실행하는 단계;
상기 호스트 인터페이스에 연결된 벡터 실행 유닛을 이용하여 벡터 비디오 처리 동작들을 실행하는 단계;
메모리 커맨드 FIFO를 액세스함으로써 상기 벡터 실행 유닛이 요구 구동 기반으로 동작할 수 있게 하는 단계 - 상기 벡터 실행 유닛은 상기 요구 구동 기반에 기초하여 상기 벡터 실행 유닛의 수행 레벨을 조정하도록 동작할 수 있음 -;
메모리 인터페이스를 이용하여 상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하는 단계; 및
상기 메모리 인터페이스 내에 구축되고 상기 벡터 실행 유닛에 대한 데이터 및 명령들을 데이터 저장 메모리 및 명령 캐시에 로딩하도록 구성된 DMA 엔진을 이용하여 복수의 상이한 메모리 위치들 간의 DMA 전달들을 구현하는 단계
를 포함하는 지연 감내 비디오 처리 동작들을 위한 방법.
A method for delay tolerant video processing operations,
Implementing communication between the video processor and the host CPU using the host interface;
Executing scalar video processing operations using a scalar execution unit coupled to the host interface;
Executing vector video processing operations using a vector execution unit coupled to the host interface;
Enabling the vector execution unit to operate on a demand drive basis by accessing a memory command FIFO, the vector execution unit being operable to adjust the performance level of the vector execution unit based on the request drive basis;
Implementing communication between the video processor and frame buffer memory using a memory interface; And
Implementing DMA transfers between a plurality of different memory locations using a DMA engine built in the memory interface and configured to load data and instructions for the vector execution unit into a data storage memory and an instruction cache.
The method for delay tolerant video processing operations comprising a.
제8항에 있어서,
상기 벡터 실행 유닛은 상기 요구 구동 기반으로 동작하기 위하여 상기 메모리 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 8,
And the vector execution unit is configured to operate asynchronously with respect to the scalar execution unit by accessing the memory command FIFO to operate on the request drive basis.
제8항에 있어서,
상기 요구 구동 기반은 상기 상이한 메모리 위치들에서 상기 벡터 실행 유닛의 상기 메모리 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 8,
And the request drive base is configured to hide a delay of data transfer from the vector execution unit to the memory command FIFO at the different memory locations.
제8항에 있어서,
상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리를 구현하도록 구성되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 8,
And the scalar execution unit is configured to implement algorithmic flow control processing.
제11항에 있어서,
상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위하여 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 11,
And the scalar execution unit is configured to precalculate the working parameters for the vector execution unit to hide the data propagation delay.
제8항에 있어서,
상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 8,
And the vector execution unit is configured to schedule a memory read through the DMA engine to prefetch commands for subsequent execution of a vector subroutine.
제13항에 있어서,
상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴의 호출들 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링되는, 지연 감내 비디오 처리 동작들을 위한 방법.
The method of claim 13,
And the memory read is scheduled to prefetch commands for execution of the vector subroutine prior to calls of the vector subroutine by the scalar execution unit.
비디오 처리 동작들을 실행하기 위한 지연 감내 시스템으로서,
마더보드;
상기 마더보드에 연결된 호스트 CPU;
상기 마더보드 및 상기 호스트 CPU에 연결된 비디오 프로세서;
비디오 프로세서와 상기 호스트 CPU 간의 통신을 구현하기 위한 호스트 인터페이스;
상기 호스트 인터페이스에 연결되고 스칼라 비디오 처리 동작들을 실행하도록 구성된 스칼라 실행 유닛;
상기 호스트 인터페이스에 연결되고 벡터 비디오 처리 동작들을 실행하도록 구성된 벡터 실행 유닛;
커멘드 FIFO에 액세스함으로써 상기 벡터 실행 유닛이 요구 구동 기반으로 동작하는 것을 가능하게 하기 위한 커맨드 FIFO - 상기 벡터 실행 유닛은 상기 요구 구동 기반에 기초하여 상기 벡터 실행 유닛의 수행 레벨을 조정하도록 동작할 수 있음 -;
상기 비디오 프로세서와 프레임 버퍼 메모리 간의 통신을 구현하기 위한 메모리 인터페이스; 및
상기 메모리 인터페이스 내에 구축되고, 복수의 상이한 메모리 위치들 간의 DMA 전달들을 구현하며, 상기 벡터 실행 유닛에 대한 데이터 및 명령들을 데이터 저장 메모리 및 명령 캐시에 로딩하기 위한 DMA 엔진
을 포함하는 지연 감내 시스템.
A delay tolerant system for performing video processing operations,
Motherboard;
A host CPU connected to the motherboard;
A video processor coupled to the motherboard and the host CPU;
A host interface for implementing communication between a video processor and the host CPU;
A scalar execution unit coupled to the host interface and configured to execute scalar video processing operations;
A vector execution unit coupled to the host interface and configured to execute vector video processing operations;
Command FIFO to enable the vector execution unit to operate on a demand drive basis by accessing a command FIFO, wherein the vector execution unit may be operable to adjust the performance level of the vector execution unit based on the request drive basis. -;
A memory interface for implementing communication between the video processor and frame buffer memory; And
A DMA engine built within the memory interface, implementing DMA transfers between a plurality of different memory locations, and loading data and instructions for the vector execution unit into a data storage memory and an instruction cache
Delay tolerant system comprising a.
제15항에 있어서,
상기 벡터 실행 유닛은 상기 요구 구동 기반으로 동작하기 위해 상기 커맨드 FIFO를 액세스함으로써 상기 스칼라 실행 유닛에 관하여 비동기적으로 동작하도록 구성되는, 지연 감내 시스템.
16. The method of claim 15,
And the vector execution unit is configured to operate asynchronously with respect to the scalar execution unit by accessing the command FIFO to operate on the request drive basis.
제15항에 있어서,
상기 요구 구동 기반은 상기 상이한 메모리 위치들에서 상기 벡터 실행 유닛의 상기 커맨드 FIFO로의 데이터 전달의 지연을 숨기도록 구성되는, 지연 감내 시스템.
16. The method of claim 15,
And the request drive base is configured to hide a delay of data transfer from the vector execution unit to the command FIFO at the different memory locations.
제15항에 있어서,
상기 스칼라 실행 유닛은 알고리즘 흐름 제어 처리를 구현하도록 구성되는, 지연 감내 시스템.
16. The method of claim 15,
And the scalar execution unit is configured to implement algorithmic flow control processing.
제18항에 있어서,
상기 스칼라 실행 유닛은 데이터 전달 지연을 숨기기 위하여 상기 벡터 실행 유닛에 대한 작업 파라미터들을 사전 계산하도록 구성되는, 지연 감내 시스템.
The method of claim 18,
And the scalar execution unit is configured to precalculate the working parameters for the vector execution unit to hide the data propagation delay.
제15항에 있어서,
상기 벡터 실행 유닛은 벡터 서브 루틴의 후속 실행을 위한 커맨드들을 프리페치하기 위해 상기 DMA 엔진을 통해 메모리 판독을 스케쥴링하도록 구성되고, 상기 메모리 판독은 상기 스칼라 실행 유닛에 의한 상기 벡터 서브 루틴의 호출들 이전에 상기 벡터 서브 루틴의 실행을 위한 커맨드들을 프리페치하도록 스케쥴링되는, 지연 감내 시스템.
16. The method of claim 15,
The vector execution unit is configured to schedule a memory read through the DMA engine to prefetch commands for subsequent execution of a vector subroutine, wherein the memory read is prior to calls of the vector subroutine by the scalar execution unit. Scheduled to prefetch commands for execution of the vector subroutine.
제15항에 있어서,
상기 벡터 실행 유닛은 상기 커맨드 FIFO에 기초하여 제1 전력 레벨 및 제2 전력 레벨에서 동작할 수 있고, 상기 제2 전력 레벨은 상기 제1 전력 레벨보다 적은 전력을 사용하는, 지연 감내 시스템.
16. The method of claim 15,
The vector execution unit may operate at a first power level and a second power level based on the command FIFO, wherein the second power level uses less power than the first power level.
제15항에 있어서,
상기 벡터 지연 유닛은 상기 커맨드 FIFO의 컨텐츠들에 기초하여 상기 요구 구동 기반으로 동작할 수 있는, 지연 감내 시스템.
16. The method of claim 15,
And the vector delay unit can operate based on the request drive based on the contents of the command FIFO.
KR1020117001766A 2004-11-15 2005-11-14 Video processing KR101084806B1 (en)

Applications Claiming Priority (11)

Application Number Priority Date Filing Date Title
US62841404P 2004-11-15 2004-11-15
US60/628,414 2004-11-15
US11/267,599 US8416251B2 (en) 2004-11-15 2005-11-04 Stream processing in a video processor
US11/267,700 2005-11-04
US11/267,700 US8698817B2 (en) 2004-11-15 2005-11-04 Video processor having scalar and vector components
US11/267,875 2005-11-04
US11/267,638 2005-11-04
US11/267,875 US8687008B2 (en) 2004-11-15 2005-11-04 Latency tolerant system for executing video processing operations
US11/267,638 US8493396B2 (en) 2004-11-15 2005-11-04 Multidimensional datapath processing in a video processor
US11/267,599 2005-11-04
PCT/US2005/041329 WO2006055546A2 (en) 2004-11-15 2005-11-14 A video processor having a scalar component controlling a vector component to implement video processing

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020107018048A Division KR101030174B1 (en) 2004-11-15 2005-11-14 Video Processing

Publications (2)

Publication Number Publication Date
KR20110011758A KR20110011758A (en) 2011-02-08
KR101084806B1 true KR101084806B1 (en) 2011-11-21

Family

ID=36407688

Family Applications (5)

Application Number Title Priority Date Filing Date
KR1020097002765A KR101002485B1 (en) 2004-11-15 2005-11-14 Video processing
KR1020107018048A KR101030174B1 (en) 2004-11-15 2005-11-14 Video Processing
KR1020087020189A KR100917067B1 (en) 2004-11-15 2005-11-14 Video processing
KR1020077010393A KR100880982B1 (en) 2004-11-15 2005-11-14 Video processing
KR1020117001766A KR101084806B1 (en) 2004-11-15 2005-11-14 Video processing

Family Applications Before (4)

Application Number Title Priority Date Filing Date
KR1020097002765A KR101002485B1 (en) 2004-11-15 2005-11-14 Video processing
KR1020107018048A KR101030174B1 (en) 2004-11-15 2005-11-14 Video Processing
KR1020087020189A KR100917067B1 (en) 2004-11-15 2005-11-14 Video processing
KR1020077010393A KR100880982B1 (en) 2004-11-15 2005-11-14 Video processing

Country Status (5)

Country Link
EP (1) EP1812928A4 (en)
JP (1) JP4906734B2 (en)
KR (5) KR101002485B1 (en)
CA (1) CA2585157A1 (en)
WO (1) WO2006055546A2 (en)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0519597D0 (en) * 2005-09-26 2005-11-02 Imagination Tech Ltd Scalable multi-threaded media processing architecture
WO2015035338A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. Method and apparatus for asynchronous processor with a token ring based parallel processor scheduler
US10275370B2 (en) 2015-01-05 2019-04-30 Google Llc Operating system dongle
KR102067714B1 (en) * 2016-11-17 2020-01-17 주식회사 엘지화학 Battery module and battery pack including the same
US20210141697A1 (en) * 2018-03-06 2021-05-13 DinoplusAI Holdings Limited Mission-Critical AI Processor with Multi-Layer Fault Tolerance Support
KR102067128B1 (en) * 2018-06-07 2020-01-16 코츠테크놀로지주식회사 Health monitoring device and large area display including the same
WO2022220835A1 (en) * 2021-04-15 2022-10-20 Zeku, Inc. Shared register for vector register file and scalar register file

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3614740A (en) 1970-03-23 1971-10-19 Digital Equipment Corp Data processing system with circuits for transferring between operating routines, interruption routines and subroutines
US4541046A (en) 1981-03-25 1985-09-10 Hitachi, Ltd. Data processing system including scalar data processor and vector data processor

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4101960A (en) * 1977-03-29 1978-07-18 Burroughs Corporation Scientific processor
US4985848A (en) * 1987-09-14 1991-01-15 Visual Information Technologies, Inc. High speed image processing system using separate data processor and address generator
US4965716A (en) * 1988-03-11 1990-10-23 International Business Machines Corporation Fast access priority queue for managing multiple messages at a communications node or managing multiple programs in a multiprogrammed data processor
US4958303A (en) * 1988-05-12 1990-09-18 Digital Equipment Corporation Apparatus for exchanging pixel data among pixel processors
US5210834A (en) * 1988-06-01 1993-05-11 Digital Equipment Corporation High speed transfer of instructions from a master to a slave processor
US5040109A (en) * 1988-07-20 1991-08-13 Digital Equipment Corporation Efficient protocol for communicating between asychronous devices
JPH0795766B2 (en) * 1989-06-30 1995-10-11 株式会社日立製作所 Digital data communication device and data communication adapter used therefor
US5179530A (en) * 1989-11-03 1993-01-12 Zoran Corporation Architecture for integrated concurrent vector signal processor
US5418973A (en) * 1992-06-22 1995-05-23 Digital Equipment Corporation Digital computer system with cache controller coordinating both vector and scalar operations
DE69421103T2 (en) * 1993-01-22 2000-06-08 Matsushita Electric Ind Co Ltd Program controlled processor
US5574944A (en) * 1993-12-15 1996-11-12 Convex Computer Corporation System for accessing distributed memory by breaking each accepted access request into series of instructions by using sets of parameters defined as logical channel context
JPH0877347A (en) * 1994-03-08 1996-03-22 Texas Instr Inc <Ti> Data processor for image/graphics processing and its operating method
JPH08153032A (en) * 1994-11-29 1996-06-11 Matsushita Electric Ind Co Ltd Data look-ahead buffer method via network
JP3619565B2 (en) * 1995-04-26 2005-02-09 株式会社ルネサステクノロジ Data processing apparatus and system using the same
US6331856B1 (en) * 1995-11-22 2001-12-18 Nintendo Co., Ltd. Video game system with coprocessor providing high speed efficient 3D graphics and digital audio signal processing
KR100262453B1 (en) * 1996-08-19 2000-08-01 윤종용 Method and apparatus for processing video data
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US5812147A (en) * 1996-09-20 1998-09-22 Silicon Graphics, Inc. Instruction methods for performing data formatting while moving data between memory and a vector register file
US5893066A (en) * 1996-10-15 1999-04-06 Samsung Electronics Co. Ltd. Fast requantization apparatus and method for MPEG audio decoding
US5949410A (en) * 1996-10-18 1999-09-07 Samsung Electronics Company, Ltd. Apparatus and method for synchronizing audio and video frames in an MPEG presentation system
JP3983394B2 (en) * 1998-11-09 2007-09-26 株式会社ルネサステクノロジ Geometry processor
US6496902B1 (en) * 1998-12-31 2002-12-17 Cray Inc. Vector and scalar data cache for a vector multiprocessor
JP3639464B2 (en) * 1999-07-05 2005-04-20 株式会社ルネサステクノロジ Information processing system
US7093104B2 (en) * 2001-03-22 2006-08-15 Sony Computer Entertainment Inc. Processing modules for computer architecture for broadband networks
JP3840966B2 (en) * 2001-12-12 2006-11-01 ソニー株式会社 Image processing apparatus and method
US7305540B1 (en) * 2001-12-31 2007-12-04 Apple Inc. Method and apparatus for data processing
US6785772B2 (en) * 2002-04-26 2004-08-31 Freescale Semiconductor, Inc. Data prefetching apparatus in a data processing system and method therefor
US6957317B2 (en) * 2002-10-10 2005-10-18 Intel Corporation Apparatus and method for facilitating memory data access with generic read/write patterns
US20060064517A1 (en) * 2004-09-23 2006-03-23 Honeywell International Inc. Event-driven DMA controller

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3614740A (en) 1970-03-23 1971-10-19 Digital Equipment Corp Data processing system with circuits for transferring between operating routines, interruption routines and subroutines
US4541046A (en) 1981-03-25 1985-09-10 Hitachi, Ltd. Data processing system including scalar data processor and vector data processor

Also Published As

Publication number Publication date
WO2006055546A3 (en) 2008-06-19
KR20110011758A (en) 2011-02-08
JP2008521097A (en) 2008-06-19
KR20070063580A (en) 2007-06-19
JP4906734B2 (en) 2012-03-28
EP1812928A4 (en) 2010-03-31
KR20090020715A (en) 2009-02-26
WO2006055546A9 (en) 2007-09-27
CA2585157A1 (en) 2006-05-26
WO2006055546A2 (en) 2006-05-26
KR20100093141A (en) 2010-08-24
KR101030174B1 (en) 2011-04-18
KR100880982B1 (en) 2009-02-03
KR20080080419A (en) 2008-09-03
KR101002485B1 (en) 2010-12-17
KR100917067B1 (en) 2009-09-15
EP1812928A2 (en) 2007-08-01

Similar Documents

Publication Publication Date Title
KR101061345B1 (en) Video processing
Rathnam et al. An architectural overview of the programmable multimedia processor, TM-1
US6847365B1 (en) Systems and methods for efficient processing of multimedia data
KR101084806B1 (en) Video processing
KR101898565B1 (en) Processing of graphics data of a server system for transmission
TWI733808B (en) Architecture for interleaved rasterization and pixel shading for virtual reality and multi-view systems
WO2016195839A1 (en) Automated conversion of gpgpu workloads to 3d pipeline workloads
Basoglu et al. Single‐chip processor for media applications: the MAP1000™
TWI327434B (en) Video processing
EP4062988A1 (en) Video streaming for cloud gaming
CN111489280A (en) Fixed concave compression for streaming to head-mounted displays

Legal Events

Date Code Title Description
A107 Divisional application of patent
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: 20141023

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20181112

Year of fee payment: 8