KR20010023031A - 가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진 - Google Patents

가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진 Download PDF

Info

Publication number
KR20010023031A
KR20010023031A KR1020007001644A KR20007001644A KR20010023031A KR 20010023031 A KR20010023031 A KR 20010023031A KR 1020007001644 A KR1020007001644 A KR 1020007001644A KR 20007001644 A KR20007001644 A KR 20007001644A KR 20010023031 A KR20010023031 A KR 20010023031A
Authority
KR
South Korea
Prior art keywords
idct
butterfly
stages
serial
processor
Prior art date
Application number
KR1020007001644A
Other languages
English (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
Application filed by 밀러 럿셀 비, 퀄컴 인코포레이티드 filed Critical 밀러 럿셀 비
Publication of KR20010023031A publication Critical patent/KR20010023031A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/14Fourier, Walsh or analogous domain transformations, e.g. Laplace, Hilbert, Karhunen-Loeve, transforms
    • G06F17/147Discrete orthonormal transforms, e.g. discrete cosine transform, discrete sine transform, and variations therefrom, e.g. modified discrete cosine transform, integer transforms approximating the discrete cosine transform

Landscapes

  • Physics & Mathematics (AREA)
  • Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Theoretical Computer Science (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Discrete Mathematics (AREA)
  • Complex Calculations (AREA)

Abstract

어떠한 변환의 임의적인 혼합도 연산할 수 있는 가변 블록 사이즈의 2-D IDCT 엔진 (10) 이 개시된다. 제 1 의 1-D IDCT 프로세서 (20a) 는 컬럼으로 데이터 블록의 변환을 연산하여 그 중간 결과를 전치 메모리 내에 저장한다. 제 2 의 1-D IDCT 프로세서 (20b) 는 로우로 상기 중간 결과의 변환을 연산한다. 입력 데이터를 정확하게 배열하고, 버퍼플라이 스테이지 전에 입력 데이터를 선택적으로 조합하며, 버터플라이 각 스테이지에서의 가산 및 곱셈을 제어함으로써, 변환의 상이한 혼합이 용이하게 수행될 수 있다. 불필요한 버터플라이는 바이패스 모드로 배치된다. 상기 버터플라이는, 직렬 가산기 (56) 및 비트-직렬 곱셈기를 사용해, 하드웨어 설계가 상당히 간략화되며 버터플라이의 연속적인 스테이지들 사이의 라우팅 요구가 최소화되도록 구현될 수 있다. 완전하게 파이프라인된 구조는 IDCT 엔진으로 하여금 클록 사이클마다 한 개 픽셀의 처리량 속도를 유지할 수 있도록 해 준다.

Description

가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진{VARIABLE BLOCK SIZE 2-DIMENSIONAL INVERSE DISCRETE COSINE TRANSFORM ENGINE}
2-차원 이산 코사인 변환 (DCT) 및 역 이산 코사인 변환 (IDCT) 은 디지털 영상 압축에서의 중요한 신호 처리 동작이다. 이러한 디지털 영상 압축 애플리케이션의 하나가 고선명 TV (HDTV) 의 영역이다. HDTV 에서, 아날로그 비디오 파형은 아날로그-대-디지털 변환기 (ADC) 에 의해 조건이 설정되고 이산화된다. 그 다음 얻어진 샘플 데이터는 고화질을 유지하면서 전송 및/또는 저장되어야 할 데이터의 양이 최소화되도록 디지털적으로 처리된다. 통상적으로, 압축 처리의 핵심 요소는, N ×N 블록의 샘플 데이터, 즉 이미지가 시간 영역에서 주파수 영역으로 변환되는 2-D 이산 코사인 변환이다. 변환된 데이터는 하프만 코드 (Hufman code) 같은 블록 코드, 런 랭스 코드 (run length code) 및/또는, 컨벌루션 코드와 리드-솔로몬 코드 (Reed-Solomon code) 같은 오류 정정 코드를 사용하여 추가적으로 처리될 수 있다. 예시적인 HDTV 이미지 압축 기법이, "ADAPTIVE BLOCK SIZE IMAGE COMPRESSION METHOD AND SYSTEM" 이란 동일한 제목의 미국 특허 5,452,104 호, 5,107,345 호 및 5,021891 호 그리고, "INTERFRAME VIDEO ENCODING AND DECODING SYSTEM" 이란 제목의 미국 특허 5,576,767 호에 개시되어 있는데, 4 개의 특허 모두 본 발명의 양수인에게 양도되며 여기에서 참조된다.
디지털적으로 인코드된 비디오 파형은 전송 및/또는 저장된다. 수신기에서는, 원래 이미지의 픽셀을 재구성하기 위하여 상기 디지털 신호 처리의 역이 수행된다. 복원된 이미지는, 복원된 이미지를 모니터 또는 TV 상에 디스플레이될 수 있는 아날로그 비디오 파형으로 재변환하는 디지털-대-아날로그 변환기 (DAC) 에 공급된다.
디코딩 처리에서의 중요한 요소는, 주파수 영역 데이터를 다시 시간 영역으로 변환하는 역 이산 코사인 변환이다. 실시간으로 원래의 이미지를 재구성하기 위하여, IDCT 엔진은 높은 출력 속도로 동작할 것이 요구된다. 거기에 더하여, 통상적으로 IDCT 엔진은 소모품 내에 배치되기 때문에, 비용이 주요한 고려의 대상이 된다. IDCT 엔진은 최소의 복잡도로 고속에서 동작하도록 설계되어야 한다.
통상적으로 디지털 이미지 압축 시스템은 프레임에 기초하여 비디오 신호를 처리한다. 각 비디오 프레임은 N ×N 블록으로 더 나누어진다. 대개의 압축 시스템에서, DCT 및 IDCT 엔진의 구현을 간편하게 하기 위해 상기 블록 사이즈는 시스템 설계에 의해 고정된다.
가변 블록 사이즈의 허용은, 소정의 조건 하에서 압축 시스템의 성능을 높여이미지의 최적 압축을 가능케하며 그리고/또는 복원된 이미지의 질을 향상시킨다. 소정의 이미지 특성을 이용하기 위하여 가변 블록 사이즈를 사용할 수 있다. 종래 기술에서는, 다양한 사이즈의 변환 프로세서 뱅크를 사용하여 가변 블록 사이즈의 DCT 및 IDCT 엔진을 설계한다. 각 프로세서는 동일한 데이터 블록에 대하여 상이한 블록 사이즈의 변환을 연산한다. 그 다음 다양한 프로세서로부터의 변환은 소망의 복합 변환 블록으로 조합된다. 이러한 양태는 요구되는 하드웨어의 양이 크고, 다양한 하드웨어 블록을 조정하기가 복잡하기 때문에 취급하기 힘들 수 있다.
본 발명은 디지털 신호 처리에 관한 것이다. 보다 구체적으로, 본 발명은 신규하고 향상된 가변 블록 사이즈의 2-차원 (2-D) 역 이산 코사인 변환 (IDCT) 엔진에 관한 것이다.
도 1 의 (a), (b) 및 (c) 는 각각 본 발명의 예시적인 N ×N 이미지, 분할된 이미지, 및 상기 분할된 이미지에 대응되는 트리 다이어그램의 도면;
도 2 는 본 발명의 예시적인 가변 블록-사이즈의 2-D IDCT 엔진의 블록도;
도 3a 내지 3d 는 각각 본 발명의 2-포인트 IDCT 격자, 4-포인트 IDCT 격자, 8-포인트 IDCT 격자 및 16-포인트 IDCT 격자의 예시적인 도면;
도 4 는 본 발명의 예시적인 1-D IDCT 프로세서의 블록도;
도 5 의 (a) 및 (b) 는 각각 본 발명의 직렬 버터플라이의 그래프적인 도면과 예시적인 실시예의 블록도;
도 6 의 (a) 및 (b) 는 각각 본 발명의 예시적인 비트-직렬 곱셈기의 워드-와이드 표현과 비트-와이드 표현의 블록도;
도 7 은 본 발명의 예시적인 직렬 가산기의 블록도; 및
도 8 은 본 발명의 예시적인 I/O 버퍼의 블록도이다.
* 도면의 주요부분에 대한 부호의 설명 *
2, 4 : 데이터 블록 10 : 2-D IDCT 엔진
20 : IDCT 프로세서 22 : 메모리 소자
26 : 제어기 52 : I/O 버퍼
54, 60, 64, 68 : 라우팅 크로스바 56, 160 : 직렬 가산기
58 : 직렬 버터플라이의 제 1 스테이지
62 : 직렬 버터플라이의 제 2 스테이지
66 : 직렬 버터플라이의 제 3 스테이지
70 : 직렬 버터플라이의 제 4 스테이지
100 : 16-포인트 IDCT 격자 104 : 8 개의 2-포인트 IDCT
106 : 4 개의 4-포인트 IDCT 108 : 2 개의 8-포인트 IDCT
110 : 1 개의 16-포인트 IDCT 112 : 직렬 가산
148 : 지연 소자 140 : 직렬 버터플라이
150 : 비트-직렬 곱셈기
200 : 논리 회로 210, 244 : 가산기
212, 262, 266 : 래치 214, 246, 264 : 레지스터
202, 204, 240 : AND 게이트 242 : XOR 게이트
268 : 출력 버퍼
본 발명은 신규하고 향상된 가변 블록 사이즈의 2-차원 (2-D) 역 이산 코사인 변환 (IDCT) 엔진이다. 본 발명에 의하면, N ×N 블록은 제 1 의 1-D IDCT 프로세서에 의해 컬럼으로 변환된다. 상기 제 1 의 IDCT 프로세서로부터의 중간 결과는 일시적으로 전치 (transposition) 메모리에 저장된다. 일단 모든 컬럼이 처리되고 나면, 상기 중간 결과는 제 2 의 1-D IDCT 프로세서에 의해 로우로 변환된다. 상기 제 2 의 IDCT 프로세서로부터의 출력이 상기 IDCT 엔진의 변환된 출력을 구성한다.
본 발명의 목적은 N ×N 데이터 블록 내의 어떠한 임의적인 변환의 혼합도 연산할 수 있는 2-D IDCT 엔진을 공급하는 것이다. 예시적인 실시예에서, 각 데이터 블럭은 하나의 16 ×16 변환, 또는 8 ×8 변환, 4 ×4 변환 및/또는 2 ×2 변환의 어떠한 조합의 혼합이다. 예시적인 실시예에서, 21-비트 제어 신호는 원하는 부분을 정확하게 나타내며, 적절한 변환의 조합을 연산할 것을 IDCT 엔진에 통보한다. 본 발명에서는, 입력 데이터를 정확하게 배열하고, 버터플라이 스테이지 전에 상기 데이터를 선택적으로 조합하며, 버터플라이 각 스테이지에서의 가산과 곱셈을 제어함으로써, 상이한 조합의 변환도 용이하게 수행될 수 있다. 불필요한 버터플라이는 바이패스 모드에 위치된다.
본 발명의 다른 목적은, 직렬 연산에 대비함으로써 2-D IDCT 엔진의 설계를 간략화하는 것이다. 직렬 가산기 및 비트-직렬 곱셈기는, 한번에 하나의 데이터 비트에 대해서만 연산이 수행되기 때문에, 상기 설계를 상당히 간략화한다. 직렬 연산은 또한 연속적인 버터플라이 스테이지 사이의 라우팅 크로스바를 상당히 간략화한다. 본 발명의 IDCT 엔진의 파이프라인 구조로 인해, 처리량 속도는 클록 사이클마다 하나의 변환된 포인트, 즉 픽셀의 속도를 유지한다. 이는 병렬 연산에서와 동일한 처리량 속도이다. 연산의 직렬 특성으로 인해 처리 지연이 증가될 뿐이다.
본 발명의 또 다른 목적은 메모리 요구를 최소화하는 것이다. 2-D IDCT 의 경우, 데이터 블록은 우선 1-D IDCT 프로세서에 의해 컬럼으로 변환되고, 그 중간 결과는 전치 메모리에 컬럼으로 일시 저장된다. 모든 컬럼이 변환된 후에야 제 2 의 1-D 변환이 수행된다. IDCT 엔진의 파이프라인 구조로 인해, 중간 결과는 메모리에 컬럼으로 기입됨과 동시에 메모리로부터 로우로 판독된다. 나중에 필요한 데이터가 담겨 있는 메모리 장소에 중복 기입되는 것을 막기 위해, 상기 메모리는 연속적인 N ×N 블록에 대해 전치, 즉 우선 컬럼과 우선 로우 사이에서 교체한다. 판독-수정-기입 사이클을 사용하면, 동일한 클록 사이클 내에 중간 결과가 하나의 메모리 장소로부터 판독되고, 새로운 결과가 동일한 메모리 장소에 기입된다. 전치 메모리는 메모리 요구를 하나의 N ×N 데이터 블록과 동일한 사이즈의 메모리 뱅크 하나로 감축시킨다.
이산 코사인 변환 (DCT) 및 역 이산 코사인 변환 (IDCT) 은 중요한 상보적 디지털 신호 처리 동작이다. DCT 는 다음의 수학식 1 에 의해 샘플 데이터를 시간 영역에서 주파수 영역으로 변환한다:
여기서 N 은 변환의 차원이고,이며, k = 1, 2, 3 ‥‥ N-1 에 대한 C(k)= 1 이다. 통상적으로 DCT 는 연속적인 디지털 신호 처리 동작의 하나로서 샘플 데이터에 대해 수행된다. 양자화, 데이터 압축 및 오류 정정 코딩을 포함하는 다른 동작들은 변환된 데이터에 대해 수행된다. 예시적인 디지털 이미지 압축 기술에 관한 논의가, 상술된 미국 특허 5,452,104 호에 상세히 설명되어 있다.
IDCT 는 다음의 수학식 2 에 의해, 상기 데이터를 주파수 영역에서 시간 영역으로 재변환한다:
DCT 및 IDCT 변환은 분리 가능한 변환이다. 이는 하나의 2-D 변환이 2 개의 1-D 변환으로 나누어질 수 있다는 것을 의미한다. 우선 데이터 블록의 컬럼에 대해 1-D IDCT 를 수행함으로써, 데이터 블록에 대한 2-D IDCT 변환을 수행할 수 있다. 제 1 의 IDCT 변환으로부터의 중간 결과는 메모리 소자에 일시 저장된다. 그 다음 상기 중간 결과의 로우에 대해 제 2 의 IDCT 변환이 수행된다. 제 2 의 IDCT 변환으로부터의 출력이 원래 이미지의 복원된 픽셀을 구성한다.
도면을 참조하면, 도 1 의 (a) 는 예시적인 데이터 블록의 도면을 나타낸다.데이터 블록 (2) 은 N ×N 의 사이즈인데, 여기서 N 은 2 의 거듭제곱, 즉이고, x 는 1, 2, 3 ‥‥ 의 정수이다. 이 조건이 만족될 경우, 수학식 1 및 2 는 상당히 간략화될 수 있다. 예시적인 실시예에서, N 은 16 이지만, 본 발명은 다른 값의 N 으로도 용이하게 확장될 수 있다.
도 2 는 본 발명의 2-D IDCT 엔진 (10) 의 예시적인 블록도이다. 예시적인 실시예에서, IDCT 계수를 구성하는 입력 데이터 블록은 컬럼으로 IDCT 프로세서 (20a) 에 공급된다. IDCT 프로세서들 (20a 및 20b) 은, 수학식 2 에 따라 입력 데이터에 대한 IDCT 변환을 수행하는, 똑같은 1-D IDCT 프로세서이다. IDCT 프로세서 (20a) 로부터의 중간 결과는, 상기 결과가 컬럼으로 일시 저장되는 메모리 소자 (22) 에 공급된다. 그 다음 상기 중간 결과는 로우로 IDCT 프로세서 (20b) 에 공급된다. IDCT 프로세서 (20b) 는 1-D IDCT 변환을 수행하여, 변환된 출력, 즉 복원된 이미지를 연속적인 디지털 신호 처리 블록 (도 2 에 도시되지 않음) 에 공급한다. 예시적인 실시예에서, 입력 데이터 블록은 컬럼으로 IDCT 프로세서 (20a) 에 공급되고, 그 중간 결과는 로우로 IDCT 프로세서 (20b) 에 공급된다. 대신에, 데이터 블록이 IDCT 프로세서 (20a) 에 로우로 그리고 IDCT 프로세서 (20b) 에 컬럼으로 공급될 수도 있다. 예시적인 실시예에서, IDCT 프로세서들 (20a 및 20b) 은 양쪽 IDCT 프로세서들 (20) 모두가 동시에 활성화되도록 파이프라인된다.
상기 IDCT 의 중요한 특징은 입력 데이터 포인트의 배열, 데이터 포인트의 선택적 조합에 대한 합의 연산 및, 2 개의 소형 변환의 출력에 대한 직렬 버터플라이의 수행을 통해, 대형 변환을 만들어 낼 수 있다는 것이다. 직렬 버터플라이 동작은 이하에서 상세히 설명된다. 따라서, 16-포인트 IDCT 는 8-포인트 IDCT 2 개의 버터플라이이고, 8-포인트 IDCT 각각은 4-포인트 IDCT 2 개의 버터플라이이며, 4-포인트 IDCT 각각은 2-포인트 IDCT 2 개의 버터플라이이다. IDCT 의 이러한 특징은 업계에 공지되어 있으며, 격자 도면으로 잘 표현되어 있다. 2-포인트 IDCT 의 격자 도면이 도 3a 에, 4-포인트 IDCT 의 격자 도면이 도 3b 에, 그리고 8-포인트 IDCT 의 격자 도면이 도 3c 에 도시되어 있다. 2-포인트 IDCT 는 단일 버터플라이 스테이지로 구성된다. 도 3a 및 3b 에 도시된 대로, 4-포인트 IDCT 는 2-포인트 IDCT 2 개의 스테이지, 상기 2-포인트 IDCT 스테이지 이전의 직렬 가산 스테이지 및, 상기 2-포인트 IDCT 스테이지 이후의 버터플라이 스테이지로 구성된다. 마찬가지로, 도 3b 및 3c 에 도시된 대로, 8-포인트 IDCT 는 4-포인트 IDCT 2 개의 스테이지, 상기 4-포인트 IDCT 스테이지 이전의 직렬 가산 스테이지 및, 상기 4-포인트 IDCT 스테이지 이후의 버터플라이 스테이지로 구성된다.
본 발명의 16-포인트 IDCT 격자 (100) 의 도면이 도 3d 에 도시되어 있다. 격자 (100) 는 B.G. Lee 에 의해 유도되었으며, K.R. Rao 가 쓴 "Discrete Cosine Transform : Algorithms, Advantages, and Applications (Academic Press, 1990)" 이란 제목의 책에 상세히 설명되어 있다. 16-포인트 IDCT 격자 (100) 는, 직렬 가산의 스테이지 3 개 및 직렬 버터플라이의 스테이지 4개로 구성되는데, 버터플라이의 각 스테이지는 8 개의 직렬 버터플라이를 구비한다. 종래 기술의 IDCT 프로세서에서는, 연속적인 스테이지들 사이의 상호 연결이 고정되어 있어, 상기 IDCT 프로세서가 16-포인트 IDCT 변환만을 수행하도록 제한된다. 본 발명에서는, 가변형의 격자 상호-접속으로 상기 스테이지들이 상호 접속된다.
도 3d 에 도시된 대로, 16-포인트 IDCT (110) 는 8-포인트 IDCT 2 개 (108) 의 버터플라이로서, 하부의 8-포인트 IDCT 로의 데이터 포인트는 선택적으로 조합된다. 2 개의 8-포인트 IDCT (108) 는 4-포인트 IDCT 4 개 (106) 의 버터플라이로서, 하부의 4-포인트 IDCT 로의 데이터 포인트는 선택적으로 조합된다. 4 개의 4-포인트 IDCT (106) 는 2-포인트 IDCT 8 개 (104) 의 버터플라이로서, 하부의 2-포인트 IDCT 로의 데이터 포인트는 선택적으로 조합된다. 직렬 버터플라이의 바이패스 모드와 조합되어 있는 가변형의 격자 상호-접속으로 인해, 본 발명의 2-D IDCT 엔진 (10) 은 N ×N 블록 내의 어떠한 변환의 임의적인 혼합도 연산할 수 있다. 입력 데이터를 정확하게 배열하고, 버터플라이 스테이지 전에 상기 입력 데이터를 선택적으로 결합하며, 격자의 각 스테이지에서의 가산 및 곱셈을 제어함으로써, 2-포인트, 4-포인트, 8-포인트 및 16-포인트 IDCT 변환의 어떠한 조합도 수행될 수 있다. 예를 들어, IDCT 프로세서 (20) 는 2 개의 8-포인트 변환, 8 개의 2-포인트 변환, 1 개의 8-포인트 변환과 2 개의 4-포인트 변환, 또는 1 개의 8-포인트, 1 개의 4-포인트 및 2 개의 2-포인트 변환을 수행할 수 있다 본 발명에서는, 상이한 변환 출력을 조립하여 복합 변환 블록을 만들어 내는 조합 스테이지가 필요없는데, IDCT 엔진 (100) 이 적절한 변환의 혼합을 수행하도록 구성되었을 때 자동적으로 이러한 일이 행해지기 때문이다. 소형 변환이 연산될 때마다, 보다 고차의 변환을 수행하는, 불필요한 직렬 가산기와 버터플라이는 지연 래치로 복귀한다. 따라서, 각 IDCT 프로세서 (20) 로부터의 출력은 변환의 혼합에 관계없이 시간적으로 정렬된다.
예시적인 실시예에서, 직렬 버터플라이는 2 개의 입력 비트 스트림에 대해 동작하며, 2 개의 출력 비트 스트림을 공급한다. 상기 직렬 버터플라이는 상당히 단순화된 하나의 비트-직렬 곱셈기와 2 개의 직렬 가산기로 구성된다. IDCT 프로세서 (20) 의 직렬 구조로 인해, 직렬 버터플라이의 연속적인 스테이지들 사이의 라우팅 크로스바는 1-비트 와이드의 데이터 버스만으로 구현될 수 있게 된다.
예시적인 실시예에서, IDCT 엔진 (10) 은 256 클록 사이클에 16 ×16 블록의 변환을 연산한다. 각 클록 사이클 동안, 하나의 IDCT 계수가 IDCT 엔진 (10) 에 공급되고, IDCT 엔진 (10) 으로부터 하나의 출력 픽셀이 추출된다. IDCT 프로세서들 (20a 및 20b) 은 양쪽 프로세서가 동시에 활성화되도록 파이프라인된다. 각 클록 사이클 동안, IDCT 프로세서 (20) 각각은 하나의 입력 데이터 포인트를 수신하여 변환된 데이터 포인트 하나를 공급한다.
Ⅰ. IDCT 프로세서
본 발명의 IDCT 프로세서 (20) 의 예시적인 블록도가 도 4 에 도시되어 있다. 클록 사이클마다 하나의 데이터 포인트 및 I/O 버퍼 (52) 마다 하나의 데이터 포인트로, 16 클록 사이클 마다 (N=16), 16 개의 I/O 버퍼 (52) 는 16 개의 입력 데이터 포인트를 수신한다. 데이터 포인트가 I/O 버퍼 (52) 에 로드되는 순서는 수행되고 있는 변환의 혼합에 종속되며, 4-비트 WRITE_ENABLE 신호를 통해 제어기 (26) 에 의해 제어된다. 각각의 데이터 포인트는, WRITE_ENABLE 에 기초하여 적절한 I/O 버퍼 (52) 에 병렬로 로드되는 q-비트로 구성된다. 그 다음 I/O 버퍼 (52) 는 라우팅 크로스바 (54) 를 통해 LSB 를 시작으로 클록 사이클마다 한 비트씩 16 데이터 포인트를 직렬 가산기 (56) 로 다같이 직렬로 시프트한다. I/O 버퍼 (52) 는 이하에 설명되는 바와 같이 병렬-대-직렬 시프트 레지스터로서 구현될 수 있다.
직렬 가산기 (56) 는 상기 데이터 비트를 수신하여 이하에 기술된 방식으로 상기 비트들의 직렬 가산을 수행한다. 직렬 가산기 (56) 는, 예시적인 실시예에서, 7-비트로 구성된 ADD_ENABLE 에 의해 인에이블되며, 도 3d 의 격자 (100) 에 도시된, 처음 3 개의 가산 스테이지에 해당된다. 각각의 직렬 가산은 원으로 싸인 점 (112 ; 간략화를 위해 원으로 싸인 점 하나에 대해서만 참조부호를 붙임) 으로 표현된다. 제 1 스테이지에는, 인에이블/디스에이블에 4 비트를 요하는 7 개의 직렬 가산 (112) 이 있다. 제 2 스테이지에는, 제어를 위해 2 비트를 요하는, 직렬 가산 (112) 3 개의 세트 2 개가 있다. 그리고 제 3 스테이지에는, 제어를 위해 1 비트를 요하는, 단일 직렬 가산 (112) 의 세트 4 개가 있다. 7-비트 ADD_ENABLE 신호를 사용하여, 직렬 가산기 (56) 는 도 3d 의 격자 (100) 의 처음 3 개 스테이지에서 요하는 대로의 직렬 가산 (112) 을 연산하도록 제어될 수 있다. 도 4 의 16 개 직렬 가산기 (56) 의 뱅크는 격자 (100) 의 처음 3 개 스테이지에 의해 요구되는 기능을 상징적으로 나타낸다.
직렬 가산기 (56) 로부터의 출력은, 도 3d 의 2-포인트 IDCT 8 개 (104) 내에 도시된 기능을 수행하는, 8 개 직렬 버터플라이의 제 1 스테이지 (58) 에 공급된다. 각각의 직렬 버터플라이는 도 5 (b) 의 블록도로 도시된다. 직렬 버터플라이는 2 개의 직렬 스트림 입력 (X1 및 X2) 을 수신하여 2 개의 직렬 출력 (Z1=X1+CㆍX2 및 Z2=X1-CㆍX2) 을 발생하는데, 여기서 C 는 IDCT 격자 (100) 내의 버터플라이 위치에 따라 정의된 고정 스칼라이다. 직렬 버터플라이의 예시적인 구현이 이하에 상세히 설명된다. 예시적인 실시예에서, 직렬 버터플라이의 제 1 스테이지 (58) 는 IDCT 프로세서 (20) 가 적어도 2-포인트 변환을 수행하도록 항상 인에이블되어 있다. 제 1 스테이지 (58) 로부터의 출력은 라우팅 크로스바 (60) 를 통해 직렬 버터플라이의 제 2 스테이지 (62) 로 공급된다. IDCT 격자 (100) 에 의해 도시된 대로, 라우팅 크로스바 (60) 는 처음의 2 개 스테이지를 상호 연결한다. 예시적인 실시예에서, 직렬 버터플라이의 제 2 스테이지 (62) 는 4-포인트 변환을 제공하도록 선택적으로 인에이블될 수 있다. 4 개 세트의 버터플라이가 있기 때문에 (도 3d 참조), 각 세트를 개별적으로 인에이블하기 위해서는 4-비트 제어가 필요하다. 상기 4-비트 제어는 도 4 에서 MAP 으로 표시된 제어 신호의 일부이다.
직렬 버터플라이의 제 2 스테이지 (62) 로부터의 출력은 라우팅 크로스바 (64) 를 통해 제 3 스테이지 (66) 에 공급된다. 도 3d 의 8-포인트 IDCT 2 개 (108) 내에 도시된 바와 같이, 제 3 스테이지 (66) 는 직렬 버터플라이 4 개의 세트 2 개로 구성된다. 각 세트는 2-비트 제어에 의해 개별적으로 인에이블될 수 있다. 제 3 스테이지 (66) 로부터의 출력은 라우팅 크로스바 (68) 를 통해 제 4 스테이지 (70) 에 공급된다. 도 3d 의 16-포인트 IDCT (110) 내에 도시된 바와 같이, 제 4 스테이지 (70) 는 직렬 버터플라이 8 개의 세트 하나로 구성된다. 상기 직렬 버터플라이는 1-비트 제어에 의해 선택적으로 인에이블될 수 있다. 제 4 스테이지 (70) 로부터의 직렬 변환된 데이터는 IDCT 프로세서 (20) 로부터의 출력을 구성한다.
제 4 스테이지 (70) 로부터의 직렬 변환된 1-비트 데이터는 직렬-대-병렬 출력 버퍼의 뱅크로 라우트된다. 예시적인 실시예에서, 각 클록 사이클 동안 하나의 출력 워드가 공급되는 워드 직렬 형태로, IDCT 프로세서 (20) 는 IDCT 출력을 공급한다. 이하에 상세히 설명되는 바와 같이, 출력 버퍼는 입력 버퍼와 결합되어 I/O 버퍼 (52) 를 형성할 수 있다.
Ⅱ. 제어기
도 2 를 참조하면, 제어기 (26) 는 IDCT 프로세서들 (20a 및 20b) 과 메모리 소자 (22) 에 제어 신호를 공급한다. 이들 제어 신호는 IDCT 프로세서들 (20a 및 20b) 과 메모리 소자 (22) 를 동기화하며, 재구성된 복합 이미지를 결정한다. 제어기 (26) 는 ADRESS 입력과 PQR 입력을 수신한다. ADRESS 입력은 제어기 (26) 에 데이터 블록의 시작을 통보한다. PQR 입력은, 제어기 (26) 에 원하는 블록 분할을 통보하는 3 개의 명령 (P, Q 및 R) 으로 구성된다. 예시적인 실시예에서, R 은 16 ×16 블록이 그 보다 작은 8 ×8 변환 블록으로 분할되어야 함을 나타내는 "1" 과 같고, Q 는 상기 8 ×8 블록이 그 보다 작은 4 ×4 변환 블록으로 분할되여야 함을 나타내는 "1" 과 같으며, P 는 상기 4 ×4 블록이 그 보다 작은 2 ×2 변환 블록으로 분할되어야 함을 나타내는 "1" 과 같다. 예시적인 실시예에서, 각 블록은 이미지 내의 다른 블록에 관계없이 개별적으로 분할될 수 있다. 따라서, 16 ×16 데이터 블록 내에는 하나의 16 ×16 변환 블록만이 존재할 수 있으므로, R 에 대해서는 1-비트 제어가 요구되고, 16 ×16 데이터 블록 내에는 4 개의 8 ×8 변환 블록이 존재할 수 있으므로, Q 에 대해서는 4-비트 제어가 요구되며, 16 ×16 데이터 블록 내에는 16 개의 4 ×4 변환 블록이 존재할 수 있으므로, P 에 대해서는 16-비트 제어가 요구된다. 데이터 블록 (4) 의 예시적인 분할이 도 1 (b) 에 도시되어 있고, 상기 이미지 분할에 대응되는 PQR 제어의 도식적인 실례, 예를 들어 트리 다이어그램 (6) 이 도 1 (c) 에 도시되어 있다. 21-비트 제어 PQR 은 직렬 또는 병렬로 제어기 (26) 에 공급될 수 있다.
PQR 입력은 원하는 블록 분할의 2-D 표현이다. 제어기 (26) 는 PQR 입력을 1-D 의 컬럼 및 로우 제어 신호로 분해한다. 그 다음 이들 컬럼 및 로우 제어 신호는, IDCT 프로세서들 (20a 및 20b) 로 하여금 적절한 변환의 혼합을 수행하도록 지시하는 제어 신호를 발생하는데 사용된다. 도 1 (b) 에 도시된 예시적인 분할 (4) 의 경우, 제어기 (26) 는 IDCT 프로세서 (20a) 에 데이터의 첫번째 4 개 컬럼에 대해 2 개의 4-포인트 변환과 1 개의 8-포인트 변환을 수행하도록 지시한다. 데이터의 다음 2 개 컬럼에 대해, 제어기 (26) 는 IDCT 프로세서 (20a) 에 1 개의 4-포인트 변환, 2 개의 2-포인트 변환 및 1 개의 8-포인트 변환을 수행할 것을 지시한다. 모든 컬럼이 처리될 때까지 프로세스는 계속된다. IDCT 프로세서 (20a) 로부터의 중간 결과는 메모리 소자 (22) 에 컬럼으로 저장된다.
비슷한 방식으로, 제어기 (26) 는 IDCT 프로세서 (20b) 에 메모리 소자 (22) 로부터의 중간 결과의 로우에 대해 변환의 적절한 혼합을 수행할 것을 지시한다. IDCT 프로세서 (20a) 에 의해 모든 컬럼이 처리되고 난 후, 제어기 (26) 는 IDCT 프로세서 (20b) 에 중간 결과의 첫번째 4 개 로우에 대해 2 개의 4-포인트 변환과 1 개의 8-포인트 변환을 수행할 것을 지시한다. 다음의 2 개 로우에 대해, 제어기 (26) 는 IDCT 프로세서 (20b) 에 1 개의 4-포인트 변환, 2 개의 2-포인트 변환 및 1 개의 8-포인트 변환을 수행할 것을 지시한다. 이번에도, 모든 로우가 처리될 때까지 프로세스는 계속된다.
도 4 를 참조하면, IDCT 프로세서들 (20a 및 20b) 을 위해, 제어기 (26) 에 의해 발생된 제어 신호는 WRITE_ENABLE, READ_ENABLE, ADD_ENABLE 및 MAP 를 포함한다. WRITE_ENABLE 은 입력 데이터 포인트가 정확한 순서 (도 3d 참조) 로 정렬되도록, 입력 데이터 포인트의 적절한 I/O 버퍼 (52) 로의 기입을 제어한다. READ_ENABLE 은 변환된 데이터가 IDCT 프로세서 (20) 로부터 판독되는 순서를 제어한다. 예시적인 실시예에서, 변환된 데이터는 IDCT 프로세서 (20) 로부터 순차적으로 판독될 수 있다. ADD_ENABLE 은, 격자 (100) 의 앞부분 3 개 스테이지에서 가산을 수행하는 직렬 가산기 (56) 의 제 1 세트를 제어한다. ADD_ENABLE 은 원하는 변환의 혼합에 종속되며, PQR 입력에 따라 발생된다. MAP 는, 원하는 변환의 혼합을 발생하는 직렬 버터플라이의 마지막 3 개 스테이지들 (62, 66 및 70) 을 제어한다. MAP 또한 PQR 입력에 따라 발생된다. 버터플라이의 4 개 세트 각각을 개별적으로 인에이블 또는 디스에이블하기 위해, 제 2 스테이지 (62) 에는 4 개의 제어 비트가 필요하다 (도 3d 참조). 마찬가지로, 제 3 스테이지 (66) 에는 2 개의 제어 비트가 필요하고, 제 4 스테이지 (70) 에는 1 개의 제어 비트가 필요하다. 예시적인 실시예에서, IDCT 프로세서 (20) 는 적어도 2-포인트 변환을 항상 수행하고 있기 때문에, 제 1 스테이지 (58) 에 대해서는 제어 신호가 필요하지 않다. 그러나, 원하거나 필요하다면, 제 1 스테이지 (58) 의 바이패스를 제공하기 위해 제어 신호가 발생될 수도 있다. 본 발명의 2-D 변환은 2 개의 1-D 변환을 사용해 직렬로 수행되기 때문에, 제어기 (26) 는, 입력 데이터와 제어 신호를 동기화하기 위해, IDCT 프로세서 (20b) 에 대한 제어 신호를 IDCT 프로세서 (20a) 에 대해 상대적으로 지연시킨다.
제어기 (26) 는 조합 논리와 상태 머신의 조합으로 구현될 수 있다. 다른 방법으로, 마이크로 코드를 실행하는 마이크로-컨트롤러 또는 마이크로-프로세서를 사용하여 제어기 (26) 가 구현될 수도 있다. 여기에서 설명된 기능을 수행하는제어기 (26) 의 상이한 구현은 본 발명의 범위 내에 있다.
Ⅲ. 전치 메모리
예시적인 실시예에서, 메모리 소자 (22) 는 전치 메모리로서 구현될 수 있다. 입력 데이터 블록의 컬럼에 대해 1-D 변환을 수행하여, 그 중간 결과를 저장하고, 상기 중간 결과의 로우에 대해 1-D 변환을 수행함으로써, 2-D 변환이 실현된다. 모든 컬럼이 변환되기까지는 로우에 대한 1-D 변환이 수행될 수 없다. 예시적인 실시예에서, 2 개의 1-D 변환은 양자가 동시에 동작하도록 파이프라인된다.
도 1 (a) 에 도시된 바와 같이, 메모리 소자 (22) 는 메모리의 블록으로 구현될 수 있다. IDCT 프로세서 (20a) 로부터의 중간 결과가 메모리 소자 (22) 에 컬럼으로 먼저 기입된다고 가정한다. 모든 컬럼이 IDCT 프로세서 (20a) 에 의해 처리될 때까지, IDCT 프로세서 (20b) 는 중간 결과의 로우에 대해 동작할 수 없다. 일단 메모리 소자 (22) 의 마지막 컬럼이 채워지고 나면, 그 중간 결과가 IDCT 프로세서 (20b) 에 로우로 공급된다. 그러나, 파이프라인의 구조로 인해, IDCT 프로세서 (20a) 는 IDCT 프로세서 (20b) 에 의해 만회된 데이터의 각 로우에 대해 데이터의 한 컬럼을 공급한다. IDCT 프로세서 (20b) 가 선행 컬럼에서의 몇몇 데이터 포인트를 여전히 필요로 하기 때문에, 데이터의 이러한 컬럼은 선행 컬럼에 중복 기입될 수 없다. 이러한 문제를 해결하기 위하여, 중간 결과의 신규 컬럼은 IDCT 프로세서 (20b) 에 의해 방금 만회된 데이터의 로우에 걸쳐 기입된다. 사실상, 메모리 소자 (22) 는 판독-수정-기입 능력을 사용하여, 동일한 클록 사이클에 대해 동일한 메모리 장소로부터 판독하고 동일한 메모리 장소에 기입하도록 구현될 수 있다. 하나의 클록 사이클 내에, IDCT 프로세서 (20b) 에 의해 메모리 소자 (22) 의 한 장소로부터 하나의 데이터가 판독되고, IDCT 프로세서 (20a) 에 의해 동일한 장소에 기입될 수 있다. 이런 식으로 구현되어, 메모리 소자 (22) 는 전치 즉, 연속적인 16 ×16 블록에 대해 우선 컬럼과 우선 로우 사이에서 교체한다. 전치는 메모리 요구를 단지 하나의 메모리 뱅크로 감축한다.
제어기 (26) 에 의해, 메모리 소자 (22) 를 전치 메모리로 구현하는 제어 신호가 공급된다. 제어기 (26) 는 필요한 타이밍 정보를 가지며, IDCT 프로세서들 (20a 및 20b) 을 입력 데이터 블록과 동기화할 수 있다.
메모리 소자 (22) 는 기억 소자 즉, RAM 메모리 장치, 래치, 또는 다른 형태의 메모리 장치와 같이 업계에 공지된 메모리 장치 중의 어떤 것으로도 구현될 수 있다.
Ⅳ. 직렬 버터플라이
직렬 버터플라이가 도 5 의 (a) 및 (b) 에 도시되어 있다. 도 5 의 (a) 는 직렬 버터플라이의 도식적 예이며, 도 5 의 (b) 는 동일한 직렬 버터플라이의 블록도이다. 직렬 버터플라이 (140) 는 2 개의 입력 (X1 및 X2) 에 대해 동작한다. 신호 경로의 상하가 정렬되도록, 입력 (X1) 은 지연 소자 (148) 에 의해 지연된다. 입력 (X2) 은 비트-직렬 곱셈기 (150) 에 의해만큼 배율된다.를 나타낸다. 지연 소자 (148) 및 곱셈기 (150) 로부터의 출력은 직렬 가산기들 (160a 및 160b) 에 공급된다. 직렬 가산기 (160a) 는 곱셈기 (150) 로부터의 출력을 지연 소자 (148) 로부터의 출력에 가산하며, 직렬 가산기 (160b) 는 지연 소자 (148) 로부터의 출력에서 곱셈기 (150) 로부터의 출력을 감산한다. 직렬 가산기들 (160a 및 160b) 로부터의 출력은 각각 직렬 버터플라이 출력 (Z1 및 Z2) 을 구성한다. 본 발명에서, Y1 및 Y2 각각이 Z1 및 Z2 로 통과될 수 있도록 하기 위해, 직렬 가산기들 (160a 및 160b) 은 오프될 수 있게 설계된다. 예시적인 실시예에서, 직렬 버터플라이 (140) 는 2 개의 입력 스트림에 대해 동작하며, 2 개의 출력 비트 스트림을 공급한다.
비트-직렬 곱셈기 (150) 의 예시적인 블록도가 도 6 의 (a) 및 (b) 에 도시되어 있다. 도 6 (a) 는 워드-와이드 표현의 비트-직렬 곱셈기 (150) 를 나타내며, 도 6 (b) 는 비트-와이드 표현의 동일한 곱셈기 (150) 를 나타낸다. C 를 사용한 X 의 비트-직렬 곱셈은, 중간 결과항에 연속적으로 C 를 가산하고 그 결과를 하나의 2 진 비트 위치만큼 시프트함으로써 실현된다. 이것이 도 6 (a) 의 블록도에 도시되어 있다. 래치 (212) 는 16 클록 사이클마다 그 중 한 사이클 동안 인에이블되는 LD 신호에 의해 지워져, 다음 곱셈을 준비하게 된다. LD 신호는 또한 직전에 완료된 곱셈의 결과항을 가산기 (210) 로부터 병렬-대-직렬 시프트 레지스터 (214) 에 로드한다. 그 다음 상기 결과항은 다음 곱셈 동안 레지스터 (214) 로부터 직렬로 시프트 출력된다.
예시적인 실시예에서, 입력 데이터 (X), 상수 (C) 및 결과 (Y) 의 정밀도는 16-비트이다. 16-비트의 정밀도는 "IEEE Standard 1180-1990 : Specifications for the Implementations of 8 ×8 Inverse Discrete Cosine Transform" 에 의해 규정된 것보다 작은 산술 오차를 얻게 한다. 상기 16-비트 표현은 하나의 부호 비트, 9 개의 크기 비트 및 6 개의 소수 비트로 구성될 수 있다. 16-비트 이하나 이상의 다른 표현이 예측될 수 있으며, 이는 본 발명의 범위 내에 있다.
예시적인 실시예에서, 가산기 (210), 래치 (212) 및 레지스터 (214) 모두는 16-비트로 구현된다. 각 클록 사이클 동안, X 의 한 비트는 LSB 비트를 우선으로하여 비트-직렬 곱셈기 (150) 로 시프트된다. 입력 비트와 LD 신호에 따라, 래치 (212) 내에 저장되어 있는 중간 결과항에 상수 C 가 가산된다. 논리 회로 (200) 내에서, AND 게이트 (204) 는 입력 비트와 LD 신호에 근거하여 중간 결과항에 C 를 가산해야 할지를 결정한다. 그 다음 가산기 (210) 로부터의 중간 결과항은 비트 위치 D[14...0] 로 한 비트 위치만큼 시프트되어 래치 (212) 내에 다시 저장된다. 가산기 (210) 로부터의 LSB 비트는 버려지고, 래치 (212) 에서의 MSB 비트는, 예를 들어, D[15]=Co[15] (여기서 Co[15] 는 가산기 (210) 의 MSB 로부터의 캐리-아웃이다) 로 부호 확장된다. 도 6 (a) 에 도시된 대로, 비트-직렬 곱셈기 (150) 는 어큐뮬레이터와 동일한 양의 하드웨어를 사용하여 구현될 수 있는데, 이는 IC 설계를 위해 아주 경제적 (compact) 이다.
비트-직렬 곱셈기 (150) 가 도 6 (b) 에 더욱 상세히 도시되어 있다. 가산기 (210), 래치 (212) 및 레지스터 (214) 가 비트 형태로 도시되어 있다. 입력 비트 (X) 와 LD 신호에 따라, 래치 (212) 에 저장되어 있는 중간 결과항에 상수 (C) 가 가산될 수 있다. 각각의 가산기 (210) 는 다음 하위 비트의 래치 (212) 로부터 캐리-인 (Ci) 입력을 수신하고, 다음 상위 비트의 가산기 (210) 캐리-아웃 (Co) 출력을 공급한다. 이것이 가산기의 표준 캐리 체인이다.
LSB 비트의 간략한 절단 (truncation) 은 2 의 보수 출력의 결과항에 약한 음의 바이어스를 발생한다. 마지막 가산기 (210a) 에 두번째 LSB 를 가산함으로써, 이러한 약한 음의 바이어스는 오프셋될 수 있는데, 이는 출력 결과항에 1/2 LSB 의 양의 오프셋을 발생시킨다. 연속적인 곱셈기 (150) 전체에 걸쳐 절단과 양의 오프셋을 교체하는 것을 통해, 전체적인 오프셋이 최소화될 수 있다. 상기 오프셋은, 원하는 결과에 따라 하이 또는 로우로 고정 배선될 수 있는 ROUND 신호에 의해 제어된다.
직렬 가산기 (160) 의 예시적인 블록도가 도 7 (a) 에 도시되어 있다. 직렬 가산기 (160) 는, LSB 비트를 우선으로하여 2 개의 입력 (Y1 및 Y2) 을 직렬로 수신한다. 직렬 가산기 (160) 는 2 개의 입력을 가산하거나 (Y1+Y2), 다음 입력으로부터 하나의 입력을 감산하거나 (Y1-Y2) 또는 하나의 입력을 출력으로 바이패스 (Z=Y2) 할 수 있다. 상기 가산 또는 감산은 IDCT 격자 내의 직렬 가산기 (160) 의 위치, 예를 들어 직렬 가산기 (160) 가 버터플라이의 상부 레그 또는 하부 레그에 위치되었는지에 의존한다. 상기 바이패스 모드는 본 발명의 IDCT 프로세서 (20) 로 하여금 변환의 상이한 혼합을 수행할 수 있도록 한다.
입력들 (Y1 및 Y2) 은 각각 AND 게이트 (240) 및 XOR 게이트 (242) 에 직렬로 공급된다. ADD_EN 이 또한 AND 게이트 (240) 에 공급된다. ADD_EN 이 로우일 경우, AND 게이트 (240) 로부터의 출력은 로우이며, Y1 은 가산기 (244) 로 공급되지 않는다. ADD_EN 이 하이일 경우, Y1 은 가산기 (244) 로 공급된다. INVERT 신호가 XOR 게이트 (242) 및 레지스터 (246) 에 공급된다. 감산을 수행하기 위해, 입력 (Y2) 은 음수로 변환되어 다른 연산자에 가산된다. 2 의 보수를 음수로 변환하는 것은 원래 수의 모든 비트를 반전하여 LSB 비트 위치에 1 을 가산할 것을 요한다. 상기 비트의 반전은, INVERT 신호가 하이일 경우, XOR 게이트 (242) 에 의해 수행된다. LD 신호가 인에이블되고 INVERT 신호가 하이일 경우, 상기 직렬 가산을 시작할 때 1 을 저장하고 이 값을 가산기 (244) 의 캐리-인 (Ci) 에 가산함으로써, 입력 수의 LSB 비트 위치에 1 이 가산된다.
각각의 연속적인 클록 사이클 동안, 선행하는 1-비트 가산으로부터의 캐리-아웃 (Co) 은 레지스터 (246) 에 저장된다. 상기 캐리-아웃은 두 입력 (Y1 및 Y2) 으로부터의 비트의 다음 세트와 가산된다. 가산기 (244) 로부터의 합출력 (S) 은 직렬 가산기 (160) 로부터의 출력을 나타낸다.
상수 (C) 는 고정 배선되거나 마스크 프로그램될 수 있다. 예시적인 실시예에서, 버터플라이의 제 1 스테이지 (58) 는 항상 수행되기 때문에, 상기 스테이지 동안, 비트-직렬 곱셈기 (150) 에 대한 상기 상수 (C) 는 고정 배선될 수 있다. 그러나, 버터플라이의 나머지 스테이지 (62, 66 및 70) 동안, 상기 상수 (C) 는, 직렬 버터플라이 (140) 가 바이패스 모드에 놓일 경우, 곱셈기 (150) 로 하여금 입력 (X2) 과또는 입력 (X2) 과 1 의 곱을 수행하도록 하기 위해 마스크 프로그램될 수 있다. 곱셈기 (150) 는 또한 입력 (X2) 의 배율화 또는 정규화를 수행하기 위해 다른 값의 C 로 로드될 수도 있다.
도 7 에 도시된 대로, 직렬 가산기 (160) 는 2 개 입력의 가산, 감산 또는 바이패스를 수행할 수 있다. 직렬 가산기 (160) 는 직렬 버터플라이 (140) 에 의해 요구되는 기능을 수행하도록 변경될 수 있다. 예를 들어, 도 5 (b) 를 참조하면, 직렬 가산기 (160a) 는 가산 또는 바이패스만을 수행한다. 따라서, 도 7 의 직렬 가산기 (160) 는, XOR 게이트 (242) 를 제거하여 Y1 을 가산기 (244) 의 입력 (B) 에 직접 공급하며, Y2 를 AND 게이트 (240) 에 공급하도록 변경될 수 있다. 가산기 (160a) 가 가산만을 수행하기 때문에, INVERT 신호는 제거될 수 있다. 마찬가지로, 직렬 가산기 (160b) 는 감산 또는 바이패스만을 수행한다. 따라서, 직렬 가산기 (160) 의 INVERT 신호는 하이 레퍼런스에 연결될 수 있다.
직렬 가산기 (160) 는 또한, 도 3d 에 도시된 격자 (100) 의 처음 3 개 스테이지에 의해 요구되는 직렬 가산 (112) 을 구현하는, 도 4 의 직렬 가산기 (56) 에 의해 요구되는 직렬 가산 및 바이패스를 수행하는데 사용될 수 있다.
도 5 (b) 를 참조하면, 래치의 연속을 사용하여 지연 소자 (148) 가 구현될 수 있다. 래치의 수는 곱셈기 (150) 의 처리 지연을 매치하도록 선택된다.
Ⅴ. I/O 버퍼
예시적인 실시예에서, 각 IDCT 프로세서 (20) 내의 16 개 I/O 버퍼 (52) 의 뱅크는 입력 데이터를 수신하고, 변환된 데이터를 공급한다. IDCT 프로세서 (20) 로부터의 입력 및 출력은 워드 직렬 형태, 즉 클록 사이클마다 하나의 완성된 데이터 포인트로 공급된다. 16 데이터 포인트가 16 클록 사이클에 16 I/O 버퍼 (52) 로 로드된다. 일단 모든 I/O 버퍼가 로드되고 나면, 상기 16 데이터 포인트는 비트 직렬 형태, 즉 클록 사이클마다 하나의 비트로 IDCT 격자에 공급된다. 각 클록 사이클 동안, I/O 버퍼 (52) 는 또한 직렬 버터플라이의 마지막 스테이지 (70) 로부터 변환된 데이터 비트를 수신한다. 변환된 데이터는 직렬로 I/O 버퍼 (52) 에 공급된다.
I/O 버퍼 (52) 하나의 예시적인 블록도가 도 8 에 도시되어 있다. I/O 버퍼 (52) 는 16-비트 래치 (262), 16-비트 병렬-대-직렬 시프트 레지스터 (264), 16-비트 래치 (266) 및 출력 버퍼 (268) 로 구성된다. IDCT 입력은 16 I/O 버퍼 (52) 내의 모든 래치들 (262) 에 공급된다. 제어 신호 (WR(w)) 에 의해 지시되었을 때, 각각의 I/O 버퍼 (52) 는 상기 IDCT 입력을 래치한다. 제어기 (26) 로부터 비롯된 WRITE_ENABLE 신호에서 WR(w) 가 디코드된다. 각 I/O 버퍼 (52) 내의 래치 (262) 는 16 클록 사이클마다 그 중 하나 동안만 인에이블된다. 래치 (262) 에 의해 16 데이터 포인트가 래치되고 난 후, LD 신호가 인에이블되고, 래치 (262) 내에 저장되어 있는 값은 레지스터 (264) 에 공급된다.
각각의 I/O 버퍼 (52) 에 대해, LSB 레지스터 (264a) 는, LSB 비트의 시프트 출력을 우선으로하여 클록 사이클마다 하나의 비트로, 상기 데이터 포인트를 직렬로 라우팅 크로스바 (54) 에 시프트한다. 각 클록 사이클 동안, LSB 시프트 입력을 우선으로하여 클록 사이클마다 하나의 비트로, 변환된 데이터 비트 하나가 MSB 레지스터 (264q) 에 직렬로 시프트된다. 16 클록 사이클 후, 16 데이터 비트 모두는 라우팅 크로스바 (54) 로 시프트 출력되고, 변환된 데이터 비트 16 모두는 레지스터 (264) 로 시프트된다. 16 클록 사이클마다, LD 신호는 레지스터 (264) 를 다음 데이터 포인트로 로드하며, 변환된 데이터 포인트로 래치 (266) 를 로드한다. 상기 변환된 데이터는 출력 버퍼 (268) 를 통해 판독될 때까지 래치 (266) 내에 저장된다. 클록 사이클마다 하나의 변환된 데이터 포인트로, 변환된 데이터가 상기 16 I/O 버퍼 (52) 로부터 직렬로 공급되도록, 출력 버퍼 (268) 는 선택적으로 인에이블된다. 상기 판독의 순서는 READ_ENABLE 로부터 디코드되는 RD(w) 신호에 의해 제어된다.
도 8 의 블록도는 I/O 버퍼 (52) 의 일구현을 나타낸다. 여기에서 설명된 바와 같은 동일한 기능을 수행하는 다른 구현을 기대할 수 있으며, 이는 본 발명의 범위 내에 있다.
본 발명이 2-D IDCT 엔진에 대해 설명되긴 했지만, 본 발명의 개념은 이산 푸리에 변환 (DFT), 역 이산 푸리에 변환 (IDFT), 고속 푸리에 변환 (FFT), 역 고속 푸리에 변환 (IFFT), 이산 코사인 변환 (DCT) 및 하다마르 변환 (Hadamard transform) 과 같은 다른 변환들로 확장될 수 있다. 따라서, 여기에서 설명된 본 발명의 개념을 다른 변환들에 적용하는 것은 본 발명의 범위 내에 있다.
바람직한 실시예들에 대한 상술된 설명은 당업자라면 누구나 본 발명을 활용 또는 사용할 수 있도록 하기 위하여 제공된다. 이러한 실시예들에 대한 다양한 변경이 당업자에게 명백할 것이며, 여기에서 정의된 기본적인 원리는 발명적 재능을 사용하지 않고도 다른 실시예들에 적용될 수 있다. 따라서, 본 발명은 여기에서 도시된 실시예들에 한정되지 않으며, 여기에서 개시된 원리와 특징에 모순되지 않는 가장 넓은 범위에 맞추어져야 한다.
상술된 본 발명의 가변 블록 사이즈의 2-D IDCT 엔진을 사용하면, 입력 데이터를 정확하게 배열하고, 버터플라이 스테이지 전에 상기 데이터를 선택적으로 조합하며, 버터플라이 각 스테이지에서의 가산과 곱셈을 제어하는 것을 통해, 상이한 조합의 변환도 용이하게 수행할 수 있다.
게다가, 본 발명은 직렬 연산에 대비한 것이고, 직렬 가산기 및 비트-직렬 곱셈기는 한번에 하나의 데이터 비트에 대해서만 연산이 수행되기 때문에, 2-D IDCT 엔진의 설계가 상당히 간략해질 수 있다. 직렬 연산은 또한 연속적인 버터플라이 스테이지 사이의 라우팅 크로스바를 상당히 간략화할 수 있다. 그러면서도 본 발명은, IDCT 엔진의 파이프라인 구조로 인해, 병렬 연산에서와 동일한 처리량 속도를 유지할 수 있다. 다만, 연산의 직렬 특성으로 인해 처리 지연이 증가될 뿐이다.
본 발명의 2-D IDCT 의 경우, 전치 메모리와 판독-수정-기입 사이클을 사용하는 것을 통해, 동일한 클록 사이클 내에 중간 결과가 하나의 메모리 장소로부터 판독되고, 새로운 결과가 동일한 메모리 장소에 기입될 수 있게 한다. 따라서, 전치 메모리는 메모리 요구를 하나의 N ×N 데이터 블록과 동일한 사이즈의 메모리 뱅크 하나로 감축시킬 수 있다.

Claims (20)

  1. 복수의 입력 데이터 포인트 및 제 1 제어 신호를 수신하는 가산기들의 뱅크로서, 상기 제 1 제어 신호는 상기 가산기들의 뱅크로 하여금 상기 입력 데이터 포인트의 선택된 조합에 대해 가산을 수행할 것을 지시하는, 상기 가산기들의 뱅크;
    버터플라이의 복수 스테이지; 및
    상기 가산기들의 뱅크와 버터플라이의 제 1 스테이지 사이 및, 연속적인 버터플라이 스테이지들 사이에 삽입된 복수의 라우팅 크로스바를 구비하며;
    상기 버터플라이의 복수 스테이지는, 상기 버터플라이의 복수 스테이지로 하여금 상기 버터플라이의 복수 스테이지로의 선택된 입력에 대해 버터플라이 동작을 수행할 것을 지시하는 제 2 제어 신호를 수신하는 것을 특징으로 하는 가변 블록 사이즈의 IDCT 프로세서.
  2. 제 1 항에 있어서, 상기 가산기들의 뱅크 및 상기 버터플라이의 복수 스테이지가 직렬 가산기 및 비트-직렬 곱셈기를 사용해 구현되는 것을 특징으로 하는 가변 블록 사이즈의 IDCT 프로세서.
  3. 제 2 항에 있어서,
    상기 복수의 입력 데이터 포인트를 워드 직렬 형태로 수신하며, 상기 가산기들의 뱅크에 상기 입력 데이터 포인트를 비트 직렬 형태로 공급하는 I/O 버퍼의 뱅크를 더 구비하는 것을 특징으로 하는 가변 블록 사이즈의 IDCT 프로세서.
  4. 제 3 항에 있어서, 상기 버터플라이의 복수 스테이지는, 모든 스테이지가 동시에 활성화되도록 파이프라인되는 것을 특징으로 하는 가변 블록 사이즈의 IDCT 프로세서.
  5. 제 4 항에 있어서, 상기 비트-직렬 곱셈기의 피승수는 마스크를 사용해 프로그램될 수 있는 것을 특징으로 하는 가변 블록 사이즈의 IDCT 프로세서.
  6. 입력 데이터 포인트를 수신하는 제 1 의 IDCT 프로세서;
    상기 제 1 의 IDCT 프로세서에 접속된 메모리 소자;
    상기 메모리 소자에 접속된 제 2 의 IDCT 프로세서; 및
    상기 제 1 의 IDCT 프로세서, 상기 제 2 의 IDCT 프로세서 및 상기 메모리 소자에 접속되어 제어 신호를 공급하는 제어기로서, 입력 신호를 수신하여 상기 입력 신호에 따라 상기 제어 신호를 발생하는, 상기 제어기를 구비하는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  7. 제 6 항에 있어서, 상기 IDCT 프로세서는:
    상기 복수의 입력 데이터 포인트 및 제 1 제어 신호를 수신하는 가산기들의 뱅크로서, 상기 제 1 제어 신호는 상기 가산기들의 뱅크로 하여금 상기 입력 데이터 포인트의 선택된 조합에 대해 가산을 수행할 것을 지시하는, 상기 가산기들의 뱅크;
    버터플라이의 복수 스테이지; 및
    상기 가산기들의 뱅크와 버터플라이의 제 1 스테이지 사이 및, 연속적인 버터플라이 스테이지들 사이에 삽입된 복수의 라우팅 크로스바를 구비하며;
    상기 버터플라이의 복수 스테이지는, 상기 버터플라이의 복수 스테이지로 하여금 상기 버터플라이의 복수 스테이지로의 선택된 입력에 대해 버터플라이 동작을 수행할 것을 지시하는 제 2 제어 신호를 수신하는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  8. 제 7 항에 있어서, 상기 가산기들의 뱅크 및 상기 버터플라이의 복수 스테이지는 직렬 가산기 및 비트-직렬 곱셈기를 사용해 구현되는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  9. 제 8 항에 있어서, 상기 IDCT 프로세서는:
    상기 복수의 입력 데이터 포인트를 워드 직렬 형태로 수신하며, 상기 가산기들의 뱅크에 상기 입력 데이터 포인트를 비트 직렬 형태로 공급하는 I/O 버퍼의 뱅크를 더 구비하는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  10. 제 9 항에 있어서, 상기 IDCT 프로세서는 양쪽 모두의 IDCT 프로세서가 동시에 활성화되도록 파이프라인되는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  11. 제 10 항에 있어서, 상기 제 1 스테이지의 버터플라이는 항상 인에이블되어 있는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  12. 제 11 항에 있어서, 상기 비트-직렬 곱셈기의 피승수는 마스크를 사용하여 프로그램될 수 있는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  13. 제 12 항에 있어서, 상기 IDCT 엔진은 클록 사이클마다 출력 픽셀 하나의 처리량 속도를 갖는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  14. 제 13 항에 있어서, 상기 직렬 가산기 및 비트-직렬 곱셈기는 8-비트 보다 큰 해상도를 갖는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  15. 제 14 항에 있어서, 상기 직렬 가산기 및 비트-직렬 곱셈기는 16-비트 보다 큰 해상도를 갖는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  16. 제 15 항에 있어서, 상기 메모리 소자는 전치 메모리로 구성되는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 엔진.
  17. 복수의 입력 데이터 포인트의 1-차원 IDCT 변환을 수행하는 제 1 의 IDCT 변환 수단;
    상기 제 1 의 IDCT 변환 수단으로부터의 중간 결과를 저장하는 메모리 수단;
    상기 중간 결과의 1-차원 IDCT 변환을 수행하는 제 2 의 IDCT 변환 수단; 및
    제어 신호를 상기 제 1 의 IDCT 변환 수단, 상기 제 2 의 IDCT 변환 수단 및 상기 메모리 수단에 공급하는 제어기 수단으로서, 입력 신호를 수신하여 상기 입력 신호에 따라 상기 제어 신호를 발생하는, 상기 제어기 수단을 구비하는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 변환을 수행하는 장치.
  18. 제 17 항에 있어서, 상기 IDCT 변환 수단은:
    상기 복수의 입력 데이터 포인트 및 제 1 제어 신호를 수신하는 가산 수단의 스테이지로서, 상기 제 1 제어 신호는 상기 가산 수단으로 하여금 상기 입력 데이터 포인트의 선택된 조합에 대해 가산을 수행할 것을 지시하는, 상기 가산 수단의 스테이지;
    입력 데이터의 쌍에 대하여 버터플라이 동작을 수행하는 버터플라이 수단의 복수 스테이지; 및
    상기 가산 수단의 스테이지와 상기 버터플라이 수단의 복수 스테이지 사이의 신호를 라우팅하는 라우팅 수단을 구비하며;
    상기 버터플라이 수단의 복수 스테이지는, 상기 버터플라이 수단의 복수 스테이지로 하여금 상기 버터플라이 수단의 복수 스테이지로의 선택된 입력 쌍에 대해 버터플라이 동작을 수행할 것을 지시하는 제 2 제어 신호를 수신하는 것을 특징으로 하는 가변 블록 사이즈의 2-차원 IDCT 변환을 수행하는 장치..
  19. 입력 데이터 포인트를 수신하는 제 1 의 변환 프로세서;
    상기 제 1 의 변환 프로세서에 접속된 메모리 소자;
    상기 메모리 소자에 접속된 제 2 의 변환 프로세서; 및
    상기 제 1 의 변환 프로세서, 상기 제 2 의 변환 프로세서 및 상기 메모리 소자에 접속되어 제어 신호를 공급하는 제어기로서, 입력 신호를 수신하여 상기 입력 신호에 따라 제어 신호를 발생하는, 상기 제어기를 구비하는 것을 특징으로 하는 변환 엔진.
  20. 제 19 항에 있어서, 상기 변환 프로세서는:
    버터플라이 복수 스테이지; 및
    연속적인 버터플라이 스테이지들 사이에 삽입된 복수의 라우팅 크로스바를 구비하며;
    상기 버터플라이의 복수 스테이지는, 상기 버터플라이의 복수 스테이지로 하여금 상기 버터플라이의 복수 스테이지로의 선택된 입력에 대해 버터플라이 동작을 수행할 것을 지시하는 제 2 제어 신호를 수신하는 것을 특징으로 하는 변환 엔진.
KR1020007001644A 1997-08-25 1998-08-24 가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진 KR20010023031A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US91809097A 1997-08-25 1997-08-25
US08/918,090 1997-08-25
PCT/US1998/017423 WO1999010818A1 (en) 1997-08-25 1998-08-24 Variable block size 2-dimensional inverse discrete cosine transform engine

Publications (1)

Publication Number Publication Date
KR20010023031A true KR20010023031A (ko) 2001-03-26

Family

ID=25439787

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007001644A KR20010023031A (ko) 1997-08-25 1998-08-24 가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진

Country Status (5)

Country Link
EP (1) EP1018082A1 (ko)
KR (1) KR20010023031A (ko)
CN (1) CN1268231A (ko)
AU (1) AU9030298A (ko)
WO (1) WO1999010818A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003198504A (ja) * 2001-12-27 2003-07-11 Mitsubishi Electric Corp 逆拡散処理方法、拡散符号割当方法、移動体端末および基地局
JP2003223433A (ja) * 2002-01-31 2003-08-08 Matsushita Electric Ind Co Ltd 直交変換方法、直交変換装置、符号化方法、符号化装置、逆直交変換方法、逆直交変換装置、復号化方法、及び、復号化装置
US7096245B2 (en) 2002-04-01 2006-08-22 Broadcom Corporation Inverse discrete cosine transform supporting multiple decoding processes
US7725516B2 (en) * 2005-10-05 2010-05-25 Qualcomm Incorporated Fast DCT algorithm for DSP with VLIW architecture
US9110849B2 (en) 2009-04-15 2015-08-18 Qualcomm Incorporated Computing even-sized discrete cosine transforms
CN101605259B (zh) * 2009-05-31 2012-11-21 华亚微电子(上海)有限公司 对多媒体数据进行变换编、解码的装置及方法
US9069713B2 (en) 2009-06-05 2015-06-30 Qualcomm Incorporated 4X4 transform for media coding
US8762441B2 (en) 2009-06-05 2014-06-24 Qualcomm Incorporated 4X4 transform for media coding
CN101646080B (zh) * 2009-06-18 2013-09-25 杭州高特信息技术有限公司 基于avs并行流水idct快速变换的方法和装置
US9081733B2 (en) * 2009-06-24 2015-07-14 Qualcomm Incorporated 16-point transform for media data coding
US9118898B2 (en) 2009-06-24 2015-08-25 Qualcomm Incorporated 8-point transform for media data coding
US9075757B2 (en) 2009-06-24 2015-07-07 Qualcomm Incorporated 16-point transform for media data coding
US8451904B2 (en) 2009-06-24 2013-05-28 Qualcomm Incorporated 8-point transform for media data coding
CN102065309B (zh) * 2010-12-07 2012-12-05 青岛海信信芯科技有限公司 一种dct实现方法及dct实现电路
US9824066B2 (en) * 2011-01-10 2017-11-21 Qualcomm Incorporated 32-point transform for media data coding
US20160044314A1 (en) * 2014-08-08 2016-02-11 Qualcomm Incorporated System and method for reusing transform structure for multi-partition transform

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2608808B1 (fr) * 1986-12-22 1989-04-28 Efcis Circuit integre de traitement numerique de signaux

Also Published As

Publication number Publication date
EP1018082A1 (en) 2000-07-12
WO1999010818A1 (en) 1999-03-04
AU9030298A (en) 1999-03-16
CN1268231A (zh) 2000-09-27

Similar Documents

Publication Publication Date Title
US4791598A (en) Two-dimensional discrete cosine transform processor
KR20010023031A (ko) 가변 블록 사이즈의 2-차원 역 이산 코사인 변환 엔진
US5325215A (en) Matrix multiplier and picture transforming coder using the same
US7117236B2 (en) Parallel adder-based DCT/IDCT design using cyclic convolution
KR100311251B1 (ko) 2차원이산코사인변환장치,2차원역이산코사인변환장치및디지탈신호처리장치
US4821224A (en) Method and apparatus for processing multi-dimensional data to obtain a Fourier transform
US5331585A (en) Orthogonal transformation processor for compressing information
US5867601A (en) Inverse discrete cosine transform processor using parallel processing
Carlach et al. TCAD: a 27 MHz 8* 8 discrete cosine transform chip
KR20010067275A (ko) 벡터화 데이터에 대한 연산 동작 방법 및 장치
JP6357345B2 (ja) ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するためのデータ処理装置および方法
US6003058A (en) Apparatus and methods for performing arithimetic operations on vectors and/or matrices
US6460061B1 (en) 2-dimensional discrete cosine transform using a polynomial transform
JPH07121507A (ja) 離散コサイン変換装置
US5359549A (en) Orthogonal transformation processor for compressing information
KR19980041724A (ko) 역이산 여현변환방법
US5847980A (en) Product-summing arithmetic circuit
US5671169A (en) Apparatus for two-dimensional inverse discrete cosine transform
US5999958A (en) Device for computing discrete cosine transform and inverse discrete cosine transform
JP3575991B2 (ja) 直交変換回路
JP3970442B2 (ja) 離散コサイン変換装置及び逆離散コサイン変換装置
KR960014197B1 (ko) 파이프라인 분산연산을 이용한 8×8 이차원 이산여현 변환/역변환 처리장치
JP2790911B2 (ja) 直交変換演算装置
JP3977003B2 (ja) 離散コサイン変換・逆離散コサイン変換手法及びその装置
Bhattacharya et al. A VLSI implementation of the inverse discrete cosine transform

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid