KR100291532B1 - 리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템 - Google Patents

리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템 Download PDF

Info

Publication number
KR100291532B1
KR100291532B1 KR1019950006172A KR19950006172A KR100291532B1 KR 100291532 B1 KR100291532 B1 KR 100291532B1 KR 1019950006172 A KR1019950006172 A KR 1019950006172A KR 19950006172 A KR19950006172 A KR 19950006172A KR 100291532 B1 KR100291532 B1 KR 100291532B1
Authority
KR
South Korea
Prior art keywords
data
token
stage
signal
pipeline
Prior art date
Application number
KR1019950006172A
Other languages
English (en)
Other versions
KR950033896A (ko
Inventor
필립 와이즈 애드리안
필립 로빈즈 윌리엄
윌리엄 소더랜 마틴
마크 존즈 안쏘니
페터 존 클레이돈 안쏘니
Original Assignee
데니스 피셸
디스커비젼 어소우쉬에이츠
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GB9405914A external-priority patent/GB9405914D0/en
Application filed by 데니스 피셸, 디스커비젼 어소우쉬에이츠 filed Critical 데니스 피셸
Publication of KR950033896A publication Critical patent/KR950033896A/ko
Application granted granted Critical
Publication of KR100291532B1 publication Critical patent/KR100291532B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0607Interleaved addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3871Asynchronous instruction pipeline, e.g. using handshake signals between stages
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3873Variable length pipelines, e.g. elastic pipeline
    • 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/3893Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • 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/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/13Adaptive entropy coding, e.g. adaptive variable length coding [AVLC] or context adaptive binary arithmetic coding [CABAC]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • H04N19/91Entropy coding, e.g. variable length coding [VLC] or arithmetic coding

Abstract

다중-규격 비디오 해제 장치는 파이프라인 프로세싱 머신으로서 배치된 2선식 인터페이스에 의해 상호접속된 복수의 스테이지를 구비한다. 제어 토큰 및 DATA 토큰은 제어 및 데이터 모두를 토큰 포맷으로 운반하기 위해 단일 2선식 인터페이스 상으로 전달한다. 토큰 디코드 회로는 해당 스테이지와 관련된 제어 토큰으로서 임의의 토큰을 인식하고 파이프라인을 따라 인식되지 않은 제어 토큰을 전달하기 위해 임의의 스테이지에 위치가 정해진다. 리컨피그레이션 프로세싱 회로는 선택된 스테이지에 위치가 정해지고, 식별된 DATA 토큰을 처리하기 위해 이와 같은 스테이지를 리컨피그하기 위해 인식된 제어 토큰에 응답한다. 이 시스템을 구현하기 위해 다양한 지원 서브시스템 회로 및 프로세싱 기술이 공개된다.

Description

리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템
제1도는 2개의 내부 제어 신호의 다른 조합에 대한 6-스테이지 파이프라인의 6 사이클을 도시하는 도면.
제2(a)도 및 제2(b)도는 각각의 스테이지가 보조 데이터 기억장치를 포함하는 파이프라인을 도시하며, 파이프라인 스테이지들은 파이프라인에서의 지연에 응답하여 “압축” 및 “확장”할 수 있는 방식을 도시하는 도면.
제3(aa)도, 제3(ab)도, 제3(ba)도 및 제3(bb)는 2선식 인터페이스 및 다상 클록을 사용하는 파이프라인의 바람직한 실시예의 스테이지들 사이의 데이터 전송의 제어를 도시하는 도면.
제4도는 2선식 전송 제어를 구현하는 파이프라인 스테이지의 기본적인 실시예를 도시하며 또한 이 2선식 전송 제어를 갖는 2개의 연속하는 파이프라인프로세싱 스테이지를 도시하는 블록도.
제5(a)도 및 제5(b)도는 제4도에 도시된 파이프라인 스테이지에서 사용된 타이밍 신호들, 입력 및 출력 데이터, 및 내부 제어 신호들 사이의 관계를 도시하는 타이밍선도의 한 예를 나타내는 도면.
제6도는 확장 비트의 제어하에 자신의 상태를 유지하는 파이프라인 스테이지의 한 예를 나타내는 블록도.
제7도는 스테이지 작동 데이터 워드들(stage activation data words)을 디코딩하는 파이프라인 스테이지의 블록도.
제8(a)도 및 제8(b)도는 “데이터 복제” 파이프라인 스테이지를 예시하는 2선식 전송 제어의 사용을 도시하는 블록도.
제9(a)도 및 제9(b)도는 제8(a)도 및 제8(b)도에 도시된 하나의 실시예에서 사용되는 2상 클록, 2선식 전송 제어 신호들 및 그 외의 내부 데이터 및 제어 신호들을 도시하는 타이밍 선도의 하나의 예를 나타내는 도면.
제10도는 리컨피그 가능한 프로세싱 스테이지의 블록도.
제11도는 공간 디코더의 블록도.
제12도는 시간 디코더의 블록도.
제13도는 비디오 포맷터의 블록도.
제14(a)도 내지 제14(c)도는 본 발명에서 사용되는 메모리 블록들의 여러가지 배열을 도시하는 도면.
제14(a)도는 매크로블럭의 제1배열을 나타내는 메모리 맵.
제14(b)도는 매크로블럭의 제2배열을 나타내는 메모리 맵.
제14(c)도는 매크로블럭의 또다른 배열을 나타내는 메모리 맵.
제15도는 가능한 테이블 선택 값들의 벤(Venn) 다이어그램.
제16도는 본 발명에서 사용되는 화상 데이터의 가변 길이를 도시하는 도면.
제17도는 예측 필터를 포함하는 시간 디코더의 블록도.
제18도는 예측 필터링 프로세스를 그림으로 도시한 도면.
제19도는 매크로블록 구조의 일반화된 표시를 도시하는 도면.
제20도는 시작 코드 검출기의 일반화된 블록도를 도시하는 도면.
제21도는 데이터 스트림에서의 시작 코드의 한 예를 도시하는 도면.
제22도는 플래그 발생기, 디코드 인덱스, 헤더 발생기, 잉여 워드 발생기 및 출력 래치 사이의 관계를 나타내는 블록도.
제23도는 공간 디코더 DRAM 인터페이스의 블록도.
제24도는 기록 스윙 버퍼의 블록도.
제25도는 처리되는 블록으로부터 오프셋된 예측 데이터를 도시하는 그림으로 나타낸 도면.
제26도는 (1,1)만큼 오프셋된 예측 데이터를 도시하는 그림으로 나타낸 도면.
제27도는 허프만 디코더 및 공간 디코더의 파서 상태 머신(parser state machine)을 도시하는 블록도.
제28도는 예측 필터를 도시하는 블록도.
제29도는 범용 디코더 시스템을 도시하는 도면.
제30도는 JPEG 정지 화상 디코더를 도시하는 도면.
제31도는 JPEG 비디오 디코더를 도시하는 도면.
제32도는 다중-규격(multi-standard) 비디오 디코더를 도시하는 도면.
제33도는 토큰의 시작 및 끝을 도시하는 도면.
제34도는 토큰 어드레스 및 데이터 필드를 도시하는 도면.
제35도는 8 비트보다 더 넓은 인터페이스상의 토큰을 도시하는 도면.
제36도는 매크로블록 구조를 도시하는 도면.
제37도는 2선식 인터페이스 프로토콜을 도시하는 도면.
제38도는 외부 2선 인터페이스의 위치를 도시하는 도면.
제39도는 클록 전파를 도시하는 도면.
제40도는 2선식 인터페이스 타이밍을 도시하는 도면.
제41도는 액세스 구조의 한 예를 도시하는 도면.
제42도는 판독 전송 사이클을 도시하는 도면.
제43도는 액세스 시작 타이밍을 도시하는 도면.
제44도는 2개의 기록 전송을 갖는 액세스의 한 예를 도시하는 도면.
제45도는 판독 전송 사이클을 도시하는 도면.
제46도는 기록 전송 사이클을 도시하는 도면.
제47도는 리프레시 사이클을 도시하는 도면.
제48도는 32비트 데이터 버스와 256 킬로비트 깊이의 DRAM (9비트 행 어드레스)을 도시하는 도면.
제49도는 임의의 스트로브 신호에 대한 타이밍 파라미터를 도시하는 도면.
제50도는 임의의 2개의 스트로브 신호들 사이에서 타이밍 파라미터를 도시하는 도면.
제51도는 버스와 스트로브 사이의 타이밍 파라미터를 도시하는 도면.
제52도는 버스와 스트로브 사이의 타이밍 파라미터를 도시하는 도면.
제53도는 MPI 판독 타이밍을 도시하는 도면.
제54도는 MPI 기록 타이밍을 도시하는 도면.
제55도는 메모리 맵에서 큰 정수의 구조를 도시하는 도면.
제56도는 범용 디코더 클록 영역(typical decoder clock regime)을 도시하는 도면.
제57도는 입력 클록 구비조건을 도시하는 도면.
제58도는 공간 디코더를 도시하는 도면.
제59도는 입력 회로의 입력 및 출력을 도시하는 도면.
제60도는 코드화된 포트 프로토콜을 도시하는 도면.
제61도는 시작 코드 검출기를 도시하는 도면.
제62도는 토큰으로 검출되고 변환된 시작 코드를 도시하는 도면.
제63도는 토큰을 전달하는 시작 코드 검출기를 도시하는 도면.
제64도는 오버래핑 MPEG시작 코드(정렬된 바이트)를 도시하는 도면.
제65도는 오버래핑 MPEG 시작 코드(정렬되지않은 바이트)를 도시하는 도면.
제66도는 2개의 비디오 시퀀스 사이에서의 점핑(jumping)을 도시하는 도면.
제67도는 잉여 토큰 삽입의 시퀀스를 도시하는 도면.
제68도는 디코더 기동 제어를 도시하는 도면.
제69도는 출력전에 큐(queued)되는 인에이블링된 스트림을 도시하는 도면.
제70도는 공간 디코더 버퍼를 도시하는 도면.
제71도는 버퍼 포인터를 도시하는 도면.
제72도는 비디오 디멀티플렉서를 도시하는 도면.
제73도는 화상의 구조를 도시하는 도면.
제74도는 4:2:2 매크로블록의 구조를 도시하는 도면.
제75도는 픽셀의 크기로부터 매크로블록의 크기를 산출하는 것을 도시하는 도면.
제76도는 공간 디코딩을 도시하는 도면.
제77도는 H.261 역 양자화의 개요를 도시하는 도면.
제78도는 JPEG 역 양자화의 개요를 도시하는 도면.
제79도는 MPEG 역 양자화의 개요를 도시하는 도면.
제80도는 양자화 테이블 메모리 맵을 도시하는 도면.
제81도는 JPEG 베이스라인(baseline) 순차 구조의 개요를 도시하는 도면.
제82도는 토큰화된 JPEG 화상을 도시하는 도면.
제83도는 시간 디코더를 도시하는 도면.
제84도는 화상 버퍼 사양을 도시하는 도면.
제85도는 MPEG화상 시퀀스 (m=3)을 도시하는 도면.
제86도는 “I” 화상이 저장되고 출력되는 방법을 도시하는 도면.
제87도는 “P” 화상이 형성된 다음 저장되고 출력되는 방법을 도시하는 도면.
제88도는 “B” 화상이 형성된 다음 출력되는 방법을 도시하는 도면.
제89도는 P 화상 형성을 도시하는 도면.
제90도는 H.261 예측이 형성되는 방법을 도시하는 도면.
제91도는 H.261 “시퀀스”를 도시하는 도면.
제92도는 H.261 구문의 계층을 도시하는 도면.
제93도는 H.261 화상 층을 도시하는 도면.
제94도는 블록 그룹의 H.261 배열을 도시하는 도면.
제95도는 H.261 “슬라이스(slice)” 층을 도시하는 도면.
제96도는 매크로블록의 H.261 배열을 도시하는 도면.
제97도는 블록의 H.261 시퀀스를 도시하는 도면.
제98도는 H.261 매크로블록 층을 도시하는 도면.
제99도는 블록에서의 H.261 배열 펠을 도시하는 도면.
제100도는 MPEG구문의 계층을 도시하는 도면.
제101도는 MPEG 시퀀스 층을 도시하는 도면.
제102도는 MPEG 그룹의 화상 층을 도시하는 도면.
제103도는 MPEG 화상 층을 도시하는 도면.
제104도는 MPEG “슬라이스” 층을 도시하는 도면.
제105도는 MPEG 블록 시퀀스를 도시하는 도면.
제106도는 MPEG 매크로블록 층을 도시하는 도면.
제107도는 “개방형(open) GOP”을 도시하는 도면.
제108도는 액세스 구조의 한 예를 도시하는 도면.
제109도는 액세스 시작 타이밍을 도시하는 도면.
제110도는 고속 페이지 판독 사이클을 도시하는 도면.
제111도는 고속 페이지 기록 사이클을 도시하는 도면.
제112도는 리프레시 사이클을 도시하는 도면.
제113도는 칩 어드레스로부터 열 어드레스 및 행 어드레스를 추출하는 방법을 도시하는 도면.
제114도는 임의의 스트로브 신호에 대한 타이밍 파라미터를 도시하는 도면.
제115도는 임의의 2개의 스트로브 신호 사이의 타이밍 파라미터를 도시하는 도면.
제116도는 버스와 스트로브 사이의 타이밍 파라미터를 도시하는 도면.
제117도는 버스와 스트로브 사이의 타이밍 파라메타를 도시하는 도면.
제118도는 허프만 디코더 및 파서를 도시하는 도면.
제119도는 H.261 및 MPEG AC 계수 디코딩 흐름도를 도시하는 도면.
제120도는 JPEG(AC 및 DC) 계수 디코딩에 대한 블록도.
제121도는 JPEG(AC 및 DC) 계수 디코딩에 대한 흐름도.
제122도는 허프만 토큰 포맷터에의 인터페이스를 도시하는 도면.
제123도는 토큰 포맷터 블록도.
제124도는 H.261 및 MPEG AC 계수 디코딩을 도시하는 도면.
제125도는 허프만 ALU에의 인터페이스를 도시하는 도면.
제126도는 허프만 ALU의 기본 구조를 도시하는 도면.
제127도는 버퍼 관리기(buffer manager)를 도시하는 도면.
제128도는 imodel 및 hsppk 블록도.
제129도는 imex 상태 선도.
제130도는 버퍼 기동을 설명하는 도면.
제131도는 DRAM 인터페이스를 도시하는 도면.
제132도는 기록 스윙(swing) 버퍼를 도시하는 도면.
제133도는 산술 블록을 도시하는 도면.
제134도는 iq 블록도.
제135는 iqca 상태 머신을 도시하는 도면.
제136도는 IDCT 1-D 변환 알고리즘을 도시하는 도면.
제137도는 IDCT 1-D 변환 아키텍쳐를 도시하는 도면.
제138도는 토큰 스트림 블록도.
제139도는 표준 블록 구조를 도시하는 도면.
제140도는 마이크로프로세서 테스트 액세스(test access)를 도시하는 블록도.
제141도는 1-D 변환 마이크로-아키텍춰를 도시하는 도면.
제142도는 시간 디코더 블록도.
제143도는 2선식 인터페이스 스테이지의 구조를 도시하는 도면.
제144도는 어드레스 발생기 블록도.
제145도는 블록 및 픽셀 오프셋을 도시하는 도면.
제146도는 다수의 예측 필터를 도시하는 도면.
제147도는 한개의 예측 필터를 도시하는 도면.
제148도는 1-D 예측 필터를 도시하는 도면.
제149도는 픽셀 블록을 도시하는 도면.
제150도는 판독 러더(read rudder)의 구조를 도시하는 도면.
제151도는 블록 및 픽셀 오프셋을 도시하는 도면.
제152도는 예측 예를 도시하는 도면.
제153도는 판독 사이클을 도시하는 도면.
제154도는 기록 사이클을 도시하는 도면.
제155도는 타이밍 기준(timing references)을 갖는 상위-레벨 레지스터 블록도.
제156도는 프레젠테이션 번호(presentation number)를 증가시키기 위한 제어를 도시하는 도면
제157도는 버퍼 관리기 상태 머신 (전체)을 도시하는 도면.
제158도는 상태 머신 메인 루프를 도시하는 도면.
제159도는 SIF(22 × 18 매크로블록) 화상을 포함하는 버퍼 0를 도시하는 도면.
제160도는 디스플레이 윈도우를 갖는 SIF 성분 0을 도시하는 도면.
제161도는 기억장치 블록 어드레스를 도시하는 한 예의 화상 포맷을 도시하는 도면.
제162도는 SIF(22 × 18 매크로블록) 화상을 포함하는 버퍼 0를 도시하는 도면.
제163도는 한 예의 어드레스 산출을 도시하는 도면.
제164도는 기록 어드레스 발생 상태 머신을 도시하는 도면.
제165도는 데이터 경로의 슬라이스를 도시하는 도면.
제166도는 데이터 경로의 2 사이클 동작을 도시하는 도면.
제167도는 모드 1 필터링을 도시하는 도면.
제168도는 수평 업-샘플러 데이터경로를 도시하는 도면.
제169도는 컬러-공간(color-space) 변환기의 구조를 도시하는 도면.
* 도면의 주요부분에 대한 부호의 설명
33 : 토큰 디코더 34 : 입력 래치
36 : 프로세싱 유닛 39 : 액션 식별부
41, 265 : 출력 래치 43, 44 : 레지스터
56,321 : 허프만 디코더
58, 100, 116, 176, 302, 421 : DRAM 인터페이스
59 : 버퍼 관리기 68 : 상태머신
91, 111, 171 : 포크
94, 114, 174, 301, 420, 452 : 어드레스 발생기
103, 179, 454 : 예측 필터 106 : 출력 선택기
186 : 기록 신호 발생기 189 : 출력 신호 발생기
201 : 전방 예측 필터 204 : 후방 예측 필터
221 : 값 레지스터 224 : 디코더 레지스터
225 : 검출기 228 : 값 디코더
251 : 플래그 발생기 264 : 잉여 워드 발생기
303 : 외부 DRAM 322 : 파서 상태 머신
441, 444 : 역지그재그 RAM 442 : 입력 포맷터
446 : 반올림 및 포화 블록 455 : 예측 가산기
456 : 판독 러더 가산기 457 : 기록 러더 가산기
458 : 출력 인터페이스 가산기 459 : 마이크로인터페이스
460 : JTAG
본 출원은 1994년 3월 24일자로 출원된 영국 특허출원 제9405914.4호에 근거하여 우선권을 주장하고 있다.
[발명의 개요]
본 발명은 서로 달리 인코딩된 복수의 입력 신호들(a plurality differetly encoded input signals)을 압축해제 및/또는 디코딩 동작을 위한 압축해제용 장치 및 방법(methods and apparatus for decompression)에 있어서의 개선에 관한 것이다. 이후 설명을 위해 선택된 예시적인 실시예는 복수의 인코딩된 화상 규격의 디코딩(the decoding of a plurality of encoded picture standards)에 관련된 것이다. 특히, 이 실시예는 JPEG, MPEG 및 H.261으로 알려져 있는 공지된 규격들 중 하나의 디코딩에 관련된 것이다.
본 발명의 직렬 파이프라인 프로세싱 시스템(serial pipeline processing system)은 제어 토큰 및 데이터 토큰 형태로 된 독특한 전용 대화형 인터페이싱 토큰들(unique and specialized interactive interfacing tokens)을 리컨피그 가능한 파이프라인 프로세서로서 배치된 복수의 적응형 압축해제 회로들(adaptive decompression circuits) 및 기타 같은 종류의 것에 전달하는데 사용되는 단일의 2선식 버스(two-wire bus)를 구비하고 있다.
[종래의 기술]
한 종래의 시스템은 미국 특허 제5,216,724호에 기재되어 있다. 바람직한 실시예에서, 이 장치는 복수의 계산 모듈(compute module)을 구비하고 있는데 전부 4개의 계산 모듈이 병렬로 결합되어 있다. 각각의 계산 모듈은 프로세서, 듀얼 포트 메모리(dual port memory), 스크래치-패드 메모리(scratch-pad memory) 및 중재 메카니즘(arbitration mechanism)을 가지고 있다. 제1버스는 상기 계산 모듈들과 호스트 컴퓨터를 결합시킨다. 상기 디바이스는 제2버스를 사용하여 호스트 프로세서 및 계산 모듈들에 결합된 공유 메모리(shared memory)를 구비하고 있다.
미국 특허 제4,785,349호는 전송을 위해 완전 포맷(format)되며, 콤팩트 디 스크 매체상에 기록되고, 종래의 비디오 프레임 속도(video frame rate)로 디코딩되는 것을 개시하고 있다. 압축동안에 한 프레임의 영역(region)들은 각각의 영역에 특정한 최적 필 코딩 방법(optimum fill coding method)을 선택하기 위하여 개별적으로 분석된다. 압축 임계값(compression threshold)을 최적화하기 위하여 영역 디코딩 시간 추정(region decoding time estimate)이 행해진다. 영역들의 크기 및 위치를 전달하는 영역 기술 코드들(region descriptive codes)은 데이터 스트림의 제1세그먼트에 모여 있다. 영역들에 대한 픽셀 진폭 표시값들(pixel amplitude indications)을 전달하는 영역 필 코드들은 필 코드 타입(fill code type)에 따라 모아져서 데이터 스트림의 다른 세그먼트들에 위치하게 된다. 데이터 스트림 세그먼트들은 그들 각각의 통계적 분포에 따라서 개별적으로 가변 길이로 코드화되고(variable length coded) 포맷되어 데이터 프레임을 형성한다. 프레임당 바이트 수는 재생 동안에 콤팩트 디스크의 정지(pause)를 최소화하도록 선택된 평균 횟수를 제공하기 위하여 역 프레임 시퀀스 분석(reverse frame sequence analysis)에 의해 결정된 보조 데이터(auxiliary data)에 의해 위더(wither)되어 콤팩트 디스크의 예측할 수 없는 탐색 모드 잠재 주기 특성(seek mode latency periods characteristic)을 방지할 수 있다. 디코더는 데이터 스트림의 개별 세그먼트들을 별도로 가변 길이로 디코딩(variable length decoding)하기 위하여 코드스트림(code stream)에 있는 통계적 정보에 응답하는 가변 길이 디코더를 포함한다. 영역 위치 데이터는 영역 기술 데이터(region descriptive data)로부터 도출되어 필 코드 타입(예를들어, 상대적(relative), 절대적(absolute), 이진(dyad) 및 DPCM)의 검출로 선택된 복수개의 영역 특정 디코더로 영역 필 코드(region fill code)와 함께 인가되며 디코딩된 영역 픽셀들은 차후의 디스플레이를 위한 비트 맵으로 저장된다.
미국 특허 제4,922,341호는 디지털 텔레비젼 신호에 대한 영상 데이터의 장면 모델 보조 감축(scene-model-assisted reduction)을 위한 방법을 개시하고 있으며 이에 따라 시간 t에 공급된 화상 신호가 코드화되며 시간 t-1에 이미 코드화된 장면(scene)으로부터의 선행 프레임(predecessor frame)은 기준으로서 영상 기억장치에 존재하게 되며, 프레임 대 프레임 정보는 증폭율, 쉬프트율(shift factor)및 적응적으로 획득된 4분 트리 분할 구조(quad-tree division structure)로 이루어져 있다. 시스템이 초기화되면, 균일한 소정의 그레이 스케일 값 또는 정의된 휘도(luminance) 값으로 표현된 화상 하프-톤(picture half-tone)이 모든 화소(picture elements)(pixels)에 대해 동일한 방식으로 송신기에 있는 코더(coder)의 영상 기억장치로 또한 수신기 기억장치에 있는 디코더의 영상 기억장치에 기록된다. 디코더에 있는 영상 기억장치 뿐만아니라 코더에 있는 영상 기억장치 모두 각각 그 자신으로의 피드백을 가지고 동작하여 코더 및 디코더에 있는 영상 기억장치의 내용은 가변 크기의 블록으로 판독될 수 있고, 휘도를 1보다 크거나 또는 1보다 작은 증폭율로 증폭할 수 있고 어드레스를 천이시켜 영상 기억장치에 다시 기록할 수 있도록 하며, 이로 인해 가변 크기의 블록들이 공지의 4분 트리 데이터 구조에 따라 편성된다.
미국 특허 제5,122,875호는 HDTV 신호를 인코딩/디코딩하기 위한 장치를 개시하고 있다. 이 장치는 압축된 비디오 데이터 및 이와 관련된 코드워드(codeword) T를 나타내며, 이 코드워드 CW에 의해 표현되는 데이터의 타입을 정의하는 계층적층으로 된 코드워드 CW를 제공하기 위하여 고선명 비도 소스 신호에 응답하는 압축회로를 포함하고 있다. 코드워드 CW 및 T에 응답하는 우선순위 선택회로는, 이 코드워드(CW)들을 높은 우선순위 코드워드 시퀀스 및 낮은 우선순위 코드워드 시퀀스로 파스(parse)하는데 높은 우선순위 코드워드 시퀀스 및 낮은 우선순위 코드워드 시퀀스는 영상 재생에 비교적 더 중요하고 또한 덜 중요한 압축된 비디오 데이터에 각각 대응한다. 높은 우선순위 코드워드 시퀀스 및 낮은 우선순위 코드워드 시퀀스에 응답하는 전송 프로세서는, 높은 우선순위 코드워드 및 낮은 우선순위 코드워드로 된 높은 우선순위 트랜스포트 블록(transport block) 및 낮은 우선순위 트랜스포트 블록을 각각 형성한다. 각각의 트랜스포트 블록은 헤더, 코드워드 CW 및 에러 검출 체크 비트를 포함하고 있다. 각각의 트랜스포트 블록들은 추가의 에러 체크 데이터를 덧붙이기 위해 순방향 에러 체크 회로(forward error check circuit)에 인가된다. 이후에 높은 우선순위 데이터 및 낮은 우선순위 데이터는 모뎀에 인가되어 전송을 위해 각각의 반송파들을 직교 진폭 변조시킨다(quadrature ampl i tude modulates).
미국 특허 제5,146,325호는 압축된 영상 데이터를 압축해제하기 위한 비디오 압축해제 시스템을 개시하고 있는데 여기에서는 비디오 신호의 기수 필드 및 우수 필드가 독립적으로 내부 프레임(intraframe) 압축 모드 및 프레임 간(interframe) 압축 모드의 순서로 압축된 다음에 전송을 위해 인터리빙된다(interleave). 우수 필드 및 기수 필드는 독립적으로 압축해제된다. 압축해제된 유효 우수/기수 필드 데이터를 이용할 수 없는 구간 동안, 우수/기수 필드 데이터가 이용할 수 없는 우수/기수 필드 데이터를 대신하게 된다. 데이터의 기수 필드 및 우수 필드를 독립적으로 압축해제시키고 이용할 수 없는 데이터를 반대 필드의 데이터로 대체시키는 것은 시스템 기동 및 채널 변경 동안에 영상 디스플레이 대기 시간을 효과적으로 감소시키기 위해 사용될 수 있다.
미국 특허 제5,168,356호는 신호 전송을 위하여 인코딩된 비디오 데이터를 트랜스포트 블록(transport block)으로 분할(segment)하기 위한 장치를 포함하는 비디오 신호 인코딩 시스템을 개시하고 있다. 트랜스포트 블록 포맷은 전송된 데이터의 손실(loss) 또는 손상(corruption)이 발생하는 때에 데이터 스트림으로의 재입력 시점(re-entry point)을 결정하는데 이용할 수 있는 헤더 데이터를 제공함으로써 수신기에서의 신호 복구(signal recovery)를 향상시킨다. 재입력 시점들은 각각의 트랜스포트 블록에 있는 인코딩된 비디오 데이터에 내장된 2차 트랜스포트 헤더(secondary transport header)를 제공함으로써 최대로 된다.
미국 특허 제5,168,375호는 하나 또는 그 이상의 데시메이션(decimation), 보간(interpolation) 및 샤프닝(sharping) 함수들에 제공하기 위한 하나의 필드의 영상 데이터 샘플들을 처리하는 방법을 개시하고 있다. 이것은 JPEG 압축 시스템에서 이용되고 있는 것과 같은 배열 변환 프로세서(array transform processor)에 의해 달성된다. 데이터 샘플 블록들은 데시메이션 및 보간 프로세스 모두에서 이산 우수 코사인 변환(discrete even cosine transform: DECT)에 의하여 변환되며, 그 후에 주파수 항의 갯수가 변경된다. 데시메이션의 경우에, 주파수 항의 갯수는 감소되며, 그 다음에 역변환을 하여 원래의 데이터 블록을 나타내는 샘플 포인트의 크기가 작아진 매트릭스를 생성한다. 보간의 경우에는, 제로 값을 갖는 부가적인 주파수 성분이 주파수 성분들의 배열 사이에 삽입되고 그 후 역 변환을 하여 스펙트럼 대역폭을 증가시키지 않고 확대된 데이터 샘플링 세트(enlarged data sampling set)를 생성한다. 주파수 영역에서의 데이터 및 필터 커널(filter kernel)의 변환들의 곱을 포함하는 콘벌루션(convolution) 또는 필터링 동작에 의하여 달성되는 샤프닝(sharpening)의 경우에는, 역 변환이 제공되며 그 결과 한 세트의 처리된 데이터 샘플 블록들이 생긴다. 이 블록들은 오버랩되며(overleaped) 그 다음에 지정된 샘플들을 저장하고 오버랩 영역들로부터 잉여 샘플들(excess samples)을 제거한다. 이 커널의 공간적 표현은 선형 위상 필터에 대하여 성분들의 갯수를 감소시킴으로서 수정되며, 제로 패딩되어(zero-padded) 데이터 블록의 샘플 수를 같도록 하고, 그 후 패딩된 커널 매트릭스의 이산 기수 코사인 변환(discreet odd cosine transform)(DOCT)을 형성한다.
미국 특허 제5,175,617호는 전화선 대역제한 아날로그 채널(telephone line band-limited analog channels)을 통하여 로그맵(logmap) 비디오 영상을 전송하기 위한 시스템 및 방법을 개시하고 있다. 로그맵 영상에서의 픽셀 구성은 중심에서 보다 큰 밀도의 픽셀을 가지는 사람의 눈의 센서 구조에 매칭되도록 설계되어 있다. 송신기는 주파수 대역을 채널들로 분할하고 하나 또는 두개의 픽셀을 각각의 채널에 할당한다. 예를들어 3KHz 음성 특성 전화선(voice quality telephone line)은 약 3.9Hz 의 간격을 유지하는 768개의 채널들로 분할된다. 각각의 채널은 직각인 2개의 반송파로 구성되어 있으며 따라서 각각의 채널은 2개의 퍽셀을 전달한다.
어떤 채널은 수신기로 하여금 수신된 신호의 위상 및 크기 모두를 검출할 수 있도록 하는 특수한 교정 신호(special calibration signals)를 위해 예비로 남겨둔다.
센서 및 픽셀들이 한 뱅크의 발진기들에 직접 접속되고 수신기가 각각의 채널을 연속하여 수신할 수 있는 경우에, 수신기는 상기 송신기와 동기될 필요가 없다. FFT 알고리즘은 수신기가 제1프레임에 동기한 다음 매 프레임 주기마다 후속 프레임들을 획득하게 되는 연속적인 경우에 고속의 이산 근사(fast discrete approximation)를 구현한다. 프레임 주기는 샘플링 주기와 비교하여 상대적으로 낮으므로 수신기는 일단 제1프레임이 검출되면 프레임 동기를 상실하지 않는다.
실험상 비디오 전화는 초당 4개의 프레임을 전송하고, 1440개의 픽셀 로그맵 영상들에 대해 직교 코딩(quadrature coding)을 적용하고 초당 40,000 비트가 넘는 효율적인 데이터 전송 속도를 달성하였다.
미국 특허 제5,185,819호는 내부프레임 압축 모드와 프레임간 압축 모드의 순서로 독립적으로 압축된 기수 필드 및 우수 필드의 비디오 신호를 갖는 비디오 압축 시스템을 개시하고 있다. 내부프레임 우수 필드 압축된 데이터가 내부프레임 우수 필드 압축된 데이터의 연속하는 필드사이의 중간에 있도록, 독립적으로 압축된 데이터의 기수 필드 및 우수 필드는 전송을 위해 인터리빙된다. 인터리빙된 시퀀스는 전송된 데이터의 양을 증가시키지 않고 디코딩하기 위하여 신호로의 입력 시점(entry points)의 수의 2배를 수신기에 제공한다.
미국 특허 제5,212,742호는 실시간으로 압축/압축해제하기 위하여 비디오 데이터를 처리하는 장치 및 방법을 개시하고 있다. 이 장치는 복수의 계산 모듈을 구비하고 있으며, 바람직한 실시예에서는, 전부 4개의 계산 모듈이 병렬로 결합되어 있다. 각각의 계산 모듈은 프로세서, 듀얼 포트 메모리, 스크래치 패드 메모리 및 중재 메카니즘을 가지고 있다. 제1버스는 계산 모듈 및 호스트 프로세서에 결합되어 있다. 마지막으로, 이 디바이스는 호스트 프로세서 및 제 2버스를 가지는 계산 모듈에 결합되어 있는 공유 메모리를 구비하고 있다. 이 방법은 연산을 행하는 각각의 프로세서에 대해 영상 부분들을 할당하는 것을 다룬다.
미국 특허 제5,231,484호는 제안된 ISO/IEC MPEG 규격을 가지고 사용하기에 적합한 인코더를 구현하기 위한 시스템 및 방법을 개시하고 있다. 입력되는 디지털 동화상 비디오 시퀀스들(incoming digital motion video sequences)을 여러가지로 적응성있게 미리 처리하기 위해 동작하고, 시퀀스 내의 화상들에 비트를 할당하며 비디오 시퀀스 내의 화상의 다른 영역들에서의 변환 계수들을 적응적있게 양자화하여 그 화상에 할당된 비트의 수가 정해지면 최적의 시각 품질(optimal visual quality)을 제공하도록 하는 세개의 협동하는 구성 요소들 또는 서브시스템이 포함되어 있다.
미국 특허 제5,267,334호는 이동하는 영상들의 시퀀스에 대하여 컴퓨터 시스템에서 프레임 중복(frame redundancy)을 제거하는 방법을 개시하고 있다. 이 방법은 이동하는 영상들의 시퀀스에 제1장면 변동을 검출하는 단계와 제1영상에 대한 완전한 장면 정보를 포함하는 제1키프레임(keyframe)을 생성하는 단계를 구비하고 있다. 바람직한 실시예에서, 제1키프레임은 "포워드-페이싱"(forward-facing) 키 프레임 또는 내부프레임(intraframe)이라고 알려져있으며, 일반적으로 CCITT 압축된 비디오 데이터에 존재한다. 이 과정은 그 다음에 적어도 하나의 중간의 압축된 프레임을 생성하는 단계를 구비하는데, 상기 적어도 하나의 중간의 압축된 프레임은 이동하는 영상 시퀀스에서 시간적으로 제1영상의 다음에 오는 적어도 하나의 영상에 대하여 제1영상으로부터 차 정보(difference information)를 포함하고 있다. 이는 인터프레임으로 알려진 적어도 하나의 프레임이다. 마지막으로 이동하는 영상 시퀀스에서 제2의 장면 변동을 검출하여 "백워드-페이싱"(backward-facing) 키프레임으로 알려진 제2장면 변동 바로 이전에 디스플레이된 영상에 대한 완전한 장면 정보를 포함하고 있는 제2키프레임을 생성한다. 이 제1키프레임과 적어도 하나의 중간의 압축 프레임은 순방향 재생(forward play)를 위하여 링크(link)되며, 제2키프레임과 중간의 압축된 프레임들은 역방향 재생(reverse play)를 위하여 역으로 링크된다. 내부프레임은 또한 영상들이 순방향으로 재생되는 때에 완전한 장면 정보의 생성을 위해 사용될 수도 있다. 이 시퀀스가 역방향으로 재생되는 때에는 백워드-페이싱 키프레임이 완전한 장면 정보의 생성을 위해 사용된다.
미국 특허 제5,276,513호는 정해진 수의 종래 기술의 영상-피라미드 스테이지(image-pyramid stage)을 구비하는 제1회로 장치와 상기와 동일한 정해진 수의 신규한 모션-벡터 스테이지(motion-vector stage)을 구비한 제2회로 장치를 개시하는데, 이는 최소 시스템 처리 지연 및/또는 최소 시스템 처리 지연 실행 및/또는 최소 하드웨어 구조 실행을 사용하여 실시간으로 단가에 유효한 계층적 모션 분석(hierarchical motion analysis)(HMA)을 수행한다. 특히, 상기 제1및 제2회로 장치는 비교적 높은 프레임 속도로(예를들어, 초당 30 프레임) 발생하는 연속한 소정의 픽셀-밀도의 영상-데이터 프레임들로 된 계속되는 입력 시리즈(ongoing input series)로부터의 비교적 고해상도의 영상 데이터에 응답하여, 소정의 처리-시스템 지연후에, 상기와 동일한 정해진 프레임 속도로 발생하는 연속하는 정해진 픽셀-밀도의 벡터-데이터 프레임들로 된 일련의 계속되는 출력(ongoing output)을 추출한다. 각각의 벡터-데이터 프레임은 연속하는 각각의 영상 프레임 쌍들 사이에서 일어나는 영상 모션을 나타낸다.
미국 특허 제5,283,646호는 실시간 비디오 인코딩 시스텔이 프레임당 소정의 수의 비트를 정확히 전달할 수 있도록 하는 방법 및 장치를 개시한 것으로서, 영상을 단지 한번 코딩하는 동안, 예를들어 통신 채널을 통하여 전송되어지는 영상을 기술하는 계수들을 양자화하는데 사용되는 양자화 스텝 크기를 갱신한다. 이 데이터는 섹터들로 분할되며, 각각의 섹터(sector)는 복수개의 블록(block)을 포함한다. 이 블록들은, 예를들어 DCT 코딩법을 사응하여 인코드되어 각각의 블록에 대하여 계수들의 시퀀스를 생성한다. 이 계수들은 양자화될 수 있으며, 양자화 스텝에 의존하여, 데이터를 기술하기 위해 요구되는 비트의 수는 현저히 변동될 수 있다. 데이터 각각의 섹터의 전송의 말단부에서, 특정 데이터 그룹과 관련된 선택된 수의 섹터에 대하여 확장된 비트의 누적된 실제 수(accumulated actual number of bits expended)는 확장된 비트의 누적된 요구 수(accumulated desired number of bits expended)와 비교된다. 시스템은 그 다음에, 예를들어 영상을 기술하는 복수의 섹터들에 대한 최종적으로 요구되는 데이터 비트 수의 목표값을 정하기 위하여 양자화 스텝 크기를 재조정한다. 양자화 스텝 크기를 갱신하고 요구되는 비트 할당을 결정하기 위한 여러가지 방법들이 기술되어 있다.
용 엠 정(Chong, Yong M.)의, 웨스콘 테크니컬 논문(Wescon Technical Papers): 1984년 10월/11월호 제2호, 디지털 이미지 처리를 위한 데이터-흐름 아키텍쳐(A Data-Flow Architecture for Digital Image Processing)는 특히 영상 처리를 위해 설계된 실시간 신호 처리 시스템을 개시하고 있다. 특히, 토큰에 근거한 데이터-흐름 아키텍쳐(token-based data-flow architecture)가 개시되어 있는데 여기서 토큰들은 어드레스 필드 폭이 고정된 한 워드(word)의 고정된 폭을 갖는다.
이 시스템은 링 형태로 접속된 복수의 동일한 흐름 프로세서(flow processor)를 포함한다. 이 토큰들은 데이터 필드, 제어 필드 및 태그(tag)를 포함하고 있다. 토큰의 태그 필드는 또한 -프로세서 어드레스 필드 및 식별자 필드로 더 분할된다.
프로세서 어드레스 필드는 토큰들을 올바른 데이터-흐름 프로세서로 향하도록 하는데 사용되며 식별자 필드는 데이터에 레이블(label)을 붙여 데이터-흐름 프로세서가 이 데이터로 하여금 무엇을 해야 하는지를 알도록 하는데 사용된다. 이와같이, 식별자 필드는 데이터-흐름 프로세서에 대한 명령어로서 동작한다. 이 시스템은 모듈 번호(module number)(MN)를 사용하여 각각의 토큰을 특정 데이터-흐름 프로세서로 보낸다. MN이 특정 스테이지의 MH과 일치하는 경우, 그 데이터에 대하여 적당한 연산이 행해진다. 인식하지 못하는 경우, 그 토큰은 출력 데이터 버스로 향하게 된다.
1988년 2월 제23권 제1호 고체 상태 회로의 IEEE 저널, 키모리 에스.(Kimori, S.)등의 논문인 셀프-타임 회로에 의한 탄성 파이프라인 메카니즘(An Elastic Pipeline Mechanism by Self-Timed Circuits)은 셀프-타임 회로를 갖는 탄성 파이프라인을 개시하고 있다. 비동기 파이프라인은 복수개의 파이프라인 스테이지을 구비하고 있다. 각각의 파이프라인 스테이지는 일단의 입력 데이터 래치 (input data latches)를 구비하고 있으며 그 뒤에는 파이프라인 스테이지에 특유한 논리 연산을 수행하는 조합 논리 회로(combinational logic circuit)가 뒤따른다.
이 데이터 래치들은 이 스테이지(stage)와 관련된 데이터-전송 제어 회로에 의해 생성된 트리거링 신호(triggering signal)를 동시에 공급받는다. 이 데이터-전송 제어회로들은 상호 접속되어 체인(chain)을 형성하여 이를 통하여 전송 및 확인응답(send and acknowledge) 신호 회선들은 연속하는 파이프라인 스테이지들 사이에서 핸드-쉐이크 모드(hand-shake mode)로 데이터 전송을 제어한다. 더 나아가서, 디코더는 일반적으로 각각의 스테이지에 제공되어 현재의 스테이지에서의 오퍼랜드(operands)에 행해질 연산을 선택하게 된다. 또한 복잡한 디코딩 프로세싱을 미리 디코딩하여(pre-decode) 논리 회로에서의 중대한 경로 문제들을 경감시키기 위하여 선행 스테이지에 디코더를 위치시키는 것도 가능하다. 파이프라인의 탄성 특성은 서브모듈들(submodules) 사이의 모든 인터네트워킹(internetworking)이 완전히 국부화된 결정에 의해 정해지기 때문에, 임의의 중앙집중화된 제어를 피하게 되며 또한 각각의 서브모듈은 자율적으로 데이터 버퍼링 및 셀프-타임 데이터-전송 제어를 동시에 수행할 수 있다. 마지막으로, 파이프라인의 탄성을 증대시키기 위하여, 스테이지들 사이의 신뢰성있는 데이터 전송을 보장하기 위하여 비어있는 스테이지들(empty stages)은 점유된 스테이지들(occupied stages)사이에 인터리빙된다 (interleaved).
본 발명은 입력, 출력 및 입력과 출력 사이에 있는 복수개의 프로세싱 스테이지들을 갖는 개선된 파이프라인에 관한 것으로서, 상기 복수개의 프로세싱 스테이지들은 파이프라인을 따라서 있는 토큰들, 및 프로세싱 스테이지들사이에서의 제어 데이터 및/또는 결합된 제어-데이터 함수들에 대해서 파이프라인에 있는 모든 프로세싱 스테이지들과 인터페이싱하고(interfacing) 파이프라인에 있는 모든 프로세싱 스테이지들과 인터액팅하는(interacting) 범용 적응 유닛의 형태로 된 제어 및/또는 데이터 토큰을 전달하기 위한 2선식 인터페이스에 의해 상호접속되어 있기 때문에, 파이프라인에 있는 프로세싱 스테이지들은 구성(configuration) 및 처리(processing)에 있어서 향상된 유연성(enhanced flexibility)을 제공받게 된다.
본 발명에 따르면, 프로세싱 스테이지들은 적어도 하나의 토큰의 인식에 응답하여 구성될 수 있다. 프로세싱 스테이지들 중 하나는 입력을 수신하고 토큰을 생성 및/또는 변환하는 시작 코드 검출기(start code detector)일 수 있다.
본 발명은 허프만 디코더, 데이터에 대한 인덱스 및 산술 논리 유닛 및 복수개의 상이한 화상 압축/압축해제 규격에 대해 별개로 저장되고 토큰에 의해 선택가능한 프로그램을 갖는 마이크로코드 ROM을 가짐으로써, 복수개의 상이한 화상 규격에 대한 프로세싱을 용이하게 하는 개선된 파이프라인 시스템에 관한 것이다.
[발명의 요약]
본 발명은 입력, 출력 및 입력과 출력 사이에 있는 복수개의 프로세싱 스테이지들을 갖는 개선된 파이프라인에 관한 것으로서, 상기 복수개의 프로세싱 스테이지들은 파이프라인을 따라서 있는 토큰들, 및 프로세싱 스테이지들 사이에서의 제어 데이터 및/또는 결합된 제어-데이터 함수들에 대해서 파이프라인에 있는 모든 프로세싱 스테이지들과 인터페이싱하고(interfacing) 파이프라인에 있는 모든 프로세싱 스테이지들과 인터액팅하는(interacting) 범용 적응 유닛의 형태로 된 제어 및/또는 데이터 토큰을 전달하기 위한 2선식 인터페이스에 의해 상호접속되어 있기 때문에, 파이프라인에 있는 프로세싱 스테이지들은 구성(configuration) 및 처리 (processing)에 있어서 향상된 유연성(enhanced flexibility)을 제공받게 된다.
파이프라인 내의 각각의 프로세싱 스테이지들은 1차 기억장치(primary storage)와 2차 기억장치(secondary storage)를 포함하고 있으며, 파이프라인내의 스테이지들은 선택된 토큰의 인식에 응답하여 리컨피그될 수 있다 (reconfigurable)파이프라인 내의 토큰들은 동적 적응성(dynamically adaptive)을 가지며 기능을 수행하기 위한 프로세싱 스테이지들에 위치 종속적(position dependent)일 수도 있고 기능들을 수행하기 위한 프로세싱 스테이지들에 위치 독립적(position independent)일 수도 있다.
본 발명에 따른 파이프라인 머신에서는, 토큰들은 스테이지들과 인터페이싱 함으로써 변경될 수 있으며, 그 토큰들은 파이프라인 내의 모든 프로세싱 스테이지들과 또는 상기 프로세싱 스테이지들 전부가 아닌 단지 몇 개와 인터액팅할 수도 있다. 파이프라인 내의 토큰들은 인접한 프로세싱 스테이지들 또는 인접하지 않는 프로세싱 스테이지들과 인터액팅할 수도 있으며, 상기 토큰들은 프로세싱 스테이지들을 리컨피그할 수도 있다. 이와같은 토큰들은 몇몇 기능들에 대해서 위치 종속적일 수도 있고 파이프라인 내의 다른 기능들에 대해서는 위치 독립적일 수도 있다.
리컨피그 가능한 프로세싱 스테이지들과 결합하여 토큰들은 파이프라인 시스템에 대한 기본적인 구성 블록을 제공한다. 파이프라인 내의 프로세싱 스테이지와 토큰과의 상호작용(interaction)은 이 프로세싱 스테이지의 이전의 프로세싱 이력(processing history)에 의해 조건이 결정될(conditioned) 수 있다. 토큰들은 그 토큰을 특징지우는 어드레스 필드(address field)를 가질 수 있으며 프로세싱 스테이지와의 상호 작용은 이와같은 어드레스 필드에 의해 결정될 수 있다.
본 발명에 따른 개선된 파이프라인 머신에서는, 토큰들은 각각의 토큰에 대하여 확장 비트를 포함할 수 있으며, 이 확장비트는 그 토큰에 부가의 워드가 존재 하는지를 나타내며 그 토큰에 있는 마지막 토큰을 식별한다. 어드레스 필드는 가변 길이를 가질 수 있으며 허프만 코드화될 수도 있다.
개선된 파이프라인 머신에서는, 토큰들은 프로세싱 스테이지들에 의해 생성될 수 있다. 이와같은 파이프라인 토큰들은 프로세싱 스테이지로 전송하기 위한 데이터를 포함할 수도 있고, 또한 이 토큰은 데이터를 가지고 있지 않을 수도 있다. 몇몇 토큰들은 DATA 토큰에 의해 식별될 수도 있으며 파이프라인내의 프로세싱 스테이지들에 데이터를 제공할 수도 있는 반면, 다른 토큰은 제어 토큰에 의해 식별되며 파이프라인내의 프로세싱 스테이지를 조건지우기만 하며 이와같은 조건지우기는 프로세싱 스테이지의 리컨피그레이션을 포함한다. 또다른 토큰은 데이터와 조건 모두를 파이프라인내의 프로세싱 스테이지에 제공하기도 한다. 상기 토큰의 몇몇은 파이프라인내의 프로세싱 스테이지들에 대한 코딩 규격을 식별할 수도 있는 반면, 다른 토큰은 프로세싱 스테이지중의 코딩 규격에 독립적으로 동작하기도 한다. 토큰들은 파이프라인내의 프로세싱 스테이지에 의해 연속적으로 변경할 수 있다.
본 발명에 따르면, 프로세싱 스테이지들과 협력하여 토큰의 인터렉션 유연성은 파이프라인내의 상주 구조에 대한 프로세싱 스테이지의 기능적 다양성을 더 크게 해주며 토큰의 유연성은 시스템 확장 및/또는 변경을 용이하게 해준다. 이와같은 파이프라인 토큰은 하드웨어 기반일 수도 있고 소프트웨어 기반일 수도 있다.
그러므로, 토큰들은 파이프라인내의 시스템 대역폭을 보다 효과적으로 사용할 수 있게 된다. 토큰은 파이프라인내의 프로세싱 스테이지에 데이터 및 제어를 동시에 제공할 수도 있다.
론 발명은 디지털 비트의 단일 직렬 비트스트림으로 배열된 개별적으로 인코딩된 복수의 비트스트림을 처리하고 직렬 비트스트림에 운반되는 별도로 인코딩된 제어 코드 및 그에 대응하는 데이터를 가지고 있으면서 2선식 인터페이스에 의해 상호접속된 복수의 스테이지를 갖는 파이프라인 프로세싱 머신을 포함할 수도 있으며, 또한 본 발명은 2선식 인터페이스에 인가하기 위해 제어 토큰 및 DATA 토큰을 발생하기 위해 단일 직렬 비트스트림에 응답하는 시작 코드 검출기, 어떤 토큰들은 그 스테이지에 관련된 제어 토큰으로 인식하여 파이프라인을 따라 인식되지 않은 제어 토큰을 통과시키기 위한 것으로 어떤 스테이지에 위치한 토큰 디코드 회로와, 식별된 DATA 토큰을 처리하기 위해 특정 스테이지를 리컨피그하기 위하여 인식된 제어 토큰에 응답하는 리컨피그 가능한 디코드 및 파서 프로세싱 수단을 특징으로 한다.
파이프라인 머신은 또한 제1및 제2레지스터를 포함할 수 있는데, 제1레지스터는 디코드 및 파서 수단의 입력으로서 위치하고 있으며 제2레지스터는 디코드 및 파서 수단의 출력으로 위치하고 있다. 프로세싱 스테이지들중 하나는 공간 디코더일 수 있으며, 그 두번째 스테이지는 2선식 인터페이스를 따라 전달하기 위한 제어 토큰 및 데이터 토큰을 발생시키기 위한 토큰 발생기이다. 토큰 디코드 수단은 어떤 토큰을 그 공간 디코더와 관련된 제어 토큰으로 인식하여 제어 토큰뒤에 오는 데이터 토큰을 제1디코드된 포맷으로 공간적으로 디코드하기 위한 공간 디코더를 구성하기 위하여 공간 디코더에 위치하고 있다.
다른 스테이지는 공간 디코더로부터 파이프라인의 다운스트림에 위치한 시간 디코더일 수 있으며, 두번째 토큰 디코드 수단은 어떤 토큰을 시간 디코더에 관련된 제어 토큰으로 인식하여 제어 토큰 다음에 오는 데이터 토큰을 제1디코드된 포맷으로 시간적으로 디코드하는 시간 디코더를 구성하기 위하여 시간 디코더내에 위치하고 있다. 시간 디코더는 예측 토큰에 의해 리컨피그 가능한 예측 필터를 이용 할 수 있다.
데이터는 시간 디코더내에서 2선식 인터페이스를 따라 8 x 8 펠 데이터 블록 단위로 이동될 수 있으며, 어드레스 수단은 이와같은 데이터 블록을 블록 경계를 따라 저장 및 검색하기 위하여 제공될 수 있다. 어드레스 수단은 블록 경계를 가로질러 데이터 블록을 저장 및 검색할 수 있다. 어드레스 수단은 상기 블록을 디스플레이용 화상 데이터로서 재배열한다. 저장되고 검색된 데이터 블록들은 8 x 8 펠 데이터 블록보다 더 클 수도 더 작을 수도 있다. 회로 수단은 또한 시간 디코더의 출력을 디스플레이하기 위하여 또는 출력을 다시 화상 메모리 장소로 기록하기 위하여 제공될 수도 있다. 디코딩된 포맷은 정지 화상 포맷일 수도 또는 동화상 포맷일 수도 있다.
본 발명에 따르면, 또한 프로세싱 스테이지는 토큰의 어드레스를 디코딩하기 위한 토큰 디코더와, 프로세싱 스테이지의 컨피그레이션을 구현하기 위해 상기 토큰 디코더에 응답하는 액션 식별부를 구비한다. 프로세싱 스테이지는 제어 토큰 및 DATA 토큰을 운반하는 2선식 인터페이스 버스에 의해 상호접속된 복수의 프로세싱 스테이지를 갖는 파이프라인 프로세싱 머신에 상주한다. 토큰 디코드 회로는 임의의 토큰을 해당 스테이지에 연관된 제어 토큰으로서 인식하고, 상기 파이프라인을 따라 인식되지 않은 제어 토큰을 전달하기 위해 임의의 프로세싱 스테이지에 배치되어 있다. 제1입력 래치 회로는 프로세싱 스테이지에 선행하는 2선식 인터페이스에 배치될 수 있고, 제2출력 래치 회로는 프로세싱 스테이지가 다음에 오는 2선식 인터페이스에 배치될 수 있다. 토큰 디코드 회로는 제1입력 래치를 통해 2선식 인터페이스에 접속된다. 선정된 프로세싱 스페이지는 선정된 데이터 기억장치의 출력에 접속된 디코딩 회로를 포함함으로서, 각 프로세싱 스테이지는 스테이지가 선정된 스테이지 활성화 신호 패턴을 포함할 때에만 활성 상태를 가정하고, 스테이지가 선정된 스테이지 탈활성화 패턴을 포함할 때까지 활성 상태를 가정하고, 스테이지가 선정된 스테이지 탈활성화 패턴을 포함할 때까지 활성 모드에 남는다.
또한 본 발명은 디지털 활상 정보 프로세싱 시스템에서 서로 다른 복수의 화상 압축/복원 규격에 따라 데이터를 처리하기 위해 시스템을 선택적으로 컨피그하기 위한 수단을 구비한다. 화상 규격은 JPEG, MPEG 및/또는 H.261, 또는 임의의 다른 규격 및, 본 발명의 정신과 영역을 벗어나지 않고 상기 화상 규격의 조합을 포함할 수 있다. 본 발명에 따르면, 시스템은 비디오 데이터용 공간 디코더, 허프만 디코더, 서로 다른 복수의 각 화상 압축/복원 규격을 위한 개별적으로 저장된 프로그램을 갖는 마이크로코드 ROM을 구비한 인덱스 투 데이터 및 산술 논리 유닛을 구비하고, 상기 프로그램은 토큰의 형태로 인터페이싱 적응 유닛으로서 선택 가능하므로, 복수의 화상 규격을 위한 프로세싱이 용이하게 된다. 본 발명에 따른 다중-규격 시스템은 선택된 화상 규격에 관계없이 그 연산을 위한 토큰을 이용할 수 있고, 상기 토큰은 다양한 모든 화상 규격을 위해 시스템에서 범용 통신 프로토콜로서 이용될 수 있다. 상기 시스템은 규격에 종속적이고 규격에 독립적인 하드 웨어 및 제어 토큰의 결합을 사용하여 단일 디코더 상으로, 데이터의 단일 직렬 스트림으로 정렬된 서로 달리 인코드된 데이터 스트림을 맵핑하기 위한 다중-규격 토큰에 특징이 있다. 또한 상기 시스템은 서로 다른 규격과 결합된 데이터의 매크로 블럭을 공통 어드레싱 방법으로 정렬하기 위한 어드레스 발생 수단을 포함한다.
본 발명의 상기 다른 목적 및 장점은 다음의 상세한 설명으로부터 명확할 것이다.
본 발명의 실시에 대한 이하의 기술에 있어서, 아래에 정의한 용어들은 자주 사용되며 일반적으로 다음과 같이 정의된다.
[용어 풀이]
블럭(block): 8-행 x 8-열 펠(pel) 매트릭스, 또는 64개의 (소스, 양자화된 또는 역양자화된) DCT 계수들.
색도(chrominance) (성분): 비트스트림에서 정의되는 방식으로 원색(primary color)에 관련된 2개의 색차(color difference) 신호중 하나를 나타내는 매트릭스, 블럭 또는 단일 펠, 색차신호에 사용되는 기호는 Cr 및 Cb이다.
코드화된 표현(coded representation): 인코드딩된 형태로 표현된 데이터 요소(data element).
코드화된 비디오 비트스트림(coded vedeo bit stream): 이 명세서에서 정의된 하나 또는 그 이상의 일련의 화상의 코드화된 표현.
코드화된 순서(coded order): 화상들이 전송되어 디코딩되는 순서. 이 순서는 디스플레이 순서(display order)와 항상 같은 것은 아니다.
성분(component): 화상을 이루는 3개의 매트릭스(휘도(luminance) 및 2개의 색도)로부터의 매트릭스, 블럭 또는 단일 펠.
압축(compression): 데이터의 항목을 표현하는데 사용되는 비트 수의 감소.
디코더: 디코딩 프로세스의 구현.
디코딩 (프로세스): 입력 코드화된 비트스트림을 판독하여 디코딩된 화상 또는오디오 샘플을 생성하는 이 사양에서 정의된 프로세스.
디스플레이 순서: 디코딩된 화상이 디스플레이되는 순서. 일반적으로 이것화상이 인코더의 입력에 제공되는 순서와 동일하다.
인코딩 (프로세스): 이 명세서에서는 정의되지 않은 것으로서 입력 화상 또는 오디오 샘플의 스트림을 판독하여 이 명세서에서 정의된 유효 코드화 비트스트림(valid coded bitstream)을 생성하는 프로세스.
인트라 코딩(intra coding): 매크로블럭 또는 화상으로부터의 정보만을 사용하는 그 매크로블럭 또는 화상의 코딩.
휘도 (성분): 비트스트림에서 정의된 방식으로 신호의 흑백(monochrome) 표현을 나타내고 기본 컬러에 관련되어 있는 매트릭스, 블럭 또는 단일 펠. 휘도에 사용되는 기호는 Y 이다.
매크로블럭(macroblock): 4개의 8 x 8 휘도 데이터 블럭과 화상의 휘도 성분의 16 x 16 섹션으로부터 오는 2개(4:2:0 크로마 포맷에 대한 것), 4개 [4:2:2 크로마 포맷(chroma format)에 대한 것] 또는 8개(4:4:4 크로마 포맷에 대한 것)의 대응하는 8 x 8 색도 데이터 블럭. 매크로블럭은 때로는 펠 데이터를 언급하는데 사용되기로 하고, 때로는 펠 값의 코드화 표현 및 이 명세서의 이 부분에서 정의된 구문(syntax)의 매크로블럭 헤더에서 정의된 다른 데이터 요소들을 언급하는데 사용된다. 당해 기술분야의 통상의 지식을 가진 자는 사용법을 문맥으로부터 쉽게 이해할 수 있다.
모션 보상(motion compensation): 펠 값의 예측의 효율성을 개선하기 위한 모션 벡터의 사용. 이 예측은 예측 오차 신호를 형성하는데 사용되는 이전에 디코드된 펠 값을 포함하는 과거 및/또는 미래의 기준 화상으로의 오프셋(offsets)을 제공하기 위하여 모션 벡터를 사용한다.
모션 벡터(motion vector): 현재의 화상에서의 좌표 위치로부터 기준 화상에 서의 좌표로의 오프셋을 제공하는 모션 보상을 위해 사용되는 2차원 벡터.
비인트라 코딩(non-intra coding). 자기 자신 및 다른 시간에 발생하는 매크 로블럭 및 화상으로부터의 정보를 사용하는 매크로블럭 또는 화상의 코딩.
펠: 화소(picture element).
화상(picture): 소스, 코드화된 또는 재구성된 영상 데이터. 휘도 및 2개의 색도 신호를 나타내는 8비트 수의 3개의 직각 행렬로 구성된 소스 또는 재구성된 화상. 순차 비디오(progressive video)의 경우, 화상은 프레임과 동일하며, 인터레이스된 비디오의 경우는 화상은 문맥에 따라서 프레임 또는 프레임의 상부 필드 (top field) 또는 하부 필드(bottom field)라고 말할 수 있다.
예측: 현재 디코드되고 있는 펠 값 또는 데이터 요소의 예측값(estimate)을 제공하기 위한 예측기(predictor)의 사용.
리컨피그 가능한 프로세스 스테이지(reconfigurable process stage)(RPS): 인식된 토큰에 응답하여 여러가지 연산을 수행하도록 자신을 리컨피그하는 스테이지.
슬라이스(slice): 일련의 매크로블럭.
토큰: 제어 및/또는 데이터 기능부에 대해 인터렉티브한 인터페이싱 메신저 패키지(interactive interfacing messenger package)의 형태의 범용 적응 유닛 (universal adaptation unit).
시작 코드(시스템 및 비디오): 코드화된 비트스트림에 내장된 고유한 32비트코드. 이것은 코딩 구문(coding syntax)에 있는 몇몇 구조들을 식별하는 것을 포함하여 몇가지의 목적을 위해 사용된다.
가변 길이 코딩(variable length coding)(VLC): 자주있는 이벤트에 대하여는보다 짧은 코드워드를 할당하고 이따금씩 있는 이벤트에 대해서는 보다 긴 코드워드를 할당하는 코딩에 대한 가역 절차(reversible procedure).
비디오 시퀀스: 일련의 하나 또는 그 이상의 화상.
본 발명의 바람직한 실시예들에서 이용된 파이프라인 시스템에서 사용된 가장 일반적인 특징들에 대한 소개로서, 제1도는 6-스테이지 파이프라인의 6개의 사이클의 가장 간단화된 설명이다. (이하에 더욱 상세하게 설명하는 것처럼, 파이프라인의 바람직한 실시예는 제1도에 도시되지 않은 몇몇 유익한 특징들을 포함하고 있다.)
도면 전체에 걸쳐 유사한 참조번호는 유사하거나 또는 대응하는 요소들을 나타내고 있는 도면을 참고함에 있어서, 특히 제1도를 참고하면 본 발명의 실시에서의 6 사이클의 블록도가 도시되어 있다. 박스(box)들의 각각의 행은 사이클을 나타내고 다른 스테이지들 각각은 각각 A-F의 라벨이 각각 붙어있다. 각각의 검게 칠해진 박스는 대응하는 스테이지가 유효 데이터, 즉 파이프라인 스테이지 중 하나에서 처리될 데이터를 유지하고 있음을 가리킨다. 처리 (데이터를 처리하지 않고 단지 전송만을 포함할 수도 있는) 이후에, 유효 데이터는 유효 출력 데이터로서 파이프 라인 밖으로 전송된다.
실제의 파이프라인 응용은 6개보다 많거나 또는 적은 파이프라인 스테이지를 포함할 수 있음에 주목할 필요가있다. 잘 알고 있는 바와같이, 본 발명은 임의의 갯수의 파이프라인 스테이지로 사용될 수 있다. 게다가, 데이터는 하나 이상의 스테이지에서 처리될 수 있으며 다른 스테이지에 대한 처리 시간은 다를 수 있다.
클럭 및 데이터 신호(이하에 기술됨)이외에, 파이프라인은 2개의 전송 제어신호-"VALID" 신호 및 "ACCEPT" 신호를 포함하고 있다. 이 신호들은 파이프라인내에서의 데이터의 전송을 제어하는데 사용된다. 이웃하는 스테이지들을 접속하는 2개의 라인중 상부 라인으로 설명된 VALID 신호는 각각의 파이프라인 스테이지로부터 가장 가까이 이웃하는 장치로 순방향(forward) 또는 다운스트림(downstream) 방향으로 전달된다. 이 장치는 다른 파이프라인 스테이지 또는 다른 시스템일 수 있다. 예를들어, 마지막 파이프라인 스테이지는 자신의 데이터를 뒤따르는 프로세싱 회로로 전달할 수 있다. 이웃하는 스테이지들을 접속하는 2개의 라인중 하부 라인으로 설명되는 ACCEPT 신호는 다른 방향 업스트림에서(in other direction upstream) 이전의 장치로 전달된다.
본 발명의 실시에서 사용된 형태의 데이터 파이프라인 시스템은, 바람직한실시예에서 하나 또는 그 이상의 다음과 같은 특징을 가진다.
1. 파이프라인은 "탄성적(elastic)"이며 특정 파이프라인 스테이지에서의 지연은 다른 파이프라인 스테이지에서 생길 수 있는 왜곡을 최소화시킨다. 계속되는 파이프라인 스테이지들은 계속 처리를 할 수 있고 따라서 이것은 지연된 스테이지를 뒤따르는 데이터 스트림에서 갭(gap)이 개방(open up)되는 것을 의미한다. 마찬가지로, 선행 파이프라인 스테이지들도 가능한 곳에서 또한 계속될 수 있다. 이 경우에 데이터 스트림에서의 어떤 갭도 가능하면 어디에서든지 데이터의 스트림으로부터 제거될 수 있다.
2. 파이프라인을 중재(arbitrate)하는 제어 신호는 이것이 가장 가까이 이웃 한 파이프라인 스테이지로 단지 전파만 되도록 구성된다. 신호가 데이터의 흐름과 동일 방향으로 흐르는 경우, 이것은 바로 다음 스테이지이며 신호가 데이터의 흐름과 반대 방향으로 흐르는 경우, 이것은 바로 이전의 스테이지이다.
3. 파이프라인에서의 데이터는 많은 다른 타입의 데이터가 파이프라인에서 처리되도록 인코딩된다. 이 인코딩은 가변 크기의 데이터 패킷을 수용하며 패킷의 크기는 미리 알 필요가 없다.
4. 데이터의 형을 기술하는 것과 관련된 오버헤드(overhead)는 가능한한 작다.
5. 각각의 파이프라인 스테이지가 단지 자신의 필요한 기능에 필요한 최소 갯수의 데이터 형만을 인식하는 것도 가능하다. 그러나, 비록 그들을 인식하지 않지만 여전히 다음의 스테이지로 모든 데이터 형을 전달할 수 있어야만 한다. 이로 인해 인접하지 않은 파이프라인 스테이지들 사이의 통신이 가능하게 된다.
제1도에 도시되진 않았지만, 각각의 파이프라인 스테이지로 들어가고 나오는 데이터 버스를 구성하는 단일 라인 또는 여러개의 병렬 라인인 데이터 라인이 있다. 이하에서 보다 상세히 설명되는 바와 같이, 데이터는 데이터 라인을 거쳐 파이프라인의 스테이지들로 전송되고, 스테이지들로부터 전송되며, 또한 그들 사이에서 전송된다.
제1파이프라인 스테이지는 데이터 및 제어 신호를 임의의 형태의 이전의 장치로부터 수신할 수 있다는 것에 주목할 필요가 있다. 예를들면, 디지탈 영상 전송 시스템의 수신 회로, 또 다른 파이프라인, 또는 기타 등등. 반면에, 그것은 그 자신, 파이프라인에서 처리될 데이터의 전부 또는 일부를 생성할 수 있다. 사실, 이하에서 설명되는 바와같이, "스테이지"는 어떤 것도 포함하지 않는(단지 데이터를 전달하는 경우) 또는 전체 시스템(예를들어, 다른 파이프라인 또는 다수의 시스템 또는 파이프라인들의 경우)을 포함하는 임의의 프로세싱 회로를 포함할 수 있고-요구되는 대로 데이터를 생성, 변경 및 삭제할 수 있다.
파이프라인 스테이지는 파이프라인을 따라 아래로 전송되어지는 유효 데이터를 포함하는 경우, 데이터의 유효성을 나타내는 VALID 신호는 바로 다음의 파이프라인 스테이지 다음으로는 전송될 필요가 없다. 그러므로, 2선식 인터페이스는 시스템에서 모든 쌍의 파이프라인 스테이지 사이에 포함되어 있다. 이와같은 다른 장치들이 포함되고 이들 장치들 및 파이프라인 사이에 데이터가 전송되어지는 경우, 이것은 이전의 장치와 제1스테이지 사이, 이 다음의 디바이스와 마지막 스테이지 사이에 2선식 인터페이스를 포함하고 있다.
각각의 신호, ACCEPT 및 VALID는 HIGH 및 LOW 값을 가지고 있다. 이들 같은 각각 "H" 및 "L"로 간략하게 쓴다. 본 발명을 실시하는데 가장 일반적인 파이프라인 응용은 전형적으로 디지탈이다. 이와같은 디지탈 구현에서는 예를들어 HIGH 값은 논리적으로 "1"이고 LOW 값은 논리적으로 "0"일 수 있다. 그러나 이 시스템은 디지탈 구현에만 한정되지 않으며, 아날로그 구현에서는 HIGH 값은 설정된 임계값 이상(또는 이하)의 전압 또는 다른 유사한 양일 수 있으며, LOW 값은 동일한 또는 어떤 다른 임계값 이하(또는 이상)의 대응하는 신호에 의해 나타내어진다. 디지탈 응용의 경우, 본 발명은 CMOS, 바이폴라 등의 공지의 기술들을 이용하여 구현될 수 있다.
VALID 신호를 저장하기 위하여 별도의 기억 장치 및 배선(wires)을 사용할 필요는 없다. 이것은 디지탈 구현에 있어서도 마찬가지이다. 단지 필요한 것은 데이터의 유효성(validity)의 표현이 데이터와 함께 저장되는 것이다. 하나의 예로서, 국제 규격 CCIR 601으로 특정된 디지탈 값들로 표현된 디지탈 텔레비젼 화상에서 몇가지 특정 값들은 허용되지 않는다. 이 시스템에서, 8비트 이진 수는 화상의 샘플을 표현하는데 사용되며 값 0 및 255는 사용될 수 없다.
이와 같은 화상이 본 발명의 실시에 있어서 구축된 파이프라인에서 처리되는 경우, 이들 값들중 하나(예를들어, 0)는 파이프라인의 특정 스테이지에 있는 데이터가 유효 값이 아리라는 것을 표시하는데 사용될 수 있다. 따라서, 임의의 영이 아닌 데이터는 유효한 것으로 간주될 수 있다. 이 실시예에서, 식별되어 그와 관련된 데이터의 "유효함"(validness)을 저장한다고 말할 수 있는 특정 래치가 없다.
그럼에도 불구하고, 데이터의 유효성은 이 데이터와 함께 저장된다.
제1도에 도시된 바와 같이, 각각의 스테이지로의 VALID 신호의 상태는 상부의 우측으로 향한 화살표상에 "H" 또는 "L"로서 표시되어 있다. 그러므로, 스테이지 A로부터 스테이지 B로의 VALID 신호는 LOW이고, 스테이지 D로부터 스테이지 E로의 VALID 신호는 HIGH이다. 각각의 스테이지로의 ACCEPT 신호의 상태는 하부의 좌측으로 향한 화살표상에 "H" 또는 "L" 로서 표시되어 있다. 그러므로, 스테이지 E로부터 스테이지 D로의 ACCEPT 신호는 HIGH인 반면에, 파이프라인의 다운스트림으로 접속된 장치로부터 스테이지 F로의 ACCEPT 신호는 LOW이다.
데이터는 다운스트림 스테이지에서 자신의 업스트림 이웃으로의 ACCEPT 신호가 HIGH 인 때에는 언제나 한 사이클(이하에서 설명됨)동안에 한 스테이지로부터 다른 스테이지로 전송된다. ACCEPT 신호가 2개의 스테이지 사이에서 LOW인 경우, 데이터는 이들 스테이지 사이에서 전송되지 않는다.
제1도를 다시 참조하면, 박스가 검게 칠해진 경우, 예를 들어 대응하는 파이 프라인 스테이지는 유효 출력 데이터를 포함하고 있는 것으로 가정된다. 마찬가지로, 이 스테이지로부터 다음 스테이지로 전달되는 VALIB 신호는 HIGH이다. 제1도는 스테이지 B, D 및 E가 유효 데이터를 포함하고 있는 경우의 파이프라인을 나타낸다. 스테이지 A, C및 F는 유효 데이터를 포함하고 있지 않다. 처음에 파이프라인 스테이지 A로의 VALID 신호가 HIGH 인데, 이것은 파이프라인으로의 전송 라인상의 데이터가 유효함을 의미한다.
또한 이때에 파이프라인 스테이지 F로의 ACCEPT 신호가 LOW이기 때문에 유효하든 유효하지 않든 간에 어떤 데이터도 스테이지 F밖으로 전송되지 않는다. 유효 데이터 및 무효 데이터 모두는 파이프라인 스테이지들 사이에서 전송된다는 것에 주의한다. 저장할 가치가 없는 무효 데이터는 오버라이트(overwrite)될 수 있고 따라서 파이프라인으로부터 삭제된다. 그러나, 유효 데이터는 오버라이트되어서는 안되며 그 이유는 이 데이터는 다운스트림 장치, 예를 들어, 파이프라인으로부터 데이터를 수신하는 상기 파이프라인에 접속된 파이프라인 스테이지, 장치 또는 시스템에서 처리 또는 사용하기 위해 저장되어야 하기 때문이다.
제1도에 도시된 파이프라인에서, 스테이지 E는 유효 데이터 D1을 포함하며,스테이지 D는 유효 데이터 D2를 포함하고, 스테이지 B는 유효 데이터 D3를 포함하고 있으며, 업스트림 파이프라인에 접속된 장치(도시되지 않음)는 파이프라인으로 전송되어 처리되는 데이터 D4를 포함하고 있다. 스테이지 B, D 및 E는 업스트림 장치에 부가하여 유효 데이터를 포함하므로, 이들 스테이지 또는 디바이스로부터 이들 각각의 뒤따르는 장치로의 VALID 신호는 HIGH이다. 그러나, 스테이지 A, C 및 F로부터의 VALID신호는 LOW인데 그 이유는 이들 스테이지들이 유효 데이터를 포함하고 있지 않기 때문이다.
이제 파이프라인으로부터 다운스트림에 접속된 장치가 파이프라인으로부터 데이터를 수신할 준비가 되어 있지 않다고 가정하자. 이 장치는 대응하는 ACCEPT 신호를 LOW로 설정하여 스테이지 F로 신호를 보낸다(signals). 그러나, 스테이지 F 자신은 유효 데이터를 포함하고 있지 않으며, 따라서 선행 스테이지 E로부터 데이터를 수용할 수 있다. 그러므로, 스테이지 F로부터 스테이지 E로의 ACCEPT신호는 HIGH로 설정된다.
마찬가지로, 스테이지 E는 유효 데이터를 포함하고 있으며 스테이지 F는 이 데이터를 수용할 준비가 되어 있다. 그러므로, 스테이지 E는 유효 데이터 D1이 스테이지 F로 먼저 전송되는 한 신규 데이터를 수용할 수 있다. 바꿔 말하면, 스테이지 F가 다운스트림으로 데이터를 전송할 수는 없지만, 다른 모든 스테이지들은 유효 데이터를 오버라이팅되게 하거나 또는 상실하지 않고 이와같이 할 수 있다.
그러므로, 사이클 1의 끝부분에서 데이터는 한 스텝만큼 우측으로 시프트될 수 있다. 이 조건은 사이클 2에 도시되어 있다.
도시된 예에서, 다운스트림 장치는 여전히 사이플 2에서 신규 데이터를 수용할 준비가 되어 있지 않으며, 스테이지 F로의 ACCEPT 신호는 여전히 LOW이다. 그러므로, 스테이지 F는 신규 데이터를 수용하면 유효 데이터 D1을 오버라이트하거나 상실하게 하기 때문에 이렇게 할 수 없다. 그러므로, 스테이지 F로부터 스테이지 E로의 ACCEPT 신호는 스테이지 E로부터 스테이지 D로의 ACCEPT 신호와 마찬가지로 LOW로 되는데 그 이유는 스테이지 E도 역시 유효 데이터 D2를 포함하고 있기 때문이다. 그러나, 스테이지 A-D 모두는 신규 데이터를 수용할 수 있고 (이들이 유효 데이터를 포함하고 있지 않거나 또는 이들이 이들의 유효 데이터를 다운스트림으로 시프트하여 신규 데이터를 수용할 수 있기 때문에), 이들은 이들에 대응하는 ACCEPT 신호를 HIGH로 세팅함으로써 이 조건을 이들 바로 앞에 이웃한 것들에 신호하게 된다.
사이클 2 이후의 파이프라인의 상태는 사이클 3으로 분류된(labelled) 행에대하여 제1도에 설명되어 있다. 예를 들어, 다운스트림 디바이스는 여전히 스테이지 F부터 신규 데이터(스테이지 F로의 ACCEPT 신호는 LOW이다)를 수용할 준비가 되어 있지 않다고 가정하자. 그러므로, 스테이지 E 및 F는 여전히 차단되어 (blocked) 있지만, 사이클 3에서 스테이지 D는 이 스테이지에 이전에 있었던 무효 데이터를 오버라이팅한(overwritten) 유효 데이터 D3를 수신한다. 스테이지 D는 사이클 3에서 데이터 D3를 전달할 수 없기 때문에, 그것은 신규 데이터를 수용할 수 없고 따라서 스테이지 C로의 ACCEPT 신호를 LOW로 세팅한다. 그러나, 스테이지 A 내지 C는 신규 데이터를 수용할 준비가 되어 있으며 이들에 대응하는 ACCEPT 신호를 HIGH로 세팅함으로써 이와같은 사실을 신호하게 된다. 데이터 D4가 스테이지 A로부터 스테이지 B로 시프트되었음에 주목할 필요가 있다.
이제 다운스트림 장치가 사이클 4에서 신규 데이터를 수용할 준비가 되었다고 가정하자. 이 디바이스는 스테이지 F로의 ACCEPT 신호를 HIGH로 세팅함으로서 이와같은 사실을 파이프라인에 신호하게 된다. 스테이지 C 내지 F는 유효 데이터를 포함하고는 있지만, 이들은 이제 이 데이터를 다운스트림 방향으로 시프트할 수 있으며 따라서 신규 데이터를 수용할 수 있다. 각각의 스테이지는 따라서 데이터를 한 스텝 다운스트림 방향으로 시프트할 수 있기 때문에, 이들은 각각의 ACCEPT 신호를 HIGH로 세팅 한다.
마지막 파이프라인 스테이지 (예를 들어, 스테이지 F)로의 ACCEPT 신호가 HIGH인 상태로 있는 한, 제1도에 도시된 파이프라인은 경성 파이프라인(rigid pipeline)으로 동작하며 각각의 사이클 상에서 데이터를 단지 한 스텝 시프트한다.
따라서, 사이클 5에서는, 사이클 4에서 스테이지 5에 포함되어 있었던 데이터 D1은 파이프라인으로부터 후속하는 장치로 시프트되며 다른 모든 데이터는 한 스텝 다운 스트림 방향으로 시프트된다.
이제 스테이지 F로의 ACCEPT 신호가 사이클 5에서 LOW로 된다고 가정하자.
다시 한 번 이것은 스테이지 D-F가 신규 데이터를 수용할 수 없다는 것과 이들 스테이지들로부터 이들 바로 이전의 이웃으로의 ACCEPT 신호들은 LOW로 된다는 것을 의미한다. 그러므로, 데이터 D2, D3 및 D4는 다운스트림 방향으로 시프트할 수 없지만 데이터 D5는 할 수 있다. 사이클 5 이후의 파이프라인의 대응하는 상태는 제1도에 도시된 사이클 6과 같다.
본 발명의 바람직한 실시예에 따른 파이프라인의 비어있는 프로세싱 스테이지를 "필업"(fill up)할 수있는 능력은 매우 유익한데 그 이유는 파이프라인에 있는 프로세싱 스테이지들은그에 따라 서로 분리(decouple)되기 때문이다. 즉, 파이프라인 스테이지가 비록 데이터를 수용할 준비가 되어 있지 않더라도, 전체 파이프라인은 멈추어서 지연된스테이지를 기다릴 필요가 없다. 오히려 한 스테이지가 유효 데이터를 수용할 수 없는 때에 그는 단지 일시적인 "벽"(wall)을 파이프라인에 형성할 뿐이다.
그럼에도 불구하고, 상기 벽의 다운스트림 방향의 스테이지들은, 심지어 파이프라인에 접속된 회로에도 유효 데이터를 보낼 수 있으며 "벽"의 좌측에 있는 스테이지들은 여전히 유효 데이터를 수용하여 다운스트림 방향으로 전송할 수 있다.
몇 개의 파이프라인 스테이지들이 일시적으로 신규 데이터를 수용할 수 없는 경우에도, 다른 스테이지들은 계속 정상적인 동작을 할 수 있다. 특히, 파이프라인은 스테이지 A가 신규 데이터를 수용할 준비가 되어 있지 않은 그 다음의 스테이지 때문에 보낼 수 없는 유효 데이터를 이미 포함하고 있지 않는 한 자신의 초기 스테이지 A로 데이터를 계속 수용할 수 있다. 이 예가 설명하고 있듯이, 데이터는 파이프라인으로 전송되어 하나 이상의 프로세싱 스테이지들이 차단되어 있는 경우라 할지라도 스테이지들 사이에서 전송될 수 있다.
제1도에 도시된 실시예에서, 여러가지 파이프라인 스테이지들은 ACCEPT 신호를 저장하지 않고, 이들 자신의 바로 다음으로 이웃하는 스테이지로부터 수신한다고 가정한다. 그 대신에, 다운스트림 스테이지로의 ACCEPT 신호가 LOW로 될 때에, 이 LOW 신호는 유효 데이터를 포함하고 있지 않은 가장 가까운 파이프라인 스테이지까지 업스트림 방향으로 전파된다. 예를 들어, 제1도를 참고하면, 사이클 1에서 스테이지 F로의 ACCEPT 신호가 LOW로 된다고 가정된다. 사이클 2에서, LOW 신호는 스테이지 F로부터 스테이지 D로 다시 전파된다.
사이클 3에서, 데이터 D3가 스테이지 D로 래치된 때에 ACCEPT 신호는 스테이지 C로 4개의 스테이지 업스트림 방향으로 전파된다. 스테이지 F로의 ACCEPT 신호가 사이클 4에서 HIGH로 된 경우, 이것은 스테이지 C까지 업스트림 방향으로 전파되어야 한다. 즉, ACCEPT 신호의 변동은 4개의 스테이지를 뒤로 전파되어야 한다.
그러나, 제1도에 도시된 실시예에서는 신규 데이터를 수용할 수 있는 어떤 중간 스테이지가 있는 경우에는 ACCEPT 신호가 파이프라인의 처음으로 다시 전파될 필요가 없다.
제1도에 도시된 실시예에서, 각각의 파이프라인 스테이지는 여전히 의도되지 않은 오버라이팅없이 스테이지들 사이에서 데이터가 전송될 수 있도록 하기 위하여 별도의 입력 및 출력 데이터 래치를 필요로 하게 된다. 또한, 제1도에 도시된 파이프라인이 다운스트림 파이프라인 스테이지들이 차단된 때, 즉, 그들이 포함하고 있는 데이터를 전달할 수 없는 때에 "압축"(compress)할 수 있지만, 이 파이프라인은 유효 데이터를 포함하고 있는 스테이지들 사이에 어떤 유효 데이터도 포함하고 있지 않은 스테이지를 제공하기 위하여 "확장"(expand)하지 않는다 오히려, 압축할 수 있는 능력은 어떤 유효 데이터도 제1파이프라인 스테이지로 제공되지 않는 사이클이 존재하는지에 달려있다.
예를 들어, 사이클 4에서 스테이지 F로의 ACCEPT 신호가 LOW 상태에 있고 유효 데이터가 파이프라인 스테이지 A 및 B를 채우고 있는 경우, 유효 데이터가 계속하여 스테이지 A로 제공되고 있는 한, 이 파이프라인은 더 이상 압축할 수 없게 되고 유효 입력 데이터(valid input data)는 손실된다. 그럼에도 불구하고, 제1도에 도시된 파이프라인은 데이터 손실의 위험을 감소시키는데 그 이유는 유효 데이터를 포함하지 않은 파이프라인 스테이지가 있는 한 압축할 수 있기 때문이다.
제2도는 논리적 방식으로 압축 및 확장할 수 있고 가장 가까운 선행 스테이지로의 ACCEPT 신호의 전파를 제한하는 회로를 포함하는 파이프라인의 또 다른 실시예를 도시하고 있다. 이 실시예를 구현하는 회로가 이하에서 보다 상세히 설명되고 도시되어 있지만, 제2도는 이것이 동작하는 원리를 설명하는데 도움이 된다.
단지 비교의 편리를 위해, 제2도에 도시된 파이프라인 실시예로의 입력 데이터 및 ACCEPT 신호들은 제1도에 도시된 파이프라인 실시예에서와 동일하다. 따라서, 스테이지 E, D 및 B는 유효 데이터 D1, D2 및 D3를 각각 포함하고 있다. 스테이지 F로의 ACCEPT 신호는 LOW이고, 데이터 D4는 초기 파이프라인 스테이지 A에 제공된다. 제2도에는 이웃하는 각각의 파이프라인 스테이지 쌍을 접속하는 3개의 라인이 도시되어 있다. 버스(bus)일 수 있는 가장 위의 라인은 데이터 라인이다.
중간의 라인은 VALID 신호가 전송되는 라인이며 아래의 라인은 ACCEPT 신호가 전송되는 라인이다. 또한, 이전과 마찬가지로 스테이지 F로의 ACCEPT 신호는 사이클 4를 제외하고는 LOW 로 있게 된다. 게다가, 부가 데이터 D5는 사이클 4에서 파이프라인에 제공된다.
제2도에서, 각각의 파이프라인 스테이지는 파이프라인의 실시예에서 각각의 스테이지가 1차 및 2차 데이터 저장 요소(primary and secondary data storage element)를 포함하고 있는 것을 도시하기 위하여 둘로 분리된 블럭으로 표시되어 있다. 제2도에서, 주 데이터 기억장치는 각각의 스테이지의 오른쪽 반으로 도시되어 있다. 그러나, 이와같이 도시한 것은 단지 설명을 위한 것이지 제한하기 위한 것은 아니다.
제2도에서 도시된 바와 같이, 스테이지로의 ACCEPT 신호가 HIGH 인 한, 데이터는 그 스테이지의 1차 저장 요소로부터 그 다음 스테이지의 2차 저장 요소로 임의의 정해진 사이클동안에 전송된다. 따라서, 스테이지 F로의 ACCEPT 신호가 LOW 일지라도, 다른 모든 스테이지들로의 ACCEPT 신호가 HIGH 이기 때문에 데이터 Dl, D2 및 D3는 사이클 2에서 한 스테이지 전방으로 시프트되며 데이터 D4 는 제1스테이지 A 로 시프트된다.
지금까지, 제2도에 도시된 파이프라인 실시예는 제1도에 도시된 파이프라인 실시예와 유사한 방식으로 동작한다. 그러나, 스테이지 F로부터 스테이지 E로의 ACCEPT 신호는 스테이지 F로의 ACCEPT 신호가 LOW 일지라도 HIGH 이다. 이하에서 설명되는 바와 같이, 2차 저장 요소 때문에, LOW ACCEPT 신호가 스테이지 F를 지나업스트림 방향으로 전파될 필요는 없다. 게다가, 스테이지 E로의 ACCEPT 신호를 HIGH로 유지시킴으로써 스테이지 F는 자신이 신규 데이터를 수용할 준비가 되어 있음을 신호한다. 스테이지 F가 사이클 3에서 자신의 1차 저장 요소에 있는 데이터 D1를 다운스트림 방향으로 전송할 수 없으므로 (스테이지 F로의 ACCEPT 신호는 LOW 임), 스테이지 E는 데이터 D2를 스테이지 F의 2차 저장 요소로 전송하여야 한다.
스테이지 F의 1차 및 2차 저장 요소 모두가 이제 전달할 수 없는 유효 데이터를 포함하고 있기 때문에, 스테이지 F로부터 스테이지 E로의 ACCEPT 신호는 LOW로 세팅된다. 따라서, 이것은 사이클 2에 비해서 단지 한 스테이지 뒤로 LOW ACCEPT 신호를 전파하는 것을 표시하는 반면, 제1도에 도시된 실시예에서는 이 ACCEPT 신호가 스테이지 C까지 뒤로 전파되어야만 했었다.
스테이지 A 내지 E는 이들의 데이터를 전달할 수 있기 때문에, 스테이지들로부터 이들의 바로 이전의 이웃들로의 ACCEPT 신호들은 HIGH로 세팅된다. 따라서, 데이터 D3 및 D4는 한 스테이지 우측으로 시프트되어, 사이클 4에서 이들은 각각 스테이지 E 및 스테이지 C의 1차 데이터 저장 요소에 로딩된다(loaded). 이제 스테이지 E가 자신의 1차 저장 요소에 유효 데이터 D3를 포함하고 있더라도, 자신의 2차 저장 요소들은 임의의 유효 데이터를 오버라이팅할 위험없이 다른 데이터를 저장하는데 사용될 수 있다.
이전과 마찬가지로, 이제 스테이지 F로의 ACCEPT 신호가 사이클 4에서 HIGH로 된다고 가정하자. 이것은 파이프라인이 데이터를 전달하는 다운스트림 장치가 파이프라인으로부터 데이터를 수용할 준비가 되어 있음을 가리킨다. 그러나, 스테이지 F는 자신의 ACCEPT 신호를 LOW로 세팅하고, 따라서 스테이지 E에게 스테이지 F가 새로운 데이터를 수용할 준비가 되어 있지 않음을 지시한다. 각각의 사이클에 대한 ACCEPT 신호는 그 다음 사이클에서 어떤 일이 일어나게 될 것인가를, 즉 데이터가 전달되는지(ACCEPT HIGH) 또는 데이터가 그 자리에 머물러있어야만 하는지 (ACCEPT LOW)를 나타낸다는 사실에 주의한다. 그러므로, 사이클 4로부터 사이클 5까지, 데이터 D1은 스테이지 F로부터 그 다음의 장치로 전달되고, 데이터 D2는 스테이지 F에서 2차 기억장치로부터 1차 기억장치로 시프팅되지만, 스테이지 E에 있는 데이터 D3는 스테이지 F로 전송되지 않는다. 데이터 D4 및 D5는 그 다음의 파이프라인 스테이지들로 정상적인 것으로 전송될 수 있는데 그 이유는 그 다음의 스테이지들은 자신의 ACCEFT 신호가 HIGH이기 때문이다.
사이클 4 및 사이클 5에서 파이프라인의 상태를 비교해 보면, 2차 저장 요소를 제공함으로서 제2도에 도시된 파이프라인 실시예는 유효 데이터를 받아들일 수 있는 데이터 저장 요소를 확장(expand), 즉 프리 업(free up)할 수 있다는 것을 알 수 있을 것이다. 예를 들어, 사이클 4에서 데이터 블럭 Dl, D2 및 D3는 "단단한 벽"(solid wall)을 형성하게 되는데, 그 이유는 이들 데이터는 스테이지 F로의 ACCEPT 신호가 HIGH로 될 때까지 전송될 수 없기 때문이다. 그러나, 이 신호가 일단 HIGH로 되면, 데이터 D1는 파이프라인 밖으로 시프팅되며, 데이터 D2는 스테이지 F의 1차 저장 요소로 시프팅하게 되며, 그 다음의 디바이스가 데이터 D2를 수신할 수 없어서 파이프라인이 다시한번 "압축"(compress)해야만 하는 경우에 스테이지 F의 2차 저장 요소는 새로운 데이터를 수용하도록 된다. 이와 같은 경우가 사이클 6에 도시되어 있는데, 여기에서 데이터 D3는 스테이지 F의 2차 저장 요소로 시프팅되어 있으며 데이터 D4는 스테이지 D에서 스테이지 E로 정상적으로 전달되어 있다.
제3(aa)도, 제3(ab)도, 제3(ba)도 및 제3(bb)도(모두 합하여 제3도이라고 함)는 일반적으로 파이프라인의 바람직한 실시예를 나타내고 있다. 이 바람직한 실시예는 위상 Φ0 및 Φ1를 갖는 2상 비오버래핑 클럭(two-phase, non-overlapping clock)을 사용하여 제2도에 도시된 구조를 구현하고 있다. 2상 클럭이 바람직하기는 하지만, 2개 이상의 위상을 갖는 클럭을 사용하여 본 발명의 여러가지 실시예들을 구동하는 것도 가능하다는 것을 알게 될 것이다.
제3도에 도시된 바와같이, 각각의 파이프라인 스테이지는 1차 및 2차 저장 요소를 도시하는 2개의 별개의 박스를 가지는 것으로 나타나있다. 또한 VALID 신호 및 데이터 라인이 이전과 마찬가지로 여러가지 파이프라인 스테이지들을 접속하고는 있지만, 설명의 편의를 위해 단지 ACCEPT 신호만이 제3도에 도시되어 있다. 몇 개의 ACCEPT 신호의 클럭 위상 동안에 상태의 변동은 제3도에서 LOW에서 HIGH로의 변동에 대하여 상방향 화살표(upward-pointing arrow)를 사용하여 표시하고 있다.
마찬가지로, HIGH에서 LOW로의 변동에 대해서는 아래방향 화살표 (downward-pointing arrow)를 사용하고 있다. 하나의 저장 요소로부터 다른 저장 요소로의 데이터 전송은 큰 개방 화살표로 표시된다. 저장 요소가 유효 데이터를 포함하고 있는 경우, 임의의 정해진 스테이지의 1차 또는 2차 저장 요소로부터의 VALID 신호는 HIGH이라고 가정하자.
제3도에서 각각의 사이클은 비오버래핑 클럭 위상 Φ0 및 Φ1의 전 주기(full period)로 이루어져 있는 것으로 도시되어 있다. 이하에서 보다 상세히 설명되는 바와 같이, 데이터는 클럭 사이클 Φ1동안에 2차 저장 요소 (각각의 스테이지에서 좌측 박스로 도시됨)로부터 1차 저장 요소 (각각의 스테이지에서 우측 박스로 도시됨)로 전송되는 반면, 데이터는 클럭 사이클 Φ0 동안에는 한 스테이지의 1차 저장 요소로부터 그 다음 스테이지의 2차 저장 요소로 전송된다. ACCEPT 신호가 스테이지에서 스테이지로 전달되는 것과 동일한 방식으로 ACCEPT 신호를 전달하도록, 제3도는 또한 각각의 스테이지에 있는 1차 및 2차 저장 요소가 내부 수용 라인(internal acceptance line)을 통하여 접속되어 있다. 이와같이, 2차 저장 요소는 언제 자신의 데이터를 1차 저장 요소로 보낼 수 있는가를 알게 된다.
제3도는 사이클 1의 Φ1 위상을 도시하는데, 여기에서 이전에 스테이지 E, D 및 B의 2차 저장 요소에 각각 시프팅된 데이터 D1, D2 및 D3가 그 각각의 스테이지의 1차 저장 요소로 시프팅된다. 그러므로, 사이클 1의 Φ1 위상 동안, 파이프라인은 제2도의 사이클 1으로서 도시된 것과 동일한 구성을 취한다. 이전과 마찬가지로, 스테이지 F로의 ACCEPT 신호는 LOW라고 가정한다. 그러나, 제3도에 도시된 바와 같이, 이것은 스테이지 F의 1차 저장 요소로의 ACCEPT 신호가 LOW인 것을 의미 하지만, 이 저장 요소가 유효 데이터를 포함하고 있지 않기 때문에, 이것은 그 2차 저장 요소로의 ACCEPT신호를 HIGH로 세팅한다.
스테이지 F의 2차 저장 요소로부터 스테이지 E의 1차 저장 요소로의 ACCEPT 신호는 또한 HIGH로 세팅되는데, 그 이유는 스테이지 F의 2차 저장 요소가 유효 데이터를 포함하고 있지 않기 때문이다. 이전과 마찬가지로, 스테이지 F의 1차 저장 요소는 데이터를 수용할 수 있기 때문에, 모든 업스트림 1차 및 2차 저장 요소에 있는 데이터는 어떤 유효 데이터도 오버라이팅됨이 없이 다운스트림 방향으로 시프팅될 수 있다. 한 스테이지에서 그 다음 스테이지로의 데이터의 시프트는 사이클 2에서 그 다음의 Φ0 위상 동안 일어난다. 예를 들어, 스테이지 E의 1차 저장 요소에 포함되어 있는 유효 데이터 D1은 스테이지 F의 2차 저장 요소로 시프팅되고, 데이터 D4는 파이프라인, 즉 스테이지 A의 2차 저장 요소로 시프팅되며 이하도 마찬가지로 행해진다.
스테이지 F의 1차 저장 요소는 사이클 2에서 Φ0 위상동안에 유효 데이터를 포함하고 있지 않으며, 따라서 스테이지 F의 1차 저장 요소로부터 2차 저장 요소로의 ACCEPT 신호는 HIGH 상태로 있게 된다. 그러므로, 사이클 2에서 Φ1 위상 동안에, 데이터는 우측으로 한 스텝 더, 즉 각각의 스테이지 내에서 2차 저장 요소로부터 1차 저장 요소로 시프팅된다.
그러나, 일단 유효 데이터가 스테이지 F의 1차 저장 요소로 로딩되면, 다운 스트림 장치로부터 스테이지 F로의 ACCEPT 신호가 여전히 LOW 인 경우에는, 유효 데이터 D1을 오버라이팅 하거나 및 손실하지 않고 스테이지 F의 2차 저장 요소로부터 데이터를 시프팅할 수 없게 된다. 스테이지 F 1차 저장 요소로부터 2차 저장 요소로의 ACCEPT 신호는 따라서 LOW로 된다. 그러나, 데이터 D2는 여전히 스테이지 F의 2차 저장 요소로 시프트될 수 있는데 그 이유는 이것이 유효 데이터를 포함하고 있지 않고 자신의 ACCEPT 신호가 HIGH 이었기 때문이다.
사이클 3의 Φ1 위상 동안, 이전의 모든 스테이지 내에서 데이터가 시프트될 수 있을지라도, 스테이지 F의 1차 저장 요소로 데이터 B2를 시프팅할 수 없다. 그러나, 일단 유효 데이터가 스테이지 F의 2차 저장 요소로 로딩되면, 스테이지 F는 이 데이터를 전달할 수 없게 된다. 이것은 자신의 ACCEPT 신호를 LOW로 세팅하여 이와같은 사실을 신호한다.
스테이지 F로의 ACCEPT 신호가 LOW 상태에 머물러 있다고 가정하면, 스테이지 F의 데이터 업스트림은 다음의 유효 데이터 블럭 D3가 스테이지 E의 1차 저장 요소에 도착할 때까지 계속하여 스테이지들 사이에서 또는 스테이지 내에서 각각의 클럭 위상에 따라 시프팅될 수 있다. 도시된 바와같이, 이 조건은 사이클 4의 Φ1위상 동안에 도달된다.
사이클 5의 Φ0 위상 동안, 데이터 D3는 스테이지 E의 1차 저장 요소로의 로딩된다. 이 데이터는 더 이상 시프팅될 수 없기 때문에, 스테이지 E의 1차 저장 요소로부저의 ACCEPT 신호는 LOW로 세팅된다. 업스트림 데이터는 정상적으로 시프팅될 수 있다.
제2도의 사이클 5에서와 같이, 파이프라인의 다운스트림 방향에 접속된 장치가 파이프라인 데이터를 수용할 수 있다고 가정하자. 이것은 사이클 4의 Φ1 위상 동안에 파이프라인 스테이지 F로의 ACCEPT 신호를 HIGH로 세팅함으로써 이와같은 사실을 신호한다. 스테이지 F의 1차 저장 요소는 이제 우측으로 데이터를 시프트 할 수 있게 되며, 이들은 또한 신규 데이터를 수용할 수 있게 된다. 그러므로, 데이터 D1은 사이클 5의 Φ1 위상 동안에 시프팅되어 나가버렸기 때문에 스테이지 F의 1차 저장 요소는 저장하고 있어야만하는 데이터를 더 이상 포함하고 있지 않게 된다. 그러므로, 사이클 5의 Φ1 위상 동안에, 데이터 D2는 스테이지 F내에서 2차 저장 요소로부터 1차 저장 요소로 시프팅된다. 스테이지 F의 2차 저장 요소는 또한 신규 데이터를 수용할 수 있게 되고 스테이지 E의 1차 저장 요소로의 ACCEPT 신호를 HIGH로 세팅함으로써 이와같은 사실을 신호하게 된다. 스테이지 내에서, 즉 자신의 2차 저장 요소로부터 자신의 1차 저장 요소로 데이터를 전송하는 동안에, 두 세트의 저장 요소는 동일한 데이터를 포함하게 되지만, 2차 저장 요소에 있는 데이터는 데이터 손실없이 오버라이트(overwrite)될 수 있는데 그 이유는 이 데이터는 1차 저장 요소에 유지되어 있기 때문이다. 한 스테이지의 1차 저장 요소로부터 이후에 오는 스테이지의 2차 저장 요소로의 데이터 전송에 대하여도 마찬가지이다.
스테이지 F의 1차 저장 요소로의 ACCEPT 신호가 사이클 5에서 Φ1 위상 동안에 LOW로 된다고 가정한다. 이것은 스테이지 F가 파이프라인 밖으로 데이터 D2를 전송할 수 없다는 것을 의미한다. 따라서, 스테이지 F는 유효 데이터 D2가 오버라이팅되는 것을 막기 위하여 자신의 1차 저장 요소로부터 자신의 2차 저장 요소로의 ACCEPT 신호를 LOW로 세팅하게 된다. 그러나, 스테이지 F의 2차 저장 요소에 저장된 데이터 D2는 손실없이 오버라이팅될 수 있으며, 따라서 데이터 D3는 사이클 6에서 Φ0 위상 동안에 스테이지 F의 2차 저장 요소로 전송된다. 데이터 D4 및 D5는 정상적인 것으로서 다운스트림 방향으로 시프팅될 수 있다. 일단 유효 데이터 D3가 데이터 D2와 함께 스테이지 F에 저장되면, 스테이지 F의 1차 저장 요소로의 ACCEPT 신호가 LOW인 한, 어느 2차 저장 요소도 신규 데이터를 수용할 수 없으며, 스테이지 E로의 ACCEPT 신호를 LOW로 세팅함으로써 이와같은 사실을 신호한다.
다운스트림 디바이스로부터 파이프라인으로의 ACCEPT 신호가 LOW에서 HIGH로 또는 이와 반대로 변경되는 경우, 이 변경은 파이프라인 내에서 바로 이전의 저장 요소 (동일한 스테이지 내에서 또는 이전의 파이프라인 스테이지 내에서)보다 더 업스트림 방향으로 전파될 필요는 없다. 오히려, 이 변경은 클럭 위상마다 한 저장 요소 블럭씩 파이프라인 내에서 업스트림 방향으로 전파된다.
이 예가 도시하는 바와 같이, 제3도에서 도시한 파이프라인 구조에서 "스테이지"의 개념은 어느 정도는 인식의 문제이다. 데이터가 스테이지들 사이에서(업스트림 스테이지의 1차 저장 요소로부터 이웃하는 다운스트림 스테이지의 2차 저장 요소로) 전송되는 것과 같이 스테이지내에서(2차 저장 요소로부터 1차 저장 요소로) 전송되기 때문에, 스테이지가 제3도에 도시된 것과는 달리 "1차" 저장 요소 다음에 뒤따르는 "2차 저장 요소"로 구성되어 있는 것으로 생각할 수 있다. 그러므로, "1차(primary)" 및 "2차(secondary)" 저장 요소의 개념은 대체로 표시(labelling)의 문제이다. 제3도에서, "1차" 저장 요소는 또한 "출력" 저장 요소라고 할 수도 있는데, 그 이유는 이 요소로부터 데이터가 스테이지밖으로 전송되어 그 다음 스테이지 또는 디바이스로 가기 때문이며, "2차" 저장 요소는 동일한 스테이지에 대하여 "입력" 저장 요소가 될 수 있다.
제1도 내지 제3도에서 도시된 바와 같이, 상기 실시예들을 설명함에 있어서,단지 ACCETP 및 VALID 신호의 제어하에 있는 데이터의 전송만이 언급되었다. 각각의 파이프라인 스테이지는 또한 자신이 임의로 수신한 데이터를 자신의 내부 저장 요소들 사이에서 전달하기 이전에 또는 이 데이터를 다음에오는 파이프라인 스테이지로 전달하기 이전에 상기 데이터를 처리한다는 것을 또한 알아야 한다. 그러므로, 다시 한번 제3도를 참조함에 있어서, 파이프라인 스테이지는 입력 및 출력 저장 요소를 포함하며, 자신의 저장 요소에 저장된 데이터를 임의로 처리하는 파이프라인의 일부분으로서 정의될 수 있다.
게다가, 파이프라인 스테이지 F로부터 다운스트림 방향의 "디바이스"는 어떤 다른 형태의 하드웨어 구조일 필요는 없으며, 오히려 그것은 다른 파이프라인의 동일한 또는 부분의 또 다른 섹션일 수도 있다. 이하에서 도시되는 바와 같이, 파이프라인 스테이지는 모든 다운스트림 저장 요소가 유효 데이터로 채워진 경우 뿐만 아니라, 자신의 데이터 처리를 완료하기 위하여 한 스테이지가 하나 이상의 클럭 위상을 필요로 하는 경우에도 자신의 ACCEPT 신호를 LOW로 세팅할 수 있다. 이와 같은 것은 또한 자신의 저장 요소 중 하나 또는 둘 모두에서 유효 데이터를 생성하는 경우에도 발생할 수 있다. 즉, 전달될 수 없는 유효 데이터를 바로 다음의 다운스트림 저장 요소가 포함하고 있는지의 여부에 따라서, 어떤 스테이지가 ACCEPT 신호를 전달하는 것은 필요가 없다. 오히려, ACCEPT 신호 자체도 인접한 저장 요소들 사이에서의 데이터의 전달을 제어하기 위하여 스테이지 내에서 또는 그 스테이지 외부에 있는 회로에 의해서 변경되기도 한다. VALID 신호도 유사한 방식으로 처리될 수 있다.
2선식 (VALID 신호 및 ACCEPT 신호에 대하여 각각 한 선씩) 인터페이스의 큰 장점은 제어신호가 파이프라인을 거슬러 자신의 처음 스테이지로 전파될 필요가 없이 파이프라인을 제어할 수 있다는 것이다. 예를 들어, 다시 한번 제1도의 사이클 3을 참조하면, 스테이지 F는 스테이지 E에게 자기는 데이터를 수용할 수 없다는 것을 "표시하기는"(tell) 하지만, 스테이지 E는 스테이지 D에게 표시하며 스테이지 D는 스테이지 C에게 표시한다. 사실, 유효 데이터를 포함하고 있는 스테이지들이 더 많이 있는 경우에는, 이 신호는 파이프라인을 따라서 한참동안 뒤로 전파될 것이다. 제3도, 사이클 3에 도시된 실시예에서와같이, LOW ACCEPT 신호는 스테이지 E보다 더 업스트림 방향으로 전파되지는 않으며, 단지 스테이지 E의 1차 저장 요소까지만 전파된다.
이하에 기술되는 바와 같이, 이 실시예는 이 설계를 구현하는데 필요한 실리콘 면적을 크게 증가시키지 않고 이 유연성을 달성할 수 있다. 통상적으로, 데이터 저장을 위해 사용하는 파이프라인에 있는 각각의 래치는 단지 한개의 여분 트랜지스터 (실리콘에 매우 효율적으로 배치된)를 필요로 한다. 또한, 바람직하게는 2개의 여분의 래치 및 적은 수의 게이트가 부가되어 각각의 반-스테이지 (half-stage)에서 데이터 래치들과 관련된 ACCEPT 및 VALID 신호를 처리하게 된다.
제4도는 제3도에 도시된 스테이지를 구현하는 하드웨어 구조를 도시한다.
단지 예로서, 8비트 데이터가 파이프라인을 통하여 병렬로 전송(선택적인 조합의 논리회로를 추가적으로 조작하거나 또는 조작하지 않고)된다고 가정한다. 그러나, 본 발명을 실시하는데 8비트 이상 또는 이하인 데이터가 사용될 수 있다는 것이 인식될 것이다. 그러나, 더나아가서 본 실시예에 따른 2선식 인터페이스는 임의의 데이터 버스 폭에 대해서도 사용하기에 적당하며, 이 데이터 버스 폭은 특정 응용 분야가 요구하는 경우, 스테이지마다 변동될 수도 있다. 본 실시예에 따른 인터페이스는 또한 아날로그 신호를 처리하는데 사용될 수도 있다.
이전에 논의된 바와 같이, 종래의 다른 타이밍 배치가 사용될 수 있지만, 이인터페이스는 바람직하게는 오버랩하지 않는 2상 클럭(two-phase, non-overlapping clock)에 의하여 제어된다. 제4도 내지 제9도에서, 이 클럭 위상 신호는 PH0 및 PH1으로 언급된다. 제4도에서, 각각의 클럭 위상 신호에 대하여 하나의 라인이 도시되어 있다.
입력 데이터는 다중 비트 데이터 버스 IN_DATA를 거쳐 뒤따르는 파이프라인 스테이지에 들어가서 출력 데이터 버스 OUT_DATA를 거쳐 그 다음 파이프라인 스테이지 또는 후속하는 수신회로로 전송된다. 입력 데이터는 상기 기술된 2차 저장 요소를 구성하는 전체적으로 LDIN으로 언급되는 일련의 입력 래치들 (각각의 입력 데이터 신호에 대하여 하나씩)로 이하에서 논의하는 방식으로 로딩된다.
본 실시예의 상기 설명한 예에서, 모든 래치들의 Q 개의 출력들은 그들의 D개의 입력을 따르는 것, 즉 클럭 입력이 HIGH, 즉 논리 "1" 레벨에 있을 때에 입력들이 로딩된다. 또한, 0개의 출력들은 이들의 최종 값들을 유지하고 있다. 즉, Q개의 출력들은 그들 각각의 클럭 신호의 하강 에지에서 래칭된다(latched). 각각의 래치는 자신의 클럭에 대하여 2개의 비오버래핑 클럭 신호 PH1 및 PH1 중 하나를 가지거나 (제5도에 도시된 바와 같이), 또는 이들 클럭 신호 PH0, PH1중의 하나와 하나의 논리 신호의 논리 AND 조합을 가진다. 그러나, 본 발명은 종래의 방법이 래칭 동작의 적절한 타이밍을 보장하기 위해 적용되는 한, 클럭 신호의 상승 에지에서 래치하는 래치, 또는 임의의 다른 공지의 래칭 배열을 제공함으로써 똑같이 양호하게 동작한다.
입력 데이터 래치 LDIN으로부터의 출력 데이터는 임의의 선택적인 조합 논리회로 Bl을 통하여 보내지는데, 이 회로는 입력 래치 LDIN로부터의 출력 데이터를 중간 데이터로 변환하기 위하여 제공된 것이며, 이 중간 데이터는 나중에 출력 데이터 래치 LDOUT에 로딩되는데, 이 출력 래치는 상기 기술된 1차 저장 요소로 구성 되어 있다. 출력 데이터 래치 LDOUT로 부터의 출력도 마찬가지로 그 다음 장치 다운스트림으로 OUT_DATA로서 계속 보내지기 이전에 임의의 선택적인 조합 논리 회로 B2를 통과하게 된다. 이것은 다른 파이프라인 스테이지 또는 파이프라인에 접속된 임의의 다른 장치일 수 있다.
본 발명의 실시에있어서, 파이프라인의 각각의 스테이지는 또한 유효 입력 래치(validation input latch) LVIN, 유효 출력 래치 LVOUT, 수용 입력 래치(acceptance input latch) LAIN 및 수용 출력 래치 LAOUT를 포함하고 있다. 바람직하게는, 이들 4개의 래치 각각은 단순한 단일 스테이지 래치이다. 래치 LVIN, LVOUT, LAIN 및 LAOUT로부터의 출력은 각각 QVIN, QVOUT, QAIN, QAOUT이다. 유효 입력 래치로부터의 출력 신호 QVIN는 유효 출력 래치 LVOUT에 입력으로서 직접 접속되어 있거나 또는 그 신호를 변경할 수 있는 중간 논리 장치 또는 회로를 거쳐 접속될 수도 있다.
마찬가지로, 특정 스테이지의 출력 유효 신호 QVOUT는 그 다음 스테이지의 유효 입력 래치 ZVIN의 입력에 직접 접속되어 있거나, 또는 유효 신호를 변경할 수 있는 중간 장치 또는 논리 회로를 거쳐 접속될 수도 있다. 이 출력 QVIN은 또한 (아래에서 기술되는) 논리 게이트에 접속되어 있는데, 이 논리 게이트의 출력은 수용 입력 래치 LAIN의 입력에 접속되어 있다. 수용 출력 래치 LAOUT로부터의 출력 QAOUT는 선택적으로 다른 논리 게이트를 거쳐 (아래에서 기술되는) 유사한 논리 게이트에 접속되어 있다.
제4도에 도시된 바와 같이, 출력 유효 신호 QVOUT는 후속하는 스테이지가 IN_VALID 신호로서 수신될 수 있게 되는 OUT_VALID 신호를 형성하거나, 또는 단지 이 파이프라인에 접속된 후속 회로에 유효 데이터를 표시하기 위한 것이다. 뒤따르는 회로 또는 스테이지가 데이터를 수용하기 위한 준비의 완료는 각각의 스테이지에 신호 OUT-ACCEPT 신호로서 나타내어지는데, 이 신호는 바람직하게는 이하에서 논의하는 논리 회로를 거쳐 수용 출력 래치 LAOUT에 입력으로서 접속되어 있다.
마찬가지로, 수용 출력 래치 LAOUT의 출력 QVOUT은 바람직하게는 이하에서 기술되는 논리 회로를 거쳐 수용 입력 래치 LAIN에 입력으로서 접속되어 있다.
본 발명을 실시하는데 있어서, 유효 래치 LVIN, LAOUT로부터의 출력 신호 QVIN, QVOUT는 수용 신호 QAOUT, OUT_ACCEPT 신호와 각각 조합을 이루어 수용 래치 LAIN, LAOUT 각각으로의 입력을 형성한다. 제4도에 도시된 실시예에서, 이들 입력 신호들은 각각의 유효 신호 QVIN, QVOUT와 각각의 수용 출력 신호 QAOUT, OUT_ACCEPT의 논리 역과 논리적 NAND 조합으로서 형성된다. 종래의 논리 게이트 NAND1 및 NANB2는 NAND 동작을 수행하고, 인버터 INV1, INV2는 각각의 수용 신호의 논리 역을 형성한다.
디지탈 설계 기술 분야에서 공지된 바와 같이, NAND 게이트로부터의 출력은 임의의 또는 자신의 모든 신호들이 논리적으로 "0" 상태일 때 논리적 "1"이 된다.
그러므로, NAND 게이트로부터의 출력은 그 모든 입력들이 논리 "1" 상태에 있을 때에만 논리 "0"이 된다. 또한 기술 분야에서 공지된 바와 같이 INV1과 같은 디지탈 인버터의 출력은 자신의 입력 신호가 "0"일 때는 논리 "1"이고, 그 입력 신호가 "1"인 때에는 "0"이다.
NAND 게이트 NAND1에의 입력은 그러므로 QVIN 및 NOT (QAOUT)이 되며, 여기서 "NOT"는 이진 반전(binary inversion)을 나타낸다. 공지된 기술을 사용하여 수용 래치 LAIN로의 입력은 다음과 같이 변형될 수 있다.
NAND(QVIN, NOT(QAOUT)) = NOT(QVIN) OR QAOUT
즉, 인버터 INV1와 NAND 게이트 NAND1의 조합은 신호 QVIN이 "0"이거나 또는 신호 QAOUT가 "1"인 때, 또는 둘 다일 때 논리 "1"이 된다. 그러므로, 게이트 NAND1과 인버터 INV1은 자신의 입력중 하나는 수용 래치 LAOUT의 QAOUT 출력에 직접적으로 접속되어 있고 자신의 다른 입력은 유효 입력 래치 LVIN 의 출력 신호 QVIN 의 역에 접속되어 있는 단일 OR 게이트로 구현될 수 있다.
디지탈 설계 기술분야에서 공지된 바와 같이, 유효 및 수용 래치로서 사용하기에 적당한 많은 래치들은 두개의 출력 Q 및 NOT(Q), 즉 Q 및 자신의 논리역을 가질 수 있다. 따라서, 이와 같은 래치가 선택된 경우, OR 게이트로의 한 입력은 유효 래치 LVIN의 NOT(Q) 출력에 직접 접속될 수 있다. 게이트 NAND1 및 인버터 INV1는 공지된 종래의 기술을 사용하여 구현될 수 있다. 그러나, 사용된 래치 아키텍쳐에 의존하여 반전 출력없는 래치를 사용하고, 그 대신에 모두 실리콘 장치에 효율적으로 구현될 수 있는 게이트 NAND1 및 인버터 INV1을 제공하는 것이 보다 더 효율적일 수 있다. 따라서, 임의의 공지된 배열이 Q 신호 및/또는 자신의 논리역을 생성하는데 사용될 수 있다.
데이터 및 유효 래치 LDIN, LDOUT, LVIN 및 LVOUT는 클럭 신호 (입력측에 있는 PH0과 출력측에 있는 PH1)와 같은 쪽의 수용 래치로부터의 출력 모두가 논리 "1"인 경우에 각각의 데이터 입력을 로딩한다. 이와 같이, 클럭 신호 (입력 래치 LDIN 및 LVIN에 대하여 PH0)와 각각의 수용 래치(이 경우에 LAIN)의 출력이 논리 AND 방식으로 사용되고 데이터는 그들 모두가 논리 "1"인 경우에만 로딩된다.
래치를 CMOS로 구현하는 것과 같은 특정의 응용 분야에서, 래치의 로딩(도시된 CK 또는 인에이블링 입력을 거쳐)을 제어하는 논리 AND 동작은 각각의 인에블링 입력 신호 (예를 들어, 래치 LVIN 및 LDIN에 대하여 PH0 및 QAIN)를 래치의 입력 라인에 직렬로 접속된 MOS 트랜지스터의 게이트에 접속함으로써 종래의 방식으로 용이하게 구현될 수 있다. 그 결과, 고속 응용 분야에서 전파 지연때문에 타이밍 문제를 야기할 수도 있는 실제의 논리 AND 게이트를 제공하는 것이 필요하다. 그러므로, 도면에 도시된 AND 게이트는 단지 여러가지 래치의 인에이블 신호를 생성 하는데 수행되는 논리 함수만을 나타내고 있다.
이와 같이, 데이터 래치 LDIN는 PH0 및 QAIN 모두가 "1"인 경우에만 입력 데이터를 로딩한다. 그것은 이들 2개의 신호 중 하나가 "0"으로 되는 경우에 이 데이터를 래치하게 된다.
비록 클럭 위상 신호 PH0, PH1중 단지 하나만이 파이프라인 스테이지의 입력(및 출력)측에 있는 데이터 및 유효 래치를 클럭킹하는데 사용되고 있지만, 다른 클럭 위상 신호는 같은 쪽에 있는 수용 래치를 클럭킹하는데 직접 사용되고 있다.
즉, 파이프라인 스테이지의 양측(입력 또는 출력)에 있는 수용 래치는 바람직하게는 같은 쪽에 있는 데이터 및 유효 래치와 "위상이 벗어나"(out of phase) 클럭킹된다(clocked). 예를 들면, PH0이 데이터 래치 LDIN 및 유효 래치 LVIN에 대하여 클럭 신호 CK를 발생하는데 사용되고 있지만, PH1은 수용 입력 래치를 클럭킹하는데 사용된다.
예로서, 2선식 유효 및 수용 회로가 덧붙은 파이프라인의 동작이 어떤 유효 데이터도 선행 파이프라인 스테이지 또는 전송 장치로부터 그 회로로의 입력에 처음에는 제공되지 않는다고 가정하자. 즉, 도시된 스테이지로의 유효 입력 신호 IN_VALID가 시스템이 최근에 리셋되었기 때문에 "1"로 되지 않았다고 가정하자.
또한 몇개의 클럭 사이클이 시스템이 마지막으로 리셋된 이후에 발생하므로, 회로가 안정 상태 조건에 도달하였다고 가정하자. 유효 래치 LVIN로부터의 유효 입력 신호 QVIN가 따라서 클럭 PH0의 다음 정 주기(positive period)동안 "0"으로서 로딩된다. 수용 입력 래치 LAIN으로의 (게이트 NAND1 또는 다른 동등한 게이트를 통한) 입력은 따라서 클럭 신호 PH1의 다음 정 주기동안에 "1"로서 로딩된다. 즉, 데이터 입력 래치 LDIN에 있는 데이터가 유효 데이터가 아니기 때문에, 스테이지는 입력 데이터를 수용할 준비가 되었음을 신호하게 된다 (왜냐하면 저장할만한 가치가 있는 어떤 데이터도 가지고 있지 않기 때문이다).
이 예에서, 신호 IN_ACCEPT는 데이터 및 유효 래치 LDIN 및 LVIN를 인에이블하는데 사용된다는 것에 주의한다. 이 때의 신호 IN_ACCEPT는 "1"이기 때문에, 이들 래치는 종래의 투명한 래치(transparent latch)처럼 효율적으로 동작하기 때문에, IN_DATA 버스상에 있는 어떤 데이터도 블럭 신호 PH0이 "1"로 되자마자 데이터 래치 LDIN로 로딩된다. 물론, 이 무효 데이타도 자신의 수용 래치로부터의 출력 QAOUT가 "1"인 한 다음 파이프라인 스테이지의 다음 데이타 래치 LDOUT로 로딩된다.
그러므로, 데이타 래치가 유효 데이타를 포함하고 있지 않는 한, 그것은 자신의 각각의 클럭 신호의 다음의 정 주기동안에 자신에게 제공된 임의의 데이타도 수용하거나 또는 "로드"한다. 반면에, 이와 같은 무효 데이타가 자신의 대응하는 수용 래치로부터의 수용 신호가 "로"(low)(즉, "0")인 어떤 스테이지에도 로딩되지 않는다. 더나아가서, 유효 래치로부터의 출력 신호는 유효 래치(후속하는 유효 래치로의 유효 입력 신호를 형성함)로 대응하는 IN_VALID 신호가 로인 한 "0"에 머물러 있게 된다.
데이타 래치로의 입력 데이타가 유효 값인 경우에, 유효 신호 IN_VALID는 "1"로 상승함으로써 이를 나타낸다. 대응하는 유효 래치의 출력이 다음에 자신의 각각의 클럭 위상 신호의 그 다음 상승 에지에서 "1"로 상승한다. 예를 들어, 래치 LVIN의 유효 입력 신호 QVIN는 자신의 대응하는 IN_VALID신호가 클럭 위상 신호PH0의 그 다음 상승 에지에서 하이(high)로(즉, "1"로 상승) 되는 때에 "1"로 상승한다.
그 대신에, 이제부터는 데이타 입력 래치 LDIN이 유효 데이타를 포함하고 있다고 가정하자. 데이타 출력 래치 LDOUT가 신규 데이타를 수용할 준비가 되어 있는 경우, 자신의 수용 신호 QAOUT는 "1"이 된다. 이 경우, 클럭 신호 PH1의 다음 정 주기 동안에, 데이타 래치 LDOUT 및 유효 래치 LVOUT가 사용가능하게되며 데이타 래치 LDOUT는 자신의 입력에 존재하는 데이터를 로딩하게 된다. 이와 같은 것은 다른 클럭 신호 PH0의 다음 상승 에지 이전에 발생하게 되는데 그 이유는 클럭 신호가 비오버래핑이기 때문이다. 그러므로, PH0의 다음 상승 에지에서 선행 데이터 래치(LDIN)는 데이터 출력 래치 LDOUT가 래치 LDIN으로부터 전송된 데이터를 안전하게 래치하게 될 때까지 선행 스테이지로부터 새로운 입력 데이터를 래칭하지 않게 된다.
따라서, 동일한 시퀀스가 데이터를 수용할 수 있는 모든 인접한 데이터 래치쌍 (스테이지 내에서 또는 인접한 스테이지들 사이에 있는)을 뒤따르게 되는데, 그 이유는 그들이 클럭의 대체 위상에 근거하여 동작하게 되기 때문이다. 아직 전달 될 수 없는 유효 데이터를 포함하고 있기 때문에 신규 데이터를 수용할 준비가 되어 있지 않는 임의의 데이터 래치도 LOW인 출력 수용 신호 (자신의 수용 래치 LA로 부터의 QA 출력)를 가지게 되며, 자신의 데이터 래치 LDIN 또는 LDOUT는 로딩되지 않게 된다. 그러므로, 특정 스테이지 또는 스테이지의 특정 측 (입력 또는 출력)의 수용 신호 (수용 래치로부터의 출력)가 LOW인 한, 자신의 대응하는 데이터 래치는 로딩되지 않는다.
제4도는 또한 바람직한 실시예에 포함된 리셋 특징을 도시한다. 도시된 예에서, 리셋 신호 NOTRESETO는 유효 출력 래치 LVOUT의 반전 리셋 입력 R(여기에서 반전은 종래와 마찬가지로 작은 원으로 표시되어 있다)에 접속되어 있다. 공지된 바와같이, 이것은 유효 래치 LVOUT가 리셋 신호 NOTRESETO가 "0"으로 되기만하면 "0" 을 출력하도록 되어있는 것을 의미한다. 리셋 신호가 로("0"으로 되는 것)로 되는 때에 래치를 리셋하는 것의 하나의 장점은 전송의 단절이 래치를 리셋하게 된다는 것이다. 이들은 그 다음에 유효 전송이 시작되기만 하면 "널"(null)상태 또는 리셋 상태에 있게 되며 리셋 신호는 HIGH로 된다. 따라서, 리셋 신호 NUTRESETO는 디지탈 "ON/OFF"스위치로서 동작하게 되며 그것은 파이프라인을 활성화시키기 위하여 HIGH 값에 있어야만 한다.
파이프라인에 유효 데이터를 유지하고 있는 모든 래치들을 리셋할 필요는 없다는 것에 주의한다. 제4도에 도시된 바와 같이, 유효 입력 래치 LVIN는 리셋 신호 NOTRESET0에 의하여 직접 리셋되지 않고, 오히려 간접적으로 리셋된다. 리셋 신호 NOTRESET0가 "0"으로 떨어진다(drop)고 가정하자. 유효 출력 신호 QVOUT도 자신의 이전 상태에 관계없이 "0"으로 떨어지게 되므로, 수용 출력 래치 LAOUT (게이트 NAND1를 거쳐)로의 입력은 "HIGH"로 된다. 수용 출력 신호 QAOUT도 또한 "1"로 상승 한다. "1"의 값을 갖는 QAOUT는 유효 입력 신호 QVIN의 상태에 관계없이 그 다음에 "1"로서 수용 입력 래치 LAIN의 입력으로 전송된다. 수용 입력 신호 QAIN는 그 다음에 클럭 신호 PH1의 다음 상승 에지에서 "1"로 상승하게 된다. 유효 신호 IN_VALID가 제대로 "0"으로 리셋되었다고 가정하면, 클럭 신호 PH0의 후속하는 상승 에지에서, 유효 래치 LVIN으로부터의 출력은 직접 리셋된 경우와 마찬가지로 "0"으로 된다.
이 예가 설명하고 있듯이, 모든 유효 래치를 리셋하기 위하여 각각의 스테이지 (최종 스테이지를 포함하여)의 한쪽에만 있는 유효 래치를 리셋하는 것이 단지 필요하다. 사실, 많은 응용 분야에서, 다른 모든 유효 래치를 리셋할 필요는 없다. 리셋 신호 NOTRESET0가 클럭의 두 위상 PH0, PH1의 하나 이상의 전 사이클 (complete cycle)동안에 확실히 로(low)로 될 수 있다면, "자동 리셋" (automatic reset)(리셋 신호의 후방 전파)은 이전의 파이프라인 스테이지에 있는 유효 래치에 대해 일어나게 된다. 사실, 리셋 신호가 적어도 파이프라인 스테이지와 같은 수의 두 위상의 클럭의 전 사이클 동안에 로에 유지되어 있다면, 최종 파이프라인 스테이지에 있는 유효 출력 래치를 직접 리셋하기만 하면 된다.
제5(a)도 및 제5(b)도 (전체적으로 제5도라고 함)는 오버래핑 되지 않은 클럭 신호 PH0, PH1사이의 관계, 리셋 신호의 효과, 및 제4도에 도시된 실시예에서 구성된 파이프라인 스테이지의 2개의 도시된 측면으로 또 그 사이에서 유효 및 수용 신호의 다른 교환에 대한 데이터의 유지 및 전송을 도시하고 있는 타이밍 도를 나타내고 있다. 제5도의 타이밍도에 도시된 예에서, 데이터 래치 LDIN, LDOUT로부터의 출력은 중간의 논리 블럭 Bl, B2에 의한 더 이상의 처리 없이 전달된다고 가정하였다.
이것은 예로서이고 제한을 의미하는 것은 아니다. 임의의 조합 논리 구조도 연속한 파이프라인 스테이지의 데이터 래치 사이에, 또는 단일 파이프라인 스테이지의 입력측 및 출력측 사이에 포함될 수 있다는 것을 잘 알 것이다. 입력 데이터에 대하여 실제로 표시된 값들 (예를 들어, HEX 데이터 워드 "aa" 또는 "4")은 또한 예시적인 것에 불과하다. 상기에서 언급된 바와 같이, 데이터 래치 또는 다른 저장 장치가 입력 워드의 각각의 비트 또는 값을 수용 및 래치 또는 저장할 수 있는 한, 입력 데이터 버스는 임의의 폭을 가질 수 있다. (아날로그일 수도 있다).
[바람직한 데이타 구조 - "토큰"]
제4도에 도시된 샘플 응용에서, 어떤 스테이지도 입력 데이터를 그 조합 논리 블럭 Bl, B2 등을 통하여 통과시키지 못하도록 하는 제어회로가 없기 때문에, 각각의 스테이지는 모든 입력 데이터를 처리한다. 향상된 유연성을 제공하기 위하여, 본 발명은 데이터를 분산시키고 시스템 전체에 걸쳐 정보를 제어하는데 토큰을 사용하고 있는 데이터 구조를 포함하고 있다. 각각의 토큰은 하나 이상의 토큰 워드로 분리된 일련의 이진 비트로 구성되어 있다. 또한, 상기 비트는 다음 세가지 형태, 어드레스 비트(A), 데이터 비트(D) 또는 확장 비트(E) 중의 하나이다. 제한하는 것이 -아닌 예로서, 데이터는 1비트의 확장 비트라인을 갖는 8비트 버스를 통하여 워드(word)로서 전송된다고 가정한다. 4-워드 토큰의 일예가 이하에서 전송 순서대로 도시되어 있다.
확장 비트 I는 각각의 데이터 워드에 부가적으로 (바람직하게는) 사용되고 있다는 것에 주의한다. 또한, 어드레스 필드는 가변 길이를 가지며 바람직하게는 제1워드의 확장 비트 바로 다음에 전송된다.
그러므로, 토큰은 본 발명에서는 하나 이상의 (이진) 디지탈 데이터의 워드로 구성되어 있다. 이 전송 방법을 필요로 하는 것은 아니지만 이들 각각의 워드는 차례로(in sequence) 또는 바람직하게는 병렬로 전송된다. 직렬 데이터 전송은 또한 공지의 기술을 사용하여도 가능하다. 예를들어, 비디오 파서(video parser)에서 제어 정보는 병렬로 전송되는 반면 데이터는 직렬로 전송된다.
일예가 설명하고 있듯이, 각각의 토큰은 바람직하게는 시작부에 토큰에 포함되어 있는 데이터의 형태을 식별하는 어드레스 필드(A-비트의 문자열)를 갖는다.
대부분의 응용예에서, 논리 회로가 스테이지가 전 어드레스 필드를 수신하여 디코딩하기에 충분히 긴 일부 어드레스 필드(partial address field)의 어떤 표현을 저장할 수 있는 해당 파이프라인 스테이지에 포함되어 있기만 하다면, 단일 워드 또는 워드의 일부분은 전체 어드레스 필드(entire address field)를 전송하는데 충분하지만, 본 발명에 따르면 필요한 것은 아니다.
어드레스 필드를 전송하는데는 어떤 전용 권선 또는 레지스터도 필요하지 않다는 것에 주의한다. 그것은 데이터 비트를 사용하여 전송된다. 이하에서 설명하는 바와같이, 특정 어드레스 필드에 의하여 활성화되도록 계획되지 않은 경우, 파이프라인 스테이지는 슬로우 다운(slow down)되지 않는다. 즉, 스테이지는 지연없이 토큰을 전달할 수 있다.
어드레스 필드 다음에 오는 토큰에서의 나머지 데이터는 토큰의 사용에 의해 제한되지 않는다. 이들 D-데이터 비트는 임의의 값을 가질 수 있으며 이들 비트에 부착된 의미는 여기서는 중요하지 않다. 즉, 데이터의 의미는 예를들어 어느 특정 시점에서 시스템 내에서 그 데이터가 있는 위치에 따라 변동할 수 있다. 어드레스 필드 다음에 첨가된 데이터 비트 D의 수는 필요한 만큼 길 수도 짧을 수도 있으며 다른 토큰에 있는 데이터 워드의 수는 크게 다를 수 있다. 어드레스 필드 및 확장 비트는 제어 신호를 파이프라인 스테이지에 전달하는데 사용된다. 데이터 필드(D 비트의 문자열)에 있는 워드의 수는 특정되지 않은 수가 될 수 있기 때문에, 데이터 필드에서 전달된 정보도 그에 따라서 변할 수 있다. 그러므로, 이하의 설명은 어드레스 및 확장 비트의 사용에 관한 것이다.
본 발명에서, 토큰은 여러 회로 블럭들이 비교적 간단한 구성으로 서로 접속되어 있는 경우에 특히 유용한 데이터 구조이다. 가장 간단한 구성은 프로세싱 스텝의 파이프라인이다. 예를들어, 제1도에 도시된 바와 같이, 토큰의 사용은 파이프라인 구조에 대한 사용에 한정되지 않는다.
다시 한번 각각의 박스가 완전한 파이프라인 스테이지를 나타내는 것이다고 가정한다. 제1도의 파이프라인에서, 데이터는 다이어그램의 좌측에서 우측으로 흐른다. 데이터는 머신에 들어가서 프로세싱 스테이지 A로 들어간다. 이 것은 상기 데이터를 수정할 수도 수정하지 않을 수도 있으며 그 다음에 상기 데이터를 스테이지 B로 전달한다. 수정이 있는 경우, 수정은 복잡할 수도(arbitrarily complicated) 있으며, 일반적으로는 흘러 나가는 것과 동일한 수의 데이터 항목이 임의의 스테이지로 흘러 나가는 것과 동일한 수의 데이터 항목이 임의의 스테이지로 흘러 들어가는 것은 아니다. 스테이지 B는 데이터를 다시 수정하여 이를 스테이지 C로 보내며 이하도 마찬가지이다. 이와같은 설계에서, 데이터가 반대 방향으로 C로 보내며 이하도 마찬가지이다. 이와같은 설계에서, 데이터가 반대 방향으로 흐르는 것은 불가능하기 때문에, 예를들어 스테이지 C는 데이터를 스테이지 A로 전달할 수 없다. 이 제한은 흔히 완전히 용인할 수 있는 것이다.
반면에, 2개의 블록 사이에 직접적인 접속이 없는 경우에도 스테이지 A가 정보를 스테이지 C로 전달하는 것이 매우 바람직하다. 스테이지 A 및 C 통신은 스테이지 B를 통해서만 이루어진다. 토큰의 한 장점은 이들이 이러한 종래의 통신을 할 수 있다는 것이다. 토큰을 인식하지 않는 임의의 프로세싱 스테이지도 단지 이것을 다음 블럭으로 변경하지 않고 전달하기 때문이다.
이 예에 따르면, 확장 비트는 각각의 토큰에 있는 어드레스 및 데이터 필드와 함께 전송되어, 프로세싱 스테이지는 자신의 어드레스를 전혀 디코딩할 필요없이 하나의 (임의의 길이를 가질 수 있는) 토큰 상에 전달할 수 있다. 이 예에 따르면, 확장 비트가 HIGH ("1")인 임의의 토큰도 동일한 토큰의 부분인 후속 워드가 뒤따르게 된다. 이 워드는 또한 토큰 내에 또다른 토큰 워드가 있는지의 여부를 나타내주는 확장 비트를 가지게 된다. 스테이지가 확장 비트가 LOW ("0")인 토큰 워드를 만나게 되면, 이것은 토큰의 마지막 워드이다. 다음 워드는 신규 토큰의 처음 워드이라고 가정한다.
프로세싱 스테이지의 간단한 파이프라인이 특히 유용하지만 토큰은 보다 복잡한 구성의 프로세싱 요소(processing elements)들에 인가될 수도 있다는 것이 자명하다는 사실에 주목할 필요가 있다. 보다 복잡한 프로세싱 요소의 한 예가 이하에서 설명된다.
본 발명에 따르면, "0"으로 세팅된 확장 비트를 부여함으로써 정해진 토큰의 마지막 워드에 신호를 보내기 위하여 확장 비트의 상태를 사용할 필요는 없다. 바람직한 설계의 다른 대안은 확장 비트를 이동시켜서 마지막 워드 대신에 토큰의 처음 워드를 나타내도록 하는 것이다. 이것은 디코딩 하드웨어를 적당히 변경시킴으로써 달성될 수 있다.
처음 워드보다도 토큰의 마지막 워드에 신호를 보내기 위해 본 발명의 확장 비트를 사용하는 것의 장점은 토큰이 확장 비트를 가지고 있는지의 여부에 따라서 회로 블럭의 행동을 수정하는데 자주 유용하다는 것이다. 이것의 한 예는 양자화 테이블 (일반적으로 메모리 장치)에 저장된 비디오 양자화 값들을 처리하는 스테이지를 활성화시키는 토큰이다. 예를 들면, 64개의 8비트 임의 이진 정수(arbitrary binary integers)를 포함하는 테이블이다.
신규 양자화 테이블을 파이프라인의 양자화기(quantizer) 스테이지에 로딩하기 위하여, "QUANT_TABLE" 토큰이 양자화기로 보내진다. 예를 들어, 이러한 토큰의 경우는 65개의 토큰 워드로 구성된다. 첫번째 워드는 코드 "QUANT_TABLE"을 포함한다. 즉 양자화 테이블을 생성한다. 이것은 그 다음에 양자화 테이블의 정수들인 64 워드가 오게 된다.
비디오 데이터를 인코딩하는 경우, 이따금 이와같은 양자화 테이블을 전송하는 것이 필요하다. 이 기능을 달성하기 위하여, 확장 워드가 없는 QUANT_TABLE 토큰이 양자화기 스테이지로 전달될 수 있다. 이 토큰을 보게 되고, 첫번째 워드의 확장 비트가 LOW인 것을 알게 되면, 양자화기 스테이지는 자신의 양자화 테이블을 판독하여 64 양자화 테이블 값들을 포함하는 QUANT_TABLE 토큰을 구성할 수 있다.
첫번째 워드 (LOW이었음)의 확장 비트는 변경되어서, HIGH이고 그 토큰은 64번째 양자화 테이블 값에 있는 LOW 확장 비트에 의해 나타내는 토큰의 새로운 끝이 될 때까지 계속하여 HIGH 확장 비트를 가지고 있게 된다. 이 과정은 시스템을 통하여 일반적인 방식으로 진행되며 비트스트림(bit stream)으로 인코딩된다.
이 예에 계속하여, 양자화기는 신규 양자화 테이블을 자신의 메모리 장치로 로딩할 수 있거나, 또는 QUANT_TABLE 토큰의 첫번째 워드가 설정된 자신의 확장 비트를 가지고 있는지의 여부에 따라서 자신의 테이블을 판독할 수 있다.
토큰에서 첫번째 또는 마지막 토큰 워드에 신호를 보내기 위하여 확장비트를 사용할 것인가의 선택은 파이프라인이 사용되어질 시스템에 달려있다. 본 발명에 따르면 두가지 대안 모두가 가능하다.
바람직한 확장 비트 체계에 대한 다른 대안은 토큰의 처음부분에 길이 카운트(length count)를 포함하는 것이다. 예를들어, 이와같은 배열은 토큰이 매우 긴 경우에 효율적일 수 있다. 예를들어, 특정 응용에서 일반적인 토큰은 1000 워드의 길이를 갖는다. 예시된 (비트가 각각의 토큰 워드에 부착되어 있는) 확장 비트 체계를 사용하여, 토큰은 모든 확장 비트를 포함하기 위하여 1000개의 추가 비트를 필요로 한다. 그러나, 단지 10 비트만이 이진 형태로 토큰 길이를 인코딩하는데 필요하게 된다.
그러므로, 긴 토큰을 사용하고 있지만, 실험에 따르면 짧은 토큰을 이용하는 많은 용도가 있다. 여기에서 바람직한 확장 비트 체계가 유용하다. 토큰이 단지 하나의 워드 길이인 경우, 단지 한 비트만이 이것을 신호하는데 필요하다. 그러나, 카운팅 체계(counting scheme)는 일반적으로 이전과 동일한 10 비트를 필요로 한다.
길이 카운트 체계의 단점은 다음과 같다. 1) 짤은 토큰에 대해서는 비효율적이다. 2) (1023 워드 이하가 카운팅될 수 있는 단지 10비트를 가짐) 토큰에 최대 길이 제한을 두게 된다. 3) 토큰의 길이는 (아마도 토큰의 시작부분에 있는) 카운트를 생성하기에 앞서 알려져야 한다. 4) 토큰을 처리하는 모든 회로 블럭은 워드를 카운팅하는 하드웨어를 갖추고 있을 필요가 있다. 5) (데이터 전송 에러로 인하여) 카운트가 손상된(corrupted) 경우, 복구를 할 수 있는지의 여부가 불투명 하다.
본 발명에 따른 확장 비트 체계의 잇점은 다음과 같다. 1) 파이프라인 스테 이지는 인식되지 않은 토큰들은 단지 확장 비트만을 정확하게 고찰함으로써 전달될 수 있기 때문에 모든 토큰을 디코딩하는 회로 블럭을 포함할 필요가 없다. 2) 확장 비트측 코딩은 모든 토큰에 대하여 동일하다. 3) 토큰의 길이에 대한 어떠한 제한도 없다. 4) 이 체계는 짧은 토큰에 대해서 (토큰의 길이를 표현하는 오버헤드의 관점에서)효율적이다. 5)에러 복구는 자연히 달성된다. 확장 비트가 손상된 경우, 하나의 랜덤한 토큰이 (확장 비트에 대하여 "1"에서 "0"으로 손상된) 생성되거나 또는 토큰이 ("0"에서 "1"로 손상된 확장 비트에 대하여) 손실된다. 또한, 이 문제점은 관련된 토큰에만 한정된다(localized). 이 토큰이후에, 정확한 동작이 자동적으로 복구된다.
또한, 어드레스 필드의 길이는 변할 수 있다. 이것은 가장 흔한 토큰을 최소수의 워드로 압축할 수 있도록 해주기 때문에 매우 유익하다. 반면에 이것은 모든 프로세싱 스테이지들이 계속하여 전 대역폭으로 동작할 수 있도록 해주기 때문에 비디오 데이터 파이프라인 시스템에서 매우 중요하다.
본 발명에 따르면, 가변 길이를 갖는 어드레스 필드를 허용하기 위하여, 랜덤 데이터 다음에 오는 짧은 어드레스가 보다 더 긴 어드레스와 결코 혼동될 수 없도록 어드레스들이 선택된다. (의도하는 파이프라인 스테이지를 활성화시키기 위한 "코드"로서의의 역할도 하는) 어드레스 필드를 인코딩하기 위한 바람직한 기술은 허프만이 제일먼저 서술한 공지의 기술, 통상적인 명칭은 허프만 코드(Huffman Code)", 이 있다. 그럼에도 불구하고, 당해 기술 분야에서 통상의 지식을 가진 자에 의해서, 다른 코딩 체계도 성공적으로 이용될 수 있다는 것은 자명하다.
비록 허프만 인코딩이 디지탈 설계 분야에서 잘 알려져 있기는 하지만, 다음의 예는 일반적인 배경을 제공한다.
허프만 코드는 기호 (본 발명과 같은 디지탈 시스템과 판련하여, 기호는 통상 이진수임)의 부호열(string of symbols)로 구성된 워드로 이루어져있다. 코드워드(code word)는 가변적인 길이를 가질 수 있고, 허프만 코드 워드의 특이한 성질은 보다 더 긴 코드 워드가 보다 더 짧은 코드 워드를 구성하는 기호로 절대 시작하지 않도록 코드 워드가 선택된다는 것이다. 본 발명에 따르면, 토큰 어드레스 필드는 (반드시 필요한 것은 아니지만) 바람직하게는 공지된 허프만 인코딩 기술을 사용하여 선택된다.
또한 본 발명에 있어서, 어드레스 필드는 바람직하게는 첫번째 워드 토큰의 최상위 비트 (MSB)에서 시작한다. (MSB의 지정은 임의적이며 이 체계는 여러가지 MSB 지정을 수용하도록 수정될 수 있다는 것에 주의). 어드레스 필드는 보다 덜 중요한 인접한 비트를 통하여 계속된다. 특정 응용 분야에 있어서, 토큰 어드레스가 하나의 토큰 워드를 필요로 하는 경우, 어드레스 필드의 임의의 정해진 워드에서의 최하위 비트는 다음 워드의 최상위 비트에서 계속되어진다. 어드레스 필드의 최소 길이는 1 비트이다.
공지된 몇몇 하드웨어 구조중 어떤 것은 본 발명에서 사용된 토큰을 생성하는데 사용될 수 있다. 이러한 구조의 하나는 마이크로프로그래밍된 상태 머신이다. 그러나, 공지된 마이크로프로세서 또는 다른 장치도 또한 사용될 수 있다.
본 발명에 따른 토큰 체계의 중요한 장점은 예기치 않은 수요에 대한 적응능력이다. 예를 들어, 신규 토큰이 유입되는 경우, 이와같은 일이 단지 소수의 파이프라인 스테이지에만 영향을 주게 될 것이라는 것이다. 가장 흔한 경우로는 단지 2개의 스테이지 또는 회로 블럭이 영향을 받게 된다. 즉, 제1위치에 있는 토큰을 생성하는 하나의 블럭 및 이 신규 토큰을 처리하기 위해 새롭게 설계된 또는 수정된 블럭 또는 스테이지가 영향을 받게 된다. 임의의 다른 파이프라인 스테이지를 수정할 필요가 없다는 것에 주의할 필요가 있다. 오히려, 이들이 그것을 인식하지 않고 따라서 수정없이 이 토큰을 전달하게 되기 때문에 이들의 설계에 대한 수정 없이 신규 토큰을 처리할 수 있다는 것이다.
본 발명이 실질적으로 존재하는 설계된 장치가 영향을 받지 않게 할 수 있다는 것은 분명한 장점이다. 칩 세트에 있는 소정의 반도체 칩을 그 칩 세트의 다른 어떤 칩의 설계를 개량하여 전혀 영향을 받지 않도록 하는 것도 가능하다. 이것은 고객의 시각에서와 칩 제조업자의 시각에서 볼 때도 유익한 것이다. 수정이라는 것이 모든 칩들이 설계 변경 (시스템에서의 칩의 수를 감소시키기 위해 집적 수준이 점차로 증가하고 있는 상황)으로 인해 영향을 받게 된다는 것을 의미하는 경우에도, 동일한 설계가 재사용될 수 있기 때문에, 보다 좋은 타임-투-마켓 (time-to-market)을 달성할 수 있는 상당한 장점이 여전히 존재한다.
특히, 토큰을 확장하여 2개의 워드 어드레스를 포함하도록 세팅할 필요가 있는 경우 발생할 수 있는 상황에 주목할 필요가 있다. 이러한 경우에 있어, 기존의 설계를 변경할 필요는 없다. 파이프라인 스테이지에 있는 토큰 디코더는 이러한 토큰의 첫번째 워드를 디코딩하려고 할 것이며, 결국 이 토큰을 인식하지 않게 된다. 그 다음에 이 동작을 정확히 수행하기 위하여 확장 비트를 사용하여 이 토큰을 수정하지않은 상태로 전달한다. 또한 두번째 워드가 인식되지 않은 토큰의 데이터 필드의 일부분이라고 "가정"하게 되기 때문에, 이 토큰의 두번째 워드를 (이것이 어드레스 비트를 포함하고 있더라도) 디코딩하려고 하지않는다.
많은 경우에, 파이프라인 스테이지 또는 접속된 회로 블럭은 토큰을 수정하게 된다. 이것은 통상, 하지만 필수적이지는 않지만, 보통은 토큰의 데이터 필드를 수정하는 형태를 취한다. 또한, 소정의 데이터 워드를 제거하거나 또는 신규 데이터 워드를 부가하거나 함으로써, 토큰에 있는 데이터 워드 수를 수정하는 것이 통상적이다. 어떤 경우에는, 토큰 스트림(token stream)으로부터 토큰들이 완전히 제거 된다.
대부분의 응용에서, 파이프라인 스테이지는 일반적으로 단지 몇개의 토큰만을 디코딩하게 된다 (몇개의 토큰에 의해 활성화된다). 이 스테이지는 다른 토큰들은 인식하지 않고 변경하지 않은 상태로 이들을 전달한다. 더 많은 경우에 있어서, 단지 하나의 토큰만이, DATA토큰 워드 자체만이 디코딩된다.
많은 응용에 있어서, 특정 스테이지의 동작은 자신의 과거 동작의 결과에 달려 있다. 이와 같이 스테이지의 "상태"는 자신의 이전의 상태에 달려있다. 즉, 스테이지는 저장된 상태 정보에 달려 있으며, 이것은 하나 이상의 클럭 사이클전의 자신의 이력(history)에 대한 정보를 유지해야만 한다는 말해주는 다른 방법이기도 하다. 본 발명은 데이터 경로에 있는 래치들이 단순한 파이프라인 래치인 응용에 사용하기에 적합할 뿐만아니라, 이러한 "상태 머신" 스테이지를 포함하고 있는 파이프라인에 사용하기에 매우 적합하다.
본 발명에 따른 이러한 "상태 머신"회로에 대한 2선식 인터페이스의 적응성은 본 발명의 중요한 장점이다. 이것은 특히 데이터 경로가 상태 머신에 의해 제어되는 경우에 특히 그러하다. 이 경우에, 상기 기술된 2선식 인터페이스 기술은 상기 머신의 "현재 상태"가 파이프라인에서 그가 제어하고 있는 데이터와 보조를 맞추고 있도록 하는데 사용될 수 있다.
제6도는 토큰 어드레스 필드를 디코딩하기 위해 파이프라인 스테이지에 포함된 회로의 일예의 간단한 블럭선도를 도시하고 있다. 이것은 "상태 머신"의 특성을 갖는 파이프라인 스테이지를 나타내고 있다. 토큰의 각각의 워드는, 토큰에 더 많은 워드가 있는 경우에는 HIGH이고 이것이 토큰의 마지막 워드인 경우에 LOW인 "확장 비트"를 포함하고 있다. 이것이 토큰의 마지막 워드인 경우, 그 다음 유효 데이터 워드는 신규 토큰의 시작이 되고, 따라서 자신의 어드레스는 디코딩되어야만 한다. 이와같이, 특정 워드에 있는 토큰 어드레스를 디코딩할 것인가의 여부에 대한 결정은 이전의 확장 비트(previous extension bit)의 값을 아느냐에 달려 있다.
단지 간단히 하기 위해, (수용 및 유효 신호 및 래치를 가지는) 2선식 인터 페이스는 도시되지 않았으며, 이 회로를 리세팅하는 것에 대한 모든 상세한 것은 생략되어 있다. 이전과 마찬가지로, 8비트 데이터 워드는 제한하는 것이 아니라 단지 설명을 위한 일예로서 가정된다.
이 예시적인 파이프라인 스테이지는 데이터 비트 및 확장 비트를 하나의 파이프라인 스테이지만큼 지연시킨다. 이는 또한 DATA 토큰을 디코딩한다. DATA 토큰의 첫번째 워드가 회로의 출력에 제공되는 시점에서, 신호 "DATA_ADDR"가 생성되어 HIGH로 세팅된다. 데이터비트는 래치 LDIN 및 LDOUT에 의해 지연되며, 이들 각각은 (8-입력, 8-출력 래치에 대응하는) 이 예에서 사용되는 8개의 데이터 비트에 대하여 8번 반복된다. 유사하게, 확장 비트는 확장 비트 래치 LEIN 및 LEOUT에 의해 지연된다.
이 예에서, 래치 LEPREV는 확장 비트의 가장 최근의 상태를 저장하기 위해 제공된다. 확장 비트의 값은 LEIN으로 로딩되며, 그 다음에는 비오버래핑 클럭 위상 신호 PH1의 그 다음 상승 에지에서 LEOUT로 로딩된다. 이와 같이 래치 LEOH는 단지 비오버래핑 2상 클럭의 두번째 반클럭 동안에만 현재의 확장 비트의 값을 포함하고 있게 된다. 그러나, 래치 LEPREV는 이 확장 비트 값을 클럭 신호 PH0, 즉 확장 비트 입력 래치 LEIN를 사용가능하게 하는 동일한 신호의 그 다음 상승 에지에 로딩한다. 이와 같이, 래치 LEPREV의 출력 QEPREV는 이전의 PH0 클럭 위상 동안에 확장 비트의 값을 유지하게 된다.
래치 LDIN의 반전 Q 출력과 비반전된(non-inverted) MD(2)로부터의 데이터 워드 출력의 5 비트는 그 동작이 디지탈 설계 분야에서 공지된 일련의 논리 게이트 NAND1, NAND2 및 NORI에서 이전의 확장 비트값 QEPREV와 조합된다. 표현 "N_MD[m]"은 중간-데이터(mid-data) 워드 MD(7:0)의 비트 m의 논리 역을 나타낸다. 공지된 불 대수(Boolean algebra)를 사용하여, 이 논리 블럭으로부터의 출력 신호 SA는, 단지 이전의 확장 비트가 "0"(QPREV="0")이고 비반전 Q래치(원래의 입력 워드)LDIN의 출력에 있는 데이터 워드가 "000001XX"의 구조, 즉 5개의 상위 비트 MD[7]-MD[3]비트가 모두 "0"이고 비트 MD(2)는 "1"이고 MD[0] 및 MD[1]에 있는 비트는 임의의 값을 가지게 되는 경우에만 HIGH("1")로 된다.
이와 같이, 4개의 가능 데이터 워드("XX"의 4개의 순열이 있음)가 있어, SA를 야기하여, 입력 SA에 접속된 어드레스 신호 래치 LADDR의 출력을 HIGH로 되게 한다. 즉, 이 스테이지는 4개의 가능한 적당한 토큰들 중의 하나가 제공될 때 그리고 이전의 확장 비트가 영(0)이었을 때, 즉 이전의 데이터 워드가 이전의 토큰 워드의 시리즈에서 마지막 워드이었을 때만 활성 신호(DATA_ADDR = "1")을 제공하며, 이는 현재의 토큰 워드가 현재의 토큰에서 첫번째 워드인 것을 의미한다.
래치 LEPREV로부터의 신호 QPREV가 LOW인 경우, 래치 LDIN의 출력에 있는 값은 따라서 신규 토큰의 첫번째 워드가 된다. 게이트 NAND1, NAND2 및 NOR1는 DATA토큰(000001XX)을 디코딩한다. 그러나, 이 어드레스 디코딩 신호 SA는 래치 LADDR에서 지연되어, 신호 DATA_ADDR은 출력 데이터 OUT_DATA 및 OUT_EXTN과 동일한 타이밍을 가진다.
제7도는 본 발명에 따른 상태-종속 파이프라인 스테이지(state-dependent pipeline stage)의 또 다른 간단한 예인데, 이는 이전의 출력 확장 비트OUT_EXTN의 값을 나타내기 위하여 신호 LAST_OUT_EXTN을 생성한다. 현재 또는 마지막 확장 비트 래치들, LEOUT 및 LEPREV 각각으로의 (CK 입력에서) 2개의 사용가능한 신호 중 하나는 게이트 ANDI으로부터 도출되어, 이들 래치가 데이터가 유효하여 수용되는 경우 그들에 대한 신규 값을 단지 로딩하도록 한다 (출력 확인 및 수용 래치 LVOUT 및 LAOUT 각각으로부터의 Q 출력은 HIGH이다). 이러한 방법으로, 이들은 단지 유효 확장 비트만을 유지하고 있으며, 유효하지 않은 데이터와 연관된 의사값(spurious value)으로 로딩되지 않는다. 제7도에 도시된 실시예에서, 2선식 유효/수용 논리 회로는 다운스트림 수용 신호로 구성된 입력 신호와 유효 래치 LVIN및 LVOUT의 반전 출력을 각각 가지는 OR1 및 OR2 게이트를 포함한다. 이는 제4도의 게이트 NAND1/2 및 INV1/2가 상기 래치들이 반전 출력을 가지는 경우 교체될 수 있는 방식을 도시한다.
이것은 "상태-종속" 파이프라인 스테이지의 극히 간단한 일예이지만, 그것은 단지 단일 비트의 상태에 달려 있기 때문에, 일반적으로 상태 정보를 유지하고 있는 모든 래치들은 데이터가 실질적으로 파이프라인 스테이지들 사이에서 전송되는 경우에만 갱신된다는 것은 사실이다. 즉, 데이터가 유효하고 또한 그 다음 스테이지에 의해 수용되는 경우에만 갱신된다. 따라서, 이러한 래치가 적절히 리셋되도록 주의를 기울여야 한다.
이와 같이, 본 발명에 따른 토큰의 생성 및 사용은 파이프라인을 통하여 데이터 전송을 위한 종래의 인코딩 기술에 대해서 여러가지 장점을 제공한다.
첫째, 상기에서 언급한 바와 같이, 토큰은 통상적인 토큰을 효율적으로 나타내기 위하여 가변 길이의 어드레스 필드를 허용한다 (또한 예를 들어 허프만 코딩을 이용할 수 있다).
둘째, 비록 토큰이 주어진 파이프라인 스테이지에 있는 토큰 디코더 회로에 의해 인식되지 않더라도, 토큰의 길이의 일관된 인코딩은 토큰의 끝 (그러므로 다음 토큰의 시작)이 정확하게 처리 (간단한 비조작(non-manipulative) 전송을 포함하여)될 수 있도록 한다.
셋째, 인식되지 않은 토큰의 처리를 위한 (즉, 토큰들을 수정없이 통과시키기 위한) 규칙 및 하드웨어 구조는 하나의 스테이지와 파이프라인에서 가장 가까운 이웃이 아닌 다운스트림 스테이지사이의 통신이 가능하도록 한다. 이것은 또한 파이프라인의 확장성 및 효율적 적응성을 증가시키는데, 그 이유는 기존의 파이프라인 스테이지의 대규모 재설계를 할 필요가 없이 토큰 세트에서 장래 변경을 할 수 있기 때문이다. 본 발명의 토큰은 특히 상기 또는 이하에서 기술되는 2선식 인터페이스와 함께 사용되는 경우 유용하다.
상기 일예로서, 제8(a)도 및 제8(b)도 (이하, 총체적으로 제8도로서 언급함)는 기능이 다음과 같은 파이프라인 스테이지의 블럭도를 나타낸다. 스테이지가 (이 예에서 DATA 토큰으로 알려진) 미리 정해진 토큰을 처리하고 있는 경우, DATA 토큰의 어드레스 필드를 포함하는 첫번째 워드를 제외하여 이 토큰내에서 모든 워드를 복제한다. 반면에, 이 스테이지가 임의의 다른 모든 종류의 토큰을 처리하고 있는 경우에는, 모든 워드를 삭제한다. 출력에 있어서, 전체적인 효과는, 단지 DATA 토큰만이 나타나며 이들 토큰내의 각각의 워드는 2번 반복된다는 것이다.
이 예시된 시스템의 많은 구성 요소는 제4도, 제6도 및 제7도에 도시된 보다 더 간단한 구조로 기술된 것과 동일할 수 있다. 이것은 중요한 장점을 나타낸다. 보다 더 복잡한 파이프라인 스테이지는 여전히 동일한 유연성 및 탄력성의 장점을 가지게 되는데, 이는 동일한 2선식 인터페이스가 거의 개조되지 않고 또는 전혀 개조되지 않고서 사용될 수 있기 때문이다.
제8도에 도시된 데이터 복제 스테이지(data duplicate stage)는 임의의 특정 응용에서 파이프라인 스테이지가 수행할 수 있는 수많은 다른 동작 형태의 단지 하나의 예에 불과하다. 그러나, 이 "복제 스테이지(duplication stage)"는 "병목 (bottle neck)"을 형성할 수 있는 스테이지를 나타내므로, 이 실시예에 따른 파이프라인은 "함께 패킹된다(Pack together).
"병목"은 그것의 동작을 수행하는데 비교적 긴 시간이 걸리거나, 또는 수신하는 것보다 더 많은 데이터를 파이프라인에 생성하는 임의의 스테이지일 수 있다.
또한, 이 예는 본 발명에 따른 2선식 수용/유효 인터페이스가 다른 응용에 매우 용이하게 적응할 수 있다는 것을 나타낸다.
또한, 제8도에 도시된 복제 스테이지는 제6도에 도시된 예에서처럼 그 스테이지의 입력 및 출력에 있는 확장비트의 상태를 각각 래칭하는 2개의 래치 LEIN 및 LEOUT를 갖는다. 제8(a)도가 도시하는 바와 같이, 입력 확장 래치 LEIN은 입력 데이터 래치 LDIN 및 유효 신호 IN_VALID와 동기하여 클럭킹된다(clocked synchronously).
용이하게 참조하기 위하여, 복제 스테이지에 포함된 여러가지 래치들은 그들각각의 출력 신호들과 아래에서 쌍을 이루고 있다.
복제 스테이지에 있어서, 데이터 래치 LDIN으로부터의 출력은 MID_DATA로서 언급되는 중간 데이터를 형성한다. 이 중간 데이터 워드는 중간 수용 신호(제8(a)도에 "MID_ACCEPT"로 표현됨)가 HIGH로 세팅되는 경우에만 데이터 출력 래치 LDOUT로 로딩된다.
수용 래치 LAIN, LAOUT 아래에 있는 제8도에 도시된 회로의 일부분은 데이터를 복제하는데 사용되는 여러가지 내부 제어 신호를 생성하기 위하여 기본 파이프라인 구조에 첨가되는 회로를 도시한다. 이들은 이 회로가 현재 유효 DATA 토큰을 처리하고 있다는 것을 나타내주는 "DATA_TOKEN" 및 데이터의 복제를 제어하는데 사용되는 NOT_DUPLICATE를 포함하고 있다. 이 회로가 DATA 토큰을 처리하는 경우, NOT_DUPLICATE 신호는 HIGH 와 LOW 상태 사이를 토글하여 토큰 내의 각각의 워드는 한번 복제되어진다 (더이상 복제되지 않음). 이 회로가 유효 DATA 토큰을 처리하고 있지 않은 경우에는, NOT_DUPLICATE 신호는 HIGH 상태로 유지된다. 따라서, 이것은 처리되고 있는 토큰 워드는 복제되지 않는다는 것을 의미한다.
제8(a)도가 도시하는 바와 같이, 8-비트 중간 데이터 워드의 상위 6비트와 래치 LI1으로부터의 출력 신호 QI1은 논리 게이트 그룹 NORl, NOR2, NAND18으로의 입력을 형성한다. 게이트 NAND18로부터의 출력 신호는 S1이라고 표시된다. 공지의 불대수(boolean algebra)를 사용하여, 출력 신호 QIl가 "1"이고 MID_DATA 워드가 다음과 같은 구조 "000001XX"를 가지는 경우, 즉 상위 5비트가 모두 "0"이고 비트 MID_DATA[2]가 "1"이고 MID_DATA[1] 및 MID_DATA[0] 위치가 임의의 값을 가지는 경우에만 신호 S1은 "0"이 된다는 것이 도시될 수 있다. 그러므로, 신호 S1은MID_DATA 신호가 미리 결정되어 있는 구조를 가지고, 래치 LIl으로부터의 출력이 "1"인 경우에만 로우인 "토큰 확인 신호(token identification signal)"로서 동작 한다. 래치 LI1 및 자신의 출력 QI1의 성질은 이하에서 보다 더 상세히 설명한다.
래치 L01은 중간 확장 비트("MID_EXTN"로 표현되어 있고 신호 S4라고 함)의 마지막 값을 래칭하는 기능을 수행하며, 출력이 신호 S1을 형성하는 토큰 디코딩 논리 그룹으로의 입력들중 하나인 비트 QI1인, 래치 LI1으로의 클럭 위상 PH0의 그 다음 상승 에지에서 이 값을 로딩한다. 상기에서 설명된 바와 같이, 신호 S1은 신호 Φ11이 "1"인 경우 ( 및 MID_DATA 신호가 미리 결정된 구조를 가치는 경우)에 "0"으로 떨어진다. 그러므로, 이전의 토큰이 종료했음을 나타내는 마지막 확장 비트가 "0"이었을 때마다 신호 S1은 "0"으로 떨어진다. 그러므로, MID_DATA 워드는 신규 토큰에서 첫 번째 데이터 워드가 된다.
NAND 게이트들인 NAND20 및 NAND22와 함께 래치 L02 및 LI2는 신호에 대한 기억장치인 DATA_TOKEN을 형성한다. 통상적인 상태에서, NAND20으로의 입력에서의 신호 QI1과 NAND22로의 입력에서의 신호 S1은 모두 논리 "1"에 있게 된다. 다시 불 대수의 기법에 의해, 이같은 경우에 이들 NAND 게이트는 인버터와 동일한 방식으로 동작한다. 즉 래치 L12의 출력으로부터의 신호 QI2는 NAND20에서 반전되고 그 다음에 이 신호는 다시 NAND22에서 반전되어 신호 S2를 형성한다. 이같은 경우, 이 경로에서 2번의 논리 반전이 있기 때문에, 신호 52는 QI2와 동일한 값을 갖게 된다.
또한 래치 L02의 출력에 있는 신호 DATA_TOKEN은 래치 L12로의 입력을 형성한다는 것을 알 수 있다. 그 결과, QI1 및 S1 모두가 HIGH인 상황이 계속되는 한, 신호 DATA_TOKEN은 자신의 상태("0" 또는 "1")를 계속 유지하게 된다. 이는 클럭 신호 PH0 및 PH1이 래치들(L12 및 L02들)을 클럭킹하고 있는 경우에도 그러하다.
DATA_TOKEN은 신호 QI1 및 S1중의 하나 또는 둘다가 "0"인 경우에만 변경될 수 있다.
이전에 설명된 바와 같이, 신호 01은 이전의 확장 비트가 "0"이었던 경우에만 "0"으로 된다. 이와같이, MID_DATA 값이 토큰의 첫번째 워드일 때는 언제나 "0"으로 된다 (그리고, 이와같이 토큰에 대한 어드레스를 포함하고 있다). 이 경우에 있어서, 신호 S1는 "0" 또는 "1"일 수 있다. 이전에 설명한 바와 같이, MID_DATA 워드가 이 예에서 "DATA" 토큰을 나타내는 소정의 구조를 가지고 있는 경우, 신호 S1는 "0"이 된다. MID_DATA 워드가 임의의 다른 구조를 가지고 있는 경우에는 (토큰이 DATA 토큰이 아닌 다른 어떤 토큰임을 나타냄), S1은 "1"이 된다.
QI1이 "0"이고 S1이 "1"인 경우에, 이것은 DATA_TOKEN이 아닌 다른 어떤 토큰이 있음을 나타낸다. 디지탈 전자공학 분야에서 공지된 바와 같이, NAND20의 출력은 "1"이 된다. NAND 게이트 NAND22는 이것을 (이전에 설명된 바와 같이) 반전시키게 되며 신호 S2는 따라서 "0"으로 된다. 그 결과, 이 "0"값은 그 다음 PH1클럭 위상의 시작 위치에서 래치 LO2로 로딩되고, DATA_TOKEN 신호는 "0"으로 되며, 이는 회로가 DATA 토큰을 처리하고 있지 않다는 것을 나타낸다.
QI1이 "0"이고 S0가 "0"인 경우에, 따라서 DATA 토큰을 나타내는 경우, (NAND20의 출력으로부터 NAND22로의 다른 입력에 관계없이) 신호 S2는 "1"이 된다.
그 결과, 이 "1"값은 그 다음의 PH1 클럭 위상의 시작에 있는 래치 L02로 로딩되며 DATA_TOKEN 신호는 "1"로 되는데, 이는 회로가 DATA 토큰을 처리하고 있다는 것을 나타내준다.
NOT_DUPLICATE 신호 (출력 신호 Q03)는 클럭 PH0의 그 다음 상승 에지에서 래치 LI3로 유사하게 로딩된다. 래치 LI3로부터의 출력 신호 QI3는 게이트 NAND24에서 출력 신호 QI2와 조합되어 신호 S3를 형성한다. 이전에서와 같이, 불 대수는 신호 QI2과 QI3 모두가 "1"값을 가지는 경우에만 신호 S3가 "0"으로 되는 것을 보여주는데 사용될 수 있다. 신호 QI2가 "G"으로 되는 경우, 즉 DATA_TOKEN 신호가 "0"으로 되는 경우, 신호 S3는 "1"로 된다.
바꿔 말하면, 유효 DATA_TOKEN이 없는 경우 (QI2=0) 또는 데이터 워드가 복제된 것이 아닌 경우 (QI3=0)에는, 신호 S3는 하이(high)로 된다.
이제부터는 DATA TOKEN 신호가 하나 이상의 클럭 신호 동안 HIGH에 머물러 있다고 가정하자. NOT_DUPLICATE 신호(73)는 래치 LI3로 피드백(feedback)되어 게이트 NAND24에 의해 반전되기 때문에 (자신의 다른 입력 QI2가 HIGH에 유지되기 때문에), 출력 신호 Q03는 "0" 과 "1"사이를 토글한다(toggle). 그러나, 유효 DATA 토큰이 없는 경우, 신호 QI2는 "0"으로 되며, 신호 S3 및 출력 Q03는 DATA_TOKEN 신호가 다시 한번 "1"로 될 때까지 HIGH로 있어야만 한다.
출력 Q03 (NOT_DUPLICATE 신호)는 또한 피드백되어, 신호 QA1 및 Q03가 모두값 "1"을 가지는 경우에만 출력으로서 "1"을 갖는 일련의 논리 게이트들 (함께 AND게이트를 형성하는 NAND16 및 INV16)에서 수용 래치 LAIN로부터의 출력 QA1과 조합 된다. 제8(a)도에 도시된 바와 같이, AND 게이트 (게이트 INV16가 후속하는 게이트 NAND16)로부터의 출력은 또한 상기한 바와 같이 2선식 인터페이스 구조에서 사용되는 수용 신호 IN_ACCEPT를 형성한다.
수용 신호 IN_ACCEPT는 또한 래치 LDIN, LEIN 및 LVIN으로의 인에이블링 신호(enabling signal)로서 사용된다. 그 결과, NOT_DUPLICATE 신호가 로우인 경우, 수용 신호 IN_ACCEPT도 또한 로우로 되며, 이들 세개의 래치 모두 사용할 수 없게 되어(disabled) 자신들의 출력에 저장된 값들을 유지하게 된다. 이 스테이지는 NOT_DUPLICATE 신호가 HIGH로 될 때까지 신규 데이터를 수용하지 않는다. 이것은 수용 래치 LAIN으로부터의 출력을 하이로 하기 위해 상기한 바와 같은 요구에 부가된 것이다.
유효 DATA_TOKEN (DATA_TOKEN 신호 Q02가 "1")이 있는 한, 신호 Q03는 HIGH와 LOW 상태 사이를 토글하게 되며, 따라서 입력 래치들은 사용가능하게 되어(enabled), 기껏해야 두 클럭 위상 PH0, PH1의 전 사이클에 대해 한 사이클 건너 한 사이클 동안 (every other complete cycle)에만 데이터를 수용할 수 있게 된다.
"HIGH" OUT_ACCEPT 신호로 표현된 바와 같이, 다음 스테이지가 데이터를 수용할 준비가 되어 있어야만 하는 부가 조건이 여전히 만족되어야만 한다. 그러므로, 출력 래치 LDOUT는 동일한 데이터 워드를 적어도 2개의 전 클럭 사이클동안 출력 버스 OUT_DATA로 위치시킨다. OUT_VALID 신호는 유효 DATA_TOKEN (Q02 HIGH) 및 유효 신호 QVOUT 모두가 HIGH인 경우에만 "1"로 된다.
MID_DATA에 대응하는 확장 비트인 신호 QEIN은 일련의 논리 게이트(INV10 및 NAND10)에서 신호 S3와 조합되어 신호 S4를 형성한다. DATA 토큰이 제시되는 동안에, 각각의 데이터 워드 MID_DATA는 그것을 출력 래치 LDOUT로 2번씩 로딩함으로써 반복된다. 이것중 첫 번째 동안에, S4는 NAND10의 동작에 의해 "1"에 있어야만 하게 된다. 신호 S4는 래치 LEOUT로 로딩되어 MID_DATA가 LDOUT에 로딩되어 OUT_DATA[7:0]를 형성하는 것과 동시에 OUTEXTN을 형성하게 된다.
이와같이, 처음으로 특정 MID_DATA가 LEOUT로 로딩되는 경우, 연관된 OUTEXTN은 하이로 되는 반면, 두 번째 경우에는, OUTEXTN이 신호 QEIN과 동일하게 된다. 이제 QEIN이 로우라고 알려진 토큰의 제일 마지막 워드 동안의 상황을 고려하자. 처음으로 MID_DATA가 LDOUT로 로딩되는 동안, OUTEXTN은 "1"이 되고, 두 번째 동안에 OUTEXTN은 "0"이 되어, 토큰의 진짜 끝임을 나타낸다.
유효 래치 LVIN으로부터의 출력 신호 QVIN는 유사한 게이트 조합 (INV12 및 NAND12)에서 신호 QI3와 조합되어 신호 S5를 형성한다. 공치의 불 대수를 사용하여, 유효 신호 QVIN이 HIGH인 경우, 또는 신호 QI3가 로우인 경우 (데이터가 복제된 것임을 나타냄)에 신호 S5는 HIGH로 된다는 것을 보여질 수 있다. 신호 S5는 MID_DATA가 LDOUT로 로딩되고 중간 확장 비트 (신호 S4)가 LEOUT로 로딩되는 것과 동시에 유효 출력 래치 LVOUT로 로딩된다. 신호 S5는 또한 논리 게이트 NAND30 및 INV30에서 신호 Q02와 결합되어 출력 유효 신호 OUT_VALID를 형성한다. 상기에서 언급된 바와 같이, OUT_VALID는 유효 토큰이 있는 경우 및 유효 신호 QVOUT가 하이인 경우에 만 HIGH이다.
본 발명에 있어서, MID_ACCEPT 신호는 공지된 AND 기능을 수행하는 일련의 논리 게이트(NAND26 및 INV26)에서 신호 55와 결합되어 래치 L01, LO2 및 LO3에 2개의 인에이블링 신호중 하나로서 사용되는 신호 S6을 형성한다. 신호 S6은 MID_ACCEPT 신호가 HIGH인 경우 및 유효 신호 QVIN이 하이로 되는 경우 또는 토큰이 복제된 경우 (QI3가 "0")에 "1"로 상승한다. 그러므로, 신호 MID_ACCEPT가 HIGH인 경우, 래치 L01-L03는 유효 입력 데이터가 스테이지의 입력에 로딩되는 경우마다 클럭 신호 PH1이 하이로 되는 경우, 또는 래칭된(latched) 데이터가 복제된 것인 경우 사용 가능하게 된다.
상기 기술된 바와 같이, 제8(a)도 및 제8(b)도에 도시된 스테이지는 이전의 실시예에서와 칼이 입력측에 있는 수용 래치 LAIN으로부터의 출력 신호가 토글링되는 복제 신호와 조합하여 새로운 워드가 수용되기 전에 데이터 워드가 두번 출력되도록 하는 것을 제외하고, 유효 및 수용 신호의 제어하에서 스테이지들 사이에서 데이터를 수신 및 전송하게 된다는 것을 알 수 있다.
NAND16 및 INV16와 같은 여러가치 논리 게이트들은, 물론 동등한 논리 회로 (이 경우 단일 AND 게이트)로 교체될 수 있다. 예를 들어, 래치 LEIN 및 LVIN이 반전 출력을 가지는 경우, 인버터 INV10 및 INV12는 필요하지 않게 된다. 오히려, 게이트 NAND10 및 NAND12으로의 해당 입력은 이들 래치의 반전 출력으로 직접적으로 결합될 수 있다. 적당한 논리 연산이 수행되는 경우, 스테이지는 동일한 방식으로 동작한다. 데이터 워드 및 확장 비트는 여전히 복제된다.
예시된 스테이지가 수행하는 복제 기능은 토큰의 첫번째 워드가 워드의 세번째 위치에서 "1",을 가지고 상위 5비트에 "0"을 가지지 않는한 수행되지 않는다는 것에 주의해야 한다. (물론, 요구되는 패턴은 용이하게 변경되어 도시된 NOR1, NOR2, NND18과 다른 논리 게이트 및 상호접속을 선택함으로써 세팅될 수 있다) 또한, 제8도에 도시된 바와 같이, OUT_VALID 신호는 첫 번째 데이터 워드가 상기 기술된 구조를 가지지 않는 한 전체 토큰 (entire token) 동안 로우로 있어야만한다.
출력 단자들 (OUTDATA, OUTEXTN 및 OUTVALID)에 접속된 장치가 이들 토큰 워드를 유효 데이터로 인식하지 않기 때문에, 복제 공정을 야기하는 것을 제외한 모든 토큰이 토큰 스트림으로부터 삭제되는 효과를 가진다.
이전과 마찬가지로, 그 스테이지에 있는 유효 래치 LVIN, LVOUT 모두는 단일 컨덕터 NOT_RESETO와 하류(downstream) 래치 LVOT상의 단일 리세팅 입력 R에 의해 리셋될 수 있으며, 이 리셋 신호는 후방으로 전파되어 상류(upstream) 유효 래치를 그 다음 클럭 사이클에서 로우가 되도록 한다.
제8도에 도시된 예에서, DATA 토큰에 포함된 데이터의 복제는 입력에 도착하는 것 보다 더 맡은 데이터가 파이프라인 스테이지를 떠나가도록 회로가 ACCEPT 및 VALID 신호를 조정할 수 있는 방식의 예로서 역할을 한다는 것에 주목하여야 한다.
마찬가지로, 제8도의 예는 회로가 스트림으로부터 데이터를 제거하기 위하여 VALID 신호를 처리하는 방식의 예시와 같이 모든 비-DATA 토큰을 제거한다. 그러나, 대부분의 통상적인 응용에 있어서, 파이프라인 스테이지는 단지 그가 인식하지 않는 임의의 토큰을 수정없이 통과시켜, 파이프라인 보다 더 아래에 있는 다른 스테이지도 요구되는 경우 그들에 작용할 수 있다.
제9(a)도 및 제9(b)도는 제8(a)도 및 제8(b)도에 도시된 데이터 복제 회로에 대한 타이밍도의 한 예를 도시한다. 이전과 같이, 타이밍도는 2상 클럭 신호 사이의 관계, 여러가지 내부 및 외부 제어 신호, 및 데이터가 스테이지의 입력측과 출력측 사이에서 클럭킹되어 복제되는 방식을 도시한다.
특히 제10도를 참조하면, 본 발명의 일면에 따른 리컨피그 가능한 프로세스 스테이지(reconfigurable process stage)가 도시되어 있다.
입력 래치(34)는 제1버스(31)를 통해 입력을 수신한다. 입력 래치(34)로부터의 제1출력은 라인(32)을 거쳐 토큰 디코드 서브시스템(33)으로 전달된다. 입력 래치(34)로부터의 제2출력은 라인(35)을 거쳐 프로세싱 유닛(Processing unit)(36)으로 제1입력으로서 전달된다. 토큰 디코드 서브시스템(33)으로부터의 제1출력은 라인(37)을 거쳐 프로세싱 유닛(36)으로 제2입력으로서 전달된다. 토큰 디코드 서브시스템(33)으로부터의 제2출력은 라인(40)을 거쳐 액션 식별 유닛 (action identification unit)(39)으로 전달된다. 또한, 액션 식별 유닛(39)은 라인(46)을 거쳐 레지스터(43,44)로부터 입력을 수신한다. 레지스터(43,44)는 전체로서의 머신의 상태를 유지한다. 이 상태는 이전에 수신된 토큰의 이력(history)에 의해 결정된다. 액션 식별 유닛(39)으로부터의 출력은 라인(38)을 거쳐 제3입력으로서 프로세싱 유닛(36)으로 전달된다. 프로세싱 유닛(36)으로부터의 출력은 출력 래치(41)로 전달된다. 출력 래치(41)로부터의 출력은 제2버스(42)를 거쳐 전달된다.
이제 제11도를 참조하면, 시작 코드 검출기(start code detector: SCD)(51)는 2선식 인터페이스(52)를 통하여 입력을 수신한다. 이 입력은 DATA 토큰의 형태일 수도 있고 또는 데이터 스트림에 있는 데이터 비트일 수도 있다. 시작 코드 검출기(51)로부터의 제1출력은 라인(53)을 거쳐 제1논리 선입선출(first-in first-out) 버퍼(FIFO)(54)로 전달된다. 제1FIFO(54)로부터의 출력은 논리적으로 라인(55)을 통하여 허프만 디코더(Huffman decoder)(56)의 제1입력으로서 전달된다. 시작 코드 검출기(51)로부터의 제2출력은 라인(57)을 통하여 DRAM 인터페이스(58)에 제1입력으로서 전달된다. 또한, DRAM 인터페이스(58)는 라인(60)을 통하여 버퍼 관리기(buffer manager)(59)로부터 입력을 수신한다. 신호들은 라인(61)을 통하여 DRAM 인터페이스(58)에 의해 외부 DRAM (도시되지 않음)으로부터 수신되고 전송된다. DRAM 인터페이스(58)로부터의 제1출력은 라인(62)을 거쳐 제1물리적(physical) 입력으로서 허프만 디코더(56)으로 전달된다.
허프만 디코더(56)로부터의 출력은 라인(63)을 거쳐 인덱스 투 데이터 유닛(Index to Data Unit)(ITOD)(64)에 입력으로서 전달된다. 허프만 디코더(56) 및 ITOD(64)는 단일 논리 유닛으로서 함께 동작한다. ITOD(64)로부터의 출력은 라인(65)을 거쳐 산술 논리 유닛(arithmetic logic unit. ALU)(66)으로 전달된다.
ALU(66)으로부터의 제1출력은 라인(67)을 거쳐 판독 전용 메모리 상태 머신 (read-only memory state machine)(68)으로 전달된다. ROM 상태 머신(68)으로부터의 출력은 라인(69)을 거쳐 허프만 디코더(56)에 제2물리적 입력으로서 전달된다.
ALU(66)으로부터의 제2출력은 라인(70)을 통하여 토큰 포맷터(token formatter: T/F)(71)로 전달된다.
본 발명의 T/F(71)로부터의 제1출력은 라인(72)을 거쳐 제2FIFO(73)로 전달된다. 제2FIFO(73)로부터의 출력은 라인(74)을 통하여 역모델러(inversemodeller)(75)에 제1입력으로서 전달된다. 역모델러(75)로부터의 출력은 라인(78)을 통하여 역양자화기(inverse quantizer)(79)에 입력으로서 전달된다. 역양자화기(79)로부터의 출력은 라인(80)을 거쳐 역지그재그(inverse zig-zag:IZZ)(81)에 입력으로서 전달된다. IZZ(81)로부터의 출력은 라인(82)을 거쳐 역이산 코사인 변환(IDCT)(83)으로의 입력으로서 전달된다. IDCT(83)로부저의 출력은 라인(84)을 거쳐 시간 디코더(temporal decoder) (도시되지 않음)로 전달된다.
이제 제12도를 참조하면, 본 발명에 따른 시간 디코더가 도시되어 있다. 포크(fork)(91)는 라인(92)을 통하여 IDCT(83)(제11도에 도시됨)로부터의 출력을 입력으로서 수신한다. 포크(91)로부터의 제1출력으로서 제어 토큰, 예를들어 움직임 벡터 등은 라인(93)을 거쳐 어드레스 발생기(94)로 전달된다. 또한, 데이터 토큰은 카운팅의 목적상 어드레스 발생기(94)로 전달된다. 포크(91)로부터의 제2출력으로서, 데이터는 라인(95)을 거쳐 FIFO(96)으로 전달된다 그 다음에, FIFO(96)으로부터의 출력은 라인(97)을 거쳐 합산기(98)에 제1입력으로서 전달된다. 어드레스 발생기(94)로부터의 출력은 라인(99)을 거쳐 DRAM 인터페이스(100)에 제1입력으로서 전달된다. 신호들은 라인(101)을 거쳐 DRAM 인터페이스(100)에 의하여 외부 DRAM (도시되지 않음)으로 전송되고, 외부 DRAM으로부터 수신된다.
DRAM 인터페이스(100)으로부터의 제1출력은 라인(102)을 통하여 예측 필터 (prediction filter)(103)로 전달된다. 합산기 (98)로부터의 제1출력은 라인(105)을 거쳐 출력 선택기(106)로 전달된다. DRAM 인터페이스(100)로부터의 제2출력은 라인(108)을 거쳐 출력 선택기 (106)에 입력으로서 전달된다. 출력 선택기(106)로부터의 출력은 라인(109)을 거쳐 비디오 포맷터 (제12도에 도시되지 않음)로 전달된다.
이제 제13도를 참조하면, 포크(111)는 출력 선택기(106) (제12도에 도시됨)로부터 라인(112)을 거쳐 입력을 수신한다. 포크(111)로부터의 제1출력으로서, 제어 토큰은 라인(113)을 통하여 어드레스 발생기(114)로 전달된다. 어드레스 발생기(114)로부터의 출력은 라인(115)을 통하여 DRAM 인터페이스(116)에 제1입력으로서 전달된다. 포크(111)로부터의 제2출력으로서, 데이터는 라인(117)을 통하여 DRAM 인터페이스(116)로 제2입력으로서 전달된다. 신호들은 라인(118)을 통하여 DRAM 인터페이스(116)에 의하여 외부 DRAM (도시되지 않음)으로 전송되고, 외부 DRAM으로부터 수신된다. DRAM 인터페이스(116)으로부터의 출력은 라인(119)를 거쳐 디스플레이 파이프(display pipe)(120)로 전달된다.
상기 기술된 설명으로부터 각각의 라인은 필요한 경우, 복수개의 라인으로 구성될 수 있다는 것은 분명하다.
이제 제14(a)도를 참조하면, MPEG 규격에서 화상(Picture)(131)은 하나 이상의 슬라이스(sl ices)(132)로서 인코딩된다. 각각의 슬라이스(132)는 또한 복수개의 블럭(blocks)(133)으로 구성되며 행별로, 또한 각각의 행에서는 좌에서 우로 인코딩된다. 도시된 바와 같이, 각각의 슬라이스(132)는 블럭(133)의 한 라인 B 또는 D 또는 블럭(133)의 다중 라인 C보다는 적은 블럭(133)의 거의 한 전 라인(full line)에 걸쳐 있을 수 있다.
제14(b)도를 참조하면, JPEG 및 H.261 규격에서, 공통 중간 포맷(common intermediate format: CIF)가 사용되는데, 여기서 화상(141)은 6개의 열로 인코딩 되며, 각각의 열은 2개 그룹의 블럭(group of block: GOB)(142)을 포함하고 있다.
각각의 GOB(142)는 3 행 또는 6행의 일정하지 않은 수의 블럭(143)으로 구성된다.
각각의 GOB(142)는 화살표(144)로 나타낸 지그재그 방향으로 인코딩된다.
GOB(142)는 행별로, 또한 각각의 행에서는 좌에서 우로 처리된다.
이제 제14(c)도를 참조하면, MPEG 및 CIF 모두에서 인코딩의 출력은 데이터 스트림(151)의 형태임을 알 수 있다. 디코더는 이 데이터 스트림(151)을 수신한다.
그 다음에, 디코더는 그것을 인코딩하는데 사용된 포맷에 따라서 그 영상(image)을 재구성할 수 있다. 디코더가 각각의 규격에 대해 시작점과 끝점을 인식할 수 있도록 하기 위하여, 데이터 스트림(151)은 33개의 블럭(152)의 길이로 분할된다.
제15도를 참조하면, 본 발명의 허프만 디코더(56) (제11도에 도시됨)로부터 테이블 선택에 대해 가능한 값들의 범위를 나타내는 벤(Venn) 다이어그램이 도시되어 있다. MPEG 디코더 및 H.261 디코더에 대해 가능한 값들은 오버랩되어, 단일 테이블 선택(table select)이 소정의 MPEG 및 소정의 H.261 포맷을 디코딩하게 된다는 것을 나타내게 된다. 마찬가지로, MPEG 디코더 및 JPEG 디코더에 대하여 가능한 값들도 로버랩되어, 단일 테이블 선택이 소정의 MPEG 및 소정의 JPEG 포맷 모두를 디코딩하게 된다는 것을 나타낸다. 게다가, H.261 값들 및 JPEG 값들은 오버랩되으며, 이는 두 포맷 모두를 디코딩하게 하는 어떤 단일 테이블 선택도 존재하지 않는다는 것을 나타낸다.
특히, 제16도를 참조하면 본 발명의 하나의 실시예에 따른 가변 길이 화상 데이터(variable length picture data)를 개략적으로 나타낸 것을 도시한다. 처리되는 제1화상(161)은 제1PICTURE_START 토큰(162), 일정한 길이를 갖지 않는 제1화상 정보(163) 및 제1PICTURE_END 토큰(164)을 포함한다. 처리되는 제2화상(165)은 제2PICTURE_START 토큰(166), 일정한 길이를 갖지 않는 제2화상 정보(167) 및 제2PICTURE_END 토큰(168)을 포함한다. PICTURE_START 토큰(162) 및 (166)은 프로세서에 화상(161) 및 (165)의 시작을 나타낸다. 마찬가지로, PICTURE_END 토큰(164) 및 (168)은 프로세서에 화상(161) 및 (165)의 끝을 나타내 준다. 이렇게 함으로써 프로세서가 가변 길이의 화상 정보(163) 및 (167)을 처리 할 수 있도록 해준다.
제17도를 참조하면, 분할기(split)(171)는 라인(172)을 통하여 입력을 수신한다. 분할기(171)로부터의 제1출력은 라인(173)을 통하여 어드레스 발생기(174)로 전달된다. 어드레스 발생기(174)에 의해 발생된 어드레스는 라인(175)을 통하여 DRAM 인터페이스(176)로 전달된다. 신호들은 라인(177)을 거쳐 DRAM 인터페이스(176)에 의해 외부 DRAM(도시되지 않음)로 전송되고, 또한 외부 DRAM으로부터 수신 된다. DRAM 인터페이스(176)로부터의 제1출력은 라인(178)을 통하여 예측 필터(179)로 전달된다. 예측 필터(179)로부터의 출력은 라인(180)을 통하여 합산기(181)에 제1입력으로서 전달된다. 분할기(171)로부터의 제2출력은 선입선출(FIFO)(183)에 입력으로서 라인(182)을 거쳐 전달된다. FIFO(183)으로부터의 출력은 라인(184)을 거쳐 합산기(181)에 제2입력으로서 전달된다. 합산기(181)로부터의 출력은 라인(185)을 거쳐 기록 신호 발생기(write signal generator)(186)로 전달된다. 기록 신호 발생기(186)로부터의 제1출력은 라인(187)을 거쳐 DRAM 인터 페이스(176)로 전달된다. 기록 신호 발생기(186)로부터의 제2출력은 라인(188)을 거쳐 판독 신호 발생기(189)에 제1입력으로서 전달된다. DRAM 인터페이스(176)로 부터의 제2출력은 라인(190)을 거쳐 판독 신호 발생기(189)에 제2입력으로서 전달된다. 판독 신호 발생기(189)로부터의 출력은 라인(191)을 거쳐 비디오 포맷터(제17도에 도시되지 않음)로 전달된다.
이제 제18도를 참조하면, 예측 필터링 프로세스(prediction filtering process)가 도시되어 있다. 전방 화상(forward picture)(201)은 라인(202)을 거쳐 합산기(203)에 제1입력으로서 전달된다. 후방 화상(backward picture)(204)은 라인(205)을 거쳐 합산기(203)에 제2입력으로서 전달된다. 합산기(203)로부터의 출력은 라인(206)을 거쳐 전달된다.
제19도를 참조하면, 슬라이스(211)는 하나 이상의 매크로블럭(macroblocks)(212)으로 구성된다. 각각의 매크로블럭(212)은 4개의 휘도 블럭(213)과 2개의 색도 블럭(214)으로 구성되어 있으며 원래의 16 x 16 블럭의 픽셀에 대한 정보를 포함하고 있다. 4개의 휘도 블럭(213)과 2개의 색도 블럭(214)은 크기가 8 x 8 픽셀이다. 4개의 휘도 블럭(213)은 원래의 16 x 16 픽셀 블럭으로부터 휘도(Y) 정보의 1 픽셀 대 1 픽셀 맵핑(mapping)을 포함하고 있다. 하나의 색도 블럭(214)은 청색 컬러 신호(Cu/b)의 색도 레벨의 표현을 포함하고 있으며, 다른 색도 블럭(214)은 적색 컬러 신호(Cv/r)의 색도 레벨의 표현을 포함한다. 각각의 색도 레벨은 각각의 8 x 8 색도 블럭(214)이 전체의 원래 16 x 16 픽셀 블럭에 대한 자신의 컬러 신호의 색도 레벨을 포함하도록 서브샘플링된다(subsample).
이제 제20도를 참조하면, 시작 코드 검출기의 구조 및 기능은 분명해진다.
값 레지스터(value register)(221)는 라인(222)을 통하여 영상 데이터를 수신한다.
라인(222)은 8 비트 폭을 가지며 한번에 8 비트의 병렬 전송이 가능하다. 값 레지스터(221)로부터의 출력은 라인(223)을 통하여 디코드 레지스터(224)로 직렬로 전달된다. 디코드 레지스터(224)로부터의 제1출력은 라인(226)을 거쳐 검출기(225)로 전달된다. 라인(226)은 24비트 폭을 가지며 한번에 24비트의 병렬 전송이 가능하다. 검출기(225)는 23개의 "0"값에 이어서 하나의 "1"값으로 된 규격에 독립적인 시작 코드에 해당하는 영상의 유무를 검출한다. 8비트 데이터 값 영상은 유효 시작 코드 영상에 뒤따른다. 시작 코드 영상(start code image)의 존재를 검출하게 되면, 검출기(225)는 라인(227)을 통하여 값 디코더(228)에 시작 영상을 전송한다.
디코더 레지스터(224)로부터의 제2출력은 라인(229)을 통하여 값 디코드 쉬프트 레지스터(value decode shift register)(230)로 전달된다. 값 디코드 쉬프트레지스터(230)는 15비트 길이의 데이터 값 영상을 유지할 수 있다. 시작 코드 영상에 뒤따르는 8비트 데이터 값은 영역(231)으로 표시된 바와 같이, 값 디코드 쉬프트 레지스터(230)의 우측으로 쉬프팅된다. 이하에서 논의되는 바와 같이, 이 프로세스는 시작 코드 영상의 오버래핑을 제거한다. 값 디코드 쉬프트 레지스터(230)로부터의 제1출력은 라인(232)을 거쳐 값 디코더(228)로 전달된다. 라인(232)은 15비트 폭을 가지며 한번에 15비트의 병렬 전송을 가능하게 한다. 값 디코더(228)는 제1참조 테이블 (도시되지 않음)을 사용하여 값 영상을 디코딩한다.
값 디코드 쉬프트 레지스터(230)로부터의 제2출력은 라인(235)을 거쳐 인덱스-토큰 변환기(234)에 플래그를 전달하는 값 디코더(228)에 전달된다. 값 디코더(228)는 또한 라인(236)을 통하여 인덱스-토큰 변환기(234)로 정보를 전달한다. 정보는 데이터 값 영상일 수도 있고 또는 제1참조 테이블로부터 얻은 시작 코드 인덱스 영상일 수도 있다. 플래그는 어떤 형태의 정보가 전달되는지를 나타낸다. 라인(236)은 15비트 폭을 가지며 한번에 15비트의 병렬 전송을 가능하게 한다. 본 발명에 있어서, 라인폭으로 15비트가 선택되고 있지만, 다른 길이의 비트도 또한 사용될 수 있다는 것을 알 수 있을 것이다. 인덱스-토큰 변환기(234)는 사용자 매뉴얼의 테이블 12-3에 주어진 것과 유사한 제2참조 테이블 (도시되지 않음)을 사용하여 정보를 토큰 영상으로 변환한다. 그 다음에, 인덱스-토큰 변환기(234)에 의해 발생된 토큰 영상은 라인(237)을 통하여 출력된다. 라인(237)은 15 비트 폭을 가지며 한번에 15비트의 병렬 전송을 가능하게 한다.
제21도를 참조하면, 개별 비트(242)로 구성된 데이터 스트림(241)은 시작 코드 검출기 (제21도에 도시되지 않음)로 입력된다. 제1시작 코드 영상(243)은 시작 코드 검출기에 의해 검출된다. 그 다음에, 시작 코드 검출기는 제1데이터 값 영 상(244)을 수신한다. 제1데이터 값 영상(244)을 처리하기 이전에, 시작 코드 검출기는 제1시작 코드 영상(245)을 검출할 수 있는데, 이는 길이(246)에서 제1데이터 값 영상(244)과 오버래핑한다. 이와 같은 경우, 시작 코드 검출기는 제1데이터 값 영상(244)을 처리하지 않고 그 대신에 제2데이터 값 영상(247)을 수신하여 처리한다.
이제 제22도를 참조하면, 플래그 발생기(flag generator)(251)는 라인(252)을거쳐 제1입력으로서 데이터를 수신한다. 라인(252)은 15비트 폭을 가지며 한번에 15 비트의 병렬 전송을 가능하게 한다. 플래그 발생기(251)는 또한 라인(253)을 거쳐 제2입력으로서 플래그를 수신하고, 제1 2선식 인터페이스(254)를 통하여 입력 유효 영상을 수신한다. 플래그 발생기(251)로부터의 제1출력은 라인(255)을 거쳐 입력 유효 레지스터 (도시되지 않음)로 전달된다. 플래그 발생기(251)로부터의 제2출력은 라인(256)을 거쳐 디코드 인덱스부(257)로 전달된다. 디코드 인덱스부(257)는 4개의 출력을 발생한다. 화상 시작 영상(picture start image)은 라인(258)을 통하여 전달되며, 화상 번호(picture number) 영상은 라인(259)을 거쳐 전달되고, 삽입(insert) 영상은 라인(260)을 거쳐 전달되며, 교체(replace) 영상은 라인(261)을 거쳐 전달된다. 플래그 발생기(251)로부터의 데이터는 라인(262a)을 거쳐 전달된다. 헤더 발생기(263)는 참조 테이블을 사용하여 교체 영상을 발생하여 이를 라인(262b)을 통하여 전달한다. 잉여 워드 발생기(264)는 MPU를 사용하여 삽입 영상을 발생하여 이를 라인(262c)을 통하여 전달한다. 라인(262a) 및 라인 (262b)는 결합하여 라인(262)을 형성하여 출력 래치(265)로의 제1입력이 된다.
출력 래치(265)는 라인(266)을 거쳐 데이터를 전달한다. 라인(266)은 15비트 폭을 가지며 한번에 15비트의 병렬 전송을 가능케한다.
입력 유효 레지스터 (도시되지 않음)는 라인(268)을 거쳐 제1OR 게이트 (267)에 제1입력으로서 데이터를 전달된다. 삽입 영상은 라인(269)을 거쳐 제1OR 게이트(267)에 제2입력으로서 전달된다. 제1OR 게이트(267)로부터의 출력은 라인(271)을 거쳐 제1ANB 게이트(270)에 제1입력으로서 전달된다. 제거 영상 (remove image)의 논리 부정은 라인(272)을 통하여 제1AND 게이트(270)에 제2입력으로서 전달되고, 라인(273)을 거쳐 출력 래치(265)에 제2입력으로서 전달된다.
출력 래치(265)는 출력 유효 영상을 제2 2선식 인터페이스(274)를 거쳐 전달한다.
출력 수용 영상은 제2 2선식 인터페이스(274)를 통하여 출력 수용 래치(275)에 의해 수신된다. 출력 수용 래치(275)로부터의 출력은 라인(276)을 거쳐 출력 수용 레지스터 (도시되지 않음)로 전달된다.
출력 수용 레지스터 (도시되지 않음)는 라인(278)을 통하여 제2OR 게이트(277)에 제1입력으로서 영상을 전달한다. 입력 유효 레지스터로부터의 출력의 논리 부정은 라인(279)을 통하여 제2OR 게이트(277)에 제2입력으로서 전달된다.
제거 영상은 라인(280)을 통하여 제2OR 게이트(277)에 제3 입력으로서 전달된다.
제2OR 게이트(277)로부터의 출력은 라인(282)을 통하여 제2AND 게이트(281)에 제1 입력으로서 전달된다. 삽입 영상의 논리 부정은 라인(283)을 통하여 제2AND 게이트(281)에 제2입력으로서 전달된다. 제2AND 게이트로부터의 출력은 라인(284)을 거쳐 입력 수용 래치(285)로 전달된다. 입력 수용 래치(285)로부터의 출력은 제1 2선식 인터페이스(254)를 통하여 전달된다.
소정의 머신 독립 제어 토큰(machine independent control token)에서 규격신호의 존재 유무 관계를 도시하는 테이블 600에 기재된 바와같이, 시작 코드 검출기(51)에 의한 영상의 검출은 머신 독립 제어 토큰의 시퀀스를 발생한다. "수신된 영상" 열에 나열된 각각의 영상은 '발생된 토큰" 열의 그룹에 나열된 모든 머신 독립 제어 토큰들의 발생을 시작한다. 그러므로, 테이블 600의 라인 1에 도시된 바와 같이, "시퀀스 시작" 영상이 H.261 프로세싱 동안에 수신되거나, 또는 "화상 시작" 영상이 MPEG 프로세싱 동안에 수신되는 경우에는, 4 개의 제어 토큰으로 이루어진 전체 그룹이 발생되며, 각각은 자신의 해당하는 데이터 값 또는 값들이 뒤따른다. 또한, 테이블 600의 라인 2에 기재된 바와 같이, 4개의 제어 토큰의 제2그룹은 시작 코드 검출기(51)에 의해 수신된 영상들에 관계없이 적절한 시간에 발생된다.
테이블 601
DISPLAY ORDER(디스플레이 순서): Il B2 B3 P4 B5 B6 P7 B8 B9 I10
TRANSMIT ORDER(전송 순서): Il P4 B2 B3 P7 B5 B6 I10 B8 B9
전송된 화상과 디스플레이된 화상과의 타이밍 관계를 나타낸 테이블 601의 라인 1에 도시된 바와 같이, 화상 프레임들은 번호 순서로 디스플레이된다. 그러나, 메모리에 저장되어야만 하는 프레임의 수를 감소시키기 위하여, 프레임들은 다른 순서로 전송된다. 인트라프레임(intraframe: I frame)부터 분석을 시작하는 것이 유용하다. Il 프레임은 거스플레이되는 순서로 전송된다. 다음 예측된 프레임(predicted frame: P frame), P4는 그다음에 전송된다. 그 다음에, I1 프레임과 P4 프레임 사이에 디스플레이되는 임의의 양방향으로 보간된 프레임(hi-directionally interpolated frame: B frame)이 전송되며, 프레임 B2 및 B3로 표시된다. 이것은 전송된 B 프레임이 이전의 프레임을 참조할 수 있도록 하며 (전방 예측) 또는 미래의 프레임을 참조할 수 있도록 한다 (후방 예측). Il 및 P4 프레임 사이에 디스플레이 되는 모든 B 프레임을 전송한 후, 그 다음 P 프레임, P7이 전송된다. 그 다음으로, P4 와 P7 프레임 사이에 디스플레이되는, B5 및 B6에 해당하는, 모든 B 프레임이 전송된다. 그 다음으로, 다음 I 프레임, I10이 전송된다. 마지막으로 P7 및 I10사이에 디스플레이되는, 프레임 B8 및 B9에 해당하는, 모든 B 프레임들이 전송된다. 이와 같은, 전송된 프레임의 순서는 단지 2 프레임만이 어떤 한 순간에 메모리에 있도록 해주며, 디코더가 사이에있는(interjacent) B 프레임을 디스플레이하기 위하여 그 다음의 P 프레임 또는 I 프레임을 전송하기를 기다릴 필요가 없다.
본 발명의 특징, 목적 및 장점 뿐만아니라, 구조 및 액션에 관한 또 다른 정보는, 설명의 편의상 아래에서 절로 그룹지어 설명한 본 발명의 예시적인 실시예의 상세한 설명을 통해 당해 기술 분야의 통상의 지식을 가진 자라면 용이하게 이해할 수 있을 것이다.
1. 다중-규격 컨피그레이션
2. JPEG 정지 화상 디코딩
3. 동화상 복원
4. RAM 메모리 맵
5. 비트스트림 특성
6. 리컨피그 가능한 프로세싱 스테이지
7. 다중-규격 코딩
8. 다중-규격 프로세싱 회로 - 제2동작 모드
9. 시작 코드 검출기
10. 토큰
11. DRAM 인터페이스
12. 예측 필터
13. 액세싱 레지스터
14. 마이크로프로세서 인터페이스 (MPI)
15. MPI 판독 타이밍
16. MPI 기록 타이밍
17. 키 홀 어드레스 장소
18. 화상 끝
19. 플러싱 동작
20. 플러시 기능
21. 정지후 화상
22. 다중-규격 검색 모드
23. 역모델러
24. 역양자화기
25. 허프만 디코더 및 파서
26. 역이산 코사인 변환기
27. 버퍼 관리기
1. 다중-규격 컨피그레이션
예를들어, 상기 기술된 미국특허 제5,212,742호에서 기재되어 있는 바와 같이, 여러가지 압축 규격, 즉, JPEG, MPEG 및 H.261은 공지되어 있기 때문에, 이들 규격의 상세한 사양은 여기에서 반복하지 않기로 한다.
이전에 언급한 바와 같이, 본 발명은 서로 달리 인코딩된 다양한 화상 데이터 비트스트림을 복원할 수 있다. 각각의 다른 인코딩 규격에 있어서, 어떤 형태의 출력 포맷터는 독립적으로 동작하는 공간 디코더(spatial decoder)의 출력에 제공되는 데이터를 취하거나, 또는 결합되어 동작하는 공간 디코더 및 시간 디코더의 직렬 출력을 취하여, (이후에 보다 상세히 설명되는 바와 같이) 이 출력을 컴퓨터 또는 비디오 디스플레이 시스템을 포함하는 다른 디스플레이 시스템에서 디스플레이하는 것을 포함한 것등의 사용을 위해 재포맷팅한다. 이 포맷팅의 실행은 인코딩 규격 및/또는 선택된 디스플레이의 형태에 따라 상당히 다르다.
본 발명에 따른 제1실시예에서, 제10도 내지 제12도를 참조하여 이전에 기술된 바와 같이, 어드레스 발생기는 포맷된 데이터 블럭, 제1디코더(공간 디코더) 또는 제1디코더(공간 디코더)와 제2디코더(시간 디코더)의 결합으로부터의 출력을 저장하고, 래스터 순서(raster order)로 메모리로 또는 메모리로부터 디코딩된 정보를 기록하는데 사용된다. 이후에 기술되는 비디오 포맷터는 넓은 범위의 출력 신호 결합을 제공한다.
본 발명의 바람직한 다중-규격 비디오 디코더 실시예에서, 공간 디코더 및 시간 디코더는 MPEG 인코딩된 신호 및 H.261 비디오 디코딩 시스템 모두를 구현하는데 필요하다. 이 두 장치상의 DRAM 인터페이스는 작은 화상 포맷으로, 저속으로 데이터 코딩 작업을 하는 경우에 필요한 DRAM의 양을 감소시킬 수 있도록 컨피그하는 것이 가능한다. 이들 DRAM의 리컨피그레이션는 DRAM 인터페이스를 참조하여 이후에 기술된다. 일반적으로, 단일 4 메가바이트 DRAM은 시간 디코더 및 공간 디코더 회로 각각에 의해 요구된다.
본 발명의 공간 디코더는 단일 화상 내에서 필요한 모든 프로세싱을 수행한다. 이것은 한 화상 내의 중복도(redundancy)를 감소시킨다.
시간 디코더는 해당 화상이 도착한 후에 도착하는 화상 뿐만아니라, 해당 화상의 도착 이전에 도착하는 화상과의 관계와 해당 화상 사이의 중복도를 감소시킨다. 시간 디코더의 한 측면은 최소한의 회로를 가지고, 또한 고속으로 그리고 향상된 정확도를 가지고서 이 모든 화상들과 관련된 데이터를 판독하기 위하여 필요한 복잡한 어드레싱을 다루는 어드레스 디코드 네트워크를 제공한다.
제11도와 관련하여 이전에 기술된 바와 같이, 데이터는 시작 코드 검출기, 허프만 디코더와 파서에 선행하는 FIFO 레지스터, 제2FIFO 레지스터, 역모델러, 역양자화기, 역지그재그 및 역DCT를 통하여 도달한다. 이 2개의 FIFO가 칩상에 있을 필요는 없다. 한 실시예에서, 데이터는 칩상에 있는 FIFO를 통하여 흐르지 않는다. 데이터는 DRAM 인터페이스에 인가되며, FIFO-lN 저장 레지스터 및 FIFO-OUT 레지스터는 이 두 경우에 칩상에 있지 않다. 동작이 완전히 규격에 독립적인 이들 레지스터는 차후에 보다 상세히 설명된다.
제11도에 도시된 대부분의 서브시스템 및 스테이지는 실제로 사용된 특정 규격에 독립적이며, DRAM 인터페이스(58), DRAM 인터페이스(58)에 대한 어드레스를 발생하는 버퍼 관리기(59), 역모델러(75), 역지그재그(81) 및 역DCT(83)을 포함한다. 허프만 디코더와 파서 내에 있는 규격에 독립적인 유닛(standard independent unit)은 ALU(66) 및 토큰 포맷터(71)를 포함한다.
이제 제12도를 참조하면, 규격에 독립적인 유닛은 DRAM 인터페이스(100), 포크(91), FIFO 레지스터(96), 합산기(98) 및 출력 선택기(106)를 포함하고 있다.
규격에 종속적인 유닛(standard dependent unit)은 H.261 및 MPEG에서 서로 다른 어드레스 발생기(94), 및 H.261 및 MPEG를 모두 사용될 수 있도록 리컨피그 가능한한 예측 필터(103)가 있다. JPEG 데이터는 전혀 수정되지 않은 채 전체 머신을 통하여 흐르게 된다.
제13도는 비디오 포맷터 칩의 하이 레벨 블럭선도를 나타낸다. 이 칩의 대부분은 규격에 독립적이다. 규격에 의해 영향을 받는 유일한 항목은 MPEG 또는 JPEG과 달리 H.261의 경우에 데이터가 DRAM에 기록되는 방식이며, H.261에서는 모든 단일 화상을 코딩할 필요가 없다. 언제 화상이 디스플레이되도록 되어있는지에 관한 소정의 정보를 제공하고 또한 비디오 포맷터에 있는 논리적 어드레스 발생 형태에 의해 처리되는 시간 기준(temporal reference) 언급되는 타이밍 정보(timing information)가 있다.
모든 컬러 공간 변환, 업-샘플링 필터 및 모든 감마 보정(gamma correction) RAM을 포함하는 비디오 포맷터에 실시된 나머지 회로는 사용된 특정 압축 규격에 전적으로 독립적이다.
본 발명에 따른 시작 코드 검출기는 각각의 규격에 대하여 비트스트림에서 다른 시작 코드 패턴을 인식해야 한다는 점에서 압축 규격에 종속되어있다. 예를 들어, H.261은 16비트 시작 코드를 가지며, MPEG은 24비트 시작 코드를 가지고, JPEG은 다른 시작 코드와 상당히 다른 마커 코드(marker code)를 사용한다. 일단 시작 코드 검출기가 다른 시작 코드를 인식하게 되면, 그 동작은 본질적으로 압축 규격에 독립적으로 된다. 예를 들어, 검색 동안에 다른 카테고리의 마커(marker) 를 인식하는 회로는 별개로 하더라도, 대부분의 동작은 3개의 다른 압축 규격 간에 매우 유사하다.
그 다음 유닛은 허프만 디코더 및 파서 내에 위치한 상태 머신(state machine)(68) (제11도)이다. 여기에서, 실제 회로는 3가치 압축 규격 각각에대해 거의 동일하다. 사실, 동작 중 규격에 의해 영향을 받는 유일한 요소는 떠신의 리셋 어드레스이다. 단지 파서가 리셋되면, 각각의 규격에 대하여 다른 어드레스로 점프하게 된다. 사실, 4가지 규격이 인식된다. 이들 규격은 H.261, JPEG, MPEG 및 다른 하나가 있는데, 여기서 파서는 테스팅을 위해 사용되는 한 코드에 들어간다. 이것은 회로는 거의 모든 면에서 동일하지만, 각각의 규격에 대한 마이크로코드의 프로그램이 다르다는 것을 나타내준다. 이와 같이, 한 프로그램이 H.261로 동작하는 경우 및 다른 프로그램이 실행되고 있는 경우, 이들 사이에는 오버랩(overlap)이 없다. 제3의 완전히 독립적인 프로그램인 JPEG의 경우도 마찬가지이다.
다음 유닛은 인덱스 투 데이터 유닛(index to data unit)(64)과 함께 기능하는 허프만 디코더(56)이다. 이들 두 유닛은 함께 협동하여 허프만 디코딩을 수행 한다. 여기에서, 허프만 디코딩에 사용되는 알고리즘은 압축 규격에 상관없이 동일하다. 변경은 어느 테이블이 사용되었는가와 허프만 디코더로 들어오는 데이터가 반전되었는지의 여부이다. 또한 허프만 디코더 자체는 몇가지 측면의 코딩 규격을 이해하는 상태 머신을 포함한다. 이들 다른 연산들은 파서 상태 머신으로부터 들어오는 명령에 따라 선택된다. 파서 상태 머신은 3가지 압축 규격 각각에 대해 다른 프로그램과 함께 동작하고 연산상 그 규격과 일치하는 다른 시간에 허프만 디코더에 정확한 명령을 내린다.
압축 규격에 종속적인 칩상의 마지막 유닛은 역양자화기(79)이며, 여기에서 역양자화기가 수행하는 수학은 다른 규격 각각에 대하여 서로 다르다. 이점에있어서, CODING_STANDARD 토큰은 디코딩되고 역양자화기(79)는 이것이 어느 규격으로 연산하고 있는지를 기억한다. 그 다음에, 이 이벤트 이후 하지만 다른 CODING_STANDARD이 나타나기 이전에 발생하는 후속 DATA 토큰은 역양자화기 내부에서 기억된 CODING_STANDARD에 의해 나타내는 방식으로 다루어진다. 상세한 설명에 있어서, 다른 규격에서의 다른 파라메타 및 어떤 회로가 이들 다른 파라메타 또는 수학에 응답하는지를 나타내는 테이블이 있다.
H.261에 관한 어드레스 발생은 제12도 및 제13도에 도시된 서브시스템 각각에 대하여 다르다. 허프만 디코더 전후에서 2개의 FIFO에 대한 어드레스를 발생하는 제11도에서의 어드레스 발생은 코딩 규격에 따라 달라지지 않는다. 심지어 H.261에서도, 이 칩상에서 일어나는 어드레스 발생은 변경되지 않는다. 본질적으로, 이들 규격 사이의 차이점은 MPEG 및 JPEG에서는 화상을 수평으로 가로지르는 직선에 있는 매크로블럭의 구성이다. 제14(a)도에서 가장 잘 관찰되는 바와 같이, 제1매크로 블럭 A는 한 선 전체를 덮는다. 매크로블럭 B는 한 선 보다 작은 것을 덮고 있다.
매크로블럭 C는 다수의 선을 덮고 있다. MPEG에서는 슬라이스(132)로 분할되며, 슬라이스는 한 수평선 A일 수도 있고 또는 수평선 B의 일부분일 수도 있으며, 또한 한 선으로부터 그 다음 선 C로 뻗어갈 수도 있다. 이들 각각의 슬라이스(132)는 매크로블럭의 열로 구성되어 있다.
H.261에서는, 이 구성이 다소 다른데, 이는 화상이 블럭 그룹(GOB)으로 분할되기 때문이다. 블럭 그룹은 3개 행의 매크로블럭의 높이와 11개 매크로블럭의 폭을 가지고 있다. CIF화상의 경우에는 이와 같은 블럭 그룹이 12개 있다. 그러나, 그들은 층층을 이루며 구성되어 있지 않고, 서로 인접한 2개의 블럭 그룹으로 6개의 높이를 가진다, 즉 6개의 GOB가 수직으로 2개의 GOB가 수평으로 있다.
다른 모든 규격에서는, 어드레싱을 수행하는 경우, 매크로블럭은 상기 기술된 것과 같은 순서로 어드레싱된다. 특히, 어드레싱은 라인을 따라 진행하며, 그 라인의 끝에서 다음 라인이 시작된다. H.261에서는, 블럭의 순서가 블럭 그룹 내에서 기술된 것과 동일하지만, 그 다음의 블럭 그룹으로 이동하는 경우, 이것은 거의 지그재그이다.
본 발명은 후자의 효과를 다루기 위한 회로를 제공한다. 즉, 공간 디코더 및 비디오 포맷터에서의 어드레스 발생이 H.261에 대하여 변하는 방식이다. 이것은 정보가 DRAM에 기록될 때마다 이루어진다. 이것은 상기 언급된 어드레스 발생 시퀀스로 기록되어, 그것이 물리적으로 RAM에서 위치하는 곳은 이것이 동일한 크기의 MPEG 화상인 경우와 정확히 같다. 그러므로, 예를들어, 예측을 형성(forming prediction)하는 경우, DRAM으로부터 판독하기 위한 모든 어드레스 발생 회로는 정보를 메모리에 물리적으로 위치시키는 것이 MPEG 시퀀스인 경우와 동일하기 때문에, 이것이 H.261 규격이라는 것을 알 필요는 없다. 이와 같이, 모든 경우에서, 단지 데이터를 기록하는 것만이 영향을 받는다.
시간 디코더에 있어서, 회로가 실제적으로 일어나는 것과 어느 정도 다르다는 H.261에 대한 추상적 개념이 있다. 즉, 각각의 블럭 그룹은 개념적으로 팽창되어, 11 x 3 매크로블럭인 직사각형을 가지는 대신에, 이 매크로블럭은 높이가 한 매크로블럭이고 길이가 33 블럭(제14(c)도 참조)블릭 그룹으로 팽창된다. 이렇게 함으로써, 블럭 그룹을 통하여 카운팅하기 위하여 시간 디코더 상에서 사용되는 동일한 카운팅 메카니즘이 또한 MPEG에 대하여도 사용된다.
회로가 H.261 블럭 그룹과 MPEG 슬라이스 사이에 설계된 방식에서 대응관계 가 있다. H.261 데이터가 시작 코드 검출기 이후에 처리되는 경우, 각각의 블럭 그룹보다 슬라이스_시작_코드(slice_start_code)가 앞서게 된다. 그 다음의 블럭 그룹보다 그 다음의 슬라이스-시작-코드가 선행하게 된다. 이 구조를 통하여 카운팅하기 위하여 시간 디코더 내부에서 계속되는 카운팅은 그것이 높이가 한 매크로 블럭인 33 매크로블럭 길이의 그룹이라고 추정한다. 회로가 또한 매 11번째 간격으로 카운팅 하더라도 충분하다. 회로가 11번째 매크로블럭 또는 22번째 매크로블럭을 카운팅하면, 회로는 소정의 카운터를 리셋한다. 이것은 각각의 매크로블럭을 카운팅해가는 또 다른 카운터를 가진 간단한 회로에 의해 달성되며, 이것이 11에 이를때 영으로 리셋된다. 마이크로코드는 이것에 신호를 보내고(interrogate) 이 작업을 수행한다. 본 발명의 시간 디코더에 있는 모든 회로는 본질적으로 매크로 블럭의 물리적 배치(physical placement)에 대한 압축 규격에 독립적이다.
다중-규격 적응성의 관점에서, 많은 다른 테이블이 있으며 회로는 적절한 시점에서 적당한 규격에 관한 적당한 테이블을 선택한다. 각각의 규격은 다수의 테이블을 가지며, 회로는 임의의 정해진 시간에 이 세트로부터 선택한다. 임의의 한 규격내에서 회로는 한 번에 한 테이블을 선택하고, 다른 시간에는 다른 테이블을 선택한다. 다른 규격에서,회로는 다른 세트의 테이블을 선택한다. 제15도의 논의에서 이미 나타난 바와 같이 이들 테이블 사이에 얼마간의 교차점이 있다. 예를들어, MPEG에서 사용된 테이블중의 하나는 JPEG에서도 사용된다. 이 테이블들은 완전히 고립된 세트는 아니다. 제15도는 H.261 세트, MPEG 세트 및 JPEG 세트를 나타내고 있다. H.261 세트와 MPEG 세트사이에는 훨씬 더 많은 오버랩이 존재한다는 것에 주목할 필요가 있다. 이들은 이들이 이용하는 테이블중에서 아주 공통된 것이다. MPEG 과 JPEG 사이에는 작은 오버랩이 있으며, H.261과 JPEG 사이에는 전혀 오버랩이 없기 때문에, 이들 규격은 전혀 다른 테이블 세트를 가지고 있다.
이미 논의한 바와 같이, 대부분의 시스템 유닛은 압축 규격에 독립적이다.
하나의 유닛이 규격에 독립적인 경우, 이와 같은 유닛은 CODING_STANDARD이 처리되고 있는지를 기억할 필요가 없다. 규격에 종속적인 모든 유닛은 CODING_STANDARD토큰이 이들을 지나 흐르는 때에 압축 규격을 기억한다. 제1코딩 규격으로 인코딩/디코딩된 정보가 머신을 통하여 분포되는 경우, 및 어떤 하나의 머신이 규격을 변경하는 경우, 마이크로프로세서 제어하에서 이전의 머신들은 통상적으로 H.261압축 규격에 따라 수행하도록 선택한다. 이 머신 내의 다수의 다른 장소에서 이와 같은 이전의 머신들에 있는 MPU는 압축 규격이 변경되고 있다고 하는 신호를 발생 한다. MPU는 다른 시간에 변경을 하며, 또한 파이프라인을 플러시(flush)할 수도 있다.
본 발명에 따르면, 파이프라인에 제1유닛으로서 배치된 시작 코드 검출기에서의 CODING_STANDARD 토큰의 변경을 지시함으로써, 이 압축 규격의 변경은 용이하게 처리된다. 이 토큰은 소정의 코딩 규격이 개시되고 있고, 제어 정보가 머신을 따라 흐르고 있으며, 적절한 시점에 다른 모든 레지스터를 컨피그한다는 것을 말해 준다. MPU는 각각의 레지스터를 프로그램할 필요는 없다.
예측 토큰은 비트스트림에 있는 비트를 사용하여 예측을 형성하는 방법을 신호한다. 어떤 압축 규격이 작동하고 있는가에 따라서, 회로는 규격에서 발견된 정보를, 즉 비트스트림으로부터 예측 모드 토큰(prediction mode token)으로 변환시킨다. 이 프로세싱은 허프만 디코더 및 파서 상태 머신에 의해 수행되는데, 여기에서는 소정의 조건에 따라서 비트를 조작하는 것이 용이하다. 시작 코드 검출기는 이 예측 모드 토큰을 발생한다. 이 다음에, 이 토큰은 머신을 지나 예측을 형성하는 장치인 시간 디코더의 회로로 흐르게 된다. 공간 디코더의 회로는 어떤 규격을 운용하고 있는지를 알 필요없이 토큰을 해석하는데, 그 이유는 토큰 내에 있는 비트가 3가지 다른 규격들에서 불변이기 때문이다. 공간 디코더는 이 토큰에 응답하여 전달받은 사항만을 하게 된다. 이들 토큰을 가지고 이들을 적절히 사용함으로써, 머신 내의 다른 유닛의 설계가 간소화된다. 비록 이 프로그램이 어느정도 복잡하더라도, 여기에서는 다중-규격에 대하여 설계하기가 어려운 포선 논리(hard wired logic)가 사용될 수 있다는 장점이 있다.
2. JPEG 정지 화상 디코딩
상기에서 기술된 바와 같이, 본 발명은 신호 복원(signal decompression)에 관한 것으로서, 특히 사용된 압축 규격에 관계없이, 인코딩된 비디오 신호의 복원에 관한 것이다.
본 발명에 따른 한 특징은, 파이프라인 프로세싱 시스템에서 제1인코딩된 신호 (MPEG 또는 H.261 인코딩된 비터오 신호)를 디코딩하기 위하여 제2디코더 회로 (시간 디코더)와 결합하여 제1인코딩된 신호 (JPEG 인코딩된 비디오 신호)를 디코딩하기 위한 제1디코더 회로 (공간 디코더)를 제공하는 것이다. 시간 디코더는 JPEG 디코딩에는 필요없다.
이러한 관점에서, 본 발명은 단일 파이프라인 디코더 및 복원 시스템을 사용하여, 다르게 인코딩된 복수개의 신호들의 복원을 용이하게 할 수 있다. 디코딩 및 복원 파이프라인 프로세서는 단일 파이프라인 디코더 및 프로세싱 시스템과 모두 호환되는 기술을 사용하여 다중-규격으로 인코딩된 비디오 신호를 처리할 수 있는 고유하고 특수한 구성으로 이루어져있다. 공간 디코더는 시간 디코더와 조합되며, 비디오 포맷터는 비디오 디스플레이를 구동하는데 사용된다.
본 발명의 다른 측면은 단지 정지 화상과 함께 사용하기 위한 공간 디코더 및 비디오 포맷터를 결합하여 사용하는 것이다. 압축 규격에 독립적인 공간 디코더는 단일 화상의 경계 내에서 모든 데이터 프로세싱을 수행한다. 이러한 디코더는 파이프라인을 통하여 전달되고 관련된 랜덤 액세스 메모리 내에 분포되는 내부 화상 데이터의 공간 복원을 다루며, 규격에 독립적인 어드레스 발생 회로는 메모리로 정보의 저장 및 검색을 다룬다. 정지 화상 데이터는 공간 디코더의 출력에서 디코딩되며, 이 출력은 그 다음에 디스플레이 단말기에 출력을 제공하는 다중-규격 컨피그 가능한(configurable) 비디오 포맷터에 입력으로서 사용된다. 유사한 화상의 제1시퀀스에서, 공간 디코더의 출력에 있는 복원된 화상 각각은 화상이 공간 디코더의 출력에 도달할 때 까지는 동일한 비트 길이를 갖는다. 제2화상 시퀀스는 완전히 다른 화상 크기를 가질 수 있고, 따라서 제1길이와 비교되는 경우 다른 길이를 가질 수 있다. 다시, 유사한 화상의 이와같은 모든 제2시퀀스는 이러한 화상이 공간 디코더의 출력에 도달할 때 까지는 동일한 비트 길이를 갖는다.
본 발명의 다른 측면은, 규격에 독립적인 리컨피그 가능한 파이프라인 프로세서로서 동작하도록 선택되고 구성된 순차적으로 위치한 리컨피그 가능한 복수의 프로세싱 스테이지와 결합하여, 입력되는 규격에 종속적인 비트스트림을 제어 토큰 및 DATA 토큰의 시퀀스로 내부적으로 구성하는 것이다.
JPEG 디코딩에 있어서, 오프 칩(off chip) DRAM을 갖지 않는 단일 공간 디코더는 베이스라인(baseline) JPEG 영상을 신속하게 디코딩할 수 있다. 공간 디코더는 베이스라인 JPEG 인코딩 규격의 모든 특징을 지원한다. 그러나, 디코딩될 수 있는 영상의 크기는 제공된 출력 버퍼의 크기로 제한될 수 있다. 또한, 공간 디코더는 메모리로의 정보의 저장을 다루기 위한 머신에 종속적이고 규격에 독립적인 어드레스 발생 회로를 갖는 랜덤 액세스 메모리 회로를 포함한다.
이전에 기술된 바와 같이, 시간 디코더는 JPEG-인코딩된 비디오를 디코딩할 필요가 없다. 따라서, DATA 토큰에 의해 전달된 신호들은 시간 디코더가 JPEG 동작을 위해 구성되는 경우 부가적인 처리 시간 디코더를 직접 통과한다.
본 발명의 다른 특징은 공간 디코더에 허프만 디코더에 비디오 디멀티플렉서 회로 (HD & VDM)와 결합하여 동작하는 버퍼 메모리 회로와 같은 한 쌍의 메모리 회로를 제공하는 것이다. 제1버퍼 메모리는 HD & VDM 이전에 배치되며, 제2버퍼 메모리는 HD & VDM 이후에 배치된다. HD & VDM은 규격에 따라 인코딩된 비트스트림에 있는 이진 비트스트림 및 0으로부터 비트스트림을 디코딩하여 이같은 스트림을 다운스트림에서 사용되는 숫자로 변환시킨다. 2개의 버퍼 시스템의 장점은 다중-규격 복원 시스템을 구현하는 것이다. 허프만 디코더의 식별된 구현과 결합하여, 이들 2개의 버퍼는 이하에서 보다 상세히 설명된다.
본 발명의 다중-규격 복원 회로의 또 다른 특징은 허프만 디코더와 결합하여 동작하는 제1전방 버퍼(forward buffer)의 업스트림에 배치된 시작 코드 검출기 회로의 결합이다. 이 결합에 따른 하나의 장점은 입력 비트스트림, 특히 비트스트림에 부가되어야 하는 패딩(Padding)을 다루는데 유연성이 증가된다는 점이다. 이들 식별된 성분, 시작 코드 검출기, 메모리 버퍼 및 허프만 디코더의 배치는 입력 비트스트림에서 소정의 시퀀스의 처리를 향상시킨다.
또한, 오프 칩 DRAM은 실시간으로 JPEG 인코딩된 비디오 화상을 디코딩하는데 사용된다. DRAM과 함께 사용되는 버퍼의 크기 및 속도는 비디토 인코딩된 데이터 속도에 달려있다.
코딩 규격들은 규격에 독립적인 회로를 사용하는 공간 디코더와 관련된 DRAM에 저장하는데 필요한 모든 규격에 종속적인 형태의 정보를 식별한다.
3. 동화상 복원
본 발명에 있어서, 동화상은 여러 단계의 디코딩을 통하여 복원되는 경우, 추가의 시간 디코더가 필요하다. 시간 디코더는 공간 디코더에서 디코딩된 데이터와 현재 디코딩되고 있는 화상 전 또는 후에 디스플레이되기로 되어 있는 이전에 디코딩된 화상과 결합한다. 화상 코드화된 데이터스트림에서, 시간 디코더는 이 시간적으로 교체되는 정보를 식별하기 위한 정보를 수신한다. 시간 디코더는 시간적으로 또한 공간적으로 교체된 정보를 어드레스하고, 검색하며, 한 화상내에 위치하는 정보를 디코딩하는 방식으로 현재 더코딩되고 있고 완성되어 디스플레이 스크린을 구동하기 위하여 비디오 포맷터에 전송하기에 적당한 결과적 화상으로 끝나는 화상과 결합한다. 그 대신, 결과적 화상은 후속 화상을 시간적으로 디코딩하는데 사용하기 위해 저장될 수 있다.
일반적으로, 시간 디코더는 현재 디코딩되고 있는 화상에 대하여 시간상 앞에 또는 뒤에 있는 화상들 사이에서 처리를 수행한다. 시간 디코더는 화상의 코드화된 표현 내에 인코딩되지 않은 정보를 재입수하는데, 이는 여분의 것이며(redundant) 이미 디코더에서 이용될 수 있기 때문이다. 특히, 임의의 특정 화상은 시간상 앞 뒤 주변에 있는 화상과 유사한 정보를 포함하게 된다. 이 유사성은 움직임 보상이 가해치게 되면 더욱 커지게 된다. 또한, 시간 디코더 및 복원 회로는 관련 화상들 사이의 중복도를 감소시킨다.
본 발명의 다른 특징에 있어서, 시간 디코더는 공간 디코더로부터의 규격에 종속적인 출력 정보를 처리하기 위해 사용된다. 단일 화상에 대해 이 규격에 종속적인 정보는, 공간 디코더에 의해 처리되는 복원된 출력 정보가 제1화상의 시간 위치에 대해 시간상 교체된 공간적으로 디코딩된 화상 정보의 공간적으로 디코딩된 정보 패킷의 한 화상을 결합하기 위하여 또 다른 머신-종속적, 규격-독립적인 어드레스 발생 회로를 갖는 다른 랜덤 액세스 메모리에 의해 다른 DRAM 레지스터에 저장된다.
MPEG 인코딩 신호를 디코딩할 수 있는 다중-규격 회로에서, 보다 더 큰 논리 DRAM 버퍼가 MPEG으로 가능한 더 큰 화상 포맷을 지원하기 위해 필요할 수도 있다.
화상 정보는 8펠 x 8펠 블록단위로 직렬 파이프라인을 통하여 이동한다. 본 발명의 한 형태에 있어서, 어드레스 디코딩 회로는 이러한 블록 경계(block boundaries)를 따라 이들 펠 블록(pel blocks)을 처리한다 (저장 및 검색). 어드레스 디코딩 회로는 이러한 경계를 가로질러 8 x 8펠 블록에 관한 저장 및 검색을 처리한다. 이 다양성은 아래에서 보다 더 자세히 기술된다.
신호 프로세싱 지연없이 처리하기 위하여 제1디코더 회로 (공간 디코더)의 출력을 직접 비디오 포맷터로 전달하는 제2시간 디코더도 또한 제공될 수 있다.
또한, 시간 디코더는 디스플레이 회로에 의해 디스플레이하기 위하여 화상 데이터 블록을 재배열(reorder)한다. 이하에서 기술되는 어드레스 디코드 회로는 이 재배열을 다루게 된다.
상기 기술된 바와 같이, 시간 디코더의 하나의 중요한 특징은 처리중에 있는 화상보다 이전에 또는 그 이후에 도달한 화상의 선택으로부터 화상 정보를 부가하는 것이다. 화상이 이러한 의미로 기술되는 경우, 이는 다음 중 임의의 하나를 의미할 수 있다.
1. 화상 코드화된 데이터 표현
2. 디코더에 의해 수행된 프로세스 단계의 부가로 생기는 최종 디코드 화상
3. DRAM으로부터 판독된 이전에 디코딩된 화상
4. 공간 디코딩의 결과, 즉 PICTURE_START 토큰과 후속하는 PICTURE_END토큰 사이의 데이터 범위
화상 데이터 정보가 시간 디코더에 의해 처리된 후에, 이것은 디스플레이되거나 또는 화상 메모리 장소로 다시 기록된다. 이 정보는 그 다음에 다르게 코딩된 데이터 화상을 처리하는데 사용하는데 참조하기 위해 보관된다.
시각 디스플레이를 위한 MPEG 인코딩된 화상의 재배열은 요구되는 스크램블링된 화상이 시간 디코더의 재배열 특징을 변경시킴으로써 달성될 수 있다는 가능성을 포함하고 있다.
4. RAM 메모리 맵
공간 디코더, 시간 디코더 및 비디오 포맷터는 모두 외부 DRAM을 사용한다. 바람직하게는, 동일한 DRAM이 3가지 장치 모두에 대하여 사용된다. 3가지 장치 모두가 DRAM을 사용하고, 3가지 장치 모두가 어드레스 발생기와 관련하여 DRAM 인터 페이스를 사용하지만, DRAM에서 각각이 실행하는 것은 다르다. 즉, 각각의 칩, 예를 들어 공간 디코더 및 시간 디코더는, 비록 이들이 유사한 물리 외부 DRAM을 사용하고 있더라도, 다른 DRAM 인터페이스 및 어드레스 발생 회로를 가진다.
요약하면, 공간 디코더는 공통 DRAM에 2개의 FIFO를 구현한다. 제11도를 다시 참조하면, 하나의 FIFO(54)는 허프만 디코더(56)및 파서 이전에 위치하고, 다른 하나는 허프만 디코더 및 파서 다음에 위치한다. FIFO는 비교적 직접적인 방식으로 구현된다. 각각의 FIFO에 대하여, DRAM의 특정 부분은 FIFO가 구현되는 물리 메모리(physical memory)로서 남겨둔다.
공간 디코더 DRAM 인터페이스(58)와 관련된 어드레스 발생기는 2개의 포인터를 사용하여 FIFO 어드레스를 추적한다. 하나의 포인터는 FIFO에 저장된 제1워드를 가리키고, 다른 포인터는 FIFO에 저장된 마지막 워드를 가리켜서, 적당한 워드에 대하여 판독/기록 동작을 가능하게 한다. 판독 또는 기록 동작 중에, 물리 메모리의 끝에 도달하는 경우, 어드레스 발생기는 물리 메모리의 시작으로 "겹쳐진다" (wrap around).
요약하면, 본 발명의 시간 디코더는 어떤 인코딩 규격 (MPEG, H.261)이 규정되든지 그 규격으로된 2개의 전 화상 또는 프레임을 저장할 수 있어야만 한다. 간단히 말해서, 2개의 프레임이 저장되는 DRAM에 있는 물리 메모리는 2개로 분할되어, 각각의 절반은 2개의 화상중 특정의 화상에 (적절한 포인터를 사용하여) 전용된다.
MPEG은 3가지 다른 화상 형태, 즉 인트라(I), 예측(P) 및 양방향 보간(B) 화상을 사용한다. 상기에서 기술한 바와 같이, B 화상은 2개의 화상으로부터의 예측에 근거한다. I 화상은 시간 디코더에 의한 추가의 디코딩을 필요로 하지 않으나, 나중에 P 및 B 화상을 디코딩할 때에 사용하기 위하여 2개의 화상 버퍼중 하나에 저장되어야만 한다. P 화상을 디코딩하는 것은 이전에 디코덩된 P 또는 I 화상으로부터의 예측을 형성하는 것을 필요로 한다. 디코딩된 P 화상은 P 및 B 화상을 디코딩할 때 사용하기 위해 화상 버퍼에 저장된다. B 화상은 두 화상 버퍼 모두로부터의 예측 형태를 필요로 할 수 있다. 그러나, B 화상은 외부 BRAM에 저장되지는 않는다.
I 및 P 화상은 이들이 디코딩될 때 시간 디코더로부터 출력되지 않음에 주목 할 필요가 있다. 그 대신에, 1 및 P 화상은 화상 버퍼들 중 하나에 기록되며, 후속하는 I 또는 P 화상이 디코딩하기 위해 도달하는 때에만 판독된다. 즉, 플러싱에 관한 절에서 이후에 더 논의하는 바와 같이, 시간 디코더는 후속하는 P 또는 I 화상에 의존하여 2개의 화상 버퍼로부터 이전의 화상을 플러시한다. 요약하면, 공간 디코더는 비디오 시퀀스의 끝에서 위조 I 또는 P 화상을 제공하여 마지막 P 또는 I 화상을 플러시한다. 반대로, 이 위조 화상은 후속하는 비디오 시퀀스가 시작되는 때 플러싱된다(flushed).
피크 메모리 대역폭 로드(peak memory band width load)는 B 화상을 디코딩 할 때 발생한다. 가장 나쁜 경우는 B 프레임이 두 화상 버퍼로부터 예측으로부터 형성될 수 있는 경우이며 모든 예측은 반-픽셀의 정확도로 이루어진다.
상기 기술된 바와 같이, 시간 디코더는 MPEG 화상 재배열을 제공하도록 구성될 수 있다. 이 화상 재배열에 있어서, P 및 I 화상의 출력은 데이터 스트림에서 그 다음의 P 또는 I 화상이 시간 디코더에 의해 디코딩되기 시작할 때까지 지연된다.
P 또는 I 화상이 재배열될 때, 소정의 토큰은 화상이 화상 버퍼로 기록될 때 칩상에 일시적으로 저장된다. 화상이 디스플레이되도록 판독될 때, 이들 저장된 토큰은 검색된다. 시간 디코더의 출력에 있어서, 새로이 디코딩된 P 또는 I 화상의 DATA 토큰은 이전의 P 또는 I 화상에 대한 DATA 토큰으로 교체된다.
그와 반대로, H.261은 방금 디코딩된 화상으로부터만 예측한다. 각각의 화 상이 디코딩될 때, 이것은 2개의 화상 버퍼 중 하나에 기록되어, 그 다음 화상을 디코딩하는데 사용될 수 있다. 요구되는 유일한 DRAM 메모리 동작은 8 x 8 블럭을 기록하는 것과 정수 정확도 운동 벡터(integer accuracy motion vectors)로 예측을 형성하는 것이다.
요약하면, 비디오 포맷터는 3개의 프레임 또는 화상을 저장한다. 3개의 화상은 화상을 반복 또는 스킵하는 것과 같은 특징을 수용하기 위해 저장될 필요가 있다.
5. 비트스트림 특성
보다 자세히 본 발명의 공간 디코더를 참조하면, 이들 특징들이 공간 디코더및 시간 디코더에 의해 처리되어져야만 할 때 인코딩된 데이터스트림의 비트스트림 특성을 재고해 보는 것이 도움이 된다. 예를 들어, 하나 이상의 압축 규격 하에서, 규격의 압축비는 화상의 화상들을 코드화하는데 사용하는 비트의 수를 변경시킴으로써 이루어질 수 있다. 비트의 수는 폭 넓은 한도를 가지고 변화될 수 있다.
특히, 이것은 화상의 참조된 화상을 인코딩하는데 사용되는 비트스트림의 길이가 한 유닛의 길이(one unit long)를 갖는다고 식별될 수도 있고, 다른 화상은 많은 유닛의 길이(a number of units long)를 가질 수도 있는 반면, 여전히 제3 화상은 그 유닛의 일부(a fraction of unit)일 수도 있다.
기존의 규격 (MPEG 1.2, JPEG, H.261) 중 어느 것도 화상을 종료하는 방식을 정의하고 있지 않으나, 묵시적으로 그 다음 화상이 시작되는 때 현재의 화상을 종료하는 것이다. 또한, 규격 (특히, H.261)이 불완전한 화상을 인코더에 의해 발생될 수 있도록 한다.
본 발명에 따르면, 자신의 토큰 중 하나, PICTURE_END, 를 사용하여 화상의 끝을 나타내는 방법을 제공하고 있다. 시작 코드 검출기를 떠나는 정지 인코딩된 화상 데이터(still encoded picture data)는 PURE_START 토큰으로 시작하고 PICTURE_END 토큰으로 끝나는 화상으로 구성되어 있지만, 아직도 길이는 상당히 가변적이다. 여기에서 (제1화상과 제2화상 사이에) 다른 전송된 정보가 있을 수 있지만, 제1화상이 완료되었다는 것은 알고 있다.
공간 디코더의 출력에서의 데이터 스트림은 화상, 아직도 주어진 시퀀스에 대하여 동일한 길이 (비트수)를 갖는 화상 시작 및 화상 끝을 가지는 화상으로 구성되어 있다. 화상 시작과 화상 끝 사이의 시간 길이는 변할 수 있다.
비디오 포맷터는 이들 일정하지 않은 시간의 화상을 취하여, 구동되는 디스 플레이의 형태에 따라 결정되는 고정된 화상 속도로 디스플레이한다. 예를 들어, PAL-NTSC 텔레비젼 규격과 같은 다른 디스플레이 속도가 전세계적으로 사용된다.
이것은 독특한 방식으로 화상을 선택적으로 드롭(dropping) 또는 반복함으로써 이루어진다. 통상적인 "프레임 속도 변환기", 예를 들어, 2-3 풀다운(Pulldown)는 고정된 입력 화상 속도로 동작하는 반면, 비디오 포맷터는 가변 입력 화상 속도를 처리할 수 있다.
6. 리컨피그 가능한 프로세싱 스테이지
제10도를 다시 참조하면, 리컨피그 가능한 프로세싱 스테이지(RPS)는 2선식 인터페이스(37) 및 입력 래치(34)로부터 오는 토큰을 수신하는데 사용되는 토큰 디코드 회로(33)를 구비하고 있다. 토큰 디코드 회로(33)의 출력은 2선식 인터페이스(37)와 액션 식별 회로(action identification circuit)(39)를 거쳐 프로세싱 유닛(36)에 인가된다. 프로세싱 유닛(36)은 액션 식별 회로(39)의 제어하에서 데이터를 처리하는데 적당하다. 처리가 완료된 후에, 프로세싱 유닛(36)은 이같이 처리가 완료된 신호들을 출력 래치(41)를 통하여 출력 2선식 인터페이스 버스(40)에 접속시킨다.
액션 식별 디코드 회로(39)는 2선식 인터페이스 버스(40)을 거쳐서는 토큰 디코드 회로(33)로부터의 입력을, 2선식 인터페이스 버스(46)을 거쳐서는 메모리회로(43)로부터의 입력을 갖는다. 토큰 디코드 회로(33)로부터의 토큰들은 액션식별 회로(39)와 프로세싱 유닛(36)에 동시에 인가된다. RPS 뿐만아니라 액션 식별 기능은 이 설명서의 이후의 부분에서 테이블과 도면을 사용하여 보다 상세히 설명된다.
제10도의 기능 블럭선도는 규격 독립적인 회로가 아닌 제11도, 제12도 및 제13도에 도시된 스테이지들을 설명한다. 데이터는 토큰 디코드 회로(33), 프로세싱 유닛(36), 출력 래치(41)를 통하여 2선식 인터페이스 회로(42)쪽으로 흐른다. 제어 토큰이 RPS에 의해 인식되는 경우, 이것은 토큰 디코드 회로(33)에서 디코딩되어 적당한 액션을 취하게 된다. 인식되지 않는 경우에는, 변경없이 출력 회로(41)를 거쳐 출력 2선식 인터페이스(42)로 전달된다. 본 발명은 파이프라인을 통한 제어 토큰의 이동을 제어하기 위한 2선식 인터페이스를 갖는 파이프라인 프로세서로서 동작한다. 본 발명의 이 특징은 이미 출원된 EPO 특허출원 제92306038.8호에 보다 상세히 기술되어 있다.
본 발명에서, 토큰 디코드 회로(33)는 현재 2선식 인터페이스(42)를 통하여 들어오고 있는 토큰이 DATA 토큰인지 제어 토큰인지를 식별하는데 사용된다. 토큰 디코드 회로(33)에 의해 검사 중인 토큰이 식별되는 경우, 액션이 취해질 거라는 것을 표시해주는 적당한 인덱스 신호 또는 플래그 신호를 가지고 액션 식별 회로(39)로 빠져나간다. 동시에, 토큰 디코드 회로(33)는 액션 식별 회로(39)에 의해 처리되는 토큰의 존재를 알려주기 위해 프로세싱 유닛(36)에 적당한 플래그 또는 인덱스 신호를 제공한다. 제어 토큰들이 또한 처리될 수도 있다.
본 발명에서는 사용될 수 있는 여러가지 형태의 토큰들에 대한 보다 상세한 설명은 이후에 계속 이어진다. 상세한 설명중 이 부분의 목적상, 제어 토큰에 의해 운반된 어드레스가 디코더(33)에서 디코딩되어 액션 식별 회로(39) 내에 포함된 레지스터를 액세스하는데 사용된다는 것에 주목하는 것으로 충분하다. 검사 중의 토큰이 인식된 제어 토큰인 경우, 액션 식별 회로(39)는 제어 신호를 상태 머신 전체에 분배하기 위한 자신의 리컨피그레이션 상태 회로를 사용한다. 상기에서 기술된 바와 같이, 액션 식별 회로(39)는 액션 식별 디코더(39)의 상태 머신을 활성화 한 다음에 자신을 리컨피그한다. 예를 들어, 이것은 코딩 규격을 변경할 수 있다.
이와 같이, 액션 식별 회로(39)는 제10도에 도시된 상태 머신을 통과하고 있는 특정 규격을 처리하는데 요청된 액션을 디코딩한다.
유사하게, 액션 식별 회로(39)의 제어하에 있는 프로세싱 유닛(36)은 이와 같이 하는 것이 타당한 경우 DATA 토큰의 데이터 필드에 포함된 정보를 처리할 준비가 되어 있다. 많은 경우에, 제어 토큰이 먼저 도착하여 액션 식별 회로(39)를 리컨피그하며, 바로 다음에 프로세싱 유닛(36)에 의해 처리되는 DATA 토큰이 온다.
제어 토큰은 프로세싱 유닛(36) 내에서 처리된 DATA 토큰 바로 앞에 오는 출력 2선식 인터페이스(42)를 거쳐 출력 래치 회로(41)를 빠져나간다.
본 발명에 있어서, 액션 식별 회로(39)는 이력 상태(history state)를 유지하는 상태 머신이다. 레지스터(43), 및 (44)는 토큰 디코더(33)으로부터 디코드딩되고 이들 레지스터에 저장된 정보를 유지한다. 이와 같은 레지스터는 필요에 따라 온-칩(on-chip) 또는 오프-칩(off-chip)일 수 있다. 이들 복수개의 상태 레지스터는 액션 식별 회로(39)에서 현재 식별되고 있는 액션 식별에 접속된 액션 정보를 포함하고 있다. 이 액션 정보(action information)는 이전에 디코딩된 토큰으로부터 저장되어 선택된 액션에 영향을 미칠 수 있다. 토큰 디코드(33)으로부터 액션 식별 블럭(39)로 직접 연결하는 접속부(47)가 있다. 이것은 이 액션이 현재 토큰 디코드 회로(33)에 의해 처리되고 있는 토큰에 의해 영향받을 수도 있다는 것을 보여주기 위한 것이다.
일반적으로, 본 발명에 따른 토큰 디코딩 및 데이터 처리가 도시되어 있다.
데이터 처리는 액션 식별 회로(39)에 의해 컨피그된 것과 같이 수행된다. 이 액션은 수많은 조건에 의해 영향을 받으며, 이전에 디코딩된 토큰으로부터 일반적으로 추출된 정보, 특히 레지스터(43), (44)에 있는 이전에 디코딩된 토큰으로부터 저장된 정보, 처리중의 현재의 토큰 및 액션 식별 유닛(39) 자신이 획득한 상태 및 이력 정보에 의해 영향을 받는다. 그러므로 제어 토큰과 DATA 토큰사이에 구별이 된다.
임의의 RPS에서, 어떤 토큰들은 그 RPS 유닛에게는 제어 토큰들인것으로 보이게 되는데 그 이유는 그들이 아마도 차후의 어느 시점에서 RPS의 동작에 영향을 미치기 때문이다. 다른 토큰 세트는 RPS에 DATA 토큰으로 보인다. 이러한 DATA 토큰은 특정 회로의 설계, 이전에 디코딩된 토큰 및 액션 식별 회로(39)의 상태에 의해 결정된 방식으로 RPS에 의해 처리되는 정보를 포함한다. 특정 RPS가 어떤 토큰 세트를 특정 RPS 제어로서 식별하고 다른 토큰 세트를 데이터로서 식별할지라도, 이것은 이 특정 RPS의 시각이다. 다른 RPS는 동일한 토큰에 대하여 다른 시각을 가질 수 있다. 이 토큰 중 어느 것은 한 RPS 유닛에 의해 DATA 토큰으로 보여 질 수 있는 반면, 다른 RPS 유닛은 이것이 실질적으로 제어 토큰이라고 결정되어질 수도 있다. 예를 들어, 허프만 디코더 및 상태 머신에 관한 한, 양자화 테이블 정보는 데이터인데, 그 이유는 이것이 입력에 코드화된 데이터로서 도달하여, 일련의 8비트 워드로 포맷되어, 프로세싱 파이프라인을 따라 내려가는 양자화 테이블 토큰 (QUANT_TABLE)이라고 하는 토큰으로 형성되기 때문이다. 이 상태 머신에 관한 한, 이들 전부는 데이터였으며, 이는 데이터를 처리하여 한 종류의 데이터를 다른 종류의 데이터로 변환하였는데 이것은 분명히 머신의 그 부분에 의해 수행되는 처리 기능이다. 그러나, 이 정보가 역양자화기에 이르면, 이 토큰에 있는 정보를 복수개의 레지스터에 저장한다. 사실, 64개의 8비트 수가 있고 많은 레지스터가 있기 때문에, 일반적으로 많은 레지스터가 존재할 수 있다.
이 정보는 제어 정보로 간주되며, 이 제어 정보는 후소의 DATA 토큰에 행해지는 처리에 영향을 미치게 되는데, 이는 이 제어 정보가 각각의 데이터 워드에 곱하는 수에 영향을 미치기 때문이다. 한 스테이지가 토큰을 데이터로 보고 다른 스테이지는 이 토큰을 제어로 보는 일 예가 있다.
본 발명에 따른 토큰 데이터는 거의 대부분 머신을 통하여 데이터로 간주된다. 일반적으로, 중요한 특징 중의 하나는 토큰 디코더를 갖는 회로의 각각의 스테이지는 소정의 토큰 세트를 찾게 되고, 그것이 인식하지 않는 임의의 토큰은 변경없이 이 스테이지를 통과하여 파이프라인을 따라 내려가서, 현재의 스테이지의 다운스트림에 있는 후속 스테이지들은 이들 토큰을 만나게되는 잇점을 가지며 이들에 응답할 수도 있다. 이것은 중요한 특징이며, 즉 서로 인접하지 않은 블럭들 사이에서 토큰 메카니즘을 사용하여 통신할 수 있다.
본 발명의 다른 중요한 특징은 회로의 각각의 스테이지는 각각의 규격에 대하여 필요한 동작을 수행할 수 있는 처리 능력을 그 내부에 가지고 있으며, 정해진 시간에 어떤 동작을 수행해야 되는지에 관한 제어가 토큰으로서 오게 된다는 것이다. 이 능력을 제공하기 위하여 다른 스테이지들 사이에 서로 다른 한 프로세싱 요소가 있다. 파서의 상태 머신 ROM에는, 3가지 전적으로 다른 프로그램이 별도로 있는데, 처리되는 각각의 규격에 대하여 하나씩 있다. 어떤 프로그램이 실행되는 가는 CODING_STANDARD 토큰에 달려 있다. 바꿔 말하면, 이들 3개의 프로그램 각각은 디코딩 및 CODING_STANDARD 규격 토큰을 처리할 수 있는 능력을 자신의 내부에 가지고 있다. 이들 각각의 프로그램이 그 다음에 어떤 코딩 규격이 디코딩 되는가를 알게 되는 경우, 이들은 그 특정 프로그램에 대한 마이크로코드 ROM에 있는 시작 어드레스로 점프한다. 이것은 스테이지들이 어떻게 다중-규격에 대해 대처하는가를 보여준다.
2가지 일이 다른 규격에 의해 영향을 받는다. 첫째, 그것은 시작 마커 코드의 길이를 검출하기 위해 쉬프트 레지스터를 리컨피그하기 위하여 비트스트림에서 어떤 비트 패턴이 시작-코드 또는 마커 코드로서 인식되는가에 영향을 미친다. 둘째, 이 시작 또는 마커 코드가 무엇을 의미하는지를 나타내는 마이크로코드 내에 하나의 정보가 있다. 비트의 코딩은 3가지 규격 사이에 서로 다르다는 것을 기억한다. 따라서, 마이크로코드는 이 압축기 규격에 관한 테이블에서 이 규격에 독립적인 어떤 것, 즉 들어오는 코드를 나타내는 토큰의 형태를 검색한다. 일반적으로, 이 토큰은 이 규격에 독립적인데, 이는 대부분의 경우에 여러가지 규격 각각은 그것을 생성하는 소정의 코드를 제공한다.
역양자화기(79)는 수학적 능력을 가지고 있다. 양자화기는 곱셈 및 덧셈을 하고 파라메타에 의해 구성된 3가지 압축규격 모두를 다루는 능력을 가지고 있다.
예를 들어, 제어 상태의 ROM에 있는 플래그 비트는 역양자화기가 상수 K를 더할 것인지의 여부를 말해준다. 다른 플래그는 역양자화기에 다른 상수를 더할 것인지의 여부를 말해준다. 역양자화기는 이것이 양자화기를 지나 흐를 때 레지스터에서 CODING_STANDARD 토큰을 기억한다. 예를 들어, DATA 토큰들이 그 다음으로 가게 될 때, 역양자화기는 이 규격이 무엇인지를 기억하고 적절한 동작을 수행하기 위하여 프로세싱 요소에 인가하는데 필요한 파라메타를 검색한다. 예를 들어, 역양자화기는 K가 0로 세팅되었는지의 여부 또는 특정 압축 규격에 대하여 그것이 1로 세팅되었는지를 검색하여 자신의 프로세싱 회로에 인가하게 된다.
마찬가지로, 허프만 디코더(56)는 자신의 내부에 다수의 테이블을 가지고 있는데, JPEG에 대한 것과 MPEG에 대한 것 및 H.261에 대한 것을 가지고 있다. 사실, 이들 테이블의 대부분은 이들 압축 규격들 중에서 하나 이상의 규격을 제공한다. 어떤 테이블이 사용되는 지는 규격의 신택스(syntax)에 달려있다. 허프만 디코더는 테이블 중 어느 것을 사용할 것인가를 말해주는 상태 머신으로부터 명령을 수신함으로써 작동된다. 따라서, 허프만 디코더는 기억되고 어떤 코딩을 수행하고 있는지를 말해주는 상태를 자신이 직접 가지고 있지 않다. 오히려, 이것은 이들 내부에 정보를 포함하고 있는 파서 상태 머신 및 허프만 디코더의 조합이다.
본 발명의 공간 디코더에 관해서는, 코딩 규격과 같은 다수의 정보가 토큰으로부터 디코딩된다는 점에서, 어드레스 발생은 제10도에 도시된 것과 유사하게 수정되었다. 코딩 규격 및 부가적인 정보는 또한 레지스터에 기록되며, 이것은 단계가 진행됨에 따라 어드레스 발생기 상태의 진행에 영향을 미치게 되며 시스템 내의 매크로블럭을 차례로 카운팅한다. 마지막 스테이지는 두가지 모드, H.261 또는 MPEG 중 하나로 동작하는 예측 필터(179) (제17도)일 수 있으며 쉽게 식별된다.
7. 다중-규격 코딩
또한, 본 발명의 시스템은 토큰 디코드 회로와 함께 시스템 전역에 걸쳐 전략적으로 배치된 규격-독립적인 인덱스 발생 회로(standard-independent indices generation circuits)의 결합을 제공한다. 예를 들어, 이 시스템은 특히 H.261 비디오 규격, MPEG 비디오 규격 또는 JPEG 비디오 규격을 디코딩하는데 사용된다.
이들 3가지 압축 코딩 규격은 도달하는 데이터에 대하여 유사한 프로세스를 규정하고 있지만, 데이터 스트림의 구조는 서로 다르다. 상기 기술된 바와 같이, MPEG시작 코드, H.261 시작 코드 및 JPEG 마커 코드를 검출하고, 이들 모두를 하나의 형태, 즉 현재의 코딩 규격을 구현하는 토큰 스트림을 포함하고 있는 제어 토큰으로 변환되는 것이 시작 코드 검출기의 한 기능이다. 제어 토큰들은 파이프라인 프로세서를 통하여 전달되어, 이들과 관련된 상태 머신에서 사용, 즉 디코딩되고, 이 토큰과 관련이 없는 다른 상태 머신을 통하여 전달된다. 이 점에서, DATA 토큰들은 그들이 제어 토큰들에 의해 이러한 DATA 토큰들을 처리하게 되도록 구성할 수 있는 상태 머신에서만 처리되는 한 동일한 방식으로 처리된다. 나머지 상태 머신에서, 이들은 수정없이 통과된다.
특히, 본 발명에 따른 제어 토큰은 토큰에 하나 이상의 워드로 구성되어 있다. 이 경우에, 확장 비트라고 하는 비트는 부가 정보를 운반하기 위하여 토큰에 부가 워드의 사용을 규정하게 세팅된다. 이들 부가 제어 비트 중 어떤 것은 한 세트의 규격-독립적인 인덱스 신호를 생성하기 위하여 대응하는 상태 머신들에서 사용하기 위한 정보를 나타내주는 인덱스를 포함하고 있다. 토큰의 나머지 부분은 파이프라인 프로세서를 통과하는 모든 데이터스트림에 대한 규격인 내부 프로세싱 제어 기능을 지시하고 식별하는데 사용된다. 본 발명의 한 형태에서, 토큰 확장은 머신 전체에 분산된 관련 토큰 디코드 회로에 의해 디코딩된 현재 코딩 규격을 전달하기 위해 사용되고, 신규 코딩 규격하에서 동작하는 것이 적당한 경우 이 머신 전체에 걸친 스테이지의 액션 식별 회로(39)를 리컨피그하는데 사용된다. 또한, 토큰 디코드 회로는 제어 토큰이 회로가 처리하도록 설계된 선택된 규격들 중 하나에 관련되어 있는지의 여부를 나타낼 수 있다.
특히, MPEG 시작 코드 및 JPEG 마커 뒤에 8 비트 값이 따라온다. H.261 시작 코드 뒤에는 4비트 칼이 따라온다. 이러한 관점에서, 시작 코드 검출기(51)는, MPEG 시작 코드 또는 JPEG 마커를 검출함으로써, 뒤따르는 8비트가 시작-코드와 관련된 값을 포함하고 있다는 것을 나타낸다. 독립적으로, 이것은 MPEG 시작 코드 또는 JPEG 마커중의 하나이며 H,261 시작 코드가 아니라는 것을 나타내주는 신호를 생성할 수 있다. 이 첫 번째 예에서, 8비트 값은 디코드 회로에 입력되며, 그중 일부는 현재의 회로 내에서 그 회로를 통과하는 토큰을 처리하기 위하여 사용되는 인덱스 및 플래그를 나타내는 신호를 생성한다. 또한, 이것은 어떤 규격이 처리되고 있는지를 판별하기 위하여 그 후에 보게될 제어 토큰의 일부를 삽입하는데 사용될 수도 있다. 이러한 의미에서, 제어 토큰은 어떤 형태의 연산이 부속 데이터에 대하여 수행되어야 하는지를 나타내주는 부분 뿐만아니라, MPEG 규격에 관한 것이 라는 것을 나타내주는 부분을 포함하고 있다. 이전에 기술된 바와 같이, 이 정보는 시스템에서 그 목적으로 생성된 여러가지 규격에 의하여 요청되는 기능을 수행 하는데 사용되는 프로세싱 스테이지를 리컨피그하는데 이용된다.
예를 들면, H.261 시작 코드의 경우, 이 시작 코드 바로 뒤이어 오는 4비트 값과 관련이 되어 있다. 시작 코드 검출기는 이 값을 토큰 발생기 상태 머신으로 전달한다. 이 값은 3비트 시작 번호를 생성하는 8비트 디코더로 인가된다. 이 시작 번호는 이 값에 의해 지시된 바와 같이 화상 번호의 화상 시작을 식별하는데 사용된다.
또한, 시스템은 이전에 기술된 2선식 인터페이스의 원리하에서 동작하는 다 중-스테이지 병렬 프로세싱 파이프라인을 포함한다. 일반적으로, 각각의 스테이지는 제10도에 도시된 형태를 취하는 머신을 구비하고 있다. 토큰 디코드 회로(33)는 현재 상태 머신으로 입력되고 있는 토큰을 액션 식별 회로(39) 또는 프로세싱 유닛(36)으로 향하게 하는데 사용된다. 프로세싱 유닛(36)은 다음의 이전 제어 토큰(next previous control token)에 의해 지금의 프로세싱 스테이지로 들어와서 다음 DATA 토큰에 의해 전달되는 현재의 코딩 규격을 처리하는데 필요한 형태로 리컨피그된다. 또한, 본 발명의 이 관점에 따르면, 프로세싱 파이프라인에서 뒤에 오는 상태 머신들은 하나의 코딩 규격, 즉 H.261하에서 기능할 수 있는 반면, 이전의 스테이지는 MPEG과 같은 별도의 규격하에서 동작할 수 있다. 동일한 2선식 인터페이스는 제어 토큰 및 DATA토큰을 운반하는데 사용된다.
또한, 본 발명에 따른 시스템은 정해진 수의 리컨피그 가능한 프로세싱 스테 이지를 갖는 많은 코딩 규격을 디코딩하는데 필요한 제어 토큰을 이용한다. 특히, PICTURE_END 제어 토큰은 화상이 실제로 끝나는 때를 나타내는 것이 중요하기 때문에 사용된다. 따라서, 다중-규격 머신의 설계시, 다중-규격 파이프라인 프로세싱 머신 내에 어느 규격 디코딩 기술을 사용할 것인가를 나타내주는 부수적인 제어 토큰을 생성할 필요가 있다. 이러한 제어 토큰이 PICTURE-END 토큰이다. 이 PICTURE_END 토큰은 현재의 화상이 끝났는지를 나타내고, 버퍼를 플러싱되도록(flushed) 하며, 또한 현재의 화상을 디코더를 통하여 디스플레이로 푸시(push)하는데 사용된다.
8. 다중-규격 프로세싱 회로 - 제2모드 동작
이전에 기술된 시작 코드 검출기의 형태인 압축 규격-종속적인 회로(compression standard-dependent circuit)는 적당한 버스를 거쳐 압축 규격-독립적인 회로에 알맞게 상호 접속되어 있다. 규격-종속적인 회로는 동일한 버스 및 부가 버스를 통하여 종속적이고 독립적인 회로 조합에 접속되어 있다. 규격-독립적인 회로는 부가 입력을 규격 종속-독립적인 회로에 인가하는 반면, 규격 종속-독립적인 회로는 정보를 다시 규격-독립적인 회로에 제공한다. 규격-독립적인 회로로부터의 정보는 다른 적당한 버스를 통하여 출력에 인가된다. 표 600은 규격-종속적인 시작 코드 검출기(51)에 입력으로 인가된 다수의 규격들은 각각의 인코딩된 비트 스트림 내에 규격-종속적인 의미를 갖는 어떤 비트 스트림을 포함하고 있다는 것을 설명해주고 있다.
9. 시작-코드 검출기
이전에 기술한 바와 같이, 본 발명에 따르면 시작 코드 검출기는 MPEG, JPEG 및 H.261 비트 스트림을 취하여, 이들로부터 더코더의 나머지에 중요한 전용 토큰의 시퀀스를 발생시킬 수 있다. 어떻게 다중-규격 디코딩이 달성되는가에 대한 일예로서, MPEG(1 및 2) picture_start_code, H.261 picture_start_code 및 JPEG start_of_scan(505) 마커는 시작 코드 검출기에 의해 동등하게 취급되며 모두가 내부 PICTURE_START 토큰을 발생한다. 유사하게, MPEG sequence_start_code 및 JPEG SOI(start_of_image) 마커 모두는 머신 sequence_start_token을 발생한다. 그러나, H.261 규격은 동등한 시작 코드를 갖지 않는다. 따라서, 시작 코드 검출기는 제1H.261 picture_start_code에 응답하여 sequence_start_token을 발생한다.
상기 기술한 영상들 중 어느 것도 SCD 이외의 곳에서는 직접적으로 사용되지는 않는다. 오히려, 예를 들어 머신 PICTURE_START 토큰이 비트 스트림에 포함된 PICTURE_START 영상에 동등한 것으로 여겨진다. 또한, 머신 PICTURE_START 그 자체로는 규격에 있는 PICTURE_START의 직접적인 영상이 아니라는 것을 명심해야한다. 오히려, 이것은 압축 코딩 규격들 각각에서 영상의 동작을 에뮬레이트하는 규격-독립적인 디코딩을 제공하기 위하여 다른 제어 토큰들과 결합하여 사용되는 제어 토큰이다. 제어 토큰들에 의해 운반되는 정보에 따른 회로의 리컨피그레이션과 함에, 개개의 상태 머신의 토큰 디코드 회로 부분에 의해 발생된 인덱스 및/또는 플래그와 함께 제어 토큰들의 결합은 그 자체로 독특하다. 일반적인 리컨피그 가능한 상태 머신은 차후에 기술된다.
표 600을 다시 참조하면, 좌측 열에 규격 영상의 그룹의 명칭들이 도시되어 있다. 우측 열에는 규격 영상에 존재하거나 사용되지 않는 규격 인코딩된 신호의 에뮬레이션(emulation)에서 사용된 머신 종속적인 제어 토큰들이 도시되어 있다.
테이블 600을 참조하면, 상기 기술한 바와 같이 머신 sequence_start 신호는 표 600에 표시된 규격 신호들 중 어느 하나를 디코딩할 때에 시작 코드 검출기에 의해 발생된다는 것을 알 수 있다. 시작 코드 검출기는 시스템 전체에 걸쳐 사용 되는 2선식 인터페이스에 인가하기 위한 sequence_start, group_start, sequence_end, slice_start, user_data, extra_data 및 PICTURE-START 토큰들을 생성한다. 이들 제어 토큰들과 결합하여 동작하는 각각의 스테이지는 이 토큰의 내용에 의해 컨피그되거나, 또는 토큰의 내용에 의해서 생성된 인덱스에 의해 컨피그되며, 화상 DATA 토큰이 이 스테이션에 도착할 때 수신되기로 되어 있는 데이터를 처리할 준비가 된다.
이전에 기술한 바와 같이, H.261과 같은 압축 규격 중 하나는 이 데이터 스트림에 sequence_start 영상을 가지지 않고 이 데이터 스트림에 sequence-start 영상도 가지지 않는다. 시작 코드 검출기는 들어오는 비트 스트림에 PICTURE_END 포인트를 표시하며 PICTURE_END 토큰을 생성한다. 이 점에서, 본 발명의 시스템은 본 발명의 실시에서 사용되도록 선택된 각각의 레지스터 장소에 약간의 정보를 포함하도록 완전히 패킹된(Packed) 데이터 워드를 전달하도록 되어 있다. 이를 위해, 15비트가 2개의 시작 코드 사이에 전달되는 비트의 수로서 선택되었다. 물론, 당해 기술 분야에서 통상의 지식을 가진 자라면, 15비트 이상 또는 이하의 비트를 포함 하도록 선택할 수 있다는 것은 자명하다. 즉, 시작 코드 검출기로부터 DRAM 인터페이스로 전달되는 데이터 워드의 15비트 모두가 적절한 동작을 위해 필요하다는 것이다. 따라서, 시작 코드 검출기는 DATA 토큰의 마지막 워드에 삽입하는 패딩 (padding)이라고 하는 잉여 데이터를 생성한다. 예를 들어 설명하기 위해 15 데이터 비트를 선택하였다.
본 발명에 따르면, 패딩 동작을 수행하기 위하여, 많은 이진 1이 뒤따르는 이진 0은 자동적으로 삽입되어 15비트 데이터 워드를 완성한다. 그 후, 이 데이터는 코드화된 데이터 버퍼를 통하여 전달되어, 패딩을 제거하는 허프만 디코더로 제공된다. 이와 같이, 임의의 갯수의 비트가 일정 크기 및 폭을 갖는 버퍼를 통하여 전달될 수 있다.
한 실시예에서, slice_start 제어 토큰은 화상의 슬라이스를 식별하는데 사용된다. slice_start 제어 토큰은 화상을 더 작은 영역으로 분할하는데 사용된다.
이 영역의 크기는 인코더에 의해 선택되며, 수신된 화상을 더 작은 영역으로 분할하기 위해서, 시작 코드 검출기는 시작 코드 검출기로부터 다운스트림에 위치한 머신-종속적인 상태 스테이지가 이 독특한 slice_start 코드의 패턴을 식별한다. 이 영역의 크기는 인코더에 의해 선택되며, 시작 코드 검출기에 의해 인식되어 인코드된 화상을 복원하기 위해 재결합 회로와 제어 토큰에 의해 사용된다. slice_start_code는 원칙적으로 에러 복구를 위해 사용된다.
시작 코드는 디코더를 기동하는 독특한 방법을 제공하며, 이것은 차후에 보다 상세히 설명된다. 시작 코드 검출기를 코드화된 데이터 버퍼 이전에 위치시키는 것은 시작 코드 검출기를 코드화된 데이터 버퍼 이후 및 허프만 디코더 및 비디오 디멀티플렉서 이전에 위치시키는 것과는 반대로 많은 잇점이 있다. 시작 코드 검출기를 제1버퍼 이전에 위치시키는 것은 1) 토큰을 조립하여, 2) 시작 코드와 같은 규격 제어 신호를 디코딩하고, 3) 데이터가 버퍼 내로 들어가기 이전에 비트 스트림을 패딩하고 4) 버퍼를 비워 버퍼로부터 이용 가능한 데이터를 허프만 디코더로 푸시해주기 위해 적당한 제어 토큰의 시퀀스를 생성할 수 있도록 해준다.
시작 코드 검출기에 의해 출력된 제어 토큰의 대부분은 직접적으로 여러 가지 화상 및 비디오 코딩 규격의 구문 요소를 반영한다. 시작 코드 검출기는 구문 요소들을 제어 토큰들로 변환한다. 이 자연 토큰(natural token)에 부가하여, 어떤 독특하고 머신-종속적인 토큰들이 발생된다. 독특한 토큰들은 그 자체로 독특한 본 발명의 시스템에서 사용되도록 특별히 설계되어, 본 발명의 다중-규격 특성에 도움이 되도록 사용되는 그들 토큰을 포함하고 있다. 이러한 독특한 토큰의 일예에는 PICTURE_END 및 COIDING_STANDARD가 포함된다.
또한, 토큰들은 코딩 규격들간의 구문 차이를 제거하여 에러 조건들과 협동 하여 기능하도록 하기 위해 삽입된다. 자동적인 토큰 발생은 규격-종속적인 데이터의 일련의 분석 이후에 행해진다. 그러므로, 공간 디코더는 공간 디코더, 즉 SCD의 입력에 직접 공급되는 토큰들 뿐만아너라 코드화된 데이터에서 시작-코드의 검출에 뒤이어 발생된 토큰들에 동등하게 응답한다. 잉여 토큰의 시퀀스는 본 발명의 다중-규격 특성을 제어하기 위하여 2선식 인터페이스에 삽입된다.
HPEG 및 H.261 코드화된 비디오 스트림은 규격-종속적이고, 비데이터 (non-data)이며, 식별가능한 비트 패턴, 및 이후부터 시작 영상 및/또는 규격-종속적인 코드라고 칭하는 것들중 하나를 포함한다. 유사한 기능이 JPEG에서 마커 코드에 의해 행해진다. 이들 시작/마커 코드는 코드화된 데이터스트림의 구문의 중요한 부분을 식별한다. 시작 코드 검출기에 의해 수행되는 시작/마커 코드의 분석은 코드화된 데이터를 파싱(parsing)하는 제1스테이지이다.
시작/마커 코드 패턴(start/marker code patterns)들은 전체 비트스트림을 디코딩하지않고 식별될 수 있도록 설계된다. 이와 같이, 본 발명에 따르면 이들은 에러 복구 및 디코더 기동을 지원하기 위하여 사용될 수 있다. 시작 코드 검출기는 코드화된 데이터 구성에서의 에러를 검출하고 디코더의 기동을 지원하기 위한 기능을 제공한다. 시작 코드 검출기의 에러 검출 능력은 디코더의 기동 프로세스와 함께 차후에 보다 상세히 설명된다.
상기 기술된 설명은 주로 머신-종속적인 비트스트림의 특성 및 이것과 본 발명의 어드레싱 특성과의 관계에 관한 것이다. 아래에서는 시작 코드 검출기에서 규격-종속적인 코드화된 데이터의 비트스트림 특성에 대해서 기술된다.
규격 압축 인코딩 시스템 각각은 특정의 압축 사양을 식별하기 위하여 선택된 독특한 시작 코드 구성 또는 영상을 사용한다. 각각의 시작 코드는 또한 시작 코드 값을 가지고 있다. 시작 코드 값은 규격의 언어 내에서 이 시작 코드와 연관된 동작의 형태를 식별하는데 사용된다. 본 발명의 다중-규격 디코더에서, 호환성은 이전에 기술한 제어 토큰 및 DATA 토큰 컨피그레이션에 기초를 두고 있다. 플래그 신호를 포함한 인덱스 신호는 각각의 상태 머신 내에서 회로-발생되며 이후에 적절한 것으로 기술된다.
데이터 워드와는 다른 규격 워드 뿐만 아니라, 이 규격에 포함된 시작 및/또는 마커 코드는, 때때로 머신에서 사용되는 제어 및/또는 DATA 토큰들의 내용을 참조하기 위하여 코드 및/또는 머신-종속적인 코드 사용자의 혼동을 피하기 위하여 영상으로 식별되기도 한다. 또한, 용어 시작 코드(term start code)는 종종 MPEG 및 H.261 시작 코드뿐만아니라 JPEG 마커 코드를 참조하기 위한 일반적인 용어로서 사용된다. 마커 코드 및 시작 코드는 동일한 목적으로 사용된다. 또한 용어 "플러시"는 FLUSH 토큰을 언급하기 위하여, 예를 들어 동사로서, 시작 코드 검출기 쉬프트 레지스터를 플러싱하는 것을 언급하는 경우 ("플러싱된" 신호를 포함하여)에 사용된다. 혼동을 피하기 위하여, FLUSH 토큰은 항상 대문자로 기재한다. 이 용어(동사 또는 명사)의 다른 모든 용법은 소문자이다.
규격-종속적인 코드화된 입력 화상 입력 스트림(standard-dependent coded input picture input stream)은 가변 길이를 갖는 데이터 및 시작 영상으로 구성되어 있다. 시작 영상은 사용자에게 규격에 따라 바로 다음에 오는 데이터에 대하여 어떤 동작을 수행하여야하는지를 말해주는 값을 가지고 있다. 그러나, 다중-규격에 대하여 호환성이 요청되는 본 발명의 다중-규격 파이프라인 프로세싱 시스템에서, 이 시스템은 모든 규격에서 모든 기능을 처리하기 위하여 최적화되어 있다.
따라서, 많은 경우에, 인코딩된 신호 규격 영상값들에 포함된 값들에 호환이 될 뿐만아니라, 당해 기술 분야에 공지된 각각의 규격에 대해 규정된 변수에 의해 표시된 규격의 동작을 에뮬레이트하기 위하여 여러 가지 스테이지를 제어할 수도 있는 독특한 시작 제어 토큰들이 생성되어야만 한다. 이러한 모든 규격들은 이 명세서에서 참조로서 구체화된다.
독립적으로 또는 다른 제어 토큰들과 결합하여 규격 비트스트림에 포함된 비데이터 정보를 에뮬레이트하는 토큰들 사이의 관계를 이해하는 것이 중요하다. 플래그 신호를 포함하여 별도의 인덱스 신호 세트는 각각의 상태 머신에 의해 발생되어 그 상태 머신 내에 있는 몇몇 처리를 다루게된다. 규격에서 전달된 값들은 규격 데이터 및 비데이터 신호의 처리를 에뮬레이트하기 위하여 머신 종속적인 제어신호를 액세스하는데 사용될 수 있다. 예를 들어, slice_start 토큰은 2워드 토큰이고, 상기 기술한 바와 같이 이 후에 이것은 2선식 인터페이스로 입력된다.
본 발명에 따른 시스템으로의 데이터 입력은 디스크, 테이프등의 임의의 적절한 데이터 소스로부터의 데이터 소스일 수 있으며, 이 데이터 소스는 8비트 데이터를 공간 디코더, 시작 코드 검출기(51) (제11도)에 있는 제1기능 스테이지에 제공한다. 시작 코드 검출기는 3개의 쉬프트 레지스터를 포함하고 있다. 제1쉬프트 레지스터는 8비트 폭이고, 그 다음 레지스터는 24비트 폭이며, 그 다음 레지스터는 15비트 폭이다. 각각의 레지스터는 2선식 인터페이스의 일부를 이룬다. 데이터 소스로부터의 데이터는 한 타이밍 사이클 동안에 단일 8비트 타이트로서 제1레지스터에 로딩된다. 그 다음에, 제1레지스터의 내용은 한 번에 한 비트씩 (제2의) 디코드 쉬프트 레지스터로 쉬프트된다. 24 사이클 이후에, 24비트 레지스터는 가득 차게 된다.
8사이클 마다, 8비트 바이트는 제1쉬프트 레지스터로 로딩된다. 각각의 바이트는 값 쉬프트 레지스터(value shift resister)(221) (제20도)로 로딩되며, 8개의 부가 사이클이 이것을 비워 쉬프트 레지스터(231)로 로딩하기 위하여 사용된다.
8개의 사이클이 이를 비우기 위하여 사용되며 따라서 이들 동작이 3번 있은 후, 24 사이클 이후에 24비트 레지스터에는 여전히 3개의 바이트가 있게 된다. 값 디코드 쉬프트 레지스터(230)는 여전히 비어 있다.
24비트 쉬프트 레지스터에 PICTURE_START 워드가 지금도 있다고 가정할 때, 검출 사이클은 PICTURE_START 코드 패턴을 인식하여 시작 신호를 자신의 출력으로서 제공한다. 검출기가 시작을 일단 검출하게 되면, 다음에 오는 바이트는 이 시작 코드와 관련이 있는 값이며, 이것은 현재 값 레지스터(221)에 있다.
검출 쉬프트 레지스터의 내용이 시작 코드로서 식별되었기 때문에, 이 내용은 2선식 인터페이스로부터 제거되어 이들 3바이트를 사용하는 더이상의 처리가 없다는 것을 보장해준다. 디코드 레지스터는 비워지며 값 디코드 쉬프트 레지스터(230)는 이 값이 이러한 레지스터로 쉬프트될 때까지 대기한다.
값 디코드 쉬프트 레지스터의 하위 비트 위치의 내용은 PICTURE_START와 관련된 값을 포함하고 있다. 규격 PICTURE_START 신호에 등가인 공간 디코더는 SD PICTURE_START 신호라고 한다. SD PICTURE_START 신호 자체는 이제 토큰 헤더에 포함되어지며 이 값은 토큰 헤더로의 확장 비트에 포함되어진다.
10. 토큰
본 발명의 실시예에, 토큰은 제어 및/또는 데이타 함수들에 대해 대화형 인터페이싱 메신저 패키지(interactive interfacing messenger packet)의 형태로 된 범용 적응 유닛(universal adptation unit)이며, 인식된 토큰에 응답하여 여러가지 연산을 수행하도록 자신을 리컨피그할 수 있는 스테이지인, 프로세싱 스테이지(reconfigurable processing stage)(RPS)와 함께 사용하도록 적응된다.
토큰들은 여러 가지 함수들을 수행하기 위하여 프로세싱 스테이지들에 대하여 위치 종속적일 수도 있고 위치 독립적(position independent or position dependent)일 수도 있다. 또한, 토큰들은 프로세싱 스테이지에 의해 변경되어 또 다른 함수를 수행하기 위해 파이프라인을 따라 아래로 전달될 수 있다는 점에서를 형성(metamorphic)일 수 있다. 토큰들은 모든 스테이지들과 또는 전부가 아닌 스테이지들과 대화(interact)할 수 있으며, 이 점에서 인접한 및/또는 인접하지 않은 스테이지들과 대화할 수 있다. 토큰들은 어떤 기능에 대해서는 위치 종속적일 수 있고, 다른 기능들에 대해서는 위치 독립적일 수 있으며, 한 스테이지와의 특정 대화(interaction)는 스테이지의 이전의 프로세싱 이력에 의해 조건지워질 수 있다.
PICTURE_END토큰은 다중-규격 디코더에서 화상의 끝을 신호하는 방법이다.
다중-규격 토큰은 규격에 종속적이고 규격에 독립적인 하드웨어 및 제어 토큰들을 사용하여 MPEG, JPEG 및 H.261 데이터 스트림을 단일 디코더로 맵핑시키는 방법이다.
SEARCH_MOBE 토큰은 랜덤 액세스 및 향상된 에러 복구를 가능하게 하는 MPEG, JPEG 및 H.261 데이터 스트림을 검색하기 위한 기술이다.
STOP_AFTER_PICTURE 토큰은 화상의 끝을 신호하고 디코더 파이프라인을 클리어하는, 즉 채널을 변경하는 디코딩을 확실하게 종료하는 방법이다.
또한, 토큰을 패딩하는 것은 고정된 크기, 고정된 폭의 버퍼를 통하여 임의의 수의 비트를 전달하는 방법이다.
본 발명은 토큰 및 2선식 시스템을 사용하는 가변적인 컨피그레이션을 가진 파이프라인 프로세싱 시스템에 관한 것이다. 제어 토큰 및 DATA 토큰을 2선식 시스템과 함께 사용함으로써, 제어 토큰을 사용하지 않는 시스템과 비교하여 확장된 액션 능력을 가질 수 있는 다중-규격 시스템을 용이하게 실시할 수 있다.
제어 토큰은 디코더 프로세서 내의 회로에 의해 발생되며 처리하기 위해 직렬 파이프라인 프로세서로 들어오는 많은 다른 형태의 규격-종속적인 신호들의 동작을 에뮬레이트한다. 사용된 기법은 직렬 프로세서에 의해 처리하기 위해 선택된 다중-규격의 모든 변수를 연구하는 것으로 1) 이들의 유사점, 2) 이들의 차이점, 3) 이들의 필요 및 요구조건 및 4) 직렬 프로세서로 보내지는 모든 규격 신호를 효과적으로 처리하기 위해 알맞은 토큰 기능을 선택하는 것에 주목할 필요가 있다.
제어 토큰 기능은 규격을 에뮬레이트하는 것이다. 제어 토큰 기능은 부분적으로는 규격에 종속적인 신호들 사이의 에뮬레이션/변환으로서 사용되며 파이프라인 프로세서를 통하여 제어 정보를 전송하는 요소(element)로서도 사용된다.
종래의 시스템에서, 전용 머신은 공지된 기술에 따라 규격을 식별하도록 설계되며 마이크로프로세서 인터페이스에 의해 전용 회로를 셋업한다. 마이크로프로세서로부터의 신호들은 전용 다운스트림 구성 요소를 통한 데이터의 흐름을 제어하는데 사용된다. 이 복원 기능의 선택, 타이밍 및 조직은 마이크로프로세서로부터의 신호에 의해 지원받는 고정 논리 회로에 의해 제어된다.
이와 반대로, 본 발명의 시스템은 제어 토큰의 제어하에서 다운스트림 기능스테이지를 구성한다. 필요하고 (또는 필요하거나) 선택적인 제어를 MPU로부터 얻기 위하여 옵션이 제공된다.
토큰들은 복원 회로 파이프라인 프로세서를 통하여 정보를 전달하기 위해 알맞은 포맷을 제공하고 만든다. 이후에 선택되고 바람직한 실시예에서 사용된 설계에서, 토큰의 각각의 워드는 최소 8비트 폭을 가지며 단일 토큰은 하나 이상의 워드에 걸쳐 있다. 토큰의 폭은 변할 수 있으며 어느 비트 수로든지 선택될 수 다. 확장 비트는 토큰이 현재의 워드를 넘어서 확장되는지의 여부, 즉 이것이 토큰의 마지막 워드를 제외한 토큰의 모든 워드에서 이진 1로 세팅되는지를 가리켜준다. 토큰의 첫번째 워드가 0의 확장 비트를 가지는 경우, 이것은 토큰이 단지 하나의 워드 길이를 가진다는 것을 나타낸다.
각각의 토큰은 토큰의 첫 번째 워드의 비트 7에서 시작하는 어드레스 필드에 의해 식별된다. 어드레스 필드는 길이가 가변적이며 잠재적으로 다수의 워드에 걸쳐 있을 수 있다. 바람직한 실시예에서, 어드레스는 더 이상 8비트 보다 더 길지 않다. 그러나, 이것은 본 발명에 대한 한정이 아니라, 이들 토큰을 사용하여 달성 하도록 선택된 프로세싱 단계의 크기에 대한 한정이다. 확장 비트 식별 부호 (extension bit identification label)하에서 워드 1 및 2의 확장 비트가 1이고 이는 부가의 워드가 이후에 오게 된다는 것을 나타낸다는 것에 주의한다. 워드 3에 있는 확장 비트는 0이며, 따라서 이 토큰의 끝임을 나타낸다.
토큰은 또한 가변 비트 길이를 가질 수 있다. 예를 들어, 9비트의 토큰 워드에 확장 비트를 더하여 전체 10비트로 된 것이 있다. 본 발명의 설계에서, 출력 버스는 가변 폭을 갖는다. 공간 디코더로부터의 출력은 9비트 폭을 가지며, 또한 확장 비트가 포함된 경우 10비트의 폭을 갖는다. 바람직한 실시예에서, 이들 잉여 비트를 이용하는 토큰은 DATA 토큰이며 다른 모든 토큰들은 이 잉여비트를 무시한다. 이것은 한정은 아니며 단지 하나의 실시에 불과하다는 것을 이해하여야한다.
DATA 토큰 및 제어 토큰 구성을 사용함으로써, 한 워드에서의 비트의 수의 관점에서 이들 DATA 토큰에 의해 운반되는 데이터의 길이를 변경시킬 수 있다. 예를 들어, DATA 토큰의 워드에서 데이터 비트는 이 직렬 복원 프로세서 전체에 걸쳐 사용되는 랜덤 액세스 메모리를 액세스하는데 사용하기 위한 11비트 또는 10비트 어드레스를 형성하기 위하여 동일한 DATA 토큰의 다른 워드에 있는 데이터 비트와 결합될 수 있다는 것을 논의한 바 있다. 이것은 넓은 범위의 다양성을 용이하게 달성하는 부가적인 가변성의 정도를 제공한다.
이전에 기술한 바와 같이, DATA 토큰은 하나의 프로세싱 스테이지로부터 그 다음 프로세싱 스테이지로 데이터를 운반한다. 따라서, 토큰의 특성은 디코더를 지나감에 따라 변한다. 예를 들어, 공간 디코더로의 입력에서 DATA 토큰은 8비트 워드로 패킹된 비트 직렬 코드화된 비디오 데이터를 운반한다. 여기서, 각각의 토큰의 길이는 제한이 없다. 그러나, 본 발명의 특징의 다양성을 설명하기 위해, 각각의 DATA 토큰은 정확히 64워드를 운반하며 각각의 워드는 9비트 폭을 갖는다.
특히, 규격 인코딩 신호는 다른 길이 메세지가 다른 세기 및 내용의 화상을 인코딩 할 수 있게 한다. 그룹의 첫 번째 화상은 일반적으로 가장 긴 데이터 비트를 운반 하는데, 이는 프로세싱 유닛에 대부분의 정보를 제공하여 가능한 한 많은 정보를 가지고 복원을 시작할 수 있도록 하는 것이 필요하기 때문이다. 나중에 오게되는 워드들은 대체로 길이가 더 짧은데, 이는 스캔 정보 필드상의 제2위치에 대해서 제1워드를 비교하는 차이 신호를 포함하고 있기 때문이다.
워드들은 규격 코딩 시스템에 의해 요구된대로 서로 산재해 있어 (interspersed), 가변적인 데이터 양이 공간 디코더의 입력으로 제공되도록 한다.
그러나, 공간 디코더가 기능한 이후에, 이 정보는 스크린상에 디스플레이하기에 적당한 화상 포맷 속도로 자신의 출력에 제공된다. 공간 디코더의 시간의 관점에서 출력 속도는 NTSC, PAL 및 SECAM등의 전세계적인 여러 가지 디스플레이 시스템과 인터페이스하기 위하여 변할 수 있다. 비디오 포맷터는 이 가변적인 화상 속도를 디스플레이하기에 적당한 일정한 화상 속도로 변환한다. 그러나, 화상 데이터는 여전히 64워드로 구성되는 DATA 토큰에 의해 운반된다.
11. DRAM 인터페이스
단일의 고성능의 컨피그 가능한 DRAM 인터페이스가 3개의 디코더 칩 각각에 사용된다. 일반적으로, 각각의 칩상의 DRAM 인터페이스는 실질적으로 동일하지만 인터페이스는 이들이 어떻게 채널 우선 순위를 처리하는지에 있어서 서로 다르다.
이 인터페이스는 공간 디코더, 시간 더코더 및 비디오 포맷터가 사용하는 외부 DRAM을 직접 구동하도록 설계되어 있다. 일반적으로, 어떤 외부 논리회로, 버퍼 또는 구성 요소도 DRAM 인터페이스를 이들 시스템에 있는 DRAM에 접속할 필요는 없다.
본 발명에 따르면, 인터페이스는 2가지로 컨피그될 수 있다.
1. 인터페이스의 자세한 타이밍은 여러가지 다른 DRAM 타입을 수용하도록 컨피그될 수 있다.
2. DRAM에 대한 데이터 인터페이스의 폭은 다른 응용을 위하여 비용/성능을 절충하여 컨피그될 수 있다.
일반적으로, DRA보 인터페이스는 시스템 내의 3개의 칩 각각에 실시된 규격 독립적인 블럭이다. 다시, 이들은 공간 디코더, 시간 디코더 및 비디오 포맷터이다. 다시 제11도, 제12도 및 제13도를 참조하면, 이들 도면은 DRAM 인터페이스와 공간 디코더, 시간 디코더 및 비디오 포맷터 각각의 나머지 블럭들 사이의 관계를 도시하고 있는 블럭선도를 나타내고 있다. 각각의 칩상에서, DRAM 인터페이스는 이 칩을 외부 DRAM과 접속시킨다. 현재 칩상에 비교적 많은 양의 필요한 DRAM을 제조하는 것이 실용적이지 않기 때문에 외부 DRAM이 사용된다. 주의: 각각의 칩은 자신의 외부 DRAM 및 자신의 DRAM 인터페이스를 갖는다.
또한, DRAM 인터페이스가 압축 규격-독립적인 반면, DRAM 인터페이스는 다수의 규격 H.261, JPEG 및 MPEG 각각을 실시하도록 컨피그되어야 한다. DRAM 인터페이스가 어떻게 다중-규격 동작을 위해 리컨피그되는가는 아래에서 보다 상세히 설명된다.
따라서, DRAM 인터페이스의 동작을 이해하기 위해서는 DRAM 인터페이스와 어드레스 발생기 사이의 관계 및 어떻게 이 둘이 2선식 인터페이스를 사용하여 통신을 하는지를 이해하는 것이 필요하다.
일반적으로, 그 명칭이 의미하듯이, 어드레스 발생기는 DRAM을 어드레스하기 위하여 (예를 들어, DRAM에서 특정 어드레스로부터 판독하거나 또는 그곳으로 기록하기 위하여) DRAM이 필요로하는 어드레스를 발생시킨다. 2선식 인터페이스의 경우, 판독 및 기록은 DRAM 인터페이스가 (파이프라인에서 이전의 스테이지로부터의) 데이터 및 (어드레스 발생기로부터의) 유효 어드레스 모두를 가질 때에만 일어난다.
본 발명에있어서, DRAM 인터페이스는 어드레스 발생기 및 데이터가 통과하는 스테이지의 클럭 모두에 비동기인 클럭으로부터 동작할 수 있다. 특별한 기술이 동작의 이 비동기 특성을 처리하는데 사용되었다.
일반적으로, 데이터는 DRAM 인터페이스와 이 칩의 나머지 사이에서 64 바이트의 블럭 단위로 전송된다 (유일한 예외는 시간 디코더에서의 예측 데이터이다).
전송은 "스윙 버퍼"(swing buffer)라고 하는 장치에 의해 일어난다. 이것은 본질적으로 이중-버퍼 컨피그레이션(double-buffered configuration)으로 동작하는 한쌍의 RAM이며, DRAM 인터페이스가 하나의 RAM을 채우거나 또는 비우는 반면, 칩의 다른 부분은 다른 RAM을 비우거나 또는 채운다. 어드레스 발생기로부터 어드레스를 운반하는 별도의 버스가 스윙 버퍼와 관련되어 있다.
본 발명에서, 각각의 칩은 4개의 스윙 버퍼를 가지지만 이들 스윙 버퍼의 기능은 각각의 경우에 서로 다르다. 공간 디코더에서, 하나의 스윙 버퍼는 코드화된 데이터를 DRAM으로 전송하는데 사용되며, 다른 것은 DRAM으로부터 코드화된 데이터를 판독하는데 사용되고, 세번째 것은 토큰화된 데이터를 DRAM으로 전송하는데 사용되고, 네번째 것은 토큰화된 데이터를 DRAM으로부터 판독하는데 사용된다. 그러나, 시간 디코더에서는 하나의 스윙 버퍼는 인트라 또는 예측 화상을 DRAM으로 기록하는데 사용되고, 두번째 것은 인트라 또는 예측 데이터를 DRAM으로부터 판독하는데 사용되며, 나머지 2개는 전방 예측 및 후방 예측 데이터를 판독하는데 사용된다. 비디오 포맷터에서는, 하나의 스윙 버퍼는 데이터를 DRAM으로 전송하는데 사용되며, 나머지 세개는 DRAM으로부터 데이터를 판독하는데 사용되는데 휘도(Y) 및 적색 및 청색 색차 데이터 (각각 Cr, Cb) 각각에 대하여 하나씩 사용된다.
다음 절은 하나의 기록 스웡 버퍼(write swing buffer)와 하나의 판독 스윙 버퍼(read swing buffer)를 갖는 가상의(hypothetical) DRAM 인터페이스의 동작을 설명한다. 본질적으로, 이것은 공간 디코더의 DRAM 인터페이스의 동작과 동일하다. 이 동작은 제23도에 설명되어 있다.
제23도는 어드레스 발생기(301), DRAM 인터페이스(302) 및 데이터를 전달하는 칩의 나머지 스테이지들 사이의 제어 인터페이스는 모두 2선식 인터페이스라는 것을 나타내고 있다. 어드레스 발생기(301)는 제어 토큰의 수신의 결과로서 어드레스를 발생시키거나 또는 단지 고정된 어드레스 시퀀스를 발생시키거나 한다 (예를 들어, 공간 디코더의 FIFO 버퍼의 경우). DRAM 인터페이스는 어드레스 발생기(301)와 관련된 2선식 인터페이스를 특별한 방식으로 다룬다. 어드레스를 수신할 준비가 되어 있는 경우에는 수용 라인을 하이로 유지하는 대신에, 어드레스 발생기가 유효 어드레스를 공급하기를 기다렸다가 이 어드레스를 처리하고 나서 한 클럭 주기동안 이 수용 라인을 하이로 세팅한다. 이와 같이, 요청/확인응답 (request/acknowledge)(REQ/ACK) 프로토콜을 구현한다.
DRAM 인터페이스(302)의 특징으로는 어드레스 발생기(301) 및 이 데이터를 제공 또는 수용하는 스테이지들과 독립적으로 통신할 수 있다는 것이다. 예를 들어, 어드레스 발생기는 기록 스윙 버퍼 (제24도)에 있는 데이터와 관련된 어드레스를 발생할 수 있지만, 기록 스윙 버퍼가 외부 DRAM에 기록할 준비가 되어 있는 데이터 블럭이 있다고 신호할 때까지는 아무런 동작도 취하지 않는다. 마찬가지로, 기록 스윙 버퍼는 외부 DRAM에 기록할 준비가 되어 있는 데이터 블럭을 포함할 수도 있지만, 어드레스 발생기(301)로부터 적당한 버스를 거쳐 어드레스가 공급될 때까지 아무런 동작도 취하지 않는다. 또한, 기록 스윙 버퍼에 있는 RAM중 하나가 데이터로 가득 채워지기만 하면, 다른 것은 완전히 채워져 데이터 입력이 정체되기(stalled) (2선식 인터페이스 수용 신호가 로우로 세팅됨) 이전에 DRAM 인터페이스 측으로 "스윙 "된다.
본 발명의 DRAM 인터페이스(302)의 동작을 이해하기 위해서는, 적절히 컨피그된 시스템에서, DRAM 인터페이스가 스윙 버퍼와 외부 DRAM(303) 사이에서 적어도 스윙 버퍼와 칩의 나머지 부분사이의 모든 평균 데이터 속도의 합만큼 빠르게 데이터를 전송할 수 있게 된다는 점에 주목하는 것이 중요하다.
각각의 DRAM 인터페이스(302)는 그 다음에 어떤 스윙 버퍼를 사용하게 되는지를 결정한다. 일반적으로, 이것은 "라운드 로빈"(round robin) (즉, 그 다음에 사용되는 스윙 버퍼가 최근에 가장 적게 순번이 왔던 다음 이용가능한 스윙 버퍼가 된다)이거나, 또는 우선 순위 인코더 (즉, 이 경우 어떤 스윙 버퍼가 다른 것보다 더 높은 우선 순위를 갖는다)이다. 이 두가지 경우에 있어서, 리프레쉬 요청 발생기로부터 다른 모든 요청 보다 더 높은 우선 순위를 갖는 부가 요청을 하게 된다.
리프레시 요청(refresh request)은 마이크로프로세서 인터페이스를 통하여 프로그램될 수 있는 리프레시 카운터로부터 발생된다.
이제 제24도를 참조하면, 기록 스윙 버퍼의 블럭선도가 있다. 기록 스윙 버퍼는 두개의 RAM 블럭, RAMI(311) 및 RAM2(312)를 포함한다. 여기에서 보다 더 기술되는 바와 같이, 데이터는 기록 어드레스(313) 및 제어(314)의 제어하에서 이전의 스테이지로부터 RAMI(311) 및 RAM2(312)로 기록된다. RAMI(311) 및 RAM2(312)로부터 데이터는 DRAM(315)으로 기록된다. 여기에서 더 기술되는 바와 같이, 데이터를 DRAM(315)으로 기록할 때, DRAM 행 어드레스(BRAM row address)가 어드레스 발생기에 의해 제공되며, 열 어드레스(column address)는 기록 어드레스 및 제어에 의해 제공된다. 동작시에, 유효 데이터는 입력(316) (data in)에 제공된다. 일반적으로, 데이터는 이전의 스테이지로부터 수신된다. 각각의 데이터가 DRAM 인터페이스로부터 수용되는 대로, RAM1(311)으로 기록되며 기록 어드레스 제어는 RAM1 어드레스를 증가시켜 그 다음 데이터가 RAM1으로 기록될 수 있도록 한다. 더 이상 데이터가 없거나 RAM1이 다 채워질 때까지 데이터는 계속하여 RAM1(311)으로 기록 된다. RAM1(311)이 다 채워진 때에 입력측은 제어를 중지하고 판독측에 신호를 보내어서 RAM1이 이제 판독할 준비가 되었다고 알려준다. 이 신호는 두개의 비동기 클럭 영역 사이를 지나므로 3개의 동기화 플립플롭을 통과한다.
RAM2(312)가 비어 있는 경우에는, 입력측에 도착하는 그 다음 데이터 항목이 RAM2에 기록된다. 그렇지 않은 경우에는, RAM2(312)가 비워진 상태인 경우에 이것이 이루어진다. 라운드 로빈 또는 우선 순위 인코더가 (어느것이 특정 칩에 의해 사용되는지에 따라서) 이제 이 스윙 버퍼가 판독될 차례가 되었음을 나타내는 경우, DRAM 인터페이스는 RAM1(311)의 내용을 판독하고 외부 DRAM(315)에 이들을 기록한다. 그 후 신호가 다시 비동기 인터페이스로 되돌아와서 RAM1(311)이 이제 다시 채워질 준비가 되었음을 나타내준다.
DRAM 인터페이스가 입력측이 RAM2(312)를 채우기 이전에 RAM1(311)을 비워서 이를 "스윙"하는 경우, 스윙 버퍼는 계속하여 데이터를 수용할 수 있게 된다. 그렇지않은 경우, RAM2가 채워진 경우에, 스윙 버퍼는 RAM1이 입력측에 의해 사용하도록 다시 "스윙"될 때까지 자신의 수용 신호를 로우로 세팅하게 된다.
본 발명에 따른 판독 스윙 버퍼의 동작은 입력측과 출력측의 데이터 버스가 뒤바뀐 것을 제외하고는 유사하다.
본 발명의 DRAM 인터페이스는 이용가능한 메모리 대역폭을 최대화하도록 설계되어 있다. 각각의 8 x 8 데이터 블럭은 동일한 DRAM 페이지에 저장된다. 이러한 방식으로, 한 행 어드레스 다음에 많은 열 어드레스가 공급되는 DRAM 고속 페이지 액세스 모드(DRAM fast page access mode)를 충분히 활용할 수 있게 된다. 특히, 행 어드레스는 어드레스 발생기에 의해 공급되는 반면, 열 어드레스는 이하에서 더 논의되는 바와 같이, DRAM 인터페이스에 의해 공급된다.
또한, 외부 DRAM으로의 데이터 버스가 8, 16 또는 32 비트폭이 되도록 할 수 있다. 따라서, 사용되는 DRAM의 양은 특정 응용의 크기 및 대역폭 요건에 매칭될 수 있다.
(공간 디코더상의 DRAM 인터페이스가 정확히 어떻게 동작하는지에 대한)이 예에서, 어드레스 발생기는 DRAM 인터페이스에 판독 및 기록 스윙 버퍼 각각에 대한 블럭 어드레스를 제공한다. 이 어드레스는 BRAM에 대한 행 어드레스로서 사용된다. 열 어드레스중 6 비트는 DRAM 인터페이스 자신에 의해 공급되며 이들 비트는 또한 스윙 버퍼 RAM에 대한 어드레스로서 사용되기도 한다. 스윙 버퍼로의 데이터 버스는 32비트 폭을 갖는다. 그러므로, 외부 DRAM으로의 버스 폭이 32비트보다 작은 경우, 2개 또는 4개의 외부 DRAM 액세스는 그 다음 워드가 기록 스윙 버퍼로부터 판독되기 이전 또는 그 다음 워드가 판독 스윙 버퍼 (기록 및 판독은 외부 DRAM에 대해 전송되는 방향을 말한다)로 기록되기 이전에 행해져야 한다.
시간 디코더 및 비디오 포맷터의 경우에 상황은 더욱 복잡해진다. 시간 디코더의 어드레싱은 이 절에서 논의된 바와 같이 예측 특성 때문에 더욱 복잡하다.
비디오 포맷터의 어드레싱은 비디오 포맷터와 관련한 절에서 논의된 바와 같이 다수의 비디오 출력 규격 특성 때문에 더욱 복잡하다.
이전에 언급한 바와 같이, 시간 디코더는 4개의 스윙 버퍼를 갖는다. 2개는디코딩된 인트라 및 예측 (I 및 P) 화상 데이터를 판독 및 기록하는데 사용된다.
이들은 상기에서 기술한 바와 같이 동작한다. 다른 2개는 예측 데이터를 수신하는데 사용된다. 이들 버퍼는 더욱 흥미롭다.
일반적으로, 예측 데이터는 움직임(motion) 벡터에서 x 및 y로 규정된 것처럼 처리되는 블럭의 위치로부터 오프셋된다. 이와 같이, 일반적으로 검색될 데이터 블럭은 인코딩된 (그리고 DRAM으로 기록된) 데이터의 블럭 경계에 대응하지 않는다. 이는 제25도에 도시되어 있는데, 여기에서 검은 영역은 형성되는 블럭을 나타내는 반면, 점선의 윤곽은 이로부터 예측되는 블럭을 나타낸다. 어드레스 발생기는 움직임 벡터에 의해 규정된 어드레스를 큰 화살표로 표시된 바와 같이 블록 오프셋(정수개의 블럭)으로, 작은 화살표로 표시된 바와 같이 픽셀 오프셋으로 변환한다.
어드레스 발생기에서, 프레임 포인터(frame pointer), 베이스 블럭 어드레스(base block address) 및 벡터 오프셋(fetor offset)은 가산되어 DRAM으로부터 검색되는 블럭의 어드레스를 형성한다. 픽셀 오프셋이 영인 경우 단지 하나의 요청만이 발생된다. x 또는 y 크기에 오프셋이 있는 경우, 2개의 요청, 즉 원래의 블럭 어드레스 및 그 바로 다음의 블럭 어드레스가 발생된다. x 와 y 모두에 오프셋이 있는 경우, 4개의 요청이 발생된다. 검색되는 각각의 블럭에 대하여, 어드레스 발생기는 예에서 잘 설명된 시작 및 정지 어드레스를 산출한다.
제26도에서 검은색 영역으로 나타낸 (1,1)의 픽셀 오프셋을 생각해보자. 어 드레스 발생기는 이 도면에서 A 에서 D의 레이블을 갖는 4개의 요청을 한다. 해결 해야할 문제는 요청된 열 어드레스의 시퀀스를 어떻게 신속히 제공해야 하는가이다. 그 해답은 "시작/정지" 기법을 사용하는 것으로 이것은 이하에서 설명된다.
제26도의 블럭 A를 생각해보자. 판독은 위치 (1,1)에서 시작되어 위치 (7,7) 에서 끝나야 한다. 당분간 한 번에 한 바이트가 판독된다 (즉, 8비트 DRAM 인터페이스)고 가정하자. 좌표쌍에서 x값은 어드레스의 3개의 LSB를 형성하며 y값은 3개의 MSB를 형성한다. x및 y시작 값은 모두 1이며 어드레스 9를 제공한다. 데이터는 이 어드레스로부터 판독되고 x 값은 증가된다. 이 프로세스는 x 값이 그 정지값(stop value)에 도착할 때까지 반복되며 그 시점에서 y 값이 1만큼 증가되어 x 시작값이 다시 로딩되어 어드레스 17을 제공한다. 각각의 데이터 바이트가 판독될 때, x값은 다시 그의 정지값에 도착할 때까지 증가된다. 이 프로세스는 x 및 y값 모두가 이들의 정지 값들에 도착할 때까지 반복된다. 이와 같이, 9, 10, 11, 12, 13, 14, 15, 17, …, 23, 25, …, 31, 33, …, 57, …, 63의 어드레스 시퀀스가 발생된다.
유사한 방식으로, 블럭 B에 대한 시작 및 정지 좌표는 (1,0) 및 (7,0)이고, 블럭 C에 대한 것은 (0,1) 및 (0,7)이며, 블럭 D에 대한 것은 (0,0) 및 (0,0)이다.
그 다음 문제는 이 데이터를 어디에 기록해야 하는 가이다. 분명히, 블럭 A를 볼때, 어드레스 9로부터 판독된 데이터는 스윙 버퍼의 어드레스 0에 기록되어야 하는 반면 어드레스 10으로부터의 데이터는 스웡 버퍼의 어드레스 1에 기록되어야하며 이하 마찬가지이다. 유사하게, 블럭 B의 어드레스 8로부터 판독된 데이터는 스윙 버퍼의 어드레스 15로 기록되어야하고 어드레스 10으로부터의 데이터는 스윙 버퍼의 어드레스 15로 기록되어야한다. 아래 기술된 바와 같이, 이 기능은 매우 간단한 구성을 갖는 것을 알 수 있다.
블럭 A를 살펴보자. 판독의 시작 부분에, 스윙 버퍼 어드레스 레지스터는 정지값의 역으로 로딩된다. y 역 정지값(inverse stop value)은 3 MSB를 형성하고 x 역 정지값은 3 LSB를 형성한다. 이 경우에, DRAM 인터페이스가 외부 DRAM의 어드레스 9를 판독하고 있는 동안 스윙 버퍼 어드레스는 0이다. 스윙 버퍼 어드레스 레지스터는 적당한 예측 어드레싱과 일치되게 그 다음에 외부 DRAM 어드레스 레지스터가 증가될 때 증가된다.
이제까지의 논의는 8비트 DRAM 인터페이스에 촛점을 두고 있다. 16 또는 32비트 인터페이스의 경우에, 약간 수정을 해야 한다. 첫째로, 픽셀 오프셋 벡터는 그것이 16 또는 32 비트 경계를 가리키도록 "클립"(clip)되어야 한다. 우리가 사용하고 있는 이 예에서, 블럭 A의 경우 제1DRAM 판독은 어드레스 0를 가리키고 있고 어드레스 0 내지 3에 있는 데이터가 판독된다. 둘째로, 불필요한 데이터가 제거되어야만 한다. 이것은 모든 데이터를 (이제는 8비트의 경우에 필요했던 것보다 물리적으로 더 커야하는) 스윙 버퍼로 기록하고 오프셋으로 판독함으로써 수행된다. MPEG 하프-펠 보간(half-Pel interpolation)을 수행하는 경우, x 및/또는 y에서 9바이트가 DRAM 인터페이스로부터 판독되어야한다. 이 경우에, 어드레스 발생기는 적당한 시작 및 정지 어드레스를 공급한다. DRAM 인터페이스에 어떤 부가 논리회로가 사용되지만, DRAM 인터페이스가 동작하는 방법에 있어서 근본적인 변경은 없다 .
본 발명의 시간 디코더 DRAM 인터페이스에 관해 마지막으로 주의할 점은, 이 데이터에 대하여 어떤 처리가 필요한지를 알려주는 부가 정보가 예측 필터에 제공되어야만 한다는 것이다. 이것은 아래과 같이 구성되어 있다.
(64, 72 또는 81바이트로 이루어진) 전송의 마지막 바이트를 나타내는 "마지막 바이트" 신호, H.261 플래그, 양방향 예측 플래그, 블럭의 크기(x 및 y로 8 또는 9바이트)를 나타내는 2비트, 및 블럭의 순서를 나타내주는 2비트 숫자.
마지막 바이트 플래그는 데이터가 스윙 버퍼로부터 판독되는 때에 발생될 수 있다. 다른 신호들은 어드레스 발생기로부터 도출되어 DRAM 인터페이스를 통하여 파이프되어(piped) 예측 필터 블럭에 의해 스윙 버퍼로부터 판독될 때 이들이 정확한 데이터 블럭과 관련되도록 한다.
비디오 포맷터의 경우, 데이터는 외부 DRAM으로 블럭 단위로 기록되지만 래스터(raster) 순서로 판독된다. 기록은 공간 디코더에 대하여 이미 기술한 것과 동일하지만, 판독은 조금 더 복잡하다.
비디오 포맷터, 외부 DRAM에 있는 데이터는 적어도 8 데이터 블럭이 단일 페이지에 적합하도록 편성된다. 이들 8블럭은 8개의 연속한 수평 블럭이다. 래스터화(rasterizing)가 있는 때에 8개의 연속한 블럭 각각으로부터 판독하여 스윙 버퍼로 기록하는데 8바이트가 필요하다 (즉, 8개의 블럭 각각에서 동일한 행).
최상위 행(top row)을 생각해 볼 때 (또한 바이트-폭의 인터페이스를 가정할 때), x 어드레스 (3 LSB)는 y 어드레스 (3 MSB)와 마찬가지로 제로로 세팅된다. x 어드레스는 그 다음에 첫번째 8비트 각각이 판독될 때에 증가된다. 이 때에, 어드레스의 상위 부분 (비트 6 및 그 위부분 - LSB = 비트 0)은 증가되고 x 어드레스(3 LSB)는 제로로 세팅된다. 이 프로세스는 64 바이트가 판독될 때까지 반복된다.
외부 DRAM으로 16 또는 32 비트폭의 인터페이스를 가지는 경우, x 어드레스는 1씩 증가하지 않고 단지 2 또는 4씩 각각 증가한다.
본 발명에서, 비록 8 배수의 바이트가 항상 판독되기는 하지만, 어드레스 발생기는 64 이하인 바이트가 판독되어야한다고 DRAM 인터페이스에 신호할 수 있다(이것은 래스터 라인의 처음 또는 끝에서 요구될 수도 있다). 이것은 시작 및 정지 값을 사용하여 달성한다. 시작값은 어드레스의 상위 부분 (비트 6 이상)에 대하여 사용되고 정지값은 판독을 정지하여야하는 때를 나타내는 신호를 발생하기 위하여 시작값과 비교된다.
본 발명에서 DRAM 인터페이스 타이밍 블럭은 시스템 클럭 주기의 1/4의 정확도로 DRAM 신호의 에지를 위치시키기 위하여 타이밍 체인(timing chain)을 사용한다. 위상 동기 루프로부터의 4분 클럭(quadrature clock)이 사용된다. 이들은 결합되어 이론(notional)상의 2x클럭을 형성한다. 그 다음에 임의의 체인이 병렬로된 2x 클럭의 반대 위상에 있는 2개의 쉬프트 레지스터로부터 만들어진다.
무엇보다도, 페이지 시작 사이클에 대하여 하나의 체인이 있고 판독/기록/리프레시 사이클에 대하여 다른 체인이 있다. 각각의 사이클의 길이는 마이크로프로세서 인터페이스를 통하여 프로그램 가능하며, 그 다음에 페이지 시작 체인이 고정 길이를 갖게 되고, 사이클 체인의 길이는 페이지 시작 동안에 적당한 것으로 변경 된다.
리셋하게 되면, 체인들은 클리어되며 펄스가 생성된다. 펄스들은 체인을 따라 전달되어 상태 정보에 의해 DRAM 인터페이스로부터 지시를 받는다. 펄스는 DRAM 인터페이스 클럭을 발생한다. 각각의 DRAM 인터페이스 클럭 주기는 DRAM의 한 사이클에 해당하며 따라서 DRAM 사이클이 다른 길이를 가지게 될 때, DRAM 인터페이스 클럭은 일정한 속도가 아니다.
또한, 부가의 타이밍 체인들은 상기의 체인으로부터의 펄스와 DRAM 인터페이스로부터의 정보를 결합하여 출력 스트로브를 발생시키고 notcas, notras, notwe, notbe와 같은 것을 인에이블한다.
12. 예측 필터
제12도, 제17도, 제18도 및 특히 제12도를 다시 참조하면, 시간 디코더의 블럭선도가 도시되어 있다. 이것은 예측 필터를 포함하고 있다. 예측 필터와 시간 디코더의 나머지 요소들과의 관계는 제17도에 보다 더 상세히 도시되어 있다. 예측 필터의 구조의 중요부분은 제18도 및 제28도에 도시되어 있다. 예측 필터의 동작의 상세한 설명은 "본 발명의 보다 상세한 설명" 절에서 찾을 수 있다.
일반적으로, 본 발명에 따른 예측 필터는 MPEG 및 H.261 모드에서 사용되지만 JPEG 모드에서는 사용되지 않는다. JPEG 모드에서는 시간 디코더는 공간 디코더에서 행해지는 이상의 실질적인 디코딩을 수행하지 않고 데이터를 비디오 포맷터로 그냥 통과시킨다. 제18도를 다시 참조하면, MPEG 모드에서 전방 및 후방 예측 필터는 동일하며 이들은 MPEG 전방 및 후방 예측 블럭을 각각 필터링한다. 그러나, H.261 모드에서는 단지 전방 예측 필터만이 사용되는데, 그 이유는 H.261은 후방 예측을 사용하지 않기 때문이다.
본 발명의 2 개의 예측 필터 각각은 실질적으로 동일하다. 다시 제18도 및 제28도, 특히 제28도를 참조하면, 예측 필터의 구조의 블럭선도를 도시하고 있다. 각각의 예측 필터는 직렬로된 4개의 스테이지로 구성되어 있다. 데이터는 포맷 스테이지(331)로 들어가 즉시 필터링될 수 있는 포맷으로 위치하게 된다. 그 다음 스테이지(332)에서, I-D 예측이 X-좌표에 대하여 수행된다. 필요한 치환이 차원 버퍼 스테이지(dimension buffer stage)(333)에 의해 수행된 이후에, I-D 예측이 스테이지(334)에서 Y-좌표에 대하여 수행된다. 이 스테이지가 어떻게 필터링을 수행하는지에 대해서는 차후에 더욱 상세히 설명된다. 어떤 필터링 동작이 요구되는지는 압축 규격에 의하여 정의된다. H.261의 경우에, 실제로 행해지는 필터링은 저역 필터의 동작과 유사하다.
다시 제17도를 참조하면, 다중-규격 동작은 예측 필터가 MPEG 또는 H.261 필터링을 수행하도록 또는 JPEG 모드로 필터링을 전혀 수행하지 않도록 리컨피그 가능해야 함을 요구한다. 3 칩 시스템의 다른 많은 리컨피그 가능한 특성에서와 마찬가지로, 예측 필터는 토큰에 의해서 리컨피그된다. 또한, 토큰은 어드레스 발생기에 특정 동작 모드를 알려주기 위해서 사용되기도 한다. 이와 같이, 어드레스 발생기는 예측 필터에 MPEG 과 JPEG 사이에서 크게 변하는 요구되는 데이터의 어드레스를 공급할 수 있다.
13. 액세스 레지스터
마이크로프로세서 인터페이스(MPI)에 있는 대부분의 레지스터는 이들과 관련이 있는 스테이지가 정지되는 경우에만 수정될 수 있다. 따라서, 레지스터 그룹은 일반적으로 액세스 레지스터와 관련이 되어 있다. 액세스 레지스터에 있는 영의 값은 이 특정의 액세스 레지스터와 관련된 레지스터 그룹이 수정되어서는 안된다는 것을 나타낸다. 액세스 레지스터에 1을 기록하는 것은 스테이지를 정지시키는 것이 요구된다. 그러나, 이 스테이지는 즉시로 정지할 수 없기 때문에 스테이지 액세스 레지스터는 정지될 때까지 제로의 값을 유지하게 된다.
MPI와 관련되어 있고 MPI에 의해서 기능을 수행하는데 사용되는 어떤 사용자 소프트웨어도 "요청 액세스 레지스터(request access resister)에 1을 기록한 후", 액세스 레지스터로부터 1을 판독할 때까지 대기하여야만 한다. 자신의 액세스 레지스터가 제로로 세팅되어 있는 동안 사용자가 값을 컨피그레이션 레지스터에 기록하게 되면, 그 결과는 정의되지 않는다.
14. 마이크로프로세서 인터페이스
규격 바이트 폭의(standard byte wide) 마이크로프로세서 인터페이스(MPI)는 공간 디코더 및 시간 디코더에서 모든 회로상에서 사용된다. MPI는 여러가지 공간 및 시간 디코더 클럭들과 비동기적으로 동작한다. 차후에 보다 상세히 설명되는 표 A.6.1을 창조하면, 이 인터페이스 상에서 사용되는 여러가지 MPI 신호들이 도시되어 있다. 이 신호의 문자는 입력/출력 열에 도시되어 있고, 신호 명칭은 신호 명칭 열에 도시되어 있으며, 이 신호의 기능의 설명은 설명 열에 도시되어 있다.
MPI 전기 사양은 표 A.6.2를 참조하여 도시되어 있다. 모든 사양은 타입에 따라 분류되어 있으며 이들 타입은 제목 기호열에 도시되어 있다. 이들 기호들이 무엇을 나타내는지에 대한 설명은 변수 열에 도시되어 있다. 실제의 사양은 각각의 최소, 최대 및 단위열에 도시되어 있다.
DC 동작 조건은 표 A.6.3을 참조하면 알 수 있다. 여기에서 열 제목은 테이 블 A.6.2에 대한 것과 동일하다. DC 전기 특성은 표 A.6.4를 참조하여 도시되어 있고, 표 A.6.2 및 A.6.3에 도시된 바와 같은 열 제목을 가지고 있다.
15. MPI 판독 타이밍
MPI 판독 타이밍도의 AC 특성은 제54도와 관련하여 도시되어 있다. 도면의 각각의 라인은 해당 신호 명칭이 붙어 있으며 타이밍은 나노초의 단위로 주어져있다. 완전한 마이크로프로세서 인터페이스 판독 타이밍 특성은 표 A.6.5를 참조로 도시되어 있다. 열 제목 번호는 특징적인 열에 열거한 그 신호의 명칭에 대응하는 신호를 나타내는데 사용된다. MIN 및 MAX로 식별되는 열들은 신호가 존재하는 시간의 최소 길이 및 이 신호를 이용할 수 있는 시간의 최대 양을 제공한다. 단위열은 신호를 기술하는데 사용되는 크기의 단위를 제공한다.
16. MPI 기록 타이밍
MPI 기록 타이밍도의 일반적인 설명은 제54도와 관련하여 도시되어 있다. 이 도면은 MPI 기록 타이밍과 관련된 개별적인 신호 명칭 각각을 도시하고 있다. 신호의 명칭, 특성 및 다른 여러가지 물리적 특성들은 테이블 6.6을 참조하여 도시되어 있다.
17. 키홀 어드레스 장소
본 발명에서, 가장 적게 액세스된 메모리 맵 장소는 키홀 레지스터(keyhole register) 뒷면에 위치하고 있다. 키홀 레지스터는 이와 관련된 2개의 레지스터를 가지고 있다. 제1레지스터는 키홀 레지스터이고 제2레지스터는 키홀 데이터 레지스터이다. 키홀 레지스터는 확장된 어드레스 공간에서 장소를 규정한다. 키홀 데이터 레지스터로의 판독 또는 기록 동작은 키홀 어드레스 레지스터에 의해 규정된 장소를 액세스한다. 키홀 데이터 레지스터를 액세스한 이후에, 관련된 키홀 어드레스 레지스터는 증가된다. 확장 어드레스 공간 내에서 랜덤 액세스는 단지 각각의 액세스에 대하여 키홀 어드레스 레지스터로 새로운 값을 기록해둠으로서만 가능하다. 본 발명에서의 회로는 하나 이상의 키홀 메모리 맵을 가질 수 있다. 그럼에도 불구하고, 다른 키홀들 사이에는 어떤 대화(interaction)도 없다.
18. 화상-끝(picture-end)
다시 제11도를 참조하면, 본 발명에서 사용되는 공간 디코더의 일반적인 블럭선도가 도시되어 있다. PICTURE_END의 기능은 블럭선도를 사용하여 설명된다.
PICTURE_END 기능은 H.261 인코딩된 화상 정보, MPEG 및 JPEG 신호들을 처리할 수 있는 다중-규격 장점을 갖는다.
이전에 기술한 바와 같이, 제11도의 시스템은 이전에 기술한 2선식 인터페이스에 의해 상호 접속되어 있다. 기능적 블럭 각각은 제10도와 관련하여 도시된 상태 머신 컨피그레이션에 따라 동작하도록 배열되어 있다.
일반적으로, 본 발명에 따른 PICTUIE_END 기능은 PICTURE_END 제어 토큰을 발생하는 시작 코드 검출기에서 시작한다. PICTURE_END 제어 토큰은 기동 제어 회로(start-up control circuit)를 거쳐 DRAM 인터페이스로 변경없이 전달된다. 여기서 이 제어 토큰은 DRAM 인터페이스에서 기록 스윙 버퍼를 플러시하는데 사용된다. 스윙 버퍼의 내용은 단지 버퍼가 채워져 있을 때만 RAM으로 기록된다는 것을 상기한다. 그러나, 화상은 이 버퍼가 채워져 있지 않은 시점에서 끝날 수 있기 때문에 화상 데이터가 정체되도록(stuck) 한다. PICTURE_END 토큰은 데이터를 스윙 버퍼로부터 끄집어 낸다.
본 발명은 다중-규격 머신이기 때문에, 이 머신은 압축 규격 각각에 대하여 서로 다르게 동작한다. 특히, 머신은 머신-종속적인 액션 사이클에 따라 동작하는 것으로 기술된다. 압축 규격 각각에 대하여, 총 이용 가능한 액션 사이클의 수는 제어 토큰 및/또는 MPU로부터의 출력 신호의 조합에 의해 선택될 수도 있고 또는 제어 토큰 그 자체의 설계에 의해서 선택될 수도 있다. 이 점에서, 본 발명은 정보를 모든 정보가 업스트림 블럭에서 모아질 때까지 정보가 후속 블럭으로 가는 것을 지연시키도록 조직되어 있다. 시스템은 데이터가 그 다음 스테이지로 전달할 준비가 될 때까지 대기한다. 이와 같이, PICTURE_END 신호는 코드화된 데이터 버퍼로 인가되며, PICTURE_END 신호의 제어 부분은 데이터 버퍼의 내용이 판독되어 허프만 디코더 및 비디오 디멀티플렉서 회로로 인가되도록 한다.
PICTURE_END 제어 토큰의 다른 잇점은, 화상의 끝이 허프만 디코더 및 비디오 디멀티플렉서 회로에 인가된 신호들의 일반적으로 예측된 전 범위 및/또는 갯수를 갖는다할지라도, 허프만 디코더 디멀티플렉서에 의한 사용을 위해 화상의 끝을 식별한다는 것이다. 이 상황에서, 코드화된 데이터 버퍼에 유지된 정보가 전체 화상으로서 허프만 디코더 및 비디오 디멀티플렉서에 인가된다. 이와 같이, 허프만 디코더 및 비디오 디멀티플렉서의 상태 머신은 여전히 시스템 설계에 따라 데이터를 처리할 수 있다.
PICTURE_END 제어 토큰의 또 다른 장점은 코드화된 데이터 버퍼를 완전히 비울 수 있기 때문에, 어떠한 탈락된(stray) 정보도 오프 칩 DRAM 또는 스윙 버퍼에 부적절하게 잔류하고 있지 않게 된다.
PICTURE_END 기능의 또 다른 잇점은 에러 복구에 이를 사용하는 것이다. 예를 들어, 코드화된 데이터 버퍼에 유지된 데이터의 양은 단일 화상과 관련하여 공간 정보를 기술하는데 일반적으로 사용되는 것보다 더 적다고 가정하자. 따라서, 마지막 화상은 스윙 버퍼가 채워질 때까지 데이터 버퍼에 유지되지만, 정의에 의해 버퍼는 결코 채워지지 않는다. 어떤 시점에서, 머신은 에러 조건이 존재한다고 결정한다. 그러므로, PICTURE_END 토큰이 디코딩되어 코드화된 데이터 버퍼에 있는 데이터를 허프만 디코더 및 비디오 포맷터로 인가되도록 할 정도로, 마지막 화상은 디코딩되어 그 정보가 버퍼로부터 제거된다. 따라서, 머신은 에러 복구 모드로 들어가지 않고 성공적으로 코드화된 데이터를 처리하게 된다.
PICTURE_END 토큰 사용의 또 다른 잇점은 직렬 파이프라인 프로세서가 인터럽트되지않은 데이터를 계속 처리한다는 것이다. PICTURE_END 토큰을 사용함으로써, 직렬 파이프라인 프로세서는 예상된 것보다 적은 양의 데이터를 처리되도록 컨피그되어 있어 처리를 계속하게 된다. 일반적으로, 종래 기술의 머신은 에러 조건 때문에 자신을 정지시킨다. 이전에 기술한 바와 같이, 코드화된 데이터 버퍼는 매크로블럭(macroblocks)이 기억 장치 영역에 들어올 때 이를 카운트한다. 또한, 허프만 디코더 및 비디오 디멀티플렉서는 일반적으로 각각의 화상을 디코딩하기 위해 예상된 정보의 양을 알고 있다. 즉, 허프만 디코더 및 비디오 디멀티플렉서의 상태 머신 부분은 각각의 화상 복구 사이클 동안에 처리하게 될 블럭의 수를 알고 있다. 정확한 블럭의 수가 코드화된 데이터 버퍼로부터 도착하지 않은 경우, 일반적으로 에러 복구 루틴이 일어난다. 그러나, PICTURE_END 제어 토큰이 허프만 디코 더 및 비디오 디멀티플렉서를 리컨피그하는 경우, 이 리컨피그레이션은 허프만 디코더 및 비디오 디멀티플렉서에 사실상 자신이 적당한 양의 정보를 처리하고 있다는 것을 말해주기 때문에 계속하여 동작할 수 있다.
제10도를 다시 참조하면, 버퍼 관리기의 토큰 디코더 부분은 시작 코드 검출기에 의해 발생된 PICTURE_END 제어 토큰을 검출한다. 정상적 동작하에서는, 버퍼레지스터는 스윙 버퍼와 관련하여 이전에 논의한 바와 같이 채워지고 비워진다.
또 한편, 데이터로 일부분이 채워진 스윙 버퍼는 완전히 채워지거나 또는 비워져야 할 시간이되었다는 것을 알 때까지는 비워지지 않는다. PICTURE_END 제어 토큰은 버퍼 관리기의 토큰 디코더 부분에서 디코딩되어 일부분이 채워진 스윙 버퍼가 코드화된 데이터 버퍼로 흘러들어가도록 한다. 이것은 궁극적으로 직접 또는 DRAM 인터페이스를 거쳐 허프만 디코더 및 비디오 디멀티플렉서로 전달된다.
19. 플러싱 동작
PICTURE_END 제어 토큰의 또 다른 장점은 FLUSH 토큰과 관련된 기능이다.
FLUSH 토큰은 상태 머신의 리컨피그레이션을 제어하는 것에도 관련이 없고 시스템에 데이터를 제공하는 것에도 관련이 없다. 오히려, FLUSH 토큰은 머신-종속적인 상태 머신에 의해 처리하기 위하여 이전의 부분적인 신호를 종료한다. 상태 머신 각각은 FLUSH 제어 토큰을 처리되지 않는 정보로서 인식한다. 따라서, FLUSH 토큰은 코드화된 데이터 버퍼의 나머지 비어있는 부분 전부를 채워서 정보의 세트 전체가 허프만 디코더 및 비디오 디멀티플렉서로 보내어지도록 하는데 사용된다. 이와 같이, FLUSH 토큰은 버퍼에 대한 패딩과 같다.
허프만 회로에 있는 토큰 디코더는 FLUSH 토큰을 인식하여 FLUSH 토큰이 그곳에 넣어둔 의사 데이터(pseudo data)를 무시한다. 그 다음에, 허프만 디코더는 PICTURE_END 토큰 및 FLUSH 토큰의 도착 이전에 존재하고 있는 것처럼 마지막 화상 버퍼의 데이터 내용에 대하여만 동작한다.
PICTURE_END 토큰만을 사용하는 것 또는 FLUSH 토큰과 결합하여 사용하는 것의 잇점은 허프만 디코더 회로의 리컨피그레이션 및/또는 재구성이다. PICTURE_END 토큰의 도착시에, 허프만 디코더 회로는 통상적으로 마지막 화상을 터코딩하기로 되어 있는 경우보다도 더 적은 정보를 가지게 된다는 것을 안다. 허프만 디코드 회로는 마지막 화상에 포함된 정보의 처리를 종료하고, 이 정보를 DRAM 인터페이스를 통하여 역 모델러로 출력한다. 마지막 화상의 식별시에, 허프만 디코더는 클린업 모드(cleanup mode)로 들어가 그 다음 화상 정보의 도착을 위해 재조정된다.
20. 플러시 기능
본 발명에 따른 FLUSH 토큰은 전 파이프라인 프로세서를 통과하는데 사용되며, 버퍼가 비워지고 다른 회로가 새로운 데이터의 도착을 기다리도록 리컨피그 하는데 사용된다. 특히, 본 발명은 PICTURE_END 토큰, 패딩 워드 및 현재의 화상 형태에 대한 화상 처리가 완료되었음을 직렬 파이프라인 프로세서에 나타내주는 FLUSH 토큰의 조합으로 되어 있다. 그 다음에, 여러가지 상태 머신들이 새로운 처리를 위하여 새로운 데이터의 도착을 기다리도록 리컨피그될 필요가 있다. 또한 FLUSH 토큰은 시스템에 대하여 특수한 리셋으로서 동작한다는 것에 주의한다.
FLUSH 토큰은 그것이 통과할 때 각각의 스테이지를 리셋하지만, 차후의 스테이지가 처리를 계속할 수 있도록 한다. 이렇게 함으로써 데이터 손실을 예방한다. 바꿔 말하면, FLUSH 토큰은 절대적 리셋(absolute reset)과는 반대로 가변적인 리셋(variable reset)이다.
21. STOP_AFTER PICTURE
STOP_AFTER_PICTURE 기능은 자신의 동작 중에 논리적 포인트에 있는 직렬 파이프라인 복원 회로의 처리를 중지시키는데 사용된다. 이 시점에서, PICTURE_END 토큰이 발생되어 데이터가 데이터 입력 라인으로부터 들어오는 것을 완료하여 패딩 동작이 완료되었음을 나타내준다. 패딩 기능은 부분적으로 비어있는 DATA 토큰을 채운다. 그 다음에 FLUSH 토큰이 발생되어 직렬 파이프라인 시스템을 통과하여 모든 정보를 레지스터 밖으로 밀어내어 레지스터를 다시 그들의 중간 대기(neutral stand-by) 상태로 한다. 그 다음에, STOP_AFTER_PICTURE 이벤트가 발생되며, 사용자 또는 시스템이 이 상태를 클리어할 때까지는 더이상 입력을 수용하지 않는다.
즉, PICTURE_END 토큰이 화상의 끝을 신호하는 반면, STOP_AFTER_PICTRUE 동작은 모든 현재의 처리의 끝을 신호한다.
22. 다중-규격 - 검색 모드
본 발명의 다른 특징은 들어오는 비트 스트림을 보도록 직렬 파이프라인 프로세서로의 입력을 리컨피그하는데 사용되는 SEARCH_MODE 제어 토큰을 사용하는 것이다. 검색 모드가 설정되면, 시작 코드 검출기는 압축 규격에서 사용되는 특정 시작 코드 또는 마커만을 검색한다. 그러나, 잘 아는 바와 같이 다른 데이터 비트스트림으로부터의 다른 영상들도 이 목적을 위해 사용될 수 있다.
따라서, 이들 영상은 본 발명 전체에 걸쳐 유사한 프로세싱을 제공하기 위하여 리컨피그레이션 회로와 함께 제어 토큰 및 DATA 토큰의 조합을 사용할 수 있는 다른 실시예로 이를 변경하는데 사용될 수 있다.
본 발명에서의 검색 모드의 사용은 다음과 같은 많은 경우에 편리하다. 1) 데이터 비트스트림의 단절이 생기는 경우, 2) 사용자가 고의로 채널을 변경함으로써 데이터 비트스트림을 단절시키는 경우, 예를 들어, 압축된 디지탈 비디오를 전달하는 케이블을 통한 데이터 도착, 또는 3) 광 디스크 또는 비디오 디스크와 같은 제어 가능한 데이터 소스로부터 고속 전방향 또는 역방향을 사용자가 작동시키는 경우, 일반적으로, 검색 모드는 사용자가 머신이 이러한 인터럽트를 예측하지 못한 경우에 직렬 파이프라인의 정상적인 처리를 인터럽트할 때 편리하다.
임의의 검색 모드가 설정된 경우, 시작 코드 검출기는 머신 독립적인 토큰을 생성하기에 적당한 들어오는 시작 영상들을 찾는다. 규격-종속적인 시작 영상을 인식하기 이전에 시작 코드 검출기로 들어오는 모든 데이터는 의미없는 것으로 버려지며, 머신은 이 정보를 기다리면서 아이들(idling) 상태에 있게 된다.
시작 코드 검출기는 다수의 구성들중 임의의 것도 취할 수 있다. 예를 들어, 이들 구성중 하나는 화상 그룹 또는 보다 더 상위의 시작 코드에 대한 검색을 허용한다. 이 패턴은 시작 코드 검출기로 하여금 모든 입력을 버리도록 하며 group_start 규격 영상을 찾는다. 이와 같은 영상을 식별하는 경우, 시작 코드 검출기는 GROUP_START토큰을 발생하며 검색 모드는 자동적으로 재설정된다.
단일 회로, 허프만 디코더 및 비디오 디멀티플렉스 회로는 CODING_ STANDARD 신호 뿐만 아니라 규격-독립적인 셋-업 신호를 포함하는 입력 신호들의 조합에 대하여 동작한다는 것에 주목할 필요가 있다. CODING_STANDARD 신호는 허프만 디코더 및 비디오 디멀티플렉스 회로에 의해 요청된 들어오는 비트스트림으로부터 직접 정보를 전달한다. 그럼에도 불구하고, 허프만 디코더 및 비디오 디멀티플렉스 회로의 기능은 규격 독립적인 신호 시퀀스의 동작하에 있다.
이 동작 모드는 가장 효율적이기 때문에 선택되었으며 특수한 제어 토큰을 사용하여 실제의 신호를 전달하는 대신에 규격-종속적인 입력을 허프만 디코더 및 비디오 디멀티플렉서로 전달하도록 설계될 수 있다.
23. 역모델러 (INVERSE MODELLER)
역모델링은 세가지 규격 모두의 특징이며 세가지 규격 모두에 대하여 동일하다. 일반적으로, 토큰 버퍼에 있는 DATA 토큰은 양자화된 계수들의 값에 대한 정보, 및 (런 길이 코딩(run length coding)의 한 형태가) 표현된 계수들 사이의 제로의 갯수에 대한 정보를 포함하고 있다. 본 발명의 역 모델러는 토큰을 가지고사용하도록 되어있으며, 단순히 제로의 런에 대한 정보를 확장하여 각각의 DATA 토큰은 필요한 64개의 값을 포함하고 있다. 그 후, DATA 토큰에 있는 값들은 역 양자화기에 의해 사용될 수 있는 양자화된 계수가 된다.
24. 역양자화기
본 발명의 역 양자화기는 디코딩 시퀀스에서 필요한 요소이기는 하지만, 전체 IC 세트가 다중-규격 데이터를 처리할 수 있도록 구현되었다. 또한, 역 양자화기는 토큰을 사용하기에 적합하도록 되어있다. 역 양자화기는 역 모델러와 역 DCT(IDCT) 사이에 있다.
예를 들어, 본 발명에서 역 양자화기에 있는 가산기는 데이터를 IDCT로 이동시키기 이전에 펠 디코드 번호(pel decode number)에 상수를 가산하는데 사용된다.
IDCT는 이 정보를 디코딩하는데 사용되는 각각의 규격에 따라서 변하게 되는 펠 디코드 번호를 사용한다. 이 정보를 적절히 디코딩하기 위하여, 칼 1024가 역 양자화기에 의해 그 데이터를 IDCT로 가져가기 이전에 디코드 번호에 부가된다.
데이터가 IDCT에 도착하기 이전에 이것을 표준화하기 위하여 역 양자화기에 이미 존재하는 가산기를 사용함으로써, 여러가지 규격에 의해 압축된 데이터를 처리하기 위하여 IC에의 부가적인 회로 또는 소프트웨어의 필요성이 제거된다. 다중-규격 동작을 허용하는 다른 동작들은 "후 양자화 함수"(post quantization function)동안에 수행되며 아래에서 논의된다.
데이터를 수반하는 제어 토큰은 디코딩되며, 역 양자화기에 의해 수행될 필요가 있는 여러가지 표준화 루틴들은 이하에서 상세히 식별된다. 이들 "사후 양자화" 기능들은 모두 이중 회로를 피하도록 하여, IC가 다중-규격 인코딩된 데이터를 처리할 수 있도록 구현된다.
25. 허프만 디코더 및 파서
다시 제11도 및 제27도를 참조하면, 공간 디코더는 여러가지 압축 규격이 허프만으로 인코딩된 데이터를 디코딩하기 위한 허프만 디코더(heffman decoder)를 포함하고 있다. 각각의 규격 JPEG, MPEG 및 H.261는 소정의 데이터는 허프만으로 인코딩되도록 요구하는 반면, 각각의 규격이 요청하는 허프만 디코딩은 상당히 다르다. 본 발명의 공간 디코더에서, 각각의 규격에 대하여 하나씩 세개의 별도의 허프만 디코더를 설계 및 제조하기 보다는, 본 발명은 각각의 허프만 디코더의 공통 특성을 식별하여 이들 공통 특성을 단지 한번만 제조하여 귀중한 다이 공간(die space)을 절약한다. 또한, 각각의 허프만 디코더의 더 많은 공통 특성을 다른 규격들에게도 공통되도록 하는 적당한 다중-파트 알고리즘(multi-part algorithm)이 사용된다.
요약하면, 허프만 디코더(321)는 제27도에 도시한 다른 유닛들과 함께 동작한다. 이들 다른 유닛들에는 파서 상태 머신(322), 인시프터(inshifter)(323), 인덱스 투 데이터 유닛(index to data unit)(324), ALU(325) 및 토큰 포맷터(326)가 있다. 상기 기술한 바와 같이, 이들 블럭사이의 접속은 2선식 인터페이스에 의해 관리된다. 이들 유닛의 기능에 대한 보다 상세한 설명은 이후에 더욱 상세하게 기술되며 여기에서의 관심사는 다중-규격 동작을 지원하는 본 발명에 따른 허프만 디코더의 특징에 관한 것이다.
본 발명의 파서 상태 머신은 비디오 파서의 다른 블럭들의 동작을 조정하는 액션을 하는 프로그램 가능한 상태 머신이다. 데이터에 응답하여, 파서 상태 머신은 제어 워드가 작용하는 데이터와 협력하여, 다른 블럭들에 전달되는 제어 워드를 발생시킴으로써 다른 시스템 블럭들을 제어한다. 제어 워드를 관련 데이터와 함께 전달하는 것은 유용할 뿐만아니라 필요 불가결한데, 그 이유는 이들 블럭들은 2선식 인터페이스를 거쳐 접속되어 있기 때문이다. 이와 같이, 데이터 및 제어 모두는 동시에 도착한다. 제어 워드의 전달은 제27도에서 블럭들을 접속하는 데이터 라인(328) 밑에 있는 제어 라인(327)으로 표시되어 있다. 특히 중요한 것은 이 코드워드가 디코딩되는 특정 규격을 식별한다는 것이다.
또한, 허프만 디코더(321)는 소정의 제어 기능을 수행한다. 특히, 허프만 디코더(321)는 데이터 인덱스(324) 및 ALU(325)의 소정의 기능들을 제어할 수 있는 상태 머신을 포함하고 있다. 허프만 디코더에 의한 이들 유닛들의 제어는 블럭-레벨 정보를 적절히 디코딩하기 위해 필요하다. 파서 상태 머신(322)가 이 결정을 하도록 하면 너무 많은 시간을 소모할 것이다.
본 발명에 따른 허프만 디코더의 중요한 특징은 코드화된 데이터 비트를 허프만 디코더로 읽어 들일 때 이들 코드화된 데이터 비트를 반전시킬 수 있다는 것이다. 이것은 H.261 스타일의 허프만 코드를 디코딩하기 위해 필요한데, 그 이유 는 H.261 (및 실질적으로는 MPEG)에 의해 사용되는 특정 형태의 허프만 코드가 JPEG에 의해 사용되는 코드와 반대의 극성을 가지고 있기 때문이다. 인버터를 사용함으로써 실질적으로 동일한 테이블이 세가지 규격 모두에 대하여 허프만 디코더에 의해 사용될 수 있게 된다. 허프만 디코더가 세가지 규격 모두를 구현하는 방법의 다른 특징은 "본 발명의 보다 더 상세한 설명" 절에서 보다 더 상세히 논의된다.
인덱스 투 데이터 유닛(index to data unit)(324)은 다중-파트 알고리즘의 두번째 부분을 수행한다. 이 유닛은 실제로 허프만 디코딩된 데이터를 제공하는 참조 테이블을 포함하고 있다. 테이블에 있는 엔트리들은 허프만 디코더에 의해 발생된 인덱스 번호에 근거하여 편성된다.
ALU(325)는 다중-파트 알고리즘의 나머지 부분들을 구현한다. 특히, ALU는 부호-확장(sign-extension)을 다룬다. 또한, ALU는 벡터 예측 및 DC 예측을 유지하고 있는 레지스터 화일을 포함하고 있으며 이것의 사용법은 예측 필터에 관한 절에서 논의된다. 또한, ALU는 공간 디코더에 의해 디코딩되는 화상의 구조를 거쳐 카운팅하는 카운터를 포함하고 있다. 특히, 화상의 크기는 카운터와 관련된 레지스터로 프로그래밍되고, 이는 "화상의 시작" 및 매크로블럭 코드의 시작의 검출을 용이하게 한다.
본 발명에 따르면, 토큰 포맷터 (TF)(326)는 디코딩된 데이터를 DATA 토큰으로 디코딩한 다음에 공간 디코더에 있는 나머지 스테이지 또는 블럭들로 전달한다.
본 발명에서, 인시프터(323)는 시작 코드 검출기를 통과하는 데이터를 버퍼 링하는 FIFO로부터 데이터를 수신한다. 토큰 절에서 기술된 바와 같이, 인시프터에 의해 수신된 데이터는 일반적으로 2가지 타입, 즉 DATA 토큰 및 시작 코드 검출기에 의해 그들 각각의 토큰으로 교체되는 시작 코드로 되어 있다. 대부분의 데이터가 디코딩을 필요로 하는 DATA토큰임에 주의할 필요가 있다.
인시프터(323)는 허프만 디코더(321)로 데이터를 직렬로 전달한다. 반면에, 인시프터(323)는 제어 토큰을 병렬로 전달한다. 허프만 디코더에서, 허프만 인코딩된 데이터는 다중-파트 알고리즘의 첫 번째 부분에 따라서 디코딩된다. 특히, 특정 허프만 코드는 식별된 다음에 인덱스 번호(index number)로 교체된다.
또한, 허프만 디코더(321)는 제27도에 도시된 다른 블럭들에 의해 특별한 처리를 요하는 소정의 데이터를 식별한다. 이 데이터는 블럭의 끝 및 에스케이프(escape)를 포함하고 있다. 본 발명에서, 인덱스 투 데이터 유닛(324)에서 보다는 허프만 디코더(321)에서 이들을 검출하는 것이 시간을 절약한다.
이 인덱스 번호는 그 다음에 인덱스 투 데이터 유닛(324)으로 전달된다. 본질적으로, 인덱스 투 데이터 유닛은 참조 테이블이다. 알고리즘의 한 특징에 따르면, 참조 테이블은 JPEG에 의해 규정된 허프만 코드 테이블일 뿐이다. 일반적으로, JPEG이 다른 JPEG테이블을 전송하기 위하여 규정한 압축된 데이터 포맷으로 되어 있다.
인덱스 투 데이터 유닛(324)으로부터, 디코딩된 인덱스 번호 또는 다른 데이터는 수반하는 제어 워드와 함께 이전에 기술한 동작을 수행하는 ALU(325)로 전달된다.
ALU(325)로부터, 데이터 및 제어 워드는 토큰 포맷터 (TF)(326)로 전달된다.
토큰 포맷터에서, 데이터는 토큰을 형성하기 위하여 요구되는 대로 제어 워드와 결합된다. 그 후,토큰들은 공간 디코더의 그 다음 스테이지로 전달된다. 이 시점에서 시스템이 사용하게 되는 많은 토큰들이 있다는 것에 주목할 필요가 있다.
26. 역 이산 코사인 변환
본 발명에 따르면, 역이산 코사인 변환(IDCT)은 화상의 DC 성분의 주파수에 관한 데이터를 복원한다(decompress). 특정 화상이 압축되는 경우에, 화상에 있는 광 주파수가 양자화되어, 저장될 필요가 있는 전체 정보 양을 감소시킨다. IDCT는 이 양자화된 데이터를 취하여 다시 주파수 정보로 복원한다.
IDCT는 크기가 8 x 8 픽셀인 화상의 일부분에 대하여 연산한다. 이 데이터에 대하여 수행되는 수학 연산은 데이터를 인코딩하는데 사용된 특정 규격에 의해 대체로 지배된다. 그러나, 본 발명에서는 불필요한 회로의 중복을 피하기 위하여 규격들 사이에 공통인 수학 함수들을 충분히 사용한다.
특정 스케일링 차수(scaling order)를 사용하여 알고리즘의 상위 및 하위 부분들 사이의 대칭성이 증가되므로, 이러한 공통 수학 함수들이 부가적인 회로의 필요를 제거하도록 재사용될 수 있다.
IDCT는 다수의 다중-규격 토큰들에 응답한다. IDCT의 첫 번째 부분은 들어오는 데이터를 체크하여 DATA 토큰들이 처리하기에 적당한 크기가 되도록 한다.
사실, 에러가 너무 크지 않으면, 어떤 경우에는 토큰 스트림은 정정될 수 있다.
27. 버퍼 관리기
본 발명의 버퍼 관리기는 들어오는 비디오 정보를 수신하여 어드레스 발생기에 데이터의 도착 타이밍, 디스플레이 및 프레임 속도(display and frame rates)에 관한 정보를 공급한다. 다수의 버퍼가 프리젠테이션 및 더스플레이 속도(presentation and display rates) 모두를 변경하도록 하는데 사용된다. 일반적으로, 프리젠테이션 및 디스플레이 속도는 인코딩된 데이터 및 정보가 디스플레이되는 모니터에 따라 변한다. 일반적으로, 데이터 도착 속도는 인코딩, 디코딩에서의 에러 또는 데이터를 생성하는데 사용되는 소스 재료(source material)에 따라 변한다. 정보는 버퍼 관리기에 도착하는 경우에 복원된다. 그러나, 데이터는 복원 회로에 대해 유용한 순서로 있지만, 사용되는 특정 디스플레이 유닛에 대해서는 그렇하지 아니하다. 데이터 블럭이 버퍼 관리기로 들어오는 때에, 버퍼 관리기는 어드레스 발생기에 정보를 공급하기 때문에 데이터 블럭은 디스플레이 장치가 사용할 수 있는 순서로 배치될 수 있다. 이것을 하는 데에 있어서, 버퍼 관리기는 들어 오는 데이터 블럭들을 조정하는데 필요한 프레임 속도 변환을 고려하므로, 이들 데이터 블럭들은 사용되는 특정 디스플레이 장치에 표시될 수 있다.
본 발명에서, 버퍼 관리기는 일차적으로 어드레스 발생기에 정보를 공급한다. 그럼에도 불구하고, 그것은 또한 시스템의 다른 요소들과 인터페이스할 필요가 있다. 예를 들어, 입력 FIFO는 토큰을 버퍼 관리기로 전송하고, 버퍼 관리기는 이들 데이터를 기록 어드레스 발생기로 전달하는 인터페이스가 있다.
또한, 버퍼 관리기는 디스플레이 어드레스 발생기와 인터페이스하며, 디스플레이 장치가 새로운 데이터를 디스플레이할 준비가 되어 있는지에 관한 정보를 수신한다. 또한, 버퍼 관리기는 디스플레이 어드레스 발생기가 디스플레이에 대한 버퍼로부터의 정보를 클리어하도록 한다.
본 발명의 버퍼 관리기는 특정 버퍼가 비어있는지, 채워져 있는지, 사용할 준비가 되어 있는지 또는 사용중인지를 추적한다. 또한, 버퍼 관리기는 각각의 버퍼에 있는 특정 데이터와 관련된 프리젠테이션 번호를 추적한다. 이와 같이, 버퍼 관리기는 한 번에 하나의 버퍼만을 디스플레이할 준비가 되도록 함으로써 버퍼의 상태를 부분적으로 결정한다. 버퍼가 일단 디스플레이되면, 버퍼는 "비어있는" 상태가 된다. 버퍼 관리기가 PICTURE_START, FLUSH, 유효 또는 액세스 토큰을 수신 할 때, 버퍼 관리기는 각각의 버퍼의 상태 및 신규 데이터를 수용할 준비가 되어 있는지를 결정한다. 예를 들어, PICTURE_START 토큰은 버퍼 관리기로 하여금 각각의 버퍼를 순환하여 새로운 데이터를 수용할 수 있는 버퍼를 찾도록 한다.
또한, 버퍼 관리기는 수신하는 토큰에 의해 지시된 다중-규격 요건을 처리하
도록 컨피그될 수 있다. 예를 들어, H.261규격에서 데이터는 디스플레이동안에 스킵(skipped)될 수도 있다. 이러한 토큰이 버퍼 관리기에 도착하는 경우, 스킵될 데이터는 저장되어 있는 버퍼로부터 플러싱된다(flushed).
이와 같이, 버퍼를 관리함으로써, 데이터를 인코딩하는데 사용된 압축 규격, 데이터가 디코딩되는 속도, 및 사용되는 디스플레이 장치의 특정한 형태에 따라 데이터가 효과적으로 디스플레이될 수 있다.
상기한 기술한 내용은 당해 기술 분야에서 통상의 지식을 가진자가 본 발명의 부수적 특징, 목적 및 장점 모두를 가지고 본 발명을 실시할 수 있도록, 상세하게, 본 발명의 여러 가지 측면의 전체적 개념, 시스템 구현 및 동작을 적절히 기술한 것으로 생각된다. 그러나, 본 발명 및 본 발명의 여러 가지 실시예의 특정의 상업적 실시와 관련한 부가적인 설명을 보다 상세하고 깊이 있게 하고, 더 나아가서 이해를 용이하게 하기 위해서는 아래의 추가 설명 및 기술이 보다 더 바람직하다.
이것은 다중-규격 비터오 디코더 칩-세트(multi-standard video decoder chip-set)에 대한 보다 상세한 설명이며, 세 개의 주요 A, B 및 C절로 나누어져 있다.
다시, 설명의 구성, 명확함 및 편의를 위하여, 이 부가적인 설명은 아래의 절들에서 시작된다.
· 칩-세트에 있는 칩들에 공통적인 특징에 대한 설명
· 토큰
· 2선식 인터페이
· DRAM 인터페이스
· 마이크로프로세서 인터페이스
· 클럭
· 공간 디코더 칩의 설명
· 시간 디코더 칩의 설명
A.1절
이 첫번째 설명 절은 칩-세트를 사용하는 것과 관련한 전기 설계 문제의 대부분을 포함하고 있다.
A.1.1 인쇄 협약(typographic convention)
작은 세트의 인쇄 협약은 몇 가지 종류의 정보를 강조하는데 사용된다.
토큰의 명칭
권선_명칭 활성 하이 신호
권선_명칭 활성 로우 신호
레지스터_명칭
A.2절 비디오 디코더 패밀리
· 30 MHz 동작
· MPEG, JPEG 및 H.261 디코드
· 코드화된 데이터 속도 25Mb/s
· 비디오 데이터 속도 21MB/s
· MPEG 해상도 704 x 480, 30Hz, 4:2:0
· 유연한 크로마 샘플링 포맷
· 전 JPEG 베이스라인 디코딩
· 비접착성(glue-less) 페이지 모드 DRAM 인터페이스
· 208핀 PQFP 패키지
· 독립적으로 코드화된 데이터 및 디코더 클럭
· MPEG 화상 시퀀스의 재배열
비디오 디코더 패밀리는 고해상도 디지탈 비디오 디코더를 구현하는데 낮은 칩 카운트 해답(low chip count solution)을 제공한다. 칩-세트는 현재 3가지 서로다른 비디오 및 화상 코딩 시스템, 즉 JPEG, MPEG 및 H.261을 지원하기 위하여 컨피그 가능하다.
전 JPEG 베이스라인 화상 디코딩이 지원된다. 720 x 480, 30Hz, 4:2:2 JPEG 인코딩된 비디오가 실시간으로 디코딩될 수 있다.
CIF (공통 교환 포맷)(common interchange format) 및 QCIF H.261 비디오가 디코딩될 수 있다. 740 x 480, 30Hz, 4:2:0까지의 포맷을 갖는 전 특성 MPEG 비디오가 디코딩될 수 있다.
주의: 상기 기술한 값은 단지 예시적인 것이고, 일예이며 결코 본 발명의 실시예에 제한을 가하기 위한 것이 아니다. 따라서, 다른 값 및/또는 범위들이 사용될 수 있다는 것은 자명하다.
A.2.1 시스템 구성
A.2,1.1 출력 포맷팅
아래에서 주어진 각각의 예에서, 어떤 형태의 출력 포맷터는 공간 디코더 또 는 시간 디코더의 출력에 제공된 데이터를 취하여 이를 컴퓨터 또는 더스플레이 시스템에 대하여 재포맷(reformat)하는데 필요하게 된다. 이 포맷팅의 상세한 내용은 응용에 따라서 변동하게 된다. 간단한 경우에, 필요한 모든 것은 디코더 칩에 의해 출력된 블럭 포맷된 데이터를 취하여, 이를 래스터 순서로 메모리에 기록하기 위한 어드레스 발생기이다.
영상 포맷터는 넓은 범위의 출력 포맷팅 기능을 제공하는 단일 칩 VLSI 장치이다.
A.2.1.2 JPEG 정지 화상 디코딩
오프-칩 DRAM이 없는 단일 공간 디코러는 신속하게 베이스라인(baseline)JPEG 영상을 디코딩할 수 있다. 그러나, 디코딩될 수 있는 영상 크기는 사용자에 의해 제공된 출력 버퍼의 크기에 의해 제한될 수 있다. 출력 포맷터의 특성은 지원될 수 있는 크로마 샘플링 포맷 및 컬러 공간을 제한할 수도 있다.
A.2.1.3 JPEG 비디오 디코딩
오프-칩 DRAM을 공간 디코더에 부가함으로써 JPEG 인코딩된 비디오 화상을 실시간으로 디코딩할 수 있게 된다. 필요한 버퍼의 크기 및 속도는 비디오 및 코드화된 데이터 속도에 달려있다. 시간 디코더는 JPEG 인코딩된 비디오를 디코딩하는데 필요하지 않다. 그러나, 시간 디코더가 다중-규격 디코더 칩-세트(multi-standard decoder chip-set)에 존재하는 경우, 시스템이 JPEG 동작을 위해 구성된 때에는 이것은 단지 데이터를 변경하거나 수정하지 않고 시간 디코더를 통과시킬 뿐이다.
A.2.1.4 H.261 디코딩
공간 디코더 및 시간 디코더는 모두 H.261 비디오 디코더를 구현하는데 필요하다. 이 두 장치상의 DRAM 인터페이스는 적당한 동작에 필요한 DRAM의 양이 작은 화상 포맷으로 낮은 데이터 코드화 속도로 동작하는 경우 감소될 수 있도록 컨피그 될 수 있다. 일반적으로, 단일 4Mb (예를 들어, 512k x 8) DRAM은 공간 디코더 및 시간 디코더 각각에 의해 필요해진다.
A.2.1.5 MPEG 디코딩
MPEG 동작에 필요한 컨피그레이션은 H.261에 대한 것과 동일하다. 그러나, 당해 기술 분야에서 통상의 지식을 가진자에게 자명한 바와 같이, 더 큰 DRAM 버퍼가 MPEG에서 가능한 더 큰 화상 포맷을 지원하기 위해 필요할 수도 있다.
A.3절 토큰
A.3.1 토큰 포맷
본 발명에 따르면, 토큰은 디코더 칩-세트를 통하여 정보를 전달하기 위해 확장 가능한 포맷(extensible format)을 제공한다. 본 발명에서 토큰의 각각의 워드가 최소한 8비트 폭을 갖고 있지만, 당해 기술 분야에서 통상의 지식을 가진자에게는 상기 워드가 임의의 폭을 가질 수 있다는 것은 자명할 것이다. 또한, 단일 토큰이 하나 이상의 워드에 확장될 수 있으며, 이것은 각각의 워드에 있는 확장 비트를 사용하여 달성한다. 토큰에 대한 포맷은 테이블 A.3.1에 요약되어 있다.
확장 비트는 토큰이 다른 워드로 계속되는지를 나타내준다. 이것은 마지막로 워드를 제외한 토큰 내의 모든 워드에서 1로 세팅되어 있다. 토큰의 첫 번째 워드가 확장 비트 0을 가지는 경우, 이것은 이 토큰이 단지 하나의 워드 길이를 갖는다는 것을 나타내준다.
각각의 토큰은 토큰의 첫번째 워드의 비트 7에서 시작하는 어드레스 필드에 의해 식별된다. 어드레스 필드는 가변길이를 가지며 잠재적으로 다수의 워드에 걸쳐 있을 수 있다 (현재의 칩에서는 어떤 어드레스도 8비트 이상의 길이를 가지고 있지 않으나, 당해 기술 분야에서 통상의 지식을 가진자에는 이 어드레스가 임의의 길이를 가질 수 있다는 것은 자명하다).
어떤 인터페이스들은 8비트 이상의 데이터를 전송한다. 예를 들어, 공간 디코더의 출력은 9비트 폭을 갖는다 (확장 비트를 포함하여 10비트임). 이 잉여 비트를 이용하는 유일한 토큰은 DATA 토큰이다. DATA 토큰의 시스템의 특정 장소에서 처리를 수행하는데 필요한 비트를 가질 수 있다. 다른 모든 토큰들은 잉여 비트를 무시한다.
A.3.2 DATA 토큰
DATA 토큰은 하나의 프로세싱 스테이지로부터 다음으로 데이터를 운반한다. 그 결과, 이 토큰의 특성은 디코더를 통과할 때에 변하게 된다. 또한, DATA 토큰에 의해 운반된 데이터의 의미는 DATA 토큰이 시스템 내에서 어디에 있느냐에 달려 있다. 즉 데이터는 위치 종속적(position dependent)이다. 이 점에서, 데이터는 DATA 토큰이 공간 디코더에서 어디에 있느냐에 따라서 주파수 영역 또는 펠 영역 데이터일 수도 있다. 예를 들어, 공간 디코더의 입력에서 DATA 토큰은 8비트 워드로 팩된(packed) 비트 직렬 코드화된 비디오 데이터를 운반한다. 이 시점에서, 각 각의 토큰의 길이에 대한 어떤 제한도 없다. 그러나, 이와 반대로 공간 디코더의 출력에서는 각각의 DATA 토큰은 정확히 64 워드를 전달하며 각각의 워드는 9비트 폭을 갖는다.
A.3.3 토큰으로 포맷된 데이터의 사용
어떤 응용에서는, 디코더 또는 칩 세트의 입력 또는 출력에 직접 접속되는 회로가 필요할 수도 있다. 대부분의 경우에, DATA 토큰을 집합시켜 동기화 정보 (PICTURE=START와 같은 것)를 제공하는 몇몇 토큰을 검출하는 것으로 충분하다.
이 점에서, 이후의 A.16절 "공간 디코더의 출력 접속" 및 A.19절 "시간 디코더의 출력 접속"을 참조한다.
상기에서 논의한 바와 같이, 언제 각각의 신규 토큰이 시작하는지를 식별하기 위해서는 확장 비트에서의 액션을 관찰하는 것으로 충분하다. 다시, 확장 비트는 현재 토큰의 마지막 워드에 신호를 보낸다. 또한, 어드레스 필드는 이 토큰을 식별하기 위해 테스팅될 수 있다. 불필요한 또는 인식되지 않은 토큰은 그 내용을 인식하지 않고서도 소실될 (및 버려질) 수 있다. 그러나, 인식된 토큰은 적당한 액션이 일어나게 한다.
또한, 공간 디코더로의 데이터 입력은 코드화된 데이터의 바이트로서 공급될수도 있고 또는 DATA 토큰으로서 공급될 수도 있다 (절 A.10 "코드화된 데이터 입력" 참조). 코드화된 데이터 포트를 거쳐 또는 마이크로프로세서 인터페이스를 거쳐 토큰들을 공급하는 것은 디코더 칩 세트의 많은 특징들이 데이터 스트림으로부터 컨피그될 수 있도록 한다. 이것은 마이크로프로세서 인터페이스를 통하여 구성을 행하는 것에 대한 대안을 제공한다.
표 A.3.1 토큰의 요약
A.3.1 토큰의 요약(계속)
A.3.4 토큰의 설명
이 절은 본 발명에 따른 공간 디코더 및 시간 디코더 칩에서 구현된 토큰들에 대한 문서이다. 표 A.3.2 참조
주의 :
. 표시된 모든 정수들이 부호를 갖지 않은 한
. "r"은 현재 예비용이며 값 0을 갖는 비트를 나타낸다.
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(1/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(2/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(3/9)
표 A.3.2 공간 디코드 및 시간 디코더에서 구현된 토큰들(4/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(5/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(6/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(7/9)
표 A.3.2 공간 디코드 및 시간 디코더에서 구현된 토큰들(8/9)
표 A.3.2 공간 디코더 및 시간 디코더에서 구현된 토큰들(9/9)
A.3.5 토큰에서 신호되는 번호
A.3.5.1 성분 식별 번호
본 발명에 따르면, 성분 ID 번호는 컬러 성분을 규정하는 2비트 정수이다. 일반적으로, 이 2비트 필드는 DATA 토큰의 헤더 부분으로서 위치한다. MPEG 및 H.261에 있어서, 이 관계는 표 A.3.3에 설명한다.
표 A.3.3 MPEG 및 H.261에 대한 성분 ID
JPEG의 경우, JPEG이 사용될 수 있는 컬러 성분에 제한을 두지 않기 때문에 상황은 보다 더 복잡하다. 디코더 칩은 각각의 스캔에서 4가지 다른 컬러 성분을 허용한다. ID는 컬러 성분의 사양이 디코더에 도착할 때 순차적으로 할당된다.
A.3.5.2 수평 및 수직 샘플링 번호
4 컬러 성분 각각에 대하여, 매크로블럭 단위로 수평 및 수직으로 배열된 블럭의 수에 대한 사양이 있다. 이 사양은 블럭의 수보다 하나 작은 2비트 정수로 구성되어 있다.
예를 들어, 4:2:0인 MPEG (또는 H.261)에서 크로마 샘플링(chroma sampling)(제36도) 및 성분 ID는 표 A.3.4에서와 같이 할당된다.
표 A.3.4 4:2:0 MPEG에 대한 샘플링 번호
JPEG 및 4:2:0 크로마 샘플링의 경우, 성분 대 성분 ID의 할당은 응용에 따라 다르다. A.3.5.1 참조). JPEG은 4:2:2 데이타를 처리하는 경우 자신의 매크로 블럭에 대하여 2:1:1 구조를 필요로함을 주목할 필요가 있다. 표 A.3.5 참조.
표 A.3.5 4:2:2 JPEG에 대한 샘플링 수
A.3.6 특정 토큰 포맷
본 발명에 따르면, DATA 토큰 및 QUANT_TABLE 토큰과 같은 토큰들은 디코더 칩-세트 내에서 "확장된 형태(extended form)"로 사용된다. 확장된 형태로 토큰은 어떤 데이타를 포함한다. DATA 토큰의 경우, 이들은 코드화된 데이타 또는 픽셀 데이타를 포함할 수 있다. QUANT_TABLE 토큰의 경우, 이들은 양자화 테이블 정보를 포함한다.
또한, 이들 토큰의 "비확장 형태(non-extended form)"는 본 발명에서는 "비어있음(empty)"으로 정의된다. 이 토큰 포맷은 동일한 토큰의 확장 버전에 의해 차후에 채워질 수 있는 토큰 스트림에 장소를 제공한다. 이 포맷은 주로 인코더에 적용 가능하므로, 여기서는 더 이상 언급하지 않는다.
표 A.3.6 다른 규격들에 대한 토큰들
A. 9절 공간 디코더
* 30 MHz 동작
* MPEG, JPEG 및 H.261 디코드
* 코드화된 데이타 속도 25 Mb/s
* 비디오 데이타 속도 21 MB/s
* 플렉시블 크로마 샘플링 포맷
* 전 JPEC 베이스라인 디코딩
* 비접착 DRAM 인터페이스
* 단일 +5V 전원
* 208 핀 PQFP 패키지
* 최대 전력 소비 2.5W
* 독립 코드화된 데이타 및 디코더 클럭
* 표준 페이지 모드 DRAM사용
공간 디코더(spatial decoder)는 다양한 JPEG, MPEG 및 H.261 화상 및 비디오 디코딩 응용 분야에 사용되는 컨피그 가능한 YLSI 디코더 칩이다.
오프-칩(off-chip) DRAM이 없는 최소 컨피그레이션에 있어서, 공간 디코더는 단일 칩 고속 JPEG 디코더이다. DRAM을 추가하는 것에 의해 공간 디코더가 JPEG 인코딩된 비디오 화상을 디코딩할 수 있게 된다. 720 x 480, 30Hz, 4:2:2 "JPEG 비디오"를 실시간으로 디코딩할 수 있다.
시간 디코더(temporal decoder)에 의해, 공간 디코더를 H.261 및 MPEG(또한 JPEG)을 디코딩하기 위해 사용할 수 있다. 704 x 480, 30Hz, 4:2:0 MPEG 비디오를 디코딩할 수 있다.
또한, 상기 값들은 본 발명에 따른 하나의 실시예의 단지 예시적인 것이며, 본 발명에 따른 하나의 실시예에 대한 전형적인 값의 제한에 의해 필요한 것이 아니다. 따라서, 당해 기술 분야에서 통상의 지식을 가진 자에게는 다른 값 /또는 범위를 사용할 수 있다는 것은 자명하다.
A.9.1 공간 디코더 신호
테이블 A.9.1 공간 디코더 신호(계속)
테이블 A.9.2 공간 디코더 테스트 신호
테이블 A.9.3 공간 디코더 핀 배치(계속)
A.9.1.1 "nc" 비접속 핀
테이블 A.9.3에서 nc가 붙은 핀들은 현재 사용되지 않으므로 이들 핀들은 비접속 상태로 둔다.
A.9.1.2 VDD 및 GND 핀
당해 기술 분야에서 통상의 지식을 가진자라면 잘 알 수 있는 바와 같이, 마련된 모든 VDD 및 GND 핀은 적당한 전원에 접속시켜야 한다. 모든 VDD 및 GND핀을 정확히 사용하지 않으면, 정확한 장치 동작을 보장할 수 없다.
A.9.1.3 정상 동작을 위한 테스트 핀 접속
내부 테스트용으로 공간 디코더에 9개 핀을 마련해 두었다.
테이블 A.9.4 디폴트 테스트 핀 접속
A.9.1.4 정상 동작을 위한 JTAG 핀
A.8.1절을 참조하기 바란다.
A.9.2 공간 디코더 메모리 맵
테이블 A.9.5 공간 디코더 메모리 맵의 개요
테이블 A.9.6 인터럽트 서비스 영역 레지스터
테이블 A.9.7 시작 코드 검출기 및 입력 회로 레지스터
테이블 A.9.8 버퍼 기동 레지스터
테이블 A.9.9 DRAM 인터페이스 컨피그레이션 레지스터
테이블 A.9.10 버퍼 관리기 액세스 및 키홀 레지스터
테이블 A.9.11 버퍼 관리기 확장 어드레스 공간
테이블 A.9.12 비디오 디멀티플렉서 레지스터
테이블 A.19.13 비디오 디멀티플렉서 확장 어드레스 공간
테이블 A.9.14 역양자화기 레지스터
테이블 A.9.15 Iq 테이블 확장 어드레스 공간
A.10절 코드화된 데이타 입력
본 발명에 따른 시스템은 어떤 비디오 규격이 처리를 위해 입력되는 가를 알아야 한다. 그 후, 시스템은 기존의 토큰 또는 생(raw) 바이트 데이타를 수용할 수 있고, 그 후 이것은 시작 코드 검출기(Start Code Detector)에 의해 토큰에 위치한다.
따라서, 코드화된 데이타 및 구성 토큰을 두개의 루트, 즉
.코드화된 데이타 입력 포트
·마이크로프로세서 인터페이스(MPI)
를 거쳐 공간 디코더로 공급할 수 있다.
어느 루트를 사용할 것인 가의 선택은 응용 및 시스템 환경에 좌우된다. 예를 들면, 낮은 데이타 속도에서는 더코더 칩-세트를 제어하고 시스템 비트스트림 디멀티플렉싱을 하기 위해 하나의 마이크로프로세서를 사용하는 것이 가능해야 한다. 이 경우, MPI를 거쳐 코드화된 데이타 입력을 하는 것이 가능하다. 또한, 높은 코드화된 데이타 속도는 코드화된 데이타를 코드화된 데이타 포트를 거쳐 공급할 것을 필요로 한다.
일부의 응용에서는 MPI와 코드화된 데이타 포트 입력의 혼합을 사용하는 것이 바람직하다.
A.10.1 코드화된 데이타 포트
테이블 A.10. 코드화된 데이타 포트 신호
본 발명에 따른 코드화된 데이타 포트는 두개의 모드, 즉 토큰 모드와 바이트 모드에서 동작할 수 있다.
A.10.1.1 토큰 모드
본 발명에 있어서, byte_mode가 로우이면, 코드화된 데이타 포트는 정상 방식으로 토큰 포트로서 동작하고 coded_valid 및 coded_accept의 제어하에 토큰을 수용한다. 이 인터페이스의 전기적 동작의 상세인 A.4절을 참조하기 바란다.
신호 byte_mode는 data[7:0], coded_extn 및 coded_valid, 즉 coded_clock의 상승 에지와 동시에 샘플링된다.
A.10.1.2 바이트 모드
그러나, byte_mode가 하이이면, 데이타의 바이트는 두개의 와이어 인터페이스 제어 신호, 즉 coded_valid 및 coded_accept의 제어하에 data[7:0]으로 전송된다. 이 경우, coded_extn은 무시된다. 바이트는 입력 모드가 변경될 때까지 DATA 토큰으로 칩 상에서 순차적으로 어셈블링된다.
1) 토큰 모드로 공급된 토큰의 최초 워드 ("헤드").
2) 공급된 토큰의 마지막 워드 (coded_extn은 로우로 됨).
3) 바이트 모드로 공급된 데이타의 최초 바이트. 새로운 DATA 토큰은 칩 상에서 자동적으로 생성된다.
A.10.2 MPI를 통한 데이타 공급
토큰은 코드화된 데이타 입력 레지스터를 액세스함으로써 MPI를 거쳐 공간 디코더로 공급될 수 있다.
A.10.2.1 MPI를 통한 토큰 기록
본 발명의 코드화된 데이타 레지스터는 효과적인 데이타 전송을 허용하도록 메모리 맵에서 두 개의 바이트로 분류된다. 8개의 데이타 비트, 즉 coded_data[7:0]는 제1위치에 있고, 제어 레지스터, 즉 coded_busy, enable_mpi_input 및 coded_extn은 제2위치에 있다 (테이블 A.9.7 참조)
MPI를 거쳐 토큰 입력에 대하여 구성될 때, 현재 토큰은 coded_data[7:0]에 값이 기록될 때마다 현재 coded_extn 값으로 확장된다. 어떤 토큰의 마지막 워드가 coded_data[7:0]에 기록되기 전에 coded_extn을 0으로 세팅하는 것은 소프트웨어 때문이다.
예를 들면, DATA 토큰은 coded_extn에 1을 기록한 후 coded_ data[7:0]에 0 x 04를 기록하는 것에 의해 기동된다. 그 후 이 새로운 DATA 토큰의 기동은 처리를 위해 공간 디코더로 입력된다.
새로운 8비트값이 coded_data[7:0]에 기록될 때마다, 현재 토큰이 확장된다. 현재 토큰의 종료시, 예를 들면 다른 토큰을 유입하기 위해 coded_extn은 다시 액세싱되기만 하면 된다. 현재 토큰의 마지막 워드는 coded_extn에 0을 기록한 후 현재 토큰의 마지막 워드를 coded_data[7:0]에 기록하는 것에 의해 표시된다.
테이블 A.10.2 코드화된 데이타 입력 레지스터
coded_data[7:0]에 기록하기 전마다, 인터페이스가 더 많은 데이타를 수용할 준비가 되어 있는 가를 알아보기 위해 coded_busy를 검사해야 한다.
A.10.3 입력 모드 사이의 전환
적절한 예방 조치가 주어지면, 데이타 입력 모드를 동적으로 전환할 수 있다. 일반적으로, 어떤 하나의 루트를 통한 토큰의 전송은 모드 전환전에 완료되어야 한다.
테이블 A.10.3 스위칭 데이타 입력 모드
바이트 모드로 공급된 첫 번째 바이트에 의해 DATA 토큰 헤더가 칩상에서 생성된다. 그 후, 입력 모드가 변경될 때까지 바이트 모드로 전송된 임의의 다른 바이트는 이 DATA 토큰에 첨부된다. 상기하면, DATA 토큰은 필요한 만큼의 비트를 포함할 수 있다.
MPI 레지스터 비트, 즉 coded_busy 및 신호, 즉 coded_accept는 어떤 인터이스 상에서 공간 디코더가 데이타를 수용하는 가를 나타낸다. 이들 신호의 정확한 준수에 의해 데이타가 손실되지 않는 것이 보장된다.
A.10.4 코드화된 데이타의 수용 속도(Rate of accepting coded data)
본 발명에서, 입력 회로는 토큰을 시작 코드 검출기로 전달한다 (A.11절 참조). 시작 코드 검출기는 DATA 토큰 비트에서 데이타를 직렬로 분석한다. 검출기의 정상적인 프로세싱 속도는 (coded_clock의) 클럭 사이클당 1비트이다. 따라서, 통상적으로 coded_clock의 8사이클마다 1바이트의 코드화된 데이타를 디코딩한다.
그러나, 예를 들면, non-DATA 토큰이 공급될 때 또는 시작 코드를 코드화된 데이타에서 만날 때, 잉여의 처리 사이클이 필요할 때가 있다. 이러한 이벤트가 발생할 때, 시작 코드 검출기는 단시간 동안 더 많은 정보를 수용할 수 없다.
시작 코드 검출기 다음에, 데이타는 논리적으로 코드화된 제1데이타 버퍼로입력된다. 이 버퍼가 차면, 시작 코드 검출기는 더 많은 정보를 수용할 수 없게된다.
따라서, 시작 코드 검출기가 더 많은 정보를 수용할 수 없는 동안, 코드화된데이타 포트 상으로 또는 MPI를 거쳐 더 이상의 코드화된 데이타(또는 다른 토큰)이 수용되지 않는다. 이것은 신호 coded_accept 및 레지스터 coded_busy의 상태에 의해 지시된다.
coded_accept 및/또는 coded_busy를 사용하는 것에 의해, 사용자가 코드화된 정보를 상실하지 않는 것이 보장된다. 그러나, 당해 기술분야에서 통상의 지식을 가진자라면 잘 알 수 있는 바와 같이, 시스템은 공간 디코더가 데이타를 수용할 수 없으면 새로 도착하는 코드화된 데이타를 버퍼 (또는 도착하는 새로운 데이타를 정지)시킬 수 있어야 한다.
A.10.5 코드화된 데이타 클럭
본 발명에 따르면, 공간 디코더의 코드화된 데이타 포트, 입력 회로 및 다른 기능은 coded_clock에 의해 제어된다. 또한, 이 클럭은 메인 decoder_clock에 비동기적일 수 있다. 데이타 전송은 칩상에서 decoder_ clock에 동기된다.
A.11절 시작 코드 검출기
A.11.1 시작 코드
당해 기술 분야에서 공지된 바와 같이, MPEG 및 H.261 코드화된 비디오 스트림은 시작 코드라고 불리우는 식별 가능한 비트 패턴을 포함한다. 마커 코드에 의해 JPEG에서도 마찬가지 기능이 제공된다. 시작/마커 코드는 코드화된 데이타 스트림의 구문의 중요한 부분을 식별한다. 시작 코드 검출기에 의해 실행되는 시작/마커 코드의 분석은 코드화된 데이타 파싱(parsing)에 있어 첫 번째 단계이다. 시작 코드 검출기는 입력 회로 다음의 공간 디코더 상의 첫 번째 블럭이다.
시작/마커 코드 패턴은 전체 비트스트림을 디코딩하지 않고 식별될 수 있도 록 설계된다. 따라서, 에러 복구 및 디코더 기동을 돕도록 이들을 본 발명에 따라 사용할 수 있다. 시작 코드 검출기는 코드화된 데이타 구성에서의 에러 검출 및 디코더의 기동을 용이하게 한다.
A.11.2 시작 코드 검출기 레지스터
상기 기술한 바와 같이, 많은 시작 코드 검출기 레지스터는 시작 코드 검출기에 의해 항상 사용되고 있다. 따라서, 시작 코드 검출기가 데이타를 처리하고 있으면 이들 레지스터를 액세스하는 것은 신뢰성이 없다. 자신의 레지스터를 액세싱하기 전에 시작 코드 검출기를 정지시키는 것을 보장하는 것은 사용자 때문이다.
레지스터 start_code_detector_access는 시작 코드 검출기를 정지시켜 자신의 레지스터로의 액세스를 허용하기 위해 사용된다. 시작 코드 검출기는 인터럽트를 발생한 후 정지한다.
시작 코드를 검색하여 버릴 때 모든 데이타 모드를 개시시킬 수 있는 데는 다른 제약이 있다. 이것은 A.11.8 및 A.11.5.1에 설명되어 있다.
테이블 A.11.1 시작 코드 검출기 레지스터
테이블 A.11.2 시작 코드 검출기 테스트 레지스터
A.11.3 시작 코드의 토큰으로의 변환
정상 동작시, 시작 코드 검출기의 기능은 데이타 스트림에서 시작 코드를 식별한 후, 이들을 적당한 시작 코드 토큰으로 변환하기 위한 것이다. 가장 단순한 경우, 데이타는 단일 길이 DATA 토큰으로 시작 코트 검출기로 공급된다. 시작 코드 검출기의 출력은 시작 코드 토큰과 인터리빙된(interleaved) 다수의 단축된 DATA 토큰이다.
또한, 본 발명에 따르면, 시작 코드 검출기로의 입력 데이타는 다수의 단축된 DATA 토큰으로 분할될 수 있다. 각각의 데이타 토큰이 8 x n (n은 정수) 비트를 포함해야 하는 것이외에 코드화된 데이타를 DATA 토큰으로 어떻게 분할하는 가에는 제한이 없다.
다른 토큰을 시작 코드 검출기의 입력으로 직접 공급할 수 있다. 이 경우, 토큰은 공간 디코더의 다른 단계로의 처리없이 시작 코드 검출기를 통과한다. 이들 토큰은 코드화된 데이타 내의 시작 코드의 위치 바로 뒤에만 단지 삽입될 수 있다.
A.11.3.1 시작 코드 포맷
본 발명의 시작 코드 검출기에 의해서는 3가지 다른 시작 코드 포맷이 인식된다. 이것은 레지스터 start_code_detector_coding_standard를 거쳐 컨피그된다.
테이블 A.11.3 시작 코드 포맷
A.11.3.2 시작 코드 토큰 등가
시작 코드를 검출한 후, 시작 코드 검출기는 시작 코드에 관련된 값을 고찰하여 적당한 토큰을 발생한다. 일반적으로, 토큰은 관련된 MPEG 구문 후 명칭 이 부여될(named) 수 있다. 그러나, 당해 기술 분야에서 통상의 지식을 가진자에게는 토큰이 부가적인 네이밍(naming formats)을 따를 수 있는 것이 자명할 것이다. 현재 선택되는 코딩 규격은 시작 코드 값과 발생된 토큰 사이의 관계를 형성한다.
이 관계는 테이블 A.11.4에 도시되어 있다.
테이블 A.11.4 시작 코드값으로 부터의 토큰
a. 이 토큰은 시작 코드값에 의해 결정된 값으로 로딩된 8비트 데이타 필드를 포함한다.
b. 베이스라인 DCT 인코딩된 데이타의 시작을 나타냄
A.11.3.3 코딩 규격의 확장 특성
코딩 규격은 그 용도가 현재 코딩 규격에 의해 정의되지 않은 데이타 스트림에 데이타가 내장되게(emdedded)하는 다수의 메카니즘을 제공한다. 이것은 특정 제조자에게 특별한 편의를 제공하는 "사용자 데이타(user data)"에 특정한 응용이어야 한다. 또한, 이것은 "확장된 데이타(extended data)"이어야 한다. 코딩 규격은 장래 코딩 규격에 기능을 추가하는 확장 데이타를 사용하는 권리를 허용한다.
두개의 다른 메카니즘이 채택된다. JPEG은 마커 코드를 가지는 사용자의 블럭 및 확장 데이타에 앞선다. 그러나, H.261은 코드화된 데이타에 잉여 정보 비트에 의해 표시된 "잉여 정보(extra data)"를 삽입한다. MPEG은 이들 기술을 모두 사용할 수 있다.
본 발명에 따르면, 시작/마커 코드에 의해 선행되는(preceded) 확장 데이타 및 사용자의 MPEG/JPEG 블럭을 시작 코드 검출기에 의해 검출할 수 있다. H.261/MPEG "잉여 정보"는 본 발명에 따른 허프만 디코더에 의해 검출된다. A.14.7. "잉여 정보 수신"을 참조하기 바란다.
레지스터 discard_extension_data 및 discard_user_data는 시작 코드 검출기가 사용자 데이타 및 확장 데이타를 폐기하도록 컨피그되는 것을 허용한다. 이 데이타가 시작 코드 검출기에서 버려지지 않으면, 그것이 비디오 디멀티플렉서에 도착할 때 액세스될 수 있다 (A.14.6. "사용자 및 확장 데이타 수신"을 참조).
본 발명의 공간 디코더는 JPEG의 베이스라인 특징을 지원한다. JPEG의 비베이스라인(non-baseline) 기능은 공간 디코더에 의해 확장 데이타로서 간주된다.
따라서, 비베이스라인 JPEG의 데이타에 앞서는 모든 JPEG 마커 코드는 확장 데이타로서 처리된다.
A.11.3.4 JPEG 테이블 정의
JPEG은 다운 로딩된 허프만 및 양자화기 테이블을 지원한다. JPEG 데이타에서, 이들 테이블의 정의는 마커 코드 DNL 및 DQT에 선행한다. 이들 마커 코드가 검출될 때, 시작 코드 검출기는 토큰 DHT_MARKER 및 DQT_MARKER를 발생한다. 이들 토큰은 DATA 토큰이 뒤따르는 비디오 디멀티플렉서가 허프만 또는 양자화기 테이블 (JPEG에서 설명한 포맷을 사용)을 설명하는 코드화된 데이타를 포함하는 것을 나타낸다.
A.11.4 에러 검출
시작 코드 검출기는 코드화된 데이타 내의 임의의 에러를 검출할 수 있어 에러가 검출된 후 디코더가 복원되게 하는 편의를 제공한다 (A.11.8."시작 코드 검색" 참조).
A.11.4.1 부적합 JPEG 길이 카운트
대부분의 JPEG 마커 코드(marker codes)는 이들에 관련된 16비트 길이 카운트 필드를 갖는다. 이 필드는 얼마나 많은 데이타가 이 마커 코드에 관련되어 있는가를 나타낸다. 0 및 1의 길이 카운트는 부적합하다(illegal). 부적합한 길이는 데이타 에러를 따를 때만 발생한다. 본 발명에서, 이것은 illegal_length_count_mask가 1로 세팅되면 인터럽트를 발생한다.
JPEG 데이타에서 에러로부터의 복원은 JPEG 데이타에서 시작 코드를 검색하는 것이 어렵기 때문에 한 응용에 특정한 데이타를 필요로 한다(A.11.8.1참조).
A.11.4.2 오버래핑 시작/마커 코드
본 발명에 있어서, 오버래핑 "시작 코드(overlapping start code)는 데이타 에러를 따를 때에만 발생한다. MPEG 바이트 정렬된 오버래핑 시작 코드를 제64도에 도시한다. 여기서, 시작 코드 검출기는 먼저 화상 시작 코드처럼 보이는 패턴을 찾는다. 다음에, 시작 코드 검출기는 이 화상 시작 코드가 그룹 시작와 오버랩하는가를 알아본다. 따라서, 시작 코드 검출기는 오버래핑 시작 이벤트를 발생한다. 또한, 시작 코드 검출기는 overlapping_start_mask가 1로 세팅되면 인터럽트를 발생하고 정지한다.
두개의 시작 코드 중 어느 것이 정확한 것이고 어느 것이 데이타 에러에 의해 발생하였는 가는 말할 수 없다. 그러나, 본 발명에 따른 시작 코드 검출기는 첫 번째 시작 코드를 버리고 오버래핑 시작 코드 이벤트가 서비스되고 난 후 "그것이 정확한 것처럼" 두 번째 시작 코드를 계속 디코딩한다. 일련의 오버래핑된 시작 코드가 있으면, 시작 코드 검출기는 마지막을 제외한 모든 것을 폐기한다 (각각의 오버래핑 시작 코드마다 이벤트를 발생함).
마찬가지로 바이트로 정렬되지 않은 시스템 (H.261 또는 가능한 MPEG)에서도 에러가 있을 수 있다. 이 경우, ignore_non_aligned의 상태를 고려해야 한다. 제65도는 발견된 첫 번째 시작 코드가 바이트 정렬되어 있지만 비정렬된 시작 코드를 오버래핑하는 예를 도시하고 있다. ignore_non_aligned가 1로 세트되면, 두 번째 오버래핑 시작 코드는 시작 코드 검출기에 의해 데이타로서 취급되므로, 오버래핑 시작 코드 이벤트는 발생하지 않는다. 이것은 가능한 데이타 통신 에러를 숨긴다. 그러나, ignore_non_aligned가 0으로 세팅되면, 시작 코드 검출기는 두 번째 비정렬 시작 코드를 찾고 그것이 첫 번째 시작 코드를 오버래핑하는 것으로 안다.
A.11.4.3 인식되지 않은 시작 코드
시작 코드 검출기는 인식되지 않은 시작 코드가 검출될 때(unrecognized_start_mask=1이면) 인터럽트를 발생할 수 있다. 이 인터럽트를 발생하는 시작 코드의 값을 레지스터 start_value에서 판독할 수 있다.
시작 코드 값 O x B4 (시퀀스 에러)는 MPEG 디코더 시스템에서 채널 또는 매체 에러를 나타내도록 사용된다. 예를 들면, 이 시작 코드는 ECC 회로가 정정할 수 없는 에러를 검출하면, 그것에 의해 데이타에 삽입될 수 있다.
A.11.4.4 이벤트 발생의 시퀀스
본 발명에 있어서, 임의의 코드화된 데이타 패턴 (아마도 에러 상태를 나타 냄)은 단기간 내에 한개 이상의 상기 에러 상태를 발생시킬 수 있다. 따라서, 시작 코드 검출기가 에러 상태에 대하여 코드화된 데이타를 검증하는 시퀀스는
1) 비정렬 시작 코드
2) 오버래핑 시작 코드
3) 인식되지 않은 시작 코드
이다.
따라서, 비정렬 시작 코드가 다른 뒤의 시작 코드와 오버래핑하면, 발생되는첫 번째 이벤트는 비정렬 시작 코드와 관련될 것이다. 이 이벤트가 서비스된 후, 시작 코드 검출기의 동작은 단시간후 오버래핑된 시작 코드 검출을 계속한다.
시작 코드 검출기는 비정렬 및 오버래핑 시작 코드의 모든 테스트를 완료한 후 시작 코드를 인식하려고만 한다.
A.11.5 디코더 기동 및 차단
시작 코드 검출기는 현재의 디코딩 작업이 완전히 완료되게 해주고, 새로운 작업이 시작되게 해주는 시설(facilities)을 제공한다.
데이타 세그먼트가 마커 코드를 에뮬레이트하는 값을 포함할 수 있을 때 JPEG 코드화된 비디오로 이들 기술을 사용하는 데에는 제한이 있다(A.11.8.1참조).
A.11.5.1 디코딩의 깨끗한 완료
시작 코드 검출기는 현재 화상의 데이타가 일단 종료하면 인터럽트를 발생하여 정지하도록 컨피그될 수 있다. 이것은 stop_after_picture를 1로 세팅하고 stop_after_picture_mask를 1로 세팅하는 것에 의해 실행된다.
화상의 끝이 시작 코드 검출기를 일단 통과하면, FLUSH 토큰이 발생되고 (A.11.7.2참조), 인터럽트가 발생되며, 시작 코드 검출기가 정지한다. 방금 끝난 화상이 정상 방식으로 디코딩되는 것에 주의한다. 그러나, 임의의 응용에서는 FLUSH가 현재 비디오 시퀀스의 끝을 나타낼 때 디코더 칩 세트의 출력에 도착하는 FLUSH를 검출하는 것이 좋다. 예를 들면, 디스플레이를 마지막 화상 출력에서 프린팅할 수 있다.
시작 코드 검출기가 정지할 때, 매체와 디코드 칩 사이의 사용자 구현 버퍼 에 "트랩된(trapped)" "오래된(old)" 비디오 시퀀스로부터의 데이타가 있을 수 있다. 레지스터 discard_all_data를 세팅하는 것에 의해 공간 디코더가 이 데이타를 소비하고 버리게 된다. 이것은 FLUSH 토큰이 시작 코드 디코더에 도착할 때까지 또는 discard_all_data가 마이크로프로세서 인터페이스를 거쳐 리셋될 때까지 계속 된다.
"오래된" 시퀀스에서 임의의 데이타를 버렸으면, 디코더는 새로운 시퀀스에 대해 새로운 작업을 시작할 준비를 한다.
A.11.5.2 모든 모드를 버리기 시작할 때
모든 모드를 버리는 것은 discard_all_data 레지스터에 1을 기록한 직후에 시작한다. 이것이 시작 코드 검출기가 데이타를 능동적으로 처리하고 있을 때 실행되면 결과를 예측할 수 없게 된다.
모든 모드를 버리는 것은 시작 코드 검출기 이벤트 중의 어느 것인 가가 인터럽트를 발생한 후 안전하게 시작될 수 있다.
A.11.5.3 새로운 시퀀스 시작
임의의 코드화된 데이타 내에 있는 새로 코드화된 비디오 시퀀스의 시작이 곳을 알려져 있지 않으면, 시작 코드 검색 메카니즘을 사용할 수 있다. 이것은 시퀀스의 시작 앞에 있는 임의의 필요하지 않은(wanted) 데이타를 버린다. A.11.8을 참조하기 바란다.
A.11.5.4 시퀀스사이의 점핑(jumping)
이 절은 상기 기술한 기술 일부의 응용을 설명한다. 그 목적은 하나의 코드화된 비디오 시퀀의 하나의 부분에서 다른 부분으로 "점프(jump)"하는 것이다. 이 예에서, 화일링 시스템(filing system)은 데이타의 "블럭"으로의 액세스만을 허용할 뿐이다. 이 블럭 구조는 디스크 또는 블럭 에러 검출 시스템의 섹터 크기로 구할 수 있다. 따라서, 코드화된 비디오 데이타의 입구 및 출구점의 위치는 화일링 시스템 블럭 구조와 관계가 없다.
stop_after_picture 및 discard_all_data 메카니즘은 오래된 비디로 시퀀스 에서의 원치 않는 데이타를 버리게 해준다. 마지막 화일링 시스템 데이타 블럭의 끝 다음에 FLUSH 토큰을 삽입시킴으로써 discard_all_data 모드를 리셋한다. 그 후, 시작 코드 탐색 모드는 적당한 입구점에 붙어 있는 다음 데이타 블럭 내의 임의의 데이타를 버리도록 사용될 수 있다.
A.11.6 바이트 정렬
당해 기술 분야에서 잘 알려진 바와 같이, 상이한 코딩 방법은 데이타 스트림에서의 시작/마커 코드의 바이트 정렬에 관하여 아주 다른 관점을 갖는다.
예를 들면, H.261은 통신을 비트 직렬인 것으로 간주한다. 따라서, 시작 코드의 바이트 정렬의 개념이 없다. ignore_non_aligned=0으로 세팅하는 것에 의해, 시작 코드 검출기는 임의의 비트 정렬을 갖는 시작 코드를 검출할 수 있다.
non_aligned_start_mask=0으로 세팅하는 것에 의해, 시작 코드 비정렬 인터럽트가 억제된다.
그러나, 반대로, JPEG은 바이트 정렬이 보장된 컴퓨터 환경에 대하여 설계되었다. 따라서, 마커 코드는 바이트가 정렬되었을 때 검출되기만 하면 된다. 코딩규격이 JPEG으로서 컨피그될 때, 레지스터 ignore_non_aligned는 무시되고 비정렬 시작 이벤트는 결코 발생될 수 없다. 그러나, ignore_non_aligned=1 및 non_aligned_start_mask=0으로 세팅하는 것은 장래 제품과의 호환성을 보장하도록 권장된다.
한편, MPEG은 통신 (비트 직렬) 및 컴퓨터 (바이트 지향) 시스템 모두의 필 요에 맞도록 설계되었다. MPEG 데이타의 시작 코드는 통상 바이트 정렬되어야 한다. 그러나, 규격은 시작 코드를 탐색하는 비트 직렬을 허용하도록 설계된다 (임의의 비트 정렬이 있는 MPEG 비트 패턴은 그것이 시작 코드가 아니면 시작 코드로 여겨지지 않을 것이다). 따라서, MPEG 디코더는 직렬 데이타 통신에서의 바이트 정렬 손실을 감안하여 설계될 수 있다.
비정렬 시작 코드가 발견되면, 그것은 통신 에러가 이전에 발생하였던 것을 통상 나타낸다. 이 에러가 비트 직렬 통신 시스템에서 "비트 슬립(bit-slip)"이면, 이 에러를 포함하는 데이타는 이미 디코더를 통과하였다. 이 에러는 디코더내에서 다른 에러를 발생시키기 쉽다. 그러나, 시작 코드 검출기에 도착하는 새로운 데이타는 이러한 바이트 정렬의 손실 후 계속해서 더코딩될 수 있다.
ignore_non_aligned=0 및 non_aligned_start_mask=1로 세팅하는 것에 의해, 비정렬 시작 코드가 검출되면, 인터럽트가 발생할 수 있다. 응답은 응용에 의존하게 될 것이다. 모든 순차적인 시작 코드는 비정렬(non-aligned)될 것이다 (바이트 정렬이 복원될 때까지). 따라서, 바이트 정렬이 손실된 후 non_aligned_start_mask=0으로 세팅하는 것이 적절하다.
테이블 A.11.5 바이트 정렬의 컨피그레이션
A.11.7 자동 토큰 발생
본 발명에 있어서, 시작 코드 검출기에 의한 대부분의 토큰 출력은 비디오 코딩 규격 및 여러 화상의 구문 요소를 직접 반영한다. 이들 "본래의(original)" 토큰에 부가하여, 약간의 유용한 "독창적인(invented)" 토큰이 발생된다. 이들 독점적인(proprietary) 토큰의 예로서는 PICTURE_END 및 CODING_ STANDARD가 있다. 토큰은 코딩 규격 사이의 구문 차이의 일부를 제거하고 에러 상태하에서의 "정돈(tidy up)"하기 위해 도입된다.
이 자동 토큰 발생은 코드화된 데이타를 직렬 분석한 후에 실행된다(제61도참조). 따라서, 시스템은 시작 코드 검출기를 거쳐 공간 디코더의 입력으로 직접 공급되었던 토큰 및 코드화된 데이타 내의 시작 코드의 검출에 뒤이어 시작 코드 검출기에 의해 발생되었던 토큰에 동등하게 응답한다.
A.11.7.1 화상의 끝 표시
일반적으로, 코딩 규격은 화상의 끝을 명백히 신호하지 않는다. 그러나, 본 발명의 시작 코드 검출기는 현재 화상이 종료한 것을 나타내는 정보를 검출할 때 PICTURE_END 토큰을 발생한다.
PICTURE_END를 발생시키는 토큰은 SEQUENCE_START, GROUP_START, PICTURE_START, SEQUENCE_END 및 FLUSH이다.
A.11.7.2 화상 끝 옵션후 정지
레지스터 stop_after_picture가 세팅되면, 시작 코드 검출기는 PICTURE_END 토큰이 통과한 후 정지한다. 그러나, FLUSH 토큰이 PICTURE_END 후에 삽입되어, 디코더를 통해 코드화된 데이타의 끝을 "푸시(push)"하고 시스템을 리셋한다. A.11.5.1을 참조하기 바란다.
A.11.7.3 H.261에 대한 시퀀스 시작 유입
H.261은 시퀀스 시작와 동일한 구문 항목(synactic element)을 갖지 않는다(테이블 A.11.4 참조). 레지스터 insert_sequence_start가 세팅되면, 시작 코드 검출기는 다음 PICTURE_START 전에 하나의 SEQUENCE_ STRART가 있도록 하며, 즉 시작 코드 검출기가 PICTURE_START 전에 SEUQENCE_START를 찾지 못하면, 하나가 유입된다. 하나가 이미 존재하면, SEQUENCE_START는 유입되지 않는다.
이 기능은 MPEG 또는 JPEG에 사용되어서는 안된다.
A.11.7.4 각각의 시퀀스에 대한 코딩 규격 세트 시작
코드 검출기를 떠나는 모든 SEQUENCE_START 토큰은 CODING_STANDARD 토큰에 항상 붙어 있다. 이 토큰은 시작 코드 검출기의 현재 코딩 규격으로 로딩된다. 이것은 새로운 비디오 시퀀스마다 전체 디코더 칩 세트의 코딩 규격을 세팅한다.
A.11.8 시작 코드 검색
본 발명에 따른 시작 코드 검출기는 특정 종류의 시작 코드에 대하여 코드화된 데이타 스트림을 통해 검색하도록 사용될 수 있다. 이것은 디코더가 (그것에 붙어 있는 임의의 데이타를 버린후) 일부 코드화된 데이타의 구문 내에서 특정 레벨로부터 디코딩을 재개하도록 한다. 이것에 대한 응용은
· 미지의 위치에서 코드화된 데이타 화일로 점프하고 난후 디코더를 기동 (예를 들면, 랜덤 액세스),
· 데이타 에러 후 복구를 보조하기 위해 데이타 내의 알려진 점(known point)의 위치 탐색
을 포함한다.
예를 들면, 테이블 A.11.6은 다른 컨피그레이션의 start_code_search에 대하여 검색된 MPEG 시작 코드를 보여준다. 등가의 H.261 및 JPEG 시작/마커 코드를 테이블 A.11.4에서 찾을 수 있다.
테이블 A.11.6 시작 코드 탐색 모드
a. FLUSH 토큰은 시작 코드 검출기를 이 탐색 모드로 놓음.
b. 이것은 리셋 후의 디폴트 모드임.
제로가 아닌 값이 start_code_search 레지스터에 기록될 때, 시작 코드 검출기는 특정 시작 코드가 검출될 때까지 모든 입력 데이타를 버리기 시작할 것이다. 그 후, start_code_search 레지스터가 0으로 리셋되고 정상 동작이 계속될 것이다.
시작 코드 탐색은 제로가 아닌 값이 start_code_search 레지스터에 기록된 직후에 시작된다. 시작 코드 검출기가 데이타를 동적으로 처리하는 도중에 이것이 실행되면 결과를 예측할 수 없다. 따라서, 시작 코드 탐색을 시작하기 전에, 시작 코드 검출기는 데이타를 처리하고 있지 않도록 정지되어야 한다. 시작 코드 검출기는 시작 코드 검출기 이벤트 (비정렬 시작 이벤트 등)의 어느 것인 가가 인터럽트를 방금 발생하였으면, 항상 이 상태이다.
A.11.8.1 JPEG으로 시작 코드 검색 사용시의 한계점
대부분의 JPEG 마커 코드는 이들과 관련된 16비트 길이 카운트 필드를 갖는다. 이 필드는 마커 코드와 관련된 데이타 세그먼트의 길이를 나타낸다. 이 세그먼트는 마커 코드를 에뮬레이트하는 값을 포함할 수 있다. 정상 동작시, 시작 코드 검출기는 이들 데이타 세그먼트에서 시작 코드를 찾지 않는다.
일부 JPEG 코드화된 데이타로의 랜덤 액세스가 이러한 세그먼트에 "랜드 (land)"하면, 시작 코드 탐색 메카니즘을 신뢰성있게 사용할 수 없다. 일반적으로, JPEG 코드화된 비디오는 랜덤 액세스에 대한 입구점을 식별하기 위해 또 하나의 외부 정보를 필요로 한다.
A.12절 디코더 기동 제어
A.12.1 디코더 기동의 개략
디코더에서, 비디오 표시는 흔히 코드화된 데이타가 먼저 이용 가능하게 된후에 단 시간에 디스플레이된다. 이 지연중, 코드화된 데이타는 디코더 내의 버퍼에 축적된다. 이러한 버퍼의 프리-필링(pre-filling)은 버퍼가 디코딩중에 결코 비워지지 않는 것을 보장하므로, 이것은 디코더가 규칙적인 간격으로 새로운 화상을 디코딩할 수 있는 것을 보장한다.
일반적으로, 디코더를 정확히 기동하기 위해서는 두개의 시설(two facilities)이 필요하다. 먼저, 얼마나 많은 데이타가 디코더에 제공되었는 가를 측정하는 메카니즘이 있어야 한다. 두 번째로, 새로운 비디오 스트림의 표시를 방 지하는 메카니즘이 있어야 한다. 본 발명의 공간 디코더는 얼마나 많은 데이타가 도착하였는 가를 측정하기 위해 그의 입력 부근에 비트 카운터를 제공하고 새로운 비디오 스트림의 시작이 출력되는 것을 방지하기 위해 그의 출력 근방에 출력 게이트를 마련한다. 이들 기구의 제어에 대하여 복잡한 3 레벨, 즉
* 출력 게이트는 항상 개방
* 기본적인(basic) 제어
* 고등(advanced) 제어
가 있다.
출력 게이트가 항상 개방인 것에 대해, 화상 출력은 가능하다면 코드화된 데이타가 디코더에 도착하자 마자 시작된다. 이것은 정지 화상 디코딩 또는 디스플레이가 일부의 다른 메카니즘에 의해 지연될 때 바람직하다.
기본 및 고등 제어 사이의 차이는 얼마나 많은 짧은 비디오 스트림을 언제든지 디코더의 버퍼에 수납할 수 있는 가에 관련된다. 기본 제어는 대부분의 응용에 충분하다. 그러나, 고등 제어는 사용자 소프트웨어가 여러개의 매우 짧은 비디오 스트림의 기동을 관리하는 디코더를 돕게 한다.
A.12.2 MPEG 비디오 버퍼 검증 기구
MPEG은 일정 데이타 속도 시스템에 대하여 "비디오 버퍼 검증 기구(video buffer verifier: VBV)"를 설명한다. VBV 정보를 사용하는 것에 의해, 디코더는 화상 디스플레이를 시작하기 전에 자신의 버퍼를 미리 채우(pre-fill)게 된다. 또한, 이 프리-필링은 디코더의 버퍼가 디코딩 중에 결코 비워지지 않는 것을 보장한다.
요약하면, 각각의 MPEG 화상은 vbv_delay 변수를 전달한다. 이 변수는 "이 상적 디코더"의 얼마나 긴 코드화된 데이타 버퍼가 첫 번째 화상이 디코딩된후 코드화된 데이타로 채워지는 가를 규정한다. 첫 번째 화상의 기동 지연을 관찰하면, 모든 순차적인 화상의 요청이 충족된다.
따라서, MPEG은 지연으로서 기동 요청을 지정한다. 그러나, 일정 비트 속도 시스템에서, 이 지연은 비트 카운트로 용이하게 변환될 수 있다. 이것은 본 발명의 공간 디코더의 기동 제어가 동작하는 것에 기초한다.
A.12.3 스트림의 정의
이 응용에 있어서, 스트림이라는 용어는 MPEG 용어인 시퀀스와 혼동을 피하기 위해 사용된 것이다. 따라서, 스트림은 응용에 "흥미있는(interesting)" 많은 양의 비디오 데이타를 의미한다. 그러므로, 스트림은 많은 MPEG 시퀀스일 수 있거나 또는 하나의 화상일 수 있다.
이 장에서 설명하는 더코더 기동 시설은 스트림에서 첫 번째 화상의 VBV 구비조건을 충족시키는 것에 관한것이다. 이 스트림에서 다음 화상의 구비 조건은 자동적으로 충족된다.
A.12.4 기동 제어 레지스터
테이블 A.12.1 디코더 기동 레지스터
A.12.5 출력 게이트 항시 개방
출력 게이트가 개방으로 되도록 컨피그될 수 있다. 이 컨피그레이션은 정지 화상을 디코딩하고 있을 때나 또는 일부 다른 메카니즘이 비디오 디코더의 기동 관리에 유용할 때 바람직하다.
다음의 컨피그레이션은 (startup_access에 1을 기록하여 기동 제어 논리 (start-up control logic)로의 액세스를 얻으면) 리셋 후에 필요하다.
offchip_queue = 1 로 세팅
etnable_stream = 1로 세팅
모든 디코더 기동 이벤트 마스크 레지스터가 이들의 인터럽트를 디스에이블하는 0으로 세팅되는 것을 보장 (이것은 리셋후의 디폴트 상태임).
(왜 이것이 출력 게이트 개방을 유지하는 가에 대해서는 A.12.7.1의 설명을 참조)
A.12.6 기본 동작
본 발명에 있어서, 기동 논리의 기본 제어는 주요 MPEG 비디오 응용에 충분하다. 이 모드에서, 비트 카운터는 출력 게이트와 직접 통신한다. FLUSH 토큰으로 나타낸 바와 같이, 비디오 스트림의 끝이 출력 게이트를 통과할 때 출력 게이트는 자동적으로 닫힌다. 게이트는 스트림이 자신의 기동 비트 카운트를 유지하였을 때 비트 카운터 회로에 의해 인에이블이 마련될 때까지 닫힌다.
(startup_access에 1을 기록하여 기동 제어 논리로의 액세스를 얻으면) 리셋후에 다음의 컨피그레이션이 필요하다.
코드화된 데이타 속도의 대략적인 대기 범위로 bit_count_prescale를 세팅하RH 이 에러 상태를 검출할 수 있도록 counter_flushed_too_early_mask=1로 세팅하고, 두개의 인터럽트 서비스 루틴, 즉 각각의 새로운 스트림의 첫 번째 화상에 대하여 vbv_delay의 값을 구하기 위한 비디오 디멀티플렉서 서비스, 및 너무 일찍 서비스되어 이 조건에 반응할 수 없는 카운터 플러싱되는(counter flushed)것이 필요하다.
비디오 디멀티플렉서는 (또는 비디오 파서라고도 하는) 새로운 비디오 스트 림에 대하여 vbv_delay를 검출할 때 (즉, FLUSH 후 첫 번째 화상이 비디오 디멀티플렉서에 도착할 때) 인터럽트를 발생할 수 있다. 인터럽트 서비스 루틴은 bit_count_target에 대하여 적당한 값을 계산하여 이것을 기록한다. 비트 카운터가 이 목표에 도달할 때, 비트 카운터와 출력 게이트 사이의 쇼트 큐(short queue)에 인에이블을 삽입한다. 출력 게이트가 개방상태일 때 이 큐에서 인에이블을 제거한다.
A.12.6.1 다른 스트림이 끝난 후 새로운 스트림의 시작
예를 들면, 종료에 관한 MPEG 스트림은 A라고 하고, 시작에 관한 MPEG 스트림은 B라고 한다. FLUSH 토큰은 A의 끝 다음에 삽입되어야 한다. 이것은 디코더를 통해 자신의 코드화된 데이타의 마지막을 밀어넣고 디코더의 여러 부분에 경보를 발하여(alerts) 새로운 스트림을 기다리도록한다.
통상, A가 자신의 기동 조건에 이미 충족되면, 비트 카운터는 제로로 리셋 된다. FLUSH 후, 비트 카운터는 스트림 B의 비트 카운트를 시작한다. 비디오 디멀티플렉서가 스트림 B에서 첫 번째 화상으로 부터 vbv_ delay를 디코딩하였을 때, 인터럽트가 발생되어 비트 카운터가 컨피그되도록 한다.
스트림 A의 끝을 마크하는 FLUSH가 출력 게이트를 통과할 때, 게이트는 닫힌다. 게이트는 B가 자신의 기동 조건이 충족될 때까지 닫힌다. 스트림 B에 대한 기동 지연 및 버퍼의 깊이 등과 같은 다수의 요인에 의존하여, 출력 게이트가 닫힐 때 B가 자신의 기동 조건에 충족될 수 있다. 이 경우, 큐에서 대기하는 하나의 인에이블이 있어 출력 게이트는 즉시 개방된다. 그렇지 않으면, 스트림 B는 자신의 기동 필요 조건이 충족될 때까지 기다려야 한다.
A.12.6.2 짧은 스트림의 계속
비트 카운터와 출력 게이트 사이에 위치한 큐의 용량은 3개의 분리된 비디오스트림이 이들의 기동 조건을 충족하고 이전 스트림에 대해서 디코딩이 끝나기를 대기하는데 충분하다. 본 발명에 있어서, 매우 짧은 스트림이 디코딩되고 있는 중이거나 또는 오프 칩 버퍼가 디코딩되는 화상 포맷에 비해 매우 큰 경우, 이 상황이 발생한다.
제69도에서, 스트림 A는 디코딩중이고 출력 게이트는 개방이다. 스트림 B 및 C는 이들의 기동 조건이 충족되고 공간 디코더에 의해 관리되는 버퍼 내에 전체적으로 포함된다. 스트림 D는 공간 디코더의 입력에 지금 도착하고 있는 중이다.
스트림 B 및 C에 대한 인에이블은 큐에 있다. 따라서, 스트림 A가 종료할 때, B는 즉시 시작될 수 있다. 마찬가지로, C는 B의 뒤를 즉시 따를 수 있다.
D가 자신의 기동 목표가 충족될 때 A가 출력 게이트를 여전히 통과하고 있으면, 인에이블이 큐에 추가되어, 큐를 채운다 D의 끝이 비트 카운터를 통과할 때까지 (즉, A가 출력 게이트를 여전히 통과하고 있을 때) 인에이블이 큐에서 제거되지 않았으면, 새로운 스트림이 비트 카운터를 거쳐 시작할 수 없다. 따라서, 출력 게이트가 개방되어 B가 통과하게 될 때, 코드화된 데이타는 A가 끝나고 인에이블이 큐에서 제거될 때까지 입력에서 유지된다.
A.12.7 고등 동작
본 발명에 따르면, 기동 논리의 고등 제어는 사용자 소프트웨어가 A.12.6"기본 동작"에서 설명한 인에이블 큐의 길이를 무한히 연장시키게 한다. 이 레벨의 제어는 비디오 디코더가 A.12.6.2 "짧은 스트림의 계속"에서 설명한 것보다 긴 일련의 짧은 비디오 스트림을 포함해야 할 때만 필요하다.
시스템의 기본 동작에 필요한 컨피그레이션 이외에, (start_up access에 1을기록하는 것에 의해 기동 제어 레지스터로의 액세스를 얻었으면) 리셋후에 다음의 구성이 필요하다.
* offchip_queue = 1로 세팅
* 인에이블이 큐에서 제거되었을 때 accept_enable_mask = 1로 세팅하여 인터럽트를 인에이블,
* 스트림의 비트 카운트 목표가 충족될 때 인터럽트를 인에이블하도록 target_met_mask = 1로 세팅.
두개의 추가적인 인터럽트 서비스 루틴, 즉
* 수용 인에이블 인터럽트 및
* 목표 충족 인터럽트(target met interrupt)
가 필요하다.
목표 충족 인터럼트가 발생할 때, 서비스 루틴은 인에이블을 그 오프-칩 인에이블 큐에 추가해야 한다.
A.12.7.1 출력 게이트 논리 동작
enable_stream 레지스터에 1을 기록하는 것은 인에이블을 쇼트 큐에 로딩한다.
(스트림의 끝을 표시하는) FLUSH가 출력 게이트를 통과할 때, 이 게이트는 닫힌다. 큐의 끝에서 유용한 인에이블이 있으면, 게이트는 개방되어 accept_enable_event를 발생한다. accept_enable_mask가 1로 세팅되면, 인터럽트가 발생될 수 있어 인에이블이 큐의 끝에서 제거된다 (레지스터 enable_stream은 리셋됨).
그러나, accept_enable_mask가 제로로 세팅되면, accept_enable_event 다음에 인터럽트가 발생되지 않아 enable이 큐의 끝에서 제거되지 않는다. 이 메카니즘은 A.12.5에서 설명한 바와 같이 출력 게이트를 개방으로 유지하도록 사용될 수 있다.
A.12.8 비트 카운트
비트 카운터는 FLUSH 토큰이 통과한 후 카운트를 시작한다. 이 FLUSH 토큰은 현재 비디오 스트림의 끝을 나타낸다 이것에 관하여, 비트 카운터는 bit_count_target 레지스터에 세팅된 비트 카운트 목표가 충족될 때까지 카운팅을 계속한다. 그 후, 목표 충족 이벤트가 발생되고 비트 카운터가 제로로 리셋되며 다음 FLUSH 토큰을 기다린다.
비트 카운터는 자신의 최대 카운트(255)에 도달할 때 증가를 정지한다.
A.12.9 비트 카운트 프리스케일(bit count prescale)
본 발명에 있어서, 비트 카운터를 한번 증가시키기 위해서는 2(bit_coout_prescale+1)X 512 비트가 필요하다. 또한, bit_count_prescale는 3비트 레지스터로서 0과 7 사이의 값을 유지할 수 있다.
테이블 A.12.2 비트 카운터 범위 예
비디오 스트림의 일부 항목이 이미 토큰화 (예를 들면, 시작 코드)되었을 때, 비트 카운트가 근사한(approximate) 것으로 되므로, 데이타가 아닌 토큰을 포함한다.
A.12.10 너무 일찍 플러싱된 카운터(counter flushed too early)
FLUSH 토큰이 비트 카운트 목표에 도달하기 전에 비트 카운터에 도착하면, (counter_flushed_too_early_mask=1이면) 인터럽트를 발생시킬 수 있는 이벤트가 발생된다. 인터럽트가 발생하면, 비트 카운터 회로가 정지하여, 또 다른 데이타 입력을 방지한다. 이것은 이 이벤트가 발생한 후 출력 게이트를 개방할 때를 결정하는 사용자의 소프트웨어의 책임이다. 출력 게이트는 비트 카운트 목표로 0을 기록함으로써 개방될 수 있다. 이들 상황은 마지막 몇몇 화상인 비디오 스트링을 디코딩하려고 할 때만 발생한다.
A.13절 버퍼 관리
공간 디코더는 두 개의 논리적 데이타 버퍼, 즉 코드화된 데이타 버퍼(coded data buffer: CDB) 및 토큰 버퍼(token buffer: TB)를 관리한다.
CDB는 허프만 디코더의 입력과 시작 코드 검출기 사이에서 코드화된 데이타를 버퍼한다. 이것은 낮은 데이타 속도로 코드화된 비디오 데이타에 버퍼링(buffering)을 제공한다. TB는 공간 비디오 디코딩 회로의 입력과 허프만 디코더의 출력 사이 (역 모델러(inverse modeler), 양자화기(quantizer)및 DCT)에서 데이타를 버퍼한다. 이 두 번째 논리적 버퍼는 변화하는 양의 데이타를 갖는 처리 화상을 수용하도록 프로세싱 시간이 전개(spread)되도록 해준다.
두 버퍼는 하나의 오프-칩 DRAM 어레이에 물리적으로(physically) 유지된다. 이들 버퍼의 어드레스들은 버퍼 관리기에 의해 발생된다.
A.13.1 버퍼 관리기 레지스터
공간 더코더 버퍼 관리기는 장치가 리셋된 직후에 컨피그되도록 의도되어 있다. 정상 동작시, 버퍼 관리기를 리컨피그할 필요는 없다.
공간 디코더에서 리셋이 제거된 후, 버퍼 관리기는 (자신의 액세스 레지스터buffer_manager_access를 1로 세팅하여) 컨피그레이션을 준비하면서 정지한다. 레지스터가 컨피그레이션된 후, buffer_manager_access를 0으로 세팅할 수 있고 디코딩을 시작할 수 있다.
버퍼 관리기에 사용된 대부분의 레지스터는 버퍼 관리기가 동작 중일 때 신뢰성있게 액세스될 수 없다. 버퍼 관리기 레지스터의 어느 것인 가가 액세스된 후, buffer_manager_access는 1로 세팅되어야 한다. 이것에 의해 값 1을 buffer_manager_access에서 판독할 수 있을 때까지를 대기하는 프로토콜을 관찰해야 한다. 버퍼 상태를 모니터하기 위해 cdb_full및 cdb_empty 등의 레지스터를 폴링(polling)할 때 액세스를 얻고 해제하는 데 걸리는 시간을 고려해야 한다.
테이블 A.13.1 버퍼 관리기 레지스터
A.13.1.1 버퍼 관리기 포인터 값
통상, 데이타는 공간 디코더와 오프-칩 DRAM 사이에서 (DRAM의 고속 페이지 모드 사용하여) 64바이트 버스트(bursts)로 전송된다. 모든 버퍼 포인터 및 길이 레지스터는 이들 64바이트 (512비트)의 데이타 블럭을 참조한다. 따라서, 버퍼 관리기의 18비트 레지스터는 256k 블럭 선형 어드레스 공간 (즉, 128 Mb)을 기술한다.
64바이트 전송은 DRAM 인터페이스의 폭 (8, 16 또는 32비트)에 무관하다.
A.13.2 버퍼 관리기 레지스터의 사용
공간 디코더 버퍼 관리기는 두 개의 유사한 버퍼를 규정하는 2세트의 레지스터를 갖는다. 버퍼 제한 레지스터(buffer_limit)는 메모리 공간의 물리적 상한을 정의한다. 모든 어드레스는 이 번호를 기준으로 하여 산출된다.
유용한 메모리의 한도 내에서, 각각의 버퍼의 확장은 두 개의 레지스터, 즉 버퍼 베이스 (cdb_base 및 tb_base)와 버퍼 길이 (cdb_length 및 tb_length)에 의해 규정된다. 따라서 설명된 모든 레지스터는 버퍼가 사용될 수 있기 전에 컨피그되어야 한다.
각각의 버퍼는 현재 상태는 4개의 레지스터에서 볼 수 있다. 버퍼 판독 레지스터 (cdb_read 및 tb_read)는 데이타가 다음에 판독되는 버퍼 베이스로 부터의 오프셋을 나타낸다. 버퍼 번호 레지스터 (cdb_number 및 tb_number)는 버퍼에 의해 현재 유지된 데이타의 양을 나타낸다. 상태 비트 cdb_full, tb_full, cdb_empty 및 tb_empty는 버퍼가 채워져있는지 비어있는지를 나타낸다.
A.13.1.1에서 설명한 바와 같이, 모든 상술한 레지스터의 단위는 512 비트 데이타 블럭이다. 따라서, cdb_number에서 판독된 값은 코드화된 데이타 버퍼에서 비트 수를 얻기 위해 512가 곱해져야 한다.
A.13.3 제로 버퍼
"실시간"으로 요청하지 않는 정지 화상 응용 (예를 들면, JPEG을 사용함)은 버퍼 관리기에 의해 지원되는 대형 오프-칩 버퍼를 필요로 하지 않는다. 이 경우, DRAM 인터페이스는 버퍼 판리기를 무시하여 코드화된 데이타 버퍼 및 토큰 버퍼에 대하여 128비트 스트림 온-칩 FIFO를 제공하도록 컨피그될 수 있다.(zero_brffers 레지스터에 1을 기록하는 것에 의함).
제로 버퍼 옵션은 늦은 데이타 속도 및 소형 화상 포맷으로 작업을 동작시키 응용에 바람직하다.
주의: zero_buffers 레지스터는 DRAM 인터페이스의 일부이므로, DRAM 인터페이스의 포스트-리셋 중에만 세팅되어야 한다.
A.13.4 버퍼 동작
버퍼를 통한 데이타 전송은 핸드세이크 프로토콜에 의해 제어된다. 따라서, 버퍼가 채워져있거나 또는 비어 있으면 데이타 에러가 발생하지 않는다. 버퍼가 채워지면, 버퍼로 데이타를 보내려는 회로는 버퍼에 공간이 생길 때까지 정지된다. 버퍼가 계속 채워지면, 공간 디코더가 자신의 입력 포트에서 데이타를 수용할 수 없을 때까지 버퍼의 더 많은 프로세싱 스테이지 "업 스팀(up steam)"은 정지된다. 마찬가지로, 버퍼가 비면, 버퍼에서 데이타를 제거하려는 회로는 데이타를 이용할 수 있을 때까지 정지한다.
A.13.2에서 기술한 바와 같이, 코드화된 데이타 및 토큰 버퍼의 위치 및 크 기는 버퍼 베이스 및 길이 레지스터에 의해 지정된다. 이들 레지스터를 컨피그하고 두 개의 버퍼 사이에서의 메모리 사용에 있어서 충돌이 없도록 하는 것은 사용자에게 달려 있다.
A.14절 비디오 디멀티플렉서
비디오 디멀티플렉서 또는 비디오 파서(video parser)는 이들이 불리어지는것과 같이, 시작 코드 검출기에 의해 시작된 코드화된 데이타를 토큰으로 변환하는 작업을 완료한다. 비디오 디멀티플렉서에는 4개의 주요한 프로세싱 블럭, 즉 파서 상태 머신, (ITOD를 포함하는) 허프만 디코더, 매크로블럭 카운터 및 ALU가 있다.
파서 또는 상태 머신은 코드화된 비디오 데이타의 구문을 따르고 다른 유닛을 명령한다. 허프만 디코더는 가변 길이 코드화된(variable length coded: VLC)데이타를 정수로 변환한다. 매크로블럭 카운터는 화상 부분이 디코딩되고 있는 트랙을 유지한다. ALU는 필요한 산술 연산을 실행한다.
A.14.1 비디오 디멀티플렉서 레지스터
테이블 A.14.1 상위 레벨의 비디오 디멀티플렉서 레지스터
테이블 A.14.2 비디오 디멀티플렉서 화상 컨피그레이션 레지스터
A.14.1.1 레지스터 로드 및 토큰 생성
비디오 디멀티플렉서에서 많은 레지스터들은 코드화된 화상/비디오 데이타에서 정상적으로 통신되는 변수와 직접 관계가 있는 값을 유지한다. 예를 들면, horiz_pels 레지스터는 MPEG 시퀀스 헤더 정보, 즉 horizontal_size및 JPEG 프레임 헤더 변수 X에 대응한다. 이들 레지스터는 적당한 코드화된 데이타가 디코딩될 때, 비디오 디멀티플렉서에 의해 로딩된다. 이들 레지스터는 토큰에도 관계가 있다. 예를 들면, 레지스터 horiz_pels는 토큰 HORIZONTAL_SIZE에 관계가 있다. 토큰은 코드화된 데이타가 디코딩될 때 (또는 직후) 비디오 디멀티플렉서에 의해 발생된다. 토큰은 공간 디코더의 입력으로 직접 공급될 수 있다. 이 경우, 토큰에 의해 운반된 값은 이것과 관련된 비디오 디멀티플렉서 레지스터를 구성한다.
테이블 A.14.3 비디오 디멀티플렉서 허프만 테이블 레지스터
테이블 A.14.4 다른 비디오 디멀티플렉서 레지스터
테이블 A.14.5 레지스터 대 토큰의 상호 참조
A.14.2 화상 구조
본 발명에 있어서, 화상 차원(picture dimensions)은 2개의 다른 단위, 즉 픽셀 및 매크로블럭으로 공간 디코더에 대하여 설명된다. JPEG 및 MPEG은 모두 픽셀에서의 화상 차원을 통신한다.(communicate). 픽셀에서의 차원을 통신함으로써 유효 데이타를 포함하는 버퍼의 영역을 결정한다. 이것은 전체 버퍼의 크기보다 작다. 매크로블럭에서의 차원을 통신함으로써 디코더에 의해 필요한 버퍼의 크기를 결정한다. 매크로블럭에서의 차원은 픽셀 차원으로부터 사용자에 의해 구해져야 한다. 이 정보와 관련된 공간 디코더 레지스터는 horiz_pels, vert_pels, horiz_macroblocks 및 vert_macroblocks이다.
공간 디코더 레지스터 blocks_h_n, blocks_v_n, max_h, max_v 및 max_component_id는 매크로블럭 (JPEG에서의 최소 코딩 단위)의 형성을 명시한다. 각각은 2비트 레지스터로서 0 내지 3 범위의 칼을 유지할 수 있다. max_component_id를 제외한 모든 것은 1 내지 4의 블럭 카운트를 명시한다. 예를 들어, 레지스터 max_h가 1을 유지하면, 매크로블럭은 두개의 블럭 폭이다. 마찬가지로, max_component_id는 수반된 다른 색 성분의 수를 명시한다.
테이블 A.14.6 다양한 매크로블럭 포맷에대한 컨피그레이션
A.14.3 허프만 테이블
A.14.3.1 JPEG 스타일 허프만 테이블 설명
본 발명에 있어서, 허프만 테이블 설명서는 인코더와 디코더 사이에서 테이 블 설명을 통신하도록 JPEG에 의해 사용된 포맷을 통해 공간 디코더로 제공된다. 각각의 테이블 설명서에는 두 개의 요소, 즉 BITS 와 HUFFVAL가 있다. 어떻게 테이블이 인코딩되는 가에 대한 완전한 설명을 위해, 사용자는 JPEG 규격을 보아야 한다.
A.14.3.1.1 비트(BITS)
BITS는 얼마나 많은 다른 기호가 VLC의 각각의 길이로 인코딩되는 가를 설명하는 값에 대한 테이블이다. 각각의 엔트리는 8비트 값이다. JPEG은 16비트 길이까지의 VLC를 허용하므로, 각각의 테이블에는 16개의 엔트리가 있다.
BITS[0]는 얼마나 많은 다른 1 비트 VLC가 존재하는 가를 설명하고, BITS[1]은 얼마나 많은 다른 2 비트 VLC가 존재하는 가를 설명하며, BITS[2]는 ‥‥ 등이다.
A.14.3.1.2 HUFFVAL
HUFFVAL은 VLC 길이가 증가하는 순서로 배열된 8비트 데이타 값으로 이루어진 테이블이다. 이 테이블의 크기는 VLC에 의해 인코딩될 수 있는 다른 기호의 수에 의존한다.
JPEG 규격은 어떻게 허프만 코딩 테이블이 인코딩되거나 또는 이 형태로 디코딩될 수 있는 가를 더욱 상세히 설명한다.
A.14.3.1.3 토큰에 의한 컨피그레이션
JPEG 비트 스트림에서, DHT 마커는 AC 및 DC 계수를 코드화하기 위해 사용된 허프만 테이블의 설명서에 앞선다. 시작 코드 검출기가 DHT 마커를 인식할 때, DHT_MARKER 토큰을 발생하고 뒤따르는 DATA 토큰에 허프만 테이블 설명서를 위치시킨다 (A.11.3.4 참조).
공간 디코더 내에서 AC 및 DC 계수 허프만 테이블의 컨피그레이션은 공간 디코더를 JPEG 동작에 대하여 컨피그하면서 공간 디코더의 입력에 DATA 및 DHT_MARKER 토큰을 공급하는 것에 의해 달성될 수 있다. 이 메카니즘은 MPEG 동작에 필요한 DC 계수 허프만 테이블 컨피그레이션에 사용될 수 있지만, 공간 디코더의 코딩 규격은 테이블이 다운 로딩될 때 JPEG으로 세팅되어야 한다.
테이블 A.14.7 토큰을 통한 허프만 테이블 구성
A.14.3.1.4 MPI에 의한 컨피그레이션
MPI를 거쳐 레지스터에 AC 및 DC 계수 허프만 테이블를 직접 기록할 수 있다. A.14.3 참조.
레지스터 dc_bits_0[15:0] 및 dc_bits_1[15:0]은 테이블 0x00 및 0x01에 대하여 BITS 값을 유지한다.
레지스터 ac_bits_0[15:0] 및 ac_bits_1[15:0]은 테이블 0x10 및 0x11에 대 하여 BITS 값을 유지한다.
레지스터 dc_huffval_0[11:0] 및 dc_huffval_1[11:0]은 테이블 0x00 및 0x01에 대하여 HUFFVAL 값을 유지한다.
레지스터 ac_huffval_0[161:0] 및 ac_huffval_1[161:0]은 테이블 0x10 및 0x11에 대하여 HUFFVAL 값을 유지한다.
A.14.4 다른 규격의 컨피그레이션
비디오 디멀티플렉서는 MPEG, JPEG 및 H.261의 요청을 지원한다. 코딩 규격은 시작 코드 검출기에 의해 발생된 CODING_STANDARD 토큰에 의해 자동적으로 컨피그된다.
A.14.4.1 H.261 허프만 테이블
H.261을 디코딩하기 위해 필요한 모든 허프만 테이블는 공간 디코더 내의ROM, 구체적으로는 비디오 디멀티플렉서의 파서 상태 머신에 유지되므로, 사용자 개입을 필요로 하지 않는다
A.14.4.2 H.261 화상 구조
H.261은 두 개의 화상 포맷, 즉 CIF 및 QCIF만을 지원하는 것으로 정의된다.
사용 중인 화상 포맷은 비트스트림의 PTYPE 부분에서 신호된다. 이 데이타가 공간 디코더에 의해 디코딩될 때, 이것은 h_261_pic_type 레지스터 및 PICTURE_TYPE 토큰에 있게 된다. 또한, 모든 화상 및 매크로블럭 컨피그레이션 레지스터는 자동적으로 컨피그된다.
여러 레지스터 내의 정보도 이들과 관련된 토큰에 위치하게 되고 (테이블 A.14.5참조), 이것은 다른 디코더 칩 (시간 디코더 등)이 정확히 컨피그되는 것을 보장한다.
A 14.4.3 MPEG 허프만 테이블
MPEG을 디코딩하기 위해 필요한 대부분의 허프만 코딩 테이블은 공간 디코더내의 ROM (또한, 파서 상태 머신)에 유지되므로, 사용자 개입을 필요로 하지 않는다. 내부 매크로블럭의 DC계수 디코딩에 필요한 테이블은 예외이다. 두개의 테이블, 즉 크로마(chroma)를 위한 것과 루마(luma)를 위한 것이 필요하다. 이들은 다시 디코딩되기 전에 사용자 소프트웨어에 의해 컨피그되어야 한다.
테이블 A.14.8 H.261에 대한 자동 셋팅
테이블 A.14.10은 공간 디코더 내에서 DC 계수 허프만 테이블을 컨피그하기 위해 필요한 토큰의 시퀀스를 도시한다. 또한, 이 정보를 MPI를 거쳐 레지스터에 기록하는 것에 의해 동일한 결과를 얻을 수 있다. 레지스터 dc_huff_n은 각각의 색 성분으로 사용되는 DC 계수 허프만 테이블을 제어한다. 테이블 A,14.9는 이들이 MPEG 동작을 위해 어떻게 컨피그되어야 하는 가를 보여준다. 이것은 MPI를 거쳐 직접 또는 MPEG_DCH_TABLE 토큰을 사용하여 실행될 수 있다.
테이블 A.14.9 MPI를 통한 MPEG DC 허프만 테이블 선택
테이블 A.14.10 MPEG DC 허프만 테이블 컨피그레이션
A.14.4.4 MPEG 화상 구조
MPEG에 대하여 정의된 매크로블럭 구조는 H.261에 의해 사용된 것과 동일하다. 화상 차원은 코드화된 데이타로 인코딩된다.
규격 4:2:0 동작에 대하여, 매크로블럭 특성은 테이블 A.14.8에 나타낸 바와 같이 컨피그되어야 한다. 이것은 레지스터를 나타낸 바와 같이 기록하거나 등가 토큰 (테이블 A.14.5 참조)을 공간 디코더의 입력에 인가하는 것에 의해 실행될 수 있다.
화상 차원을 컨피그하기 위해 취해진 방식은 응용에 의존한다. 화상 포맷을 디코딩 시작 전에 알면, 테이블 A.14.8에 기재된 화상 컨피그레이션 레지스터를 적당한 값으로 초기화할 수 있다. 선택적으로, 화상 차원을 코드화된 데이타로부터 디코딩힐 수 있고, 공간 디코더를 컨피그하는데 사용할 수 있다. 이 경우, 사용자는 파서 에러 ERR_MPEG_SEQUENCE를 서비스해야 한다. (A.14.8, "MPEG 시퀀스층의 변형" 참조).
A.14.4.5 JPEG
베이스라인 JPEG 내에는 디코더를 동작시키기 위해 필요한 제어 소프트웨어의 복잡도(complexity)를 현저하게 변경하는 다수의 인코더 옵션이 있다. 일반적으로, 공간 디코더는 아래의 조건이 만족되는 경우 필요한 지원이 최소한으로 되도록 설계되었다.
프레임당 색 성분의 수는 5보다 작다 (Nf≤ 4).
A.14.4.6 JPEG 허프만 테이블
또한, JPEG은 허프만 코딩 테이블이 디코더에 다운 로딩되게 한다. 이들 테이블은 계수를 설명하는 VLC를 디코딩할 때 사용된다. 스캔당 DC 계수를 디코딩하는 데는 2개의 테이블이 허용되고, AC 계수에 대해서는 2개가 허용된다.
3개의 다른 종류의 JPEG 화일, 즉 상호교환 포맷(interchange format), 압축된 영상 데이타를 위한 약기 포맷(abbreviated format) 및 테이블 데이타를 위한 약기 포맷이 있다. 교환 포맷 화일에는 영상 데이타 디코딩에 필요한 모든 테이블(허프만, 양자화 등)의 정의 및 압축된 영상 데이타가 있다. 약기 영상 데이타 포맷은 테이블 정의를 생략한다. 약기 테이블 포맷 화일은 테이블 정의만을 포함한다.
공간 디코더는 3개의 이들 포맷 모두를 수용한다. 그러나, 약기 영상 데이타 화일은 모든 필요한 테이블이 정의되었을 경우에만 디코딩될 수 있다. 이 정의는 다른 두 개의 JPEG 화일 타입 중의 어느 것을 거쳐 실행될 수 있거나 또는 테이블을 사용자 소프트웨어에 의해 셋업할 수 있다.
각각의 스캔이 다른 조의 허프만 테이블를 사용하면, 테이블 정의는 (인코더에 의해) 각각의 스캔 전에 코드화된 데이타에 위치한다. 이들은 이것 및 임의의 후속하는 스캔 동안 사용되도록 공간 디코더에 의해 자동적으로 로딩된다.
허프만 디코딩의 성능을 개선하기 위해, 통상적으로 사용되는 소정의 기호는특별한 방법으로 케이스화된다(specially cased). 이들은 크기가 0인 DC 계수, 블럭 AC 계수의 끝 및 16개 제로 AC 계수의 런(run)이다. 이들 특별한 방법으로 케이스화된 값은 적당한 레지스터에 기록되어야 한다.
A.14.4.6.1 테이블 선택
레지스터 dc_huff_n 및 ac_huff_n은 AC및 DC 계수 허프만 테이블 중의 어느 것이 어느 색 성분을 사용하는 가를 제어한다. JPEG 동작중, 이들 관계는 스캔 헤더 구문의 TDj 및 Taj 필드에 의해 정의된다.
A.14.4.7 JPEG 화상 구조
공간 디코더에 의해 지원되는 베이스라인 JPEG 디코딩에는 두 개의 다른 레벨, 즉 프레임당 4개 까지의 성분 (Nf≤4) 및 프레임당 4개 이상의 성분 (Nf>4)이 있다. (Nf>4)가 사용되면, 필요한 제어 소프트웨어는 더욱 복잡하게 된다.
A.14.4.7.1 Nf≤4
JPEG 프레임 헤더에 포함된 프레임 성분 지정 변수는 디코딩될 때 매크로블럭 컨피그레이션 레지스터를 컨피그한다 (테이블 A.14.8 참조). 정의한 바와 같이 4개의 다른 색 성분을 디코딩하는데 필요한 모든 규격에 대하여, 사용자 개입은 필요하지 않다.
JPEG에 의해 제공된 옵션의 상세한 설명에 대해서는 JPEG 규격을 참조한다. 또한, A.16.1절에는 JPEG 화상 포맷의 간단한 설명이 있다.
A.14.4.7.2 4개 성분 이상을 갖는 JPEG
공간 디코더는 256개의 다른 색 성분 (JPEG에 의해 허용되는 최대값) 까지 포함하는 JPEG 파일을 디코딩할 수 있다. 그러나, 4개의 색 성분 이상을 디코딩하면, 추가적인 사용자 개입이 필요하다. JPEG은 임의의 스캔에서 최대 4개의 성분만을 허용한다.
A.14.4.8 비규격 변형
상기 기술한 바와 같이, 공간 디코더는 JPEG 및 MPEG에 의해 정의된 것 이상의 일부 화상 포맷을 지원한다.
JPEG은 최소 코딩 단위를 스캔당 10 블럭 이상을 포함하지 않도록 제한한다. 이 제한은 공간 디코더에는 적용되지 않는데 그 이유는 그것이 blocks_h_n, blocks_v_n, max_h 및 max_v에 의해 설명될 수 있는 임의의 최소 코딩 단위를 처리할 수 있기 때문이다.
MPEG은 4:2:0 매크로블럭에 대해서만 정의된다 (테이블 A.14.8 참조). 그러나, 공간 디코더는 3개의 다른 성분 매크로블럭 구조 (예를 들면, 4:2:2)를 처리할 수 있다.
A.14.5 비디오 이벤트 및 에러
비디오 디멀티플렉서는 두 종류의 이벤트, 즉 파서 이벤트 및 허프만 이벤트를 발생할 수 있다. 이벤트 및 인터럽트를 어떻게 취급하는 가를 설명하는 A.6.3 "인터럽트"를 참고하기 바란다.
A.14.5.1 허프만 이벤트
허프만 이벤트(huffman event)는 허프만 디코더에 의해 발생된다. huffman_event 및 huffman_mask에 지시된 이벤트는 인터럽트가 발생하는 가를 결정한다. huffman_mask가 1로 세팅되면, 인터럽트가 발생하고 허프만 디코더는 정지한다. 레지스터 huffman_error_code[2:0]는 이벤트의 발생을 나타내는 값을 유지한다.
인터럽트를 제공한 후 huffman_event에 1이 기록되는 경우, 허프만 디코더는 에러로부터 복구하려고 한다. 또한, (인터럽트를 마스킹하고 (masking) 허프만 디코더를 정지시키지 않으면서) huffman_mask가 0으로 세팅되면, 허프만 디코더는 에러로부터 자동적으로 복구하려고 한다.
A.14.5.2 파서 이벤트
파서 이벤트(parser events)는 파서에 의해 발생된다. 이 이벤트는 parser_event에 표시된다. 그 후, parser_mask는 인터럽트가 발생하는 가를 결정한다. marser_mask가 1로 세팅되면, 인터럽트가 발생하고 파서는 정지한다. 레지스터 parser_error_code[7:0]는 이벤트의 발생을 나타내는 값을 유지한다.
인터럽트 제공후 huffman_event에 1이 기록되면, 허프만 디코더는 에러로부터 복구하려고 한다. 또한, (인터럽트가 마스킹되고 허프만 디코더가 정지하지 않으면서) huffman_mask가 0으로 세팅되면, 허프만 디코더는 에러로부터 자동적으로 복구하려고 한다.
인터럽트 제공 후 Parser_event에 1이 기록되면, 파서는 동작을 재개한다. 이벤트가 비트스트림 에러를 나타내면, 비디오 디멀티플렉서는 에러로부터 복구하려고 한다.
parser_mask가 0으로 세팅되면, 파서는 자신의 이벤트 비트를 세팅하지만 인터럽트 또는 정지를 발생하지 않는다. 동작을 계속하여 에러로부터 자동적으로 복구하려고 한다.
테이블 A.14.11 허프만 에러 코드
테이블 A.14.12 파서 에러 코드
각각의 규격은 정의된 파서 에러 코드의 다른 서브-세트를 사용한다.
테이블 A.14.13 파서 에러 코드 및 상이한 규격
A.14.6 사용자 및 확장 데이타 수신
MPEG 및 JPEG은 사용자 및 확장 데이타를 내장(emded)하기 위해 동일한 메카니즘을 사용한다. 데이타는 시작/마커 코드에 붙어 있다. 시작 코드 검출기는 응용이 이러한 데이타에 관심이 없으면 이 데이타를 삭제하도록 컨피그될 수 있다(A.11.3.3 참조).
A.14.6.1 데이타 소스의 식별
파서 이벤트들, ERR_EXTENSION_TOKEN 및 ERR_USER_TOKEN은 비디오 디멀티플렉서에서 EXTENSION_DATA 또는 USER_DATA의 도달을 나타낸다. 이들 토큰이 시작 코드 검출기에 의해 발생되었으면 (A.11.3.3 참조), 이들은 시작 코드 검출기가 토큰을 발생하게 하는 시작/마커 코드의 값을 운반한다 (테이블 A.11.4참조). 이 값은 파서 인터럽트를 서비스하는 동안 rom-revision 레지스터를 판독함으로써 판독될 수 있다. 비디오 디멀티플렉서는 parser_event에 1이 기록될 때까지 정지하고 있다 (A.6.3 "인터럽트" 참조).
A.14.6.2 데이타의 판독
EXTENSION_DATA 및 USER_DATA 토큰은 확장 또는 사용자 데이타를 운반하는 DATA 토큰을 바로 뒤따르는 것으로 기대된다. 이 DATA 토큰이 비디오 디멀티플레서에 도달함으로써, ERR_EXTENSION_DATA 또는 ERR_USER_DATA 파서 이벤트가 발생된다. DATA 토큰의 첫 번째 바이트는 인터럽트가 서비스되는 동안 rom_revision 레지스터를 판독함으로써 판독될 수 있다.
비디오 디멀티플레서 레지스터, continue의 상태는 이벤트가 클리어된 후 동작을 결정한다. 이 레지스터가 값 0을 유지하면, DATA 토큰 내의 나머지 데이타는 비디오 디멀티플렉서에 의해 소비되고 이벤트는 발생되지 않는다. 연속(continue)이 1로 설정되면, 확장 또는 사용자 데이타의 각각의 바이트가 비디오 디멀티플렉서에 도착할 때 이벤트가 발생한다. 이것은 DATA 토큰을 다 소모되거나 또는 연속(continue)이 0으로 설정될 때까지 계속된다.
주:
1) 확장/사용자 데이타의 첫번째 바이트는 연속의 상태에 관계없이 rom_revision 레지스터를 거쳐 항상 제출된다.
2) 확장/사용자 데이타의 마지막 바이트가 판독되었음을 나타내는 이벤트는 없다.
A.14.7 잉여 정보의 수신
H.261 및 MPEG은 코딩 규격을 확장하는 정보가 화상들 및 블럭 (H.261) 또는 슬라이스 (MPEG)의 그룹 내에 내장되게 해준다. 메커니즘은 (A 14,6절에서 기술된) 확장 및 사용자 데이타에 사용된 것과 다르다. 시작 코드는 데이타에 앞서지 않으므로, 시작 코드 검출기에 의해 제거될 수 없다.
H.261동작 중, 파서 이벤트 ERR_PSPARE 및 ERR_GSPARE는 이 정보의 검출을 나타낸다. MPEG 동작 중 대응하는 이벤트는 ERR_EXTRA_ PICTURE 및 ERR_EXTRA_SLICE이다.
파서 이벤트가 발생하는 경우, 잉여 정보의 첫 번째 바이트는 레지스터 rom_revisoin을 통해 제시된다.
비디오 더멀티플렉서 레지스터, continue의 상태는 이벤트가 클리어된 후의동작을 결정한다. 이 레지스터 값 0을 유지하면, 나머지 잉여 정보는 비디오 디멀티플렉서에 의해 소비되고 이벤트는 발생하지 않는다. 연속(continue)이 1로 설정되면, 잉여 정보의 각각의 바이트가 비디오 디멀티플렉서에 도착할 때 이벤트가 발생한다. 이것은 잉여 정보를 소모되거나 또는 연속이 0으로 설정될 때까치 계속된다.
주:
1) 확장/사용자 데이타의 첫 번째 바이트는 연속의 상태에 관계없이 rom_revison 레지스터를 거쳐 항상 제시된다.
2) 확장/사용자 데이타의 마지막 바이트가 판독된 것을 나타내는 이벤트는 없다.
A.14.7.1 FIELD_INFO 토큰의 발생
MPEG 동작 중, 레지스터 field_info가 1로 세트되면, extra_information_picture의 첫 번째 바이트는 FIELD_INFO 토큰에 놓인다. 이 동작은 MPEG의 규격화된 동작에 의해 커버되지 않는다 표 A.3.2는 FIELD_INFO 토큰의 정의를 보여준다.
field_info가 1로 세트되면, extra_information_picture의 첫 번째 바이트에 대하여 파서 이벤트가 발생하지 않는다. 그러나, extra_information_picture의 다른 순차적인 바이트에 대해서는 이벤트가 발생한다. extra_information_ picture의 단지 하나의 바이트만이 있다면, 파서 이벤트는 발생하지 않는다.
A.14.8 MPEG 시퀀스 층에서의 변경
MPEG 시퀀스 헤더는 비디오가 디코딩되는 것에 관하여 다음의 특성, 즉
* 수평 및 수직 크기
* 픽셀 어스팩트비(pixel aspect ratio)
* 화상 속도
* 코드화된 데이타 속도
* 비디오 버퍼 검증 기구 버퍼 크기
를 설명한다.
공간 디코더가 시퀀스 헤더를 디코딩할 때 이들 파라메타 중 임의의 것이 바뀌면, 파서 이벤트 ERR_MPEG_SEQUENCE가 발생한다.
A.14.8.1 화상 크기 변경
화상 크기가 변경되었으면, 사용자의 소프트웨어는 horiz_pels 및 vert_pels의 값을 판독하고, 레지스터 horiz_macroblocks 및 vert_macroblocks에 로딩되는 새로운 값을 계산해야 한다.
A.15절 공간 디코딩
본 발명에 따르면, 공간 디코딩은 토큰 버퍼의 출력과 공간 디코더의 출력 사이에서 발생한다.
공간 디코딩에 있어서 3개의 주요 유닛, 즉 역모델러, 역양자화기 및 역이산 코사인 변환기가 있다. (토큰 버퍼에서) 이 부분으로의 입력에서, DATA 토큰은 양자화 계수의 런 및 레벨 표현(run and level representation)을 포함한다. (역 DCT의) 출력에서 DATA 토큰은 픽셀 정보의 8x8 블럭을 포함한다.
A.15.1 역모델러
토큰 버퍼에서 DATA 토큰은 양자화 계수의 값 및 표현된 계수 사이의 제로의 수에 관한 정보를 포함한다. 역모델러는 각각의 DATA 토큰이 64개 값을 포함하도록 제로의 런에 관한 정보를 전개한다. 이점에 있어서, DATA 토큰의 값은 양자화된 계수이다.
역모델링 프로세스(inverse modeling process)는 현재 사용 중인 코딩 규격에 관계없이 동일하다. 컨피그레이션은 필요하지 않다.
모델링 및 역모델링 기능의 모든 필요 조건을 보다 더 잘 이해하기 위해, 임의의 화상 코딩 규격을 조사할 수 있다.
A.15.2 역양자화기
인코더에서, 양자화기는 DCT의 출력을 분할하여 DCT 계수의 분해능(resolution)을 줄인다. 디코더에서, 역양자화기의 기능은 이들 양자화된 DCT 계수를 곱하여 이들의 원래 값의 근사값으로 이들을 복원하는 것이다.
A.15.2.1 규격 양자화 방법의 개요
상이한 코딩 규격의 각각에 의해 사용된 양자화 방법에는 현저한 차이가 있다. 규격의 각각에 의해 사용된 양자화 방법의 상세한 이해를 구하기 위해서는 관련된 코딩 규격 문서를 공부해야 한다.
레지스터 iq_coding_standard는 상이한 규격의 구비 조건에 맞도록 역양자화기의 동작을 구성한다. 정상 동작시, 이 코딩 레지스터는 CODING_ STANDARD 토큰에 의해 자동적으로 로딩된다. 코딩 규격 컨피그레이션에 관한 보다 더 많은 정보는 A.21.1절을 참조하기 바란다.
양자화 방법 사이에서의 주된 차이점은 양자화 계수가 곱해지는 수의 소스이다. 이들은 아래에서 약술된다. 여기에 기술하지는 않지만, 필요한 산술 연산, 라운딩(rounding) 등 에도 또한 작은 차이가 있다.
A.15.2.1.1 H.261 1Q 개요
H.261에서, 하나의 "스캐일 인수(scale factor)"는 계수를 스케일하기 위해사용된다. 인코더는 스케일 인수를 주기적으로 변경하여 발생되는 데이타 속도를 조절할 수 있다. 인트라 코드화된 블럭(intra coded block)에서 "DC"계수에는 약간 다른 규칙이 적용된다.
A.15.2.1.2 JPEG 1Q 개요
베이스라인 JPEG은 각각의 스캔에서 4개의 다른 색 성분까지를 포함하는 화상을 허용한다. 이들 4개의 색 성분 각각에 대하여, 64개의 엔트리 양자화 테이블을 지정할 수 있다. 이들 테이블의 각각의 엔트리는 64개 양자화된 계수 중의 하나에 대한 "스케일" 인수로서 사용된다.
JPEG 양자화 테이블에 대한 값은 코드화된 JPEG 데이타에 포함되고 양자화 테이블에 자동적으로 로딩된다.
A.15.2.1.3 MPEG 1Q 개요
MPEG은 H.261 및 JPEG 양자화 기술을 모두 사용한다. JPEG과 같이, 각각 64개의 엔트리가 있는 4개의 양자화 테이블을 사용할 수 있다. 그러나, 테이블의 사용은 상당히 다르다.
두 "타입"의 데이타, 즉 인트라(Intra) 및 비인트라(non-intra)가 고려된다. 각각의 데이타 타입에 대하여 다른 테이블이 사용된다. MPEG에 의해 두개의 "디폴트" 테이블이 정의된다. 하나는 인트라 데이타를 위한 것이고 다른 것은 비인트라 데이타를 위한 것이다 (테이블 A,15.2 및 테이블 A.15.3 참조). 이들 디폴트 테이블은 MPEG 디코딩이 가능하기 전에 공간 디코더의 양자화 테이블 메모리에 기록되어야 한다.
MPEG은 두개의 "다운 로딩된" 양자화 테이블을 허용한다. 하나는 인트라 데이타를 위한 것이고, 다른 것은 비인트라 데이타를 위한 것이다. 이들 테이블의값은 MPEG 데이타 스트림에 포함되고, 양자화 테이블 메모리에 자동적으로 로딩된다.
테이블로부터의 값 출력은 스케일 인수에의해 수정된다.
A 15.2.2 역양자화기 레지스터
테이블 A.15.1 역양자화기 레지스터
본 발명에서, iq_access 레지스터는 양자화 테이블 메모리를 액세스할 수 있기 전에 세팅되어야 한다. 양자화 테이블 메모리는 iq_access가 0으로 세팅될 때 그것을 판독하려고 하면 값을 제로로 복귀시킨다.
A.15.2.3 역양자화기의 컨피그레이션
정상 동작시, CODING_STANDARD 토큰에 의해 자동적으로 컨피그되는 것과 같이 역양자화기의 코딩 규격을 컨피그할 필요는 없다.
H.261동작에 대하여, 양자화기 테이블은 사용되지 않는다. 특정한 컨피그레이션은 필요하지 않다. JPEG 동작에 대하여, 역양자화기에 의해 필요한 테이블은 코드화된 데이타에서 추출된 정보로 자동적으로 로딩되어야 한다.
MPEG 동작은 디폴트 양자화 테이블이 로딩될 것을 요구한다. 이것은 iq_access가 1로 세팅되는 동안 실행되어야 한다. 테이블 A.15.2의 값은 역양자화기의 확장된 어드레스 공간(키홀 레지스터 iq_keyhole_address 및 iq_keyhole_data를 통해 액세스 가능함)의 위치 0x00 내지 0x3F에 기록되어야 한다. 마찬가지로, 테이블 A.15.3의 값은 역양자화기의 확장된 어드레스 공간의 위치 0x40 내지 0x7F에 기록되어야 한다.
테이블 A.15.2 인트라 코드화된 블럭의 디폴트 MPEG 테이블
a. 양자화 테이블 메모리의 시작으로부터의 오프셋
b. 양자화 테이블 값
테이블 A.15.3 비인트라 코드화된 블럭의 디폴트 MPEG 테이블
A.15.2.4 토큰으로부터의 테이블 컨피그레이션
MPI를 통해 역양자화기 테이블을 컨피그하는 다른 예로서, 토큰에 의해 이들은 초기화될 수 있다(initialized). 이들 토큰은 코드화된 데이타 포트 또는 MPI를 거쳐 공급될 수 있다.
QUANT_TABLE 토큰은 테이블 A.3.2에 설명되어 있다.이것은 4개 (0 내지 3) 테이블 위치 중의 어느 것이 토큰에 의해 정의되는 가를 지정하는 두개의 비트 필드 tt를 갖는다. MPEG 동작에 대하여, 테이블 0 및 1의 디폴트 정의는 로딩될 필요가 있다.
A.15.2.5 양자화 테이블 값
JPEG 및 MPEG에 대하여, 양자화 테이블 엔트리는 8 비트 번호이다. 값 255 내지 1은 적합하다(legal). 값 0은 적합하지 않다.
A.15.2.6 양자화 테이블의 번호 순서
양자화 테이블 값은 "지그재그" 스캔 순서로 사용된다 (코딩 규격 참조).
테이블은 (8x8 어레이라기 보다는) 64 값의 1차원 어레이로서 고려되어야 한다. 하부 어드레스에서의 테이블 엔트리는 낮은 주파수 DCT 계수에 대응한다.
양자화 테이블 값이 QUANT_TABLE 토큰에 의해 운반될 때, 토큰 헤더 후의 첫번째 값은 "DC" 계수에 대한 테이블 엔트리이다.
A.15.2.7 역양자화기 테스트 레지스터
테이블 A.15.4 역양자화기 테스트 레지스터
A 15.3 역이산 코사인 변환
본 발명의 역이산 코사인 변환 프로세서는 CCITT 권고 H.261, IEEE 규격 P1180에 설정된 구비조건을 충족시키고 MPEG의 현재 초안 개정본에 기술된 요구 조건을 만족시킨다.
역이산 코사인 변환 처리는 사용된 코딩 규격에 관계없이 동일하다. 사용자에 의한 컨피그레이션은 필요하지 않다.
역이산 변환 프로세서와 관련된 두개의 이벤트가 있다.
테이블 A.15.5 역DCT 이벤트 레지스터
DCT 및 역DCT 기능을 보다 더 잘 이해하기 위해서는, 임의의 화상 코딩 규격을 검사할 수 있다.
A.16절 공간 디코더의 출력 접속
공간 디코더의 출력은 9비트 폭 데이타 워드를 갖는 규격 토큰 포트이다. 인터페이스의 전기적 동작에 관한 보다 더 많은 정보는 A.4절을 참조하기 바란다
출력에서 공급되는 토큰은 사용되는 코딩 규격에 의존한다. 예를 들어 설명하기 위해, 이 절에서는 JPEG 동작에 대하여 구성되는 경우의 공간 디코더에 관해 설명한다. 이 절은 시간 디코더가 JPEG 디코딩에 기인하는 토큰 시퀀스를 변경하지 않을 때, JPEG 동작 중 시간 디코더의 출력에서 관찰되는 토큰 시퀀스를 설명한다.
그러나, MPEG 및 H.261은 시간 디코더의 사용을 모두 필요로 한다. MPEG 및 H.261 동작에 대하여 형성될 때, 시간 디코더의 출력으로의 접속에 관한 보다 더 많은 정보는 A.19절을 참조하기 바란다.
또한, 이 절은 어느 토큰이 공간 디코더의 출력에서 입수 가능하고 그 출력을 표시하기 위해 회로를 설계할 때 어느 것이 가장 유용한 가를 증명한다. 다른 토큰도 존재하지만, 출력을 표시하기 위해 필요하지 않으므로, 여기서 설명하지는 않는다.
이 절은 다음, 즉
* 시퀀스의 시작 및 끝 식별 방법,
* 화상의 시작 및 끝 식별 방법,
* 화상을 디스플레이할 때의 식별 방법, 및
* 디스플레이 장치에 화상 데이타가 위치하여야하는 장소의 식별 방법
을 설명하는 것에 중점을 둔다.
A.16.1 JPEG 화상의 구조
이 절은 JPEG 구문의 일부 특징의 개요를 제공한다. 전체 설명은 코딩 규격을 참조하기 바란다.
JPEG은 개별 화상을 인코딩하기 위한 다양한 메카니즘을 제공한다. JPEG은 화상의 집합체를 함께 인코딩하여 비디오를 인코딩하는 메카니즘을 제공하는 방법을 설명하려는 시도는 없다.
본 발명에 따르면, 공간 디코더는 JPEG의 베이스라인 순차 동작 모드를 지원 한다. 구문에는 3개의 주요 레벨, 즉 화상, 프레임 및 스캔이 있다. 순차적인 영상은 단지 하나의 프레임만을 포함한다. 하나의 프레임은 1과 256개 사이의 다른 영상(색) 성분을 포함할 수 있다.이들 영상 성분은 다양한 방식으로 스캔으로 합쳐질 수 있다. 각각의 스캔은 1과 4사이의 영상 성분을 포함할 수 있다(제81도의 "JPEG 베이스라인 순차 구조" 참조).
스캔이 하나의 영상 성분을 포함하면, 인터리빙되지않은 스캔 (non-interleaved scan)이고, 하나 이상의 영상 성분을 포함하면, 인터리빙된 스캔(interleaved scan)이다. 하나의 프레임은 인터리빙된 스캔과 인터리빙되지 않은 스캔의 결합을 포함할 수 있다. 프레임이 포함할 수 있는 스캔의 수는 프레임이 포함할 수 있는 영상 성분의 수에서 256개의 한계에 의하여 결정된다.
인터리빙된 스캔 내에서, 데이타는 MPEG 및 H.261에 사용된 매크로블럭과 유사한 최소 코딩 단위(minimum coding unit: MCU)들로 조직된다. 이들 MCU는 화상내에서 래스터 순서로 된다. 인터리빙되지 않은 스캔에서, MCU는 하나의 8x8 블럭이다. 또한, 이들은 래스터(raster)로 구성된다
공간 디코더 1 내지 4개의 다른 색 성분을 포함하는 JPEG 데이타를 용이하게 디코딩할 수 있다. 보다 더 많은 수의 성분을 설명하는 화일을 디코딩할 수도 있다. 그러나, 스캔 사이의 일부 리컨피그레이션은 디코딩될 다음 세트의 성분을 포함할 펄요가 있다.
A.16.2 토큰 시퀀스
JPEG 마커 코드는 시작 코드 검출기에 의해 유사한 MPEG이라는 이름의 토큰로 변환된다 (테이블 A.11.4 및 제82도 "토큰화된 JPEG 화상" 참조)
A.17절 시간 디코더
* 30MHz 동작
* MPEG 및 H.261 비디로 디코더에 대한 시간 디코딩 제공
* H.261 CIF 및 QCIF 포맷
* 704 x 480까지의 MPEG 비디오 해상도, 30Hz, 4:2:0
* 플렉시블(flexib1e)한 크로마 샘플링 포맷
* MPEG 화상 시퀀스를 재배치할 수 있음
* 비접착성 DRAM 인터페이스
* 단일 +5V 전원
* 208 핀 PQFP 패키지
* 최대 전력 소비 2.5W
* 규격 페이지 모드 DRAM 사용
시간 디코더는 공간 디코더에 대한 보조 디코더이다. 이것은 H.261 및 MPEG에 의해 필요한 시간 디코딩을 제공한다.
시간 디코더는 MPEG 및 H.261에 의해 필요한 모든 예측 형성 특징을 구현한다. 단일 4Mb DRAM (예를 들면, 512k x 8)에 의해, 시간 디코더는 CIF 및 QCIF H.261 비디오를 디코딩할 수 있다. 8Mb DRAM (예를 들면 두개의 256k x 16)에 의해 704 x 480, 30Hz, 4:2:0 MPEG 비디오를 디코딩할 수 있다.
시간 디코더는 인트라 코딩 방법 (JPEG 등)을 필요로 하지 않는다. 다중-규격 디코더에 포함되면, 시간 디코더는 디코딩된 JPEG 화상을 자신의 출력으로 전달 한다.
주: 상기 값은 본 발명에 따른 하나의 실시예를 위한 단지 예시적인 것으로 그것에 제한되지 않는다. 본 발명의 본질에서 벗어남이 없이 다른 값 및 범위도 또한 사용될 수 있다.
A.17.1 시간 디코더 신호
테이블 A.17.1 시간 디코더 신호
테이블 A.17.2 시간 디코더 테스트 신호
테이블 A.17.3 시간 디코더 핀 할당
A.17.1.1 "nc" 비접속 핀
테이블 A.17.3에서 no가 붙은 핀은 본 발명에서 현재 사용되지 않은 것으로 장래 제품을 위해 남겨둔(reserved) 것이다. 이들 핀은 비접속인 채로 두어야 한다. 이들을 VDD, GND, 서로 또는 임의의 다른 신호에 접속되어서는 안된다.
A.17.1.2 VDD 및 GND 핀
잘 알려진 바와 같이, 모든 VDD 및 GND 핀은 적절한 전원에 접속되어야 한다. 장치는 모든 VDD 및 GND핀을 정확히 사용하지 않으면 정확히 동작하지 않는다.
A.17.1.3 정상 동작을 위한 테스트 핀 접속
시간 디코더 상의 9개 핀은 내부 테스트용으로 예약된다.
테이블 A.17.4 디폴트 테스트 핀 접속
A.17.1.4 정상 동작을 위한 JPAG 핀
A.81.1 참조
테이블 A.17.5 시간 디코더 메모리 맵의 개요
테이블 A.17.6 인터럽트 서비스 영역 레지스터
테이블 A.17.7 칩 액세스 레지스터
테이블 A.17.8 화상 시퀀싱
테이블 A.17.9 DRAM 인터페이스 컨피그레이션 레지스터
테이블 A.17.9 DRAM 인터페이스 컨피그레이션 레지스터(계속)
테이블 A.17.10 버프 컨피그레이션 레지스터
테이블 A.17.11 테스트 레지스터
A.18절 시간 디코더 동작
A.18.1 데이타 입력
시간 디코더의 입력 데이타 포트는 9비트 폭 데이타 워드를 갖는 표준 토큰 포트이다. 대부분의 애플리케이션에 있어서, 이것은 공간 디코더의 출력 토큰 포트에 직접 접속된다. 이 인터페이스의 전기적 동작에 관한 보다 더 많은 정보는 A.4절을 참조하기 바란다.
A.18.2 자동 컨피그레이션
코드화된 비디오의 화상 포맷에 관한 변수는 공간 디코더에 의해 발생된 토큰에 의해 시간 디코더 내의 레지스터로 자동적으로 로딩된다.
테이블 A.18.1 토큰을 경유한 시간 디코더의 컨피그레이션
A.18.3 수동 컨피그레이션
사용자는 인수(factor)에 따른 응용을 (마이크로프로세서 인터페이스에 의하여) 컨피그해야 한다.
A.18.3.1 컨피그할 때
시간 디코더는 데이타 처리가 발생하지 않을 때 컨피그되어야 한다. 이것은 리셋이 제거된 후의 디폴트 상태이다. chip_access 레지스터에 1을 기록함으로써 리컨피그레이션이 가능하도록 시간 디코더가 정지될 수 있다. 컨피그레이션이 완료된 후, chip_access에 0을 기록해야 한다.
DRAM 인터페이스를 구성할 때의 상세한 설명은 A,5.3절을 참조하기 바란다.
A.18.3.2 DRAM 인터페이스
DRAM 인터페이스 타이밍은 예측하여 코드화된 비디오(예를 들면, H.261 또는 MPEG)를 디코딩할 수 있기 전에 컨피그되어야 한다. A.5절 "DRAM 인터페이스" 참조.
테이블 A.18.2 시간 디코더 레지스터
A.18.3.3 화상 버퍼 레지스터에서의 수
화상 버퍼 포인터 (18 비트) 및 성분 오프셋 (17 비트) 레지스터는 바이트 어드레스가 아닌, 블럭 (8 x 8 바이트) 어드레스를 지정한다.
A.18.3.4 화상 버퍼 할당
예측적으로 코드화된 비디오(predictly coded vedeo) (H.261 또는 MPEG)을 디코딩하기 위해, 시간 디코더는 두개의 화상 버퍼를 관리해야 한다. 이들 버퍼를 어떻게 사용하는가에 관한 정보는 A.18.4.4절을 참조하기 바란다.
사용자는 (다른 화상 버퍼와 오버랩하는 일없이) 필요한 비디오 포맷으로된 단일 화상을 저장하기 위해 화상 버퍼 포인터 (picture_buffer_0 및 picture_buffer_1)의 각각의 상에 충분한 메모리를 확보하여야 한다. 통상적으로, 화상 버퍼 포인터 중의 하나는 0으로 세팅되고 (즉, 메모리의 바닥), 나머지는 메모리 공간의 중간을 지적하도록 세팅된다.
A.18.3.4.1 MPEG 또는 H.261에 대한 정상 컨피그레이션
H.261 및 MPEG은 다른 색 성분 사이에서 4:1:1 비율을 사용한다. (즉, 색 (chrom inance) 성분 중의 어느 것에 있는 픽셀의 4배만큼의 휘도 픽셀이 있다).
A.3.5.1절 "성분 식별 번호"에 설명되어 있는 바와 같이, 성분 0는 휘도 성분이고, 성분 1 및 2는 색 성분이다.
성분 오프셋 레지스터의 한 구성 예는, 성분 0이 화상 버퍼 포인터에서 시작하도록 component_offset_0을 0으로 세팅하는 것이다. 마찬가지로, component_offset_1은 화상 버퍼 크기의 4/6으로 세팅될 component_offset_2는 화상 버퍼 크기의 5/6으로 세팅될 수 있다.
A.18.3.5 화상 시퀀스 재정렬
MPEG은 3개의 상이한 화상 타입, 즉 인트라(I), 예측된(P) 및 양방향으로 보간된 (B)를 사용한다. B 화상은 두개의 화상, 즉 하나는 미래로부터의 것이고 다른 하나는 과거로부터의 것에서의 예측에 따른다. 화상 순서는 그들에게 B 화상을 디코딩하는 요청이 있기 전에 I 및 P 화상을 코드화된 데이타로부터 디코딩할 수 있도록 인코더에서 수정된다.
화상 시퀀스는 이들 화상이 디스플레이될 수 있기 전에 정정되어야 한다. 시간 디코더는 이 화상 재정렬을 (레지스터 MPEG_reordering=1로 세팅하는 것에 의해) 제공한다. 또한, 사용자는 이 표시 인터페이스 기능의 일부로서 화상 재정렬을 구현하기를 원할 수 있다. 화상 재정렬을 제공하도록 시간 디코더를 컨피그하는 것은 디코딩될 수 있는 비디오 해상도를 떨어뜨릴 수 있다. A.18.5절 참조.
A.18.4 예측 형성
H.261 디코딩 및 MPEG 디코딩의 예측 형성 구비 조건은 상당히 다르다. CODING_STANDARD 토큰은 상이한 규격의 예측 구비 조건을 수용하도록 시간 디코더를 자동적으로 컨피그한다.
A.18.4.1 JPEG 동작
JPEG 동작에 대하여 컨피그될 때, JPEG이 시간 디코딩을 요청하지 않으므로 예측을 실행하지 않는다.
A.18.4.2 H.261 동작
H.261에서, 예측는 방금 디코딩된 화상에서만 있다. 움직임 벡터는 단지 정 수 픽셀 정확도로만 지정된다. 인코더는 저역 필터가 임의의 예측 결과에 인가되는 것을 지정할 수 있다.
각각의 화상이 디코딩될 때, 이것은 다음 화상 디코딩에 사용될 수 있도록 off_chip DRAM의 화상 버퍼에 기록된다. 디코딩된 화상은 off_chip DRAM에 기록될 때 시간 디코더의 출력에 나타난다.
예측의 전체 설명 및 이에 수반되는 산술 연산에 대해서는 H.261 규격을 참조한다. 본 발명의 시간 디코더는 H.261의 구비 조건에 전적으로 따른다.
A.18.4.3 MPEG 동작 (재정렬 없음)
시간 디코더의 동작은 3개의 상이한 MPEG 화상 타입 (I, P, B) 마다 변한다.
"I" 화상은 시간 디코더에 의한 또 다른 디코딩을 필요로 하지 않지만, P 및 B 화상 디코딩에서 다음에 사용되도록 화상 버퍼에 저장되어야 (프레임 저장) 한다.
P화상 디코딩은 이전에 디코딩된 P 또는 I 화상에서의 예측 형성을 필요로 한다. 디코딩된 P 화상은 P 및 B 화상 디코딩에 사용되도록 화상 버퍼에 저장된다. MPEG은 움직임 벡터를 반픽셀(half pixel) 정확도로 지정한다. 온 칩 필터 (on-chip filter)는 이 반픽셀 정확도를 지원하기 위한 보간을 제공한다.
B 화상은 두 화상 버퍼로부터 예측을 필요로할 수 있다. P화상에 의한 것과 같이, 반픽셀 움직임 벡터 해상도 정확도는 화상 정보의 온-칩 보간을 필요로 한다. B 화상은 오프-칩 버퍼에 저장되지 않는다. 이들은 단지 과도적일 뿐이다.
모든 화상은 디코딩될 때 시간 디코더의 출력 포트에 나타난다. 따라서, 화상 시퀀스는 코드화된 MPEG 데이타에서의 것과 동일하다(제85도의 상부 참조).
예측의 상세한 설명 및 이에 수반되는 산술 연산을 이해하기 위해서는 제안된 MPEG 규격 초안을 참조한다. 이들 구비 조건은 본 발명의 시간 디코더에 의해 충족된다.
A.18.4.4 MPEG 동작 (재정렬 있음)
화상 재정렬이 있는 (MPEG_reordering=1) MPEG 동작을 컨피그할 때, 예측 형성 동작은 A.18.4.3절에서 설명한 것과 마찬가지이다. 그러나, 화상 시퀀스를 재정렬하기 위해 또 다른 데이타 전송이 실행된다.
B 화상 디코딩은 A.18.4.3절에서 설명한 바와 같다. 그러나, 1 및 P 화상은 디코딩될 때 출력되지 않는다 그 대신, 이들은 오프-칩 버퍼에 기록되고(상기 기술된 바와 같음), 다음 I 또는 P 화상이 디코딩을 위해 도착할 때만 판독된다.
A.18.4.4.1 디코더 기동 특성
첫 번째 I 화상의 출력은 다음 P (또는 I) 화상이 디코딩을 시작할 때까지 지연된다. 이것은 비디오 디코더의 기동 특성을 평가할 때 고려되어야 한다.
A.18.4.4.2 디코더 차단 특성
시간 디코더는 그 오프-칩 버퍼 (프레임 저장)에서 이전 화상을 플러싱하기 위해 후속하는 P 또는 I 화상에 의존한다. 이것은 비디오 시퀀스의 끝에서 그리고 새로운 비디오 시퀀스를 시작할 때 중요성을 갖는다. 공간 디코더는 마지막 P (또는 I) 화상을 플러싱하기 위해 비디오 시퀀스의 끝에서 "위조(fake)"IP 화상의 생성을 용이하게 한다. 그러나, 이 "위조" 화상은 다음 비디오 시퀀스가 시작할 때 플러싱 아웃된다(flushed out).
공간 디코더는 이 "위조" 화상을 억제하는 옵션을 제공한다. 이것은 새로운 비디오 시퀀스가 오랜된 시퀀스가 끝난 직후에 디코더에 공급될 것이라는 것이 알려진 경우에 유용하다. 이 새로운 시퀀스의 첫번째 화상은 이전 시퀀스의 마지막 화상을 플러싱 아웃한다.
A.18.5 비디오 해상도
MPEG 디코딩시 시간 디코더가 지원할 수 있는 비디오 해상도는 자신의 DRAM인터페이스의 메모리 대역 폭에 의해 제한된다 MPEG에 대하여 두가지 경우, 즉 MPEG 화상 재정렬이 있는 경우와 없는 경우를 고려할 필요가 있다.
A.18.5.2 및 A.18.5.3절은 현재 MPEG 규격의 초안에 필요한 최악의 구비조건을 논의한다. MPEG의 서브셋(subset)은 보다 더 낮은 메모리 대역폭 구비 조건을 갖는 것으로 고려될 수 있다. 예를 들면, 정수 해상도 움직임 벡터(integer resolution motion vector) 만을 사용하는 것에 의해, 또는 B 화상을 사용하지 않는 것에 의해, 메모리 대역폭 구비 조건이 현저하게 감소된다. 이러한 서브셋은 여기에서 검토하지 않는다.
A.18.5.1 DRAM 인터페이스의 특징
DRAM 인터페이스를 거쳐 데이타를 전송하는 데 걸리는 사이클 수는 다수의 인수,즉 사용된 DRAM에 맞추기 위한 DRAM 인터페이스의 타이밍 컨피그레이션 데이타 버스 폭(8, 16 또는 32 비트)데이타 전송 타입
8x8 블럭 판독 또는 기록
반픽셀 정확도에 대한 예측
정수 픽셀 정확도에 대한 예측
에 의존한다.
DRAM 인터페이스의 상세한 컨피그레이션에 관한 보다 더 많은 정보는 A.5절 "DRAM 인터페이스"를 참조한다.
테이블 A.18.3은 각각의 타입의 데이타 전송에 얼마나 많은 DRAM 인터페이스 "사이클"이 필요한 가를 보여준다.
테이블 A.18.3 시간 디코더에 대한 데이타 전송 시간
테이블 A.18.4는 테이블 A.18.3에서의 숫자를 취한 것으로 "대표적" DRAM에 대하여 이들을 평가한다. 이 예에서는 27MHz 클럭을 가정한다. 여기서는 27MHz를 사용하지만, 이것에 한정되는 것은 아니다. 액세스 시작에는 11틱(ticks) (102ns)이 소요되고 데이타 전송에는 6틱(56ns)가 소요된다.
A.18.5.2 재정렬하지 않는 MPEG 해상도
피크 메모리 대역폭 로드(peak memory bandwidth load)는 B 화상 디코딩의 경우 발생한다. "최악(worst case)"의 시나리오에 있어서, B프레임은 모든 예측이 반픽셀 정확도인 두 화상 버퍼 모두로 부터의 예측에 의해 형성될 수 있다.
테이블 A.18.4 "대표적" DRAM에 의한 예
테이블 A.18.4에서 고려한 예를 사용하는 것에 의해, (32비트 폭 인터페이스에 의하여) 두개의 정확한 반픽셀 정확도의 예측을 필요로 하는 데이타를 판독하기 위해 DRAM 인터페이스 3815 ns를 취하는 것을 알 수 있다. 시간 디코더가 지원할 수 있는 해상도는 하나의 화상 시간 내에 실행될 수 있는 이들 예측 수에 의해 결정된다. 이 예에서는 시간 디코더가 하나의 33ms 화상 주기 (예를 들면, 30Hz 비디오)로 8737 8x8 블럭을 처리할 수 있다.
요구된 비디오 포맷이 704x480이면, (4:2:0 크로마 샘플링 고려시) 각각의 화상은 7920개 8x8 블럭을 포함한다. 이 비디오 포맷은 (DRAM 리프레시 등의 임의의 다른 요인을 고려하기 전에) 이용 가능한 DRAM 인터페이스 대역폭의 약 91%를 소비하는 것을 알 수 있다. 따라서, 시간 디코더는 이 비디오 포맷을 지원할 수 있다.
A.18.5.3 재정렬한 MPEG 해상도
MPEG 화상 재정렬을 사용할 때, P 화상이 디코딩중인 동안 최악의 시나리오를 만난다. 이 시간 동안, DRAM 인터페이스에는 3개의 로드, 즉
* 예측 형성
* 결과의 재기록
* 이전의 P 또는 I 화상 판독
이 있다.
테이블 A.18.3에서 보인 예를 사용하여, 32비트 폭 인터페이스가 이용 가능할 때 이들 각각의 작업에 걸리는 시간을 알 수 있다. 예측 형성은 1907ns/n이 걸리고, 판독 및 기록은 각각 991ns가 소요되어 모두 3889ns가 소요된다. 이것은 시간 디코더가 33ms 주기동안 8485개 8x8블럭을 처리하도록 한다.
따라서, 704x480 비디오를 처리하는 것은 이용 가능한 메모리 대역 폭(리프레시 무시)의 약 93%를 사용한다.
A.18.5.4 H.261
H.261은 30Hz까지의 화상 속도로 CIF (352x288) 및 QCIF (172×144)를 지원한다. CIF 화상은 2376개 8x8 블럭을 포함한다. 단지 필요한 메모리 동작은 8x8 블럭을 기록하는 것과 정수 정확도 움직임 벡터의 예측을 형성하는 것이다.
8비트 폭 메모리 인터페이스에 대하여 테이블 A.18.4에서 보인 예를 사용하여, 각각의 블럭을 기록하는 것은 3657ns가 소요되고, 하나의 블럭의 예측을 형성하는 것은 3963ns/n이 소요되어, 블럭당 모두 7620ns가 소요되는 것을 알 수 있다. 따라서, 하나의 CIF 화상을 위한 처리 시간은 약18ms로서 다행스럽게도 30Hz 비디오를 지원하는데 요구되는 33ns 이하이다.
A.18.5.5 JPEG
지원될 수 있는 JPEG "비디오"의 해상도는 디스플레이 인터페이스 또는 본 발명의 공간 디코더의 능력에 의해 결정된다. 시간 디코더는 JPEG 해상도에 영향을 주지 않는다.
A.18.6 이벤트 및 에러
A.18.6.1 칩 정지
본 발명에 있어서, chip_access에 1을 기록함으로서 시간 디코더가 리컨피그레이션을 허용하도록 동작의 정지를 요청한다. 일단 수신되면, 시간 디코더는 현재 비디오 시퀀스의 끝에 도달할 때까지 정상적으로 동작을 계속한다. 그 후, 시간 디코더는 정지한다.
칩이 정지할 때, 칩 정지 이벤트가 발생한다. chip_stopped_mask=1이면, 인터럽트가 발생한다.
A.18.6.2 카운트 에러
본 발명의 시간 디코더는 에러 데이타에 예측을 가산하는 가산기를 포함한다. 에러 데이타 바이트 수와 예측 데이타 바이트 수 사이에 차이가 있으면, 카운트 에러 이벤트가 발생한다.
count_error_mask=1이면, 인터럽트가 발생하고 예측 형성이 정지한다.
count_error_event에 1에 기록함으로써 이벤트를 클리어하고 시간 디코더가 계속 진행되게 한다. 그 후 에러를 발생시킨 DATA토큰이 진행된다. 그러나, 에러를 발생시킨 DATA 토큰은 정확한 길이 (64 바이트)가 아니다. 이것은 또 다른 문제를 일으킬 수 있다. 따라서, 카운트 에러는 현저한 하드웨어 에러가 발생할 때만 발생하게 한다.
A.19절 시간 디코더의 출력 접속
시간 디코더의 출력은 8비트 폭 데이타 워드를 갖는 규격 토큰 포트이다.
인터페이스의 전기적 동작에 관한 보다 더 많은 정보를 위해서는 A.4절을 참조할 수 있다.
시간 디코더의 출력에서 공급되는 토큰은 사용된 코딩 규격에 의존하고, MPEG의 경우, 화상이 재정렬되고 있는가에 의존한다. 이 절은 시간 디코더의 출력에서 어느 토큰이 이용 가능하고 이 출력을 디스플레이하기 위한 회로 설계시 어느 것이 가장 유용한 가를 식별한다. 다른 토큰도 공급되지만, 출력을 디스플레이할 필요가 없으므로, 여기에서는 설명하지 않는다.
이 절은
* 시퀀스의 시작과 끝의 식별 방법,
* 화상의 시작과 끝의 식별 방법,
* 화상을 디스플레이할 때의 식별 방법, 및
* 화상 데이타를 디스플레이에 위치하여야 하는 곳의 식별 방법
을 설명하는 데 중점을 둔다.
A.19.1 JPEG 출력
JPEG 데이타 디코딩시 시간 디코더에 의한 토큰 시퀀스 출력은 공간 디코더의 출력에서 보이는 것과 동일하다. 화상화면, JPEG은 시간 디코더에 의한 처리를 필요로 하지 않는다. 그러나, 시간 디코더는 음의 값 (공간 디코더에서의 IDCT의 미세한 산술 정확도에 기인함)에 대해 인트라 데이타 토큰을 테스팅하고 이들을 제로로 치환한다.
JPEG 동작 중 관찰되는 출력 시퀀스의 보다 더 많은 설명은 A.16절을 참조하기 바란다.
A.19.2 H.261 출력
A.19.2.1 세션(sessions)의 시작과 끝
H.261은 비디오 데이타 내의 비디오 스트림의 시작과 끝을 신호하지 않는다.
이것이 응용에 의해 수반되는 것은 물론이다. 예를 들면, 시퀀스는 원거리 통신이 이루어질 때 시작하고 라인이 끊어질(dropped) 때 종료된다. 이와 같이, 비디오 구문에서 최 상위 층은 "화상 층(picture layer)"이다.
본 발명에 따른 공간 디코더의 시작 코드 검출기는 SEQUENCE_START 및 CODING_STANDARD 토큰이 첫 번째 PICTURE_START 앞에 자동적으로 삽입되게 한다. A 11.7.3 및 A.11.7.4절 참조.
H.261 세션의 끝에서 (예를 들면, 라인이 끊어질 때), 사용자는 코드화된 데이타의 끝 다음에 FLUSH 토큰을 삽입해야 한다. 이것은 다수의 효과를 갖는다. 부록 A.31 참조:
마지막 화상의 끝을 신호하기 위한 PICTURE_END 발생을 보장함.
코드화된 데이타의 끝이 디코더를 통해 푸싱되는(pushed) 것을 보장함
A.19.2.2 화상 취득
각각의 화상은 구문에서 층이라고하는 요소의 계층으로 컨피그된다. H.261디코딩시 시간 디코더의 출력에서의 토큰의 시퀀스는 이 구조를 반영한다.
A.19.2.1 화상층
각각의 화상은 PICTUIE_START 토큰에 붙어 있고, 각각의 바로 다음에는 PICTURE_END 토큰이 있다. 본래, H.261은 화상의 끝을 포함하지 않는다. 이 토큰은 공간 디코더의 시작 코드 검출기에 의해 자동적으로 삽입된다.
PICTURE_START 토큰 다음에는 TEMPORAL_REFERENCE 및 PICTURE_TYPE 토큰이 있다. TEMPORAL_REFERENCE 토큰은 화상이 디스플레이되어야 할 때를 나타내는 (H.261에 사용되는 단지 5개 LSB의) 10비트 수를 운반한다. 이것은 (보다 더 낮은 데이타 속도를 얻기 위해) H.261 인코더가 시퀀스에서 화상을 생략할 수 있을 때, 임의의 디스플레이 시스템에 의해 연구되어야 한다. 화상의 생략은 이어지는 화상 사이에서 하나 이상 증가하는 시간 기준(pemporal reference)에 의해 검출될 수 있다.
다음에, PICTURE_TYPE 토큰은 화상 포맷에 관한 정보를 운반한다. 디스플레이 시스템은 이 정보를 연구하여 CIF 또는 QCIF 화상이 디코딩 중인 가를 검출해야 한다. 그러나, 화상 포맷에 관한 정보는 허프만 디코더 내의 레지스터를 연구하는 것에 의해 이용 가능하게 된다. (허프만 디코더 절을 참조).
A.19.2.2.2 블럭층의 그룹
각각의 H.261 화상은 다수의 "블럭 그룹(groups of blocks)"으로 컨피그된다. 이들 각각은 SLICE_START 토큰 (H.261 그룹 번호 및 그룹 시작 코트에서 구해짐)에 붙어 있다. 이 토큰은 블럭 그룹이 디스플레이 장치의 어디에 위치해야 하는지를 나타내는 8비트 값을 운반한다. 이것은 데이타 에러 후 재동기하도록 디코더에 기회를 제공한다. 또한, 이것은 이들을 설명하기 위해 또 다른 정보를 필요로 하지 않는 화상의 영역이 있으면 블럭을 스킵하는 메카니즘이 있는 인코더를 제공한다. SLICE_START가 시간 디코더의 출력에 도달할 때까지, 각각의 화상이 정확한 수의 블럭을 포함하고 이들이 정확한 위치에 있는 것을 보장하도록 공간 디코더 및 시간 디코더가 이미 정보를 사용할 때 이 정보는 효과적으로 중복한다. 따라서, 단순히 화상의 시작부터 출력되었던 블럭 수를 카운팅하는 것에 의해 시간 디코더에 의한 데이타 출력의 블럭이 위치하는 곳을 계산할 수 있는 것은 물론이다.
SLICE_START에 의해 운반된 수는 H.261 블럭 그룹 번호 보다 하나 작다 (보다 더 많은 정보는 H.261 규격 참조). 제94도는 CIF 및 QCIF 화상 내의 H.261 블럭 그룹의 위치를 도시한다. 주: 본 발명에서는, 도시된 블럭 번호 매김은(block numbering) SLICE_START에 의해 운반된 것과 같다. 이것은 이들 그룹을 번호 매김(block numbering)하는 H.261 변환과 다르다.
(각각의 블럭 그룹의 시작을 나타내는) SLICE_START과 첫 번 째 매크로블럭 사이에 다른 토큰이 있다. 이들은 화상 데이타를 디스플레이하는 데 필요하지 않으므로 무시할 수 있다.
A.19.2.2.3 매크로블럭 층
각각의 블럭 그룹 내의 매크로블럭의 시퀀스는 H.261에 의해 정의된다. 각각의 매크로블럭의 위치를 설명하는 특정한 토큰 정보는 없다. 사용자는 각각의 정보 부분이 디스플레이되는 곳을 결정하기 위해 매크로블럭 시퀀스를 통해 카운팅해야 한다.
제96도는 매크로블럭이 각각의 블럭 그룹에 있는 곳을 도시한다.
각각의 매크로블럭은 6개의 DATA 토큰을 포함한다. 6개의 각각의 그룹 내의 DATA 토큰의 시퀀스는 H.261 매크로블럭 구조에 의해 정의된다. 각각의 DATA 토큰은 하나의 색 성분의 8×8 픽셀 영역에 대하여 정확히 64 데이타 바이트를 포함해야 한다. 색 성분은 DATA 토큰에서 2비트 수로 운반된다(A.3.5.1참조) 그러나, H.261에서는 색 성분의 시퀀스가 정의된다.
DATA 토큰의 각각의 그룹은 움직임 벡터, 및 양자화기 스케일 인수(quantization scale factor) 등등에 관한 다수의 토큰 통신 정보에 붙어 있다. 이들 토큰은 화상을 디스플레이할 필요가 없으므로 무시할 수 있다.
각각의 DATA 토큰은 8x8 단일 색 성분에 대하여 64바이트를 포함한다. 이들은 레스터 순서이다.
A.19.3 MPEG 출력
MPEG은 자신의 구문에 보다 더 많은 층을 갖는다. 이들은 비디오 시퀀스 및 화상 그룹 등의 개념을 구현한다.
A.19.3.1 MPEG 시퀀스 층(sequence layer)
시퀀스는 다수의 입구점 (시퀀스 시작)을 가질 수 있지만, 단지 하나의 출구점 (시퀀스 끝)을 가져야 한다. MPEG 시퀀스 헤더 코드가 디코딩되는 경우, 공간 디코더는 SEQUENCE_START 토큰 앞에 CODING_STANDARD 토큰을 발생한다.
SEQUENCE_START 다음에는, 비디오 포맷 등을 설명하는 시퀀스 헤더 정보의 다수의 토큰이 있다. 시퀀스 헤더로 신호되는 정보에 관해서는 MPEG 규격 초안을 참조하고, 이 데이타를 토큰으로 어떻게 변환하는 가에 관한 정보에 대해서는 테이블 A.3.2를 참조한다. 비디오 포맷을 설명하는 이 정보는 허프만 디코더 내의 레지스터에서도 입수 가능하다.
이 시퀀스가 여러개의 입구점을 가지는 경우, 이 시퀀스 헤더 정보는 MPEG시퀀스 내에서 여러번 발생할 수 있다.
A.19.3.2 화상층 그룹
MPEG 화상 그룹은 시퀀스의 시작부에 제공된 다른 타입의 "입구"점을 제한다. 시퀀스 헤더는 화상/비디오 포맷에 관한 정보를 제공한다. 따라서, 디코더가 시퀀스에 사용된 비디오 포맷의 지식을 갖고 있지 않으면, 시퀀스 시작에서 시작해야 한다. 그러나, 일단 비디오 포맷이 디코더로 컨피그되면, 임의의 화상 그룹에서도 디코딩을 시작할 수 있다.
MPEG은 화상 그룹 수를 제한하지 않는다. 그러나, 많은 응용에 있어서, 그 룹은 적당한 세분성의 랜덤 액세스(reasonable granularity of random access)를 제공할 때, 약 0.5초에 대응한다.
화상의 그룹 시작은 GROUP_START 토큰에 의해 나타내어진다 GROUP_START 후 제공된 헤더 정보는 두개의 유용한 토큰 TIME_CODE 및 BROKEN_CLOSED를 구비한다.
TIME_CODE는 SMPTE 시간 코드 정보(time code information)의 서브셋을 운반 한다. 이것은 다른 신호에 대한 비디오 디코더 동기화에 있어서 유용하다. BROKEN_CLOSED는 MPEG closed_gap 및 broken_link 비트를 운반한다. 랜덤 액세스의 관계 및 편집된 비디오 시퀀스 디코딩에 관한 더 많은 정보는 A.19.3.8절을 참조하기 바란다.
A.19.3.3 화상 층
새로운 화상의 시작은 PICTURE_START 토큰에 의해 나타내어 진다. 이 토큰 다음에는 TEMPORAL_REFERENCE 및 PICTURE_TYPE 토큰이 있다. 시간 디코더가 화상 재정렬을 제공하도록 컨피그되면 시간 기준 정보(temporal reference information)가 유용하다. 화상 타입 정보는 디스플레이 시스템이 개방 GOP의 시작에서 B 화상을 특별히 처리하고 싶으면 유용하다(A.19.3.8절 참조).
각각의 화상은 다수의 슬라이스로 구성된다.
A.19.3.4 슬라이스 층
A.19.2.2.2절은 H.261에 사용되는 블럭 그룹을 설명하고 있다. MPEG의 슬라이스는 마찬가지 기능을 찬다. 그러나, 슬라이스 구조는 규격에 의해 고정되어 있지 않다. SLICE_START 토큰에 의해 운반된 8비트 값은 MPEG에 의해 통신된 "슬라이스 수직 위치" 보다 하나 작다. 슬라이스 층의 설명에 대해서는 MPEG 규격 초안을 참조한다.
SLICE_START가 시간 디코더의 출력에 도달할 때에는, 각각의 화상이 정확한 위치에 정확한 수의 블럭을 포함하도록 공간 디코더 및 시간 디코더가 정보를 이미 사용하였으므로 이 정보는 효과적으로 중복된다(redundant). 따라서, 화상의 시작부터 출력되었던 블럭 수를 단지 카운팅하는 것만으로 시간 디코더에 의한 데이타 출력에서 블럭이 위치하는 곳을 계산할 수 있는 것이 가능하게 된다.
MPEG 화상 재정렬을 사용하는 효과의 설명은 A.19.3.7절을 참조한다.
A.19.3.5 매크로블럭 층
각각의 매크로블럭은 6 블럭을 포함한다. 이들은 (MPEG 규격 초안에 의해 지정된 바와 같은) 래스터 순서로 시간 디코더의 출력에 나타난다.
A.19.3.6 블럭 층
각각의 매크로블럭은 6개 DATA 토큰을 포함한다. 6개의 각각의 그룹의 DATA토큰의 시퀀스는 MPEG 규격 초안에 의해 정의된다 (이것은 H,261 매크로블럭 구조와 동일하다). 각각의 DATA 토큰은 하나의 색 성분의 8x8 픽셀 영역에 대하여 정확히 64 데이타 바이트를 포함해야 한다. 색 성분은 DATA 토큰에서 2비트 수로 운반된다 (A.3.5.1 참조). 그러나, MPEG에서 색 성분의 시퀀스는 정의된다.
움직임 벡터에 관한 다수의 토큰 통신 정보, 양자화기 스케일 인수 등은 DATA 토큰의 각각의 그룹에 앞선다(precede). 화상을 디스플레이할 필요가 없으므로, 이들 토큰은 무시될 수 있다.
A.19.3.7 MPEG 화상 재정렬의 효과
A.18.3.5에서 설명한 바와 같이, 시간 디코더는 MPEG 화상 재정렬 (MPEG_reordering=1)을 제공하도록 컨피그될 수 있다. P 및 I 화상의 출력은 데이타 스트림의 다음 P/I 화상이 시간 디코더에 의해 디코딩되기 시작할 때까지 지연된다. 시간 디코더의 출력에서, 새로 더코딩된 P/I 화상의 DATA 토큰은 구 P/I 화상으로부터의 DATA 토큰으로 치환된다.
P/I 화상 재정렬시, 화상의 PICTURE_START, TEMPORAL_ REFERENCE 및 PICTURE_TYPE 토큰은 화상이 오프-칩 화상 버퍼에 기록될 때 일시적으로 온-칩 상에 저장된다. 화상이 디스플레이를 위해 판독될 때, 이들 저장된 토큰은 검색된다. 따라서, 재정렬된 P/I 화상은 PICTURE_START, TEMPORAL_REFERENCE 및 PICTURE_TYPE에 대하여 정확한 값을 갖는다.
화상 층 아래의 모든 다른 토큰은 재정렬되지 않는다. 재정렬된 P/I 화상이 디스플레이를 위해 판독될 때, 이것은 방금 디코딩되었던 화상의 더 낮은 레벨의 DATA가 아닌 토큰을 선택한다.(picks up). 따라서, 이들 서브세트 화상층 토큰을 무시해야 한다.
A.19.3.8.1 열린(open) GOP
공간 디코더는 편집된 MPEG 비디오 데이타의 정확한 비디오 디코딩 및 그 후의 MPEG 비디오 데이타로의 랜덤 액세스를 돕는 편의를 제공한다.
A.19.3.8 랜덤 액세스 및 편집된 시퀀스
화상 그룹(GOP)은 이전 GOP에서 P 화상으로부터 예측된 B 화상으로 시작할 수 있다. 제107도는 이것을 도시한다. 화상(17) 및 (18)은 두 번째 GOP의 시작에서 B 화상이다. GOP가 "열린"이면, 인코더는 P 화상(16) 및 I 화상(19)로 부터의 예측을 사용하여 이들 두개의 화상을 인코딩한다. 또한, 인코더는 단지 I 화상(19)으로부터만의 예측을 사용하여 자신을 제한할 수도 있다. 이 경우, 두 번째 GOP는 "닫힌(closed) GOP"이다.
디코더가 첫 번째 GOP에서 비디오 디코딩을 시작하면, P 화상(16)을 이미 디코딩할 것이므로, GOP가 열리더라도 두 번째 GOP를 만날 때 문제가 없다. 그러나, 디코더가 랜덤 액세스를 하고 두 번째 GOP에서 디코딩를 시작하면, Bl7 및 Bl8을 Pl6에 의존하면 (즉, GOP가 열리면) 디코딩할 수 없다.
본 발명의 공간 디코더가 리셋 전에 첫 번째 GOP로서 개방 GOP를 만나거나 또는 FLUSH 토큰을 수신하면, 열린 GOP로의 랜덤 액세스가 발생한 것으로 한다. 이 경우, 허프만 디코더는 정상 방식으로 B 화상에 대한 데이타를 소모한다 (consume). 그러나, I 화상을 벗어난 (0,0) 움직임 벡터로 예측된 B화상을 출력한다. 그 결과, (상기 예에서) 화상 B17 및 B18이 119와 동일하게 된다.
이 동작은 MPEG VBV의 규칙을 정확한 유지를 보장한다. 또한, 이것은 다른 데이타 채널에 의해 예측되는 출력 스트림 내에서의 위치에서 B화상이 출력에 존재하도록 한다. 예를 들면, MPEG 시스템층은 오디오 데이타에서 비디오 데이타에 연관시키는 프레젠테이션 시간 정보를 제공한다. 비디오 프레젠테이션 시간 스템프(stamps)는 GOP의 첫 번째 디스플레이된 화상, 즉 시간 기준 0을 갖는 화상을 가리킨다. 상기 예에서, 두 번째 GOP로의 랜덤 액세스후 첫 번째 더스플레이된 화상은 B17이다.
BROKEN_CLOSED 토큰은 MPEG closed_gop 비트를 운반한다. 따라서, 시간 디코더의 출력에서, B화상 출력이 진짜인가 또는 공간 디코더에 의해 대체물(substitudes)"이 도입되었는가를 결정할 수 있다. 일부 응용은 이들 "대체" 화상이 나타날 때 특별한 측정을 요구할 수 있다.
A.19.3.8.2 편집된 비디오
응용이 MPEG 비디오 시퀀스를 편집하면, 두 개의 GOP 사이의 관계가 깨어진다. 편집후의 GOP가 개방 GOP이면, GOP의 시작에서 B 화상을 더 이상 정확히 디코딩할 수 없다. MPEG 데이타를 편집하는 응용은 이들 B 화상을 디코딩할 수 없도록 디코더를 지시하기 위해서 편집 후 GOP의 broken_link 비트를 세팅할 수 있다.
공간 디코더가 끊어진 링크를 갖는 GOP와 만나는 경우, 허프만 디코더는 정상적인 방식으로 B화상에 대한 데이타를 디코딩할 수 있다. 그러나, I화상에서 벗어난 (0,0) 움직임 벡터로 예측된 B화상을 출력한다. 그 결과 (상기 예에서는) 화상 B17 및 B18이 119와 동일하게 된다.
BROKEN_CLOSED 토큰은 MPEG broken_link 비트를 운반한다. 따라서, 시간 디코더의 출력에서, B 화상 출력이 진짜인가 또는 공간 디코더에 의해 도입된 "대체물"인가를 결정할 수 있다. 일부 응용은 이들 "대체" 화상이 나타날 때 특별한 측정을 취하기를 요구할 수 있다.
A. 20절 늦은 기록(Late write) DRAM 인터페이스
이 인터페이스는 두가지 방식, 즉 인터페이스의 상세한 타이밍을 여러가지 다른 DRAM 타입을 수용하도록 컨피그할 수 있고, 가격/성능을 절충할 수 있도록 DRAM 인터페이스의 폭을 컨피그할 수 있다.
테이블 A.20.1 DRAM 인터페이스 신호
테이블 A.20.2 DRAM 인터페이스 컨피그레이션
테이블 A.20.2 DRAM 인터페이스 컨피그레이션 레지스터
A.20.1 인터페이스 타이밍(틱)
본 발명에 있어서, DRAM 인터페이스 타이밍은 장치의 입력 클럭 속도 (decoder_clock)의 4배로 실행되는 클럭으로 구해진다. 이 클럭은 온-칩 PLL에 의해 발생된다.
간단히, 이 고속 클럭의 주기는 틱(tick)이라고 한다.
A.20.2 인터페이스 동작
인터페이스는 DRAM 고속 페이지 모드를 사용한다. 3가지 다른 타입, 즉,
* 판독
* 기록
* 리프레시
의 액세스를 지원한다.
각각의 판독 또는 기록은 단일 DRAM 페이지 어드레스에서 1과 64 바이트 사이의 버스트를 전송한다. 판독 및 기록 전송은 단일 액세스 내에서 혼합되지 않는다. 각각의 연속적인 액세스는 신규 DRAM 페이지로의 랜덤 액세스로서 취급된다.
A.20.3 액세스 구조
각각의 액세스는 두개의 부분
* 액세스 시작
* 데이타 전송
으로 이루어진다.
각각의 액세스는 액세스 시작으로 시작하고, 하나 이상의 데이타 전송 사이클 전에 있다. 액세스 시작 및 데이타 전송 사이클 모두의 판독, 기록 및 리프레시 변형이 있다.
액세스에 있어서, 마지막 데이타 전송의 끝에서 인터페이스는 자신의 디폴트상태로 들어가고, 새로운 액세스가 시작할 준비가 될 때까지 이 상태에 있다. 마지막 액세스가 끝날 때 새로운 액세스를 시작할 준비가 되면, 새로운 액세스가 즉시 시작된다.
A.20.3.1 액세스 시작
액세스 시작은 판독 및 기록 전송에 대해 페이지 어드레스를 제공하고 일부
초기 신호 상태를 확립한다. 3개의 상이한 액세스 시작, 즉
* 판독 시작
* 기록 시작
* 리프레시 시작
이 있다.
각각의 경우에 있어서,및 행 어드레스의 타이밍은 레지스터 RAS_falling 및 page_start_length에 의해 제어된다.및 DRAM_data [31:0]의 상태는가 하강할 때까지 이전 데이타 전송의 끝부터 유지된다. 3개의 다른 액세스 시작 타입은가 하강할 때 이들이및 DRAM_data[31:0]을 어떻게 구동하는가에 있어서만 다르다. 제109도 참조
테이블 A.20.3 액세스 시작 변수
a. 이값은리프레시 이전에가 발생하는 것을 보장하도록 RAS_falling보다 작아야 한다.
A.20.3.2 데이타 전송
3 가지 다른 종류, 즉
* 고속 페이지 판독 사이클
* 고속 페이지 늦은 기록 사이클(fast Page late write cycle)
* 리프레시 사이클
의 데이타 전송 사이클이 있다.
리프레시의 시작은 단일 리프레시 사이클 앞에 있다.판독 (또는 기록)의 하나 이상의 고속 페이지 판독 (또는 기록) 사이클 앞에 있을 수 있다.
판독 사이클의 시작에서는 하이로 구동되고 새로운 열 어드레스도 구동된다.
늦은 기록 사이클이 사용된다.이후 한 틱에서가 로우로 구동된다. 어드레스 후, 한 틱에서 출력 데이타가 구동된다.
리프레시 사이클 전가 리프레시 사이클의 시작에 의해 시작될 때, 리프레시 사이클 동안 인터페이스 신호 작용은 없다. 리프레시 사이클의 목적은 DRAM에 의해 필요한 최소로우 주기에 맞추는 것이다.
A.20.3.3 인터페이스 디폴트 상태
인터페이스 신호는 액세스의 끝에서 디폴트 상태, 즉
*,하이,
* 데이타 및 OE가 이들의 이전(previous) 상태에 있으며
* addr은 안정한 상태로 유지된다.
A.20.4 데이타 버스 폭
2비트 레지스터 DRAM_data_width는 DRAM 인터페이스 데이타 경로의 폭이 컨피그되게 한다. 이것은 소형 화상 포맷으로 작업할 때 DRAM 비용이 최소로 되게 한다.
테이블 A.20.4 DRAM_data_width 컨피그레이션
a. 리셋 후의 디폴트
b. 사용되지 않는 신호는 하이 임피던스 상태로 유지됨
A.20.5 어드레스 비트
온-칩에서, 24비트 어드레스가 발생된다. 행 및 열 어드레스를 형성하기 위 해서 이 어드레스가 사용되는 방법은 행 어드레스에 대하여 선택된 비트 수 및 데이타 버스의 폭에 의존한다. 일부 컨피그레이션은 모든 내부 어드레스 비트가 사용되게 (그리고 "감춰진 비트(hidden bits)"를 생성하게)하지 않는다.
행 어드레스는 어드레스의 중간 부분에서 추출된다. 이것은 DRAM이 자연적으로 리프레시되는 속도를 최대로 한다.
A.20.5.1 하위 열 어드레스 비트
열 어드레스의 최하위 4 내지 6 비트는 64 바이트까지의 고속 페이지 모드 전송을 위한 어드레스를 제공하도록 사용된다. 이들 전송을 제어하는데 필요한 어드레스 비트 수는 데이타 버스의 폭에 의존한다. (A.20.4절 참조).
A 20.5.2 행 어드레스 비트
행 어드레스를 제공하기 위한 24비트 내부 어드레스의 중간 부분에서 취한비트 수는 레지스터 raw_address_bits에 의해 컨피그된다.
테이블 A.20.5 row_address_bits 컨피그레이션
사용된 행 어드레스의 폭은 사용된 DRAM의 타입 및 행 어드레스의 MSB가 DRAM의 다중 뱅크를 액세스하기 위해 오프-칩으로 디코딩되는 가에 의존한다.
주: 행 어드레스는 내부 어드레스의 중간에서 추출된다. 행 어드레스의 일부 비트가 DRAM의 뱅크를 선택하도록 디코딩되면, 이들 "뱅크 선택 비트"의 모든 가능한 값은 DRAM의 뱅크를 선택해야 한다. 그렇지 않으면, 어드레스 공간에 구멍(holes)이 남는다
테이블 A.20.6 row_address_bits의 값 선택
A.20.6 DRAM 인터페이스 인에이블
DRAM 인터페이스상의 모든 출력 신호를 하이 임피던스 상태로 하는 두가지 방식이 있다. DRAM_enable 레지스터 및 DRAM_enable 신호가 그것이다. 레지스터 및 신호 모두는 DRAM 인터페이스가 동작하도록 논리 1로 되어야한다. 어느 것이라도 로우이면, 인터페이스는 하이 임피던스를 취하고 인터페이스를 통한 데이타 전송은 정지된다.
DRAM 인터페이스를 하이 임퍼던스로 하는 능력은 다른 장치를 테스팅하기 위해, 또는 공간 디코더 (또는 시간 디코더)가 사용되지 않을 때 공간 디코더 (또는 시간 디코더)에 의해 제어되는 DRAM을 사용하기 위해 제공된 것이다. 다른 장치가 정상 동작 중인 메모리를 공유하게 해서는 않된다.
A.20.7 리프레시
레지스터 no_refresh에 기록함으로써 디스에이블되지 않으면, DRAM 인터페이스는 레지스터 refresh_interval에 의해 결정된 간격으로리프레시 사이클전를 사용하여 DRAM을 자동적으로 리프레시한다.
refresh_interval의 값은 16 decoder_clock 사이클의 주기로 리프레시 사이클 사이의 간격을 지정한다. 범위1내지 255내의 값을 컨피그할 수 있다. 값 0은 리셋 후에 자동적으로 로딩되고, 유효 리프레시 간격이 컨피그될 때까지 (일단 인에이블되면) DRAM 인터페이스가 연속적으로 실행되게 한다. refresh_interval은 각각의 리셋 후에 한번만 컨피그되는 것이 권장된다.
A.20.8 신호 강도
DRAM 인터페이스의 출력의 구동 세기는 3 비트 레지스터들, 즉 CAS_strength, RAS_strength, addr_strength, DRAM_data_strength, OEWE_strength를 사용하여 사용자에 의해 컨피그될 수 있다. 이 3 비트 값의 MSB는 고속 또는 저속 에지 속도(fast or slow edge rate) 중의 하나를 선택한다. 두 개의 최하위 비트는 상이한 부하 캐패시턴스용의 출력을 컨피그한다.
리셋후의 디폴트 세기는 6이며, 12PF로 로딩되는 경우, GND와 VDD사이의 신호를 구동하기 위해 대략 10ns를 취하는 출력을 컨피그한다.
테이블 A.20.7 출력 세기 컨피그레이션
a. 리셋 후의 디폴트
구동하는 부하에 대하여 출력이 대략 형성되면, 테이블 A.20.11 내지 테이블 A.20.12에 지정된 AC 전기 특성을 충족시킨다 적당히 형성된 각각의 출력이 부하에 대략 일치할 때, 신호 천이 후에 최소 오버슈트가 발생한다.
A.20.9 리셋 후
리셋 후, DRAM 인터페이스 컨피그레이션 레지스터는 이들의 디폴트 값으로 모두 리셋된다. 이들 디폴트 컨피그레이션 중에서 가장 중요한 것은
* DRAM 인터페이스가 디스에이블되어 하이 임피던스로 되고,
* 리프레시 간격이 인터페이스 다시 인에이블된(re-enabled) 후 연속해서 리프레시 사이클을 실행하는 것을 의미하는 특정 값 0으로 컨피그되고,
* DRAM 인터페이스가 그것의 가장 늦은 컨피그레이션으로 세팅된다는 것이다.
대부분의 DRAM은 전원이 1차 공급된 후 100㎛와 500㎛ 사이의 "중지(pause)"를 필요로 하고, 이것에 이어 정상 동작 전 다수의 리프레시 사이클이 뒤따르는 것이 가능하다.
리셋 직후, DRAM 인터페이스는 DRAM_enable 신호 및 DRAM_enable 레지스터가 모두 세팅될 때까지 비활성이다. 이들이 세팅되었을 때, DRAM 인터페이스는 DRAM 인터페이스가 컨피그될 때까지 리프레시 사이클을 실행한다(사용된 클럭 주파수에 따라 대략 400ns 마다).
필요한 수의 리프레시 사이클이 데이타 전송이 시도되기 전에 발생하도록, 사용자는 전원 투입후 DRAM을 "중지"하도록 하고 DRAM 인터페이스 인에이블 후 충분한 시간을 허용하여야 한다.
리셋이 나타나는 동안, DRAM 인터페이스는 DRAM을 리프레시하기 위해서 사용될 수 없다. 그러나, 디코더 칩에 의해 필요한 리셋 시간은 이들을 리셋하고, 그 후 DRAM 내용이 감쇠되기(decay) 전에 DRAM 인터페이스를 다시 인에이블할 수 있도록 충분히 짧다. 이것은 디버깅(debugging) 중에 필요할 수도 있다.
테이블 A.20.8 최대 정격a
테이블 A.20.9 DC 동작 조건
a. TBA 선형 ft/min 횡단 기류에 의해서
테이블 A.20.10 DC 전기적 특성
a. AC 변수는 측정 레벨로서 VOLmax=0.8V를 사용하여 지정됨
b. 이것은 인터페이스의 정상 상태 구동력이다. 과도 전류가 매우 클 수 있음
A.20.10.1 AC 특성
테이블 A.20.11 스트로브에 대한 공칭 값간의 차이
a. 신호의 구동 세기는 자신의 부하에 대해 적당히 컨피그될 수 있어야 함.
테이블 A.20.12. 두 개의 스트로브 사이의 공칭값에서의 차이
a. 두 개의 신호의 구동 세기는 이들의 부하에 대해 적당히 컨피그되어야 함.
B.1절 시작 코드 검출기
B.1.1 개요
제11도에서 도시된 바와 같이, 시작 코드 검출기(SCD)는 공간 디코더에서 첫 번째 블럭이다. 주 목적은 입력 데이타 스트림 내의 MPEP, JPEG 및 H.261 시작 코드를 검출하고 이들을 관련된 토큰으로 치환시키는 것이다. 또한 이것은 마이크로프로세서 인터페이스를 거쳐 입력 데이타 스트림으로의 사용자 액세스를 허용하고, 토큰 데이타 스트림의 예비의 포맷텅 및 "타이딩 업(tyding up)"을 실행한다. 상기하면, SCD는 생(raw) 바이트 데이타 또는 토큰 포맷으로 이미 어셈블링된 데이타를 수신할 수 있다.
일반적으로, 시작 코드는 MPEG, H.261 및 JPEG에 대하여 각각 24, 16 및 8비트 폭이다. 시작 코드 검출기는 마이크로프로세서 인터페이스(upi) 또는 토큰/바이트 포트로 부터의 입력 데이타를 바이트로해서 취하고 이것을 3개의 쉬프트 레지스터를 통해 쉬프트시킨다. 제1레지스터는 직렬 출력에 병렬인 8비트이고, 제2레지스터는 프로그럼 가능한 길이 (16 또는 24비트)이며 시작 코드가 검출되는 곳이고, 제3 레지스터는 15비트 폭이며 데이타를 15비트 토큰으로 재포맷하기 위해 사용된다. 또한, 제2 및 제3 SR와 병렬인 두개의 "태그(tag)" 쉬프트 레지스터(SR)도 있다. 이들은 데이타 SR 내의 관련된 비트가 양호한지 아닌지 나타내는 태그(tags)를 포함한다. DATA 토큰의 부분이 아닌 입력 바이트는 SCD에 의해 인식되지 않고, 쉬프트 레지스터를 바이패스(bypass)하게 되며, 3개의 모든 쉬프트 레지스터가 플러싱되고 (비워지고) 잘 출력되었을때 출력된다. 인식된 비데이타(non-data) 토큰은 SCD를 형성하고, 트랩을 스프링하거나 또는 플래그를 세팅하도록 사용된다. 또한, 이들은 쉬프트 레지스트를 바이패스하여 변경되지 않고 출력된다.
B.1.2 주요 블럭
시작 코드 검출기의 하드웨어는 10 상태 머신으로 구성되어있다.
B.1.2.1 입력 회로 (scdipc.sch. iplm.M)
입력 회로는 3개의 동작 모드, 즉 토큰, 바이트 및 마이크로 프로세서 인터페이스를 갖는다. 이들 모드는 데이타가 생(raw) 바이트 스트림 (그러나 여전히 2선식 인터페이스를 사용), 토큰 스트림으로서, 또는 upi를 거쳐 사용자에 의해서 입력으로 되게 한다. 모든 경우에 있어서, 입력 회로는 적당한 곳에 DATA 토큰 헤더를 발생함으로써 정확한 DATA 토큰을 항상 출력한다. upi 모드로 그리고 upi 모드로부터의 천이는 시스템 클럭과 동기하고, upi는 액세스를 획득한 후 데이타 스트림에서 안전한 점에 이르기까지 대기해야 한다. 바이트 로드 핀은 입력 회로가 토큰 또는 바이트 모드인가를 결정한다. 또한, 어느 규격이 디코딩되고 있는가 (그래서 CODING_STANDARD 토큰을 발생될 수 있음)를 시스템에 처음에 알리는 것은 3개의 모드 중의 임의의 것에서 이루어질 수 있다.
B.1.2.2 토큰 디코더(scdipnew.sch, scdipnem.M)
이 블럭은 입력 토큰을 디코딩하여 다른 블럭에 커맨드를 출력한다.
테이블 B.1.1 인식된 입력 토큰
주: 코딩 규격의 변경은 SR이 플러싱된 후 2선식 인터페이스를 거쳐 모든 블럭으로 진행한다. 이것은 SCD를 통틀어 정확한 점에서 하나의 데이타 스트림에서 다른 데이타 스트림으로의 변경이 이루어지도록 한다. 이 원리는 프리젠테이션 동안 적용되어 코딩 규격에서의 변경이 새로운 스트림에 앞서 전체 칩을 통해 흐를 수 있도록한다.
B.1.2.3 JPEG(scdjpeg.sch scdjpegm.M)
JPEG에서 시작 코드(마커)는 JPEG이 자신에 대해 상태 머신 모두를 갖도록 충분히 다른다. 본 발명에 있어서, 이 블럭은 모든 JPEG 마커 검출, 길이 카운팅/체킹 및 데이타의 제거를 취급한다. 검출된 JPEG 마커는 시작 코드(v_not_t: 다음 텍스트 참조)로서 플래그되고(flagged), acdipnew로부터의 커맨드가 번복되어 (overridden) 바이패스된다. 동작은 코드로 가장 잘 설명된다.
B.1.2.4 입력 쉬프터(scinshft.tach,scinshm.M)
이 블럭의 기본 동작은 극히 간단하다. 이 블럭은 입력 회로로부터의 데이타 바이트를 취하고, 쉬프트 레치스터를 로딩하며, 이것을 쉬프트한다. 그러나, 이것은 입력 디코더로부터의 커맨드에 따라, 바이패스 모드로 그리고 그바이패스모드로의 천이를 처리한다. (다른 SR은 플러싱). BAPASS 커맨드를 수신하자마다, 관련된 바이트는 쉬프트 레지스터에 로딩되지 않는다. 그 대신, "쓰레기(rubbish)"(tag=1)이 쉬프팅되어 다른 쉬프트 레지스터에 있는 잉의의 데이타가 출력으로 된다. 그 후, 블럭은 이 "쓰레기"가 토큰 재구성기에 나타났던 것을 나타내는 "플러싱된(flushed)" 신호를 기대한다. 그 후, 입력 바이트는 토큰 재구성기(token reconstructor)로 직접 전달된다.
B.1.2.5 시작 코드 검출기(scdetect.sch, scdetm.M)
이 블럭은 16 또는 24비트로 프로그램 가능한 두 개의 쉬프트 레지스터, 시작 코드 검출 논리 및 "유효 내용" 검출 논리를 구비한다. MPEG 시작 코드는 전체 24비트를 필요로 하는 반면, H.261은 16개만을 필요로 한다.
본 발명에 있어서, 제1 SR은 데이타를 위한 것이고 제2 SR은 데이타 SR들에서의 비트가 유효한 가를 나타내는, 즉 SR에 (2선식 인터페이스 개념에 있어서) 갭 또는 정체가 없는 것을 나타내는 태그를 운반하지만, 이들이 플러싱되는 반면 이들이 포함하는 비트는 무효 (쓰레기)가 될 수 있다. 시작 코드의 검출시, 태그 쉬프트 레지스터 비트는 디코더 SR의 내용을 무효로 하도록 세팅된다.
시작 코드는 SR 내용이 모두 유효과 아니면 검출될 수 없다. 바이트 정렬된 시작 코드는 검출될 수도 없고 플래그될 수도 없다. 또한, 시작 코드가 검출될 때, 오버래핑 시작 코드가 체킹될 때까지 명확히 플래그될 수 없다. 이 기능을 실행하기 위해, 검출된 시작 코드 (그것에 따른 바이트)의 "값"은 scinshift, scdetect 및 into scoshift를 거쳐 오른쪽으로 쉬프팅된다. 다른 시작 코드의 검출없이 scoshift에 도착하면, 그것은 제거되었던 오버래핑 시작 코드이고 이것은 유효 시작 코드로서 플래그된다.
B.1.2.6 출력 쉬프터(scoshift.sch,scoshm.M)
출력 쉬프터의 기본 동작은 scdetect로부터 직렬 데이타 (및 태그)를 취하고, 이것을 15비트 워드로 팩하여(pack) 이들을 출력한다. 다른 기능은 다음과 같다.
B.1.2.6.1 데이타 패딩(padding)
출력은 15비트 워드로 구성되지만, 입력은 임의의 수의 비트로 구성될 수 있다. 플러싱를 위해, 마지막 워드가 15비트까지로 되도록 비트를 추가할 필요가 있다. 이들 잉여 비트는 패딩이라고 칭하며, 허프만 디코더에 의해 인식되어 제거되어야 한다. 패딩은 다음과 같이 정의된다.
마지막 데이타 비트후, 15비트 워드를 이루도록 충분한 "일(1)" 다음에 "제로(zero)"를 삽입한다.
패딩을 포함하는 데이타 워드는 이것이 데이타 토큰의 끝인 것을 나타내는 낮은 확장 비트로 출력된다.
B.1.2.6.2 "플러싱된"의 발생
본 발명에 따르면, "플러싱된(flushed)" 동작의 발생은 모든 SR이 플러싱될 때를 검출하고 및 이것을 입력 쉬프트로 신호하는 것을 포함한다. 입력 쉬프터에 의해 삽입된 "쓰레기"가 출력 쉬프터의 끝에 도착하고 출력 쉬프터가 자신의 패딩을 완료했을 때, "플러싱된" 신호가 발생된다. 이 "플러싱된" 신호는 입력 쉬프터가 확실하게 바이패스 모드로 들어가기 전에 토큰 재구성기(token reconstructor)를 통과해야 한다.
B.1.2.6.3 유효 시작 코드 플래깅
scdetect가 시작 코드를 발견한 것을 나타내면, 패딩이 실행되고 현재 데이타가 출력된다. 시작 코드값 (다음 바이트)은 오버래핑 시작 코드를 제거하도록 검출기를 통해 쉬프팅된다. 다른 시작 코드가 검출되지 않고 출력 쉬프터에 "값(value)"이 도착하면, 이것은 오버랩되지 않고, 이것이 시작 코드값인 것을 나타내도록 플래그 v_not_t (ValueNotToken)으로 전달된다. 그러나, 출력 쉬프터가 그 값을 기다리는 동안 다른 시작 코드가 (scdetect에 의해) 검출되면, overlappins_start_error이 발생된다. 이 경우, 첫 번째 값은 버려지고 시스템은 두 번째 값을 기다린다. 이 값은 오버랩될 수 있으므로, 오버랩되지 않은 시작 코드가 발견될 때까지 동일한 절차가 반복된다.
B.1.2.6.4 시작 코드후의 타이딩 업(tyding up)
양호한 시작 코드(good start code)가 검출되어 출력되었으면, 데이타(쓰레기가 아님)가 도달하기 시작할 때 새로운 DATA 헤더가 발생된다.
B.1.2.7 데이타 스트림 재구성기(sctokrec.sch, sctokrem.M)
데이타 스트림 재구성기는 2선식 인터페이스 입력, 즉 바이패싱된(bypassed) 토큰으로 부터의 것과 팩된 데이타 및 시작 코드의 scoshift로부터의 것을 갖는다.
두 개의 소스 사이의 전환은 (두 개의 소스중의 하나로부터) 현재 토큰이 (낮은 확장 비트가 도달하여) 완료되었을 때만 허용된다.
B.1.2.8 시작 번호 변환을 위한 시작 값(scdromhw.sch, schrom.M)
시작 값을 토큰으로 변환하는 과정은 두 단계로 이루어진다. 이 블럭은 520개 기수 잠재 코드(odd potential codes)를 16개 코딩 규격에 독립적인 인덱스로 감소시키는 코딩 규격 의존 문제를 주로 다룬다.
상기 기술한 바와 같이, 시작값 (JPEG의 것을 포함)은 플래그 (value_not_token)에 의해 다른 모든 데이타와 구분된다. v_not_t가 하이이면, CODING_STANDARD에 따라서 이 블럭은 4 또는 8 비트 값을 규격에 독립적인 4비트 start_number로 변환하고, 임의의 인식되지 않은 시작 코드를 플래그한다.
시작 번호는 다음과 같다
테이블 B.1.2 시작 코드 번호(인덱스)
B.1.2.9 토큰 변환에 대한 시작 번호(sconvert.tach, sconverm.M)
변환의 두 번째 단계는 상기 시작 번호 (또는 인덱스)를 토큰으로 변환하는데 있다. 이 블럭은 적당한 곳에서 확장 또는 사용자 데이타를 버리고 토큰 확장 및 검색 모드를 취급한다.
검색 모드는 임의의 위치에서 데이타 스트림으로 들어가는 수단이다. 검색 모드는 8개 값,
0: 정상 동작-다음 시작 코드를 찾음
1/2: 공간 디코더에서 실행되지 않은 시스템 레벨의 검색
3: 시퀀스 또는 그 이상 검색(search for sequence or higher)
4: 그룹 또는 그 이상 검색
5: 화상 또는 그 이상 검색
6: 슬라이스 또는 그 이상 검색
7: 다음 시작 코드를 검색
중의 하나로 세팅될 수 있다.
임의의 영이 아닌(non-zero) 검색 모드는 요구되는 시작 코드 (또는 구문에서 더 높은 것)이 검출될 때까지 데이타가 버려지게 한다.
또한, 이 블럭은 PICTURE 및 SLICE 시작 토큰에 토큰 확장자를 더한다.
PICTURE_START는 4비트 화상 카운트인 PICTURE_NUMBER로 확장된다.
SLICE_START는 svp (슬라이스 수직 위치)로 확장된다. 이것은 시작 코드에서 1을 뺀 값 (MPEG, H.261)이며, 또한 OxDO를 뺀 값 (JPEG)이다.
B.1.2.10 데이타 스트림 포맷팅(scinsert.sch, scinserx.M)
본 발명에 있어서, 데이타 스트림 포맷팅은 PICTURE_END, FLUSH, CODING_STANDARD, SEQUENCE_START 토큰의 종래 삽입 및 STOP_AFTER_PICTURE 이벤트의 발생에 관계가 있다. 이 기능은 소프트웨어로 가장 간단하게 잘 설명된다.
B.2절 허프만 디코더와 파서
B.2.1 머리말
이 절은 본 발명에 따른 허프만 디코더(huffman decoder) 및 파서(parser)회로를 설명한다.
제118도는 허프만 디코더 및 파서의 하이 레벨 블럭도이다. 도면을 명료하게 하기 위해, 이 도면, 특히 데이타가 (도시된 큰 루프 내에서) 뒤쪽으로 공급되는 여러 곳에서 많은 신호 및 버스는 생략되어 있다.
본 발명의 허프만 디코더 및 파서는 프로그램 가능한 상태 머신에 의해 제어되는 다수의 전용 프로세싱 블럭 (도면의 아래 부분에 도시된)으로 구성된다.
데이타는 "인쉬프트(inshift)" 블럭에 의해서 코드화된 데이타 버퍼(code data buffer)로부터 수신된다. 이 점에 있어서, 만나게 되는 필수적인 두 타입의 정보, 즉 data 토큰에 의해 운반되는 코드화된 데이타 및 시작 코드 검출기에 의해 이들 각각의 토큰으로 이미 치환된 시작 코드가 있다. 다른 토큰을 만날 수도 있지만, (데이타 토큰 이외의) 모든 토큰은 동일한 방식으로 취급된다. 토큰 (시작 코드)은 대부분의 많은 데이타가 (H.261. JPEG 또는 MPEG에서) 인코딩될 때 특별한 경우로서 취급된다.
본 발명에 있어서, DATA 토큰에 의해 운반되는 모든 데이타는 직렬 형태 (비트 단위(bit-by-bit))로 허프만 디코더에 전송된다. 당연히, 이 데이타는 허프만 코드화되지 않고 고정 길이 코드화(fixed length coded)되는 많은 필드를 포함한다. 그럼에도 불구하고, 이 데이타는 허프만 디코더를 직렬로 통과한다. 허프만 인코드된 데이타의 경우에 있어서, 허프만 디코더는 실제 허프만 코드가 인덱스 번호로 치환되는 디코딩의 첫 번째 단계만을 실행한다. 디코딩되고 있는 특정 코드 테이블에 N개의 상이한 허프만 코드가 있으면, 이 "허프만 인덱스(huffman index)"는 0에서 N-1의 범위 내에 있게 된다. 또한, 허프만 디코더는 "no of", 즉 허프만 디코더에 의한 어떠한 처리없이 데이타 또는 토큰 정보를 따라 다음 단계로 통과하게 하는 "무 연산(no operation)" 모드를 갖는다.
인덱스 대 데이타 유닛(index to data unit)은 테이블 참조 연산을 실행하는 비교적 간단한 회로 블럭이다. 이것은 허프만 디코더에서 얻은 인덱스 정보가 간단한 테이블 참조에 의해 실제 디코딩된 데이타로 변환되는 허프만 디코딩 처리의 두 번째 단계에서 자신의 명칭을 인출한다. 인덱스 대 데이타 유닛은 하나의 논리적 유닛으로서 작용하도록 허프만 디코더와 협동한다.
ALU는 다음 블럭이고 디코딩된 데이타에 다른 변환을 실행하기 위해 제공된다. 인덱스 대 데이타 유닛이 비교적 임의의 맵핑에 적합한 반면, ALU는 산술이 보다 더 적합한 곳에 사용된다. ALU는 디코딩 알고리증의 여러 부분을 실현하도록 조작할 수 있는 레지스터 화일을 구비한다. 특히, 벡터 예측 및 DC 예측를 유지하는 레지스터는 이 블럭에 포함된다. ALU는 오퍼랜드 선택 논리(operand selection logic)가 있는 간단한 가산기 주변에 기초를 둔다. 또한, 이것은 부호 확장형 동작을 위한 전용 회로도 포함한다. 쉬프트 동작이 구현될 것도 같지만, ALU는 직렬방식으로 실행되며, 배럴 쉬프터(barrel shifter)는 없다.
본 발명에 따른 토큰 포맷터는 비디오 파서에서 마지막 블럭이고, 나머지 디코더 상으로 전달될 수 있는 토큰으로 디코딩된 데이타를 치종적으로 어셈블링하는 작업을 갖는다. 이 점에 있어서, 이 특정 화상을 위해 디코더에 의해 사용되는 것만큼의 토큰이 있다.
18 비트 폭이고, 2선식 인터페이스를 사용하기 위해 채택된 파서 상태 머신은 다른 블럭의 연산을 조정하는 작업을 한다. 본질적으로, 이것은 매우 간단한 상태 머신이고, 이것은 다른 블럭으로 전달되는 매우 폭 넓은 "마이크로-코드" 제어 워드를 발생한다. 제118도는 인스트럭션 워드는 데이타측에 의해 블럭에서 블럭으로 전달된다. 이것은, 실제로 그 경우이며, 상이한 블럭들 사이의 전송이 2선식 인터페이스에 의해 제어되는 것을 이해하는 것은 중요하다.
본 발명에 있어서, 비디오 파서에서 각각의 블럭들 사이에는 2선식 인터페이 스가 있다. 또한, 허프만 디코더는 직렬로, 데이타를 가지고서 동작하며, 인쉬프터(inshifter)는 한번에 일 비트씩 제어 토큰으로 데이타를 입력한다. 따라서, 두 모드의 동작이 있다. 데이타가 DATA 토큰을 거쳐 허프만 디코더로 들어오고 있으면, 이것은 쉬프터를 한번에 일 비트씩 통과한다. 또한, 인쉬프터와 허프만 디코더 사이에는 2선식 인터페이스가 있다. 그러나, 다른 토큰은 한번에 일 비트씩(직렬로) 쉬프팅되지 않고 토큰의 헤더로 쉬프팅된다. DATA 토큰이 입력되면, 그 후 어드레스 정보를 포함하는 헤더는 삭제되고, 어드레스를 따르는 데이타는 한번에 일 비트씩 쉬프팅된다. 입력된 것이 DATA 토큰이 아닌 경우, 전체 토큰, 헤더 및 모두는 한번에 허프만 디코더로 모두 제출된다.
본 발명에 있어서, 비디오 파서의 2선식 인터페이스가 두 개의 유효 라인을 가짐에 있어서 일반적이라는 것을 이해하는 것은 중요하다. 하나의 라인은 연속적으로(serially) 유효하고 하나의 라인은 명목상으로(tokenly) 유효하다. 더 나아가서, 두 라인은 동시에 구동되지(asserted) 않을 수 있다. 하나 또는 다른 것이 구동될 수 있거나, 또는 유효 데이타가 존재하지 않으면, 두개의 유효 라인이 있더라도 어느 것도 구동되지 않으므로, 다른 방향으로 단지 하나의 수용 와이어(single accept wire)만 있다는 것이 인식되어야 한다. 그러나, 이것은 문제가 되지 않는다. 허프만 디코더는 현재 구문(current syntax)에 기초하여 다음에 실행될 필요가 있는 것에 의존하여 직렬 데이타(serial data) 또는 토큰 정보(token information) 중 어느 것을 원하는 가를 안다. 따라서, 유효 및 수용 신호가 그에 따라 세팅되며 허프만 디코더로부터 인쉬프터로 Accept가 송출된다. 적절한 데이타 또는 토큰이 있으면, 인쉬프터는 유효 신호를 송출한다.
예를 들면, 대표적인 인스트럭션은 허프만 코드를 디코딩하고, 인덱스 대 데이타 유닛에서 변형하며, 이 결과를 ALU에서 수정하며, 그 후 이 결과는 토큰 워드로 형성된다. 이것을 실행해야 할 모든 정보를 포함하는 단일 마이크로코드 인스트럭션 워드가 생성된다. 완전한 부호를 디코딩될 때까지 "인쉬프트" 블럭으로부터 데이타 비트를 하나씩 요청하는 허프만 디코더로 커맨드가 직접 전달된다. 제어 토큰은 병렬로 입력된다. 일단 이것이 발생하면, 디코딩된 인덱스 값은 원래의 마이크로코드 워드와 함께 인덱스 대 데이타 유닛으로 전달된다. 허프만 디코더는 이 동작을 실행하기 위해 여러 번의 사이클을 필요로하며, 디코딩되는 데이타에 의해 다수의 사이클이 실제로 결정된다는 것에 주목할 필요가 있다. 그 후 인덱스 대 데이타 유닛은 마이크로코드 인스트럭션 워드에 식별되어 있는 테이블을 사용하여 이 값을 맵핑한다. 이 값은 원래의 마이크로코드 워드와 함께 다음 블럭, 즉 ALU 상으로 다시 전달된다. ALU가 적당한 동작을 일단 완료하면 (사이클 수는 다시 데이타에 의존하게 된다), 토큰 워드가 형성되는 방식을 제어하는 마이크로코드워드와 함께 토큰 포맷팅 블럭 사이에서 적당한 데이타를 전달한다.
ALU는 파서 상태 머신으로 다시 전달되는 다수의 상태 와이어 또는, 조건 코드(condition code)'를 갖는다. 이것은 상태 머신이 조건적 점프 인스트럭션(conditional jump instructions)을 실행하게 한다. 실제로, 모든 인스트럭션은 조건적 점프 인스트럭션이며, 선택될 수 있는 조건 중의 하나는 값 "거짓(False)"에 대해 하드와이어드(hard-wired)된다. 이 조건을 선택함으로써, "점프 없음(no jump)" 인스트럭션이 구성될 수 있다.
본 발명에 따르면, 토큰 포맷터는 두개의 입력, 즉 ALU로부터의 데이타 필드 및/또는 파서 상태 머신로부터 오는 상수 필드를 갖는다. 또한, 얼마나 많은 비트가 하나의 소스로부터 받아들여, 그 후 총 8비트에 대하여 나머지 소스로부터의 나머지 비트로 채우는 가를 토큰 포맷터에 지시하는 인스트럭션이 있다. 예를 들면, HORIZONTAL_SIZE는 자신을 HORIZONTAL_SIZE 토큰으로서 식멸하는 불변 어드레스 (invariant address)인 8비트 필드를 갖는다. 이 경우, 상수 필드에서는 8 비트가 오고 ALU에서는 데이타가 오지 않는다. 그러나, 이것이 DATA 토큰이면, 상수 필드로부터 6비트 및 ALU로부터의 색 성분을 나타내는 2개의 하위 비트를 가질 수 있다. 따라서, 토큰 포맷터는 이 정보를 취하고 그것은 시스템의 리셋에 의해 사용되도록 토큰으로 운반한다. 상기 예에서, 각각의 소스로부터의 비트수는 단지 예시 목적만을 위한 것이며, 당해 기술 분야에서 통상의 기술을 가진자라면 임의의 소스로부터의 비트 수가 변할 수 있는 것을 용이하게 알 수 있다는 것에 주의한다.
ALU는 화상의 구조를 통해 카운팅하도록 사용되는 카운터의 뱅크를 포함한다. 화상의 차원은 레지스터 뱅크의 일부로서 "마이크로프로그래머"에 나타나는 카운터와 관련된 레지스터로 프로그램된다. 여러개의 조건 코드는 이 카운터 뱅크로부터 출력되어 "화상의 시작", "매크로블럭의 시작" 등에 따라 조건 점프를 허용한다.
파서 상태 머신을 "디멀티플렉서 상태 머신"이라고도 하는 것에 주의한다.
본 명세서에서는 이들 용어를 모두를 사용한다.
[입력 쉬프터]
본 발명에 있어서, 입력 쉬프터는 두 개의 파이프라인 스테이지 데이타 경로("hfldp')로 구성되고, z셀("hfi")을 제어하는 매우 간단한 회로의 일부분이다.
첫번째 파이프라인 스테이지에 있어서, 토큰 디코딩이 발생한다. 이 스테이지에서는 DATA 토큰만이 인식된다. DATA 토큰에 포함된 데이타는 허프만 디코더로 한번에 일 비트씩 쉬프팅된다. 두 번째 파이프라인 스테이지는 쉬프트 레지스터이다. DATA 토큰의 가장 마지막 워드에 있어서, 코드화된 데이타 버퍼를 통해 임의의 수의 비트가 전송될 수 있도록 특별한 코딩이 발생한다. 마지막 데이타 워드에서 그 다음은 모두 가능한 패턴이다.
테이블 B.2.1 마지막 데이타 워드에서 가능한 패턴
데이타 비트가 왼쪽으로 한 비트씩 쉬프트 레지스터에서 쉬프팅될 때, 비트패턴" 다음에 모두 1이 뒤따르는 0"이 찾아진다(패딩). 이것은 쉬프트 레지스터내의 나머지 비트가 유효하지 않고 그들이 버려지는 것을 나타낸다. 이 연산은 DATA 토큰의 마지막 워드에서만 발생하는 것에 주의한다.
상기 기술한 바와 같이, 모든 다른 토큰은 허프만 디코더를 병렬로 통과한 다. 이들은 두 번째 파이프라인 스테이지로 로딩되지만, 쉬프트는 발생하지 않는다. DATA 헤더가 버려져서 허프만 디코더로 전혀 전달되지 않는 것에 주의한다.
두개의 유효 와이어 (out_valid 및 serial_valid)가 제공된다. 주어진 시간에 단지 하나만이 구동되고(asserted), 이것은 임의의 타입의 데이타가 그 순간 제공되고 있는 것을 나타낸다.
B.2.2 허프만 디코더
허프만 디코더는 다수의 연산 모드를 갖는다. 허프만 코드를 디코딩할 수 있어 이들을 허프만 인덱스 번호로 변하게 하는 것이 가장 명확한 사항이다. 또한, 인스트럭션 워드에 의해 결정된 길이 (비트)의 고정 길이 코드를 디코딩할 수 있다. 허프만 디코더는 인쉬프트 블럭으로 부터 토큰을 수용할 수 있다.
허프만 디코더는 매우 작은 상태 머신을 구비한다. 이것은 블럭 레벨 정보 를 디코딩할 때 사용된다. 이는 파서 상태 머신이 결정하기 에는 시간이 너무 많이 걸리기 때문이다 (그 데이타에 관한 결정을 하여 새로운 커맨드를 발행할 수 있기 전에 ALU 및 인덱스 대 데이타 유닛을 거쳐 데이타가 흐르는 것을 기다려야 하기 때문이다). 이 상태 머신이 사용될 때, 허프만 디코더 자신은 인덱스 투 데이타 유닛 및 ALU에 커맨드를 발행한다. 허프만 디코더 상태 머신은 모든 마이크로 코드 인스트럭션 비트를 제어할 수 없으므로, 다른 블럭에 완전한 범위의 커맨드를 발행할 수 없다.
B.2.2.1 연산 이론
허프만 코드 디코딩시, 본 발명의 허프만 디코더는 허프만 인덱스 번호로 들어오는 코드를 디코딩하기 위해 산술 절차를 사용한다. 이 번호는 (N개의 입구점을 갖는 코드 테이블에 대하여) 0과 N-1사이에 있다. 입력 쉬프터로 부터 비트를 하나씩 수용한다.
머신의 동작을 제어하기 위해, 다수의 테이블이 필요하다. 이들은 하나의 코드 내의 가능한 비트 수 (1비트 내지 16비트)마다 그 길이를 가진 코드가 얼마나 많이 있는 가를 지정한다. 기대된 바와 같이, 이 정보는 일반적인 허프만 코드를 지정하기에 충분하지 않다. 그러나, MPEG, H.261 및 JPEG에 있어서, 허프만 코드는 이 정보만이 허프만 코드 테이블을 지정할 수 있도록 선택된다. 불행하게도 이것에 대해서는 하나의 예외 밖에 없다. 그것은 MPEG에서도 사용되는 H.261로 부터의 Tcoefficient 테이블이다. 이것은 어딘가에서 설명되는 또 하나의 테이블을 필요로 한다. (이 예외는 시작 코드 에뮬레이션을 피하기 위해 H.261에 소개된다).
이 허프만 디코더에 의해 사용되는 테이블이 JPEG에서 전송된 것과 정확히 동일하다고 인식하는 것은 중요하다. 이것은 허프만 디코더의 다른 설계가 전송된 것들에서 내부 테이블의 발생을 요청하는 동안 이들 테이블이 직접 사용되게 한다.
이것은 변환을 실행하기 위한 여분의 프로세싱 및 여분의 기억장치를 필요로 할 것이다. MPEG 및 H.261 (위에서 지정한 예외가 있음)의 테이블이 동일한 방식으로 설명될 수 있으므로, 다규격 디코더가 실용적이다.
다음의 "C" 일부는 디코딩 프로세싱을 나타낸다
요구되기 전에 소정의 중간 값이 클럭 위상으로 계산할 수 있다는 이점을 취하더라도 이 프로세스는 일반적으로 실리콘 구현으로 직접 맵핑된다.
코드의 단편으로부터,
식1. totaln+1 = totaln + cpbn
식2.'sn+1 = 2('sn + cpbn)
식3. coden+1 = 2coden + bitn
식4. indexn+1 = 2coden + bittn + totaln -'sn
를 알 수 있다.
불행하게도 하드웨어에 있어서는 변수 "shifted"가 변수 "s"대신에 사용되는 수정된 방정식을 사용하는 것이 더 용이하게 증명된다. 이 경우,
식5. shiftedn+1 = 2shiftedn + cpbn
이다. 또한
식6. sn = 2shiftedn
임을 알 수 있으므로, 이것을 다시 식4로 대입하면
식7. indexn+1 = 2(codern - shiftedn) + totaln + bitn
로 된다.
"인덱스"의 연속적인 값을 계산하는 것 이외에, 계산이 완료되는 때를 알 필요가 있다. "C"코드 일부로부터,
식8. indexn+1 < totaln+1
인 것을 알 수 있다.
식7 및 식1로 치환하면,
식9. 2(coden - shiftedn) + bittn - cpbn < 0
인 것을 알 수 있다.
본 발명의 하드웨어 구현에 있어서, 식7 및 식9의 공통항(codern-shiftedn)은 계산이 "실행된" 주어진 최종 결과 및 정보를 산출하기 위하여 이들 방정식들의 나머지들이 계산되기 전에 계산된 하나의 위상(one phase)이다.
한 가지 주의할 것은, 여러가지 "C"코드 부분, 명확히 허프만 디코더에 따른 행동 및 sm4code 프로젝트에 있어서, "C" 부분은 대부분 직접 사용되지만, 변수 "s"는 실제로 "shifted"라고 불리운다. 따라서, "shifted"라고 불리우는 두가지 다른 변수가 있다. 하나는 "C"코드에 있고, 다른 것은 하드웨어 구현에 있다. 이들 두 변수는 두가지 요인이 다르다.
B.2.2.1.1 데이타 비트의 반전
허프만 코드를 정확히 디코딩하기 위해 필요한 다른 정보 부분이 있다. 이것은 코드화된 데이타의 극성(polarity)이다. H.261 및 JPEG이 반대 규약을 사용하는 것을 알 수 있다. 이것은 H.261의 시작 코드가 제로 비트인 반면 JPEG의 마커 바이트가 1비트인 사실을 스스로 반영한다.
두 규약 모두를 취급하기 위해서는, H.261 유형의 허프만 코드를 디코딩하도록 허프만 디코러에서 판독될 때 코드화된 데이타 비트를 반전할 필요가 있다. 이것은 배타적 OR 게이트를 사용하는 명확한 방식으로 실행된다. 고정 길이 코드를 디코딩할 때 데이타가 반전되지 않으므로, 이 규약이 허프만 코드에 대해서만 실행되는 것에 주의한다.
MPEG은 두가지 규약을 결합하여 사용한다. 이러한 관점에서, H.261로부터 계승된 H.261 규약을 사용한다. JPEG으로부터 계승된 특징에서 (DC 인트라 계수 디코딩)에서는 JPEG 규약을 사용한다.
B.2.2.1.2 변환 계수 테이블
H.261 및 MPEG의 변환 계수 테이블을 사용할 때, 다수의 예외가 있다. 먼저, MPEG 테이블은 H.261 테이블의 수퍼-세트(super-set)이다. 본 발명의 하드웨어 구현에 있어서, 두 개의 규격 사이에 차이점이 인출되지 않고, 테이블의 확장 부분으로부터의 코드 (즉, MPEG 코드)를 포함하는 H.261 스트림이 "정확(correct)"하게 디코딩되는 것을 의미한다. 압축 규격의 다른 특성은 잘 깨어질(broken) 수 있다. 예를 들면, 이들 확장 코드는 H.261에서 시작 코드 에뮬레이션을 유발한다.
두번째로, 변환 계수 테이블은 codes_per_bit 테이블에 의해 정상적인 방식으로 기술할 수 없는 것을 의미하는 예외를 가진다. 이 예외는 길이 6비트의 코드에 의해 발생된다. 이들 코드 워드는 대체 코드 워드로 규칙적으로 치환된다. 인코더에 있어서, 정상적인 첫 번째 인코딩에 의해 정확한 결과가 얻어진다. 따라서 6비트 또는 이보다 긴 모든 코드에 대하여, 첫 번째 6개 비트는 간단한 테이블 참조 연산에 의해 다른 6개 비트로 치환된다. 본 발명에 따르면, 디코더에 있어서, 디코딩 처리는 6개 비트가 디코딩되기 직전에 인터럽트되고, 코드 워드는 테이블 참조를 사용하여 치환되며, 디코딩이 계속된다.
이 경우에 있어서, 필요한 참조 테이블이 매우 작게 되도록 하는 10개의 가능한 6비트 코드만이 있다. 또한, 이 연산은 코드의 상위 2비트가 연산에 의해 변경되지 않는다는 사실에 의해 지원된다. 그 결과, 진짜(true) 참조 테이블을 사용 할 필요가 없게 된다. 그 대신 작은 게이트 집합체를 하드-와이어 하여 적절히 전송한다. 이것을 실행하는 모듈을 "hftcfrng"라고 한다. 이 타입의 코드 치환은 가능한 코드의 세트로부터 각각의 코드가 이 세트로부터의 다른 코드에 의해 치환되므로 여기서에서는 "링(ring)"이라고 한다. (새로운 코드가 도입되지 않고 오래된 코드가 생략됨).
또한, 블럭의 가장 첫 번째 계수에 대하여 유일한 구현이 사용된다. 이 경우, 블럭끝 코드(end-of-block code)가 발생할 수 없으므로, 가장 일반적으로 발생하는 기호가 그렇지 않으면 블럭끝으로서 해석될 코드를 사용할 수 있도록 테이블이 변경된다. 이것은 한 비트를 절약한다. 본 발명에 따른 디코딩을 위한 아키텍쳐에 의하면 이것이 용이하게 수용된다는 것을 알 수 있다. 요약컨데, 첫 번째 계수의 첫 번째 비트에 대하여, "인덱스"가 값 제로를 가지면 디코딩은 "실행된" 것으로 간주된다. 또한, 단지 하나의 비트를 디코딩한 후, "인덱스"에 대해서 제로 및 1의 단지 두개의 가능한 값이 있으므로, 단지 하나의 비트만을 테스팅하는 것이 요구된다.
B.2.2.1.3 레지스터 및 가산기 크기
본 발명의 허프만 디코더는 16비트 길이의 허프만 코드를 다를 수 있다. 그러나, 디코딩 머신은 단지 8비트의 폭을 가지고있다. 이것은 우리가 디코딩된 허프만 인덱스 번호의 최장 가능한 값이 255인 것을 알기 때문이 가능하다. 사실상, 이것은 현재의 응용에서는 확장 JPEG에서만 발생할 수 있어 제한이 다소 적다 (그러나, 128보다 크므로, 7비트는 충분하지 않다).
모든 적합한 허프만 코드에 대하여, "인덱스"의 최종값뿐만 아니라 모든 중간 값이 0과 255범위에 있는 것으로 판명된다. 그러나, 부적합한 코드에 대하여, 즉 현재 코드 테이블에 없는 코드를 디코딩하려는 시도 (아마도 데이타 에러에 의함)에 대하여, 인덱스 값은 255를 넘을 것이다. 우리가 8비트 머신을 사용하고 있으므로, 디코딩의 끝에서, "인덱스"의 최종값은 255를 넘지 않는데 그 이유는 에러가 발생하였다고 우리에게 말해지는 더 중요한 비트가 버려졌기 때문이다. 이 때문에, 디코딩 중 임의의 시간에 있어서, 인덱스 값이 255를 넘으면 (즉, 인덱스를 형성하는 가산기가 실행하면), 에러가 발생하여 디코딩을 그만둔다.
12 비트의 "코드"가 보존된다. 8비트 레지스터로 충분하였던 허프만 코드에 대해서는 이것은 필요하지 않다. 이들 상위 비트는 12 비트까지 판독될 때 고정 길이 코드에 대하여 필요하다.
B.2.2.1.4 고정 길이 코드의 연산
고정 길이 코드에 대하여, "비트당 코드" 값은 제로로 된다. 이것은 "total" 및 "shifted"가 전체 연산에 걸쳐 제로여서, "index"가 코드와 동일한 것을 의미한다. 사실상, 가산기 등은 8비트 값만이 "인덱스"에 대하여 발생되게 한다. 이 때문에, 출력 워드의 상위 비트는 고정 길이 코드를 디코딩할 때 "코드" 레지스터로부터 직접 취해진다. 허프만 코드를 디코딩할 때, 이들 상위 비트는 제로로 된다.
충분한 비트가 입력으로부터 판독되었다는 사실이 명백히 계산된다. 비교기는 바라는 수의 비트와 "비트" 카운터를 비교한다.
B.2.2.2 계수 데이타의 디코딩
본 발명에 따른 파서 상태 머신은 일반적으로 상당히 하이-레벨 디코딩을 위해서만 사용된다. 8x8 데이타 블럭 내에서 최하위 레벨 디코딩은 이 상태 머신에 의해 직접 취급되지 않는다. 파서 상태 머신은 "블럭을 디코딩하는"형태의 허프만 디코더에 커맨드를 부여한다. 허프만 디코더, 인덱스 대 데이타 유닛에 및 ALU는 (본래 허프만 디코더에서) 전용의 상태 머신의 제어하에 함께 작용한다. 이 배열은 엔트로피 코드화된 계수 데이타의 매우 고성능 디코딩을 허용한다. 이 연산 모드에는 다른 피드백 경로도 있다. 예를 들면, VLC가 디코딩되어 SIZE 및 RUN 정보가 제공되는 JPEG 디코딩에 있어서, SIZE 정보는 인덱스 대 데이타 유닛의 출력에서 허프만 디코더로 직접 피드백되어 허프만 디코더에게 얼마나 많은 FLC를 판독할 것인지를 인스트럭트한다. 또한, 몇개의 가속기(accelerators)가 구현된다. 예를 들면, 동일한 예를 사용하여, 제로의 SIZE를 계산하는 모든 VLC 값은 데이타로의 인덱스 단계 전에 허프만 인덱스값을 보는 것에 의해 명백히 트랩된다. 이것은 영이 아닌 SIZE 값인 경우, 허프만 디코더가 SIZE의 실제 값을 알기 전에 하나의 FLC비트 판독을 계속하는 것을 의미한다. 이것은 이러한 첫 번째 FLC 비트의 판독이 인덱스 대 데이타 유닛에서 테이블 참조를 실행하는 데 필요한 하나의 클럭 사이클을 오버랩하기 때문에 낭비되는 클럭 사이클이 없다는 것을 의미한다.
B.2.2.2.1 MPEG 및 H.261 AC 계수 데이타
제127도는 AC 계수가 MPEG 및 H.261에서 터코딩되는 방식을 도시한 것이다. 허프만 디코더의 동작을 설명하는 흐름도는 제119도에 도시되어 있다.
프로세스는 VLC 코드를 판독함으로써 시작한다. 정상적인 이벤트 과정에 있어서, 허프만 인덱스는 6비트 RUN 및 그 계수의 절대값을 나타내는 값으로 직접 매핑된다(mapped). 그 후 1비트 FLC가 판독되어 그 계수의 부호가 주어진다. ALU는 이 계수의 절대값을 이 부호 비트와 합쳐서 최종 계수 값을 제공한다.
이 점에서의 데이타 포맷이 부호 크기이므로 이 동작에 문제가 없는 것에 주의한다. RUN 값은 6비트의 보조 버스 상에서 전달되는 반면 계수 값(LEVEL)은 정상 데이타 버스 상에서 전달된다.
두 개의 특별한 경우가 존재하고 이들은 데이타에 대한 인덱스 동작전에 디코딩된 인덱스의 값을 보는 것에 의해 트랩된다. 이들은 블럭의 끝(EOB) 및 확장 코드화된 데이타이다. EOB의 경우, 이것이 발생했다는 사실은 인덱스 대 데이타 유닛 및 ALU 블럭을 따라 전달되므로, 토큰 포맷터는 오픈된 데이타 토큰을 정확히 클로즈(Close)할 수 있다.
확장 코드화된 데이타는 보다 더 복잡하다. RUN의 첫 번째 6비트가 판독되 고 이들이 인덱스 대 데이타 유닛을 통해 직접 전달되어 ALU에 저장된다. 그 후, FLC의 하나의 비트가 판독된다. 이것은 MPEG 및 JPEG에서 설명된 8개 확장 비트의 최상위 비트이고, 이것은 레벨의 부호를 부여한다. 부호는 이 실행에 의해 명확히 판독되는데 그 이유는 응의 값 대 양의 값에 대해 ALU로 상이한 커맨드를 송출할 필요가 있기 때문이다. 이것은 ALU가 비트 스트림 내의 두개의 보수 값을 부호 크기로 변환하게 한다. 어떠한 경우에도, FLC의 나머지 7비트가 판독한다. 이것이 값 제로를 가지면, 또 다른 8비트를 판독해야 한다.
본 발명에 있어서, 허프만 디코더의 내부 상태 머신은 자신을 제어하고 또한 인덱스 대 데이타 유닛, ALU 및 토큰 포맷터를 제어하는 커맨드를 발생할 책임이 있다. 제124도에 도시한 바와 같이, 허프만 디코더의 인스트럭션은 3개의 소스, 즉 파서 상태 머신으로부터 이전에 수신되었던 레지스터에 저장된 인스트럭션, 허프만 상태 머신 또는 파서 상태 머신 중의 하나로부터 온다. 본래, 파서 상태 머신으로부터의 원래 인스트럭션 (허프만 상태 머신이 제어 및 판독 계수를 넘기게함)은 레지스터에 유지, 즉 새로운 VLC가 필요할 때마다 그것을 사용한다. 디코딩을 위한 모든 다른 인스트럭션은 허프만 상태 머신에 의해 공급된다.
B.2.2.2.2 MPEG DC 계수 데이타
이것은 JPEG DC 계수 데이타와 마찬가지로 취급된다. 동일한 (로딩 가능한)테이블이 사용되고, 이것은 이들의 내용이 정확하도록 마이크로프로세서를 제어한다. MPEG 규격과의 실질적인 차이는 예측기가 (JPEG에서와 같이) 제로로 리셋되어 이것을 위한 정정이 역 양자화기에서 실행되는 것이다.
B.2.2.2.3 JPEG 계수 데이타
제120도는 JPEG AC 계수를 디코딩하기 위한 본 발명에 따른 하드웨어를 도시한 블럭도이다. DC 계수를 위한 처리가 본래 JPEG 프로세스를 간단히 한 것 이므로, 이 도면은 AC 및 DC 계수 모두에 대하여 작용한다. MPEG AC 계수를 위한 이전 도면에 실제로 추가되는 것은 "SSSS"가 피드백되어 판독될 FLC 비트 수를 지정하기 위한 허프만 디코더 커맨드의 부분으로서 사용될 수 있다는 것뿐이다.
제121도는 AC 및 DC 계수 모두의 허프만 디코딩을 위한 흐름도를 도시한 것이다.
AC 계수에 대한 프로세스를 먼저 다루면, 이 프로세스는 적당한 테이블(두개의 AC 테이블이 있음)을 사용하여 VLC를 판독하는 것에 의해 시작한다. 그 후 허프만 인덱스가 인덱스 대 데이타 유닛에서 RUN 및 SIZE 값으로 변환된다. 두개의 값은 허프만 인덱스 스테이지에서 트랩되고 이들은 EOB 및 ZRL을 위한 것이다. 이것은 FLC 비트가 판독되지 않는 경우 두개의 값이다. 디코드 인덱스가 이들 두 개의 값 중 어느 것도 아닌 경우, 얼마나 많은 비트가 실제로 필요한 가를 결정하는 참조 연산을 완료하기 위해 인덱스 대 데이타 유닛을 대기하는 동안, 허프만 디코더는 FLC의 한 비트를 즉시 판독한다. EOB의 경우, 허프만 디코더에서 허프만 상태 머신에 의해 또 다른 프로세스가 실행되지 않고 다른 커맨드는 파서 상태 머신에서 판독된다.
ZRL의 경우, FLC 비트가 필요하지는 않지만 블럭이 끝나지는 않는다. 이 경우, 허프만 디코더는 또 다른 VLC (이전과 동일한 테이블을 사용하여) 디코딩을 즉시 재개한다.
ZRL 및 EOB에 관련된 인덱스 값 검출에 의하면 특별한 문제가 있다. 이것은(H.261 및 MPEG과 달리), 허프만 테이블이 다운로드 가능하기 때문이다. 이들은 테이블이 다운로딩될 때 로딩된다. 이들은 적당한 기호에 관련된 인덱스의 값을 유지한다.
ALU는 SIZE 비트 FLC 코드를 적당한 부호 크기 값으로 변환시켜야 한다. 이들은 테이블이 다운로딩될 때 로딩된다. 이들은 적당한 기호에 관련된 인덱스의 값을 유지한다.
ALU는 STZE 비트 FLC 코드를 적당한 부호 크기 값으로 변환시켜야 한다. 이것은 이 값을 잘못된 부호로 먼저 부호 확장함으로써 실행될 수 있다. 부호 비트가 현재 세팅되어 있으면, 나머지 비트는 반전된다. (1의 보수).
DC 계수의 경우, 허프만 디코딩 스테이지에서 이루어지는 결정은 ZRL 필드의 등가가 없으므로 다소 용이하다. 제로 FLC 비트가 판독되게 하는 기호만이 제로 DC 계수를 나타내는 것이다. 이것은 허프만 인덱스 스테이지에서 다시 트랩되고 레지스터는 (다운로딩 가능한) JPEG DC 테이블마다 이 인덱스가 유지되게 한다.
본 발명의 ALU는 마지막 DC 계수값 (예측으로서 인지)의 복사본을 유지함으로써 최종적으로 디코딩된 DC 계수를 형성하는 일을 한다. 4개의 예측기가 필요하고 이들은 4개의 활성인 색 성분의 각각을 위한 것이다. DC 계수가 디코딩되었을 때, ALU는 디코딩된 값을 형성하기 위해 적당한 예측기를 더한다. 이것은 이 색 성분의 다음 DC 차이에 대한 예측기로서 다시 저장된다. (DC 오프셋 때문에) DC 계수가 신호되므로, 2의 보수에서 부호 크기로의 변환이 필요하다. 그 후, 이 값은 제로의 RUN으로 출력된다. 사실상, 이것의 마지막 스테이지의 일부를 실행하기 위한 인스트럭션은 허프만 상태 머신에 의해 제공되지 않는다. 이들은 파서 상태 머신에 의해 간단히 실행된다.
AC 계수에 대한 것과 마찬가지로, ALU는 FLC의 SIZE 비트에서 DC 계수를 먼저 형성하여야 한다. 그러나, 이 경우, 2의 보수값들이 예측기에 더해질 필요가 있다. 이것은 전과 같이 잘못된 부호로 먼저 부호 확장하는 것에 의해 형성될 수 있다. 이 결과가 음이면, 정확한 값을 형성하기 위해 1이 더해져야 한다. 물론, 이것은 가산기에 캐리(carry)를 잼하는(Jamming) 것에 의해 예측기와 동시에 더해 질 수 있다.
B.2.2.3 에러 처리
에러 처리는 설명할 가치가 있다. 검출되는 에러의 4개의 유효 소스,
* 테이블의 끝 런 오프(ran off)
* 토큰이 예상될 때의 직렬
* 직렬이 예상될 때의 토큰
* 블럭에 너무 많은 계수
가 있다.
이들중 첫 번째는 두가지 상황에서 발생한다. 비트 카운터가 16 (적합한 값은 0 내지 15)에 도착하면, 적합한 가장 긴 허프만 코드가 16비트이므로 에러가 발생한다. "인덱스"의 임의의 중간 값이 255를 넘으면, B.2.2.1.3에서 설명한 바와 같이 에러가 발생한다.
이들중 두 번째는 토큰이 예상될 때 직렬 데이타와 만날 때 발생한다. 세번째는 이것과 반대 조건일 때 발생한다.
블럭에 너무 많은 계수가 있으면 에러의 마지막 타입이 발생한다. 실제로, 이것은 인덱스 투 데이타 유닛에서 검출된다.
이들 조건중의 어느 것이 발생할 때, 허프만 에러 레지스터에서 이 에러가 발견되어 파서 상태 머신이 인터럽팅된다. 이것은 에러를 취급하고 복구에 필요한 커맨드를 발생하는 것은 파서 상태 머신의 책임이다.
인터럽트시 허프만은 파서 상태 머신과 협동하여 정확히 연산되도록한다.
허프만 디코더가 파서 상태 머신을 인터럽팅할 때, 파서 상태 머신의 출력에서 새로운 커맨드가 수용되기를 대기하는 것이 가능하다. 허프만 디코더는 파서 상태 머신을 인터럽팅시킨 후 두개의 전체 사이클 동안 이 커맨드를 수용하지 않는다.
이것은 파서 상태 머신이 이곳에 있었던 (이제 실행되지 않아도 되는) 커맨드를 제거하게 하고 적당한 것으로 치환시킨다. 이들 두 사이클 후, 허프만 디코더는 정상 동작을 재개하고 유효 커맨드가 있으면 커맨드를 수용한다. 그렇지 않으면, 파서 상태 머신이 유효 커맨드를 공급할 때까지 아무것도 하지 않는다.
이들 에러중의 임의의 것이 발생하면, "허프만 에러" 이벤트 비트가 세팅되고, 마스크 비트가 세팅되어 있는 경우, 블럭은 정지하고 마이크로프로세서 제어는 정상적인 방법으로 인터럽팅된다.
소정의 상황에서는 에러인 것처럼 보이는 것이 실제로는 에러가 아니기 때 문에 한 가지 귀찮은 문제가 발생한다. 이것이 발생하는 가장 중요한 곳은 매크로 블럭 어드레스를 판독할 때이다. MPEG, H.261 및 JPEG의 구문에서 토큰이 예상된 매크로블럭 어드레스 대신에 발생하는 것은 적합하다. 적합하게 이것이 발생하면, 허프만 에러 레지스터는 제로 (에러가 없음을 의미)로 로딩되지만 파서 상태 머신은 여전히 인터럽팅된다. 파서 상태 머신의 코드는 이 "에러 없음" 길황을 인식해서 이에 따라 응답해야 한다. 이 경우, "허프만 에러" 이벤트 비트는 송출되지 않고 블럭은 프로세싱을 정지시키지 않는다.
여러가지 상황을 다를 수 있다. 먼저, 이전의 직렬 비트없이 토큰이 즉시 발생한다. 이 경우, "직렬 예상된 에러인 때 토큰(token when serial expected error"이 발생한다. 그 대신 "에러 없음" 에러가 상기 기술한 방식으로 발생한다.
두 번째로 토큰은 다수의 직렬 비트에 붙어 있다. 이 경우, 결정이 이루어 진다. 토큰에 붙어 있는 모든 비트가 값 1을 가지는 경우, (H.261 및 MPEG에서는 코드화된 데이타가 반전되어 이들이 코드화된 데이타 화일에서 제로 비트인 것을 상기한다.), 에러가 발생하지 않는다. 그러나, 이들중 어느 것이 제로이면, 이들은 유효 스터핑 비트(valid stuffing bits)가 아니므로, 에러가 발생하고 "직렬 예상 한 때의 토큰(token when serial expected)" 에러가 발생한다.
세번째로, 토큰이 많은 비트에 붙어 있다. 이 경우, 동일한 결정이 이루어진다. 모든 16비트가 1이면, 이들은 패딩 비트로서 취급되고, "에러 없음" 에러가 발생한다. 이들중 어느 것이 제로이면, "허프만 테이블 런 오프(ran off)" 에러가 발생한다.
토큰이 발생할 것으로 기대되지 않는 또 다른 곳은 JPEG에 있다. 허프만 테이블 또는 양자화 테이블을 취급할 때, 동일한 마커 세그먼트에서 임의의 수의 테이블이 발생한다. 허프만 디코더는 그곳에 얼마나 많은 것이 있는 가를 알지 못한다. 이 사실 때문에, 각각의 테이블이 완료된 후, 새로운 테이블 번호로서 간주되는 다른 4비트 FLC를 판독한다. 그러나, 새로운 마커 세그먼트가 시작되면, 토큰을 4비트 FLC 대신에 마주친다. 이 구비 조건은 예상될 수 없으므, "에러 무시" 커맨드 비트가 더해진다.
B.2.2.4 허프만 커맨드
이것에는 허프만 디코더 블럭 및 이들의 정의를 제어하기 위해 파서 상태 머신에 의해 사용되는 비트가 있다. 인덱스 투 데이타 유닛 커맨드 비트도 이 테이블에 포함되어 있는 것에 주의한다. 마이크로프로그래머의 관점에서, 허프만 디코더 및 인덱스 투 데이타 유닛은 하나의 일관적인 논리 블럭으로서 동작한다.
테이블 B.2.2 허프만 디코더 커맨드
B.2.2.4.1 FLC 판독
이 모드에 있어서, lgnore Error, Download, Alutab, Token, First Coeff, Special 및 VLC는 모두 제로이다. Bypass는 인덱스 대 데이타 변환이 발생하지 않도록 세팅 된다.
Table[3:0]의 2진수는 얼마나 많은 비트가 판독되는 가를 나타낸다.
번호 0 내지 12는 적합하다. 값 제로는 (예상된 바와 같이) 제로 비트를 판독하고, 따라서 이 인스트럭션을 따라서 허프만 디코더 NOP 인스트럭션이다. 값13, 14 및 15는 작동하지 않고 값 15는 허프만 상태 머신이 판독될 FLC의 비트 수로서 "SSSS"의 사용을 나타내는 제어에 있을 때 사용된다.
B.2.2.4.2 VLC의 판독
이 모드에 있어서, Ignore Errors, Download, Alutab, Token, First Coefficient 및 Special는 제로이고, VLC는 1이다. Bypass는 인덱스에서 데이타로 변환이 일어나도록 일반적으로 제로로 된다.
이 모드 토큰에 있어서, First Coefficient 및 Special는 모두 제로이고 VLC는 1이다.
Table[3:0]의 2진수는 도시한 바와 같이 어느 테이블을 사용하는 가를 나타 낸다.
테이블 B.2.3 허프만 테이블
RAM (즉, JPEG 테이블)에 유지된 테이블의 경우에, 테이블 선택이 두번 발생하지 않도록 비트1이 사용되지 않는 것에 주의한다. 비-베이스라인(non-baseline) JPEG 디코더가 작성되면, 4개의 DC 테이블 및 4개의 AC 테이블이 있고 Table[1]이 요구된다.
Table[3]이 제로이면, 테이블이 H.261 유형의 테이블로서 정확히 판독되도 록 사용될 때 입력 데이타는 반전된다. Table[3:0]=0인 경우, 적당한 링 수정(ring modi ficat ion)이 적용된다.
B.2.2.4.3 NOP 인스트럭션
상기 기술한 바와 같이, 제로 비트의 FLC를 판독하는 동작은 무연산 인스트럭션으로서 사용된다. 입력 포트 (토큰 또는 직렬)에서 판독되는 데이타가 없어 허프만 디코더는 인스트럭션 워드와 함께 제로의 데이타 값을 출력한다.
B.2.2.4.4 Tcoefficient 제1 계수
H.261 및 MPEG TCoefficient 테이블은 이 블럭의 First Coefficient에 대해 사용되는 특별한 비-허프만 코드를 갖는다. 블럭의 처음에서 Tcoefficient를 디코딩하기 위해, First Coefficient 비트는 테이블 제로에 의해 VLC 인스트럭션과 함께 세팅된다. First Coefficient 비트의 많은 효과중의 하나는 이 코드를 디코딩되도록 인에이블하는 것이다.
정상 동작시, Tcoefficient VLC를 판독하기 위해 "간단한" 커맨드를 발행하 는 것이 일반적이지 않다는 것에 주의한다. 이것은 Special 비트를 세팅함으로써 제어가 허프만 디코더로 일반적으로 넘겨지기 때문이다.
B.2.2.4.5 토큰 워드의 판독
토큰 워드를 판독하기 위해, 토큰 비트를 1로 세팅해야 한다. Special 및 First Coefficient 비트를 제로로 해야 한다. 또한, Table(0) 비트가 정확히 작동하면 VLC 비트도 세팅되어야 한다.
이 모드에 있어서, 비트 Table[1] 및 Table[0]은 다음과 같이 토큰 판독의 동작을 수정하기 위해 사용된다.
Table[0] 및 Table[1]이 모두 제로이면, 토큰 전에 있는 직렬 데이타가 에러로 고려되어 이와 같이 신호된다.
Table[1]이 세팅되면, 모든 직렬 데이타는 토큰 워드와 만날 때까지 버려 진다. 이 직렬 데이타가 있는 것에 의해 에러가 발생하지 않는다.
Table[0]가 세팅되면, 패딩 비트가 버려진다. 패딩 비트의 극성을 알 필요가 있는 것은 물론이다. 이것은 VLC 데이타를 판독하는 것과 정확히 같은 방식으로 Table[3]에 의해 결정된다. Table[3]이 제로이면, 입력 데이타가 먼저 반전된 후 임의의 "1" 비트가 버려진다. Table[3] 비트에 따라 데이타를 반전하는 동작이 VLC 비트에 달려있으므로, 이 비트는 1로 세팅되어야 한다. 패딩 비트가 아닌 임의의 비트를 만나면 (즉, H.261 및 MPEG에서 "1" 비트), 에러가 제시된다.
이들 인스트럭션에 있어서는 하나의 토큰 워드만이 판독되는 것에 주의한다.확장 비트의 상태는 무시되고, 이 비트를 테스팅하고 이에 따라 동작하는 것은 디멀티플렉서의 책임이다. 다수의 워드를 판독하기 위한 인스트럭션도 제공된다.
특수 인스트럭션 절을 참조하기 바란다.
B.2.2.4.6 ALU 레지스터 지정 테이블
"Alutab" 비트가 세팅되면, ALU의 레지스터 파일 내의 레지스터를 사용하여 사용해야할 실제 테이블 번호를 결정할 수 있다. VLC 비트와 함께 커맨드로 공급된 테이블 번호는 어느 ALU 레지스터를 사용하는 가를 결정한다.
테이블 B.2.4 ALU 레지스터 선택
고정 길이 코드의 경우, 벡터를 디코딩하기 위해 정확한 수의 비트가 판독된다. r_size가 제로이면, NOP 인스트럭션으로 된다.
허프만 코드의 경우, 발생된 테이블 번호가 1로 세팅된 table[3]을 가지므 로, 최종 번호는 JPEG 테이블 중의 하나를 참조한다.
[B.2.2.4.7 특수 인스트럭션(special instruction)
이상 설명한 모든 인스트럭션 (또는 연산 모드)는 "간단한" 인스트럭션으로서 고려된다. 수신되는 각각의 커맨드에 대하여, (직력 또는 토큰 데이타에 관한) 적당한 양의 입력 데이타가 판독되고 최종 데이타가 출력된다. 에러가 검출되지 않으면, 커맨드당 정확히 하나의 출력이 발생된다.
본 발명에 있어서, 특수 인스트럭션은 하나 이상의 출력 워드가 하나의 커맨드에 대해 발생될 수 있다는 특징을 갖는다. 이 기능을 실행하기 위해, 허프만 디코더의 내부 상태 머신은 제어를 취하고 파서가 요청한 인스트럭션이 완료하였다고 결정할 때까지 필요한 대로 자신의 인스트럭션을 발생한다.
모든 특수 인스트럭션에 있어서, 실행될 시퀀스의 제1 실제 인스트럭션은 1로 세팅된 특수 비트로 발행된다. 이것은 모든 시퀀스가 유일한 제1 인스트럭션을 가져야 하는 것을 의미한다. 이 방법의 효과는 시퀀스의 실제의 제1 인스트럭션이 파서로부터 수신된 커맨드에 따라 검색 동작을 필요로 하지 않고 사용 가능하다는 것이다.
인식된 4개의 특수 인스트럭션, 즉
* TCoefficient
* JPEG DC
* JPEG AC
* Token
이 있다.
이들중 첫 번째는 블럭끝 기호가 판독될 때까지 H.261 및 MPEG 전송 계수 등을 판독한다. 이 블럭이 비-인트라 블럭(non-intra block)이면, 이 커맨드는 전체 블럭을 판독한다. 이 경우, "First Coefficient" 비트는 First Coefficient 트릭(trick)이 인가되도록 세팅되어야 한다. 이 블럭이 내부(intra) 블럭이면, DC항이 이미 판독되었고 "First Coefficient" 비트는 제로로 해야 한다.
H.261에서 내부 블럭의 경우, DC항은 8비트 FLC값을 판독하도록 "간단한" 인스트럭션을 사용하여 판독된다. MPEG에 있어서는 다음에 기술하는 "JPEG DC" 특수 인스트럭션을 사용한다.
"JPEG DC" 커맨드는 JPEG 유형의 DC항 (VLC에 의해 지시된 SSSS 비트 FLC를 포함)을 판독하도록 사용된다. First Coefficient 비트는 인데스 데이타 유닛의 카운터 (계수의 수를 카운팅)가 리셋되도록 세팅된다.
"JPEG AC" 커맨드는 나머지 블럭을 판독하도록 사용된다. 토큰 워드는 확장 비트가 클리어될 때까지 판독된다. 이것은 인식되지 않은 토큰을 취급하는 편리한 방법이다.
B.2.2.4.8 테이블의 다운로딩
본 발명에 있어서, 허프만 디코더 테이블 "Download" 비트를 사용하여 다운로딩될 수 있다. 첫 번째 단계는 어느 테이블을 다운로딩하는 가를 지정하는 것이다. 이것은 다운로딩 및 First Coeff 비트 세트로 FLC를 판독하도록 커맨드를 발행하는 것에 의해 실행된다. 이것은 비트가 실제 판독되지 않도록 NOP로서 취급되지만, 테이블 번호는 레지스터에 저장되고 다음 다운로딩에서 어느 테이블이 로딩되는 가를 식별하도록 사용된다.
테이블 B.2.5 JPEG 테이블
위에 도시한 테이블과 같이, AC 또는 DC 테이블 중의 어느 것도 로딩될 수 있고, Table(3)은 이것이 (자신의 허프만 디코더에서) 코드-당-비트 테이블 (codes-per-bit table)인가 또는 로딩되는 인덱스 투 데이타 테이블인가를 결정한다.
테이블이 일단 지정되면, 세팅된 다운로드 비트 (및 제로인 First Coeff 비 트)로 필요한 수의 FLC (항상 8비트)를 판독하기 위한 커맨드를 발생하는 것에 의해 데이타는 이 테이블로 다운로딩된다. 이것은 디코딩된 데이타가 지정된 테이블에 기록되도록 한다. 어드레스 카운터는 유지되며, 이 데이타는 현재 어드레스에 기록되고, 어드레스 카운터가 증가된다.
인덱스 투 데이타 (Index to Data) 테이블을 다운로딩할 때, 데이타 및 어드레스가 감시된다. 어드레스가 허프만 인덱스 번호이고 이 어드레스에 로딩된 데이타가 최종적으로 디코딩된 기호인 것에 주의한다. 이 정보는 대상 기호의 허프만 인덱스 번호를 유지하는 레지스터를 자동적으로 로딩하기 위해 사용된다. 따라서, JPEG AC 테이블에서, 데이타가 인식되는 ZRL에 대응하는 값을 가질 때, 현재 어드레스는 테이블 번호가 지시하는 대로 레지스터 CED_H_KEY_ZRL_INDEXO 또는 CED_H_KEY_ZRL_INDEXI에 기록된다.
디코딩된 데이타가 디코딩된 후에 하나의 단계 (one phase)에서 코드 당 비트 테이블에 기록되므로, 이 단계에서 테이블로부터 데이타를 판독하는 것은 불가능하다. 따라서, 테이블 다운로드 인스트럭션 직후 발행되는 VLC를 판독하려고 하는 인스트럭션은 실패한다. 임의의 실제 응용 (즉, JPEG 실행시)에 있어서 이러한 시퀀스가 왜 발생하는 가의 이유는 없다. 그러나, 이것을 실행하는 시뮬레이션 테스트를 만드는 것은 가능하다.
B.2.2.5 허프만 상태 머신
본 발명에 따른 허프만 상태 머신은 임의의 경우에 내부에서 발생되는 허프만 디코더 커맨드를 제공하도록 동작한다. 내부 상태 머신에 의해 발생될 수 있는 모든 커맨ㄷ는 디멀티플렉서에 의해 허프만 디코더로 제공될 수 있다.
이 상태 머신의 기본 구조는 다음과 같다. 커맨드가 허프만 디코더로 발행될 때, 이것은 나중에 재사용될 수 있도록 일련의 보조 래치(latches)에 저장된다. 커맨드는 허프만 디코더에 의해 실행되고 허프만 상태 머신에 의해 분석된다. 커맨드가 이미 알려진 인스트럭션 시퀀스의 첫 번째로 인식되고 SPECIAL 비트가 세팅되면, 허프만 디코더 상태 머신은 파서 상태 머신으로부터 허프만 디코더의 제어를 넘겨받는다.
이 점에 있어서, 허프만 디코더에 대한 인스트럭션의 3개의 소스
1) 파서 상태 머신-이 선택은 특수 인스트션의 완료되었을 때 이루어지며 (예를 들면, EOB가 디코딩되었을 때) 다음 디멀티플렉서 커맨드가 수용된다.
2) 허프만 상태 머신, 허프만 상태 머신은 자신에게 임의의 커맨드 공급할 수 있다.
3) 인스트럭션을 개시하도록 파서 상태 머신에 발행된 한개의 인스트럭션이 있다.
2)의 경우, 인덱스 투 데이타 유닛으로부터의 피드백에 의해 테이블 번호를 제공하는 것이 가능하고, 그 후 이것은 허프만 상태 머신 ROM의 필드를 치환한다.
1)의 경우, 임의의 상황에서는 테이블 번호가 ALU 레지스터 화일로부터 얻어진 값에 의해 제공된다 (예를 들면, AC 및 DC 테이블 번호 및 F-번호의 경우). 이들 값은 보조 커맨드 기억 장치에 저장되므로, 이 커맨드가 나중에 재사용될 때 테이블 번호는 저장되었던 그것이다. 일반적으로 카운터가 다음 블럭을 참조하도록 앞서게 되므로 ALU로 부터 다시 복원되지는 않는다.
사용될 다음 인스트럭션의 선택이 디코딩 중인 데이타에 의존하므로, 사이클에서 매우 늦게 결정이 이루어질 필요가 있다. 따라서, 일반적인 구조는 모든 가능한 인스트럭션이 병렬로 준비되고, 사이클에서 나중의 멀티플렉싱이 실제 인스트럭션을 결정하는 것이다.
각각의 경우에 있어서, 다음 사이클에서 허프만 디코더에 의해 사용되는 인 스트럭션을 결정하는 것에 부가하여, 상태 머신 ROM은 인덱스 투 데이타 유닛을 통과하여 ALU로 전달될 때 현재 데이타에 부착되는 인스트럭션을 결정한다. 정확히 동일한 방식으로, 이들 인스트럭션의 모든 것은 병렬로 준비된 후 선택이 사이클에서 늦게 이루어진다.
또한, 상기 다음 허프만 디코더 인스트럭션의 3가지 선택에 대응하는 인스트 럭션의 이 부분에 대한 3가지 선택
1) 블럭의 끝에 적합한 상수 인스트럭션
2) 허프만 상태 머신. 허프만 상태 머신은 인덱스 투 데이타 유닛에 임의의 인스트럭션을 제공한다.
3) 인스트럭션을 개시하기 위해 파서에 의해 발생되었던 원래 인스트럭션이 있다.
B.2.2.5.1 EOB 비교기
EOB 비교기의 출력은 본래 상수 인스트럭션(constant instruction)의 선택이 인덱스 투 데이타 유닛에 제공되게 하고, 다음 허프만 인스트럭션이 파서로부터의 다음 인스트럭션으로 되게 한다. 비교기의 정확한 기능은 허프만 상태 머신 ROM내의 비트에 의해 제어된다.
EOB 비교기 뒤에는 AC 및 DC JPEG 테이블의 EOB 기호의 인덱스를 유지하는 4개의 레지스터가 있다. DC 테이블의 경우에는 End-of-Block 기호가 물론 없지만 제로-크기(zero-size) 기호는 있으며, 이것은 제로인 DC 차이에 의해 발생된다.
이것이 FLC의 제로 비트가 EOB 기호와 정확히 동일한 방식으로 판독되게 하므로, 이들은 동일하게 취급된다.
레지스터에 유지된 4개의 인덱스 값에 부가하여, 상수 값 1을 사용할 수도 있다. 이것은 H.261 및 MPEG의 EOB 기호의 인덱스 번호이다.
B.2.2.5.2 ZRL 비교기
본 발명에 있어서, 이것은 더욱 범용의 비교기이다. 이것은 허프만 상태 머신 인스트럭션 또는 I 내지 D에 의해 사용되는 본래의 인스트럭션중의 하나를 선택하게 한다.
ZRL 비교기 뒤에는 4 개의 값이 있다. 두개는 레지스터에 있고 AC 테이블에 ZRL 코드의 인덱스를 유지한다. 다른 두개의 값은 상수로서, 하나는 값 제로이고 다른 하나는 12 (MPEG 및 H.261의 ESCAPE의 인덱스)이다.
상수 제로는 FLC의 경우에 사용된다. 상수 12는 테이블 번호가 8 (및 VLC) 보다 작을 때마다 사용된다. 두 개의 레지스터중의 하나는 테이블 번호의 하위 비트에 의해 결정할 때 테이블 번호가 7 (및 VLC)보다 크면 사용된다.
상태 머신 ROM 내의 비트는 비교기를 인에이블하도록 제공되고 다른 것은 그 동작을 반전하도록 제공된다.
인스트럭션 내의 TOKEN 비트가 세팅되면, 비교기 출력은 무시되고 확장 비트로 대신 치환된다. 이것은 토큰의 끝(end of token)까지의 동작을 허용한다.
B.2.2.5.3 허프만 상태 머신 ROM
허프만 상태 머신 내의 인스트럭션 필드는 다음과 같다.
nxtstate[4:0]
다음 사이클에서 사용되는 어드레스. 이 어드레스는 변경될 수 있다.
statectl
다음 상태 어드레스의 변경을 허용함. 영인 경우, 상태 머신 어드레스는 변경되지 않고, 그렇지 않으면, 어드레스의 LSB는 다음과 같이 두 개의 비교기중 어느한 값으로 치환됨.
주: 어떠한 경우에도, 다음 허프만 인스트럭션이 "재실행(re-run) 초기의 커맨드로서 선택되면, 상태 머신은 이 커맨드에 대해 적당한 장소 0,1,2 또는 3으로 점프한다.
eobct[1:0]
이것은 아래과 같이 extn 비트 및 EOB 비교기에 따라 다음 허프만 인스트럭션의 선택을 제어한다.
zrlct (1:0)
이것은 ZRL 비교기에 따라 다음 허프만 인스트럭션의 선택을 제어한다. 조건이 충족되면, 상태 머신 인스트럭션을 취하고, 그렇지않으면, 초기의 인스트럭션을 재실행한다. 어떠한 경우에도, eobctk*+ 조건이 디멀티플렉서 인스트럭션을 취하면, 이 (eobctl*+)는 다음과 같이 우선 순위를 취한다.
smtab[3:0]
본 발명에 있어서, 선택된 인스트럭션이 상태 머신 인스트럭션이면 이것은 허프만 디코더에 의해 사용되는 테이블 번호이다. 그러나, ZRL 비교기가 정합하면, zrltab(3:0) 필드가 우선적으로 사용된다.
다른 테이블 번호가 ZRL 일치가 발생하는 가에 의존하여 사용될 필요가 없으면, smtab[3:0] 및 zrltab[3:0]은 모두 동일한 값을 갖는다. 그러나, 이것은 Lslm에서 이상한 시뮬레이션 문제를 일으킬 수 있는 것에 주의한다. MPEG의 경우, ZRL(JPEG 전용 컨피그레이션)의 허프만 인덱스 번호를 나타내는 레지스터를 로딩하는 명확한 필요 조건이 없다. 그러나, ZRL 비교기가 알려지지 않을 수 있는 모든 경우에 (따라서 어느 것이 선택되는 가에 관계 없음) smtab[3:0] 및 zrltab[3:0]가 동일한 값을 가진다는 사실에 불구하고, 이들이 여전히 선택되고 ZRL 비교기의 출력이, "알려지지 않은"으로 되어, 다음 상태도 여전히 "알려지지 않은"으로 된다.
zrltab[3:0]
이것은 선택된 인스트럭션이 상태 머신 인스트럭션이면 허프만 디코더에 의해 사용되는 테이블 번호이다. 그러나, ZRL 비교기가 정합하면, zrltab[3:0] 필드가 우선적으로 사용된다.
ZRL 정합이 발생하는지에 따라 상이한 테이블 번호를 사용하는 것이 필요하지 않으면, smtab[3;0] 및 zrltab[3:0]은 동일한 레벨을 갖는다. 그러나, 이것이 Lsim에서 비정상적인 시뮬레이션 문제를 일으킬 수 있는 것에 주의한다. MPEG의 경우, ZRL의 허프만 인덱스 번호 (JPEG 전용 컨피그레이션)를 나타내는 레지스터를 로딩하는 명백한 조건은 없다. 그러나, ZRL 비교기가 "알려지지 않은"으로 될 수 있는 모든 경우에 (따라서 어느 것이 선택되는 가에 관계없음) smtab[3;0] 및 zrltab[3;0]가 동일한 레벨을 갖는다는 사실에도 불구하고 이들이 여전히 선택되고 ZRL 비교기가 "알려지지 않은"으로 되어 다음 상태도 "알려지지 않은"으로 된다.
zrltab[3:0]
선택된 인스트럭션이 상태 머신 인스트럭션이고 ZRL 비교기가 정합하는 경우, 이것은 허프만 디코더에 의해 사용되는 테이블 번호이다.
smvlc
이것은 선택된 인스트럭션이 상태 머신 인스트럭션인 경우, 허프만 디코더에 의해 사용되는 VLD 비트이다.
aluzr1[1 :0]
이 필드는 ALU를 통과하는 인스트럭션의 선택을 제어한다. 이것은 파서 상태 머신으로부터의 커맨드 (인스트럭션 시퀀스의 개시에서 저장됨) 또는 상태 머신으로부터의 커맨드 중의 하나이다.
alueob
이 선은 EOB 비교기에 따라 ALU로 전달되는 인스트럭션의 변경을 제어한다. 이것은 ALU의 출력 모드를 단순히 "zinput"으로 한다. 이것은 임의의 선택이고, "none"이 아닌 임의의 출력 모드는 충분하다. 이것은 블럭끝 커맨드 워드가 DATA 토큰의 적당한 포맷팅을 제어하는 토큰 포맷터 블럭으로 통과하는 것을 보장한다.
나머지 필드는 ALU 인스트럭션 필드이다. 이들은 ALU 설명에 적당히 도큐먼트된다.
B.2.2.5.4 허프만 상태 머신 변경
상태 머신의 하나의 실시예에서, 인덱스 투 데이타 유닛은 확장-코드화(escape-coded) Tcoefficient의 실행(RUN)부가 인덱스 투 데이타 유닛으로 통과하고 있을 때를 "식별할(know)" 필요가 있다. 이것이 제어 ROM 내의 적당한 비트를 사용하여 실행될 수 있는 반면, ROM 변경을 피하기 위해서, 다른 선택적인 접근이 사용된다. 이것에 관하여, ROM으로 가는 어드레스가 감시되고 어드레스 값 5가 검출된다. 이것은 RUN필드를 다루는 ROM 내에 지정된 적당한 장소이다. 물론, 다른 선택된 어드레스 값을 사용하도록 ROM을 프로그램할 수 있는 것은 자명하다.
또한, 제어 ROM 내의 비트를 사용하는 상술한 접근이 사용될 수 있다.
B.2.2.6 배선 안내
본 발명에 있어서, 허프만 디코더은 "hd"라고 한다. 논리적으로 "hd"는 인덱스 투 데이타 유닛을 실제로 구비한다. (이것은 컴화일된 코드 발생의 제한에 의해 필요하다). 따라서, "hd"는 다음의 주요 블럭을 포함한다.
테이블 B.2.6 허프만 모듈
허프만 모듈에 대한 다음의 설명은 당해 기술 분야에서 통상의 지식을 가진자에 의해 용이하게 이해되는 첨부 도면에 상세히 도시된 여러가지 서브시스템 영역의 광범위한 설명을 수반한다.
B.2.2.6.1 "hd"의 설명
2선식 인터페이스 제어에 대한 논리는 2선식 인터페이스에 의해 제어되는 3개의 포트, 즉 데이타 입력, 데이타 출력 및 커맨드를 일반적으로 포함한다. 또한, 입력 쉬프터로부터는 두 개의 "유효" 와이어, 즉 in_data[7:0]으로 공급되는 토큰을 나타내는 token_valid 및 데이타가 직렬로 공급되는 것을 나타내는 serial_valid가 있다.
발생되는 신호중 가장 중요한 신호는 래치로 가는 인에이블(enable) 신호이 다. 가장 중요한 것은 ph1 래치에 대한 인에이블인 e1이다. 대부분의 Ph0 래치는 인에이블되지 않는 반면, 두 개의 인에이블은 직렬 데이타에 관련된 e0 및 토큰 데이타에 관련된 e0t인 것들에 제공된다.
본 발명에 있어서, "done" 신호 (done, notdone 및 이들의 rh0 변수 done0및 notdone0)는 원시 허프만 코드가 완료되는 때를 나타낸다. 허프만 상태 머신 커맨드가 실행되는 경우, "done"는 전체 상태 머신 커맨드를 포함하는 각각의 원시 커맨드의 완료에 있어 구동된다(asserted). 신호 notnew는 전체 허프만 상태 머신 커맨드가 완료될 때까지 파서 상태 머신으로부터의 새로운 커맨드 수용을 방지한다.
인덱스 투 데이타 유닛으로부터 수신된 정보의 제어에 대하여, "크기(size)"필드에 대한 제어 논리는 JPEG 계수 디코딩시 허프만 디코더로 피드백된다. 이것은 두가지 방식으로 실제 발생할 수 있다. 크기가 정확히 1이면, 이것은 전용 신호 notfbone0상에서 피드백된다. 그렇지 않으면, 크기는 인덱스 투 데이타 유닛의 출력 (out_data[3:0])으로부터 피드백되고 신호 fbvalidl은 이것이 일어나고 있는 것을 나타낸다. 신호 멀티플렉서 크기(muxsize)는 커맨드 레지스터로의 피드백 데이타의 멀티플렉싱을 제어하기 위해 발생된다.
또한, 정확히 64계수가 디코딩되는 피드백이 있다. JPEG에서 EOB가 이 상황에서 코드화되지 않으므로, 신호 forceeob이 발생된다. 이와 유사하게, 상기 기술한 바와 같이 size를 피드백시키는 신호에 의해, 이것이 실행되는 두가지 방식이 실제로 있다. jpegeob가 사용되거나 (phl 신호) 또는 jpegeobo가 사용된다. 정상 피드백이 이루어진 경우 (jpegeob), 데이타가 피드백되어 새로운 파서 상태 머신 커맨드가 수용될 때까지 클리어되지 않을 때만 래치 i_971이 로딩되는 것에 주의한다. 신호 forceeob는 허프만 코드가 디코딩될 때가지 실제 발생되지 않는다. 따라서, 고정 길이 코드 (즉, 크기 비트)는 영향을 받지 않지만, 다음 허프만 코드화된 정보는 블럭의 강제 끝(forced end of block)에 의해 치환된다. 크기가 1이고 jpegeobo가 사용되는 경우, 하나의 비트만이 판독되므로, i_1255 및 i_1256은 정확한 시간만큼 신호를 지연시킨다. 제로 크기를 가진 기호가 EOB 및 ZRL뿐이므로 이상황에서 제로의 크기가 발생하는 것이 불가능하다는 것에 주의한다.
디코딩은 tcoeff_tatoO (Tcoeff 테이블을 사용하는 허프만 디코딩), mba_tabo(MBA 테이블을 사용하는 허프만 디코딩) 및 nop(무연산)을 발생하기 위한 커맨드의 상당히 랜덤한 디코딩이다. nop발생에는 여러가지 이유가 있다. 크기 영의 고정 길이 코드가 첫번째이고, forceeob 신호가 두 번째이며 (신호 EOB에 대하여 출력이 발생되더라도 입력 쉬프터로부터 데이타가 판독되지 않기 때문), 마지막으로 테이블 다운로드 지정이 세 번째이다.
notfrczero (크기 제로의 FLC에 의해 발생됨, NOP)는 NOP 인스트럭션이 사용될 때 결과가 제로로 되는 것을 보장한다. 또한, invert는 직렬 비트가 허프만 디코딩후 반전되어야 할 때를 나타내고 (B.2.2.11절 참조), ring은 전송 계수 링(ring)이 인가되어야 할 때를 나타낸다 (B.2.2.1.2절 참조).
디코딩은 코드 당 비트 ROM 어드레싱에 관하여 실행된다. 이들은 작은 데이타 경로 ROM으로부터 구성된다. 신호는 ROM을 두개의 부분으로 분리하는 것에 의해 충분한 구동을 얻도록 순수하게 복제된다 (예를 들면, csha 및 cola). 어드레스는 비트 카운터 (비트[3:0])로부터 또는 마이크로프로세서 인터페이스 어드레스(key-addr[3:0])로부터 선택되는 블럭에 대한 UPI 액세스에 따라 취해질 수 있다.
JPEG 테이블에 대한 허프만 인덱스 값 (EDB, ZRL 등)을 유지하는 것과 같은 레지스터의 HPI 구동에 관련하여 또 다른 디코딩이 있다. 또한 이들 레지스터에 대한 3상 구동기 제어 및 코드 당 비트 RAM의 UPI 판독도 있다.
산술 데이타 경로 디코딩도 임의의 중요한 비트 번호에 대하여 제공된다.
first_bit는 Tcoeff 첫번째 계수 트릭에 관하여 사용되고 bit_five는 Tcoeff 테이블에 링(ring)을 인가하는 것에 관련되어 있다. EOB 비교기가 디코딩된 인덱스 값에 정합하는 동작을 시뮬레이션하기 위한 forceeob의 사용에 주목할 필요가 있다.
확장(extn) 비트에 대하여, 토큰이 입력 쉬프터로부터 판독되면, 관련된 확장 비트는 이것과 함께 판독된다. 그렇지 않으면, 확장(extn)의 마지막 간이 보존된다. 이것은 토큰이 판독된 후 언제라도 마이크로코드 프로그램에 의해 확장 비트의 테스트를 허용한다.
zerodat가 구동될 때, 허프만 출력 데이타의 상위 4비트는 영으로 된다. 고정 길이 코드 디코딩시 이들이 유효 값만을 가지므로, 이들은 VLC 디코딩시 영으로 되거나 또는 임의의 이유로 인해 NOP 인스트럭션이 실행될 때 토큰으로 된다.
또 다른 회로는 각각의 커맨드가 완료되어 "done" 신호를 발생할 때를 검출한다. 본래, "done"에 대해서는 두 가지 그룹의 이유, 즉 정상적인 이유와 예외적인 이유가 있다. 이들은 두개의 3방향 멀티플렉서중의 하나에 의해 각각 취급된다.
하부 멀티플렉서 (i_1275)는 정상적인 이유를 취급한다. FLC의 경우, 신호 ndnflc가 사용된다. 이것은 비트 카운터와 테이블 번호를 비교하는 비교기의 출력이다. VLC의 경우, 신호 ndnvlc가 사용된다. 이것은 산술 데이타 경로로부터의 출력으로서 식 (9)를 직접 반영한다. NOP 인스트럭션 또는 토큰의 경우, 하나의 사이클만이 필요하므로, 시스템은 무조건적으로 "실행된다".
본 발명에 있어서, 상위 멀티플렉서 (i_1274)는 예외의 경우를 취급한다.
디코더가 JPEG 디코딩에 있어서 피드백되어야할 크기 (fbexpctdo)를 기다리고 있고 그 크기가 1인 경우 (notfboneo), 하나의 비트만이 필요하므로 디코더가 실행된다.
디코더가 Tcoeff 테이블을 사용하여 첫 번째 계수의 첫 번째 비트를 실행하면, 현재 인덱스의 비트 제로가 영인 경우 실행된다 (B.2.2.1.2절 참조). 이들 조건 중의 어느 것도 맞지 않으면, 실행되는 예외의 이유는 없다.
NOR 게이트 (i_1293)는 "done" 조건을 최종적으로 푼다. i-570에 의해 발생된 조건 (즉, 데이타가 유효하지 않음)은 "done'을 실시한다. 이것은 다소 이상하게 보일 수도 있다. 이것은 첫번째 커맨드 준비에 있어서 머신을 자신의 "done" 상태로하도록 리셋한 직후 1차적으로 사용된다 ("done"은 모든 카운터, 레지스터 등을 리셋한다). 임의의 에러 조건도 "done"을 강제하는 것에 주의한다.
신호 notdonex는 에러 검출에 있어 사용될 필요가 있다. 정상적인 "done"신호는 검출에 있어 에러 "done"이 어떻게든 실행되므로 사용될 수 없다. "done"의 사용은 조합적인 피드백 루프를 부여한다.
에러 검출 및 처리는 모든 가능한 에러 조건을 검출하는 회로에 의해 실행된다. 이들은 i_1190에서 함께 OR된다(ORed). 이 경우, i_1193, i_585 및 1_584는 3비트 허프만 에러 레지스터를 구성한다. "실제" 에러가 없는 경우에 에러를 디스에이블하는 i_1253 및 i_1254에 주의한다. (B.2.2.3절 참조).
또한, i_580 및 i-579는 관련된 회로와 함깨 에러가 검출된 후 첫 번째 커맨드의 수용을 제어하는 단순한 상태 머신을 제공한다.
앞서 지적한 바와 같이, 제어 신호는 인덱스 투 데이타 유닛 및 ALU에서의 파이프라인 지연에 맞도록 지연된다.
Itod_bypass는 인덱스 투 데이타 유닛으로 통과한 실제 바이패스 신호이다.
이것은 허프만 상태 머신이 고정 길이 코드를 디코딩할 때마다 제어를 바이패스시킬때 변경 된다.
Aluinstr(32)는 ALU가 파서 상태 머신으로 피드백되게 하는 비트이다 (조건 코드). 또한, 허프만 상태 머신은 신호가 (원시 커맨드 중의 하나가 완료할 때마다라기 보다는) 한번만 구동되는(asserted) 제어에 있을 때 중요하다.
또한, 이들 비트는 토큰 포맷터에 데이타를 출력하는 ALU 인스트럭션에 대해 구동되어야만 한다. 그렇지 않으면, 카운터가 토큰 포맷터로의 첫 번째 출력전에 증분되어 DATA 토큰에 부정확한 "co" 값을 발생시킬 수 있다.
본 발명에 관하여 도시된 실시예에 있어서, alunode[1] 또는 alunode(0)는 ALU가 토큰 포맷터로 출력하면 로우로 된다.
제118도는 제27도와 마찬가지로, "hdstdp"라고 하는 허프만 상태 머신 데이타 경로를 도시하고 있다. 또한, 이 도면에는 허프만 상태 머신 ROM의 출력을 판독하는 UPI 디코드도 있다.
멀티플렉싱은 테이블 번호가 ALU 레지스터 화일 장소에 의해 지정되는 경우를 다루기 위해 제공된 것이다 (B.2.2.4.6절 참조).
aluinstr[3:2]의 변경은 ALU outsrc 인스트럭션 필드를 non-none로 하는 것을 다룬다 (alueob의 설명 B.2.2.5.3절 참조).
허프만 디코더 블럭(x)에 대한 커맨드 레지스터에 대하여, 커맨드의 각각의 비트는 커맨드의 가능한 소스 사이에서 선택을 실행하는 멀티플렉서에 연관된다.
4개의 제어 신호, 즉 레지스터가 자신의 현재 상태를 유지하게 하는 selhold, 파서 상태 머신으로부터 새로운 커맨드가 로딩되게 하는 selnew -또한, 이것은 나중에 사용되도록 원래의 파서 상태 머신 커맨드를 유지하는 레지스터의 로딩을 인에이블함-초기의 파서 상태 머신 커맨드를 유지하는 레지스터로부터의 커맨드의 로딩을 야기하는 selold, 및 허프만 상태 머신 ROM으로부터의 커맨드의 로딩을 야기하는 selsm는 선택을 제어한다.
테이블 번호의 경우, 테이블 번호도 인덱스 투 데이타 유닛의 출력 데이타 (selholdt 및 muxsize)로부터 로딩될 수 있으므로 상황이 약간 복잡해 질 수 있다.
래치는 허프만 상태 머신 ROM에 현재 어드레스를 유지한다. 논리는 가능한 4개의 커맨드 중의 어느 것이 실행되고 있는 가를 검출한다. 이들 신호는 새로운 커맨드인 경우에 결합되어 시작 어드레스의 하위 2비트를 형성한다.
논리는 상태 머신 ROM의 출력이 쓸모없게 될 때를 검출한다. (일반적으로 이 커맨드는 "간단한" 커맨드이기 때문). 신호 notignorerom은 상태 머신의 동작을 효과적으로 디스에이블, 특히 ALU를 통과한 인스트럭션의 임의의 변경을 디스에이블한다.
fixstate0를 발생하는 회로는 이 상태 머신의 제한된 점핑력(jumping capability)을 제어한다.
디코딩은 허프만 상태 머신 ROM으로의 신호 구동을 위해 제공된다. 이것은 데이타 경로 유형의 조합-ROM이다.
escape_run의 발생은 B.2.2.5.4절에 설명되어 있다.
디코딩은 ZRL 및 EOB 등의 기호에 대한 허프만 인덱스 번호를 유지하는 레지스터에 대해 제공된다. 이들 레지스터는 UPI 또는 데이타 경로로부터 로딩될 수 있다. 중심 (es[4:0] 및 zs[3:0])에서의 디코딩은 디코딩된 허프만 인덱스에 대하여 비교하기 위해 어느 레지스터 또는 상수 값을 선택하는 멀티플렉서에 대한 선택 신호를 발생하는 것이다.
허프만 상태 머신의 제어 논리에 대하여, 허프만 상태 머신 ROM으로부터의 "인스트럭션" 비트는 여러가지 조건과 결합되어 다음에 무엇을 하고 ALU에 대해 인스트럭션 워드를 어떻게 변경하는 가를 결정한다.
본 발명에 있어서, 신호 notnew, notsm 및 notlod는 허프만 디코더 커맨드 레지스터의 동작 제어를 위해 시트(sheet) 10에서 사용된다. 이들은 상태 머신 ROM (B.2.2.5.3절에서 설명함)에서 제어 비트로부터 명백한 방식으로 허프만 인덱스 비교기의 출력 (neobmatch 및 nzrlmatch)과 함께 발생된다.
선택은 ALU로 통과한 인스트럭션을 위한 소스에 대하여 실행된다. 실제의 멀티플렉싱은 허프만 상태 머신 데이타 경로 "hfstdp"에서 실행된다. 4개의 제어 신호가 발생된다.
블럭의 끝이 마주치지 않은 경우, aluseldmx (파서 상태 머신 인스트럭션 선택) 또는 aluselsm (허프만 상태 머신 인스트럭션 선택)중의 하나가 발생된다.
블럭의 끝이 마주치지 않은 경우, aluseleobd (파서 상태 머신 인스트럭션 선택) 또는 aluseleobs (허프만 상태 머신 인스트럭션 선택)중의 하나가 발생된다.
또한 ALU 인스트럭션의 "outsrc" 필드가 "zinput"로 되도록 변경된다.
레지스터는 테이블 다운로딩시 지정된 테이블 번호를 유지한다. 디코딩은 코드 당 비트 RAM에 대하여 제공된다. 다른 디코딩은 EOB 및 ZRL과 같은 기호가 다운로딩되는 때를 인식하여, 허프만 인덱스 번호 레지스터가 자동적으로 로딩될 수 있도록한다.
비트 카운터에 대하여, FLC 판독시 비교기는 정확한 비트수가 판독되는 때를 검출한다.
B.2.2.6.2 "hddp"의 설명
비교기는 허프만 인덱스의 지정값을 검출한다. 레지스터는 다운로딩 가능한 테이블에 대한 값을 유지한다. 멀티플렉서 (mob[7:0] 및 mzr[7:0])는 비교기를 구성하는 사용되는 값, 배타적 논리합(OR) 게이트, 비교기를 선택한다.
가산기 및 레지스터는 B.2.2.1절에서 설명한 식을 직접 계산한다. 여기서 또 다른 설명은 필요하지 않다. 배타적 논리합이 B.2.2.1.1절에서 설명한 데이타(i_807)을 반전하기 위해 사용된다.
"코드(code)" 레지스터는 12비트 폭이다. 멀티플렉싱 배열은 B.2.2.1.2절에 서 설명한 "링(ring)"을 대신하는 구조이다.
"hdstdel"도 매우 간단하여 ROM 및 멀티플렉서에 의해 취급되어 ALU 인스트럭션을 변경한다. 나머지 회로는 허프만 상태 머신 ROM 출력의 절반으로의 UPI 판독 액세스에 관한 것이다. 또한, 제어 신호에 대해 버퍼도 사용된다.
B.2.3 토큰 포맷터
본 발명에 따른 허프만 디코더 토큰 포맷터는 허프만 블럭의 끝에 있다. 이기능은 자신의 이름에서 제시된 바와 같이, 허프만 디코더로부터의 디코더를 적당한 토큰 구조로 포맷하는 것이다. 입력 데이타는 마이크로인스트럭션 워드 커맨드필드 내의 데이타와 멀티플렉싱된다. 이 블럭은 두 개의 동작 모드, 즉 DATA_WORD 및 DATA_TOKEN을 갖는다.
B.2.3.1 마이크로인스트럭션 워드
테이블 B.2.7 7개 필드를 구성하는 마이크로인스트럭션 워드
마이크로인스트럭션 워드는 데이타 워드와 동일한 수용에 의해 좌우된다.
B.2.3.2 연산 모드
테이블 B.2.8 비트 할당
B.2.3.2.1 데이타 워드
이 모드에 있어서, 입력의 상위 8비트는 출력으로 공급된다. 하위 8비트는 마스크 필드에 따라, 입력의 하위 8비트, 마이크로인스트럭션 워드의 토큰 필드 또는 이들의 결함중의 하나이다. 마스크는 mix 내의 입력 비트 수, 즉
out_data[16:8]=in_data[16:8]
out_data[7:0]=(Token[7:0]&(ff<<mask))indata[7:0]
를 나타낸다.
마스크가 0x8 또는 보다 크게 세팅될 때, 출력 데이타는 입력 데이타와 동일하게 된다. 이 모드는 비-DATA(non-DATA) 토큰으로 워드를 출력하기 위해 사용된다. 마스크를 0으로 세팅하면, out_data[7:0]은 마이크로인스트럭션 워드의 토큰 필드로 된다. 이 모드는 데이타를 포함하지 않는 토큰 헤더를 출력하기 위해 사용된다. 토큰 헤더가 임의의 데이타를 포함할 때, 데이타 비트수는 마스크필드에 의해 주어 진다.
외부 확장(Ee)이 세팅되면, out_extn=in_extn
이고, 그렇지 않으면
out_extn=De 이며 Bt 및 Eb는 "무관하다(don't care)".
B.2.3.2.2 데이타 토큰
이 모드는 데이타 토큰을 포맷팅하기 위해 사용되고 신호 first_coefficient에 따라 두가지 기능을 갖는다. 리셋시, first_coefficient가 세팅된다. 첫 번째 데이타 계수가 1로 세팅된 mad를 갖는 마이크로인스트럭션 워드와 함께 도착할 때, out_data[16:2]는 0x1로 세팅되고 out_data[1:0]는 마이크로인스트럭션 워드의 Bt필드의 값을 취한다. 이것은 DATA토큰의 헤더이다. 이 워드가 수용되었을 때, 커맨드를 수반한 계수는 레지스터로 로딩되고, RL 및 first_coefficient는 Eb의 값을 취한다. 다음 계수가 도착할 때, out_data[16:0]는 RL에 저장된 이전 계수를 취한다. RL 및 first_coefficient는 그 후 갱신된다. 이것은 블럭의 끝을 만나고 Eb가 세팅될 때, first_coefficient가 세팅되어 다음 DATA 토큰에 대비하는, 즉
를 보장한다.
B.2.3.3 설명을 위한 검토
본 발명에 따르면, 대부분의 인스트럭션 비트는 파서 상태 머신에 의해 정상방식으로 공급된다. 그러나, 필드중 두개는 다른 회로에 의해 실제로 공급된다.
상술한 "Bt" 필드는 ALU 블럭의 출력에 직접 접속된다. 이 두개의 비트 필드는 "co" 또는 "색 성분"의 현재 값을 부여한다. 따라서, DATA 토큰 헤더가 구성될 때, 하위 2비트는 ALU 카운터로부터의 색성분을 직접 취한다. 두 번째로, "Eb" 비트는 언제든지 그리고 블럭끝 기호 id가 디코딩될 때 (또는 JPEG의 경우, 블럭의 마지막 계수가 코드화되므로 1인 것으로 가정할 때) 구동된다(asserted).
in_extn 신호는 허프만 디코더에서 구해진다. 확장 비트가 정상 방식으로 토큰 워드와 함께 공급될 때 토큰에 대해서만 의미를 갖는다.
B.2.4 파서 상태 머신
본 발명의 파서 상태 머신은 실제로 회로의 매우 단순한 부분이다 B.2.5절 에서 설명한 마이크로코드 ROM의 프로그래밍이 복잡할 뿐이다.
본래, 이 머신은 현재 어드레스를 유지하는 레지스터로 구성된다. 이 어드레스가 마이크로코드 ROM에서 참조되어 마이크로코드 워드가 발생된다. 또한, 이 어드레스는 단순한 증가기에서 증가되고, 이 증가된 어드레스는 다음 상태에서 사용되는 두 개의 가능한 어드레스 중의 하나이다. 다른 어드레스는 마이크로코드 ROM 자체 내의 필드이다. 따라서, 각각의 인스트럭션은 잠재적인 점프 인스트럭션으로서, 프로그램에 지정된 위치로 점프할 수 있다. 점프가 취해지지 않으면, 제어는 ROM 내의 다음 위치로 진행한다.
일련의 16개 조건 코드 비트가 제공된다. 이들 조건 코드 중의 어느 하나를 (마이크로코드 ROM 내의 필드에 의해) 선택할 수 있고, 또한 (마이크로코드 ROM 내의 비트에 의해 다시) 반전시킬 수 있다. 최종 신호는 마이크로코드 ROM 내의 점프 어드레스 또는 증가된 어드레스 사이에서 선택된다. 조건 코드 중의 하나는 "거짓"으로서 평가되도록 하드와이어된다(hard-wired). 이 조건이 선택되면, 점프는 발생하지 않는다. 또한, 이 조건이 선택되어 반전되면, 점프(jump)가 항상 일어난다, 즉 무조건 점프한다.
디코딩된 직렬 데이타 (인덱스[7:0])과 토큰 데이타 (ntokeno[7:0]) 사이의 멀티플렉싱 및 데이타에 대한 파이프라인 지연에 대하여, 허프만 인덱스 값은 ZRL 및 EOB 기호에서 결정된다.
코드 당 비트 ROM 및 이들의 멀티플렉싱은 어느 테이블을 사용하는 가를 결정하기 위해 사용된다. 이 배열은 테이블 선택 정보가 늦게 도착하기 때문에 사용된다. 이 후 모든 테이블이 액세싱되어 정확한 테이블이 선택된다.
코드 당 비트 ROM에 대하여, 코드 당 비트 ROM의 출력과 코드 당 비트 ROM의 최종 멀티플렉싱은 블럭 "hdcpbram" 내에서 발생한다.
B.2.2.6.3 "hdstdp"의 설명
본 발명에 있어서, "hdstdp"는 두 개의 모듈을 포함한다. "hdstdel"은 적당 한 파이프라인 스테이지까지, 예를 들면 이들이 ALU 및 토큰 포맷터로 공급될 때, 파서 상태 머신 제어 비트를 지연시키는 것에 관한 것이다. 이것은 ALU를 통과하는 인스트럭션 워드의 대략 절반만을 처리하고, 나머지는 다른 모듈 "hdstmod"에 의해 다루어진다.
"hdstmod"는 허프만 상태 머신 ROM을 포함한다. 이 인스트럭션의 일부 비트는 허프만 상태 머신 제어 논리에 의해 사용된다. 나머지 비트는 "hdstdel"에서 다루어지지 않는 (파서 상태 머신으로부터의 ) ALU 인스트럭션 워드의 그 부분을 치환하도록 사용된다.
"hdstmod"는 명백하여 설명이 필요하지 않다. 여기에는, 파이프라인 지연 레지스터만이 있다.
테이블 B.2.9 조건 코드 비트
B.2.4.1 2선식 인터페이스 제어
본 발명에 따른 2선식 인터페이스 제어는 이 블럭에 있어서 다소 일반적이지 않다. 파서 상태 머신과 허프만 디코더 사이에는 2선식 인터페이스가 있다. 이것은 커맨드의 진행을 제어하도록 사용된다. 파서 상태 머신은 ROM으로부터 다음 커맨드를 계속 판독하기 전에 주어진 커맨드가 수용될 때까지 대기한다. 또한, 조건 코드는 ALU로부터 선을 거쳐 피드백된다.
각각의 커맨드는 피드백을 대기하여야 한다고 지정하게 하는 마이크로코드 ROM 내의 비트를 갖는다. 이것이 발생하면, 이 인스트럭션이 허프만 디코더에 의해 수용된 후, ALU로부터의 피드백 와이어가 구동될 때까지 새로운 커맨드는 제공되지 않는다. 이 와이어 fb_valid는 ALU에 의해 현재 공급되고 있는 조건 코드는 이들이 피드백을 대기할 것을 요청한 커맨드에 관련된 데이타를 반영한다는 점에서 어느 정도까지 유효하다는 것을 나타낸다.
본 발명에 따른 특징의 의도된 사용은 특정 데이타 부분의 디코딩 (또는 처리) 결과로서 다음 상태로 점핑하라고 결정하는 조건적인 점프 커맨드 구성에 있다. 이 기능이 없으면, 어떤 커맨드가 주어진 프로세싱 블럭 (즉, 이 경우 ALU)에 도착하는 시간이 불확실하다는 것은 2선식 제어가 의미하므로, 파이프라인의 데이타에 따라 임의의 조건을 테스트하는 것은 불가능하다.
모든 인스트럭션이 허프만 디코더로 전달되는 것은 아니다. 일부 인스트럭션은 데이타 파이프라인이 필요없이 실행될 수 있다. 이들은 점프 인스트럭션으로 되기 쉽다. 마이크로코드 ROM 내의 비트는 인스트럭션을 허프만 디코더로 공급해야 할지를 선택한다. 그렇지 않다면 , 허프만 디코더가 인스트럭션을 수용할 필요가 없으므로, 파이프라인이 있더라도 이 상황에서 실행을 계속할 수 있다.
B.2.4.2 이벤트 처리
파서 상태 머신에는 두개의 이벤트 비트가 위치해 있다. 하나는 허프만 이벤트라고하고 다른 하나는 파서 이벤트라고 한다.
파서 이벤트가 이들 중 가장 간단하다. 이 이벤트에 의해 감시되는 "조건"은 마이크로 ROM 내의 단순한 비트이다. 따라서, 이 비트를 세팅하는 것에 의해 인스트럭션이 파서 이벤트를 생성할 수 있다. 일반적으로, 이것을 실행하는 인스트럭션은 인트럽트 서비스 루틴이 인터럽트의 발생을 결정할 수 있도록 적당한 상수를 rom_control 레지스터에 기록한다.
파서 이벤트(parcer event)가 제공된 후 (또는 이벤트가 마스크되어(masked out) 있으면 즉시), 이것이 중지된(let off) 점에서 제어가 재개된다. 이벤트를 발생한 인스트럭션이 점프 인스트럭션 (자신의 조건을 참으로 평가)을 가지면, 정상적으로 점프가 취해진다. 따라서, 점프를 코딩하는 것에 의해 서비스 후 에러 핸들러(error handlers)로 점프하는 것이 가능한다.
허프만 이벤트는 다소 다르다. 감시되는 조건이 3개의 허프만 에러 비트의 "OR"이다. 실제로는 파서 이벤트에 대해 이 조건이 매우 간단하게 취급된다. 그러나, 허프만 디코더로부터 또 하나의 선 huffintrpt이 에러가 발생할 때마다 구동된다. 이것은 마이크로코드 프로그램에서 제어가 에러 핸들러로 점프하게 된다.
허프만 에러가 발생할 때, 시퀀스는 인터럽트 발생 및 블럭 정지를 수반 한 다. 서비스후, 제어는 에러 핸들러로 전송된다. "호출(call)" 메카니즘은 없고 정상 인터럽트와 달리, 에러가 에러 처리에 따라 발생된 후 마이크로코드 내의 점으로 복귀하는 것이 불가능하다.
허프만 에러가 발생되는 일없이 huffintrpt가 구동되는 것이 가능하다. 이 것은 B.2.2.3절에서 설명한 바와 같이 "에러-없음" 에러의 특별한 경우에 발생한다. 이 경우, (마이크로프로세서 인터페이스에 대해) 인터럽트가 발생되지 않지만, 제어는 여전히 (마이크로코드에서) 에러 핸들러로 전달된다. 이 경우 허프만 에러 레지스터가 클리어되기 때문에, 마이크로코드 에러 핸들러는 이것이 그 상황이고 이에 따라 응답할 지를 결정할 수 있다.
B.2.4.3 특수한 장소
마이크로코드 ROM에는 몇 개의 특별한 장소가 있다. ROM 내의 첫 번째 4개 장소는 메인 프로그램으로의 입구점이다. 제어는 리셋시 4개의 장소 중의 하나로 전달된다. 이 장소는 ALU 레지스터 coding_std 내의 선택된 코딩 규격에 따라 점프한다. 이 위치가 스스로 제로로 리셋되므로, 참인 리셋 제어(true reset control)는 장소 제로로 진행한다. 그러나, CED_H_TRACE 내의 UPI 레지스터 비트 CED_H_TRACE_RST만을 사용하여 파서 상태 머신을 리셋하는 것이 가능하다. 이 경우, coding_std 레지스터는 리셋되지 않고 제어는 첫 번째 4개 위치중의 적당한 곳으로 진행한다.
두 번째 4개 장소 (0x0 내지 0x007)는 허프만 인터럽트가 발생할 때 사용된다. 일반적으로, 실제 에러 핸들러로의 점프는 이들 장소 각각에 있다. 또한, 장소의 선정은 코딩 규격의 결과로서 이루어진다.
B.2.4.4 추적 (tracing)
진단적 도움으로서 추적 메카니즘이 실현된다. 이것은 마이크로코드가 단일 스텝(single-stepped)되게 한다. 레지스터 CED_H_TRACE 내의 비트 CED_H_TRACE_EVENT 및 CED_H_TRACE_MASK는 이것을 제어한다. 이들의 이름이 제시하는 바와 같이, 이들은 정상적인 이벤트 비트에 대하여 매우 유사한 방식으로 동작한다. 그러나, 몇가지 차이점 (특히 UPI 인트럽트가 결코 발생되지 않기) 때문에, 이들은 다른 이벤트 비트와 조화되지(grouped) 않는다.
추적 메카니즘은 CED_H_TRACE_MASK가 1로 세팅될 때 온된다(turned on). 각각의 마이크로 코드 인스트럭션이 ROM으로부터 판독된 후, 허프만 디코더로 제공되기 전에, 추적 이벤트가 발생한다. 이 경우, CED_H_TRACE_EVENT는 1로 된다. 전체 마이크로코드 워드는 레지스터 CED_H_KEY_DMX_WORD_0 내지 CED_H_KEY_DMX_WORD_9에서 이용할 수 있다. 필요하다면 이때 인스트럭션을 변경할 수 있다. CED_H_TRACE_EVENT에 1을 기록하는 것은 인스트럭션이 실행되게 하고 CED_H_TRACE_ EVENT를 클리어한다. 이 시간 직후, 실행될 다음 마이크로코드 워드가 ROM으로 부터 판독되었을 때, 새로운 추적 이벤트가 발생한다.
B.2.5 마이크로코드
마이크로코드는 매우 단순한 툴인 어셈블러 "hpp"를 사용하여 프로그래밍되고 대부분의 추출(abstraction)은 매크로 프리프로세서(macro preprocessor)를 사용하여 달성된다. 규격 "C" 프리-프로세서 "cpp"가 이것을 위해 사용될 수 있다.
이 코드는 다음과 같이 명령된다.
ucode.u는 메인 화일이다. 먼저, 이것은 토큰을 정의하기 위한 tokens.h를 구비한다. 다음에, regfile.h는 ALU 레지스터 맵을 정의한다. field.u는 마이크로코드 워드 내의 여러 필드를 정의하여, 이 필드의 가능한 비트 패턴마다 정의된 기호의 리스트를 부여한다. 다음에, 코드에 사용되는 레이블이 정의된다. 이 단계후, instr.u가 기본적인 인스트럭션을 정의하는 다수의 "cpp" 매크로를 정의하기 위해 포함된다. 그 후, errors.h는 파서 이벤트를 정의하는 번호를 정의한다. 다음에, unword.u는 마이크로코드 워드를 이루도록 필드가 있는 순서를 정의 한다.
ucode.u의 나머지는 마이크로코드 프로그램 자체이다.
B.2.5.1 인스트럭션
이 절에서는 ucode.u에 정의된 여러가지 인스트럭션을 설명한다. 많은 경우 이들이 특정 장소에서 작은 변동이 있으므로 (특히 ALU 인스트럭션) 여기서는 모든 인스트럭션을 설명하지 않는다.
B.2.5.1.1 허프만 및 인덱스 투 데이타 인스트럭션
본 발명에 있어서, H_NOP 인스트럭션은 허프만 디코더에 의해 사용된다. 이것은 무연산(no-operation) 인스트럭션이다. 허프만은 데이타가 디코딩되지 않는다는 점에서 아무것도 하지 않는다. 이 인스트럭션에 의해 발생된 데이타는 항상 제로이다. 따라서, 관련된 인스트럭션은 ALU 상으로 전달된다.
다음 인스트럭션은 토큰그룹, H_TOKSRCH, H_TOKSKIP_PAD, H_TOKSKIP_JPAD, H_PASS 및 H_TOKREAD이다. 이들은 모두 입력 쉬프터로부터 토큰 또는 토큰들을 판독하여 이들을 나머지 머신상으로 전달한다. H_TOKREAD는 하나의 토큰 워드를 판독한다. H_TOKPASS는 제로 확장 비트를 포함하여 전체 토큰을 판독하도록 사용될 수 있다. 관련된 커맨드는 토큰의 각각의 워드마다 반복된다. H_TOKSRCH는 토큰에 붙어 있는 모든 직렬 데이타를 버린후 하나의 토큰 워드를 판독한다.
H_TOKSKIP_PAD는 어떤 패딩 비트 (H.261및 MPEG)를 스킵한 후 하나의 토큰 워드를 판독한다. H_TOKSKIP_JPAD는 JPEG 패딩에 대하여 동일한 것을 실행한다.
H_FLC(NB)는 "NB" 비트의 고정 길이 코드를 판독한다.
H_VLC(TBL)는 (연상 기호, 예를 들면 H_VLC (tcoeff), 로서 전달된) 지정된 테이블을 사용하여 vic를 판독한다.
H_FLC_IE(NB)는 H_FLC와 같지만, "에러 무시" 비트가 세팅된다.
H_TEST_VLC(TBL)은 H_VLC와 같지만, 허프만 인덱스가 변경되지 않은 인덱스 투 데이타 유닛을 통과할 수 있도록 바이패스 비트가 세팅된다.
H_FWD_R 및 H_BWD_R은 ALU 레지스터 f_fwd_r_size 및 r_bwd_r_size에 의해 각각 지시된 크기의 FLC를 판독한다.
H_DCJ는 JPEG 유형의 DC 계수, 즉 ALU로부터의 테이블 번호를 판독한다.
H_DCH는 H.261 DC항을 판독한다.]
T_TCOEFF및 H_DCTCOEFF는 변형 계수를 판독한다. H_DCTCOEFF에 있어서, 첫번째 계수 비트는 세팅되고 비-인트라 블럭(non-intra blocks)을 위한 것인 반면, H_TCOEFF는 DC항이 이미 판독된 후 인트라 블럭을 위한 것이다.
H_NOMINATE(TBL)은 다음 다운로딩을 위해 테이블을 지정한다.
H_DNL(VB)는 NB 비트를 판독하고 이들을 지정된 테이블에 다운로딩한다.
B.2.5.1.2 ALU 인스트럭션
실상 ALU 인스트럭션은 너무 많아서 이들을 모두 상세히 설명할 수는 없다. 연상 기호(mnemonics)가 구성되는 기본 방식을 설명하여, 인스트럭션을 읽기 쉽게 하고자 한다. 또한, 이들은 당해 기술 분야에서 통상의 지식을 가진자에게 용이하게 이해되어야 한다.
대부분의 ALU 인스트럭션은 이곳 저곳으로 이동하는 데이타에 관한 것이므로, 일반적인 "로드(load)" 인스트럭션이 사용된다. 연상 기호 A_LDxy에 있어서, y의 내용이 x에 로딩되는 것을 알 수 있다. 즉, 목적지가 첫 번째로 열거되고 소스가 두 번째로 열거된다.
테이블 B.2.10 데이타의 가능한 소스 및 목적지를 나타내도록 사용된 글자
예를 들면, LDAI는 ALU의 데이타 입력 포트로부터의 데이타를 A 레지스터에 로딩한다. ALU 레지스터 화일이 지정되면, LDAF(RA)가 레지스터 파일 내의 위치 RA의 내용으로 A를 로딩하도록 연상 기호가 어드레스를 취한다.
ALU는 데이타가 소스에서 목적지로 움직일 때 이것을 변경하는 능력을 갖는다. 이 경우, 이 연산 능력(arithmetic)은 소스 데이타의 부분으로서 지시된다. 따라서, 연상 기호 LDA_AADDF(RA)는 A 레지스터의 현존하는 내용 및+ 레지스터 파일 내의 지시된 위치의 내용을 A에 로딩한다. 다른 예로서는 입력 데이타를 취하는 LDA_ISGXR로서, 부호는 RUN 레지스터에 지시된 비트에서 확장하고, A 레지스터에 이 결과를 저장한다.
많은 경우, 동일한 결과에 대한 하나 이상의 목적지가 지정된다. 또한, 예를 들면, LDF_LDA_ASUBC(RA)는 A에서 어떤 상수를 뺀 결과를 A 레지스터 및 레지스터 화일 모두에 로딩한다.
특정 동작에 대하여 다른 연상 기호가 있다. 예를 들면, "CLRA"는 A 레지스터를 클리어하기 위해 사용되고, "BMBC"는 매크로블럭 카운터를 리셋하기 위해 사용된다. 이들은 상당히 명백하고 instr.u 내의 설명에서 기술된다.
정상 동작에 부가하여 동작의 결과를 토큰 포맷터로 출력하는 것을 나타내기위해 suffix "0"를 사용하는 것은 예외이다. 따라서, LDFI_0(RA)는 입력 데이타를 저장하고 이것을 토큰 포맷터로 전달한다. 또한, 원한다면 이것을 LDF_LDO_I(RA)로 할 수도 있다.
B.2.5.1.3 토큰 포맷터 인스트럭션
이것은 T_NOP "무연산" 인스트럭션이다 이것은 무연산 인스트럭션을 작성하는 것이 불가능하므로 실제로는 틀린 명칭(misnomer)이다. 그러나, ALU가 토큰 포맷터로 출력하지 않으므로 인스트럭션이 중요하지 않을 때마다 이것이 사용된다.
T_TOK는 토큰 워드를 출력한다.
T_DAT는 (허프만 상태 머신 인스트럭션으로만 사용된) DATA 토크 워드를 출력한다.
T_GENT8은 상수 필드의 8비트에 따라 토큰 워드를 발생한다.
T_GENT83는 T_GENT8과 같지만, 확장 비트가 하나이다.
T_OPD(NB)는 상수 필드에서 입력되는 나머지 비트와 출력의 하위 NB 비트로부터의 데이타의 NB 비트이다.
T_OPED(NB)는 T_GENTB과 같지만, 확장 비트가 하이다.
T_OPD8은 T_OPD(8)에 대한 약기(short-hand)이다.
T_OPD8E는 T_OPDE(8)에 대한 약기이다.
B.2.5.1.4 파서 상태 머신 인스트럭션
이 인스트럭션, D_NOP 무연산, 즉 어드레스는 정상적으로 증가하고 파서 상태 머신은 특별히 아무것도 하지 않는다. 나머지 인스트럭션은 데이타 파이프라인으로 전달된다. 대기는 발생하지 않는다.
D_WAIT는 D_NOP와 같지만, 피드백이 발생하기를 기다린다.
단순한 점프 그룹인 D_JMP(ADDR)및 D_JNX(ADDR) 등의 연상 기호는 조건이 충족되면 점프한다. 이 인스트럭션은 허프만 디코더로 출력되지 않는다.
외부 점프 그룹인 D_XJMP(ADDR) 및 D_XJNX(ADDR) 등의 연상 기호들은 상기 기술한 이들의 단순한 짝과 같지만, 이 인스트럭션은 허프만 디코더로 출력된다.
점프 및 대기 그룹, 즉 D_WJNZ(ADDR) 등의 연상 기호들인 이들 인스트럭션은 허프만 디코더로 출력되고, 파서는 조건을 평가하기 전에 ALU로부터의 피드백을 기다린다.
다음의 연상 기호는 이들 자신의 조건을 위해 사용된다.
테이블 B.2.11 조건에 사용된 연상 기호
D_EVENT는 이벤트의 발생을 일으킨다.
D_DFLT는 디폴트 인스트럭션의 구성을 위한 것이다. 이것은 이벤트를 일으킨후 레이블 "dflt"가 붙은 위치로 점프한다. 이 인스트럭션은 사용되지 않는 위치로의 점프가 트랩되도록 ROM을 채우기 위해 사용되기 때문에, 이들은 결코 실행 되어서는 안된다.
D_ERROR는 이벤트를 일으키고 에러로부터의 복원을 시도한다고 가정되는 라벨 "torch_dispatch"로 점프한다.
B.3절 허프만 디코더 ALU
B.3.1 소개
본 발명에 따른 허프만 디코더 ALU 서브-블럭은 허프만 디코더 블럭에 대해 범용 산술 및 논리 기능(general arithmetic and logical function)을 제공한다.
이것은 가산 및 감산 연산, 다양한 타입의 부호-확장 연산, 및 런(run)-부호-레벨 트리플(triple)로 입력 데이타의 포맷팅을 할 수 있는 능력을 갖는다. 또한 이것은 2선식 인터페이스의 제어하에 입력 데이타와 함께 동기하여 ALU에 도달하는 마이크로인스트럭션 워드로서 정확한 동작 및 구성이 지정되는 유연한 구조(flexible structure)를 갖는다.
36-비트 인스트럭션 및 12-비트 데이타 입력 포트외에, 상기 ALU는 6-비트런 포트(run port)와 8-비트 상수 포트(constant port) (이것은 실제로 토큰 버스에 상주한다)를 갖는다. 마이크로인스트럭션 워드를 제외한 이들 모두는 ALU 데이타경로를 통해 이들 각각의 폭을 갖는 버스를 구동시킨다. 마이크로인스트럭션 워드 내에는 확장 비트를 나타내고 17-비트-런-부호-레벨 (out_data)과 함께 출력되는 한 개의 비트가 존재한다. ALU 데이타경로의 각각의 끝에 2선식 인터페이스와 이들 자신의 유효 신호인 cc_valid와 함께 출력되는 한 세트의 조건 코드가 존재한다. ALU를 거쳐 다른 허프만 디코더 서브-블럭으로 그리고 또한 마이크로프로세서 인터페이스에 억세스할 수 있는 레지스터 화일이 존재한다.
B.3.2 기본 구조
허프만 ALU의 기본 구조는 제126도에 도시된 바와 같다. 이것은 다음과 같은 구성 요소를 포함한다.
입력 블럭 (400)
출력 블럭 (401)
조건 코드 블럭(402)
소스 멀티플렉싱을 갖는 "A" 레지스터(403)
소스 멀티플렉싱을 갖는 런(run) 레지스터(6비트)(404)
소스 멀티플렉싱을 갖는 가산기/감산기(405)
소스 멀티플렉싱을 갖는 부호 확장 논리부(406)
레지스터 화일(407)
이들 각각의 블럭 (출력 블럭은 제외)은 출력을 데이타경로를 통하는 버스로 구동시키고, 이들 버스는 역으로 블럭 소스에 대해 멀티플렉싱에의 입력으로 사용된다. 예를 들어, 가산기 출력은 A 레지스터로의 가능한 입력중 한 입력인 자신의 데이타경로 버스를 갖는다. 이와 유사하게, 상기 A레지스터는 상기 가산기로의 가능한 입력중 한 입력을 형성하는 자신의 버스를 갖는다. 7절에 마이크로인스트럭션 워드로 명시된 바와 같이, 모든 가능한 서브-세트만이 존재한다.
단일 사이클에 있어서, 이것은 가산에 근거한(add-based) 인스트럭션 또는 부호-확장에 근거한(sign-extend-based) 인스트럭션중 어느 한 인스트럭션으로 실행할 수 있다. 또한, 이것은 이 연산이 엄연히 병렬로 제공된 단일 사이클로 이들 모두를 실행하는 것을 허용한다. 다른 말로 표현하면, 가산 다음에 부호 확장 또는 부호 확장 다음에 가산 시퀀스는 하용되지 않는다. 상기 레지스터 화일은 단일 사이클로 판독되거나 또는 기록될 수 있지만, 이들 모두가 동시에 실행될 수 없다.
출력 데이타는 세 개의 필드를 갖는다.
· 런(run)-6비트
· 부호-1비트
· 레벨-10비트
만약 데이타가 ALU를 통해 직접 전달될 예정이라면, 입력 데이타 레지스터의 최하위 11비트는 부호 및 레벨 필드로 래칭된다(latched).
ALU의 제한된 복수 사이클 연산을 프로그래밍할 수 있다. 이와 같이, 요구되는 사이클의 수는 어드레스가 마이크로인스트럭션에 명시되어 있는 레지스터 화일 장소의 내용으로서 주어지고, 순환 카운터(iteration counter)가 1로 감소하는 동안 반복적으로 동일한 연산이 수행된다. 이것은 가산기를 사용하여 자신에 A 레지스터를 더하고 이 결과를 다시 A 레지스터에 저장하기 위해 좌측으로 쉬프팅하는데 전형적으로 사용된다.
B.3.3. 가산기/감산기 서브-블럭
이것은 자신의 입력 2로 선택적으로 인버팅하고 캐리-인 비트(carry-in bit)를 선택적으로 세팅시키는 12-비트 폭의 가산기이다. 출력은 12-비트 합이고, 캐리-아웃(carry-out)은 사용되지 않는다. 여기에는 7가지 연산 모드가 존재한다.
· ADD : 제로로 세팅된 캐리 인(carry in)으로 더함. 입력 1 + 입력 2
· ADC : 1로 세팅된 캐리 인으로 더함. 입력 1 + 입력 2 + 1
· SBIC : 입력 2를 인버팅하고, 제로로 세팅된 캐리 인. 입력1 - 입력2-1
· SUB : 입력 2를 인버팅, 1로 세팅된 캐리 인: 입력 1 - 입력 2
· TCI : 만약 입력 2<0이면 S7B를 사용하고, 그렇지않으면 ADD를 사용. 이것 보수 값으로부터 크기 값(magnitude value)을 얻기 위해 제로로 세팅된 입력 1로 사용된다.
DCD (DC 차) : 만약 입력 2<0이면 ADC를 실행하고, 그렇지않으면 ADD를 실행 한다.
VRA (벡터 잉여 가산) : 만약 입력 1<0이면 ADC를 실행하고, 그렇지않으면 SBC를 실행한다.
B.3.4. 부호 확장 서브-블럭
이것은 그 부호가, 크기 입력으로부터 입력 데이타로, 다양한 모드로 확장하는 12-비트 유닛이다. 크기는 0에서 11범위 (0은 최하위 비트에 관한 것이고, 11은 최상위 비트에 관한 것이다)에 이르는 4비 값이다. 출력은 12 비트로 변형된 데이타 값과 "부호"비트이다.
SGXMODE=NORMAL에서, 크기-번째 비트(size-th bit) (를 포함하는) 상기 모든 비트는 크기 번째 비트의 값을 취한다. 아래의 모든 비트들은 변경되지 않은 채로 남는다. 부호는 크기-번째 비트의 값을 취한다. 예를들어,
데이타 = 1010 1010 1010
크기 =2
출력 = 0000 0000 0010, 부호=0
SGXMOD=INVERSE에서, 크기-번째 비트 (를 포함하는) 상기 모든 비트는 크기-번째 비트의 역을 취하는 한편, 아래의 모든 비트들은 변하지 않은 채로 남는다.
부호는 크기-번째 비트의 값을 취한다. 예를 들어,
데이타 = 1010 1010 1010
크기 =0
출력 = 1111 1111 1111, 부호=1
SIGMODE=DIFMAG에서, 만약 크기-번째 비트가 제로이면, 크기-번째 (를 포함하는) 이하의 모든 비트가 인버팅되는 반면에, 상기 모든 비트들은 변경되지 않은 상태로 남는다. 만약 크기-번째 비트가 1이면 모든 비트는 변하지 않은 상태로 남는다. 두 가지 경우 모두에서,부호는 크기-번째 비트의 역을 취한다. 이것은 AC 차이 값의 크기를 얻는데 사용된다. 예를 들어,
데이타 = 0000 1010 1010
크기 =2
출력 = 0000 1010 1101, 부호=1
데이타타 = 0000 1010 1010
크기 = 1
출력 = 0000 1010 1010, 부호=0
SGXMODE=DIFCOMP에서, 크기-번째 비트 (를 포함하지 않는) 상기 모든 비트는 크기-번째 비트의 역을 취하는 반면에, 크기-번째 비트 (를 포함하는) 아래의 모든 비트들은 변하지 않은 채로 남는다. 부호는 크기-번째 비트의 값을 취한다. 이것은 DC 차이값에 대해 2의 보수 값을 얻는데 사용된다. 예를 들어,
데이타 = 1010 1010 1010
크기 = 0
출력 = 1111 1111 1110, 부호=1
B.3.5 조건 코드
ALU/레지스터 화일에 의해 임의의 비트가 생성되고 허프만 블럭에 의해 사용되는 두 바이트 (16비트)의 조건 코드가 존재한다. 이들은 부호 조건 코드, 제로 조건 코드, 확장 조건 코드 및 변경 검출 비트이다 이들 코드중 마지막 두 코드는 다른 코드와 동일한 방법으로 파서(parser)에 의해 사용되지 않기 때문에 실질적으로 조건 코드가 아니다.
부호, 제로 및 확장 조건 코드는 파서가 그것을 실행하라는 인스트럭션을 발행할 때 갱신되고, 이들 인스트럭션 각각에 대해 조건 코드 유효 신호가 하이로 펄스된다(Pulsed).
부호 조건 코드는 단순히 래칭된 부호 확장 출력이지만, 제로 조건 코드는 A 레지스터로의 입력이 제로이면 1로 세팅된다. 확장 조건 코드는 OUTSRC에 무관하게 래칭된 입력 확장 비트이다.
조건 코드는 다음과 같은 임의의 조건 타입을 평가하는데 사용될 수 있다 :
결과가 상수와 같다 - 감산 및 제로 조건을 사용한다.
결과가 레지스터 값과 같다 - 감산 및 제로 조건을 사용한다.
레지스터가 상수와 같다 - 감산 및 제로 조건을 사용한다.
· 레지스터 비트 세트 - 부호 확장 및 부호 조건을 사용한다.
· 결과 비트 세트 - 부호 확장 및 부호 조건을 사용한다.
부호 확장 및 부호 조건 코드 조합을 사용할 때, 종래의 논리 AND의 경우에서와 같이 다수의 비트보다는 지정된 한 비트만을 평가할 수 있다는 것에 유의한다.
본 발명에서, 변경 검출 비트는 제로 조건 코드에 대한 것과 동일한 논리를 사용하여 생성되지만, 연관된 유효 신호를 갖지 않는다. 마이크로인스트럭션의 비트는 만약 레지스터 화일에 현재 기록되는 값이 (첫째, READ로 세팅된 REG-MODE와 둘째, WRITE로 세팅된 REGMODE이라는 두 클럭 사이클이 필요하다는 것을 의미하는)이미 존재하는 값과 다르면 변경 검출 비트가 갱신되어야 한다는 것을 가리킨다.
이때 만약 변경된 값이 검출되면 마이크로프로세서 인터럽트가 초기화될 수 있다.
변경 검출 비트는 통상적인 방법으로 변경 검출을 활성화시킴으로써 리셋되지만, REGMODE가 READ로 세팅된다.
또한, (이하 레지스터 화일의 일부를 형성하는) 하드웨어화된 매크로블럭 카운터 구조는 아래와 같은 조건 코드, Mb_Start, Pattern_Code, Restart 및 Pic_Start과 같은 코드를 생성한다.
B.3.6 레지스터 화일
레지스터 화일에 대한 어드레스 맵이 아래에 도시된다. 이것은 ALU 데이타 경로와 UPI 모두에 공통인 7-비트 어드레스 공간을 사용한다. 많은 장소가 ALU에 의해 액세스되지 않지만, 이들은 전형적으로 하드웨어화된 매크로블럭 구조에 있는 카운터와 ALU 자체 내에 존재하는 레지스터이다. 후자는 전용 액세스이지만, UPI에 대한 어드레스 맵의 일부를 형성한다. (오버크기에 대해 테이블에서 "0"으로 지정된) 일부 다중-바이트 기억 장소는 단일 ALU 어드레스를 갖지만, 다수의 UPI 어드레스를 갖는다. 이와 유사하게, (테이블에서 I"로 나타나는) 성분 과운트 (component count: CC)로 인덱스된 일단의 레지스터는 ALU에 의해 단일 장소로 취급된다. 이것은 초기화와 리셋팅, 또는 블럭 레벨의 연산을 위한 마이크로프로그래밍을 용이하게 한다.
전용 ALU 레지스터 (UPI 판독 전용)를 제외한 모든 기억 장소는 판독/기록용 기억 장소고, 모든 카운터는 인스트럭션 워드 내의 비트에 의해 제로로 리셋된다.
패턴 코드 레지스터는 최하위 비트가 Pattern_Code 조건 비트를 형성하는 우로 쉬프팅하는(right shift) 능력을 갖는다. 하드웨어화된 매크로블럭 구조의 모든 레지스터는 테이블에서 'M'으로 지칭되고, 또한 카운터 (n-비트)인 이들은 Cn으로 주해가 달려 있다.
본 발명에 있어서, 소정의 기억 장소는 허프만 디코더에 대한 각각의 ac 허 프(huff) 테이블 및 dc 허프 테이블에 대해 그 내용이 허프만 서브-시스템-코딩 규격, 두개의 r-크기 기억 장소 및 단일 장소 (2-비트 워드)의 다른 부분에 배선되어 있다(hardwired).
굵게 표시된 어드레스는 ALU와 UPI 모두에 의해 장소가 액세스될 수 있다는 것을 가리키고, 그렇지 않으면 이들 어드레스는 UPI 액세스만을 갖는다. ALU에 의해 CC를 통해 디렉팅되지 않은(undirected) 일단의 레지스터는 인스트럭션 워드에 지정된 단일 ALU 어드레스를 가질 수 있고, CC는 액세스 하는데 그룹에서 어떤 물리적 기억 장소를 선택할 지를 선택할 것이다. ALU 어드레스는 비록 종래 방법으로 첫 번째 어드레스가 사용되어야 할지라도 그룹 내 임의의 레지스터의 어드레스일 수 있다. 또한, 이것은 비록 실제에 있어서는 어느 어드레스라도 충분할 것이지만 한쌍의 최하위 어드레스를 사용하여 액세스되어야 하는 다중-바이트 기억 장소에 대한 경우이다. 키흘 레지스터(keyhole registers)를 통해서 뿐만 아니라, 상부 레벨의 레지스터 맵 ("T"로 지칭됨)에서도 장소 2E와 2F는 액세스될 수 있다.
레지스터 화일은 액세스 속도를 향상시키기 위해 물리적으로 네 개의 "뱅크(banks)"로 분할되어 있지만, 이는 어떠한 경우에도 어드레싱에 영향을 미치지 않는다. 주 테이블은 MPEG에 대한 할당을 보여주고, 반복되는 두 부분은 각각 JPEG와 H.261에 대한 변형을 보여준다.
테이블 B.3.1 테이블1: 허프만 레지스터 화일 어드레스 맵
테이블 B.3.2 JPEG 변형
H.261 번형 :
테이블 B.3.3 H.261 변형
B.3.7. 마이크로인스트럭션 워드
본 발명에 따른 ALU 마이크로인스트럭션 워드는 다수의 필드로 분할되는데, 각각의 필드는 상술된 구조의 다른 특성을 제어한다. 인스트럭션 워드에 사용된 총 비트 수는 36 (확장 비트 입력에 대해 1을 더함)이고, 하드웨어 구성의 최대의 유연성이 유지될 수 있도록 하기 위해 전 필드에 걸쳐 최소의 인코딩이 채택되었다. 인스트럭션 워드는 이하와 같이 분할된다(partioned). 디폴트 필드 값, 즉 ALU 또는 레지스터 화일의 상태를 변경시키지 않는 디폴트 필드 값은 이탤릭체로 주어진다.
테이블 B.3.4 테이블 2. 허프만 ALU 마이크로인스트럭션 필드
B.4절 버퍼 관리기(Buff Manager)
B.4.1 소개
본 절은 본 발명에 따른 버퍼 관리기(brian)의 목적, 동작 및 구현을 설명한다.
B.4.2 개요
버퍼 관리기는 DRAM 인터페이스에 대해 네 개의 어드레스를 제공한다. 이들 어드레스는 DRAM의 페이지 어드레스(pages addresses)이다. DRAM에 인터페이스는 DRAM에 두 개의 FIFO, 코드화된 데이타 버퍼 및 토큰 데이타 버퍼를 유지한다.
즉, 네 개의 어드레스에 대해 각각의 버퍼를 위한 판독 및 기록 어드레스가 존재한다.
B.4.3 인터페이스
버퍼 관리기는 DRAM 인터페이스와 마이크로프로세서에만 접속되어 있다. 상기 마이크로프로세서는 테이블 B.4.4에 도시된 "초기화 레지스터"를 셋업하는 데에만 사용될 필요가 있다. DRAM 인터페이스와의 인터페이스는 각각의 어드레스에 대해 요청/응답 확인 프로토콜로서 제어되는 네 개의 18비트 어드레스이다. (버퍼 관리기가 데이타경로에는 존재하지 않기 때문에, 버퍼 관리기는 2선식 인터페이스를 구비하지 않는다)
또한, 버퍼 관리기는 DRAM 인터페이스 클럭 발생기를 오프시키도록 동작하고(operates off) DRAM 인터페이스 스캔 체인(scan chain)을 온시키도록 동작한다(operates on).
B.4.4 어드레스 계산
각각의 버퍼에 대한 판독 및 기록 어드레스는 아홉개의 18 비트 레지스터로부터 생성된다.
초기화 레지스터 (마이크로프로세서로부터 RW)
· BASECB - 코드화된 데이타 버퍼의 기본 어드레스
· LENGTHCB - (코드화된 데이타의 페이지에서) 최대 크기 버퍼
· BASETB - 토큰 데이타 버퍼의 기본 어드레스
LENGTHTB - 토큰 데이타 버퍼의 (페이지에서) 최대 크기
· LIMIT - DRAM의 (페이지에서) 크기
동적 레지스터(dynamic registers) (마이크로프로세서로부터의 RO)
· READCB - BASECB에 대한 코드화된 데이타 버퍼 판독 포인터
· MMBERCB - READCB에 대한 코드화된 데이타 버퍼 기록 포인터
· READTB - BASETB에 대한 토큰 데이타 버퍼 판독 포인터
· NUMBERTB - REABTB에 대한 토큰 데이타 버퍼 기록 포인터
어드레스를 계산하기 위해
readaddr = (BASE + READ) mod LIMIT
writeaddr = (((READ + NUMBER) mod LENGTH) + BASE) mod LIMIT
"mod LIMIT"이라는 용어는 버퍼가 DRAM 둘레를 감싸기(wrap) 때문에 사용된다.
B.4.5 블럭 기술
본 발명에서, 제127도에 도시된 바와 같이, 버퍼 관리기는 스누퍼(snooper)가 DRAM 인터페이스 접속을 모니터하고 링(ring)으로 연결된 세개의 상위 레벨 모듈로 구성된다. 상기 모듈은 다음과 같은 순서의 링으로 정렬된 bmprtize(우선순위), bminstr(인스트럭션), 및 bmrecalc(다시 계산) 이며, omsnoop(스누퍼)는 어드레스 출력에 배치되어 있다. 모듈 Bmprtize는 REQ/ACK 프로토콜과 버퍼를 위한 FULL/EMPTY 플래그를 다루고, "이것이 유효 어드레스인가" 라는 각각의 어드레스의 상태를 유지한다. 이와 같은 정보로부터, 이것은 (존재한다면) 어드레스가 다시 계산되어야 하는 지를 bminstr에게 지시한다. 또한 이것은 FHL/EMPTY 플래그를 나타내는 BUF_CSR (상태) 마이크로프로세서 레지스터와, 버퍼 관리기 레지스터에 대한 마이크로프로세서의 기록 액세스를 제어하는 buf_access 마이크로프로세서 레지스터를 동작시킨다.
bmprtize에 의해 어드레스를 계산하도록 지시받게 되면, 모듈 Bminstr는 bmrecalc를 제어하여 어드레스를 계산하도록 6 인스트럭션 (두 사이클 마다 한 개의 인스트럭션)을 낸다.
모듈 Bmrecalc는 bminstr의 인스트럭션하에 어드레스를 다시 계산한다. 두 사이클마다 인스트럭션을 실행함으로써, 이것은 모든 초기화 및 다이나믹 레지스터(dynamic registers)와, 덧셈, 뺄셈 및 계수(modulus)를 할 수 있는 간단한 ALU를 구비한다. 이것은 검출한 FULL/EMPTY 상태와 어드레스 계산을 종료한 때를 Sbmprt ice에게 알린다.
B.4.6 블럭 구현
B.4.6.1 Bmprtize
리셋에서, buf_access 마이크로프로세서 레지스터는 초기화 레지스터를 셋업할 수 있게 하는 1로 세팅된다. buf_access가 다시 1을 판독하지만, 유효 초기화 레지스터없이는 아무런 의미도 없기 때문에 어떠한 어드레스 계산도 초기화되지 않는다.
일단 buf_access가 구동되지 않으면(de-asserted) (그것에 제로를 기록)bmprtize의 목적이 네 개의 모든 어드레스를 유효로 유지하는 것이기 때문에 (어드레스를 다시 계산함으로써) 모든 어드레스를 유효로하기 시작한다. 이 단계에서, 버퍼 관리기는 "기동"하고 (즉, 모든 어드레스가 아직 계산되지 않았음), 그리하여 어떠한 요청도 구동되지(asserted) 않는다.
일단 모든 어드레스가 유효하게 되면 기동은 종료하고 모든 요청이 보내진다(asserted). 이 시점부터 앞으로, (사용되었고 확인응답되었기 때문에) 어드레스가 무효로 될 때, 이것은 다시 계산될 것이다.
DRAM 인터페이스가 최고속으로 매 17 사이클마다 어드레스를 사용할 수 있고, 버퍼 관리기가 12 사이클 마다 어드레스를 다시 계산할 수 있기 때문에 어드레스 사이에 어떠한 우선 순위도 수행될 필요가 없을 것이다. 따라서, 기동후 한번에 단지 하나의 어드레스만이 항상 무효일 것이다. 따라서, bmprtize는 현재 계산되고 있지 않은 임의의 무효 어드레스를 다시 계산할 것이다.
본 발명에서, aur_access가 보내어질(asserted) 때마다 기동이 재진입됨으로써, 마이크로프로세서 액세스 동안 어떠한 어드레스도 DRAM 인터페이스에 공급되지 않을 것이다.
B.4.6.2 Bminstr
모듈 Bminstr는 MOD 12 사이클 카운터 (어드레스를 생성하는 데 걸리는 사이클 수)를 포함한다. 우수(even) 사이클은 인스트럭션을 개시하는 동안, 기수(odd) 사이클은 인스트럭션을 종료시킨다는 것에 유의한다. 판독 또는 기록 계산과 함께 상위 3 비트는 다음과 같이 bmrecalc에 대한 인스트럭션으로 디코딩된다 :
판독 어드레스에 대해 :
테이블 B.4.1 판독 어드레스 계산
기록 어드레스에 대해 :
테이블 B.4.2 기록 어드레스 계산
주 : 마지막 연산의 결과는 항상 누산기에 유지된다.
다시 계산될 어떠한 어드레스도 존재하지 않는 경우, 사이클 카운터는 제로에서 허용되지 않도록 함으로써(idles), 인스트럭션으로 하여금 어떠한 레지스터에도 기록되지 못하게 한다. 이것은 아무런 영향도 없다.
B.4.6.3 Bmrecalc
모듈 Bmrecalc는 두 클럭 사이클 마다 한개의 연산을 수행한다. 이것은 우수 카운터 사이클 (start_alu_cyc)에서 인스트럭션에 (어느 버퍼와 io 타입과) bminstr으로부터 래칭하고, 기수 카운터 사이클 (end_alu_cyc)에서 연산의 결과를 래칭한다. 연산의 결과는 인스트럭션으로서 지정된 임의의 레지스터 이외에 항상 "Accum" 레지스터에 저장된다. 또한, end_aclu_calc에서, bmrecalc는 방금 계산된 어드레스의 사용으로 버퍼가 채워지는지 또는 비워지는지 여부와, 어드레스 및 채워짐/비워짐이 성공적으로 계산되었을 때 (load-addr)를 bmprtize에게 알린다.
채워져있는 가/비워져있는 가(Full/Empty)는 연산 결과의 부호 비트를 사용하여 계산된다.
계수 연산은 참 계수(true modulus)는 아니지만, A mod B는 다음과 같이 구현된다.
(A>B? (A-B):A)
그러나, 이것은 단지 A>(2B-1)일 때에만 거짓이지만 이것은 결코 생성하지 않는다.
B.4.6.4 Bmsnoop
모듈 Bmsnoop는 DRAM에 인터페이스에 공급된 어드레스를 모니터하는 네 개의 18 비트 슈퍼 스누퍼(four eighteen bit super snoopers)로 구성된다. 스누퍼는 외부 DRAM의 칩 테스팅을 할 수 있도록 "슈퍼" (즉, 실행하는 클럭으로 액세스될 수 있는) 이어야만 한다. 이들 스누퍼는 REQ/ACK 시스템 상에서 실행하므로, 임의의 다른 장치와는 다르다.
REQ/ACK는 정보 (즉, 확인응답)를 수용하지 않을 송신기에 재전송하는데 필수적이기 때문에 2선식 프로토콜과는 반대로 이 인터페이스 상에서 사용된다. 여기서 이것은 FIFO 포인터를 철저히 모니터한다.
B.4.7 레지스터
초기화 레지스터에 마이크로프로세서 기록 액세스를 얻기 위해, buf_access 에 1이 기록되어야 하고, buf_access가 다시 1을 판독할 때 액세스가 주어된다. 역으로, 마이크로세서 기록 액세스를 얻기 위해, buf_access에 제로가 기록되어야만 한다. buf_access가 다시 제로를 판독할 때 액세스가 주어질 것이다. buf_access는 1로 리셋된다는 것에 유의한다.
본 발명의 다이나믹 및 초기화 레지스터는 임의의 시간에 판독될 수 있지만, 다이나믹 레지스터가 마이크로프로세서를 변경시키지 않토록 하기 위해 기록 액세스가 얻어져야만 한다.
초기화 레지스터는 단지 한번만 기록되도록 의도되었다. 이들을 다시 기록하게 되면 버퍼의 동작이 부정확할 수 있다. 그러나, 이것은 급격히 버퍼 길이를 증가시키고, 버퍼 관리기로 하여금 적절할 때 새로운 길이를 사용할 수 있도록 의도되어 있다.
초기화 레지스터의 값이 감지 가능한 가, 즉 버퍼가 중복하지 않다는 것을 알기 위한 어떠한 검사도 이루어지지 않는다. 이것은 사용자에게 달려있다.
B.4.3 버퍼 관리기 비-키홀 레지스터(non-keyhole registers)
여기서 D는 레지스터 비트를 가리키고, x는 레지스터 비트가 존재하지 않음을 가리킨다.
테이블 B.4.4 버퍼 관리기 키홀의 래지스터
B.4.8 검증
Lsim에서 더미(dummy) DRAM 인터페이스 상에 작은 FIFO로서 그리고 C-코드에서 상위 칩 시뮬레이션의 일부로 검증되었다.
B.4.9 테스팅
bman에 대한 테스트 범위는 bmsnoop, (B.4.4에 도시된) 다이나믹 레지스터이며 DRAM 인터페이스 스캔 체인의 일부인 스캔 체인을 사용하는 스누퍼 전체이다.
B.5절 역모델러(Inverse Modeler)
B.5.1 소개
본 절은 본 발명에 따른 역모델러(inverse modeller:imodel)와 토큰 포맷터(token formatter: hsppk)의 목적, 동작 및 구현을 설명한다.
주 : hsppk는 계층적으로는 허프만 디코더의 일부이지만, 기능적으로는 역모델러의 일부이다. 따라서 이것은 본 절에서 보다 잘 논의된다.
B.5.2 개요
imodel과 hsppk 사이에 있는 토큰 버퍼는 모두 오프-칩(off-chip) DRAM에 많은 양의 데이타를 포함할 수 있다. 이 메모리를 효율적으로 사용하기 위해서, 데이타는 16 비트 포맷이어야 한다. 포맷터는 허프만 터코더로부터의 데이타를 토큰 버퍼를 위한 포맷으로 "팩(pack)"한다. 다음에, 역모델러는 토큰 버퍼 포맷으로부터 데이타를 "언팩(unpack)"한다.
그러나, 상기 역모델러의 주 기능은 "런/레벨(run/level)" 코드를 벗어나 레 벨이 다음에 오는 제로 데이타의 런(a run of zero data)으로 확장시키는 것이다. 부수적으로, 상기 역모델러는 DATA 토큰이 적어도 64 계수를 확실히 갖게 하고, 이 기동 기준을 충족시키지 못한 스트림을 중지시키기 위한 "게이트(gate)"를 제공한다.
B.5.3 인터페이스
B.5.3.1 Hsppk
본 발명에서, Hsppk는 입력으로서 허프만 디코더와 출력으로서 토큰 버퍼를 갖는다. 이들 인터페이스는 2선식 타입으로, 입력은 FLUSH 신호를 더한 17 비트 토큰 포트이고, 출력은 FLUSH 신호를 더한 16 비트로 "팩된 데이타"이다. 또한, Hsppk는 허프만 클럭 발생기로부터 클럭됨으로써 허프만 스캔 체인에 접속된다.
B.5.3.2 Imodel
Imodel은 입력으로서 토큰 버퍼 기동 출력 게이트 논리(bsogl)와 출력으로서 역양자화기(inverse quantizer)를 갖는다. 토큰 버퍼로부터의 입력은 block_end 신호를 더한 16 비트로 "팩된 데이타"이고, bsogl로부터의 입력은 한개의 wirestream_enable이다. 출력은 11 비트 토큰 포트이다. 모든 인터페이스는 2선식 인터페이스 프로토콜에 의해 제어된다. Imodel은 그 자신의 클럭 발생기와 스캔 체인을 갖는다.
B.5.4 블럭 기술
B.5.4.1 Hsppk
Hsppk는 허프만 디코더로부터 17 비트 데이타를 취하고 토큰 버퍼로 16 비트 데이타를 출력한다. 이것은 먼저 입력 데이타를 12 비트 워드로 절단하거나 또는 분할하고(truncating or splitting), 다음에 이들 워드를 16 비트 포맷으로 팩킹함으로써 수행된다.
B.5.4.1.1 분할
Hsppk는 역허프만으로부터 17 비트 데이타를 수신한다. 이 데이타는 다음과 같은 포맷을 사용하여 12 비트로 포맷된다.
여기서, F= 지정 포맷, E = 확장 비트, R = 런 비트, L = 길이 비트 (부호 크기로) 또는 비-DA1TA토큰 비트, x =무관(don't care)를 가리킨다.
FLLLLLLLLLFormat 0
ELLLLLLLLLLLFormat Oa
FRRRRRR00000Format 1
정상적인 토큰은 다음 형태,
EXXXXXXLLLLLLLLLLL
를 갖는 바닥의 12 비트만을 점유한다.
이것은 포맷 0a으로 절단된다.
그러나, DATA 토큰은 형태,
ERRRRRRLLLLLLLLLL
로 각각의 워드에 런과 레벨을 갖는다:
이것은 포맷되어 분리된다.
ERRRRRRLLLLLLLLLLL -> FRRRRRR00000Format 1
ELLLLLLLLLLLFormat 0a
또는 만약 런이 제로이면 포맷 0이 사용된다.
E000000LLLLLLLLLLL ->FLLLLLLLLLLLFor mat 0
포맷 0에서 확장 비트는 손실되어 1로 간주된다. 따라서, 확장비트가 제로 인 곳에서 사용될 수 있다. 이 경우, 포맷 1이 무조건적으로 사용된다.
B.5.4.1.2 팩킹
분할한 후, 모든 데이타 워드는 12 비트 폭이다. 네 개의 12 비트 워드 모 두는 세 개의 16 비트 워드로 "팩"된다.
테이블 B.5.1 팩킹 방법
B.5.4.1.3 버퍼의 플러싱(flushing)
본 발명의 DRAM 인터페이스는 버퍼에 기록하기 전에 32개의 16비트로 "팩"된 워드인 블럭을 모은다. 이것은 만약 블럭이 단지 부분적으로 완전하다면 데이타가 스트림의 끝의 DRAM 인터페이스에 끼워질 수(get stuck) 있다는 것을 의미한다.
이것에 의하여, 플러싱 메카니즘(flushing mechanism)이 요구된다. 따라서, Hsppk는 DRAM 인터페이스에 신호를 주어 현재 부분적으로 완전한 블럭에 이것을 무조건 기록하게 한다.
B.5.4.2.1 Imup (분해기(unpacker))
Imup는 세 가지 기능을 수행한다 :
4) 16 비트 포맷으로부터 12 비트 워드로 데이타를 분해하는(unpacking) 기능
테이블 B.5.2 분해하는 방법
5) 토큰 버퍼의 플러싱(flushing) 동안 정확한 데이타를 유지하는 기능.
DRAM 인터페이스가 플러싱할 때, 현재의 부분적으로 완전한 블럭을 무조건 기록함으로써 쓸모없는 데이타가 블럭에 남게 된다. imup은 쓸모없는 데이타를 삭제, 즉 블럭의 끝까지 FLUSH 토큰으로부터 모든 데이타를 삭제하여야만 한다.
6) 기동 기준이 충족될 때까지 데이타를 제지(holding back)하기.
블럭으로부터 데이타의 출력은 서로 다른 각각의 스트림에 대해 버퍼 기동으로부터 "유효"(stream_enable)가 수용되는 조건적(conditional)인 것이다. 결국, 12비트 데이타가 hsppk로 출력된다.
B.5.4.2.2 Imex (확장기(EXpander))
본 발명에서, Imex는 모든 런 길이(run length) 코드에서 다음에 레벨이 오는 제로 런(runs of zeros)으로 확장시킨다.
B.5.4.2.3 Impad (패더(PADder))
Impad는 모든 DATA토큰 바디(bodies)가 64 (또는 그 이상) 워드를 포함하게 한다. 이것은 토큰의 마지막 워드를 제로로 패딩(padding)함으로써 이것을 수행한다. 바더에 64 워드 이상을 갖는 지에 대해 DATA 토큰이 검사되지는 않는다.
B.5.5 블럭 구현
B.5.5.1 Hsppk
일반적으로, 분할과 팩킹 모두는 단일 사이클에서 수행된다.
B.5.5.1.1 분할
먼저, 포맷이 결정되어야 한다.
그리고 포맷 비트가 결정되어야 한다.
만약 포맷 1이 사용되면, 코드의 레벨이 아직 출력되지 않았기 때문에 다음 사이클에서 새로운 어떠한 데이타도 수용되어서는 안된다.
B.5.5.1.2 팩킹
팩킹 절차는 네개의 유효 데이타 입력 마다 순환한다. 16 비트 워드 출력이 유지되어 있고 연속하는 워드인 마지막 유효 워드로부터 형성된다. 만약 이것이 유효하지 않으면, 출력이 유효하지 않다. 절차는 다음과 같다 :
테이블 B.5.3 팩킹 절차
여기서, x는 정의되지 않은 비트이다.
유효 사이클 0 동안, 워드가 유효하지 않기 때문에 어떠한 워드도 출력되지 않는다.
유효 사이클 수는 링 카운터에 유지된다. 이것은 분할기로부터의 유효 데이 타와 수용된 출력에 의해 증가된다.
FLUSH (또는 picture_end) 토큰이 수신되고 토큰 자신이 출력 준비가 될 때, 플러시 신호도 역시 DRAM 인터페이스로 출력되어 유효 사이클을 제로로 리셋시킨다. FLUSH 토큰이 사이클 3에 결코 도달하지 아니하면, 상기 플러시 신호는 토큰 그 자신이 출력될 수 있도록 유효 사이클만큼 지연되어야만 한다.
B.5.5.2 Imodel
B.5.5.2.1 Imup (분해기(unpacker))
팩커(packer)에서와 같이, 마지막 유효 입력은 저장되고, 다음 입력과 결합 되어, 분해(unpacking)하도록 한다.
테이블 B.5.4 분해 절차
여기서, x는 정의되지 않은 비트를 나타낸다.
유효 사이클은 링 카운터에 의해 유지된다. 분해된(unpacked) 데이타는 토큰의 데이타, 플러시 및 그것으로부터 디코딩된 PICTURE_END를 포함한다. 부수적으로, 분해된 데이타로부터 포맷 및 확장 비트가 디코딩된다.
토큰을 디코딩하고 imex로 전달되도록,
FLUSH (또는 picture_end) 토큰이 분해되어 imex로 출력될 때, DRAM 인터페이스로부터 블럭 종료 신호가 수신될 때까지 모든 데이타가 삭제된다 (유효로 강제된 로우(valid forced low)).
B.5.5.2.2 Imex(확장기)
본 발명에 따르면, imex는 런/레벨 코드를 확장시키기 위한 네 개의 상태 머신(four state machine)이다. 상기 머신은 다음과 같다.
· 상태0 : 런 코드로부터 런 카운트를 로딩한다.
· 상태1 : 런 카운트를 감소시켜 제로를 출력한다.
· 상태2 : 데이타를 입력하고 레벨을 출력한다. 디폴트 상태.
· 상태3 : 불법(illegal) 상태,
B.5.5.2.3 Impad(패더)
Imex에 의해 Impad에 DATA 토큰 헤더가 통지된다. 다음에, 이것은 토큰의 바디에서 계수의 수를 카운팅한다. 만약 64 계수가 있기 전에 토큰이 종료하면, 64 계수까지 완료하기 위해 토큰의 끝에서 제로 계수가 삽입된다. 예를 들어, 확장되지 않은 데이타 헤더 다음에 64 제로 계수가 삽입된다. 64 이상의 계수를 갖는 DATA 토큰은 impad에 의한 영향을 받지 않는다.
B.5.6 레지스터
본 발명의 imodel과 hsppk는 이들의 스누퍼는 제외하고 마이크로프로세서 레지스터를 갖지 않는다.
테이블 B.5.5 Imodel & hsppk 레지스터
여기서, V=유효 비트 ; A=허용 비트 ; E=확장 비트 ; D=데이타 비트
B.5.7 검증
선택된 스트림은 Lsim 시뮬레이션을 통해 실행한다.
B.5.8 테스팅
입력에서 imedel의 테스트 범위(test coverage)는 토큰 버퍼 출력 스누퍼를 통해서이고, 출력에서는 imodel 자신의 스누퍼를 통해서이다 논리는 imodel 자신의 스캔 체인에 커버된다.
hsppk의 출력은 허프만 출력 스누퍼를 통해 액세스할 수 있다. 논리는 허프 만 스캔 체인을 통해 볼 수 있다.
B.6절 버퍼 기동
B.6.1 소개
본 절은 본 발명에 따른 버퍼 기동의 방법 및 구현을 설명한다.
B.6.2 개요
화상의 스트림이 유연하고 연속적으로 디스플레이되도록 보장하기 위해, 디 코딩이 시작되기 전에 많은 양의 데이타가 수집되어야 한다. 이것을 기동 조건(start-up condition)이라고 한다. 코딩 규격은 대략 수집될 필요가 있는 데이타의 양으로 대략 번역될 수 있는 VBV 지연(delay)을 명시한다. 이것은 "버퍼 기동"의 목적은 디코딩될 수 있도록 데이타가 토큰 버퍼로부터 진행하기 전에 모든 스트림이 그 기동 조건을 충족시키도록 보장하는 것이다. 이는 토큰 버퍼 (즉, 역모델러에서)의 출력에 이론적인 게이트(notional gate) (출력 게이트)에 의해 버퍼에 유지되어 있다. 이 게이트는 그 기동 조건이 충족되면 스트림에 대해 단지 개방될뿐이다.
B.6.3 인터페이스
Bscntbit (버퍼 기동 비트 카운터)는 데이타경로에 있고, 2선식 인터페이스로서 통신하고, 마이크로프로세서에 접속되어 있다. 또한 이것은 2선식 인터페이스와 함께 bsogl (버퍼 기동 출력 게이트 논리)로 분기한다. 2선식 인터페이스를 거치는 Bsogl은 출력 게이트를 구현하는 imup (역모델러 분해기)를 제어한다.
B.6.4 블럭 구조
제130도에 도시된 바와 같이, Bscntbit는 시작 코드 검출기와 코드화된 데이타 버퍼간의 데이타경로에 놓인다. 이 단일 사이클 블럭은 블럭을 떠나는 데이타의 유효 워드를 카운팅하고, 그 수를 마이크로프로세서로부터 로딩될 기동 조건 (또는 타겟(targets))과 비교한다. 타겟이 충족되면 bsogl에게 통지된다. 데이타는 bscntbit에 의한 영향을 받지 않는다.
Bsogl는 (역모델러에서) bscntbit와 imup 사이에 놓인다. 실제로, 이것은 스트림이 그 타겟이 충족되었다는 마커의 큐(queue of indicator)이다 이 큐는 다른 "마커"가 imup에 의해 수용될 때 버퍼를 떠나는 (즉, imup에서 데이타 스트림에 수신된 FLUSH 토큰) 스트림을 따라 이동된다. 만약 이 큐가 비어 있다면 (즉, 그 기동 타겟을 아직 충족시키지 못한 아무런 스트림도 버퍼에 존재하지 않음)imup에서 스트림이 정체된다.
이 큐만이 한정된 깊이를 가지지만, 이것은 bsogl의 큐를 끊고 마이크로프로세서로 하여금 큐를 모니터할 수 있게 함으로써 무한히 확장될 수 있다. 이들 큐메커니즘은 각각의 내부 및 외부 큐(internal and external queues)라고 불리운다.
B.6.5 블럭 구현
B.6.5.1 Bsbitcnt (버퍼 기동 비트 카운터)
Bscntbit는 버퍼 기동으로 입력된 모든 유효 워드를 카운팅한다. 카운터 (bsctr)는 16-24 비트 폭의 프로그램 가능한 카운터이다. 또한, bsctr는 충분한 속도를 제공하기 위한 캐리 룩 어헤드(carry look ahead) 회로를 갖는다. Bsctr의 폭은 ced_bs_Prescale에 의해 프로그래밍된다. 이것은 항상 캐리를 전달하게 하는 비트 8-16을 강제로 하이가 되게 함으로서 수행한다. 그래서, 이들은 효율적으로 사용되지 않는다. 타겟(ced_bs_target)과 비교하기 위해 단지 상위 8 비트의 bsctr만이 사용된다.
이 비교(ced_bs_count >=ced_bs_target)는 bscmp에 의해 수행된다.
타겟은 스트림이 허프만 디코더에 있을 때 스트림으로부터 인출되어 마이크로프로세서에 의해 계산된다. 그래서, 이것은 스트림의 시작에서만이 종종 세팅될 것이다. 기동 전에, target_valid는 로우로 세팅되어 있다. ced_bs_ target을 기록함으로써 target_valid를 하이로 세팅시키고, bscmp에서 비교할 수 있게 한다. 이 비교가 ced_bs_count >= ced_bs_target을, 나타날 때, target_valid는 로우로 세팅된다. 이 타겟은 충족되었다.
타겟이 충족될 때 카운트가 리셋된다. 유의하여야 할 것은, 스트림의 끝에서는 리셋되지 않는다는 것이다. 또한, 만약 스트림이 끝나기 전이라면 타겟이 층족된 후 카운팅이 억제된다(disabled). 카운트는 255까지 포화(saturates)한다.
스트림 끝 (즉, 플러시)이 bsbitcnt에서 검출될 때, abs_flush_event가 발생 된다. 만약 스트림이 타겟이 충족되기 전에 끝나면, 역시 부수적인 이벤트(event)가 발생된다(bs_flush_before_target_met_event), 이들 임의의 이벤트가 발생할 때, 블럭이 정체된다. 이것으로 사용자는 다음 스트링의 타겟에 대한 검색을 다시 시작할 수 있거나, 또는 bs_flush_before_target_met_event 이벤트의 경우에, 1) target_met를 강제로 수행할 제로의 타겟을 기록하거나 또는 2) 타겟이 충족되지 않았다는 것에 유의하고, 마지막 스트림과 결합된 다음 스트림이 타겟에 도달할 때까지 다음 스트림이 계속 진행할 수 있게 한다. 그에 따라서, 다음 스트림에 대한 타겟이 조정될 수 있다.
B.6.5.2 BSOGL (버퍼 기동 출력 게이트 논리)
상기 기술한 바와 같이, Bsogl은 스트림이 자신의 타겟을 충족하였다는 마커의 큐이다. 큐 타입은 cad_bs_queue (내부(0) 또는 외부(1))로서 세팅된다. 큐의 깊이는 코드화된 데이타 버퍼, 허프만, 및 토큰 버퍼에 존재할 수 있는 충족된 스트림의 최대 수를 결정한다. 이 수가 도달될 때 (즉, 큐는 채워져있다), bsogl은 강제로 데이타경로를 bsbitcnt에서 정체시킨다.
내부 큐를 사용하게 되면 마이크로프로세서로부터 어떠한 행위도 필요하지 않다. 그러나, 만약 큐의 깊이를 증가시킬 필요가 있다면, 외부 큐가 세팅될 수 있다 (세팅되어야 하는 cad_bs_queue, 인에블되어 액세스가 포기된 target_met_event 및 stream_ced_event로의 액세스를 얻기 위하여 ced_bs_access를 세팅시킴으로써).
외부 큐 (마이크로프로세서에 의해 유지된 카운트)가 내부 큐로 삽입된다. 외부 큐는 2개의 이벤트, 즉 target_met_event와 stream_end_event로서 유지된다. 이들은 간단히 각각 service_queue_input 및 service_queue_output 그리고 레지스터 ced_bs_enable_nxt_stream이라고 할 수 있다. 실제로, target_ met_event는 큐를 공급하는 내부 큐의 업 스트림 끝(the up stream end)이다. 이와 유사하게, ced_bs_enable_nxt_stream는 큐를 소비하는 내부 큐의 다운 스트림 끝(the down stream end)이다. 이와 유사하게, stream_end_event는 다운 스트림 큐을 공급하기 위한 요청이고, stream_end_event는 ced_bs_enable_nxt_stream을 리셋시킨다.
두 이벤트는 다음과 같이 제공되어야 한다.
(상술한 방법에 의해) 큐 타입은 임의의 시간에 내부에서 외부로 변할 수 있지만, 이들은 외부 큐가 비어있을 때 (상기 "queue==0"로부터) 리셋되어야 하는 ced_bs_access, target_met_event 및 stream_end_event를 마스크된 것으로 그리고 액세스를 포기된 것으로 세팅시킴으로 그리고 액세스를 포기된 것으로 세팅시킴으로서 외부에서 내부로 변할 수 있다.
다른 한편, 스트림 기동 조건 검사를 억제하고, ced_bs_queue (외부)를 세 팅하고, target_met_event 와 stream_end_event를 마스킹하고(mask), cad_bs_enable_nxt_stream를 세팅시킨다. 이러한 방법으로, 모든 스트림이 항상 사용된다(enabled).
B.6.6 마이크로프로세서 레지스터
테이블 B.6.1 Bscntbit 레지스터
테이블 B.6.2 Bsogl 레지스터
테이블 B.6.2 Bsogl 레지스터
여기서,
· D는 레지스터 비트
· x는 존재하지 않는 레지스터 비트
· r은 예약된 레지스터 비트
· 이와 같은 레지스터 ced_bs_access에 액세스하기 위해서는 1로 세팅되어, 인터럽트 서비스 루틴이 아닌 한 다시 1을 판독할 때까지 폴되어야 한다(polled). ced_bs_access를 제로로 세팅함으로써 액세스가 주어진다.
B.7절 DRAM 인터페이스
B.7.1 개요
본 발명에서, 공간 디코더, 시간 디코더 및 비디오 포맷터 각각은 특수한 칩을 위한 DRAM 인터페이스를 구비한다. 세개의 모든 디바이스에서, DRAM 인터페이스의 기능은 칩에서 외부 DRAM으로 그리고 어드레스 발생기에 의해 공급된 블럭 어드레스를 거쳐 외부 DRAM에서 칩으로 데이타를 전송하는 것이다.
DRAM 인터페이스는 전형적으로 어드레스 발생기 및 데이타가 전송되는 다양한 블럭의 클럭 모두에 비동기성인 클럭으로부터 동작한다. 그러나, 이 비동기 메커니즘은 거의 동일한 주파수에서 클럭이 동작하기 때문에 쉽게 관리된다.
데이타는 흔히 DRAM 인터페이스와 칩의 나머지 부분 사이를 64 바이트의 블럭 (한가지 예외는 시간 디코더에서의 예측 데이타(predicion data)이다)으로 전송된다. "스윙 버퍼(swing buffer)"라고 하는 디바이스에 의해 전송이 발생한다.
이것은 반드시 칩의 다른 부분이 다른 RAM을 비우거나 또는 채우는 동안 DRAM 인터페이스가 한 RAM을 채우거나 또는 비우는 이중-버퍼 구성(double-buffered configuration)으로 동작되는 한쌍의 RAM이다. 어드레스 발생기로부터 어드레스를 운반하는 개별적인 버스는 각각의 스웡 버퍼와 결합되어 있다.
각각의 칩은 네 개의 스윙 버퍼를 갖지만, 이들 스윙 버퍼의 기능은 각각의 경우에 있어서 다르다. 공간 디코더에서, 한 개의 스윙 버퍼는 DRAM으로 코드화된 데이타를 전송하는데 사용되고, 또 다른 스윙 버퍼는 DRAM으로부터 코드화된 데이타를 판독하는데 사용되며, 세 번째는 DRAM으로 토큰화된 데이타를 전송하는데 사용되고, 네 번째는 DRAM으로부터 토큰화된 데이타를 판독하는데 사용된다. 시간 디코더에서, 한개의 스윙 버퍼는 DRAM으로 인트라 또는 예측된(intra or predicted) 화상을 기록하는데 사용되고, 두 번째는 DRAM으로부터 인트라 또는 예측된 데이타를 판독하는데 사용되고, 나머지 두개는 전방 및 후방 예측 데이타(forward and backward prediction data)를 판독하는데 사용된다. 비디오 포맷터에서, 한개의 스윙 버퍼는 DRAM으로 데이타를 전송하는데 사용되고, 휘도(Y) 및 적색 및 청색 차 데이타 (각각 Cr과 Cb)에 대해 각각 하나씩인 다른 세 개의 스윙 버퍼는 DRAM으로부터 데이타를 판독하는데 사용된다.
다음 절은 본 발명에 따른 DRAM 인터페이스의 동작을 설명하는데, 상기 DRAM 인터페이스는 공간 디코더 DRAM 인터페이스의 동작과 반드시 동일하고 한 개의 기록 스윙 버퍼와 한 개의 판독 스윙 버퍼를 갖는다. 이것은 제131도의 "DRAM 인터페이스"에 서술되어 있다.
B.7.2 범용 DRAM 인터페이스
제131도를 참조하면, 어드레스 발생기(420) 및 데이타를 공급하여 취하는 블럭으로의 인터페이스 모두는 2선식 인터페이스(two wire interfaces)이다. 어드레스 발생기(420)는 수신하는 제어 토큰의 결과로서 어드레스를 생성하거나 또는 고정된 어드레스의 시퀀스를 생성할 수 있다. DRAM 인터페이스(421)는 어드레스 발생기와 결합된 2선식 인터페이스를 특정한 방법으로 취급한다. 어드레스를 수신할 준비가 되어 있을 때 수용 라인(accept line)을 하이(high)로 유지하는 대신에, 유효 어드레스를 공급하기 위해 어드레스 발생기를 대기하고, 상기 어드레스를 처리한 후, 한 클럭 주기 동안 수용 라인을 하이로 세팅시킨다. 따라서, 이는 요청/확인응답 (REQ/ACK) 프로토콜을 구현한다.
DRAM 인터페이스의 독특한 특징은 어드레스 발생기, 및 다른 것과는 완전히 독립적으로 데이타를 공급하거나 또는 수용하는 블럭과 통신할 수 있는 능력이다. 예를 들어, 어드레스 발생기는 기록 스윙 버퍼의 데이타와 연관된 어드레스를 생성할 수 있지만, 기록 스윙 버퍼가 외부 DRAM(422)에 기록될 준비가 된 데이타의 블럭이 존재한다는 것을 신호할 때까지 어떠한 행위(action)도 취해지지 않을 것이다. 그러나, 어드레스 발생기로부터 적당한 버스 상에 어드레스가 공급될 때까지 어떠한 행위도 취해지지 않는다. 또한, 일단 기록 스윙 버퍼에 있는 한 개의 RAM이 데이타로 채워지면, 데이타 입력이 정체 (2선식 인터페이스 수용 신호가 로우로 세팅)되기 전에 다른 것이 DRAM 인터페이스 측에 완전히 채워져 "스윙(swung)"될 수 있다.
본 발명의 DRAM 인터페이스의 동작을 이해하는데 있어서, 적절히 컨피그된 시스템에서 DRAM 인터페이스는 적어도 스윙 버퍼와 칩의 나머지 부분 간의 모든 평균 데이타 속도의 합계만큼 신속하게 스윙 버퍼와 외부 DRAM 사이에 데이타를 전송 할 수 있을 것이다.
각각의 DRAM 인터페이스는 다음에 서비스할 스윙 버퍼를 결정하는 방법을 포함한다. 일반적으로, 이는 서비스되는 스윙 버퍼가 최근에 가장 적게 순서가 돌아 온(has less recently had a turn) 이용 가능한 다음 스윙 버퍼인 "라운드 로빈 (round robin)"이거나, 또는 일부 스윙 버퍼가 다른 것보다 높은 우선순위를 갖는 우선순위 디코더(a priority decoder)일 것이다. 두 가지 경우에서, 다른 모든 요청보다 높은 우선 순위를 갖는 리프레쉬 요청(refresh request) 발생기로부터 부수적인 요청이 나을 것이다. 상기 리프레쉬 요청은 마이크로프로세서 인터페이스를 통해 프로그래밍될 수 있는 리프레쉬 카운터로부터 발생된다.
B.7.2.1 스윙 버퍼
제132도는 기록 스윙 버퍼를 도시한다. 동작은 다음과 같다.
1) 유효 데이타가 입력(430)에 제시된다 (데이타 인(data in)). 각각의 데이타가 수용됨에 따라 유효 데이타가 RAM1에 기록되고 어드레스가 증가된다.
2) RAMI이 차(full)면, 입력측은 제어를 포기하고 이제 RAM1이 판독될 준비가 되어 있다는 것을 가리키는 신호를 판독측으로 보낸다. 이 신호는 두개의 비동기성 클럭 영역(clock regimes) 사이를 지나 세개의 동기화 플립-플롭을 통과한다.
3) 입력측에 도착할 데이타의 다음 항목이 여전히 비어 있는 RAM2에 기록된다.
4) 라운드 로빈 또는 우선순위 인코더가 판독될 스윙 버퍼의 차례라는 것을가리킬 때, DRAM 인터페이스는 RAM1의 내용을 판독하고 그것을 외부 RAM1에 기록 준비가 되어 있다는 것을 한다. 다음에 (2)에서와 같이 이제 RAM1이 다시 채워질 준비가 되어 있다는 것을 가리키는 신호가 비동기성 인터페이스로 다시 전송된다.
5) 만약 DRAM 인터페이스가 RAM1을 비우고, 입력측이 RAM2를 채우기 전에 "스윙"하면, 이때 스윙 버퍼에 의해 연속적으로 데이타가 수용될 수 있지만, 그렇지 않고 RAM2가 채워질 때 스윙 버퍼는 입력측에 의해 사용되도록 RAM1이 "스윙"될 때까지 그 수용 신호를 로우로 세팅시킬 것이다.
6) 이 프로세스는 무한히 반복된다.
판독 스윙 버퍼의 동작은 유사하지만, 입력 및 출력 데이타 버스가 예약된다.
B.7.2.2 외부 DRAM 및 스윙 버퍼의 어드레싱
DRAM 인터페이스 이용 가능한 메모리 대역을 최대화하도록 설계되어 있다. 결국, 이는 데이타의 각각의 8x8 블럭이 동일한 DRAM 페이지에 저장되도록 배열된다. 이와 같이 한 행 어드레스 다음에 많은 열의 어드레스가 공급되는 DRAM 고속 페이지 액세스 모드가 충분히 이용될 수 있다. 또한, 외부 DRAM에의 데이타 버스가 8,16 또는 32 비트 폭으로 될 수 있게 하는 시설(facility)에 제공됨으로서, 사용된 DRAM의 크기가 특정 어플리케이션의 크기 및 대역 구비 조건에 일치될 수 있다.
(공간 디코더상의 DRAM 인터페이스가 어떻게 실행하는 지를 정확하게 보여주는) 본 예에서, 어드레스 발생기는 블럭 어드레스와의 DRAM 인터페이스를 각각의 판독 및 기록 스윙 버퍼에 공급한다. 이 어드레스는 DRAM에 대한 행 어드레스로서 사용된다. 열 어드레스의 6 비트는 DRAM 인터페이스 그 자체로서 공급되고, 이들 비트도 역시 스윙 버퍼 RAM에 대한 어드레스로서 사용된다. 스윙 버퍼로의 데이타 버스는 32 비트 폭으로, 만약 외부 DRAM으로의 버스 폭이 32 비트 미만이면, 기록 스윙 버퍼로부터 다음 워드가 판독되거나 또는 판독 스윙 버퍼에 다음 워드가 기록되기 전에 (판독 및 기록은 외부 DRAM에 대한 전송 방향을 가리킴) 두 개 또는 네 개의 외부 DRAM이 액세스되어야 한다.
시간 디코더 및 비디오 포맷터의 경우에 상황은 보다 복잡하다. 이들은 이 하에서 개별적으로 서술된다.
B.7.3 DRAM 인터페이스 타이밍
본 발명에 있어서, DRAM 인터페이스 타이밍 블럭은 타이밍 체인(timing chains)을 사용하여 정확한 시스템 클럭 주기의 1/4로 DRAM 신호의 에지를 위치시킨다. 위상 잠금 루프(Phased locked loop)에서 나오는 두개의 직교 클(quadrature clocks)이 사용된다. 이들은 합성되어 이론적인 2x 클럭을 형성한다.
다음에 "2x 클럭"의 반대 위상 상에서 병렬인 두 개의 쉬프트 레지스터로부터 임의의 한 체인이 형성된다.
무엇보다도, 페이지 시작 사이클을 위한 한 개의 채널 그리고 판독/기록/리 프레쉬 사이클을 위한 다른 체인이 존재한다. 각각의 사이클의 길이는 마이크로프로세서 인터페이스를 통해 프로그래임될 수 있고, 그 후 페이지 시작 체인은 고정된 길이를 가지며 사이클 체인의 길이는 페이지 시작 동안 적절히 변한다.
리셋시, 체인이 클리어되고(cleared) 펄스가 생성된다. 이 펄스는 DRAM 인터페이스로부터의 상태 정보로서 명령되는 체인을 따라 이동한다. DRAM 인터페이스 클럭은 이 펄스에 의해 생성된다. 각각의 DRAM 인터페이스 클럭 주기는 DRAM의 한 클럭에 대응한다. 그래서, DRAM 사이클이 서로 다른 길이를 가짐에 따라, DRAM 인터페이스 클럭은 일정한 속도가 아니다.
또한, 타이밍 체인은 상기 체인으로부터의 펄스와 DRAM 인터페이스로부터의 정보를 합성하여 출력 스토로브 및 인에이블(output strobes and enables) (notcas,notras, notwe, notoe)을 생성한다.
B.8절 역양자화기
B.8.1 소개
본 절은 본 발명에 따라 역양자화기(iq)의 목적, 동작 및 구현을 설명한다.
B.8.2 개요
역양자화기는 모두 데이타스트림 내에서 전송되는 양자화 계수, 양자화 가중치(quantization weights) 및 스텝 크기(step sizes)로부터 계수를 재구성한다.
B.8.3 인터 페이스
iq는 데이타경로의 역모델러(inverse modeler)와 역 DCT 사이에 놓이고, 마 이크로프로세서에 접속된다. 데이타경로 접속은 2선식 인터페이스를 거쳐서 이루어진다. 입력 데이타는 10 데이타 폭이고, 출력 데이타는 11 비트 폭이다.
B.8.4 역양자화의 산술
B.8.4.1 H26l 식
인트라 모드(intra mode)로 코드화된 블럭에 대해
코드화된 다른 모든 블럭에 대해:
B.8.4.2 JPEG 식
B.8.4.3 MPEG 식
인트라 모드로 코드화된 블럭에 대해:
1024는 허프만이 제로로 리셋되어 있는 예측기를 위해 DC 경우에 부가된다. 코드화된 모든 블럭에 대해
B.8.4.4 JPEG 변동 식
B.8.4.5 다른 모든 토큰
DATA 토큰을 제외한 모든 토큰은 양자화되지 않은 iq를 통과하여야 한다.
여기서,
플로어(a)는 정수를 반환하여
Qi는 양자화 계수이다.
Ci는 재구성된 계수(reconstructed coefficients)이다.
Wi,j는 양자화 테이블 매트릭스의 값.
i는 지그재그를 따른 계수 인덱스.
j는 양자화 테이블 매트릭스 번호(0<=j<=3)
B.8.4.6 혼합된 다중 규격
상기 모든 규격 및 편차 (또한 iq에 의해 바뀌지 않아야 하는 제어 데이타)는 단일 식으로 맵핑될 수 있다.
부수적인 후 역 양자화 함수(post inverse quantisation)로서
* 1024를 더한다.
* 부호 크기로부터 2의 보수 표현으로 변환한다.
* 제로에 가장 가까운 기수로 모든 우수를 라운드한다(round).
* 결과를 +2047 또는 -2048까지 포화시킨다.
* 규격의 각각의 편차에 대한 변수 k,x,y 및 이들이 사용하는 함수가 테이블 B.8.1에 도시되어 있다.
테이블 B.8.1 제어 디코딩
B.8.5 블럭 구조
테이블 B.8.4.6과 테이블 B.8.1로부터, 다수의 규격 역양자화기에 대해 단일 구조가 사용될 수 있다는 것을 알 수 있다. 자신의 연산 블럭 다이어그램이 제133도의 "산술 블럭"에 도시된다.
산술 블럭의 제어는 기능적으로 두 부분으로 구분될 수 있다.
상태 레지스터 또는 양자화 테이블을 로딩하기 위해 토큰을 디코딩하는 부분, 및 상태 레지스터를 제어 신호로 디코딩하는 부분.
토큰은 다음 사이클을 제어하는 inca에서 즉, iqcb의 레지스터 뱅크에서 디코딩된다. 또한, 이는 igram에서 네 개의 양자화 테이블로의 액세스를 제어한다. 산술 즉, 두개의 승수와 후함수는 iqarith에 존재한다. iq에 대한 완전한 블럭 다이어그램이 제134도에 도시된다.
B.8.6 블럭 구현
B.8.6.1 Iqca
본 발명에 있어서, iqca는 iqram에 대한 토큰 그리고 iqcb의 레지스터를 제 어 신호로 디코딩하는데 사용된 상태 머신(state machine)이다. 이 상태 머신은 각각의 새로운 토큰에 의해 리셋되기 때문에 각각의 토큰에 대한 상태 머신으로서 보다 잘 서술된다.
QUANT_SCALE (B.8.7.4 "QUANT_SCALE'를 창조)과 QUANT_ TABLE (B.8.7.6 "QUANT_TABLE"를 참조)에 대한 코드는 다음과 같다 :
서브상태(substate)가 토큰 내의 상태일 때, QUANT_SCALE은 예를 들어 한 개의 서브상태만을 갖는다. 그러나, QUANT_TABLE은 한 개가 헤더이고 다른 하나가 토큰 바디(token body)인 두 개를 갖는다.
상태 머신은 PLA로서 구현된다. 인식되지 않은 토큰은 어떠한 워드라인도 상승(rise)시키지 않고 PLA로 하여금 디폴트 (해가 없는(harmless)) 제어를 출력하게 한다.
부수적으로, inca는 BodyWord 카운터로부터 iqram에 어드레스를 공급하고, 예를 들어 확장되지 않은 QUANT_TABLE (B.8.7.4를 참조)에서 스트림에 워드를 삽입한다. 이는 출력을 유효로 유지하면서 입력을 정체시킴으로써 달성된다. 워드는 연속하는 블럭 (iqcb 또는 iqarith)에 올바른 데이타로 채워질 수 있다.
inca는 2선식 인터페이스에 의해 제어되는 데이타경로의 단일 사이클이다.
B.8.6.2 iqcb
본 발명에 있어서, iqcb는 iq 상태 레지스터를 유지(holds)한다. iqca의 제어하에, 이는 데이타경로에/로부터 이들을 로딩하거나 또는 로딩하지않는다(loads or unloads).
상태 레지스터는 XY 승수항과 후양자화 함수를 제어하기 위해 iqarith를 위해 제어선(control wires)으로 디코딩된다. (B.8.1을 참조한다).
데이타경로의 부호 비트는 여기서 분리되어 후양자화 함수로 보내진다. 또한, 여기서 데이타경로 상의 제로값 워드가 검출된다. 다음에 산술은 무시되어 데이타경로 상으로 제로 멀티플렉싱된다. 이는 iq의 "제로 인 ; 제로 아웃(zero in; zero out)" 명세에 부응하는 가장 쉬운 방법이다.
상태 레지스터는 레지스터 iq_access가 1로 세팅되어 있을 때에만 마이크로프로세서부터 액세스될 수 있고 다시 1을 기록한다. 이와 같은 상황에서, iqcb가 데이타경로를 정체시킴으로써, 레지스터가 안정한 값을 가질 수 있게 하고, 데이타 경로의 어떠한 데이타도 손상되지 않게 한다.
Iqcb는 2선식 인터페이스에 의해 제어되는 데이타경로의 단일 사이클이다.
B.8.6.3 Iqram
Iqrma은 각각 64*8 비트인 최대 네 개의 양자화 테이블 매트릭스를 유지하여야 한다. 그래서, 이는 사이클마다 한번 판독하거나 또는 한번 기록할 수 있는 256*8 비트인 여섯 개의 트랜지스터 RAM이다. 이 RAM은 iqca로부터 그 제어 및 기록 데이타를 수신하는 2선식 인터페이스 논리로서 수용된다. 이는 iqarith로 데이타를 출력해낸다. 이와 유사하게, igram은 iqcb와 같이 데이타경로에서 동일한 사이클을 점유한다.
RAM은 iq_access가 다시 1을 판독할 때 마이크로프로세서로부터 판독되고 기록될 수 있다. 이 RAM은 키홀 레지스터인 iq_qtm_keyhole의 뒤에 놓이고, iq_qtm_keyhole_addr에 의해 액세스된다. iq_qtm_keyhole를 액세스하는 것은 iq_qtm_keyhole_adds에 유지되어 있고 그것이 가리키는 어드레스가 증가되게 할 것이다. 이와 유사하게, iq_qtm_keyhole_addr가 직접 기록될 수 있다.
B.8.6.4 iqarith
iqarith는 파이프라인된 세개의 함수가 세개의 사이클로 분할된다. 이들 함 수는 이하에 설명된다 (제133도 참조).
B.8.6.4.1 XY 승수
이것은 데이타경로 승수 상으로 공급되는 5(X) 대 8(Y) 비트 캐리 저장 부호 없는 승수(bit carry save unsigned multiplier)이다. 이 승수와 피승수는 iqcb로부터 제어선과 함께 선택된다. 승산은 첫 번째 사이클에, 그리고 분리 가산기(resolving adder)는 두번째 사이클에 있다.
승수에의 입력에서, 데이타경로 상으로 출력된 QUANT_TABLE을 판독하기 위해 iqram에서 나오는 데이타가 데이타경로 상으로 멀티플렉싱될 수 있다.
B.8.6.4.2 (XY)*데이타경로 승수
이 13(XY) 대 12(데이타경로) 비트 캐리 저장 부호없는 승수는 블럭의 세 사이클로 분할된다. 세개의 부분 적(partial products)은 첫 번째 사이클에 있고, 일곱개의 부분 적은 두 번째 사이클에 있으며, 나머지 두개의 부분 적은 세번째 사이클에 있다.
승수로부터의 모든 출력이 2047(non_coefficient)미만이거나 또는 +2047/-2048로 포화되기 때문에, 상위의 12 비트는 결코 분리(resolved)될 필요가 없다. 따라서, 리졸브하는 가산기는 단지 2 비트 폭이다. 상위의 나머지 비트 상에서, 포화 신호(saturate signal)로서 제로 검출이면 충분하다.
B.8.6.4.3 후양자화 함수
후양자화 함수는
· 1024를 더하고,
· 부호 크기에서 2의 보수 표현으로 변환하고,
· 제로에 가장 가까운 기수로 모든 우수를 라운딩하며(round),
· 결과를 +2047 또는 -2048까지 포화시키고,
· 출력을 제로로 세팅한다(B.8.6.2 참조)
첫 번째 세 함수는 12 비트 가산기 (두 번째 및 세 번째 사이클을 통해 파이프라인된) 상에서 구현된다. 이것으로부터, 각각의 어떤 함수가 필요하고 다음에 이들이 단일 가산기에 결합된다는 것을 알 수 있다.
테이블 B.8.2 후양자화 가산기 함수
당해 기술 분야에서 통상의 기술을 가진자에게는 자명한 바와 같이, 결합될 때 이들은 상호 독립적이기 때문에 이들 함수를 다시 프로그래밍할 때 매우 주의하여야 한다.
포화 값, 제로 및 제로 + 1024는 세 번째 사이클 끝에서 데이타경로 상으로 멀티플렉싱 된다(muxed).
B.8.7 역양자화기 토큰
다음 개념은 응답하는 각각의 토큰 tp에 대한 역양자화기의 행위를 정의한 다. 또한, 모든 경우에 있어서, 토큰은 역양자화기의 출력으로 운반된다. 대부분의 경우, 토큰은 이하에 논의한 것을 제외하고 역양자화기에 의해 수정되지 않는다. 인식된 모든 토큰은 역양자화기의 출력으로 수정되지 않고 통과된다.
B.8.7.1 SEQUENCE_START
이 토큰은 레지스터 iq_Prediction 모드[1:0]과 iq_mpeg_indirection(1:0)을제로로 리셋되게 한다.
B.8.7.2 CODING_STANDARD
이 토큰은 디코딩되는 현재의 규격(MPEG, JPEG 또는 H.261)에 기초하여 iq_standard(1:0)이 적당한 값으로 로딩되게 한다.
B.8.7.3 PREDICT10N_MODE
이 토큰은 iq_prediction_mode[1:0]를 로딩한다. 비록 PREDICTION_MODE 토큰이 두 비트 이상을 운반할 지라도, 역양자화기는 두개의 최하위 비트만을 액세스 할 필요가 있다. 이들은 블럭이 인트라 코딩되었는지(intracoded) 혹은 아닌지를 결정한다.
B.8.7.4 QUANT_SCALE
이 토큰은 iq_quart_scale(4:0)를 로딩한다.
B.8.7.5 DATA
본 발명에서, 이 토큰은 실제 양자화 계수를 운반한다. 토큰의 헤드는 컬러 성분(color component)을 식별하는 두 개의 비트를 포함하고, 이들은 iq_component[1:0]로 로딩된다. 다음 64개의 토큰 워드는 양자화 계수를 포함한다. 이들은 역양자화 프로세스의 결과로서 수정되어 재구성된 계수로 교체된다.
만약 정확히 64개의 확장 워드가 토큰에 존재하지 않으면, 역양자화기의 행위는 정의되지 않는다.
역양자화기의 입력에서 DTAT 토큰은 양자화 계수를 운반한다. 이들은 단일 크기 포맷 (10개의 비트 + 부호 비트)으로 11개의 비트로 표현된다. 값 "마이너스 제로(minus zero)"가 사용되어서는 안되지만, 정확히 제로로 해석된다.
역양자화기의 출력에서 DTAT 토큰은 재구성 계수를 운반한다. 이들은 2의 보수 포맷 (11개의 비트 + 부호 비트)으로 12개의 비트로 표현된다. 출력에서 DTAT 토큰은 역양자화기의 입력에서 갖던 것과 같이 동일한 수의 토큰 확장 워드를 가질 것이다.
B.8.7.6 QUANT_TABLE
이 토큰은 새로운 양자화 테이블을 로딩하거나 또는 기존의 테이블을 판독해내는데 사용될 수 있다. 전형적으로, 역양자화기에서, 토큰은 비트 스트림으로부터 디코딩된 새로운 테이블을 로딩하는데 사용될 것이다. 기존의 테이블을 판독해내는 행위는 해당 테이블이 비트 스트림으로 인코딩될 것이라면 인코더의 전방 양자화기 (forward quantizer)에 유용하다.
토큰 헤드는 사용될 테이블 번호를 식별하는 두 개의 비트를 포함한다. 이 들 비트는 iq_component[1:0]에 놓인다. 이 레지스터는 이제 컬러 성분이 아니라 "테이블 번호"를 포함한다는 것에 유의한다.
만약 토큰 헤드의 확장 비트가 1이면, 역양자화기는 정확히 64개의 확장 토 큰 워드가 존재한다고 예상한다. 각각의 워드는 양자화 테이블 값으로 해석되어 장소 제로에서 시자괴는 연속하는 적당한 테이블의 장소에 놓인다. 각각의 확장 토큰 워드의 아흡 번째 비트는 무시된다. 또한 이 토큰은 정상적인 방법으로 변형되지 않은 역양자화기의 출력으로 전송된다.
만약 토큰 헤드의 확장 비트가 제로이면, 이때 역양자화기는 장소 제로에서 시작하는 적당한 테이블의 연속하는 장소를 판독해낼 것이다. 각각의 장소는 확장 토큰 워드 (아홉 번째 비트는 제로일 것이다)가 된다. 이 연산의 끝에서, 토큰은 정확히 64개의 확장 토큰 워드를 포함할 것이다.
이 토큰에 응답하는 역양자화기의 동작은 제로와 64를 제외한 모든 확장 워드수에 대해서 정의되어 있지 않다.
B.8.7.7 JPEG_TA1BLE_SELECT
이 토큰은 iq_ipeg_indirection으로/으로부터 테이블 번호에 대한 컬러 성분의 번역을 로딩하거나 또는 언로딩하는데 사용된다. 이들 번역은 JPEG 및 다른 규격에 사용된다.
토큰 헤드는 현재 진행중인 컬러 성분을 식별하는 두개의 비트를 포함한다.
이들 비트는 iq_component[1:0]에 놓인다.
만약 토큰 헤드의 확장 비트가 1이면, 이 토큰은 Iq_ipeg_indirectionp2 *iq_component(1:0) + 1:2*iq_component[1:0] 장소에 기록된 두개의 최하위 비트인 한개의 확장 워드를 포함하여야 한다. 방금 판독된 값은 토큰 확장 워드 (상위 7개의 비트가 제로일 것이다)가 된다. 이 연산의 끝에서, 이 토큰은 정확히 한개의 확장 워드를 포함할 것이다.
테이블 B.8.3 JPEG_TABLE_SELECT 행위
B.8.7.8 MPEG_TABLE_SELECT
이 토큰은 MPEG 규격을 통해 처리하는 동안 디폴트 또는 사용자 정의양자화 테이블을 사용할 것인지를 정의하는데 사용된다. 토큰 헤드는 두개의 비트를 포함한다. 헤더의 비트 제로는 iq_mpeg_indirection이 기록될 비트를 결정한다. 비트 1은 그 장소에 기록된다.
iq_mpeg_indirection[1:0] 레지스터가 SEQUENCE_START 토큰에 의해 클리어되기 때문에, 사용자가 정의한 양자화 테이블이 비트 스트림으로 전송되었다면 이 토큰만을 사용할 필요가 있을 것이다.
B.8.8 마이크로프로세서 레지스터
B.8.8.1 iq_access
임의의 iq 레지스터에 대한 마이크로프로세서 액세스를 얻기 위해, iq_acces's는 1로 세팅되어야 하고, 1을 다시 판독할 때까지 폴링되어야(Polled) 한다 (B.8.6.2를 참조). 이것이 실패하게 되면, 데이타경로에 의해 제어되는 레지스터가 여전히 판독되게 되어 안정하지 못하게 된다. igram의 경우, 액세스가 록 아웃(locked out)되어, 다시 제로를 판독한다.
iq_access에 제로를 기록하게 되면 데이타경로에 다시 제어를 물려주게 된다.
B.8.8.2 Iq_coding_standards[1:0]
이 레지스터는 역양자화기에 의해 구현된 코딩 규격을 유지한다.
테이블 B.8.4 코딩 규격 값
이 레지스터는 CODING_STANDARD 토큰에 의해 로딩된다.
비록 이것이 두개의 비트 레지스터이지만, 현재 메모리 맵에 8 비트가 할당 되고, 장래에는 상기 규격 이상을 처리할 수 있다.
B.8.8.3 iq_mpeg_indirection[1:0]
이 두개의 비트 레지스터는 어떤 양자화 테이블이 사용될 것인지의 레코드(arecord)를 유지하기 위해 MPEG 디코딩 동작 동안 사용된다.
iq_mpeg_indirection(0)은 인트라 코드화된 블럭에 대해 사용되는 테이블을 제어한다. 만약 이것이 제로이면, 이때 양자화 테이블 0이 사용되고 디폴트 양자화 테이블을 포함하는 것으로 예상된다. 만약 이것이 1이면, 이때 양자화 테이블 2가 사용되고 인트라 코드화된 블럭에 대해 사용자 정의 양자화 테이블(user defined quantization table)을 포함하는 것으로 예상된다.
이 레지스터는 MPEG_TABLE_SELECT 토큰에 의해 로딩되고, SEQUENCE_START 토큰에 의해 제로로 리셋된다.
B.8.8.4 Iq_ipeg_indirection[7:0]
이 여덟개의 비트 레지스터는 JPEG 스캔(scan)에서 발생하는 가능한 네개의 컬러 성분 각각에 대해 네개의 양자화 테이블중 어느 것이 사용될 것인지를 결정한다.
* 비트[1:0]는 성분 제로에 대해 사용될 테이블 번호를 유지한다.
* 비트[3:2]는 성분 1에 대해 사용될 테이블 번호를 유지한다.
* 비트[5:4]는 성분 2에 대해 사용될 테이블 번호를 유지한다.
* 비트[7:6]는 성분 3에 대해 사용될 테이블 번호를 유지한다.
이 레지스터는 JPEG_TABLE_SELECT 토큰에 의한 영향을 받는다.
B.8.8.5 iq_quant_scale[4:0]
이 레지스터는 양자화 스케일 인수(quantization scale factor)의 현재 값을 유지한다. 이 레지스터는 QUANT_SCALE 토큰에 의해 로딩된다.
B.8.8.6 iq_component[1:0]
이 레지스터는 흔히 양자화 테이블 매트릭스(QTM) 번호로 번역되는 값을 유지한다. 이는 많은 토큰에 의해 로딩된다.
DTAT 토큰 헤더는 이 레지스터가 처리될 블럭의 컬러 성분과 함께 로딩되게 한다. 이 정보는 iq_ipeg_indirection[7:0]과 관련있는 QTM 번호를 결정하기 위해 JPEG 및 JPEG 편차에만 사용된다. 다른 규격에서, iq_component[1:0]는 무시된다.
JPEG_TABLE_SELECR 토큰은 이 레지스터가 컬러 성분과 함께 로딩되게 한다. 다음에 이것은 토큰 바디에 의해 액세스되는 iq_ipeg_ indirection[7:0]의 인덱스로서 사용된다.
QUANT_SCALE 토큰은 이 레지스터가 QTM 번호와 로딩되게 한다. (토큰의 확장된 형태가 사용되는 경우) 이 테이블은 토큰으로부터 로딩되거나 또는 적당히 확장된 토큰을 형성하기 위해 이 테이블로부터 판독된다.
B.8.8.7 iq_prediction_mode[1:0]
이 두개의 비트 레지스터는 후속하는 블럭에 대해 사용될 예측 모드 (prediction mode)를 유지한다. 역양자화기가 이 정보를 이용하는 한가지 사용은 인트라 코딩이 사용될 것인지를 결정하는 것이다. 만약 레지스터의 비트 모두가 제로이면, 이때 후속하는 블럭이 인트라 코드화(intra coded)된다.
이 레지스터는 PREDICTION_MODE 토큰에 의해 로딩된다. 이 레지스터는 SEQUENCE_START 토큰에 의해 제로로 리셋된다.
iq_Prediction_mode[1:0]는 JPEG와 JPEG 편차 모드의 동작에 대해 어떠한 영향도 미치지 않는다.
B.8.8.8 Iq_ipeg_indirection[7:0]
Iq_ipeg_indirection은 컬러 성분을 QTM 번호로 번역하기 위해 룩업 테이블 (lookup table)로서 사용된다. 따라서, iq_component는 테이블 B.8.3에 도시된 바와 같이 iq_ipeg_indirection의 인덱스로서 사용된다.
토큰의 확장된 형태가 사용되는 경우, 이 레지스터 장소는 JPEG_TABLE_SELECT 토큰에 의해 직접 기록된다.
토큰의 확장되지 않은 형태가 사용되는 경우, JPEG_TABLE_SELECT 토큰에 의해 직접 판독된다.
B.8.8.9 Iq_quant_table[3:0] [63:0] [7:0]
각각의 양자화 테이블이 64개의 장소를 갖는 네개의 양자화 테이블이 존재한다. 각각의 장소는 8비트 값이다. 값 제로는 어떠한 장소에도 사용되어서는 안된다.
이들 레지스터는 B.8.6.3 "1gram", 기술된 RAM으로 구현된다.
이들 테이블은 QUANT_TABLE 토큰을 사용하여 로딩될 수 있다.
이들 테이블에 있는 데이타는 지그-재그 스캔 순서(zig-zag scan order)로 저장된다는 것에 유의한다. 많은 문서는 번호의 8x8 제곱 어레이(a square eight by eight array of numbers)로서 양자화 테이블 값을 표현한다. 흔히, DC용어(term)는 좌측에서 우측으로 진행하는 수평 주파수가 증가하고, 증가하는 수직 주파수가 위에서 밑으로 진행하는 수직 주파수가 증가함에 따라 상부 좌측에 위치한다. 이러한 테이블은 번호가 연속하는 "i"로서 양자화 테이블에 놓임에 따라 지그재그 스캔 경로를 따라 판독되어야만 한다.
B.8.9 마이크로프로세서 레지스터 맵
테이블 B.8.5 메모리 맵
B.8.10 테스트
입력에서 역양자화기에 대한 테스트 범위는 역모델러의 출력 스누퍼를 통해서이고, 출력에서는 역양자화기 자신의 스누퍼를 통해서이다. 논리는 역 양자화기 자신의 스캔 체인에 의해 제공된다(covered).
램테스트 신호(ramtest signal)가 보내지면(assertedd), iq_access를 참조하지 않고 igram에 액세스될 수 있을 것이다.
B.9절 IDCT
B.9.1 소개
역이산 코사인 변환(inverse discrete cosine transform. IDCT) 블럭에 대한 본 설명의 목적은 IDCT에 대한 엔지니어링 정보의 소오스를 제공하는데 있다. 이는 다음과 같은 정보를 포함한다.
* IDCT의 목적 및 주요 특징.
* 설계 및 검증 방법
* 구조
본 설명은 당해 기술 분야에서 숙련된 기술을 가지는 자에게 다음과 같은 작업을 용이하게 하거나 또는 돕기 위해 충분한 정보를 제공하는 것이다.
* "실리콘 매크로 함수"로서 IDCT의 이해
* IDCT를 다른 장치에 집적
* IDOr 실리콘을 위한 테스트 프로그램의 개발
* IDCT의 변형, 재설계 및 유지보수
* 전방 DCT 블럭의 개발
B.9.2 개요
이산 코사인 변환/지그재그 (DCT/ZZ)는 각각의 블럭이 8 픽셀 높이 대 8 픽셀 폭의 스크린(screen 8 pixels high by 8 pixels wide)의 영역을 표현하는 픽셀의 블럭에 대해 변환을 수행한다. 이 변환의 목적은 주파수에 따라 저장된 주파수 영역(frequency domain)에 픽셀 블럭을 표현하는 것이다. 인간의 눈이 화상의 DC 성분에 민감하지만 고주파수 성분에는 민감하지 못하기 때문에, 주파수 데이타는 인간의 눈의 감도에 따라 각각의 성분의 크기가 개별적으로 감소될 수 있게 한다.
이와 같은 크기 감소의 프로세스를 양자화(quantization)라고 한다. 양자화 프로세스는 화상에 포함된 정보를 감소시키는 것으로, 즉 양자화 프로세스는 손실하기 쉬운(lossy) 프로세스이다. 손실 프로세스(lossy Process)는 일부 정보를 제거함으로써 모든 데이타를 압축시킨다. 주파수 데이타는 제로로 양자화될 가능성이 큰 고주파수 모두가 연속적으로 보이도록 분류된다. 비록 일반적으로 런-길이 코딩이 손실되기 쉬운(lossy) 프로세스는 아니지만, 연속하는 제로는 런-길이(run-length)코딩 방법을 사용하여 양자화된 데이타가 데이타를 더욱 압축시킨다는 것을 의미한다.
IDCT 블럭 (이는 실제로 역 지그재그 RAM 또는 IZZ 및 IDCT를 포함한다)은 분류되어 있는 주파수 데이타를 취하고, 이것을 공간 데이타로 변환한다. 이와 같은 역 양자화 분류 프로세스는 IZZ의 기능이다.
IDCT 블럭이 일부를 형성하는 화상 복원 시스템은 픽셀을 정수로서 명시한 다. 이는 IDCT블럭이 정수 값을 취하여 만들어야 한다는 것을 의미한다. 그러나, IDCT 함수가 정수에 근거하고 있지 않기 때문에, 내부의 숫자 표현(internal number representation)은 내부의 정확도를 유지하기 위해 분수를 사용한다. 완전한 부동 소수점 산술이 바람직하지만, 본 발명에 서술된 구현은 고정 소수점 산술을 이용한다. 고정 소수점 산술을 사용하면 정확도가 약간 떨어지지만, 본 발명의 정확도는 H.261과 IEEE가 명시한 정확도를 능가한다.
B.9.3 설계 목적
본 발명에 따른 주 설계 목적은 최소의 실리콘 면적을 사용하는 기능적으로 올바른 IDCT 블럭을 설계하는 것이었다. 또한 본 설계는 명시된 동작 조건하에서 30MHz의 클럭 속도로 실행할 필요가 있었지만, 본 설계는 또한 장래를 고려하여 적응되도록 설계되었다. 장래에는 좀더 높은 클럭 속도가 요구될 것이고, 설계의 아키텍쳐는 이와 같은 가능성을 참작하고 있다.
B.9.4 IDCT 인터페이스 설명
IDCT 블럭은 다음과 같은 인터페이스를 갖는다.
* 12-비트 폭의 토큰 데이타 입력 포트
* 9-비트 폭의 토큰 데이타 출력 포트
* 마이크로프로세서 인터페이스 포트
* 시스템 서비스 입력 포트
* 테스트 인터페이스
* 재동기(resynchronizing) 신호
토큰 데이타 포트 모두는 상술한 표준 2선식 인터페이스 타입이다. 예시된 폭(widths)은 데이타 표현에서 비트 수를 가리키지만, 포트에서 선의 전체 수를 가리킨다. 또한, 입력 토큰 데이타 포트와 연관되어 있는 것은 이전 블럭의 출력에 재동기화 시키는데 사용된 클럭 및 리셋 신호이다. 또한 출력 토큰 데이타 포트와 연관되어 있고 후속하는 블럭에 의해 사용되는 두 개의 재동기 클럭이 존재한다.
마이크로프로세서 인터페이스는 표준이고 네 개의 어드레스 비트를 사용한다. 또한 이벤트(events), 내부 레지스터(internal registers) 및 테스트 레지스터(test registers)에 대해 어드레스 공간을 선택하는데 사용되는 외부적으로 디코딩된 세개의 선택 입력(externally decoded select inputs)이 존재한다. 이 메카니즘은 IDCT 어드레스 공간을 서로 다른 칩의 서로 다른 장소로 맵핑하는데 유연성을 제공한다. 또한 단일 이벤트 출력인 idctevent와, IDCT 및 마이크로프로세서 데이타 버스의 적당한 비트에 외부적으로 접속될 이벤트 3상태 데이타 선(event tristate data wires)인 두개의 i/o 신호 n_derrd와 n_serrd가 존재한다.
시스템 서비스 포트(system services port)는 2-위상 오버라이드 클럭 및 연관된 클럭 오버라이드 모드 선택 입력(2-phase override clock and associated clock override mode select input), 뿐만 아니라 표준 클럭 및 리셋 입력 신호로 구성된다.
테스트 인터페이스는 JTAG 클럭 및 리셋 신호, 스캔-경로 데이타 및 제어 신호, 및 램테스트 및 칩 테스트 입력으로 구성된다.
정상적인 동작에서, 마이크로프로세서 포트는 IDCT가 그 지정된 기능을 달성하기 위해 임의의 마이크로프로세서 액세스를 필요로 하지 않지 때문에 비활성(inactive)이다. 이와 유사하게, 테스팅 인터페이스는 테스팅 또는 검증이 필요할 때에만 활성(active)이다.
B.9.5 이산 코사인 변환의 산술 기본
비디오 대역 압축에서, 입력 데이타는 제곱 화상 영역(a square area of the picture)을 표현한다. 따라서, 적용된 변환은 2차원이어야만 한다. 2차원 변환은 효율적으로 계산하기가 힘들지만, 2차원 DCT는 분리할 수 있는 특성이 있다. 분리 가능한 변환(separable transform)은 다른 차원과는 무관하게 각각의 차원을 따라 계산될 수 있다. 이 구현은 하드웨어 상에 맵핑하기 위해 특수하게 설계된 1차원 IDCT 알고리즘을 사용한다. 이 1차원 알고리즘은 소프트웨어 모델에는 적합하지 않다. 이 1차원 알고리즘은 2차원 결과를 얻는데 연속적으로 적용된다.
픽셀의 N 대 N 블럭을 위한 2차원 DCT의 산술 정의는 다음과 같다.
식 10. 전방 DCT
식 11. 전방 DCT
여기서,
그렇지 않으면
상기 정의는 승산 사이에 매트릭스 전치를 사용하여 두개의 N 대 N 매트릭스를 연속하여 두번 곱하는 것과 산술적으로 같다. 1차원 DCT는 두개의 N 대 N 매트릭스를 곱하는 것과 산술적으로 같다. 산술적으로 2차원의 경우는 다음과 같다.
여기서, C는 코사인 항의 매트릭스이다.
이와 같이, DCT는 흔히 매트릭스 조작으로서 서술된다. 매트릭스 설명은 변환을 산술적으로 감소시키는데 편리할 수 있지만, 이것은 단지 주석을 용이하게 하기 위한 것이다. 2/N 항은 DC 레벨을 지배한다(governs) 것을 알아야 한다. 상수 c(j)와 c(k)를 공칭 인수(normalization factors)라고 한다.
B.9.6 IDCT 변환 알고리즘
다음에 상세히 서술되는 바와 같이, 실제의 IDCT 변환을 계산하는데 사용된알고리즘은 "고속(fast)" 알고리즘이어야 한다. 사용된 알고리즘은 효율적인 하드웨어 아키텍쳐 및 구현에 최적이다. 이 알고리즘의 주요 특징은 하나의 승산을 제거하기 위해스케일링(scaling)을 이용하는 것이고, 상부 및 하부 간에 좀 더 큰 대칭을 이루도록 설계된 알고리즘의 변환을 이용한다는 것이다. 이 대칭으로 결국 가장 값이 비싼 많은 산술 소자를 효율적으로 재사용할 수 있게 된다는 것이다.
알고리즘 (제136도)를 도시하는 다이어그램에서, 상부 및 하부 절반 간의 대칭이 중간 부분에서 명확하다. 또한 가산기 및 감산기의 마지막 열은 대칭이고, 가산기 및 감산기는 비교적 적은 비용으로 결합될 수 있다 (4개의 가산기/감산기는 도시된 바와 같이 상당히 더 작은 4 가산기 + 4 감산기).
단일 차원 변환의 모든 출력은로 스케일된다는 것을 알아야 한다. 이 것은 마지막 2차원 해가로 스케일될 것이라는 것을 의미한다. 이 후, 이것은 마지막 포화에서 그리고 쉬프팅함으로서 반올림 단계(rounding stage)에서 용이하게 정정될 수 있다.
도시된 알고리즘은 두배 정밀 부동 소수점(double Precision floating-point) C로 코드화되고, 그 결과가 (직선 매트릭스 승산을 사용하여) 기준 IDCT와 비교되었다. 다음에 실리콘 상에 구현됨에 따라 알고리즘의 성능 및 정확도를 증명하는데 사용될 수 있는 C로 된 (어떠한 타이밍 정보도 포함되어 있지 않은) 알고리즘의 비트 단위로 정확한 정수 버젼을 코딩하는데 부수적인 스테이지가 사용되었다. 변환의 허용 가능한 부정확도는 H.261 규격에 명시되어 있고, 이 방법은 비트 단위로 정확한 모델을 실시하고 실제의 정확도를 측정하는데 사용되었다.
제137도는 상부 및 하부 간의 공통성을 도시하고, 또한 중간 결과가 저장될 필요가 있는 지점을 도시하는 총체적인 IDCT 아키텍쳐를 도시한다. 이 회로는 타임 멀티플렉싱되어 상부 및 하부가 개별적으로 계산될 수 있게 한다.
B.9.7 IDCT 변환 아키텍쳐
상기 기술된 바와 같이, IDCT 알고리즘은 효율적인 아키텍쳐에 최적이다.
결과 아키텍쳐의 중요한 특징은 다음과 같다 :
* 비용이 많이 드는 산술 연산의 재사용
* 범용 목적이라기 보다는 모두 상수이고 계수인 작은 수의 승수 (승수 크기를 감소시키고 개별적인 계수의 저장 필요를 제거)
* 단지 아키텍쳐를 파이프라인할 뿐인 작은 수의 래치
* 파이프라인 스테이지마다 단지 단일 분리 연산(resolviing operations)만이 필요하도록 배치된 연산
* 자연적인 순서로 결과를 발생하도록 정렬 가능
* (최종 구현시 비용이 많이 드는) 복잡한 크로스바 스위칭 또는 큰 멀티플렉싱의 불요
* 두개의 캐리-세이브 연산(two carry-save operations) (한번의 덧셈, 한번의 뺄셈)을 제거하기 위해 분리된(resolved) 결과의 장점을 이용할 수 있음.
* 각각의 스테이지가 4개의 클럭 사이클을 취하도록, 즉 고속(큰) 산술 연산의 필요성을 제거할 수 있는 아키텍쳐
* 작고/느린 리플 캐리(ripple carry)에서 보다 더 크고/빠른 캐리-룩어헤드 버전(carry-lookahead versions)으로 분리 연산을 간단히 바꿈으로서, 현재의 30MHz 픽셀-클럭 연산 보다 훨씬 더 빠른 연산을 지원할 아키텍쳐. 총체적인 변환의 크기를 비교적 작게 증가시키는 반면에, 단지 이들 연산을 가속시키는 것이 총체적인 연산 속도에 큰 영향을 미치므로 상기 리졸브하는 연산은 각각의 스테이지에서 요구되는 가장 큰 비율의 시간을 필요로 한다. 또한 파이프라이닝(pipelining)의 깊이를 증가시킴으로써 속도를 더욱 증가시킬 수 있다.
* 변환 데이타-흐름의 제어가 극히 직선적이고 효율적임.
ID 변환 매크로-아키텍쳐의 다이어그램 (제141도)은 알고리증이 작은 세트의 하드웨어 자원상으로 어떻게 맵핑되어 요구되는 성능 제한 조건을 충족시키도록 어떻게 파이프라이닝되는(pipelined) 지를 나타낸다. "제어 쉬프트-레지스터"를 데이타-흐름 파이프라인에 일치시킴으로써 이 아키텍춰가 제어된다. 이 제어는 설계가 용이하고 실리콘 배치에 있어 효율적이다.
제141도의 제어 신호 명칭 (래치, sel_byp 등)은 래치를 제어하는데 사용되는 다양한 인에이블 신호, 즉 신호 흐름이다. 래치의 클럭 신호는 도시되어 있지 않다.
몇가지 구현에 대한 세부 사항은 변환 크기를 최소로 하는 반면에, 변환 아키텍춰가 요구되는 정확도 규격을 충족시킨다는 점에서 중요하다. 사용된 기술은 전체적으로 두 개의 주요 분류로 나뉜다.
* 고정된 점의 위치를 개별적으로 제어함으로써 각각의 중간 상태에서 고정된 워드 폭을 갖는 최대 다이나믹 범위를 유지.
* 산술 연산을 선택적으로 조작함으로써 (전체 변환의 워드 폭을 단순히 증가시킴으로써 정확도를 증가시키기 보다는) 정확도를 달성하기 위해 정확도 구비 조건의 통계학적 정의를 이용할 수 있음.
변환을 설계하는데 있어 가장 간단한 방법은 고정된 워드-폭이 정확도를 달성하는데 충분히 큰 단일 고정점 구현이다. 불행하게도, 이 방법으로는 워드 폭이 훨씬 커지게 되어 변환이 커지게 된다. 본 발명에서 사용된 접근 방법은 가능한 최대 정확도를 달성하기 위해 임의의 특정 중간 값에 대해 이용 가능한 동적 범위를 최대한 이용할 수 있도록 변환 전체를 통해 고정점 위치를 변하게 할 수 있다.
허용 가능한 결과가 통계학적으로 명시되기 때문에, 전체적인 정확도를 향상시키기 위해 임의의 중간 값 트렁케이션 연산(intermediate value truncation operation)에 대해 선택적으로 조정될 수 있다. 선정된 조정은 비용이 적게 들거나 또는 거의 들지 않는 LSB 계산을 단순히 조작하는 것이다. 이 기술의 대체 기술은 비용이 많이 드는 워드 폭을 증가시키는 것이다. 만약 이들 결과가 반대 결과로 나타나는 경향이 있다는 것이 이전에 인지되었다면, 이 조정은 최종 결과를 정해진 방향으로 효율적으로 "가중(weigth)"시킨다. 결과의 분수를 조정함으로서, 이들 결과의 전체적인 평균을 효율적으로 쉬프팅한다.
B.9.8 IDCT 블럭 다이어그램 설명
IDCT의 블럭 다이어그램은 토큰 스트림의 프로세싱과 관련된 모든 블럭을 도시한다. 이 다이어그램 제138도는 클럭킹, 테스트, 및 마이크로프로세서 액세스 및 이벤트 메커니즘의 세부사항에 대해 도시하지 않는다. 테스트 액세스를 제공하는데 사용된 스누퍼 블럭(snooper blocks)은 이 다이어그램에 도시되어 있지 않다.
B.9.8.1 데이타 에러 검사기(data error checker)
첫 번째 블럭은 12-비트 폭의 토큰 스트림을 취하고 만들고, 이 스트림을 분해하여(parses) DTAT 토큰을 검사하는 "decheck"라고 하는 DATA 에러 검사기 및 교정기(DATA error checker and corrector)이다. 다른 모든 토큰은 무시되어 직접 통과된다. 수행되는 체크는 많은 확장이 64와 같지 않은 DTAT 토큰에 대한 것이다. 가능한 에러를 "부족한(deficient)" (<64확장), idct_too_few_event 및 "수를 초과하는(supernumerary)"(>64 확장), idct_too_many_event라고 한다. 이와 같은 에러는 표준 이벤트 메커니즘으로 신호되지만(signalled), 블럭도 역시 토큰스트림을 조작함으로써 간단한 에러 복구를 시도한다. 부족한(deficient) 에러의 경우, DTAT 토큰은 올바른 64 확장을 만들기 위해 "0" 값 확장 (입력을 수신하는 것을 중지하고 삽입을 수행)으로 팩된다(packed). 수를 초과하는 에러의 경우, 확장 비트는 64번째 확장을 위해 강제로 "0"이 되고, 여분의 모든 확장이 토큰 스트림으로부터 제거 된다.
B.9.8.2 역 지그-재그(inverse zig-zag)
제138도에 있는 공간 디코더 상의 다음 블럭은 역 지그재그 RAM(441), "izz"이고, 다시 12-비트 폭의 토큰 스트림을 취하여 만든다. 다른 모든 블럭에서와 같이, 스트림이 분해되지만(parsed), 단지 DATA 토큰 만이 인식된다. 다른 모든 토큰은 바뀌지않고 통과된다. 또한, DTAT 토큰도 통과되지만, 확장의 순서가 변한다. 이 블럭은 올바른 DTAT토큰 (즉, 단지 64확장 비트)상에 놓인다. 이것이 참이 아닌 경우, 연산은 지정되지 않는다. 순서의 재정렬(reordering)은 표준 역 지그재그 패턴에 따라서, 그리고 디폴트에 의해 IDCT 출력에서 수평으로 스캐닝된 데이타를 제공하도록 행해진다. 또한, 이것은 수직으로 스캐닝된 출력을 제공하기 위해 순서정렬을 바꿀 수 있다. 표준 IZZ 정렬 이외에, 이 블럭은 각각의 8-워드 행에 대해 잉여로 재정렬시킨다. 이것이 수행되어 결국 IDCT 1차원 변환 블럭의 명시조건 때문에 (0,1,2,3,4,5,6,7) 보다는 (1,3,5, 7,0,2,4,6) 순서로 행으로 출력 된다.
B.9.8.3 입력 포맷터
제138도의 다음 블럭은 IDCT 변환의 제1 차원에 대해 데이타 입력을 포맷하는 입력 포맷터(442)인 "ip_fmt"이다. 이 블럭은 12-비트 폭의 토큰 스트림 입력과 22-비트 폭의 토큰 스트림 출력을 갖는다. 분수 부분이 0으로 세팅된 정수 부분을 IDCT 변환 규격 22-비트 폭인 워드의 정확한 크기로 이동시킬 수 있도록 DATA 토큰이 좌로 쉬프팅된다. 이것은 이 지점에 분수의 10 비트가 존재한다는 것을 의미한다. 다른 모든 토큰은 쉬프팅되지 않고, 사용되지 않은 여분의 비트는 단순히 0으로 세팅된다.
B.9.8.4 1-차원 변환 - 제1 차원
제138도에 도시된 다음 블럭은 제1의 단일 IDCT 변환 블럭(443)인 "oned"이다. 이것은 22-비트 폭의 토큰 스트림을 입력하고 출력하며, 흔히 스트림은 해석 되고(parsed) DATA 토큰이 인식된다. 다른 모든 토큰은 변형되지 않고 통과된다.
DATA 토큰은 8-대-8 역이산 코사인 변환의 한 차원을 구현하는 파이프라이닝된 데이타경로를 통과한다. 제1 차원의 출력에는, 데이타 워드에 분수의 7 비트가 존재 한다. 다른 모든 토큰은 DATA 변환 대기 시간과 단순히 일치하는 단지 쉬프트 레지스터 데이타경로를 통해서 진행하며, 출력되지 전에 토큰 스트림으로 재결합된다.
B.9.8.5 전치(transpose) RAM
전치 RAM(444) "tram"은 토큰 스트림을 다룬다는 점에서 여러가지로 역지그재그 RAM(441)과 유사하다. 처리된 토큰의 폭 (22비트)과 수행된 재정렬은 다르지만, 이들은 동일한 방법으로 동작하고 실제로 많은 제어 논리를 공유한다. 다시, 열을 행으로의 근본적인 교환(fundamental swapping)은 물론, 다음의 IDCT 차원의 구비 조건을 위해 부수적으로 행이 재정렬된다.
B.9.8.6 1-차원 변환 - 제2 차원
도시된 다음 블럭은 한개 차원의 IDCT 변환의 다른 예로 제1 차원과 여러 가지로 동일하다. 이 차원의 출력에는 4 비트 분수가 존재한다.
B.9.8.7 반올림과 포화
제138도의 반올림-및-포화 블럭(round-and-saturate block)(446) "ras"는 22-비트 폭의 고정 소수점 포맷에 DATA 확장을 포함하는 22-비트 폭의 토큰 스트림을 취하고, DATA 확장이 정수로 반올림되어(rounded) (+ve 무한대로) 9-비트인 두개의 보수 표현으로 포화된 9-비트 폭의 토큰 스트림을 출력하고, 다른 모든 토큰은 직접 통과되었다.
B.9.9 블럭의 하드웨어의 설명
B.9.9.1 규격 블럭 구조
토큰 스트림을 처리하는 모든 블럭에 대해 제139도에 도시된 바와 같은 규격 이론적인 구조가 존재한다. 이는 토큰 스트림을 조작하는 부분으로부터 2선식 인터페이스 래치를 분리한다. 이 구조의 변화는 (RAM 코어와 같은) 임시 내부 블럭(extra Internal blocks)을 포함할 수 있다. 도시된 일부 블럭에서, 이 구조는 모든 "데이타경로" 논리를 함께 배치할(grouping) 필요가 있기 때문에, (비록 실제로 존재할지라도) 도면에 명확하지 않게 도시되어 있고, 이 데이타경로 논리를 모든 규격 셀 논리와 구분한다. "ras"와 같이 극히 간단한 블럭의 경우, 논리적인 조작없이 래치된 out_accept를 입력 2선식 래치로 직접 취할 수 있다.
B.9.9.2 "Decheck" - DATA 에러 체킹/복원
토큰 스트림의 첫 번째 블럭(440)은 블럭 다이어그램 개요 절에 명시된 바와 같은 DATA 체킹 및 교정을 수행한다. 검출된 에러는 규격 이벤트 메커니즘과 함께 다루어지는데, 이는 이벤트가 마스킹될(masked) 수 있고 에러가 검출될 때 블럭이 복구 프로시져로 계속되거나 또는 이벤트 마스크 상태에 따라 정지될 수 있다는 것을 의미한다. IDCT는 결코 부정확한 DATA 토큰을 찾을 수 없고, 따라서 시도되는 복구는 심각한 문제를 포함할 수 있는 아주 단순한 시도일 뿐이다.
이 블럭은 두 스테이지의 파이프라인 깊이를 가지며 전적으로 z셀(zcells)로구현된다. 입력 2선식 인터페이스 래치는 "전방(front)" 타입으로, 이는 모든 입력이 트랜지스터 게이트 상에 도착함으로써 이 블럭(IDCT의 전방에서)이 그것에 하나 선행하는 것으로부터 분리된 전원 공급 영역에 있을 때 안전한 동작을 허용한다는 것을 의미한다. 이 블럭은 토큰 스트림을 해석하고(parsing) 비-DATA 토큰을 곧 바로 통과시킴으로써 작동한다. DATA 토큰이 발견될 때, 헤더 다음에 발견된 확장 수에 대한 카운트가 개시된다. 카운트가 63과 같지 않을 때 만약 확장 비트가 "0"인 것으로 밝혀지면, (이벤트 논리로 진행하는) 에러 신호가 발생되고, 해당 이벤트에 대한 마스크 비트의 상태에 따라 "decheck"가 정지되거나 (즉, 더 이상 신호를 수용하거나 또는 신호를 발생하지 않음) 또는 에러 복구를 시작할 것이다.
"부족" 에러에 대한 복구 메커니즘은 카운터를 사용하여 올바른 확장 수를 토큰 스트림으로의 삽입을 제어한다.(삽입된 값은 항상 "0"이다). 분명히, 이 삽입이 진행되는 동안, 입력은 수용되지 않는다. 64번째 확장에서 확장 비트가 "0"이 아닌 것으로 밝혀지면, "수를 초과하는" 에러가 발생되고, DATA 토큰은 확장 비트를 강제로 "0"이 되게 함으로서 완료되고, 데이타를 계속 수용하지만 출력을 무효로 함으로써 확장 비트가 "1"로 세팅된 연속하는 모든 워드가 토큰 스트림으로부터 제거 된다.
두개의 에러 신호는 지속하지 않는다. 블럭이 정지되지 않는 한, 즉 복원이 완료될 때까지 에러가 검출되는 시점으로부터 에러 신호는 오로지 활성으로 유지된다는 것에 유의한다. 이는 한개의 완전한 최소 사이클이고 무한한 여문의 DATA 토큰의 경우 영구히 지속할 수 있다.
B.9.9.3 "Izz"와 "tram"- RAM 재정렬
"izz"(441) (역지그-재그 RAM)와 "tram"(444) (전치 RAM) 모두는 같은 함수를 변형시키고, 이들은 차이점 보다는 유사점을 보다 더 많이 가지고 있기때문에 모두 함께 고려된다. 이들 블럭 모두는 변형되지 않은 다른 토큰을 통과시키는 동안, 토큰 스트림을 취하여 DATA 토큰의 확장을 재정렬한다. 처리된 확장의 폭과 재정렬 시퀀스는 다르지만, 각각의 RA띠에 대한 많은 부분의 제어 논리가 동일하고, 실제로 각각의 RAM에 대한 도면에 예시된 "공통 제어" 블럭으로 구성된다. 폭의 차이가 이 제어 부분에 대해 어떠한 영향도 미치지 않으므로, RAM 코어와 함께 각각의 RAM에 대해 서로 다른 "시퀀스 어드레스 발생기"와 적당한 폭의 2선식 인터페이스 블럭을 사용할 필요만이 있다.
각각의 RAM의 전체 동작은 반드시 FIFO의 동작과 동일하다. 이는 엄격히 말해서 토큰 레벨에서 해당되고, DATA 토큰의 확장 워드를 위해 출력 순서에 대해 특수하게 변형된다. FIFO의 깊이는 128 스테이지(stages)이다. 이는 DATA 토큰의 출력 개시가 검출된 후에 FIFO의 출력이 보류되기 때문에 시스템 전체를 통해 보류할 수 있는 30MHz의 구비 조건을 충족시킬 필요가 있다. 그 이유는 사용된 재정렬 시퀀스의 특성은 재정렬된 출력이 시작되기 전에 완전한 블럭이 64 확장의 FIFO에 집합될 것을 필요로 하기 때문이다. 특히, 요구되는 최소 수는 역지그-재그 및 전치 시퀀스에 대해서 다르고, 두가지 경우 모두에서 64 보다 다소 작다. 그러나, 2의 제곱이 아닌 길이를 갖는 FIFO의 제어가 복잡하다는 것은, RAM 코어의 작은 절약(small saving)으로 요구되는 부수적인 제어 논리의 복잡성을 보상하고도 남을 것이라는 것이다.
RAM 코어는 단일 30MHz 사이클로 (동일하거나 또는 개별적인 어드레스에 대해) 판독 및 기록이 가능한 설계로 구현된다. 이것은 RAM이 내부의 60MHz 사이클 시간으로 효율적으로 동작한다는 것을 의미한다.
재정렬 동작은 0 -> 63 범위에서 판독 어드레스의 특정한 시퀀스 ("시퀀스 어드레스 생성")를 생성함으로써 수행되지만, 자연적인 순서로 발생시키는 것은 아니다. 요구되는 시퀀스는 규격 지그-재그 시퀀스로 (8 수평 또는 수직 스캐닝에 대해) 또는 정상적인 매트릭스 전치에 필요한 시퀀스로서 명시된다. 이때 이들 규격 시퀀스는 IDCT 변환 1차원 블럭의 구비조건 때문에 (0,1,2,3,4,5,6,7) 보다는 우수/기수 포맷 (즉, 1,3,5,7,0,2,4,6)으로 각각의 행을 출력하기 위한 구비조건에 따라 더욱 재정렬된다.
전치 어드레스 시퀀스 생성은 알고리즘적으로 매우 간단하다. 직선 전치 시 퀀스 생성(straight transpose sequence gereration)은 모두 카운터로 구현되는 행 및 열 어드레스의 생성을 각각 필요로 한다. 행 재정렬 구비조건은 단순히 자연적인 카운터보다는 단순한 특정 상태 머신으로 행 어드레스가 생성된다는 것을 의미한다.
역 지그-재그 시퀀스는 알고리즘적으로 생성하는데 다소 덜 간단하다(straightforward). 이와 같은 사실 때문에, 소형 RAM은 어드레스의 64개의 6 비트 값 전체를 유지하는데 사용되는 데, 이는 수평 및 수직 스캔 모드 사이에서 바뀌도록 교환될(swapped) 수 있는 행 및 열 카운터로서 어드레스된다. ROM에 근거한 발생기는 설계가 매우 빠르고 전방 지그-재그 (ROM 재프로그램)를 구현하거나 또는 차후의 다른 대체 가능한 시퀀스를 덧붙이기가 용이하다는 장점이 있다.
B.9.9.4 "Oned" - 단일 차원 IDCT 변환
이 블럭은 20 스테이지의 파이프라인 깊이를 가지며, 이 파이프라인은 정체될 때 경직된다(rigid). 이 경직성(rigidity)은 설계를 크게 단순화시키고, 파이 프라인 깊이가 그 정도로 크지않고 두 차원(dimensions) 모두가 소정의 크기의 버퍼링을 제공하는 RAM 이후에 오기 때문에, 전체적인 다이나믹(overall dynamic)에 심각한 영향을 미치지 않는다.
이 블럭은 규격 구조를 따르지만, 내부적으로 (처리될) DATA 토큰 확장 및 변형되지 않고 통과되어야 될 다른 모든 항목(all other Items)을 위한 개별적인 경로를 갖는다. 도면은 특정하게 도시되어 있다는 것을 알아야 한다. 그 이유는 첫째, 데이타경로 논리 모두를 함께 그룹질 필요성 때문에 그리고, 둘째 자동적으로 컴파일된 코드를 생성하기 위해서이다 (이는 상위 레벨에서 제어 논리를 설명한다).
토큰이 정상적으로 해석된(parsed) 후, 출력 2선식 인터페이스 래치 블럭전에서 멀티플렉서와 재결합되기 전에 DATA 토큰 및 다른 값들이 각각 서로 다른 두 개의 평행 경로를 통해 발송된다(routed). 변환 데이타경로를 통해서는 변형되지 않은 값을 통과시킬 수 없기 때문에 이 평행 경로가 요구된다. 변환 데이타경로의 대기 시간은 나머지 토큰 스트림을 처리하기 위해 간단한 쉬프트 레지스터와 일치 된다.
"oned"의 제어부는 토큰 스트림을 해석하고(parse) 토큰의 분할 및 재결합을 제어한다. 다른 주요 부분은 변환 데이타경로를 제어한다. 이 데이타경로의 제어를 위한 주요 메커니즘은 데이타경로 파이프라인과 일치하는 제어 쉬프트-레지스터(control shift-register)이고, 데이타경로 파이프라인의 각각의 스테이지에 대해 필요한 제어 신호를 제공하도록 탭-오프(tapped-off)된다.
상기 "oned" 블럭은 DATA 확장의 완전한 행 즉, 8의 그룹에 대한 동작만을 개시할 수 있는 구비조건을 갖는다. 비록 실제로 64개의 유효 확장 값의 중단되지 않은 시퀀스로서 완전한 DATA 블럭이 출력되는 것을 "izz" 및 "itram"의 동작이 보장할 지라도 행의 중간에서는 무효 데이타("GaPs")를 처리할 수는 없다.
B.9.9.4.1 변환 데이타경로
변환 데이타경로 마이크로-아키텍춰 "t_dp"가 제141도에 도시된다. 일부 세 부도면 (즉, 클럭킹, 쉬프트 등)은 도시되어 있지 않다는 것에 유의하여야 한다. 그러나, 이 도면은 파이프라인의 임의의 스테이지에서 데이타경로가 네개의 값을 어떻게 동시에 연산하는 지를 도시한다. 데이타경로의 기본 서브-구조, 즉 세개의 주요 부분은 요구되는 산술 및 래치 자원(arithmetic and latch resources)으로 보일 수 있다 (즉, 전-공유(pre-common), 공유(common) 및 후-공유(post-common)).
제어 신호라는 이름은 제어 쉬트프-레지스터 상태의 디코드와 함께 시퀀스되는 파이프라인 래치 (및 가산/감산 선택기)용 인에이블이다. 각각의 파이프라인 스테이지는 실제로 길이가 네개의 클럭 사이클이라는 것을 알아야 한다.
변환 데이타경로 내에는, 입력을 수집하고, 파이프라인에 중간 결과를 저장하고, 출력을 직렬화하는데 필요한 다수의 래치 스테이지가 존재한다. 일부 래치는 멀티플렉싱 타입인데, 즉 이들은 한개 이상의 소스로부터 조건적으로 로딩될 수 있다. 모든 래치는 인에이블된 타입으로, 즉 여기에는 개별적인 클럭 및 인에이블 입력이 존재한다. 이것은 생성된 클럭 방법이 적용되었을 때 생성할 스큐 문제(issues of skew)를 고려하기 보다는 정확한 타이밍으로 인에이블 신호를 발생하기가 용이하다는 것을 의미한다.
요구되는 주요 산술 항목은 다음과 같다.
* 고정된 다수의 계수 승수
[캐리-세이브(carry-save) 출력]
* 캐리-세이브 가산기
* 캐리-세이브 감산기
" 분해(resolving) 가산기
* 분해 가산기/감산기
모든 산술은 2의 보수 표현으로 수행된다. 이것은 정상적인 (리졸브된 (resolved)) 형태이거나 또는 캐리-세이브 형태 (즉, 그 합이 실제값을 표현하는 두개의 수)이다. 모든 숫자는 저장되기전에 분해되며, 시간을 고려하면 이는 비용이 매우 많이 드는 연산이기 때문에 파이프라인 스테이지 마다 단지 한개의 분해 연산만이 수행된다. 수행된 분해 연산은 여기서 모두 간단한 리플-캐리(ripple-carry)를 이용한다. 이는 분해기(resolvers)가 상당히 작지만, 비교적 느리다는 것을 의미한다. 이 해법(resolutions)이 각각의 스테이지에서 전체 시간을 좌우하기 때문에, 고속 해법 산술 유닛(fast resolving arithmetic units)을 사용함으로써 전체 변환을 가속시킬 수 있다.
B.9.9.5 "Ras" - 반올림 및 포화
본 발명에서, "ras" 블럭은 제1 차원 "oned'의 출력으로부터 22-비트 고정소수점 수를 취하고, 이들을 정확하게 반올림되고 포화된 9-비트의 부호가 있는 정수 결과로 바꾸는 작업을 한다. 또한 이 블럭은 방법(2/N 항)에 내재하는 필요한 4로 나눗셈(divide-by-4)을 수행하고, 두개 차원의 각각에서 수행된프리스케일링(prescaling)을 보상하기 위해 2로 나눈다. 이와 같이 8로 나누는 것(divide by8)은 고정 소수점 위치가 예상된 것보다는 더욱 3 비트만큼 좌측에 있다는 것을 의미하는데, 즉 그 결과를 15 비트의 정수 표현과 7 비트의 분수 (4 비트의 분수보다는)를 갖는 것으로 다룬다. 구현된 반올림 모드는 "양의 무한대로 반올림되는", 즉 정확히 0,5의 분수에 1을 더하는 것이다. 이는 구현하기가 가장 간단한 반올림이기 때문에 주로 수행된다. 반올림 (정수 부분을 조건적으로 증가시킴)이 완료된 후, 그 결과는 9-비트의 부호 결과가 이 범위에서 최대 또는 최소 값까지 포화될 필요가 있는 지를 보기 위해 체크된다. 이는 본래의 정수 값의 상위 비트차 함께 증가 캐리 아웃(increment carry out)을 검사함으로써 수행된다.
흔히, 토큰 스트림은 해석되고(parsed), 반올림 및 포화 연산은 DATA 토큰 확장 값에만 적용된다. 블럭은 두 스테이지의 파이프라인 깊이를 가지며 전적으로 z셀(zcells)로 구현된다.
B.9.9.6 "Idctsels" - IDCT 레지스터 선택 디코더
이 블럭은 4개의 마이크로프로세서 인터페이스 어드레스 선과 "sel_test" 입력을 개별적인 블럭 테스트 액세스용 선택 선 (스누퍼와 RAM)으로 디코딩하는 간단한 디코더이다. 이 블럭은 z셀 조합 논리로서만 구성된다. 디코딩된 선택이 테이블 B.9.2에 도시된다.
테이블 B.9.1 IDCT 테스트 어드레스 공간
3. 반복되는 어드레스
B.9.9.7 "Idctregs"- IDCT 제어 레지스터 및 이벤트
본 발명에 관한 이 블럭은 DATA 부족한 및 여분의 에러(deficient and supernumerary errors)를 처리하기 위한 규격 이벤트 논리 블럭의 인스턴스(instances), 및 IDCT 출력이 수직으로 스캐닝되도록 "izz"를 재정렬 변화시키는데 사용될 수 있는 단일 메모리에 맵핑된 비트 "vscan"을 포함한다. 이 비트는 값 "0"으로 리셋되는데, 즉 디폴트 모드가 수평으로 스캐닝되어 출력된다. 두개의 가능한 이벤트가 함께 오알(OR-ed)되어 인터럽트로서 사용될 수 있는 idctevent 신호를 형성한다. 레지스터와 이벤트의 어드레스 및 비트 장소에 대해서는 B.9.10절을 참조한다.
B.9.9.8 클럭 발생기
"규격" 타입("clkgen") 클럭 발생기는 IDCT에 사용된다. 이는 두개의 개별적인 스캔-경로로 수행될 수 있다. 클럭 발생기는 "idctcga"와 "idctcgb"라고 한다. 기능적으로, 유일한 차이점은 "idctcgb"가 "notrstl" 신호를 발생할 필요가없다는 것이다. 두개의 클럭 발생기에서 각각의 클럭 및 리셋 출력을 위한 버퍼링 크기는 개별적으로 각각의 클럭 또는 리셋으로서 구동된 실제 로드에 맞도록 된다.
실제 로드는 실제로 최종 레이아웃의 게이트 및 트랙 캐패시턴스(gate and track capacitances)로부터 측정되었다.
IDCT 상부 레벨의 블럭 위치 및 라우트(BPR)가 수행되었을 때, 이들 트랙이 큰 전류을 전달하기 때문에 좀더 심하게 로딩된 클럭(heavily loaded clocks) (pr0_b와 Ph1_b)에 대해 클럭 분포 트리의 첫 번째 부분에 대한 트랙 폭을 증가시킬 수 있는 대화형 전역 라우팅(interactive global routing) 특징을 취할 수 있는 정점이 있었다.
B.9.9.9 JTAG 제어 블럭
IDCT가 개별적인 두개의 스캔-체인과 두개의 클럭 발생기를 갖기 때문에, 규격 JTAG 제어 블럭의 두개의 인스턴스 "jspctle"가 존재한다. 이들은 테스트 포트와 두개의 스캔-경로(test port and the two scan-paths) 사이를 인터페이스한다.
B.9.10 이벤트 및 제어 레지스터
IDCT는 두개의 이벤트를 발생하고 단일 비트의 제어를 갖는다. 두개의 이벤트는 만약 부정확한 DATA 토큰이 검출되면 IDCT의 전면에 있는 "decheck"블럭에 의해 발생될 수 있는 idct_too_few_event와 idct_too_ many_event이다. 단일 제어 비트는 만약 수직으로 스캐닝된 출력으로서 IDCT를 동작시킬 필요가 있을 때 세팅된 "vscan"이다. 그래서, 이 비트는 "izz" 블럭을 제어한다. 모든 이벤트 논리와 메모리 맵핑된 제어 비트는 블럭 "idctregs"에 위치된다.
IDCT의 관점으로부터, 이들 레지스터는 다음 장소에 위치된다. 3상 i/o 선 n_derrd와 n_serrd는 이들 장소를 적절히 판독하고 기록하는 데 사용된다.
테이블 B.9.2 IDCT 제어 레지스터 어드레스 공간
테이블 B.9.3 IDCT 이벤트 어드레스 공간
B.9.11 구현 문제
B.9.11.1 논리 설계 접근 방법
모든 IDCT 블럭의 설계에 있어서, 본 발명에 따라 신속하고 직선적인 방법으로 "안전한" 설계가 가능하다는 것을 의미하는 통일되고 간단한 논리 설계 전략을 사용하려 시도하였다. 대부분의 제어 논리에서, 마스터-슬레이브만을 사용하는 간단한 방법이 채택되었다. 비동기식 세트/리셋 입력은 오로지 올바른 시스템 리셋에 접속되었다. 비록 흔히 동일한 기능을 좀더 효율적으로 수행하기 위해 비-규격 회로 구성을 사용할 수 있지만, 이 방법은 다음과 같은 장점이 있다.
* 개념적으로 단순
* 설계가 용이
* 연산의 속도가 명확하고 (예, 래치->논리->래치>논리 스타일 설계) 자동 분석이 용이
* 글리치(glitches)가 문제가 없음 (예, SR 래치)
* 초기화를 위해 전용 시스템 리셋을 사용함으로서 스캔 경로가 정확히 동작할 수 있음
* 자동으로 컴파일링된(compiled) C-코드 생성이 가능
투명한 d-타입 래치가 사용되었던 많은 장소가 있고 이들은 이하에 열거된다.
B.9.11.1.1 2선식 인터페이스 래치
규격 블럭 구조는 입력 및 출력 2선식 인터페이스용 래치를 사용한다. 출력 2선식 래치와 다음의 입력 2선식 래치 사이에는 어떠한 논리도 존재하지 않는다.
B.9.11.1.2 ROM 인터페이스
ROM 회로의 타이밍 구비조건 때문에, ROM의 출력에서 IZZ 시퀀스 발생기에 래치가 사용된다.
B.9.11.1.3 변환 데이타경로 및 제어 쉬프트-레지스터
완전한 마스터-슬레이브 디바이스로서 모든 파이프라인 기억장치 스테이지를 구현할 수 있지만, 요구되는 기억장치의 크기 때문에 래치를 사용함으로서 기억장치가 크게 절약된다. 그러나, 이 방법은 사용자가 몇 가지 요소를 고려할 필요가 있다.
* 제어 쉬프트-레지스터는 인에이블로서 사용하기 위한 위상 모두를 위해 제어 신호를 발생하여야만 한다 (즉, 이 쉬프트-레지스터에 래치를 사용할 필요가 있다).
* 래치를 사용함으로써 복잡해지는 타이밍 분석
* "t_postc"는 한개의 래치가 동일한 위상의 다른 래치로 출력되기 때문에 (인에이블의 타이밍 때문에 이는 회로에서 문제가 안된다) 더 이상 자동적으로 컴파일링된 코드를 생성할 수 없을 것이다.
그럼에도 불구하고, 래치의 사용으로 절약된 면적은 본 발명에서 이들 요소를 수용할만 한 것이다.
B.9.11.1.4 마이크로프로세서 인터페이스
이와 같은 인터페이스의 본질로 인해, 이벤트 및 레지스터 블럭 "idctregs"와 RAM 코어용 키홀 논리에 래치 (및 재동기화기)의 필요성이 존재한다.
B.9.11.1.5 JTAG 테스트 제어
이들 규격 블럭은 래치를 이용한다.
B.9.11.2 회로 설계 문제
IDCT 설계 (규격 셀, 데이타경로 라이브러리, RAM, ROM 등)에 사용되었던 라이브러리 셀의 설계에서 수행된 작업과는 별도로, IDCT에서 임의의 트랜지스터 레벨의 회로 설계에 대해 어떠한 구비조건도 없다. 변환 데이타경로에서 공지된 일부 임계 경로에 대해 회로 시뮬레이션 (Hspice을 사용하여)이 수행되었고, 또한 Hspice는 허용된 최대 길이에 근접한 경로의 경우에 임계 경로 분석(CPA) 툴의 결과를 검증하는 데 사용되었다.
IDCT는 정상 동작에서 완전히 정적 (즉, 시스템 클럭을 무한히 중지시킬 수 있다)이지만, 테스트 클럭이 정지 (또는 매우 느린)될 때 소멸할 스캔 가능한 래치에서는 다이나믹한 노드이다. Vt 강하 (즉, 멀티플렉싱 출력)를 나타내는 일부 노드의 비-복원 특성으로 인해, IDCT가 정적일 때 "마이크로-전원(mocro-power)" 일 수 없다.
B.9.11.3 레이아웃 접근방법
본 발명의 레이아웃 구현에 대한 총체적인 접근방법은 BPR (약간의 수동적인 간섭)을 사용하여 많은 z셀과 적은 수의 매크로 블럭으로 구성된 완전한 IDCT를 설계하는 것이다. 이들 매크로 블럭은 수동으로 편집된 레이아웃(즉, RAM, ROM, 클럭 발생기, 데이타경로)이거나, 또는 "oued" 블럭의 경우, 다른 z셀와 데이타경로로부터 BPR을 사용하여 작성된 것이었다.
데이타경로는 kdplib 셀로부터 구성되었다. 부수적으로, kdplib 셀의 국부적으로 정의된 레이아웃 변형이 정의되고, 크기의 장점을 제공하는 것으로 인식된 곳에서 사용되었다. 각각의 "oned" 블럭, "oued_d"에 사용된 데이타경로는 설계에서 단연코 가장 단순한 소자이고, 이 데이타경로의 크기 (높이)를 최적화하는 데 상당한 노력이 투자되었다.
변환 데이타경로 "t_dp"의 구성은, 데이타경로 내에 소자를 정확히 정렬시키는 것이 상호접속 방법에 영향을 미치기 때문에 다소 중요하다. 허용 가능한 최대 값 (비록 터무니없이 불편하지만 이상적으로 8, 10도 역시 가능하다)이 존재하기 때문에 가장 체증이 심한 지점에서 발생하는 "overs"의 수 (서브-블럭에 접속되어 있지 않은 수직 선)를 최소로 하는 것이 중요하다. 이 데이타경로는 논리적으로 세개의 주요 서브-부분으로 분할되어 있고, 이와 같이 데이타경로 레이아웃이 수행 되었다. 각각의 서브-부분에는, 실제로 네개의 평행한 데이타 흐름 (이는 여러 지점에서 결합되었다)이 존재하므로, 각각의 서브-부분 내에 데이타 흐름 (및 모든 소자의 위치)을 구성하는 방법이 많이 존재한다. 정확하게 접속될 레이아웃의 달성이 가능하도록 레이아웃이 시작되기 전에, 각 서브-부분 내의 블럭의 정렬 및 물리적 버스 피치에 논리적 버스의 할당이 조심스럽게 수행되었다.
B.9.12 검증
IDCT의 검증은 알고리즘의 최상부 검증에서 최종 레이아웃 체크까지 여러 레벨에서 수행되었다.
변환 아키텍춰에 대한 초기 작업은 C로 수행되었는데, 완전히 정확한 그리고 비트-정밀 정수 모드(full-precision and bit-accurate integer mode)가 개발되었다. H.261 정확도 명세에 부응하고 변환 아키텍춰 내에서 동적 계산 범위를 측정하기 위해 비트-정밀 모델에 대해 여러가지 검사가 수행되었다.
설계는 서브-블럭 (예를 들어, 데이타경로와 RAM의 제어)의 M행위 설명(Mbehavioral description)을 기록함으로서 여러 가지 경우로 진행하였다. 이와 같은 설명은 해당 블럭에 대한 개략적인 설명(schematic description)에 관한 설계로 진행하기 전에 Lsim으로 시뮬레이트되었다. 몇가지 경우 (즉, RAM, 클럭 발생기)에, 행위 설명은 상위 레벨의 시뮬레이션을 위해 사용되었다.
논리적 시뮬레이션을 수행하기 위한 전략은 해당 레벨에서 적절히 시뮬레이트할 모든 것에 대한 개략 도면을 시뮬레이트하는 것이었다. 하위 레벨의 라이브러리 셀 (즉, z셀과 kdplib)은 이것이 훨씬 작고 신속한 시물레이션 결과를 나타내기 때문에 주로 그 행위 설명을 사용하여 시뮬레이트되었다. 부수적으로, 행위 라이브러리 셀은 일부 회로 구성 문제에 촛점을 맞출 수 있는 타이밍 체크 특성을 제공한다. 신뢰성있는 체크로서, 라이브러리 셀의 트랜지스터 설명을 사용하여 일부 시뮬레이션이 수행되었다. 모든 논리적 시뮬레이션은 제로-지연 방법으로 수행되었고, 그래서 기능 성능을 검증하도록 의도되었다. 실제 타이밍 행위의 검증은 다른 기술로 수행되었다.
(RC_Timing 모드가 사용되는) Lsim 스위치-레벨 시뮬레이션은 타이밍 성능의 부분적 검증으로 수행되었지만, 또한 일부의 다른 잠재적인 트랜지스터 레벨의 문제 (즉, 글리치 감지성 회로)에 대한 체크를 제공한다.
타이밍 문제를 검사하기 위한 주요 검증 기술은 CPA 툴, "datechk"에 대해 '경로"옵션을 사용하는 것이었다. 이는 좀 더 긴 신호 경로 (일부는 이미 공지된다)를 인식하는데 사용되었고, Hspice는 일부 중요한 경우에 CPA 분석을 검증하는데 사용되었다.
대부분의 Lsim 시뮬레이션은 대부분의 IDCT 행위가 디바이스를 통해 토큰의 흐름에 의해 수행되기 때문에 규격 소스 -> 블럭 -> 싱크 방법(sink methology)으로 수행되었다. 또한, 마이크로프로세서 인터페이스 (컨피그레이션, 이벤트 및 테스트 논리)를 통해 액세스된 특징 및 JTAG/스캔을 통해 액세스된 테스트 특징을 테스팅하는데 부수적인 시뮬레이션이 필요하다.
컴파일된 코드 시뮬레이션은 모든 1DCT에 대해, 다시 규격 소스 -> 블럭 -> 싱크 방법과 Lsim 검증에 사용되었던 동일한 많은 토큰 스트림을 사용하여 당해 기술 분야에서 통상의 기술을 가진자에 의해 용이하게 수행될 수 있다.
B.9.13 테스팅 및 테스트 지원
본 절은 각각의 블럭이 어떻게 테스팅되는 지에 대해 테스팅 및 분석을 제공하는 메커니즘을 다룬다.
테스트 액세스를 제공하는 세가지 메커니즘은 다음과 같다.
* RAM 코어로의 마이크로프로세서 액세스
* 스누퍼 블럭으로의 마이크로프로세서 액세스
* 제어 및 데이타경로 논리로의 스캔 경로 액세스
IDCT에는 두개의 "스누퍼(snooper)" 블럭과 한개의 "슈퍼 스누퍼(super snooper)"가 존재한다. 제140도는 스누퍼 블럭의 장소 및 기타의 마이크로프로세서 테스트 액세스를 도시한다.
이들 및 두개의 RAM 블럭을 사용하여, 토큰 흐름과 관련하여 그 행위를 테스팅하기 위한 목적으로 각각의 주요 블럭을 격리시킬 수 있다. 마이크로프로세서 액세스를 사용하여, 임의의 블럭으로의 토큰 입력을 제어하고 격리된 해당 블럭의 토큰 포트 출력을 관찰할 수 있다. 또한, 각각의 블럭의 제어 부분에 있는 (거의)모든 플립-플롭 및 래치와 "oned" 변환 데이타경로 파이프라인의 경우 일부 데이타 경로 래치를 통해 지나는 두 개의 개별적인 스캔 경로가 존재한다. 두개의 스캔 경로를 "a" 및 "b"라고 하는데, 전자는 "decheck"블럭에서 "ip_fmt"블럭으로 통과하고, 후자는 첫 번째 "oned"블럭에서 "ras"블럭으로 통과한다.
정상적인 방법으로 메모리 맵핑된 적당한 장소를 액세스함으로써 스누퍼에 액세스 할 수 있다. 역시 RAM 코어 ("ramtest" 입력을 적당히 이용함으로써)도 동일하다. 스캔 경로는 정상적인 방법으로 JTAG 포트를 통해 액세스된다.
B.9.13.1 "Decheck"
이 블럭은 입력 및 출력 2선식 인터페이스를 위한 두개의 래치가 프로세싱블럭을 둘러싸는 규격 구조(standard structure) (제139도를 참조)를 갖는다. 흔히, 인에이블될 때마다 이들이 데이타 상으로 단순히 통과하고 테스팅될 어떠한 논리 깊이도 갖지 않기 때문에 2선식 래치에 대해 어떠한 스캐닝도 제공되지 않는다.
이 블럭에서, "제어" 부분은 모두 스캔경로 "a"상에 존재하는 z셀의 1-스테이지 파이프라인으로 구성된다. 이 제어부의 논리는 비교적 단순하고, 가장 복잡한 경로는 아마 6-비트 증가기가 사용되는 DATA 확장 카운트의 발생에서이다.
B.9.13.2 "Izz"
이 블럭은 규격 구조의 변형이고, 2선식 인터페이스 래치 및 제어 부분에 부가된 RAM 코어 블럭을 포함한다. 이 제어 부분은 z셀 및 어드레스 시퀀스를 생성하는데 사용된 작은 ROM으로 구현된다. 모든 Z셀은 스캔경로 "a"에 존재하고, 2셀 래치를 통해 ROM 어드레스 및 데이타에 액세스한다. 또한, 수를 생성시키고 수를 증가시키거나 또는 감소시킬 수 있는 부가적인 논리가 존재한다. 또한, 판독 어드레스를 생성하는데 사용된 7-비트 풀 가산기(full adder)가 존재한다. RAM 코어는 마이크로프로세서를 거쳐 키홀 레지스터를 통해 액세스할 수 있다 (테이블 B.9.1을 참조).
B.9.13.3 "Ip_fmt"
이 블럭은 다시 규격 구조를 갖는다. 제어 논리는 약간 단순한 z셀 논리(모두 스캔경로 "a"상에 존재)로서 구현되지만, 논리가 극히 얕고 단순하기 때문에 직접적으로 액세스하지 않고 데이타경로로 데이타의 래칭 및 쉬프팅/멀티플렉싱이 수행된다.
B.9.13.4 "Oned"
이 블럭은 규격 구조 다음에 오고, 랜덤 논리(random logic) 및 데이타경로부분으로 나눈다. 2셀 논리는 비교적 직선적이고, 모든 Z셀은 스캔경로 "a"상에 존재한다. 변환 파이프라인 데이타경로용 제어 신호는 스캔경로 상에 있는 z셀 래치로 구성되는 긴 쉬프트 레지스터로부터 유도된다. 부수적으로, 일부 파이프라인 래치는 스캔경로 상에 존재하는데, 그 이유는 일부 파이프라인의 스테이지 (즉, 곱셈기 및 가산기) 사이에 상당히 깊은 논리가 존재하기 때문이다. 비-DATA 토큰은 쉬프트 레지스터를 따라 통과되고 데이타경로로서 구현되며, 임의의 스테이지로의 어떠한 테스트 액세스도 존재하지 않는다.
B.9.13.5 Tram'
이 블럭은 "izz" 블럭과 극히 유사하다. 그러나, 이 경우, 어드레스 시퀀스어드레스 생성에 사용되는 어떠한 ROM도 존재하지 않는다. 이는 알고리즘적으로 수행된다. 모든 z셀 제어 상태는 데이타경로 "b"상에 존재한다.
B.9.13.6 Rras'
이 블럭은 규격 구조 다음에 오고, 전적으로 z셀로 구현된다. 대부분의 복잡한 논리 기능은 반올림할 때 사용되는 8-비트 증가기이다. 기타의 모든 논리는 매우 단순하다. 모든 상태는 스캔경로 "b"이다.
B.9.13.7 기타 최상위 레벨 블럭
IDCT의 상위 레벨에 보이는 몇몇 다른 블럭이 존재한다. 스누퍼는 명백히 테스트 액세스 논리의 일부이고, 또한 JTAG 제어 블럭도 마찬가지이다. 또한, (비록 이들이 여러가지 테스트 특성을 지원할 지라도) 임의의 특수한 테스트 액세스도 갖지 않는 두개의 클럭 발생기가 존재한다. 블럭 "Idctsels"은 마이크로프로세서 어드레스를 디코딩하기 위한 조합 z셀 논리이고, 블럭 "idctregs"는 마이크로프로세서로 액세스 가능한 이벤트와 IDCT와 연관된 제어 비트를 포함한다.
B.10절 소개
B.10.1 시간 디코더의 개요
본 발명에 따른 시간 디코더의 내부 구조가 제142도에 도시된다.
칩의 블럭 간의 모든 데이타 흐름 (및 블럭내 대부분의 데이타 흐름)은 통상적인 2선식 인터페이스로서 제어되고, 제142도의 각각의 화살표는 2선식 인터페이스를 나타낸다. 입력하는 토큰 스트림은 외부 시스템 클럭에서 위상-록-루프(pho/phl)로부터 유도된 내부 클럭으로 데이타를 동기화시키는 입력 인터페이스(450)를 통과한다. 다음에 이 토큰 스트림은 톱 포크(top fork)(451)를 거쳐 두개의 경로로 분할되는데, 한 스트림은 어드레스 발생기(452)로 통과하고, 다른 스트림은 256 워드 FIFO(453)을 지난다. 예측 가산기(Prediction adder) (455) (P와 B프레임)의 공간 디코더(spatial decoder)로부터 입력하는 에러 데이타에 더해지기 전에, 예측 필터(prediction filters)에서 처리되는 동안 이 FIFO가 데이타를 버퍼한다. MPEG 디코딩 동안, 출력 프레임이 올바른 순서에 있도록 I와 P에 대해 프레임 재정렬 데이타가 인출되어야(fetched) 하는데, 이 재정렬된 데이타는 판독 러더블럭(read rudder block(456)의 스트림 속으로 삽입된다.
어드레스 발생기(452)는 전방 및 후방 예측, 재정렬, 판독 및 기록-백(write-back)에 대해 개별적인 어드레스를 생성하는데, 다시 기록된 데이타는 기록 러더 블럭(457)의 스트림으로부터 분할된다. 마지막으로, 데이타는 출력 인터페이스 블럭(458)의 외부 클럭에 재동기된다.
시간 디코더의 모든 주요 블럭은 내부 마이크로프로세서 인터페이스(UPI) 버스에 접속된다. 이는 마이크로프로세서 인터페이스 블럭(459)의 외부 마이크로프로세서(MPI) 버스로부터 유도된다. 이 블럭은 그것과 연관된 칩에 여러가지 블럭용 어드레스 디코더를 갖는다. 또한, 마이크로프로세서 인터페이스와 결합된 것은 이벤트 논리(event logic)이다.
시간 디코더의 나머지 논리는 주로 테스트와 관련된다. 첫째, IEE1149.1(JTAG) 인터페이스(460)는 JTAG 경계-스캔 특성에 대해서는 물론 내부 스캔 경로에 인터페이스를 제공한다. 둘째, 2선식 인터페이스 스테이지는 마이크로프로세서 인터페이스를 통해 데이타 흐름에 강제로 액세스하는 것을 허용하는데, 이 스테이지는 테스트 모드로 파이프라인 아키텍춰의 전략지점(strategic points)에 포함된다.
B.11절 클럭킹, 테스트 및 관련 문제
B.11.1 클럭 영역 (clock regimes)
칩 내의 개별적인 기능 블럭을 고려하기 전에, 칩 내의 클럭 영역과 그들 간의 관계를 이해하는 것이 유익하다.
정상 동작 동안, 대부분의 칩 블럭은 위상-록-루프(PLL) 블럭으로부터 신호 pllsysclk에 동기하도록 동작한다. 이것의 예외는, DRAM 제어 신호(notew, notoe, notcas, notras)를 생성하고 iftime 서브-블럭에 동기될 필요성에 의해 그 타이밍이 제어되는 DRAM 인터페이스이다. 이 블럭의 코어는 2-위상의 중복하지 않는 클럭 clk0과 clk1으로서 클럭되는데, 이들은 PLL cki0, cki1 및 ckq0, ckp1에 독립적으로 공급된 4분 2-위상 클럭(quadrature two-phase clocks)으로부터 유도된다.
clk0, clk1 DRAM 인터페이스 클럭이 나머지 칩의 클럭에 비동기식이기 때문에, DRAM 인터페이스와 칩의 나머지 간의 인터페이스에서 준안정 행위(metastable behavior) (실제로 가능한 정도까지)의 가능성을 제거하기 위한 조치가 취해졌다. 동기화는 두 영역, 즉 어드레스 발생기의 출력 인터페이스(addrgen/predread/psgsync, addrgen//sync18 및 addrger ip_rd2/sync18)와 DRAM 인터페이스에서 스윙-버퍼 RAM의 "스윙윙(swinging)"을 제거하는 블럭에서 (DRAM 인터페이스에 대한 절을 참조)에서 발생한다. 각각의 경우, 동기화 프로세스는 직렬인 세 개의 준안정 플립-플롭에 의해 달성된다. 이는 어드레스 발생기의 출력 스테이지에 clk0/clk1이 사용된다는 것을 알아야 한다.
이와 같이 완전히 비동기인 클럭 영역이외에, pllsysclk로부터 2-위상의 중복하지 않는 클럭(ph0,ph1)을 발생하는 개별적인 다수의 클럭 발생기가 존재한다. 어드레스 발생기, 예측 필터 및 DRAM 인터페이스 각각은 자신의 클럭 발생기를 갖는데, 칩의 나머지는 공통 클럭 발생기로 동작된다. 그 이유는 두가지이다. 첫째, 이는 개별적인 클럭 발생기에 캐패시터성 부하를 감소시킴으로써, 클럭 구동기를 보다 작게 하고 클럭 라우팅 폭을 감소시킨다. 둘째, 각각의 스캔 경로가 클럭 발생기로서 제어되므로, 클럭 발생기의 수를 증가시키고 좀더 짧은 스캔-경로가 사용될 수 있게 한다.
서로 다른 클럭 발생기로부터 유도된 중복하지 않는 클럭(non-overlapping clocks)간의 미소한 스큐(skews)는 인터페이스에서 언더랩(underlap)이 발생하였다는 것을 의미할 수 있기 때문에 이들 클럭-영역(clock-regime) 경계 양단으로 구동되는 신호를 재동기시킬 필요가 있다. 각각의 "스누퍼" 블럭에 내장된 회로(B.11.4절 참조)는 이것이 발생하지 않도록 보장하고, 스누퍼 블럭은 토큰 디코드 블럭에서 재동기가 수행되는 어드레스 발생기의 전면을 제외한 모든 클럭 영역 사이의 경계에 놓인다.
B.11.2 클럭의 제어
각각의 규격 클럭 발생기는 정상 로드와 스캔-테스트(scan-test) 모드로 동 작할 수 있게 하는 다른 많은 클럭을 발생한다. 스캔-테스트 모드에서 클럭의 제어는 어디에서나 상세히 서술되지만, 클럭 발생기 (tph0,tph1,tckm,tcks)에 의해 발생된 일부 클럭은 흔히 도면에 어떠한 원시적인 기호(primitive symbols)에 결합된 것으로 나타나지 않는다. 그 이유는 이들 클럭을 정확히 접점시키는 후-프로세서에 의해 스캔 경로가 자동적으로 발생되기 때문이다. 이와 같이 기능상의 관점으로 보아, 후-프로세서가 도면에 도시된 것과는 다른 클럭으로 접속되어 있는데, 그 행위는 동일한다.
정상 동작 동안, 마스터 클럭은 다른 여러가지 방법으로 유도될 수 있다.
테이블 B.11.1은 핀 pllselect와 오버라이드(override)의 상태에 따라 어떻게 여러 가지 모드가 선택될 수 있다는 것을 보여준다.
테이블 B.11.1 클럭 제어 모드
B.11.3 2선식 인터페이스
2선식 인터페이스의 전반적인 기능은 기술 참고 문헌에 상세히 서술되어 있다. 그러나, 2선식 인터페이스는 시간 디코더 내에서 모든 블럭-대-블럭 통신을 위해 사용되고, 대부분의 블럭은 이들 모두 2선식 인터페이스 스테이지인 다수의 파이프라인 스테이지로 구성된다. 그래서, 많은 도면을 해석할 수 있도록 하기 위해 2선식 인터페이스의 내부 구현을 이해할 필요가 있다. 일반적으로, 이들 내부 파이프라인 스테이지는 제143도에 도시된 바와 같이 구성된다.
제143도는 흔히 사용되는 구성인 래치-논리-래치 표현도를 도시한다. 그러나, 다수의 스테이지가 모두 조립될 때, 이는 (많은 엔지니어들에게 있어서 보다 익숙한 모델인) 래치-래치-논리인 "스테이지"를 생각할 수 있다. 래치-논리-래치 구성을 사용함으로써 블럭을 송신하거나 또는 수신하는데 있어서 간섭하는 어떠한 논리도 필요없이 블럭간의 모든 통신이 래치에서 래치로 될 수 있다.
다시 제143도를 참조하면, 논러 블럭을 제거하고 out_valid와 out_accept가 게이트되는 것과 동일한 방법으로 래치 및 래치된 in_valid 간의 데이타 및 유효 신호를 in_accept 래치의 입력에 대한 NOR 게이트로 직접 접속함으로써 간단한 2선식 인터페이스 FIFO 스테이지가 구성될 수 있다. 다음에 데이타 및 유효 신호는 대응하는 수용 신호가 하이일 때 전파한다. 도시된 방법과 같이, in_valid를 out_accept_reg와 OR 접속함으로서, 심지어 out_accept_reg가 로우일지라도 in_valid가 로우이면 데이타가 수용될 것이다. 이와 같이 정체(stall) (수용 신호가 로우)가 발생할 때마다 파이프라인으로부터 갭(gaps) (유효 비트가 로우인 데이타)이 제거된다.
제143도에 도시된 바와 같이, 논리 블럭이 삽입되면, 또한 in_accept와 out_valid가 데이타 또는 블럭의 상태에 의존할 수 있다. 도시된 구성에서, 마스 터가 ph1으로서 인에이블되고 슬레이브가 ph0으로서 인에이블되어 블럭 내 임의의 상태가 마스터-슬레이브 디바이스에 유지되는 것이 규격이다.
B.11.4 스누퍼 블럭
스누퍼 블럭은 마이크로프로세서 인터페이스를 거쳐 칩의 여러 지점에 있는 데이타 스트림으로의 액세스를 가능케 한다. 두가지 종류의 스누퍼 블럭이 존재한다. 흔히 사용되는 스누퍼는 클럭이 직접 제어될 수 있는 테스트 모드에서만 액세스될 수 있다. "슈퍼 스누퍼"는 클럭이 런닝(running)하는 동안 액세스될 수 있고 마이크로프로세서 버스로부터의 비동기식 데이타를 내부 칩 클럭에 동기화시키는 회로를 구비한다. 테이블 B.11.2는 시간 디코더 내 모든 스누퍼의 장소 및 타입을 열거한다.
테이블 B.11.2 시간 디코더 내에서의 스누퍼
테이블 B.11.2 시간 디코더 내에서의 스누퍼
이들 스누퍼 모두의 이용에 대한 세부사항은 테스트 절에 포함되어 있다. JTAG 인터페이스의 동작에 대한 세부사항은 JTAG 절에 포함된다.
B.12절 기능 블럭
B.12.1 톱 포크(top fork)
본 발명에 따른 톱 포크는 두가지 다른 기능을 제공한다. 첫 째, 이는 데이타 스트림을 두 개의 개별적인 스트림으로 포크(forks)하는 데, 한 스트림은 어드레스 발생기에 그리고 다른 하나는 FIFO에 대한 스트림이다. 둘 째, 이는 칩이 컴피그될 수 있도록 칩을 시작하고 정지하기 위한 수단을 제공한다.
구성 요소의 포크 부분 특성은 매우 간단하다. 동일한 데이타가 어드레스발생기 및 FIFO 모두에 제시되고, 수용이 이전 스테이지에 다시 전달되기 전에 양블럭 모두에 의해 수용되어야만 한다. 따라서, 포크의 두 분기(two branches)의 유효는 다른 분기로부터의 수용에 따른다. 만약 칩이 정지 상태이라면, 분기 모두에 대한 유효는 로우로 유지된다.
컨피그 비트(configure bit)가 하이로 세팅될 때까지 in_accept가 로우로 유 지되는 상태에서 칩에 전원이 공급된다. 이렇게 함으로써, 사용자가 칩을 컨피그 할 때까지 어떠한 데이타도 수용되지 않게 한다. 만약 사용자가 임의의 다른 시간에 칩을 컨피그할 필요가 있으면, 사용자는 컨피 그 비트를 세팅시키고 칩이 현재의 스트림을 종료할 패까지 대기하여야 한다. 정치프로세스는 다음과 같다.
1) 만약 컨피그 비트가 세팅되어 있으면, 톱 토큰에 의해 플러시 토큰(flush token)이 검출된 후에 더 이상의 데이타를 수용하지 않는다.
2) FLUSH 토큰이 판독 러더(read rudder)에 도착할 종료할 것이다. 이것으로 신호 seq_done가 하이가 된다.
3) seq_done이 하이가 되면, 마이크로프로세서에 의해 판독될 수 있는 이벤트 비트를 세팅시킨다. 이 이벤트 신호는 이벤트 블럭(event block)네 의해 마스크될(masked) 수 있다.
B.12.2 어드레스 발생기
본 발명에 있어서, 어드레스 발생기(addrgen)는 프레임 내의 블럭 수를 카운팅하고, DRAM 데이타 전송을 위해 올바른 어드레스 시퀀스를 발생할 책임이 있다. 어드레스 발생기의 입력은 토큰 입력 포트 (topfork를 거쳐)로부터의 토큰 스트림이고, DRAM 인터페이스로의 출력은 요청/확인 응답 프로토콜에 의해 제어되는 어드레스 및 기타 정보로 구성된다.
어드레스 발생기의 주요 부분은 다음과 같다.
* 토큰 디코드
* DRAM 블럭 어드레스의 블럭 카운팅 및 생성
* 동화상 벡터 데이타(motion vector data)를 어드레스 오프셋(addressoffset )으로의 변환
* 예측 전송(prediction transfers)을 위한 요청 및 어드레스 생성
* 재정렬 판독 어드레스 발생기
* 기록 어드레스 발생기
B.12.2.1 토큰 디코드 (tokdec)
토큰 디코드에서, 코딩 규격, 프레임과 블럭 정보 및, 동화상 벡터와 연관된토큰이 디코딩된다. 스트림으로부터 추출된 정보는 역시 upi를 거쳐 액세스될 수 있는 레지스터의 세트에 저장된다. DATA 토큰 헤더의 검출이 후속하는 블럭에 시그널되어 블럭 카운팅 및 어드레스 생성을 인에이블시킨다. JPEG를 실행할 때 아무것도 생성하지 않는다.
디코딩된 토큰의 리스트
* CODING_STANDARD
* DATA
* DEFIlE_MAX_SAMPLING
* DEFINE_SAMPLING
* HORIZONTAL_MBS
* MVD_BACKYARDS
* MVD_FORWARDS
* PICTURE_START
* PICTURE_TYPE
* PREDICTION_MODE
또한 이 블럭은 1프레임 포인터의 토글링(toggling)을 제어하고 입력 스트림을 정체시키기 위해 요청 발생기로부터 정보를 합성한다. 이 스트림은 새로운 프레임이 입력에 나타날 때 (PICTURE_START 토큰의 형태로) 정체되지만, 이전 프레임과 연관된 라이트백 (writeback) 또는 재정렬 판독은 불완전하다.
B.12.2.2 매크로블럭 카운터 (mblkcntr)
본 발명의 매크로블럭 카운터는 프레임에서 매크로블럭의 수평 및 수직 위치 및 매크로블럭 내 블럭의 수평 및 수직 위치를 가리키는 네 개의 기본 카운터로 구성된다. 초기에 그리고 각각의 PICTURE_START에서, 모든 카운터는 제로로 리셋된다. DATA 토큰 헤더가 도착함에 따라, 카운터는 증가하여 토큰 헤더와 프레임 구조의 컬러 성분 수에 따라 리셋된다. 이 프레임 구조는 토큰 디코더의 샘플링 레지스터로서 서술된다.
소정의 컬러 성분에 대해, 카운팅은 다음과 같이 진행한다. 매크로블럭의 폭에 도착한 후 리셋될 때까지 동일한 성분의 각각 새로운 DATA 토큰에 대해 수평 블럭 카운트가 증가된다. 매크로블럭의 높이에 도착한 후 리셋될 때까지 이 리셋에 의해 수직 블럭 카운트가 증가된다. 이것이 발생하면, 다음 컬러 성분이 예상된다 여기서, 매크로블럭의 각각의 성분 -각각의 성분에 대해 다른 매크로블럭의 수평 및 수직 크기에 대해 이 시퀀스가 반복된다. 임의의 성분에 대해, 만약 예상된 것보다 적은 블럭이 수신되면, 카운트는 에러없이 여전히 다음 성분으로 진행할 것이다.
DATA 토큰의 컬러 성분이 예상된 값 미만이면, 수평 매크로블럭 카운트가 증가된다. (또한 카운터가 보다 상위의 성분 인덱스를 예상함에 따라, 소정의 컬러 성분에 대해 예상된 수 이상의 블럭이 나타날 때 이것이 일어날 것이라는 것을 알아야 한다. ) 이 수평 카운트는 카운트가 매크로블럭의 화상 폭에 도착할 때 리셋된다. 이 리셋은 수직 매크로블럭 카운트를 증가시킨다.
H.261 CIF 포맷의 매크로블럭을 카운팅할 수 있다. 이 경우, 매크로블럭과 화상 사이에는 블럭의 그룹(group of blocks)이라고 하는 여분의 레벨 계층(extralevel hierarcy)이 존재한다. 이것은 11 매크로블럭 폭과 3 깊이이고, 화상은 항상 2 그룹 폭이다. 토큰 디코더는 PICTURE_TYPE 토큰으로부터 CIF 비트를 추출하고, 이것을 매크로블럭 카운터로 전송하여 블럭의 카운트를 증가시키도록 명령한다. 성분마다 너무 적거나 또는 너무 많은 블럭의 인스턴스는 상기와 같이 유사한 반작용을 유발할 것이다.
B.12.2.3 블럭 계산(blkcalc)
블럭 계산은 매크로블럭 및 매크로블럭-내-블럭(block-within- macroblock)좌표를 화상에서 블럭 위치에 대한 좌표로 변환하는 데, 즉 이는 계층의 레벨을 무너뜨린다 (knock outs). 물론 이는 서로 다른 컬러 성분의 샘플링율을 고려하여야만 한다.
B.12.2.4 기본 블럭 어드레스 (bsblkadr)
컬러 성분 오프셋과 함께 blkcalc로부터의 정보는 선형 DRAM 어드레스 공간내의 블럭 어드레스를 계산하는 데 사용된다. 반드시, 소정의 컬러 성분에 대해, 선형 블럭 어드레스는 화상의 폭에 블럭 길이의 수를 더한 블럭의 수이다. 이는 컬러 성분 오프셋에 더해져 기본 블럭 어드레스를 형성한다.
B.12.2.5 벡터 오프셋 (vec_pipe)
토큰 디코더에 의해 제시된 동화상 벡터 정보는 수평 및 수직 픽셀 오프셋좌표의 형태이다 즉, 각각의 전방 및 후방 벡터에 대해, 형성되는 블럭에서 예측될 블럭으로 반-픽셀만큼 변위시키는 (x,y)가 존재한다. 이들 좌표는 양 또는 음일 수 있다는 것을 알아야 한다. 이들은 먼저 각각의 컬러 성분의 샘플링에 따라 스케일되고, 블럭 및 새로운 픽셀 오프셋 좌표를 형성하는 데 사용된다.
제145도에서, 빗금친 영역은 형성되고 있는(being formed) 블럭을 도시한다. 점선 윤곽선은 예측되는(being Predicted) 블럭이다. 큰 화살표는 블럭 오프셋 -예측 블럭의 원점을 포함하는 DRAM 블럭에 대한 수평 및 수직 벡터, 이 경우 (1,4)를 도시한다. 작은 화살표는 새로운 픽셀 오프셋- 해당 DRAM 블럭 내 예측 블럭원점의 위치를 도시한다. DRAM 블럭이 8x8 바이트이기 때문에, 픽셀 오프셋은(7,2)로 보인다.
다음에 곱셈 어레이 vmarrla는 블럭 벡터 오프셋을 선형 벡터 오프셋으로 변환한다. 이 픽셀 정보는 (x,y) 좌표 (pix_info)로서 예측 요청 발생기에 전달된다.
B.12.2.6 예측 요청(prediction requests)
프레임 포인터(frame pointer), 기본 블럭 어드레스(base block address) 및 벡터 오프셋은 DRAM (Inblkad3)으로부터 인출되는(to be fetched) 블럭의 어드레스를 형성하기 위해 더해진다. 만약 픽셀 오프셋이 제로이면, 단지 한번의 요청만이 발생된다. 만약 x OR y 차원중 어느 한 차원에 오프셋이 존재하면, 이때 두 개의 요청 -본래의 블럭 어드레스와 바로 우측 또는 바로 밑의 블럭 어드레스- 이 생성된다. 오프셋이 모두x및 y에 있으면, 네개의 요청이 생성된다.
칩 클럭 영역과 DRAM 인터페이스 클럭 영역간의 동기화는 첫 번째 가산(inblkad3)과 적절한 요청을 발생하는 상태 머신 사이에서 발생한다. 그래서, 이 상태 머신(psgstate)은 DRAM 인터페이스 클럭에 의해 클럭되고, 이 스캔된 엘리먼트가 DRAM 인터페이스 스캔 체인의 일부를 형성한다.
B.12.2.7 재정렬 판독 요청 및 기록 요청
여기에서는 아무런 픽셀 오프셋도 관련되어 있지 않기 때문에, 각각의 어드레스는 관련된 프레임 포인터에 기본 블럭 어드레스를 더함으로써 형성된다. 재정렬 판독은 예측과 동일한 프레임 기억장치를 사용하고, 데이타는 다시 다른 프레임 기억장치에 기록된다. 각각의 블럭은 판독 및 기록 데이타의 전송이 대응하는 어드레스에서 예측 전송을 지연시킬 가능성이 있기 때문에 어드레스를 저정하기 위한 짧은 FIFO를 구비한다 (그 이유는 판독/기록 데이타가 예측 데이타 보다는 칩 데이타흐름을 따라 스트림과 상호 작용(interacts)하기 때문이다). 각각의 블럭은 또한 칩 클럭과 DRAM 인터페이스 클럭 간의 동기화를 포함한다.
B.12.2.8 오프셋
DRAM은 각각의 프레임 기억 장치가 세 개의 컬럭 성분까지 구비하는 두 개의 프레임 기억장치로서 컨피그된다. 이 프레임은 포인터를 저장하고 각 프레임 내의 컬러 성분 오프셋은 upi를 통해 프로그램되어야만 한다.
B.12.2.9 스누퍼
본 발명에서, 스누퍼는 다음과 같이 배치된다 :
* blkcalc와 bsblkadr 사이 - 이 인터페이스는 수평 및 수직 블럭 좌표, 적당한 컬러 성분 오프셋 및 블럭(해당 성분에 대한)인 화상 폭을 포함한다.
* bsblkadr 후 - 기본 블럭 어드레스
* vec_pipe 후 - 선형 블럭 오프셋, 예측 모드에 대한 정보와 함께 블럭내의 픽셀 오프셋, 컬러 성분 및 H.261 연산
* Inblkad3 후 - "예측 요청" 하에 서술된 물리적 블럭 어드레스.
슈퍼 스누퍼는 외부 DRAM을 테스팅하는 동안 사용하기 위한 재정렬 판독 및 기록 요청 발생기에 놓인다. 세부 사항에 대해서는 DRAM 인터페이스 절을 참조한다.
B.12.2.10 스캔
addrgen 블럭은 자신의 스캔 체인을 갖는 데, 그 클럭킹은 블럭 자신의 클럭발생기(adclkgen)에 의해 제어된다. 블럭의 뒤끝에 있는 요청 발생기는 DRAM 인터페이스 클럭 영역 내에 포함된다는 것을 알아야 한다.
B.12.3 **예측 필터
본 발명에 따른 예측 필터의 전체적인 구조가 제146도에 도시되어 있다. 전방 및 후방 필터(forward and backward filters)는 동일하고, MPEG 전후 블럭을 필터링한다. 단지 전방 필터만이 H.261 모드로서 사용된다 (H.261 스트림이 후방 예측을 포함하지 않기 때문에 후방 필터의 h261_on 입력에서 영원히 로우이어야 한다) 전체 예측 필터 블럭은 2선식 인터페이스 스테이지의 파이프라인으로 구성된다.
B.12.3.1 예측 필터
각각의 예측 필터는 유효 데이타가 그 입력에 나타나자마자 데이타를 처리하는 다른 것과는 독립적으로 무관하게 행동한다. 제147도로부터 예측 필터는 두 개의 블럭이 동일한 네 개의 개별적인 블럭으로 구성된다는 것을 알 수 있다. 만약 이들 블럭의 동작이 MPEG와 H.261 동작에 대해 독립적으로 서술되면 좋다. 좀더 복잡한 H.261이 먼저 서술된다.
B.12.3.1.1 H.261 연산
사용된 1차원 필터 방정식은 다음과 같다 :
Fi = xi (그렇지 않으면)
이는 x 예측 필터에 의해 8x8 블럭의 각각의 행에 그리고 y 예측 필터에 의해 각각의 열에 인가된다. 이것이 달성되는 메커니즘은 pfltldd 도면의 기본 표현도인 제148도에 예시된다. 상기 필터는 세 개의 2선식 인터페이스 파이프라인 스테이지로 구성된다. 행의 첫 째 및 마지막 픽셀에 대해, 레지스터 A 및 C가 리셋되고, 데이타는 레지스터 B, D 및 F (B와 D의 내용이 제로에 더해진다)를 통해 변형되지 않고 통과한다. 레지스터 B의 출력이 1만큼 좌로 쉬프트되도록 Bx2mux의 제어가 세팅된다. 이 쉬프팅은 항상 임의의 이벤트에서 쉬프트되는 한 장소에 부가되는 것이다. 그래서, 모든 값이 4로 곱해진다 (다음에 더 상세히). 기타의 모든 픽셀에 대해, xi+1이 레지스터 C로 로딩되고, xi는 레지스터 B로 로딩되고, xi-1는 레지스터 A로 로딩된다. 제148도로부터 H.261 필터 방정식이 구현된다는 것을 알 수 있다. 수직 필터링이 세 개의 수평 그룹으로 수행되기 때문에 (이하의 차원 버퍼(Dimension Buffer)를 참조한다), 행의 첫째 및 마지막 픽셀을 달리 취급할 필요는 없다. 행 내에서 픽셀의 제어 및 카운팅은 각각의 1-D 필터와 결합된 제어 논리에 의해 수행된다. 그 결과가 4로 나누어지지 않았다는 것을 알아야 한다. 16으로의 나눔셈(4만큼 우측으로 쉬프트)은 수평 및 수직 필터링이 수행된 후 예측 필터 가산기(B.12.4.2절)의 입력에서 수행됨으로서, 산술의 정확도가 떨어지지 않는다. 레지스터 DA, DD 및 DF는 제어 정보를 파이프라인으로 전달한다. 이는 h261_on과 last_byte를 포함한다.
예측 필터에서 발견된 다른 블럭중에, 포맷터의 기능은 단지 데이타가 x-필터에 정확한 순서로 제시될 수 있게 하는 것이다. 상기로부터, 이것은 단지 제1스테이지가 레지스터 C의 입력에 접속되고, 제2 스테이지가 레지스터 B에, 그리고 제3 스테이지가 레지스터 A에 접속된 3-스테이지의 쉬프트 레지스터를 필요로한다.
x와 y 필터 사이에는, 세개의 수직 픽셀 그룹이 y-필터에 제시될 수 있도록차원 버퍼(dimension buffer)가 데이타를 버퍼링한다. 그러나, 이들 세개의 그룹이 여전히 수평으로 처리됨으로써, 예측 필터 내에서 어떠한 전치도 생성하지 않는다. 제149도를 참조하면, 차원 버퍼로부터 픽셀이 출력되는 시퀀스가 테이블 B.12.1에 예시된다.
테이블 B.12.1 : H.261 차원 버퍼 시퀀스
a. 이전의 블럭이 존재하지 않았다면 (또는 만약 블럭 간에 긴 갭(long gap)이 존재하였다면) 이전의 블럭 또는 무효 데이타로부터의 최소 픽셀 행.
b. F(x)는 H.261 필터 방정식의 함수를 가리킨다.
B.12.3.1.2 MPEG 연산
MPEG 연산 동안, 예측 필터는 간단한 하프 펠 보간(half Del interpolat ion)을 수행한다.
이는 h261_on 입력이 로우이지 않는 한 디폴트 필터 연산이다. 만약 1-D 필터로의 신호 dim이 로우이면, 이때 정수 펠 보간(integer pel interpolation)이 수행될 것이다. 따라서, 만약 h261_on이 로우이고 xdim과 ydim이 로우이면, 모든 픽셀은 필터링없이 직접 전달된다. 1-D 필터로의 dim 신호가 하이일 때, 행 (또는 열)은 8 픽셀 폭 (또는 높이)이어야만 한다. 이는 테이블 B.12.2에 요약된다.
테이블 B.12.2 1-D 필터 연산
제148도 "1-D 예측 필터"를 참조하면, 1-D 필터의 연산은 H.261의 행에 있는 첫 번째 및 마지막 픽셀에 대한 MPEG 정수 펠과 동일하다. MPEG 하프-펠 연산에 대해, 레지스터 A가 영구히 리셋되고, 레지스터 C의 출력은 좌로 1만큼 쉬프팅된다.
(레지스터 B의 출력은 어쨋든 좌측으로 1만큼 항상 쉬프팅된다). 따라서, 한쌍의 클럭 레지스터 F가 요구되는 결과의 네배인 (2B+2C)를 포함하지만, 이는 x와 y 필터 모두를 통과한 수가 4만큼 우측으로 쉬프팅되는 예측 필터 가산기의 입력에서 취해진다.
포맷터와 차원 버퍼의 기능도 역시 MPEG에서와 유사하다 포맷터는 하프-펠 보간을 위해 x-필터로 유효 픽셀을 전달하기 전에 두개의 유효 픽셀을 수집하여야 하는데, 차원 버퍼는 한 행의 버퍼만을 필요로 한다. 데이타가 x-필터를 통과한 후, 필터링 동작이 9-픽셀 행을 8-픽셀 행으로 변환하기 때문에 행에는 오로지 8픽 셀만이 항상 존재할 수 있다는 것을 주목할 필요가 있다. "실종된(lost)" 픽셀은 데이타 스트림의 갭으로 교체된다. 하프-펠 보간을 수행할 때, x-필터는 각각의 행의 끝에 8갭을 삽입하는데 (8픽셀 마다), y-필터는 블럭의 끝에 8갭을 삽입한다.
이는 블럭의 끝에 있는 8 또는 9 갭의 그룹이 DATA 토큰 헤더와 FIFO에서 나오는 스트림의 DATA 토큰 간의 다른 토큰과 정렬하기 때문에 중요하다. 이는 9x9 블럭이 필터링될 때 발생하는 칩의 최저 산출량을 최소화시킨다.
B.12.3.2 예측 펄터 가산기
MPEG 연산 동안, 이전의 화상, 나중의 화상, 또는 이들 두 화상의 평균을 사용하여 예측이 형성될 수 있다. 이전 프레임(earlier frame)으로부터 형성된 예측을 전방 예측(forward predictions)이라 하고, 나중 프레임(later frame)으로부터 형성된 예측을 후방 예측(backward predictions)이라고 한다. 예측 필터 가산기(pfadd)의 기능은 필터링된 예측 값 (전방, 후방 또는 로두)이 사용될 것인지를 결정하고, 어느 것이나 전방 필터링된 또는 후방 필터링된 예측 또는 이들 두 개 (양의 무한대로 반올림된)의 평균을 통과한다.
예측 모드는 오로지 블럭 사이에서만 즉, 기동시 또는 현재 예측 블럭의 마지막 바이트를 가리키는 fwd_1st_byte와 bwd_1st_byte 신호가 활성인 후에만 바뀔수 있다. 만약 현재의 블럭이 전방 예측이라면 이때 fwd_1st_byte가 검사(examined)된다. 만약 이것이 후방 예측이라면 이때 bwd_1st_byte가 검사된다.
만약 이것이 양방향 예측(bidirectional prediction)이라면, 이때 fwd_1st_ byte와 bwd_1st_byte 모두가 검사된다.
신호 fwd_on과 bwd_on는 어떤 예측값이 사용될 것인지를 결정한다. 임의의 시간에, 이들 신호 모두가 활성이거나 또는 이들 신호 어느 것도 활성화일 수 없다. 기동시, 또는 블럭의 입력에 어떠한 유효 데이타도 존재하지 않는 때 갭이 존재하는 경우, 블럭은 어떤 신호도 활성화되지 않은 때 하나의 상태로 진입한다.
다음 블럭에 대하여, 전방 또는 후방 블럭이 양방향 예측 쌍의 일부인 지를가리키는 신호 fwd_ima_twin와 bwd_ima_twin과, 버스 fwd_p_num(1:0) 및 bwd_P_num(1:0)에 대한 예측 모드를 결정하기 위해 두가지 기준이 사용된다. 이들 버스들은 각각의 새로운 예측 블럭과 예측 블럭 쌍에 대해 1만큼 증가시키는 수를 포함한다. 이들 블럭이 필요한 이유는, 예를 들어 전방 예측 블럭 다음에 양방향 예측 블럭이 존재하면 DRAM 인터페이스가 양방향 예측의 후방 블럭을 충분히 훨씬이전에 인출할(fetch) 수 있어, 제2의 전방 예측 블럭이 되기 전에 예측 필터 가산기의 입력에 도달할 수 있기 때문이다. 이와 유사하게, 전방 및 후방 예측의 다른 시퀀스는 예측 필터 가산기의 입력에서 시퀀스를 벗어날 수 있다. 따라서, 다음 예측 모드가 다음과 같이 결정된다.
1) 만약 유효 전방 데이타가 존재하고 fwd_ima_twin이 하이이면, 이때 블럭은 유효 후방 데이타가 bad_ima_twin이 세팅되어 도달할 때까지 정체(stalls)한 후, 각각의 쌍의 예측 값을 평균화하는 블럭을 통과한다.
2) 만약 유효 후방 데이타가 존재하고 bad_ima_twin이 하이이면, 이때 블럭은 유효 전방 데이타가 fwd_ima_twin이 세팅되어 도달할 때까지 정체(stalls)한 후, 상기와 같이 진행한다. 만약 전방 및 후방 데이타가 모두 유효이면, 어떠한 정체도 없다.
3) 만약 유효 전방 데이타가 존재하지만 fwd_ima_twin이 세팅되어 있지 않으면, 이때 fwd_p_num이 검사된다. 만약 이것이 이전 예측으로부터의 수에 1을 더한 값 (pred_num에 저장된)과 같다면, 이때 예측 모드가 전방으로 세팅된다.
4) 만약 유효 후방 데이타가 존재하지만 bwd_ima_twin이 세팅되어 있지 않으면, 이때 bwd_p_num이 검사된다. 만약 이것이 이전 예측으로부터의 수에 1을 더한값 1 (pred_num에 저장된)과 같다면, 이때 예측 모드는 후방으로 세팅된다.
새로운 블럭으로부터의 첫 번째 데이타가 도달하기 전에 예측 필터 가산기모드가 셋업될 수 있도록 파이프라인에서 한 스테이지 후로부터의 "early_ valid" 신호가 사용된다는 것을 알아야 한다. 이는 파이프라인에 어떠한 정체도 유입되지 않게 한다.
ima_twin과 pred_num 신호는 필터링된 데이타와 함께 전방 및 후방 예측 필터 파이프라인을 따라 전달되지 않는다. 그 이유는 다음과 같다 :
1) 이들 신호는 fwd_1st_byte와/또는 bwd_1st_byte가 유효일 때에만 조사된다. 이는 각각의 예측 필터에서 약 25개의 3-비트 파이프라인 스테이지를 절약한다.
2) 신호는 블럭을 통해 유효로 유지되므로, fwd_1st_byte 와/또는 bwd_1st_byte가 예측 필터 가산기에 도달할 때 유효이다.
3) 신호는 데이타가 도달하기 전에 검사된다.
B.12.4 예측 가산기 및 FIFO
예측 가산기 (패더(padder))는 예측 필터로부터의 데이타를 에러 데이타에부가함으로써 예측된 프레임(predicted frame)을 형성한다. 어드레스 발생기, DRAM 인터페이스 및 예측 필터를 통한 입력으로부터의 지연을 보상하기 위해, 에러 데이타는 패더에 도달하기 전에 256 워드 FIFO (sfifo)를 통과한다.
CODING_STANDARD, PREDICT10N_MODE 및 DATA 토큰은 예측된 블럭이 형성될 때를 결정하기 위해 디코딩된다. 8-비트 예측 데이타는 DATA 토큰에서 9-비트의 2의 보수 에러 데이타에 더해진다. 그 결과는 0 내지 255 범위에 한정되고, 다음 블럭으로 통과한다. 이와 같은 데이타 제한은 JPEG를 포함하는 모든 인트라-코드화 데이타에도 적용된다는 것을 알아야 한다.
또한, 본 발명의 예측 가산기는 FIFO 및 예측 필터로부터 도달하는 데이타의 부정합(mismatches)을 검출하기 위한 메커니즘을 포함한다. 이론적으로, 필터로 부터의 데이타 양은 예측과 관련된 FIFO로부터의 DATA 토큰의 수와 정확히 대응한다. 그러나, 고장이 심각한 경우, 패더는 복구하려 시도할 것이다.
FIFO 및 필터로부터의 데이타 블럭의 끝은 각각 in_extn과 fl_last 입력으로표시된다. DATA 토큰의 끝 이전에 필터 데이타의 끝이 검출되는 경우에, 나머지 토큰은 변하지 않고 계속 출력된다. 다른 한편, 만약 필터 블럭이 DATA 토큰보다 길면, 여분의 모든 필터 데이타가 수용되어 폐기될 때까지 입력이 정체된다.
토큰 입력 포트로부터의 데이타를 이들 블럭으로 직접 전달하고 그 출력을 토큰 출력 포트로 직접 전달하도록 칩이 컨피그됨에 따라, FIFO 또는 예측 가산기 어느 것에도 스누퍼는 존재하지 않는다.
B.12.5 기록 및 판독 러더(write and read rudders)
B.12.5.1 기록 러더(wrudder)
기록 러더(write rudder)는 예측 가산기로부터의 모든 토큰을 판독 러더로 전달한다. 이는 또한 어드레스 발생기의 제어하에 외부 프레임 기억장치로 모든 블럭 데이타가 다시 기록될 수 있도록 MPEG에서 I또는 P화상인 모든 데이타 블럭데이타와, H.261에서 모든 데이타 블럭을 DRAM 인터페이스로 전달한다. 비록 라이트 -백(write-back) 데이타가 DRAM 인터페이스로 통하는 스누퍼를 통해 전달될지라도 모든 주요 기능은 한개의 2선식 인터페이스 스테이지 내에 포함된다.
기록 러더는 다음 토큰을 디코딩한다.
테이블 B.12.3 기록 러더에 의해 디코딩된 토큰
DATA 토큰 헤더가 검출된 후, 모든 데이타 바이트가 DRAM 인터페이스로 출력된다. DATA 토큰의 끝은 로우인 in_extn에 의해 검출되고, 이것으로 인해 DRAM 인터페이스 스윙 버퍼(swing buffer)에 플러시 신호(flush signal)가 전달되게 된다. 정상 동작에서, 이것은 스윙 버퍼가 스윙할 때의 지점(point)에 일치할 것이지만, 만약 DATA 토큰이 데이타의 64 바이트를 포함하지 않으면 이는 복원 메커니즘(recovery mechanism) (비록 다음 몇몇의 출력 화상이 부정확할 가능성이 있을 지라도)을 제공한다.
B.12.5.2 판독 러더(rrudder)
본 발명의 판독 러더는 세 가지 기능을 갖는데, 두가지 주요 기능은 MPEG에서의 화상 시퀀스 재정렬(picture sequence reordering)에 관한 것이다.
1) 외부의 프레임 기억장치로부터 리드-백(read-back)된 데이타를 정확한 위치의 토큰 스트림으로 삽입하기.
2) I와 P 화상으로 화상 헤더 정보를 재정렬하기.
3) FLUSH 토큰 (B.12.1, "톱 포크"를 참조)을 검출함으로써 토큰 스트림의 끝을 검출하기.
판독 러더의 구조가 제150도에 예시된다. 전체 블럭은 규격 2선식 인터페이스 기술로부터 구성된다. 입력 인터페이스 래치에서 토큰이 디코딩되고 이들 디코드는 블럭의 동작을 결정한다.
테이블 B.12.4 판독 러더로 디코딩된 토큰
재정렬 기능은 마이크로프로세서 인터페이스에 의해 시동(turned on)되지만, 레지스터의 상태에 관계없이 코딩 규격이 MPEG가 아니면 금지된다. 동일한 MPI 레지스터는 어드레스 발생기가 재정렬 어드레스를 생성하는 지를 결정함으로써, 이 블럭으로부터 재정렬이 출력된다. 판독 러더가 어떻게 작동하는 지를 이해하기 위해서는, 토큰의 시퀀스가 다음과 같다는 사실을 염두에 두고 입력 및 출력 제어 논리를 각각 생각해 보자.
* CODING_STANDARD
* SEQUENCE_START
* PICTURE_START
* TEMPORAL_REFERENCE
* PICTURE_TYPE
* DATA 토큰 및 기타 토큰을 포함하는 화상
* PICTURE_END
* . . .
* PICTURE_START
* . . .
B.12.5.2.1 입력 제어 논리
전원을 넣게 되면, I 또는 P 화상에 대한 첫 번째 PICTURE_TYPE 토큰을 만날때까지 모든 토큰은 FIFO 1 (현재의 입력 FIFO라고 한다)을 통과한다. 다음에 FIFO 2가 현재의 입력 FIFO가 되고, I 또는 P 화상에 대한 다음 PICTURE_TYPE을 만날 때까지 모든 입력이 그곳으로 향하고, FIFO 1은 다시 현재의 입력 FIFO이 된다. I 또는 P 화상 내에서, DATA 토큰을 제외한 PICTURE_TYPE과 PICTURE_END 간의 모든 토큰이 폐기된다. 이는 동화상 벡터 등이 재정렬된 스트림으로 결함있는 화상과 결합하는 것을 방지하기 위한 것인 데, 여기서 이들 화상은 아무런 의미도 없다.
임의의 토큰 헤더의 존재를 가리키기 위해 3-비트 코드가 토큰 스트림을 따라 FIFO로 입력된다. 이는 FIFO의 추력에 대해 토큰 디코딩을 수행하여야 하는 것을 없앤다.
B.12.5.2.2 출력 제어 논리
전원을 넣게 되면, 화상 시작 코드를 만날 때까지 FIFIO 1(현재의 출력 FIFO라고 함)으로부터 토큰이 수용되고, 그 후 FIFO 2가 현재의 출력 FIFO이 된다. 다시 B.12.5.2.1절을 참조하면, 이 스테이지에서 세 개의 화상 헤더 토큰, PICTURE_START, TEMPORAL_REFERENCE 및 PICTURE_START가 FIFO 1에 유지된다는 것을 알 수 있다. 현재의 출력 FIFO는 I 또는 P 프레임에서 화상 시작 코드를 만날때마다 스왑된다. 따라서, 다음 I 또는 P 프레임까지 세개의 화상 헤더 토큰가 저장되는 데, 이때 이들은 정확하게 재정렬된 데이타와 연관될 것이다. B 화상은 재정렬되지 않고, 즉 어떠한 토큰도 폐기되지 않고 통과될 것이다. PICTURE_END를 포함하는 첫 번째 화상의 모든 토큰이 폐기된다.
I 및 P 화상 동안, 토큰 스트림으로 DATA 토큰에 포함된 데이타가 DRAM 인터페이스로부터 재정렬된 데이타로서 교체된다. 첫 번째 화상 동안, 어드레스 발생기가 여전히 DRAM 인터페이스로 하여금 재정렬된 데이타를 인출(fetch)하도록 요청하고 있기 때문에 "재정렬된" 데이타가 여전히 재정렬된 데이타 입력에 존재한다. 이는 쓰레기(garbage)로 간주되어 폐기된다.
B.13절 DRAM 인터페이스
B.13.1 개관
본 발명에 있어서, 공간 디코더, 시간 디코더 및 비디오 포맷터 각각은 특수한 칩을 위한 DRAM 인터페이스 블럭을 포함한다. 세 개의 모든 디바이스에서, DRAM 인터페이스의 기능은 어드레스 발생기로서 공급된 블럭 어드레스를 거쳐 칩에서 외부 DRAM으로 그리고 외부 DRAM에서 칩으로 데이타를 전송하는 것이다.
DRAM 인터페이스는 전형적으로 어드레스 발생기 및 데이타가 전달되는 여러블럭의 클럭 모두에 비동기성인 클럭으로부터 동작한다. 그러나, 이 비동기성은 클럭이 거의 동일한 주파수로 동작하기 때문에 용이하게 관리된다.
데이타는 흔히 64 바이트의 블럭 (한가지 예외는 시간 디코더의 예측 데이타)으로 DRAM 인터페이스와 칩의 나머지 사이에 전달된다. "스윙 버퍼"라고하는 디바이스에 의해 전달이 이루어진다. 이는 반드시 칩의 다른 부분이 다른 RAM을 채우거나 또는 비우는 동안, DRAM 인터페이스가 하나의 DRAM을 채우거나 또는 비우는 이중-버퍼로 된 컨피그레이션으로 동작되는 한 쌍의 DRAM이다. 어드레스 발생기로부터의 어드레스를 운반하는 각각의 버스는 각각의 스윙 버퍼와 연결된다.
각각의 칩은 네 개의 스윙 버퍼를 갖지만, 이들 스윙 버퍼의 기능은 각각의경우에 있어 다르다. 공간 디코더에서, 한개의 스윙 버퍼는 코드화된 데이타를 DRAM으로 전달하는 데 사용되고, 다른 스윙 버퍼는 DRAM으로부터 코드화된 데이타를 판독하는 데 사용되고, 세 번째 스윙 버퍼는 토큰화된 데이타를 DRAM으로 전달하는 데 사용되고, 네 번째 스윙 버퍼는 DRAM으로부터 토큰화된 데이타를 판독하는데 사용된다. 시간 디코더에서, 한 개의 스윙 버퍼는 인트라 또는 예측 화상 데이타를 DRAM에 기록하는 데 사용되고, 두 번째 스윙 버퍼는 인트라 또는 예측 데이타를 DRAM으로부터 판독하는 데 사용되고, 다른 두개의 스윙 버퍼는 DRAM으로부터 인트라 또는 예측 데이타를 판독하는데 사용되고, 다른 두 개의 스윙 버퍼는 전방 및 후방 예측 데이타를 판독하는 데 사용된다. 비디오 포맷터에서, 한 개의 스윙 버퍼는 DRAM에 데이타를 전달하는 데 사용되고, 다른 세 개의 스윙 버퍼는 각각 DRAM으로부터 휘도(Y)와 적색 및 청색 컬러 차 데이타 (각각 Cr와 Cb)를 판독하는 데 사용된다.
B.13.2 시간 디코더 DRAM 인터페이스
B.13.1절에서 서술한 바와 같이, 시간 디코더는 네개의 스윙 버퍼를 갖는데, 두개의 스윙 버퍼는 디코딩된 인트라 및 예측 (I 및 P) 화상 데이타를 판독 및 기록하는 데 사용되고, 이들은 상기 기술한 바와 같이 동작한다. 다른 두개의 스윙 버퍼는 예측 데이타를 인출하는(fetch) 데 사용된다.
일반적으로, 예측 데이타는 동화상 벡터에 의해 x 및 y에 명시된 바와 같이처리되는 블럭의 위치로부터 오프셋될 것이다. 따라서, 인출될 데이타의 블럭은 전체적으로 인코딩 (및 DRAM에 기록된)되었던 것과 같이 데이타의 블럭 경계와 일치하지 않을 것이다. 이는 제151도와 제25도 도시되어 있는 데, 여기서 빗금친 영역은 형성되고 있는 블럭을 나타낸다. 점선 윤곽선은 예측되고 있는 블럭을 나타낸다. 어드레스 발생기는 큰 화살표로서 도시된 바와 같이 동화상 벡터로 명시된 어드레스를 블럭 오프셋 (전체 블럭 수)과 작은 화살표로 도시된 바와 같은 픽셀 오프셋으로 변환한다.
어드레스 발생기에서, 프레임 포인터, 기본 블럭 어드레스 및 벡터 오프셋은 DRAM으로부터 인출될 블럭의 어드레스를 형성하기 위해 더해진다. 만약 픽셀 오프셋이 제로이면, 한개의 요청만이 발생된다. 만약 x 또는 y차원중 어느 차원에 오프셋이 존재하면, 이때 두개의 요청 -원래의 블럭 어드레스와 우측에 바로 인접하거나 또는 바로 밑의 블럭 어드레스- 이 생성된다. x와 y 모두에서의 오프셋으로, 네개의 요청이 발생된다. 인출될 각각의 블럭에 대해, 어드레스 발생기는 시작 및 정지 어드레스 변수를 계산하고, 이들을 DRAM 인터페이스로 전달한다. 이들 시작 및 정지 어드레스의 사용이 이하 예로서 잘 서술된다.
제152도와 제26도에 빗금친 영역에서 도시된 바와 같이, (1,1)의 픽셀 오프셋을 고려하자. 어드레스 발생기는 도면에서 A 내지 D로 명명된 네 개의 요청을 한다. 해결될 문제는 요청된 행 어드레스의 시퀀스를 어떻게 신속하게 제공하느냐하는 것이다. 해답은 "시작/정지" 기술을 사용하는 것이고, 이는 이하에서 서술된다.
제152도의 블럭 A를 고려하자. 판독은 위치(1,1)에서 시작되어 위치(7,7)에서 끝나야 한다. 한번에 한 바이트 (즉, 8 비트 DRAM 인터페이스)가 판독되는 때를 가정한다. 좌표 쌍의 x값은 어드레스의 세 LSB를 형성하고, y값은 세 MSB를 형성한다. x및 y시작 값은 모두 1로 어드레스 9를 공급한다. 이 어드레스로부터 데이타가 판독되고, x값이 증가된다. x값이 그 정지 값에 도달할 때까지 프로세스가 반복된다. 이때, y값이 1만큼 증가되고 x시작 값이 다시 로딩되어 17의 어드레스를 공급한다. 데이타의 각각의 바이트가 판독됨에 따라, 그 정지 값에 도달할때까지 x 값이 다시 증가된다. x 및 y 값 모두가 그 정지값에 도달할 때까지 프로세스가 반복된다. 이와 같이, 9, 10, 11, 12, 13, 14, 15, 17. . ., 23, 25, . . ., 31, 33, . . ., . . ., 57, . . ., 63이 생성된다.
유사한 방법으로, 블럭 B에 대한 시작 및 정지 좌표는 (1,0) 및 (7,0)이고, 블럭 C에 대해서는 (0,1) 및 (0,7)이고, 블럭 D에 대해서는 (0,0) 및 (0,0)이다.
다음 문제는 이와 같은 데이타가 어디에 기록되어야 하는 것이다. 확실히하기 위해, 블럭 A를 보면, 어드레스 9로부터 판독된 데이타는 스윙 버퍼의 어드레스 0에 기록되어야만 하고, 어드레스 10으로부터의 데이타는 스윙 버퍼의 어드레스 15 등등에 기록된다. 이와 유사하게, 블럭 B의 어드레스 8로부터 판독된 데이타는 스윙 버퍼의 어드레스 15에 기록되어야 하고, 어드레스 16으로부터 판독된 데이타는 스윙 버퍼의 어드레스 15에 기록되어야 한다. 이 기능은 이하 서술한 바와 같이 극히 간단하게 구현될 수 있는 것으로 밝혀졌다.
블럭 A를 고려하자. 판독 초기에, 스윙 버퍼 어드레스 레지스터는 정지 값의 역으로 로딩되는데, y역 정지 값은 3 MSB를 형성하고, x역 정지 값은 3LSB를 형성한다. 이 경우, DRAM 인터페이스가 외부 DRAM의 어드레스 9를 판독하는 동안, 스윙 버퍼 어드레스는 제로이다. 테이블 B.13.1에 예시된 바와 같이, 외부 DRAM 어드레스 레지스터가 증가됨에 따라 스윙 버퍼 어드레스 레지스터가 증가된다.
테이블 B.13.1 예측 어드레싱의 도시
지금까지 논의는 8 비트 DRAM 인터페이스를 중심으로 하였다. 16 또는 32비트 인터페이스의 경우, 약간 변형되어야만 한다. 첫째, 16 또는 32 비트 경계를 가리키도록 픽셀 오프셋 벡터가 "클립(clipped)"되어야만 한다. 이 예에서, 블럭 A에 대해, 판독된 첫번째 DRAM은 어드레스 0을 가리키고, 어드레스 0 내지 3의 데이타가 판독될 것이다. 다음에, 원치않는 데이타가 폐기되어야 한다. 이는 모든 데이타를 스윙 버퍼 (이제부터 이것은 8 비트 경우에 필요하였던것 보다 물리적으로 커야만 한다)에 기록하고 오프셋으로 판독함으로서 수행된다. MPEG 하프-펠 보간을 수행할 때, x 및/또는 y의 9 바이트가 DRAM으로부터 판독되어야만 한다. 이 경우, 어드레스 발생기는 적당한 시작 및 정지 어드레스를 공급하고, DRAM 인터페이스의 일부 부수적인 논리가 사용되지만, DRAM 인터페이스가 동작하는 것과 같이 근본적인 변화는 없다.
시간 디코더 DRAM 인터페이스에 대해 주목하여야 할 마지막 사항은, 데이타에 대해 어떤 처리가 요구되는 지를 가리키기 위해 추가적인 정보가 예측 필터에 제공되어야 한다는 것이다. 이는 다음으로 구성된다.
* (64, 72 또는 81 바이트 중에서) 전송할 마지막 바이트를 가리키는 "최종바이트" 신호
* H.261 플래그
* 양방향 예측 플래그
* 블럭의 차원 (x 및 y로 8 또는 9바이트)을 가리키기 위한 두 개의 비트.
* 블럭의 순서를 가리키기 위한 두 개의 비트 수
스윙 버퍼로부터 데이타가 판독됨에 따라 최종 바이트 플래그가 발생될 수있다. 다른 신호는 어드레스 발생기로부터 발생되고, 예측 필터 블럭에 의해 스윙 버퍼로부터 판독됨에 따라 데이타의 정확한 블럭과 연관될 수 있도록 DRAM 인터페이스를 통해 파이프라인된다.
B.14절 UPI 문서집
B.14.1 소개
본 절은 본 발명에 따른 마이크로프로세서 인터페이스의 동작을 사용자에게 주지시키는 것이다. 인터페이스는 기본적으로 공간 디코더와 시간 디코더 모두에서 동일하지만, 한가지 차이점은 어드레스 선의 수이다.
본 절에 서술된 논리는 순수히 마이크로프로세서 내부 논리이다. 관련된 개략적인 것(schematics)은 다음과 같다.
Upl
UPI101
UPI102
DINLOGIC
DINCELL
UPIN
TDET
NONOVRLP
WRTGEN
READGEN
VREFCKT
회로 UPI, UPI101, UPI102는 다른 두개가 8비트 어드레스 입력을 갖는 한편, 여덟번째 비트가 접지에 하드와이어되어(hardwired) UPI101이 7비트 어드레스 입력을 갖는다는 것을 제외하고 모두 동일하다.
[입력/출력 신호]
본 절에 서술된 신호는 주(note)가 이들 신호의 소스와 목적지를 상세히 설명하는, UPI 모듈에 대한 모든 입력 및 출력 (UPI과 관련하여 정의됨)을 나열하는 것이다.
패드 입력 드라이버(pad input driver)로부터 활성 로우인 NOTRSTInputGlobal 칩 리셋.
패드 입력 드라이버 (schmitt)로부터 활성 로우인 ElInputEnable 신호 1.
패드 입력 드라이버 (schmitt)로부터 활성 로우인 E2InputEnable 신호 2.
패드 입력 드라이버 (schmitt)로부터의 RNOTWInput Read 낫 기록 신호(not write signal).
패드 입력 드라이버 (schmitt)로부터의 ADDRIN[7:0]InputAddress 버스 신호.
두방향 마이크로프로세서 데이타 핀 (TTLin)의 입력 패드 드라이버로부터의NOTDIN[7:0]InputInput 데이타 버스.
마이크로프로세서 인터페이스 (메모리 맵을 참조)에 의해 액세스되고 있는 내부 회로에 대한 INT_RNOTWOutputThe 내부 판독 낫 기록 신호(internal read not write signal).
마이크로프로세서 인터페이스 (메모리 맵을 참조)에 의해 액세스되고 있는 모든 회로에 대한 INT_ADDR[7:0]OutputThe 내부 어드레스 버스.
마이크로프로세서 인터페이스 및 마이크로프로세서 데이타 출력 패드 (메모리 맵을 창조)에 의해 액세스되는 모든 회로에 대한 INTDBUS[7:0]Input/ OutputThe 내부 데이타 버스. 상기 내부 데이타 버스는 칩의 핀에 역인 데이타를 전송한다.
READ_STROutputAn은 디바이스 메로리 맵에 있는 장소의 판독을 가리키는 내부 타이밍 신호.
WRITE_STROutputAn은 내부 메모리 맵에 있는 장소의 기록을 가리키는 내부신호.
TRISTATEDPADOutputAn은 3상태(tristate)이어야 한다는 것을 가리키는 마이크로프로세서 데이타 출력 패드에 접속하는 내부 신호.
[전반적인 코멘트 :]
UPI 배선은 여러 개의 좀더 작은 모듈, 즉 NONOVRLP, UPIN, DINLOGIC, VREFCKT, READGEN, WRTGEN으로 구성된다. 상기 신호의 전체 리스트로부터 칩 상의 다른 모든 타이밍 신호에 비동기인 마이크로프로세서 버스 타이밍 신호 이외의 마이크로프로세서 인터페이스와 연관된 어떠한 클럭 신호도 존재하지 않는다는 것을 알아야 한다. 따라서, 마이크로프로세서와 강제로 외부에서 제어될 수 있는 디바이스 이외의 나머지 디바이스의 동작간에는 어떠한 타이밍 관계도 가정되어서는 안된다. 예를 들어, 테스트 시스템 상의 마이크로프로세서 인터페이스를 액세스하는 동안 외부에서 시스템 클럭을 정지시킨다.
UPI에 클럭을 갖지 않는 다른 구현은, 일부의 내부 타이밍이 셀프 타임(selt timed)된다는 것이다. 즉, UPI 블럭에 대해 일부 신호의 지연이 내부적으로 제어된다.
UPI의 전체적인 기능은 외부로부터 어드레스, 데이타 및 인에이블 및 판독/기록 신호를 취하고, 내부 회로를 정확히 구동시킬 수 있도록 이들을 포맷하는 것이다. 메모리 맵으로의 액세스를 정의하는 내부 신호는 INT_RNOTW_INT_ADDR[. . .], INTDBUS[. . .] 및 READ_STR 및 WRITE_STR이다. 이들 신호의 타이밍 관계는 판독 사이클 및 기록 사이클에 대해 이하 도시된다. 비록 데이타쉬트 정의 (datasheet definition) 및 그 다음의 다이어그램이 언제나 칩 인에이블 사이클을 도시하지만, 인에이블이 로우로 유지될 수 있고 어드레스가 연속하는 판독 또는 기록 동작을 수행할 수 있도록 회로가 동작한다. 이 기능이 가능한 이유는 어드레스전이 회로(address transition circuits) 때문이다.
또한, INT_RNOTW와 READ_STR, WRITE_STR의 존재가 일부 중복성(redundancy)을 반영하지 못한다. 이것은 내부 회로가 개별적인 READ_STR 및 WRITE_STR (그리고 INT_RNOTW는 무시)를 사용하거나 또는 INT_RNOTW 및 개별적인 스트로브 신호(스트로브 신호는 READ_STR 및 WRITE_STR의 OR로부터 발생) 중 어느 한 신호를 사용할 수 있게 한다.
내부 데이타버스는 판독 사이클 동안 하이로 미리 충전(precharged High)되고, 또한 이것은 내부 데이타 버스가 구동되지 않는 연장된 주기 동안 OXFF 조건으로 디폴트하도록 저항성 풀업(resistive pullups)을 갖는다. 내부 데이타 버스가 핀 상의 데이타에 역이기 때문에, 이는 인에이블될 때 외부 핀에 0x00으로 번역된다. 이는 만약 임의의 외부 사이클이 레지스터 또는 메모리 맵의 홀(hole)인 레지스터의 비트를 액세스하면, 출력 데이타 id가 로우로 결정된다는 것을 의미한다.
[회로 세부사항 :]
UPIN -
이 회로는 총체적인 변경 검출 블럭(change detect block)이다. 이는 단일비트 변경 검출 회로인 TDET라고 하는 서브-회로를 포함한다. UPIN은 각각의 어드레스 비트와 rnotw 및 각각의 인에이블 신호를 위한 TDET 모듈을 갖는다. 또한, UPIN은 변경 검출 회로의 출력을 모두 게이트하기 위한 몇몇 조합 논리를 포함한다. 이 게이팅은 다음과 같은 신호를 발생한다.
TRAN - 이는 입력 신호중 한 신호로의 전이를 가리키고,
UPD-DONE - 이는 전이가 완료되어 사이클이 수행될 수 있다는 것을 가리키고,
CHIP_EN - 이는 칩이 선택되었다는 것을 가리킨다.
TDET-
이는 단일 비트 변경 검출 회로이다. 이는 2 래치와 2 배타적 OR 게이트로 구성된다. 첫 번째 래치는 신호 SAMPLE에 의해 클럭되고, 두 번째는 신호 UP DATE에 의해 클럭된다. 이들 두 개의 중복하지 않는 신호는 모듈 NONOVRLP로부터 나온다. 전체 동작은 SAMPLE을 발생하는 입력 전이가 CHANGE를 발생한다. SAMPLE이하이인 동안 모든 입력 변경이 수용되고, 입력 변경이 멈출 때 CHANGE는 로우가 되고, SAMPLE이 로우가 되는데 이는 UPDATE를 하이가 되게 함으로서 출력 래치로 데이타를 전달하고 UPD_DONE를 가리키게 된다.
NONOVRLP-
이 회로는 기본적으로 TRAN을 입력하고 SAMPLE 및 UPDATE를 발생하는 중복하지 않는(non-overlapping) 클럭 발생기이다. UPDATE 출력의 외부 게이팅은 기록펄스가 완료될 때까지 UPDATE가 하이로 되는 것을 방지한다.
DINLGIC-
이 모듈은 데이타 입력 회로 DINCELL의 8 인스턴스와 TRISTATEPAD를 구동시키기 위한 일부 게이팅으로 구성된다. 이는 만약 인에이블 1이 로우이고, 인에이블 2가 로우이며, RnotW가 하이이고 내부 read_str이 하이일 때에만 출력 데이타포트가 추동할 것이라는 것을 가리킨다.
DINCELL-
이 회로는 데이타 입력 래치와 내부 데이타버스를 구동시키기 위한 3상 드라이버로 구성된다. 입력 패드로부터의 데이타는 신호 DATAHOLD가 하이이고 인에이블 1과 인에이블 2 모두가 로우일 때 래칭된다. 3상 드라이버는 내부 신호 INT_RNOTW가 로우일 때마다 내부 데이타 버스를 구동시킨다. 상기 내부 데이타 버스는 트랜지스터를 미리 충전시키고, 또한 버스 풀업(bus pullup)이 이 모듈에 포함된다.
WRTGEN-
이 모들은 WRITE_STR과 데이타 래치용 래치 신호인 DATAHOLD를 발생한다. 그러나, 기록 스트로브(write strobe)는 셀프 타이밍된 신호이고, 셀프 타임 지연은 VREFCKT에 정의된다 타이밍 회로 RESETWRITE로부터의 출력은 WRITE_STR 신호를 종료하는 데 사용된다. 레지스터를 기록하는 실제 기록 펄스는 액세스 사이클이 종료된 후에만 발생한다는 것을 알아야 한다. 그 이유는, 칩으로의 데이타 입력이 사이클의 후방 에지(back edge)에서만 샘플링되기(sampled) 때문이다. 즉, 정상 액세스 사이클이 완료한 후에만 데이타가 유효이다.
READGEN-
이 회로는, 이 이름으로부터 알 수 있는 바와 같이, READ_STR를 발생하고,또한 이것은 내부 데이타 버스를 미리 충전시키는 데 사용되는 PRECH 신호를 발생한다. PRECH 신호는 또한 그 주기가 VREFCKT와 또한 내부 데이타 버스의 전압에 의존하는 셀프 타이밍된 신호이다. READ_STR은 셀프 타임되어 있지 않지만, 사이클의 종료가 될 때까지 예비충전 주기의 종료로부터 지속된다. 사전 충전 회로는 인버트하기 전에 약 75%의 공급 전압을 필요로 하도록 그 전달 특성이 바이어스된 인버터를 사용한다. 이 회로는, READ_STR이 시작되기 전에 내부 버스가 정확히 미리 충전되도록 보장한다. 만약 내부 버스가 이미 충전되어 있다면 제로 폭(zero width)에 가까운 PRECH 펄스를 정지시키기 위해, 타이밍 회로는 신호 RESETREAD를 거쳐 최소의 폭을 보장한다.
VREFCKT -
VREFCKT는 인터페이스의 셀프 타이밍을 제어하는 유일한 회로이다. 지연, WRITE_STR의 1/폭 및 PRECH의 2/폭 모두는 P 트랜지스터를 통하는 전류에 의해 제어된다. 이 P 트랜지스터 상의 게이트는 신호 VRIF에 의해 제어되고, 이 전압은 25K ohm의 확산 저항기에 의해 세팅된다.
C.1절 개관
C.1.1 소개
본 발명에 따른 영상 포맷터의 구조가 제155도에 도시된다. 여기에서는, 한 어드레스는 기록용으로 그리고 다른 한 어드레스는 판독용인 두개의 어드레스 발생기, 상기 두개의 어드레스 발생기를 감독하고 프레임-속도 변환(frame-rate conversion)을 공급하는 버퍼 관리기(buffer manager), 수직 및 수평 언샘플러(unsamplers) 모두를 포함하는 데이타 프로세싱 파이프라인, 컬러-공간 변환 및 감마 교정(gamma correction), 및 프로세싱 파이프라인의 출력을 조정하는 최종 제어블럭이 존재한다.
C.1.2 버퍼 관리기(buffer manager)
영상 포맷터로의 입력에 도달하는 토큰은 FIFO에 버퍼된 후, 버퍼 관리기로 전달된다. 이 블럭은 새로운 화상의 도달을 검출하고, 각각의 화상을 저장할 버퍼의 가용성을 결정한다. 만약 이용 가능한 버퍼가 존재하면, 도달하는 화상에 할당되고 이 인덱스(index)가 기록 어드레스 발생기에 전달된다. 만약 이용 가능한 버퍼가 존재하지 않으면, 한 개의 버퍼가 이용 가능하게 될 때까지 입력하는 화상이 정체될 것이다. 모든 토큰은 기록 어드레스 발생기로 전달된다.
판독 어드레스 발생기가 디스플레이 시스템으로부터 VSYNC 신호를 수신할 때마다, 버퍼 관리기로 새로운 디스플레이 버퍼 인덱스가 요청된다. 만약 완전한 화상 데이타를 포함하는 버퍼가 존재하고 상기 화상이 디스플레이할 준비가 된다면, 해당 버퍼의 인덱스가 디스플레이 어드레스 발생기로 전달될 것이다. 만약 그렇지않다면, 버퍼 관리기는 디스플레이될 마지막 버퍼의 인덱스를 전송한다. 기동시, 첫 번째 버퍼가 찰(full) 때까지 제로가 인덱스로서 전달된다.
만약 (각각의 화상이 입력될 때 계산된) 자신의 수가 인코딩 프레임 속도에 주어진 디스플레이에 예상된 화상 번호 (프리젠테이션 번호) 이상이면 화상이 더스플레이될 준비가 된다. 예상된 수는 화상 클럭 펄스를 카운팅함으로써 결정되는데, 여기서 화상 클럭은 클럭 분배기(clock dividers)에 의해 국부적(locally)으로 또는 외부적(externally)으로 발생될 수 있다. 이와 같은 기술은, 프레임-속도 변환 (즉, 2-3 풀다운(pull-down))이 가능케 한다.
갯수가 2개 또는 3개일 수 있는 버퍼에 대해 외부 DRAM이 사용된다. 만약 프레임-속도 변환이 실행되면 3개가 필요하다.
C.1.3 기록 어드레스 발생기
기록 어드레스 발생기는 버퍼 관리기로부터 토큰을 수신하고, 각각의 새로운 DATA 토큰의 도달을 검출한다. 각각의 DATA 토큰이 도달함에 따라, 어드레스 발생기는 도달하는 블럭을 저장하기 위해 DRAM 인터페이스에 대한 새로운 어드레스를 계산한다. 다음에 생(raw) 데이타는 스윙 버퍼로 기록되는 DRAM 인터페이스로 전달된다. DRAM 어드레스는 블럭 어드레스이고 DRAM 내의 화상은 블럭의 래스터(rasters of blocks)로서 구성된다는 것에 유의한다. 그러나, 입력되는 화상 데이타는 실제로 매크로블럭의 시퀀스로 구성되므로, 어드레스 발생 알고리즘은 매크로블럭 내에서 블럭의 하위 행에 대한 (블럭에서의) 선-폭 오프셋(line-width offsets)을 고려하여야 한다.
버퍼 관리기에 의해 제공된 도달 버퍼 인덱스(arrival buffer index)는 저장되고 있는 전체 화상에 대한 어드레스 오프셋으로서 사용된다. 또한, 각각의 성분이 특정 버퍼 내의 개별적인 영역에 저장됨으로써, 성분 오프셋이 계산에 사용된다.
C.1.4 판독 어드레스 발생기
판독 어드레스 발생기 (dispaddr)는 토큰을 수신하거나 또는 생성하지 않고 어드레스만을 생성한다. VSYNC에 응답하여, 이는 field_info, read_start, sync_mode, 및 1sb_invert에 따라, 버퍼 관리기로부터의 버퍼 인덱스를 요청한다.
인덱스를 수신하게 되면, 이는 래스터 순서로 판독될 현재 화상에 대해 각각의 성분에 대한 한 세트의 어드레스를 생성한다. 달리 셋업(setups)함으로서, 인터레이스된(interlaced)/프로그래시브한(progressive) 디스플레이 및 데이타, 수직 언샘플링, 및 필드 동기화를 할 수 있다 (인터레이스된 디스플레이에 대해). 하위의 레벨에서, 판독 어드레스 발생기는 기본 어드레스를 DRAM의 페이지 구조와 호환하는 각각의 세 성분에 대한 블럭 어드레스 및 바이트 카운트의 시퀀스로 변환한다.
DRAM 인터페이스에 공급된 어드레스는 블럭 시작 및 블럭 종료 카운트와 함께 페이지 및 선 어드레스이다.
C.1.5 출력 파이프라인
DRAM 인터페이스로부터의 데이타는 출력 파이프라인에 공급된다. 세 성분의 스트림은 우선 수직으로 보간된 다음, 수평으로 보간된다. 보간기 다음에, 세 성분은 같은 비율(4:4:4)이어야 하고, 컬러-공간 변환기 및 컬러 참조 테이블/감마교정을 지난다. 출력 인터페이스는 디스플레이가 HSYSC에 도달할 때까지 이 지점에서 스트림을 유지할 수 있다. 그 후, 출력 제어기는 세가지 성분을 한 개, 두 개 또는 세개의 8-비트 버스로 향하게 하여 필요에 따라 멀티플레싱한다
C.1.6 타이밍 영역
기본적으로 영상 포맷터와 연관된 두 개의 주요 타이밍 영역이 존재한다.
첫 째, 시스템 클럭인데, 이는 칩의 전단(front end) (어드레스 발생기와 버퍼 관리기, 및 DRAM 인터페이스의 전단)에 대해 타이밍을 제공한다. 둘 째, 후단(backend) (DRAM 인터페이스 출력, 및 출력 파이프라인 전체)을 위해 모든 타이밍을 구동시키는 픽셀 클럭이 존재한다.
상기 기술한 두 개의 각각의 클럭은 다수의 온-칩(on-chip) 클럭 발생기를 구동시킨다. FIFO, 버퍼 관리기 및 판독 어드레스 발생기는 기록 어드레스 발생기를 동일하지만 개별적인 클럭(WΦ)으로 사용하는 동일한 클럭(DΦ)으로부터 동작한다. 데이타는 내부 DRAM 인터페이스 클럭 (outΦ) 상의 DRAM 인터페이스로 클럭된다. DΦ, WΦ 및 outΦ 모두는 syscik로부터 생성된다.
판독 및 기록 어드레스는 DRAM 인터페이스 자신의 클럭에 의해 DRAM 인터페이스에서 클럭된다.
데이타는 bifRΦ 상의 DRAM 인터페이스로부터 판독되고, NEΦ라고 명명된 클럭을 동작시키는 "bushy_no" (북동쪽- 자신의 물리적 기억 장소에 의해)라고하는 출력 파이프라인의 부분으로 전달된다. 감마 RAM으로부터 전방으로 향하는(onward) 파이프라인 부분은 개별적이지만, 유사한 클럭(RΦ)으로 클럭된다. bifRΦ, NEΦ 및 RΦ 모두는 픽셀 클럭인 pixin으로부터 생성된다.
테스팅하기 위해, 블럭 간의 대부분의 모든 인터페이스는 스누퍼 또는 슈퍼-스누퍼 어느 하나에 부착된다. 이는 타이밍 영역과 요구되는 액세스 타입에 의존한다. 개별적이지만 유사한 타이밍 영역 간의 블럭 경계는 연관된 재타이밍 래치(retiming latches)를 가진다.
C.2절 버퍼 관리
C.2.1 소개
본 발명에 따른 버퍼 관리 블럭의 목적은 화상 데이타를 기록하고 판독하기 위해 두 개 또는 세 개의 외부 버퍼 중 임의의 버퍼를 식별하는 인덱스를 갖는 어드레스 발생기를 공급하는 것이다. 이들 인덱스의 할당은 각각의 인수가 동작 중인 타이밍 영역 중 한 영역의 작용을 표현하는 세 개의 주요 인수(principal factors)에 의한 영향을 받는다. 이들은 화상 데이타가 영상 포맷터(디코딩된 데이타 속도)로의 입력에 도달하는 속도, 데이타가 디스플레이 (디스플레이 데이타 속도)되는 속도, 및 인코딩된 비디오 시퀀스의 프레임 속도 (프리젠테이션 속도)이다.
C.2.2 기능적 개관
3-버퍼 시스템에서는 프리젠테이션 속도(presentation rate)와 디스플레이속도(display rate)가 서로 다를 수 (즉, 2 내지 3의 풀다운) 있으므로, 시스템의 타이밍 제한 조건이 주어진 가능한 최상의 프레임 시퀀스를 달성하기 위해 필요에 따라 프레임이 반복되거나 또는 스킵(skipped)될 수 있다. 디코딩하는 데 약간의 문제가 있는 화상도 역시 유사한 방법으로 수용됨으로서, 만약 화상을 디코딩하는데 보다 긴 디스플레이 시간이 걸린다면, 다른 모든 것을 "따라잡는(catches up)" 동안 이전 프레임이 반복될 것이다. 2-버퍼 시스템에서, 세 개의 타이밍 영역이 록되어야(locked) 하며, 느슨해진 것을 죄기위한 유연성(flexibllity for taking up the slack)을 제공하는 것은 제3의 버퍼이다.
버퍼 관리기는 각각의 외부 버퍼와 연관된 임의의 상태 정보를 유지함으로써 동작한다. 이는, 버퍼가 사용중인 지를, 버퍼가 데이타로 가득 차 있는 지를 또는 디스플레이 준비가 되어 있는 지를 가리키는 플래그와, 버퍼에 현재 저장된 화상의 시퀀스 내의 화상 번호를 포함한다. 또한, 화상 클럭 펄스가 수신될 때마다 증가하는 수인 프리젠스테이션 수(presentation number)가 레코딩되며, 이 화상 수는 인코딩된 시퀀스의 프레임 속도에 근거하여 현재 디스플레이할 예정인 화상 번호를 나타낸다.
PICTURE_START 토큰이 입력에서 검출될 때마다 도착 버퍼(arrival buffer) (입력하는 데이타가 기록될 버퍼)가 할당된다. 다음에 이 버퍼는 IN_USE로 플래그된다. PICTURE_END 상에서, 도착 버퍼가 할당 (제로로 리셋)되고, 버퍼는 화상번호와 프리젠테이션 번호 간의 관계에 따라 FULL 또는 READY 중 어느 하나로 플래그된다.
디스플레이 어드레스 발생기는 2선식 인터페이스를 거쳐 vsync마다 한번씩 새로운 디스플레이 버퍼를 요청한다. 만약 버퍼가 READY로 플래그된 버퍼가 존재하면, 이때 이는 버퍼 관리기로서 디스플레이 되도록 할당될 것이다. 만약, READY 버퍼가 존재하지 않으면, 이전에 디스플레이된 버퍼가 반복될 것이다.
프리젠테이션 번호가 변할 때마다, 이것이 검출되고, 그 화상 번호와 프리젠테이션 번호 간의 관계를 검사함으로써 완전한 화상을 포함하는 모든 버퍼의 준비성(READY-ness)이 테스팅된다. 버퍼는 번갈아 고려된다(considered). 임의의 버퍼가 READY로 간주되면, 이전에 REDY로 플래그되었던 임의 버퍼의 준비성을 자동적으로 취소한다. 이때 이전 버퍼는 EMPTY로 플래그된다. 할당 방법에 의해 나중의 화상 번호가 후에 언급되는 버퍼에 저장되기 때문에 이는 유효하다.
H:261의 TEMPORAL_REFERENCE 토큰은 만약 입력 스트림에서 스킵된 화상이 가리켜지면 버퍼의 화상 번호가 수정되게 한다. 계획될 수는 있겠지만, 그러나 이 특징은 현재 포함되어 있지 않다. 이와 유사하게, MPEG의 TEMPORAL_REFERENCE 토큰은 어떠한 영향도 없다.
FLUSH 토큰은 모든 버퍼가 EMPTY 또는 디스플레이 버퍼로서 할당될 때까지 입력을 정체시킨다. 그 후, 프리젠테이션 번호와 화상 번호가 리셋되어 새로운 시퀀스가 시작될 수 있다.
C.2.3 아키텍처
C.2.3.1 인터페이스
C.2.3.1.1 bm 전면(front)의 인터페이스
모든 데이타는 입력 FIFO인 bm_front로부터 버퍼 관리기로 입력된다. 이와같은 전송은 2선식 인터페이스를 거쳐 발생하는 데, 여기서 데이타는 8 비트 폭에 확장 비트를 더한 것이다. 버퍼 관리기에 도달하는 모든 데이타는 완전한 토큰으로 된다. 그 이유는, 프리젠테이션 번호를 연속적으로 처리하고 데이타 업스트림에서 상당히 큰 갭이 있는 경우에 버퍼 요청을 위해서이다.
C.2.3.1.2 waddrgen의 인터페이스
토큰 (8 비트 데이타, 1비트 확장)은 2선식 인터페이스를 거쳐 기록 어드레스 발생기로 전달된다. 도착 버퍼 인덱스도 역시 동일한 인터페이스로 전달됨으로써, PICTURE_START 토큰이 waddrgen에 도달하는 것과 같은 시간에 어드레스를 생성하기 위해 올바른 인덱스가 이용 가능하다.
C.2.3.1.3. dispaddr의 인터페이스
판독 어드레스 발생기의 인터페이스는 각각 '요청' 및 "확인응답" 신호로 동작하는 것으로 간주될 수 있는 두 개의 개별적인 2선식 인터페이스를 구비한다. 그러나, 어느 한 단에서 두 개의 2선식에 근거한 상태 머신때문에 신호 선은 적당하지 않다.
흔히 dispaddr 인터페이스와 결합된 이벤트의 시퀀스는 다음과 같다. 첫째, dis-paddr는 버퍼 관리기로 dry_valid 입력을 보냄(assert)으로써 디스플레이 디바이스로부터의 vsync에 응답하여 요청한다. 다음에, 버퍼 관리기가 그 상태 머신의 적당한 지점에 도달할 때, 요청을 수용하고 디스플레이될 버퍼를 할당하려 한다. 그 후, disp_valid 선이 보내어져서(asserted), 버퍼 인덱스가 전달되고, 이는 전형적으로 dispaddr에 의해 즉시 수용된다. 또한, 이전 필드 번호와는 무관하게 현재 인덱스와 연관된 필드 번호가 리셋되어야 한다는 것을 가리키는 마지막 2선식 인터페이스(rat_fld)와 연관된 부수적인 선이 존재한다.
C.2.3.1.4 마이크로프로세서 인터페이스
버퍼 관리기 블럭은 8-비트 데이타 버스와, 판독 및 기록 스트로브와 함께 마이크로프로세서 어드레스 공간의 네 비트를 사용한다 한 개의 선택 신호는 사용자가 액세스할 수 있는 장소를 가리키고, 다른 한개의 선택 신호는 정상 동작 조건하에서 액세스할 필요가 없는 테스트 기억 장소(test locations)를 가리키는 두개의 선택 신호가 존재한다.
C.2.3.1.5 이벤트(events)
버퍼 관리기는 두 개의 서로 다른 이벤트, 즉 인덱스 발견 및 늦은 도착 index found and late arrival)을 만들어낼 수 있다. 이들 중 첫 번째 이벤트는 상이 도착하고 그 PICTURE_START 확장 바이트 (화상 인덱스)가 기동시 U_BM_TARGET_IX 레지스터로 기록된 값과 일치할 때 보내어진다. 두 번째 이벤트는 디스플레이 버퍼가 할당되고 자신의 화상 번호가 현재의 프리젠테이션 번호 미만일 때 발생하는 데, 즉 시스템 파이프라인에서의 버퍼 관리기까지의 프로세싱은 프리젠테이션 구비조건을 충족시키도록 관리하지 못한다.
C.2.3.1.6 화상 클럭
본 발명에서, 화상 클럭은 프리젠테이션 번호 카운트용 클럭 신호이고, 온-칩상에서 발생되거나 또는 외부 소스 (흔히 디스플레이 시스템)로부터 취해진다. 버퍼 관리기는 이들 신호 모두를 수용하고, pclk_ext (버퍼 관리기의 제어 레지스터에 있는 비트)의 값에 근거하여 클럭을 선택한다. 또한, 만약 영상 포맷터가 자신의 화상 클럭을 발생하면, 이 신호도 역시 칩으로부터의 출력으로 이용 가능하도록 이 신호는 패드 picoutpad용의 인에이블로서 작용한다.
C.2.3.2 주요 블럭
다음 절은 버퍼 관리기 배선(bmlogic)을 구성하는 다양한 하드웨어 블럭을 설명한다.
C.2.3.2.1 입력/출력 블럭(bm 입력)
이 모듈은 버퍼 관리기의 네 개의 2선식 인터페이스와 연관된 모든 하드웨어(입력 및 출력 데이타, drg_valid/accept 및 disc_valid/accept)를 포함한다. 입력 데이타 레지스터는 일부 토큰 디코딩 하드웨어가 부착되어 도시된다. bm_tokdec로의 입력에서 신호 vheader는 토큰 디코더 출력이 헤더가 유효인 지점(즉, 토큰의 중간이 아님)에서만 보내어지도록 사용된다. rtimd 블럭은 파이프라인의 다음 블럭에 대해 복사 입력 데이타 레지스터에 인접하여 출력 데이타 레지스터로서 작용을 한다. 이는 서로 다른 클럭 발생기로 인한 타이밍 차에 기인한다.
신호 go와 ngo는 유효, 수용, 및 정지되지 않은 데이타의 AND에 근거하고, 입력 또는 출력 어느 한 곳에서 "막혔있는 지(bunged up)"를 가리키기 위해 상태 머신 어디에서나 사용된다.
이 모듈의 디스플레이 인덱스 부분은 데이타용으로서 이에 상응하는 "go" 신호와 함께 2선식 인터페이스를 구비한다. 또한, 여기서 rat_fld 비트가 존재하는데, 이는 세팅된다면 한 사이클 동안 disp_valid가 하이가 될 때까지 하이로 유지되는 신호이다. 그 후, 이는 리셋된다. 게다가, rat_fnd는 FLUSH 토큰은 디스플레이 버퍼로서 모든 외부 버퍼로 하여금 EMPTY 또는IN_USE로 플래그되게 한다.
이는 화상 번호와 프리젠테이션 번호 모두가 리셋되는 같은 점이다.
계층까지의 다음 레벨에 나타나는 입력 데이타 레지스터와 연관된 작은 크기의 부수적인 회로가 존재한다. 이 회로는 입력 데이타 레지스터가 BU_BM_TARGIX로 기록된 것과 같은 값을 포함하고 이벤트 발생을 위해 사용된다는 것을 가리키는 신호를 발생한다.
C.2.3.2.2 인덱스 블럭 (bm 인덱스)
인덱스 블럭은 다양한 전략 버퍼 인덱스(strategic buffer indices)를 가리키는 2-비트 레지스터로 주로 구성된다. 이들은 도착하는 화상 데이타가 기록되는 버퍼인 air_buf, 화상 데이타가 디스플레이 될 준비가 되는 버퍼인 disp_buf, 및 버퍼가 dispaddr에 의해 요청되면 디스플레이될 수 있는 가장 최신식의 데이타 화상을 포함하는 버퍼의 인덱스인 rdy_buf이다. 또한, 버퍼를 가리키는 포괄 포인터로서 사용되는 buf_ix를 포함하는 레지스터가 존재한다. 이 레지스터는 그 상태를 조사하기 위해 버퍼 전체를 사이클하도록 증가 (멀티플렉서로의 "D" 입력)되거나 또는 상태가 바뀔 필요가 있을 때 arr_buf, disc_buf 또는 rdy_buf 중 한 개의 값이 할당된다. 이들 모든 레지스터 (pho 버젼)는 테스트 어드레스 공간의 일부로서 마이크로프로세서로부터 액세스할 수 있다. Old_ix는 단지 buf_ix의 재타이밍된 버젼이고, bm_stun 블럭의 버퍼 상태와 화상 번호 레지스터를 인에이블하는 데 사용된다. buf_ix와 old_ix 모두는 이 블럭으로부터 출력되는 세개의 신호 (각각 1 내지 3의 값을 유지할 수 있다)로 디코딩된다. 다른 출력은 buf_ix가 arr_buf 또는 disp_buf 중 어느 하나와 동일한 값을 갖는 지와, rdy_buf와 disp_buf 중 어느 하나가 값 제로를 갖는 지를 가리킨다. 제로는 버퍼에 대한 참조는 아니다.
이는 단지 현재 할당된 도착/디스플레이/준비 버퍼가 없다는 것을 가리킨다.
Arr_buf와 disp_buf는 각각의 2선식 인터페이스 출력 수용 레지스터에 의해 인에이블링된다.
bmlogic 레벨의 부수적인 회로는 현재의 버퍼 인덱스(buf_ix)가 기동시 제어레지스터로 기록된 값으로 정의된대로 사용중인 최대 인덱스와 같은 지를 결정하는데 사용된다. 제어 레지스터의 "1"은 3-버퍼 시스템을 가리키고, "0"은 2-버퍼 시스템을 가리킨다.
C.2.3.2.3 버퍼 상태
버퍼 상태의 주 구성 요소는 각각의 버퍼에 대한 상태와 화상 번호 레지스터이다. 세개의 그룹 각각은 슬레이브(slaves)는 세 레지스터의 뱅크(banks)이고, 마스터(master)는 자신의 출력이 한개의 (레지스터 인에이블을 사용하여 ld_ix에 의해 스위치된) 슬레이브로 향하는 단일 레지스터인 마스터-슬레이브 구조(master-slave arrangement)이다. 마스터로의 가능한 입력 중의 하나는 (bmlogic 레벨에서 buf_ix에 의해 인덱스된) 서로 다른 슬레이브 출력 사이에서 멀티플렉싱된다. bmlogic 레벨에서 디코딩되는 버퍼 상태는 상태 머신 논리에 사용하기 위해 테이블 C.2.1에 도시된 임의의 값을 취하거나 또는 자신의 이전 값을 계산할 수 있다. 화상 번호는 이전 값 또는 1만큼 (또는 H.261의 경우에 실제와 예상된 시간 기준 간의 차이인 델타(delta)에 1을 더한) 증가된 이전 값을 취할 수 있다. 이 값은 블럭에 존재하는 8-비트 가산기에 의해 공급된다 이 가산기로의 첫 번째 입력은 데이타의 화상 번호가 현재 기록되고 있는 this_pnum이다.
테이블 C.2.1 버퍼 상태 값
이는 (거의 항상 지난(out of date) 것인) 자신의 이전 화상 번호보다는 현재의 (또는 이전의) 화상 번호에 근거하여 임의의 세 버퍼 화상 수가 레지스터가 용이하게 갱신될 수 있도록 하기 위해 (자신의 마스터-슬레이브 구조에) 개별적으로 저장될 필요가 있다. This_pnum은 첫 번째 화상이 도착할 때 가산기로부터 출력에 더해져 첫 번째 버퍼 화상 번호 레지스터에의 입력이 제로가 될 수 있도록 -1로 리셋된다.
현재의 버젼에서, 값을 공급하여야 하는 시간 기준 블럭이 존재하지 않기 때문에 델타(delta)가 제로에 접속된다.
C.2.3.2.4 프리젠테이션 번호(presentation number)
8-비트 프리젠테이션 번호 레지스터는 이것이 마지막으로 검색된 후 프리젠테이션 번호가 바뀌었다는 것을 가리키기 위해 상태 머신에 사용된 연관된 프리젠테이션 플래그(presentation flag)를 갖는다 그 이유는, 화상 클럭은 반드시 비동기성이고, 임의의 상태 동안 활성일 수 있기 때문인 데, 이는 프리젠테이션 번호와 반드시 관계되어 있는 것은 아니다. 본 블럭에서 회로의 나머지는 화상 클럭펄스가 생성하였다는 것을 검출하는 것과 이 사실을 "기억하는(remembering)"것에 관한 것이다. 이와 같이, 프리젠테이션 번호는 유효일 때 갱신될 수 있다. 이벤트의 대표적인 시퀀스는 제156도에 도시된다 신호 incr_prn은 재타이밍된 화상 클럭의 상승 에지 후인 사이클에서 활성으로 되어 프리젠테이션 번호가 바뀔 수 있는 동안의 상태로 진입될 때까지 지속된다. 이는 신호 en_prnum으로 가리켜진다. 임의의 상태 동안에만 프리젠테이션 번호가 갱신될 수 있게 허용하는 이유는, 신호 rdyst를 공급하기 위해 규격-셀인 그 다지 고속이 아닌 8-비트 가산기를 포함하는 많은 양의 논리를 구동시키는 데 사용되기 때문이다. 그래서, 연속하는 상태가 그 결과를 사용하지 않는 상태 동안에만 바뀌어야만 한다.
C.2.3.2.5 시간 기준
본 발명에 따른 시간 기준 블럭은 영상 포맷터의 본 실시예로부터 생략되어 있지만, 그 동작이 이하 서술된다.
본 블럭의 기능은 H.261 데이타 스트림으로 토큰에 수신된 시간 기준값과, (1에 이전 값을 더한) "예상된" 시간 기준 간의 차이인 델타(delta)를 계산하는 것이다. 이것으로 H.261에서 프레임이 스킵될(skipped) 수 있다. 시간 기준 토큰은 모든 비-H.261 스트림에서는 무시된다. 계산된 값은 버퍼에 대한 화상 번호를 계산하기 위해 상태 블럭에서 사용된다. bmlogic으로부터 블럭을 생략한 결과, 심지어 H.261 스트림에서 일부가 스킵되어야 한다는 것을 가리킬 지라도 임의의 시퀀스에서는 화상 번호가 항상 순차적일 것이라는 것이다.
블럭의 주요 성분 (도면 bm_tref에서 볼 수 있는)은 tr, exptr 및 델타(delta)용 레지스터이다. 본 발명에서, tr은 제로로 리셋되고 적당할 때 입력 데이타 레지스터로부터 로딩된다. 이와 유사하게, exptr은 -1로 리셋되고, 시간 기준 상태의 시퀀스 동안 1 또는 델타(delta)만큼 증가된다. 또한, 델타(delta)는 제로로 리셋되고, 다른 두 레지스터 간의 차이로서 로딩된다. 세개의 모든 레지스터는 FLUSH 토큰 다음에 리셋된다. 본 블럭의 가산기는 델타 및 exdtr 모두, 즉 각각 감산 및 가산 연산 모두를 계산하는 데 사용되고, 신호 delta_calc에 의해 제어된다.
C.2.3.2.6 제어 레지스터 (bm uregs)
허퍼 관리기용 제어 레지스터는 블럭 bm_ureas에 상주한다. 이들은 액세스비트 레지스터, (외부 버퍼의 최대 수와 내부/외부 화상 클럭을 정의하는)셋업 레지스터, 및 타겟 인덱스 레지스터이다. 액세스 비트는 예상된 대로 동기화된다. 신호 stops_0, stopd_1 및 nstopd_1은 액세스 비트와 두개의 이벤트 정지 비트의 OR로부터 발생된다. 모든 bmlogic에 대한 upi 어드레스 디코딩은 블럭 bm_udec에 의해 수행되는 데, 이는 영상 포맷터의 상위 레벨의 어드레스 디코드로부터 2 선택 신호와 함께 upi 데이타 버스의 하위 4 비트를 취한다.
C.2.3.2.7 상태 머신의 제어
상태 머신 논리는 본래 자신의 블럭 bm_state을 점유한다. 그러나, 코드 생성 이유로 인해, 이는 이제 평탄화(flattened)되어 bmlogic 도면의 쉬트 2에 상주한다.
본 논리의 주요 부분은 동일하다. 이는 디코딩, 다른 bmlogic 블럭의 제어를 위한 논리 신호의 발생, 및 상태 머신을 통한 라우트를 선택하는 데 사용되는 플래그 from_ps와 from_fl를 포함하는 새로운 상태 인코딩을 포함한다. bm_stus와 bm_index를 위해 멀티플렉스 제어 신호를 발생하기 위한 개별적인 블럭이 존재한다.
상태 머신 하드웨어의 신호는 타이핑 및 참조가 용이하도록 간단한 알파벳의 이름으로 주어진다. 이들은 모두 논리 표현식과 함께 테이블 C.2.2에 열거된다.
또한, 이들은 bmlogic(bmlogic.M)의 행위적인 M. 기술에 코멘트로서 나타난다.
테이블 C.2.2 상태 머신에 사용된 신호 명
C.2.3.2.8 동작의 모니터링(monitoring)(bminfo)
본 발명에 있어서, 시뮬레이션 동안 버퍼 상태 정보, 인덱스 값 및 프리젠테이션 번호가 관찰될 수 있도록 모듈 bminfo이 포함된다. 이는 M에 기록되고 한 입력이 바뀔때마다 출력을 발생한다.
C.2.3.3 레지스터 어드레스 맵
버퍼 관리기의 어드레스 공간은 두 영역, 사용자가 액세스할 수 있는 영역과 테스트 영역으로 나된다. 따라서, 상위 레벨에서 범위 디코드로부터 인출된 개별적인 두개의 인에이블 선이 존재한다. 테이블 C.2.3은 사용자가 액세스할 수 있는 레지스터를 도시하고, 테이블 C.2.4는 테스트 공간의 내용을 도시한다.
테이블 C.2.3 사용자가 액세스할 수 있는 레지스터
테이블 C.2.4 테스트 레지스터
C.2.4 상태 머신의 동작
테이블 C.2.5에 상세히 도시된 바와 같이, 버퍼 관리기의 상태 머신에는 19개의 상태가 존재한다. 이들은 제157도에 도시된 바와 같이 그리고 또한 행위적 기술(behavior description) bmlogic.M에 서술된 바와 같이 상호 작용한다.
테이블 C.2.5 버퍼 상태
C.2.4.1 리셋 상태
리셋 상태는 PRES0로, 메인 루프가 초기에 순환되도록 플래그가 제로로 세팅된다.
C.2.4.2 메인 루프(main Loop)
상태 머신의 메인 루프는 제153도 (메인 다이어그램에 강조됨 - 제152도)에 도시된 상태를 구비한다. 상태 PRES0와 PRES1은 신호 presflg를 거쳐 화상 클럭을 검출하는 것에 관한 것이다. 두 사이클 로두는 C.2.3.4에 서술된 가산기 출력 신호인 rdyst의 값에 의존하기 때문에 관련된 테스트를 위한 것이다. 만약 프리젠테이션 플래그(presentation flag)가 검출되면, 가능한 "준비성"에 대해 모든 버퍼가 검사(examined)되고, 그렇지 않으면 상태 머신은 상태 DRQ로 진행할 뿐이다.
PRES0-PRES1 루프 둘레의 각각의 사이클은 서로 다른 버퍼를 조사하여, 채워지고 준비가 된(full and ready) 조건을 체크한다. 만약 이들이 충족되면, (만약 한개가 존재하면) 이전의 준비된 버퍼가 클리어되고(cleared), 새로운 준비된 버퍼가 할당되어 자신의 상태가 갱신된다. 이 프로세스는 모든 버퍼가 검사될 때까지 (index==max but) 반복된 후, 상태가 진행한다. 버퍼는 다음 중 어느 하나가 참일 때 디스플레할 준비가 된 것으로 간주된다.
상태 DRQ는 디스플레이 버퍼 (dry_valid_reg && disc_acc_reg)에 대한 요청을 체크한다. 만약 요청이 없으면 상태는 (나중에 서술되듯이 - 정상적으로 상태 TOKEN으로) 진행한다. 그렇지 않으면, 디스플레이 버퍼 인덱스가 다음과 같이 발행된다.(issued). 만약 준비된 버퍼가 존재하지 않으면, 이전의 인덱스가 재발행되거나, 또는 만약 이전의 디스플레이 버퍼가 존재하지 않으면 널 인덱스(null index) (제로)가 발행된다. 만약 버퍼가 디스플레이 준비가 되어 있으면, 자신의 인덱스가 발행되고 자신의 상태가 갱신된다. 필요하다면, 이전의 디스플레이 버퍼가 클리어된다. 그 후 상태 머신은 이전과 같이 진행한다.
상태 TOKEN은 메인 루프를 완료하기 위한 통상적인 선택이다. 만약 유효 입력이 존재하고 출력이 정체되어 있지 않다면, 전략적인 값(strategic values)에 대해 토큰이 검사되고 (후술함), 그렇지 않으면 제어는 상태 PRESO로 복귀한다.
제어는 임의의 조건이 충족될 때에만 메인 루프로부터 분기한다. 이들은 다음 절에 서술된다.
C.2.4.3 준비된 버퍼 인덱스의 할당
만약 PRES0-PRES1 루프 동안 버퍼가 준비된 것으로 결정되면, 임의의 시간에 단지 하나의 버퍼만이 준비된 것으로 지정될 수 있기 때문에, 임의의 이전의 준비된(previous ready) 버퍼가 비워질 필요가 있다. 상태 VACATE_ RDY는 자신의 상태를 VACANT로 셋팅함으로써 오래된 준비된(old ready) 버퍼를 클리어하고, 제어가 PRESO 상태로 복귀할 때 모든 버퍼가 준비되었는지 테스팅될 수 있도록 버퍼 인덱스를 1로 리셋시킨다. 그 이유는, 인덱스가 준비된 이전 버퍼를 가리키게 (그것을 클리어하기 위해)하기 위한 것이고, 의도적으로 준비된 새로운 버퍼 인덱스에 대한 레코드를 가지고 있지 않다. 그래서, 모든 버퍼를 다시 테스팅할 필요가 있다.
C.2.4.4 디스플레이 버퍼 인덱스의 할당
디스플레이 버퍼 인덱스의 할당은 상태 DRQ (상태 USE_RDY)로부터 직접 또는 오래된 디스플레이 버퍼 상태를 클리어하는 상태 VACATE_DISP 중 어느 하나를 통해서 발생한다. 선택된 디스플레이 버퍼는 IN_USE로 플래그되어 ray_buf의 값이 제로로 세팅되고, 인덱스가 1로 리셋되어 상태 DRQ로 복귀한다. 또한, disc_buf가 요구되는 인덱스에 주어지고, 이에 대응하여 2선식 인터페이스 선 (disc_valid와 dry_ace)이 제어된다. 상태 TOKEN, FLUSH, 및 ALLOC 간의 결정이 상태 USE_RDY에서 이루어질 필요가 없도록 할 때에만 제어가 상태 DRQ로 복귀한다.
C.2.4.5 PICTURE_END가 수신되었을 때의 동작
PICTURE_END 토큰의 수신시, 제어는 상태 TOKEN로부터 상태 PICTURE_END로 전달하는 데, 여기서 만약 인덱스가 이미 현재의 도착 버퍼를 가리키면 이는 자신의 상태가 갱신될 수 있도록 그곳을 가리키도록 세팅된다. out_acc_reg와 en_full 모두가 참이라고 가정하면, 상태는 이하와 같이 갱신될 수 있다. 만약 그렇지 않다면, 제어는 이들 모두가 참일 때까지 상태 PICTURE_END에 그대로 남아있다. 스윙 버퍼가 스윙하였음을, 즉 마지막 블럭이 성공적으로 기록되어 버퍼 상태를 안전하게 갱신할 수 있다는 것을 지시하기 위해 en_full 신호가 기록 어드레스 발생기에 의해 공급된다.
방금 채워진 버퍼의 준비성(readiness)이 테스팅되고, 테스트 결과에 따라 FULL 또는 READY 중 어느 한 상태가 부여된다. 만약 버퍼가 준비되어 있다면, rdy_buf가 자신의 인덱스의 값에 부여되고, set_la_ev 신호 (나중에 도착하는 이벤트)가 (예상된 디스플레이가 디코딩 시간 이전이라는 것을 가리키는)하이로 세팅된다. 이제 arr_buf의 새로운 값이 제로가 되고, 만약 준비된 이전 버퍼가 자신의 상태를 클리어할 필요가 있다면 인덱스는 그곳을 가리키도록 세팅되고, 제어가 상태 VACATE_RDY로 이동한다. 그렇지 않으면, 인덱스는 1로 리셋되고 제어는 메인루프의 시작으로 복귀한다.
C.2.4.6 PICTURE_START가 수신되었을 때의 동작 (도착 버퍼의 할당)
상태 TOKEN 동안 PICTURE_START 토큰이 도착할 때, 플래그 from_ps가 세팅되어 상태 TOKEN 대신에 상태 ALLOC가 방문되도록(visited) 기본 상태 머신 루프가 바뀌게 된다. 상태 ALLOC는 (도착하는 화상 데이타가 기록될) 도착 버퍼를 할당하는 것에 관한 것이고, 자신의 상태가 VACATE인 버퍼를 발견할 때까지 버퍼 전체를 사이클(cycles through)한다. 데이타 2선식 인터페이스 상으로 출력되기 때문에 out_ace_reg가 하이인 경우에만 버퍼가 할당될 것이다. 따라서, 정말로 그와 같은 경우가 될 때까지 루프 전체를 사이클하는 것이 계속될 것이다. 일단 적당한 도착 버퍼(arrival buffer)가 발견되면, 인덱스가 arr_buf에 할당되고, 자신의 상태가 IN_USE로 플래그된다. 인덱스는 1로 세팅되고, 플래그 from_ps가 리셋되고, 상태 가 NEW_EXP_TR로 진행하도록 세팅된다. (셋업시 명시된 타겟 인덱스인) targ_ix와 같은 지를 판단하기 위해 (다음에 PICTURE_START가 오는 워드를 포함하는) 화상의 인덱스에 대해 체크되고, 만약 그렇다면 set_if+_ev (인덱스 발견 이벤트)이 하이로 세팅된다.
세가지 상태 NEW_EXP_TR, SET_ARR_IX 및 NEW_PIC_MJM은 입력하는 데이타에 대한 예상된 새로운 시간 기준 및 화상 번호를 셋업한다. 중간 상태는 단지 정확한 화상 번호 레지스터가 갱신될 수 있도록 (역시 this_pnum도 갱신된다는 것에 유의) 인덱스를 arr_buf로 세팅시킨다. 다음에 제어는 하위 확장을 접할 때까지 데이타를 출력하는 (바람직한 2선식 인터페이스 신호를 가정한다) 상태 OUTPUT_TAIL로 진행한다. 이때, 메인 루프가 다시 시작된다. 이것은 프리젠테이션 플래그 또는 디스플레이 요청에 대한 어떠한 테스트도 그 사이에 존재하지 않는 전체 데이타 블럭 (64 항목)이 출력된다는 것을 의미한다.
C.2.4.7 FLUSH가 수신되었을 때의 동작
데이타 스트림인 FLUSH 토큰은 시퀀스 정보 (프리젠테이션 수, 화상 수, rst_fld)가 리셋되어야 한다는 것을 가리킨다. FLUSH까지의 모든 데이타가 정확히 처리되었을 때에만 이것이 생성한다. 따라서, FLUSH를 수신하게 되면, 모든 프레임이 디스플레이로 핸드오버(handed over)되었다는 것이 확실할 때 즉, 모든 버퍼 하지만 관개의 버퍼가 상태 EMPTY를 갖고 다른 버퍼가 (디스플레이 버퍼와 같이) IN_USE일 때까지 모든 버퍼의 상태를 모니터할 필요가 있다. 이 지점에서, "새로운 시퀀스"가 안전하게 사용될 수 있다.
상태 TOKEN에서 FLUSH 토큰이 검출될 때, 플래그 from_f1이 세팅되어 상태 TOKEN 대신에 상태 FLUSH가 방문되도록 기본 상태 머신 루프가 바뀐다. 상태 FLUSH는 디스플레이로서 VACANT 또는 IN_USE가 되는 것을 대기하는 각각의 버퍼의 상태를 교대로 조사한다. 상태 머신은 조건이 참일 때까지 루프 전체를 단순히 사이클한 후, 자신의 인덱스를 증가시켜 모든 버퍼가 방문될 때까지 프로세스를 반복 한다. 마지막 버퍼가 조건을 충족시킬 때, 프리젠테이션 번호, 화상 수, 및 모든 시간 기준 레지스터는 자신의 리셋 값 rst_fld가 1로 세팅되었다고 가정한다. 플래그 from_fl은 리셋되고 정상적인 메인 루프 동작이 재개된다.
C.2.4.8 TEMPORAL_REFERENCE가 수신되었을 때의 동작
TEMPORAL_REFERENCE 토큰을 만나게 될 때, H.261 비트를 체크하고, 만약 세팅된다면 네가지 상태 TEMP_REFO 내지 TEMP_REF3이 방문된다. 이들은 다음과 같은 동작을 수행한다.
C.2.4.9 기타의 토큰 및 테일(tails)
상태 TOKEN은 상기 서술한 경우를 제외한 모든 경우에 제어를 상태 OUTPUT_TAIL로 전달한다. 제어는 토큰의 마지막 워드가 발견될 때까지(in_extn_reg는 로우) 여기에 남아 있고, 이때 루프가 재진입된다.
C.2.5 응용시 주의
C.2.5.1 버퍼 관리기 입력을 정체시키는 상태 머신
이와 같은 구비조건은 화상 클럭 및 디스플레이 버퍼 요청의 "비동기성" 타 이밍 이벤트를 반복적으로 검사한다. 이와 같은 체크 동안 버퍼 관리기 입력을 정체시킬 필요가 있다는 것은, 버퍼 관리기에의 입력에 데이타를 연속적으로 공급할 때 버퍼 관리기를 통과하는 데이타 속도가 한정될 수 있다는 것을 의미한다. 상태의 전형적인 시퀀스는 한 사이클 동안 지속하는 OUTPUT_TAIL을 제외하고 각각 PRES0, PRES1, DRQ, TOKEN, OUTPUT_TAIL일 수 있다. 이것은 64 데이타 항목의 각각의 블럭에 대해 입력이 정체되는 동안 (상태 PRESO, PRESI 및 DRQ 동안)인 3 사이클의 오버헤드(overhead)가 존재함으로써, 기록 속도를 3/64 또는 약 5%만큼 느리게 할 수 있다는 것을 의미한다. 이 숫자는 최악의 조건하에서 상태 머신의 보조 분기(auxiliary banches)가 실행될 때 오버헤드의 13 사이클까지 증가할 수 있다. 이와 같은 오버헤드는 오로지 프레임 마다 한번씩(once-per-frame) 적용될 것이라는 것에 유의한다.
C.2.5.2 액세스하는 동안 프리젠테이션 번호의 작용
C.2.3.2.4에 도시된 도면으로서 예시된 bm_pres의 특정 실시예는 upi 액세스 동안 프리젠테이션 번호가 자유로이 실행(free-runs)한다는 것을 의미한다. 액세스를 얻었을 때와 같이, 만약 프리젠테이션 번호가 액세스가 포기될 때와 같을 필요가 있다면, 이는 액세스가 허여된 후 프리젠테이션 번호를 판독하고 이것이 포기되기 직전에 그것을 다시 기록함으로써 실행될 수 있다. 이는 비동기식이기 때문에 효율성를 한층 증가시키기 위해 액세스를 몇번 반복하는 것이 바람직할 수 있다는 것을 알아야 한다.
C.2.5.3 H26l 시간 기준 번호
모듈 bm_tref (도시되지 않음)은 bmlogic에 포함된다. H.261 시간 기준 값은 델타 입력을 bmtref에서 bm_stun 모듈로 향하게 함으로써 정확하게 처리된다. 이 델타 입력은 만약 프레임이 항상 순차적이라면 제로로 고정될 수 있다.
C.3절 기록 어드레스 생성
C.3.1 소개
본 발명에 따른 기록 어드레스 생성 하드웨어의 기능은 버퍼에 기록하기 위한 데이타용 블럭 어드레스를 만드는 것이다. 이는 버퍼 기본 어드레스, 스트림에 표시된 성분(components), 마크로블럭 내의 수평 및 수직 샘플링, 화상 크기(picture dimensions), 및 코딩 규격을 고려한다. 데이타는 매크로블럭 형태로 도착하지만, 디스플레이하기 위해 라인이 검색될 수 있도록 용이하게 저장되어야 한다.
C.3.2 기능 개요
새로운 블럭이 데이타 스트림 (DATA 토큰으로 가리켜진)에 도착할 때마다 기록 어드레스 발생기는 새로운 블럭 어드레스를 생성할 필요가 있다. 실제로 요구 되기 전에 (스윙 버퍼에 있는) DRAM 인터페이스로서 어드레스가 최대 64 데이타 워드까지 저장될 수 있기 때문에 어드레스를 즉시 생성할 필요는 없다. 이는 여러가지 어드레스 성분이 연속하는 사이클로 런닝 합계(running total)에 더해질 수 있으므로, 임의의 하드웨어 곱셈기가 필요없다는 것을 의미한다. 매크로블럭 카운터 기능은 전략적인 최종값(terminal values)과 런닝 카운트(running counts)를 레지스터 화일에 저장함으로써 실행되는 데, 이들은 각각의 블럭 어드레스를 계산한 후의 비교 및 조건 갱신을 위한 피연산자이다.
제161도에 도시된 화상 포맷을 고려할 때, 규격 및 H.261과 같은 데이타 스트림에 대해 예상된 어드레스 시퀀스가 발생될 수 있다. 이들은 이하에서 도시된다. 슬라이스(slices)가 충분히 넓지 않기 때문에 (11 이라기보다는 3 마크로블럭) 포맷은 실제로 H.261 명세에 일치하지 않지만, 여기에서는 편의상 동일한 "하프-화상-폭-슬라이스(half-picture-width-slice)" 개념이 사용되고 시퀀스가 "H.261 타입" 으로 간주된다는 것에 유의하여야 한다. 도시된 예에서, 데이타는 완전한(full) 마크로블럭 4:2:0으로서 도달하고, 각각의 성분은 자신의 특정한 버퍼의 영역에 저장된다.
C.3.3 아키텍쳐
C.3.3.1 인터페이스
C.3.3.1.1 버퍼 관리기에서의 인터페이스
버퍼 관리기는 데이타 및 버퍼 인덱스를 기록 어드레스 발생기로 직접 출력 한다. 이는 2선식 인터페이스의 제어하에 수행된다. 몇가지 방법에 있어서,상기 두개가 극히 긴밀하게 링크되어 있기 때문에 기록 어드레스 발생기 블럭을 버퍼 관리기의 확장으로 생각할 수 있다. 그러나, 이들은 두개의 개별적인 (그러나 유사한) 클럭 발생기로부터 동작한다.
C.3.3.1.2 dramif에서의 인터페이스
기록 어드레스 발생기는 DRAM 인터페이스에 데이타 및 어드레스를 공급한다. 이들 각각은 자신의 2선식 인터페이스를 가지며, dramif는 이들 각각의 서로 다른 클럭 영역에서 사용한다. 그러나, 기록 어드레스 발생기 클럭에 관련되지 않은 클럭에서 dramif로 어드레스가 클럭된다. 그래서, 이는 출력에서 동기화된다.
C.3.3.1.3 마이크로프로세서에서의 인터페이스
기록 어드레스 발생기는 8-비트 데이타 버스 및 판독 기록 스트로브 (strobes)와 함께, 마이크로프로세서 어드레스 공간의 3 비트를 사용한다. 레지스터 액세스용으로 하나의 선택 비트가 존재한다.
C.3.3.1.4 이벤트
기록 어드레스 발생기는 다섯개의 서로 다른 이벤트를 발생할 수 있다. 두 개의 이벤트는 데이타 스트림 (hmbs와 vmbs)에 나타나는 화상 크기 정보에 응답하고, 세개의 이벤트는 DEFINING_SAMPLING 토큰 (각각의 성분마다 한 이벤트)에 응답한다.
C.3.3.2 기본 구조
기록 어드레스 발생기의 구조는 도면 waddrgen.sch에 도시된다. 이는 데이타경로, 스누퍼 및 동기화를 구비한다.
C.3.3.2.1 데이타경로(bwadpath)
데이타경로는 18-비트 가산기/감산기 및 레지스터 화일 (C.3.3.4참조)을 구비하고 제어 논리에 사용하기 위한 (가산기 출력에 근거한) 제로 플래그를 발생하는 본 문서의 C.5장에 서술된 유형의 것이다.
C.3.3.2.2 제어 논리
본 발명의 제어 논리는 모든 레지스터 화일 로드 및 구동 신호 (register file load and drive signals), 가산기 제어 신호, 및 2선식 인터페이스 신호를 발생하기 위한 하드웨어를 구비하고 또한 기록 가능한 제어 레지스터를 구비한다.
C.3.3.2.3 스누퍼와 동기화
슈퍼 스누퍼는 데이타 및 어드레스 포트 모두에 존재한다. 데이타경로의 스누퍼는 z셀로부터의 슈퍼-스누퍼로서 제어된다. 어드레스는 기록 어드레스 발생기클럭과 dramif의 "clk" 영역 사이에 동기화를 갖는다. syncifs는 2선식 인터페이스 신호용으로 Z셀에 사용되고, 간단한 동기화기는 어드레스용으로 데이타경로에 사용된다.
C.3.3.3 제어 논리 및 상태 머신
C.3.3.3.1 입력/출력 블럭 (wa inout)
이 블럭은 (토큰 디코드용의) 입력 데이타 및 (네가지 방법으로 디코딩하기 위한) 도달 버퍼 인덱스용 래치와 함께 입력 및 두개의 출력 2선식 인터페이스를 구비한다.
C.3.3.3.2 두 사이클 제어 블럭 (wa fc)
여기에 플래그 fc (첫번째 사이클)가 유지되고, 상태 머신이 2-사이클 연산 (즉, 가산을 포함하는 연산)의 중간에 있는 지를 가리킨다.
C.3.3.3.3 성분 카운트 (wa comp)
각각의 성분의 데이타 블럭에 대해 개별적인 어드레스가 필요하고, 이 블럭 은 현재의 성분을 입력 스트림에 수신된 DATA 헤더의 타입을 근거로 고려한다.
C.3.3.3.4 모듈로-3 제어 (wa mod3)
H.261 데이타 스트림에 대해 어드레스 시퀀스를 발생할 때, 스크린 (C.3.2을 참조)을 따라 매크로블럭의 3행을 카운팅할 필요가 있다. 이는 새로운 매크로블럭이 방문된 때마다 증가되는 모듈로-3 카운터를 유지함으로서 실행된다.
C.3.3.3.5 제어 레지스터 (wa uregs)
모듈로 wa_uregs는 셋업 레지스터와 코딩 규격 레지스터를 포함하는 데, 후자는 데이타 스트림으로부터 로딩된다. 셋업 레지스터는 3비트: QCIF(1sb)와 데이타 스트림 (비트 1과 2)에 예상된 최대 성분을 사용한다. 또한, 액세스 비트가 이(흔히 동기화되는) 블럭에 상주하는 데, "정지된(stopped)" 비트는 계층(walogic)까지의 레벨에서 액세스 비트와 이벤트 정지 비트의 OR로서 발생된다. 마이크로프로세서 어드레스 더코딩은 판독 및 기록 스트로브, 선택 와이어, 및 어드레스 버스의 하위 2 비트를 취하는 블럭 wa_udec에 의해 실행된다.
C.3.3.3.6 상태 머신 제어 (wa state)
이 블럭의 논리는 몇 개의 구별되는 블럭으로 나된다. 상태 디코드, 새로운상태 인코드, "중간" 논리 신호의 발생, 데이타경로 제어 신호(drivea, driveb, 로드, 가산기 제어 및 선택 신호), 곱셈기 제어, 2선식 인터페이스 제어, 및 5개의 이벤트 신호.
C.3.3.3.7 이벤트 발생
다섯 개의 이벤트 비트는 입력에 도착하는 임의 토큰의 결과로서 발생된다. 경우에, 이벤트 서비스 루틴이 수신된 새로운 값을 근거로 계산을 수행하기 때문에 임의의 이벤트가 발생하기 전에 전체 이벤트가 수신된다. 그 이유는, 각각의 비트가 이벤트 하드웨어에 입력되기 전에 전체 사이클만큼 지연되기 때문이다.
C.3.3.4 레지스터 어드레스 맵
기록 어드레스 발생기 클럭에는 두 세트의 레지스터가 존재한다. 이들은 규격 셀 부분에 위치된 상위 레벨의 셋업 타입 레지스터와 키홀 데이타경로 레지스터이다. 이들은 테이블 C.3.1과 C.3.2에 각각 나열된다.
테이블 C.3.1 상위 레벨의 레지스터
테이블 C.3.2 영상 포맷터 어드레스 발생기 키홀
키홀 레지스터는 크게 두개의 카테고리에 포함된다. 이들은 임의의 어드레스 계산 이전에 화상 크기 변수와 함께 로딩되어야 하는 것과, 여러 (수평 및 수직) 블럭 및 매크로블럭 카운트의 런닝 합계(running totals)를 포함하는 것이다.
화상 크기 변수는 기록 어드레스 발생기에 의해 발생된 임의의 인터럽트에 응답하여, 즉 임의의 화상 크기 또는 샘플링 토큰이 데이타 스트림에 나타날 때 로딩될 수 있다. 따라서, 만약 화상 크기가 데이타 스트림을 수신하기 전에 알려져 있다면, 이들은 리셋 직후에 기록될 수 있다. 예시적인 셋업은 C. 13절에 주어져 있고, 화상 크기 변수 레지스터는 다음 절에 정의된다.
C.3.4 기록 어드레스 발생기의 프로그래밍
다음의 데이타경로 레지스터는 어드레스 계산이 진행하기 전에 정확한 화상크기 정보를 포함하여야 한다. 이들은 제162도에 도시된다.
1) WADDR_HALF_WIDTH_IN_BLOCK : 이는 들어오는 화상의 하프 폭(half width)을 블럭으로 정의한다.
2) WADD_MBS_WIDE : 이는 들어오는 화상의 폭을 매크로블럭으로 정의한다.
3) WADDR_MBS_HIGH : 이는 들어오는 화상의 높이를 매크로블럭으로 정의한다.
4) WADDR_LAST_MB_IN_ROW : 이는 매크로블럭의 한개의 전체 폭(single, full_width) 행에서 마지막 매크로블럭의 상부 좌측 블럭(top left hand block)의 블럭 수를 정의한다. 블럭에 번호를 붙이는 것(block numbering)은 가장 좌측 매크로블럭의 상부 좌측 구석에서 제로로 시작하고, 각각의 블럭에 대하여 프레임을 가로질러서 그리고 매크로블럭 행 내에서 각각의 뒤따르는 블럭 열에 대해서 이어서 증가한다.
5) WADDR_LAST_MB_IN_HALF_ROW : 이는 이전 항과 유사하지만, 매크로블럭에서 하프-폭인 마지막 매크로블럭에 있는 상부 좌측 블럭의 블럭수를 정의한다.
6) WADDR_LAST_ROW_IN_MB : 이는 매크로블럭의 행 내에서 블럭의 마지막 행에 있는 가장 좌측 블럭의 블럭 수를 정의한다.
7) WADDR_BLOCKS_PER_MB_ROW : 이는 매크로블럭의 한개의 전체 폭에 포함된 블럭의 전체 수를 정의한다.
8) WADDR_LAST_MB_ROW : 이는 화상에서 매크로블럭의 마지막 행에서 가장 좌측의 상부 좌측 블럭 어드레스를 정의한다.
9) WADDR_HBS : 이는 입력하는 화상의 블럭의 폭을 정의한다.
10) WADDR_MAXHB : 이는 단일 매크로블럭에서 블럭의 행에서 가장 우측 블럭의 블럭 수를 정의한다.
11) WADDR_MAXHB : 이는 단일 매크로블럭의 높이-1을 블럭으로 정의한다.
또한, DRAM의 구성을 정의하는 레지스터가 프로그래밍되어야만 한다. 이들은 세개의 버퍼 기본 레지스터 및 n 성분 오프셋 레지스터인 데, 여기서 n은 데이타 스트림에 예상된 성분의 수이다. (이는 데이타 스트림에 정의될 수 있고, 최소 1과 최대 3일 수 있다).
많은 변수가 블럭 수 또는 블럭 어드레스를 정의한다는 것을 알아야 한다.
그 이유는 마지막 어드레스가 블럭 어드레스일 수 있고, 계산은 누산 알고리즘(cumulative algorithm)에 근거하기 때문이다.
제162도에 도시된 스크린 구성은 다음과 같은 레지스터 값을 생성한다 :
C.3.5 상태 머신의 동작
테이블 C.3.3에 도시된 바와 같이 버퍼 관리기의 상태 머신은 19가지 상태가 존재한다. 이들은 제165도에 도시된 바와 같이, 또한 작용 기술(behavioral description), bmlogic.M에 서술된 바와 같이 상호 작용한다.
테이블 C.3.3 기록 어드레스 발생기 상태
C.3.5.1 어드레스의 게산
기록 어드레스 발생기 상태 머신의 주요 부분은 제165도의 좌측 밑에 도시된다. DATA 토큰을 수신하게 되면 상태 머신은 상태 IDLE에서 상태 ADDR1로 이동한 다음, 2선식 인터페이스 제어로서 18-비트 블럭 어드레스가 출력되는 상태 ADDR5을 이동한다. 상태 ADDR1 내지 ADDR5을 통해 수행된 계산은 다음과 같다 :
사용된 레지스터는 다음과 같이 정의된다. :
1) BU_WADDR_VMBADDR : 어드레스가 계산되고 있는 블럭이 포함된 매크로블럭의 행의 가장 좌측 마크로블럭의 블럭 어드레스(상부 좌측 블럭).
2) BU_WADDR_HMBADDR : 어드레스가 계산되고 있는 블럭이 포함된 마크로블럭의 열의 상부 매크로블럭의 블럭 어드레스 (상부 좌측 블럭).
3) BU_WADDR_VBADDR : 매크로블럭의 행 내에 존재하고, 어드레스가 계산되고 있는 블럭이 포함된 블럭의 행의 가장 좌측 블럭의 블럭 어드레스(상부 좌측 블럭).
4) BU_WADDR_HB : 마크로블럭 내에 있고, 어드레스가 계산되고 있는 블럭의 수평 블럭 수.
5) BU_WADDR_SCRATCH. 중간 결과를 시간 저장하는 데 사용되는 스크래치 레지스터 (scratch register).
제163도를 고려하고 예를 들어 그 어드레스가 0x62D인 블럭의 계산을 취하면, 계산에 대한 다음 시퀀스가 발생할 것이다 :
블럭 어드레스=0x62C+1=0x62D;
여러가지 레지스터의 내용은 도면에 도시된다.
C.3.5.2 새로운 스크린 장소 변수(new screen location parameters)의 계산 어드레스가 출력될 때, 상태 머신은 상술된 여러가지 스크린 장소 변수를 갱신하기 위한 계산을 수행한다. 상태 HB와 MB0 내지 MB6은 계산하지 않고 임의 지점에서 제어를 DATA 토큰의 나머지가 출력되는 상태 DATA로 전달한다.
이들 상태는 쌍으로 진행하는 데, 첫 번째 쌍은 현재의 카운트와 그 최종 값간의 차이를 계산하여, 즉 제로 플래그를 발생한다. 두 번째 쌍은 레지스터를 리셋시키거나 또는 (스크린 크기로부터 발생된 셋업 레지스터 값을 기초로) 고정된 오프셋을 더한다. 어느 경우에 있어서, 만약 해당 카운트가 그 최종 값 (즉, 제로 플래그가 세팅된)에 도착하면, 제어는 상태의 "MB" 시퀀스 이하로 계속된다. 만약 그렇지 않으면, 모든 카운트가 올바른 (다음 어드레스 계산을 위해 준비된) 것으로 간주되고 제어가 상태 DATA로 전달된다.
감산 및 가산의 사용을 포함하는 모든 상태를 완료하는 데 2사이클 (규격, 리플-캐리(ripple-carry) 가산기을 사용하도록 하는)를 소요되는 데, 이는 가산기에 근거한 상태에 대해 0과 1사이에서 교대하는(alternates) 플래그, fc (첫 번째 사이클)을 사용함으로써 실행된다.
바람직한 2선식 인터페이스 조건을 가정할 때 모든 어드레스 계산 및 스크린 장소 계산으로 데이타가 출력된다.
C.3.5.2.1 규격 (MPEG-유형) 시퀀스에 대한 계산
동작의 시퀀스는 다음과 같다 (여기서 제로 플래그는 가산기의 출력에 근거 한다)
(vnb_addr은 화상의 끝이 계산으로 부터 추론되기 보다는 PICTURE_START 토론이 검출된 후 리셋된다)
C.3.5.2.2. H.261 시퀀스에 대한 계산
H.261 계산에 대한 시퀀스는 상태 MB4에서 규격 시퀀스로부터 분기한다 :
C.3.5.3 PICTURE_START 토큰의 연산
PICTURE_START 토큰이 수신될 때, 제어는 vb_addr 레지스터(BU_WADDR_VBADDR)가 0으로 리셋되는 상태 PIC_ST1으로 넘어간다. 다음에 각각의 상태 PIC_ST2와 PIC_ST3가 각각의 성분에 대해 한번씩 방문되어, hmb_addr과 vmb_addr을 각각 리셋시킨다. 다음에 제어는 상태 OUTPUT_TAIL을 거쳐 IDLE로 복귀한다.
C.3.5.4 DEFINE_SAMPLING 토큰의 연산
DEFINE_SAMPLING 토큰이 수신될 때, 성분 레지스터가 입력 데이타의 최하위 2 비트로 로딩된다. 또한, 상태 HSAMP와 VSAMP를 거쳐, 해당 성분에 대한 maxhb와 maxvb 레지스터가 로딩된다. 더욱이, 적당한 정의 샘플링 이벤트 비트가 트리거된다(triggered) (전체 토큰이 기록되도록 한 사이클만큼 지연됨).
C.3.5.5 HORIZONTAL_MBS와 VERTICAL_MBS의 연산
각각의 HORIZONTAL_MBS와 VERTICAL_MBS이 도착할 때, 토큰에 포함된 14-비트 값은 적당한 레지스터에 두 사이클로 기록된다. 관련된 이벤트 비트가 트리거되어 한 사이클 만큼 지연된다.
C.3.5.6 기타의 토큰
CODING_STANDARD 토큰이 검출되고 상부 레벨의 BU_WADDR_ COD_STD 레지스터가 입력 데이타로서 기록되게 한다. 이것이 디코딩되고 h261 플래그 (H26l이 아님)는 버퍼 관리기 블럭에 하드웨어화된다. 다른 모든 토큰은 토큰이 완료할 때까지 데이타를 수용하는 상태 OUTPUT_TAIL로 제어를 이동하게 한다. 그러나, 이는 실제로 데이타를 출력하지 않는다는 것을 알아야 한다.
C.4절 판독 어드레스 발생기
C.4.1 개요
본 발명의 판독 어드레스 발생기는 네 개의 상태 머신/데이타경로 블럭으로 구성된다. 첫째, "dline"은 라인 어드레스를 생성하고 이들을 다른 세 개(각각의 성분에 대해 하나씩)의 동일한 페이지/블럭 어드레스 발생기, "dramctls"로 분산시킨다. 모든 블럭은 2선식 인터페이스로서 링크된다. 동작 모드는 인터레이스된/프로그래시브(interlaced/pregressive), 첫 번째 필드 상위/하위, 및 상위/하위/두가지 모드에서의 프레임 시작의 모든 조합을 포함한다. 테이블 C.3.4는 dispaddr 제어 레지스터의 명칭, 어드레스, 및 리셋 상태를 도시하고, C.13장은 두개의 어드레스 발생기에 대한 프로그래밍 예를 나타낸다.
C.4.2 라인 어드레스 발생기 (dline)
이 블럭은 각각의 성분에 대한 라인 시작 어드레스를 계산한다. 테이블 C.3.4는 d1ine에서 18 비트 데이타경로 레지스터를 도시한다.
DISP_register_name과 ADDR_register_name DISP_name 레지스터간의 구별은 dispaddr에서만 있고, 레지스터가 DRAM으로부터 판독될 디스플레이 영역에 특정하다는 것을 의미한다. ADDR_name는 레지스터가 외부 버퍼의 구조에 대해 아무것도 설명하지 않는다는 것을 의미한다.
연산
모든 모드가 반복한다는 것을 제외하고, dline의 기본 연산은 다음과 같다 :
테이블 C.3.4 dispaddr 데이타경로 레지스터
C.4.3 dline 제어 레지스터
상기 동작은 이하의 테이블 C.4.3에 도시된 dispaddr 제어 레지스터에 의해 바뀐다.
테이블 C.4.3 제어 레지스터
C.4.3.1 LINE_IN_LAST_ROW[성분]
이들 세 개의 레지스터는 각각의 성분에 대해 판독될 블럭의 마지막 행에 있는 라인 수를 결정한다. 따라서, 판독 윈도우(read window)의 높이는 임의의 라인 수일 수 있다. 이는 윈도우의 상부, 좌측 및 우측 에지가 블럭 경계 상에 있고 출력 제어기가 액세스 라인을 클림(clip) (폐기)할 수 있기 때문에 백업 특징(back-up feature)이다.
C.4.3.2 DISPADDR_ACCESS
이는 dispaddr 전체에 대한 액세스 비트이다. 이 장소에 "1"을 기록하게 되면, dispaddr이 동기하여 클럭에 정지된다. 액세스 비즈로부터 판독된 값은 dispaddr이 안전하게 정지될 때가지 "0"으로 유지될 것이다. 이 상태에 도착하였기 때문에, 이는 모든 dispaddr 레지스터에 비동기식 upi 액세스를 안전하게수행한다. 액세스 비트가 "1"일 때까지 upl는 데이타경로 레지스터로부터 액티브하게 록(actively locked) 된다는 것을 알아야 한다. 현재의 디스플레이 또는 데이타경로 동작을 방해하지 않고 dispaddr를 액세스하도록, 다음과 같은 상황하에서만 액세스가 주어지고 해제되어야만 할 것이다.
정지 : 만약 데이타경로가 현재의 두 사이클 동작 (만약 이것이 한 사이클이었다면)틀 완료하고 출력 제어기로부터의 "안전(safe)"신호가 하이일 때에만 액세스가 허용되어야 할 것이다. 이 신호는 디스플레이 윈도우 밑에 있는 스크린 상의 영역을 나타내고, 출력 제어기(dispaddr이 아님)에서 프로그래밍된다. 주 : 그래서, dispaddr에 액세스하려고 시도하기 전에 출력 제어기를 프로그래밍할 필요가 있다.
"안전(safe)"이 하이일 때 또는 vsync 동안에만 시작-액세스 (starting-access)가 해제될 것이다. 이렇게 함으로써 디스플레이가 활성 윈도우에 너무 근접하여 시작하지 않게 한다.
이 방법은 제어 소프트웨어로 하여금 액세스를 요청하고, 디스플레이의 끝까지 폴(poll)하고, dispaddr을 변경하고, 억세스를 해제하게 한다. 만약 소프트웨어가 너무 느려 vsync 이후까찌도 액세스 비트를 해제하지 않으면, dispaddr는 다음의 안전한 주기(safe period)가 될 때까지 시작하지 않을 것이다. 이와 같이 "손실된(lost)" 화상 (쓰레기라기 보다는) 동안 경계색이 디스플레이될 것이다.
C.4.3.3 DISPADDR_CTL0[7:0]
다음 설명을 읽을 때, 인터레이스된 데이타와 인터레이스된 디스플레이 간의차이점을 이해하는 것은 중요하다.
인터레이스된 데이타(interlaced data)는 두가지 형태가 있을 수 있다. 상위 레벨의 레지스터는 필드-화상 (각각의 버퍼는 한 필드를 구비한다)과 프레임 (각각의 버퍼는 전체 프레임 -인터레이스된 또는 되지않은- 구비한다)을 지원한다.
DISPADDR_CTL0[7:0]는 다음과 같은 제어 비트를 포함한다.
SYNC_MODE[1:0]
인터레이스된 디스플레이(interlaced display)로서, 상부 및 하부 필드를 참조하는 vsyncs는 field_info 핀과는 차이점이 있다. 본 절에서, field_info =HIGH는 상부 필드를 의미한다. 이들 두개의 제어 비트는 버퍼 관리기로부터 어떤 vsyncs dispaddr이 새로운 디스플레이 버퍼를 요청할 것인지를 결정하여, 다음과 같은 디스플레이 상의 필드로서 버퍼 (만약 데이타가 보간되었다면)의 필드를 동기화한다.
0 : 상부 필드 상의 새로운 디스플레이 버퍼
1 : 바닥 필드
2 : 이들 모두의 필드
3 : 이들 모두의 필드
기동시, dispaddr는 vsync마다 버퍼 관리기로부터 버퍼를 요청할 것이다.
버퍼가 준비될 때까지, dispaddr는 제로(디스플레이가 없음) 버퍼를 수신할 것이다. 이것이 최종적으로 양호한 버퍼 인덱스를 얻게될 때, dispaddr는 디스플레이가 어디에 존재하는 지를 모른다. 따라서, 올바른 vsync로서 디스플레이 기동을 동기화시킬 필요가 있다.
READ_START
기동시 인터레이스된 디스플레이를 위해, 이 비트는 어떤 vsync 디스플레이상에서 실제로 시작될 것인지를 결정한다. 또한, 디스플레이 버퍼 인덱스를 수신하게 되면, dispaddr는 버퍼 내의 필드로서 디스플레이 상의 필드를 정렬시키기 위해 현재의 vsync를 "싯 아웃(sit out)"할 수 있다.
0 : 프로그래시브
1 : 인터레이스된
프로그래시브 모드에서, 모든 라인은 버퍼의 디스플레이 영역으로부터 판독 된다. 인터레이스 모드에서, 단지 선택적인 라인만이 판독된다. 첫 번째 또는 두번째 라인에서 판독을 시작할 것인지는 field_info에 따른다. (인터레이스된) 필드-화상으로서, 시스템은 이 비트의 셋팅이 프로그래시브하도록 각각의 버퍼로부터 모든 라인을 판독하기를 원한다. field_info와 첫 번째/두 번째 라인 시작 간의 맵핑은 1sb_invert (이와 같이 역사적인 이유로 인해 명칭이 부여됨)로서 인버팅될 수 있다.
LSB_INVERT
세팅될 때, 이 비트는 라인 카운터에서 볼 수 있는 field_info 신호를 인버팅한다. 따라서, 판독은 프레임의 정확한 라인에서 시작되어 인코더, 디스플레이 또는 상위 레벨의 레지스터로서 채택된 규약에 관계없이 디스플레이에 정렬될 수 있다.
LINE_RPT[2:0]
각각의 비트는 세팅될 때 대응하는 성분의 라인이 두번씩 판독되게 한다(비트 0은 성분 0 등에 영향을 미친다). 이는 수직 업-샘플링(upsampling)의 제1부분을 형성한다. 이는 QFIF에서 601로의 변환에 필요한 8배 크로마(chroma) 업-샘플링에 사용된다.
이 비트는 성분 1과 2의 라인 수에 대한 성분 0에 대해 (디스플레이에 반대인) 판독될 라인의 수의 비율을 프로그램하는데 사용된다.
0 : 동일한 라인 수, 즉 버퍼에서 4:4:4 데이타
1 : 2배 많은 성분 0라인의 수, 즉 4:2:0.
페이지/블럭 어드레스 발생기 (dramctls)
라인 어드레스를 전송하였을 때, 이들 블럭은 라인을 따라 판독하기 위해 일련의 페이지/라인 어드레스 및 블럭을 생성한다. 항상 8 블럭의 최소 페이지 폭이 가정되고, 그 결과로 나타나는 출력은 페이지 어드레스, 3 비트 라인 수, 3 비트 블럭 시작, 및 3 비트 블럭 정지 어드레스로 구성된다. (라인 수는 dline에 의해 계산되어 변형되지 않은 채로 dramctls를 통해 전달된다). 그래서, 좌측으로부터 세번째 블럭 (임의의 라인을 따른 임의의 점)에서 시작하는 페이지 0xaa로부터 라인 5의 48 픽셀을 판독하기 위해, DRAM i/f에 전달된 어드레스는 다음과 같을 것이다.
페이지 = 0xaa
라인 = 5
블럭 시작 = 2
블럭 정지 = 7
이들 세개의 머신 각각은 5 데이타경로 레지스터를 갖는다. 이들은 테이블C.3.4에 도시된다. 각각의 dramct1의 기본 행위는 다음과 같다.
테이블 C.3.5 Dramct1(0,1 & 2) 데이타경로 레지스터 프로그래밍
다음 15 dispaddr 레지스터는 연산이 시작되기 전에 프로그래밍되어야 한다.
BUFFER_BASE0,1,2
DISP_COMP_OFFSET0,1,2
DISP_VBS_COMP0,1,2
ADDR_HBS_COMP0,1,2
DISP_COMP0,1,2_HBS
dispaddr 제어 레지스터의 리셋 상태를 사용함으로써 반복하는 어떠한 라인도 동기화되지 않고 상부 필드(field_info=HIGH)에서 시작하여 4:2n으로 인터레이스된 디스플레이를 나타낸다. 제159도, "SIF (22 대 18 마이크블럭) 화상을 포함하는 버퍼 0", 는 SIF 화상으로 셋업된 전형적인 버퍼를 도시한다. (이 예는 C.13절에서 보다 상세히 논의되었다). 이 예에서, DISP_HBS_COMPn은 ADDR_HBS_COMPn과 이와 유사하게 수직 레지스터 DISP_VBS_COMPn와 같고, 이에 대응하는 기록 어드레스 발생기 레지스터도 같다. 즉, 판독될 영역은 전체 버퍼이다.
판독 어드레스 발생기로 윈도우잉(windowing)
버퍼의 일부 (윈도우)만을 판독하도록 dispaddr을 프로그램할 수 있다. 윈도우의 크기는 각각의 성분에 대해 레지스터 DISP_HBS, DISP_VBS, COMPONENT_OFFSET, 및 LINES_IN_LAST_ROW에 의해 프로그램밍된다. 제160도, "디스플레이 윈도우를 갖는 SIF 성분 0"은 이것이 어떻게 달성되는 지를 도시한다.(성분 0에 대해서만).
본 예에서, 레지스터 셋팅은 다음과 같을 것이다 :
주 :
* 윈도우는 블럭 경계에서만 시작하고 정지할 수 있다.
본 예에서 7과 동등한 LINES_IN_LAST_ROW (모두 8을 의미)를 남긴다.
* 본 예는 임의의 다른 4:4:4 데이타에는 적용되지 않는다. 해당되기 위해 서는 다른 두 성분에 대한 윈도우 에지가 블럭 경계에 있어서는 안된다.
* 만약 수신하는 데이타가 4:4:4가 아니면 컬러 공간 변환기가 정지할 것이다. 이것은 이와 같이 업샘플러와 결합하여 판독된 윈도우는 이것을 달성하도록 프로그램되어야 한다는 것을 의미한다.
C.5절 어드레스 생성을 위한 데이타경로
dispaddr과 waddrgen에 사용된 데이타경로는 레지스터 수, 일부 마스킹(some masking), 및 상태 머신으로 복귀된 플래그만을 제외하고는 구조 및 폭(18 비트)이 동일하다. 하나의 슬라이스(slice)의 회로가 제165도, "데이타경로의 슬라이스"에 도시되어 있다. 레지스터는 A 또는 B 버스를 구동시키도록 균일하게 할당되고, 이들의 사용 (할당)은 제어기에서 최적화된다. 모든 레지스터는 C 버스로부터 로딩 될 수 있지만, 로든 "로드(load)"신호가 구동되는 것은 아니다. 가산기를 수반하는 모든 연산은 가산기가 통상의 리플 캐리를 가지도록 하는 두 사이클 동안에 걸쳐서 수행된다. 제166도, "데이타 경로의 사이클 동작"은 "A" 버스 레지스터로 다시 로딩되는 두 레지스터의 두 사이클 합에 대한 타이밍을 도시한다. 여러 플래그가 데이타경로 내에서 c코드(ccode) 생성을 위해 "ph0"된다. 같은 이유로, 데이타경로 도면의 구조는 다소 예외적이다. (A와 B 버스 위에 있는) 모든 레지스터에 대한 3상태는 셀에서 조합 경로를 제거하는 단일 블럭으로, 보다 양호하게 c코드를 생성하게 한다. 데이타경로로의 upi 액세스를 얻기 위해, 액세스 비트가 세팅되어야 하고, upi는 록 아웃(locked out)된다. upi 액세스는 판독 및 기록과는 다르다.
* 기록 : 액세스 비트가 세팅될 때, 로든 로드 신호가 디스에이블되고, 3바이트로 액세스된 기록 스트로브 세트 중 한 세트가 한 레지스터의 적당한 바이트로 구동된다. upi 데이타 버스는 데이타경로 (복사된 2-8-8 비트)를 따라 수직으로 통과하고, 18 비트 레지스터가 3개의 개별적인 바이트 기록으로서 기록된다.
* 판독 : 이는 A와 B 버스를 사용하여 달성된다. 다시 한번, 액세스 비트가 세팅되어야 한다. 어드레스된 레지스터는 A 또는 B 버스 상으로 구동되고, upi 바이트 선택은 관련된 버스로부터 바이트를 발췌하여 upi 버스 위에서 구동시킨다.
2중 사이클 데이타경로 동작은 그 값을 유지하기 위해 A와 B 버스를 필요로하고 upi 억세스가 이들을 폐기시킴에 따라, 임의의 데이타경로 동작의 시작 이전에 상태 머신을 제어함으로서만 액세스가 주어져야 한다.
어드레스 발생기 모두의 모든 데이타경로 레지스터는 키홀에 대해 상위 레벨어드레스 0x28(msb)와 0x29(isb)에서 그리고 데이타에 대해 0x2A에서 9 비트 폭의 키홀을 통해 어드레스된다. 키홀 어드레스가 테이블 C.11.2에 주어진다
주 :
1) 어드레스 발생기(dispaddr와 waddrgen)의 모든 어드레스 레지스터는 블럭된 어드레스를 포함한다. 픽셀 어드레스는 결코 사용되지 않고, 라인 어드레스를 포함하는 유일한 레지스터는 세개의 LINES_IN_LAST_ROW 레지스터이다.
2) 일부 레지스터가 어드레스 발생기 사이에서 복사되는데 즉, SUFFER_BASE0는 dispaddr과 waddrgen을 위한 어드레스 공간에서 생성한다. 이들은 모두 로드를 필요로 하는 두개의 개별적인 레지스터이다. 이는 디스플레이 윈도우잉 (디스플레이 기억장치의 일부만을 판독하는 것)을 허용하고, 3 성분 비디오 이외의 포맷인 디스플레이를 용이하게 한다.
C.6절 DRAM 인터페이스
C.6.1 개관
본 발명에서, 공간 디코더, 시간 디코더 및 비디오 포맷터 각각은 해당 칩을 위한 DRAM 인터페이스 블럭을 포함한다. 세개의 모든 디바이스에서, DRAM 인터페이스의 기능은 어드레스 발생기에 의해 공급된 블럭 어드레스를 통해 칩에서 외부의 DRAM으로 그리고 외부의 DRAM에서 칩으로 전달하는 것이다.
DRAM 인터페이스는 전형적으로 어드레스 발생기와 데이타가 전달되는 여러 블럭의 클럭에 대해 비동기인 클럭으로부터 동작한다. 그러나, 이 비동기 메커니즘은 거의 동일한 주파수로 플럭이 동작하기 때문에 용이하게 관리된다.
데이타는 흔히 64 바이트의 블럭 (한가지 예외 사항은 시간 디코더에 있는 예측 데이타)으로 DRAM 인터페이스와 칩의 나머지 부분 사이에서 전달된다. "스윙 버퍼"라고 하는 디바이스에 의해 전송이 일어난다. 이는 반드시 칩의 다른 부분이 다른 DRAM을 비우거나 또는 채우는 동안, DRAM 인터페이스가 한 RAM을 채우거나 또는 비우는 이중 버퍼로 된 컨피그래이션으로 동작되는 한쌍의 RAM이다. 어드레스 발생기로부터 어드레스를 운반하는 개별적인 버스는 각각의 스윙 버퍼와 연결된다.
각각의 칩은 네개의 스윙 버퍼를 갖지만, 이들 스윙 버퍼의 기능은 각각의 경우가 다르다. 공간 디코더에서, 한 개의 스윙 버퍼는 DRAM으로 코드화된 데이타를 전달하는 데 사용되고, 두 번째는 DRAM으로부터 코드화된 데이타를 판독하는 데 사용되고, 세 번째는 DRAM으로 토큰화된 데이타를 전달하는 데 사용되고, 네 번째는 DRAM으로부터 토큰화된 데이타를 판독하는 데 사용된다. 시간 디코더에서, 한 개의 스윙 버퍼는 DRAM에 인트라 또는 예측 화상 데이타를 기록하는 데 사용되고, 두 번째는 DRAM으로부터 인트라 또는 예측 화상 데이타를 판독하는 데 사용되고, 다른 두개는 전방 및 후방 예측 데이타를 판독하는 데 사용된다. 비디오 포맷터에서, 한개의 스윙 버퍼는 DRAM에 데이타를 전달하는 데 사용되고, 다른 세개는 DRAM으로부터 각각의 휘도(Y) 및 적색 및 청색 컬러 차 데이타 (각각 Cr과 Cb) 각각에 대해 한개씩의 데이타를 판독하는 데 사용된다.
범용 DRAM 인터페이스의 동작은 공간 디코더 절에 서술된다. 다음 절은 본발명에 따른 비디오 포맷터에 특정한 DRAM 인터페이스의 특징을 서술한다.
C.6.2 비디오 포맷터 DRAM 인터페이스
비디오 포맷터에서, 데이타가 외부 DRAM의 블럭에 기록되지만, 래스터 순서(raster order)로 판독된다. 기록은 공간 디코더에 대해 이미 서술된 바와 같이 정확하게 동일하지만, 판독은 약간 복잡하다.
비디오 포맷터 외부 DRAM의 데이타는 적어도 데이타의 8 블럭이 단일 페이지에 적합하도록 컨피그된다. 이들 8블럭은 연속하는 8개의 수평 블럭이다. 래스트화할 때, 8 바이트가 연속하는 8 개의 블럭 각각으로부터 판독되고, 스윙 버퍼(즉, 각각의 8 블럭에 동일한 행)에 기록된다.
상위 행을 고려 (및 바이트 폭 인터페이스를 가정)하여, y 어드레스 (3개의 MSB)에서와 같이, x 어드레스(3개의 LSB)는 제로로 세팅된다. 이때 각각의 첫 번째 8바이트가 판독됨에 따라 x어드레스가 증가된다. 이때, 어드레스 (6비트 및 이상 - LSB=비트 0)의 상부가 증가되고, x 어드레스 (3개의 LSB)가 제로로 리셋된다. 이 프로세스는 64 바이트가 판독될 때까지 반복된다. 외부 DRAM에서의 16 또는 32 비트 폭의 인터페이스에 의해, x 어드레스는 한개 대신에 2 또는 4개 만큼 증가된다.
비록 다수의 8 바이트가 항상 판독될 지라도, 어드레스 발생기는 64 바이트 미만이 판독 (이는 래스터 라인의 시작 또는 끝에서 필요할 수 있다)되어야하는 DRAM 인터페이스에 신호를 인가할 수 있다. 이는 시작 및 정지 값을 사용하여 수행된다. 시작 값은 어드레스의 상부 (비트 6 이상)에 사용되어 정지 값과 비교되고, 판독을 정지할 때를 가리키는 신호가 발생된다.
C.7절 수직 업-샘플링(upsampling)
C.7.1 소개
한 컬러 성분의 픽셀에 대한 래스터 스캔이 입력에 주어졌을 때, 본 발명에 따른 수직 업샘플러는 높이의 두배인 출력 스캔을 공급할 수 있다. 모드 선택으로, 다양한 방법으로 출력 픽셀 값이 형성될 수 있다.
C.7.2 포트
입력 2선식 인터페이스
* in_val id
* in_accept
* in_data [7:0]
* in_lastpel
출력 2선식 인터페이스
* out_valid
* out_accept
* out_data [9:0]
* out_last
mode[2:0]
nupdata[7:0], upaddr, upsel[3:0], uprstr, upwstr
ramtest
tdin, tdout, tpho, tckm, tcks
pho, phl, notrst0
C.7.3 모드
input bus mode[2:0]에 의해 선택된 바와 같이, 모드 레지스터 값 1과 7은 사용되지 않는다.
상기 각각의 모드에 있어서, 출력 픽셀은 바이트가 아니라 10 비트 값으로 표현된다. 이 블럭에서는 어떠한 반올림(rounding)이나 절단(truncation)도 발생하지 않는다. 필요하다면, 동일한 범위를 사용하기 위해 값이 좌로 쉬프팅된다.
C.7.3.1 모드 0: Fifo
블럭은 단순히 FIFO 기억장치로서 작용한다. 출력 픽셀의 수는 정확히 입력 픽셀의 수와 같다. 그 값은 2만큼 좌로 쉬프팅된다.
C.7.3.2 모드 2: 반복(repeat)
입력 스캔의 모든 라인이 반복되어 2배 높은 출력 스캔을 발생한다. 또한번 더, 픽셀 값은 2만큼 좌로 쉬프팅된다.
A -> ABACBDBCCDD
C.7.3.3 모드 4: 하위(lower)
각각의 입력 라인은 두개의 출력 라인을 발생한다. 이 "하위" 모드에서, 이들 두 개 라인의 두 번째 (디스플레이의 하위)는 입력 라인과 동일하다. 상기 쌍의 첫 번째는 현재의 입력 라인과 이전의 입력 라인의 평균이다. 이용 가능한 어떠한 입력 라인도 존재하지 않는 첫 번째 입력 라인의 경우, 입력 라인은 반복된다.
이는 크로마 샘플(chroma samples)이 하위 루마 샘플(lower luma samples)로코사이트(co-sited)되는 곳에서 선택된다.
A -> ABAC(A+B) /2DB(B+C) /2C (C+D) /2D
C.7.3.4 모드 5: 상위(upper)
"하위" 모드와 유사하지만, 이 경우 입력 라인은 출력쌍의 상위를 형성하고, 하위는 인접하는 입력 라인의 평균이다. 마지막 출력 라인은 마지막 입력 라인을 반복한 것이다.
이는 크로마 샘플(chroma samples)이 하위 루마샘플(lower luma samples)로 코사이트(co-sited)되는 곳에서 선택된다.
A -> AB(A+B)/2CBD(B+C)/2C(C+D)/2DD
C.7.3.5 모드 6: 중앙(central)
이 "중앙" 모드는 크로마 샘플이루마 샘플 사이의 중간에 놓이는 상황에 대응한다. 루마 픽셀로서 출력 크로마 픽셀을 코-사이트하기 위해, 가중 평균이 사용되어, 출력 라인을 형성한다.
A -> AB(3A+B) /4C(A+3B) /4D(3B+C) /4(B+3C) /4(3C+D) /4(C+3D) 4D
C.7.4 동작 방법
두개의 라인기억장치(linestores), 즉 임으로 지정된 "a"와 "b"가 존재한다.
"FIFO",와 "반복", 모드에서는, 라인기억장치 "a"만이 사용된다. 각각의 기억장치는 512픽셀까지의 라인 (수직 업-샘플링은 임의의 수평 업-샘플링 이전에 수행되어야 한다)을 수용할 수 있다. "FIFO" 모드에서 라인의 길이에는 제한이 없다.
입력 신호 in_lastpel과 in_lastline은 입력 라인의 끝과 화상의 끝을 가리키는 데 사용된다. In_lastpel에서, 이는 각각의 라인의 마지막 픽셀과 일치하는 하이(high)이어야 한다. In_lastline에서, 이는 화상의 마지막 라인의 마지막 픽셀과 일치하는 하이이어야 한다.
출력 신호 out_last는 각각의 출력 라인의 마지막 픽셀과 일치하는 하이이어야 한다.
"반복"모드에서, 각각의 라인이 기억장치 "a"에 기록된다. 다음에 라인은 두 번 판독된다. 두 번째 판독됨에 따라, 다음 라인이 기록되도록 시작될 수 있다.
"상위", "하위" 및 "중앙" 모두에서, 라인이 선택적으로 선택적으로 "a"와 "b"에 기록된다. 화상의 첫 번째 라인은 항상 기억장치 "a"에 기록된다. 각각의 기억장치를 위한 두개의 작은 상태 머신은 각각의 기억장치에 무엇이 존재하는 지와 어떤 출력 라인이 형성될 것인지를 추적한다. 이들 상태로부터 라인기억장치 RAM에 판독 및 기록 요청과, 다음 라인이 현재의 데이타를 오버라이트할 수 있는 때를 결정하는 신호를 발생한다.
레지스터 (lastaddr)는 in_lastpel이 하이일 때, 기록 어드레스를 기억함으로서, 출력 라인의 형성을 위한 라인의 길이를 공급한다.
C.7.5 UPI
이 블럭은 전형적인 방법으로 마이크로프롯서 인터페이스를 거쳐 액세스될 수 있는 512x8 비트 RAM 어레이를 구비한다. 마이크로프로세서 액세스를 갖는 어떠한 레지스터도 존재하지 않는다.
C.8절 수평 업-샘플러
C.8.1 개관
본 발명에서, 상위 레벨 레지스터는 각각의 컬러 성분에 대해 하나씩인 세개의 동일한 수평 업샘플러를 구비한다. 세개 모두는 독립적으로 제어되므로, 여기에서는 한개만 서술된 필요가 있다. 사용자의 관점에서 볼 때, 한 가지 차이점은 각각의 수평 업-샘플러가 서로 다른 메모리 맵의 서로 다른 세트의 어드레스로 맵핑된다는 것이다.
수평 업-샘플러는 합성 복사(combined replication)와 필터링 동작을 수행한다. 모두, 네가지 모드가 존재한다.
테이블 C.7.1 수평 업샘플러 모드
C.8.2 수평 업-샘플러의 사용
각각의 수평 업-샘플러에 대한 어드레스 맵은 12개의 13-비트 계수와 한 개의 2-비트 모드 레지스터에 대응하는 25 장소로 구성된다. 테이블 C.7.1에 표시된 바와 같이 모드 레지스터에 기록된 수가 동작 모드를 결정한다. 모드에 따라, 일부 또는 모든 계수 레지스터가 사용될 수 있다. 대응하는 FIR 필터가 이하에 도시된다.
동작 모드에 따라, 입력 xn는 1, 2, 또는 4 클럭 주기 동안 일정하게 유지된다. 각각의 모드로 프로그램되는 실제 계수는 다음과 같다.
테이블 C.7.2 모드 1의 계수
테이블 C.7.3 모드 2의 계수
테이블 C.7.4 모드 3의 계수
특정 모드에 사용되지 않는 계수는 해당 모드로 동작할 때 프로그램될 필요가 없다.
대칭 필터링을 달성하기 위해, 필터링 하기 전에 각각의 라인의 첫 번째 및 마지막 픽셀이 반복된다. 예를 들어, 2로 업-샘플링할 때, 각각의 라인의 첫번째 및 마지막 픽셀은 2배 보다는 4배 복사된다. 필터에 잔류하는 데이타가 각각의 라인의 끝에서 폐기되기 때문에, 픽셀 출력의 수는 항상 정확히 입력 스트림에서의 수의 1, 2 또는 4배이다.
계수의 값에 따라, 출력 샘플은 입력 샘플과 일치하거나 또는 입력 샘플로부터 쉬프팅되어 놓일 수 있다. 뒤따르는 값들은 몇몇 샘플 모드에서의 계수에 대한 일부 예시적인 값이다. "-"는 계수의 값이 "무관(don't care)"하다는 것을 나타낸다. 모든 값은 16진수이다.
테이블 C.7.5 샘플 계수
C.8.3 수평 업샘플러의 설명
수평 업샘플러의 데이타경로는 제168도에 도시된다.
동작은 x4 업샘플의 경우에 대해 개략적으로 서술된다. 또한, x2 업-샘플링 및 xl 필터링 (모드 2와 1)은 이것의 변질된(degenerate) 경우이고, 전 필터를 바이패싱하여 (모드 0), 예시된 바와 같이, 데이타가 최종적인 멀티플렉서를 거쳐 입력 래치에서 출력 래치로 직접 전달된다.
1) 유효 데이타가 입력 래치 ("L")에서 래치될 때, 이는 4 클럭 주기동안 유지 된다.
2) 계수 레지스터("COEFF"라고 명명된)는 두 세트로 이루어진 네개의 파이프라인 레지스터("PIPE"라고 명명됨)가 클럭됨과 동시에, 각각 교대로, 한 클럭 주기 동안 곱셈기 상에서 멀티플렉싱된다.(multiplexed). 이와 같이, 입력 데이타 xn 동안, 첫 번째 PIPE는 값 c00.xn, c01.xn, c02.xn, c03.xn을 채을 것이다.
3) 이와 유사하게, 두 번째 곱셈기는 교대로 자신의 계수만큼 xn을 곱하고,세 번째 곱셈기는 교대로 자신의 모든 계수로서 곱한다.
출력은 테이블 C.7.6에 도시된 형태의 것이라는 것을 알 수 있을 것이다.
테이블 C.7.6 모드 3의 출력 시퀀스
출력의 관점으로 볼 때, 각각의 클럭 주기가 개개의 픽셀을 발생한다. 각각 의 출력 픽셀이 12 입력 픽셀 (단지 세개의 서로 다른 값이 존재할 지라도)의 가중된 값에 의존하기 때문에, 이는 x4로 업-샘플링된 입력 픽셀에 대해 12 탭 필터를 구현한 것으로 생각될 수 있다.
x2 업-샘플링에 대해, 2 사이클 주기 입력 데이타가 단지 두 클럭 주기 동안만 유지된다는 것을 제외하고는 동작은 본질적으로 동일하다. 또한, 단지 두 개의 계수가 사용되고 "PIPE" 블럭이 도시된 멀티플렉서에 의해 단축된다. xl 필터링에 대해, 한 클럭 주기 동안만 입력이 유지된다. 예측된 바와 같이, 한개의 계수와 한개의 "PIPE" 스테이지가 사용된다.
이제부터 본 발명의 구현의 몇 가지 특징에 대해 논의하고자 한다.
1) 컬러 공간 변환기용으로 설계된 것과 같이 동일한 곱셈기가 사용될 수 있도록 데이타경로 폭과 계수 폭 (13 비트 2의 보수)가 선택되었다. 이들 폭은 수평 업샘플러공으로 보다 적합하다.
2) 계수를 곱셈기 위에서 멀티플렉싱하는 멀티플렉서는 UPI 리드백 (readback)과 공유된다. 결국 도면의 구조에 있어서, 몇 가지 복잡한 문제 (주로 CCODE 생성의 어려움때문에)가 있지만 실제 회로는 보다 더 작다.
3) 컬러 공간 변환기에서와 같이, 캐리-세이브 곱셈기가 사용되므로, 결과 끝단에서만 해석된다.(resolved).
입력에서와 같이, 전체 수평 업샘플러의 제어는 출력에서 데이타 양의 둘 또는 네 배를 발생할 수 있는 단일 2선식 인터페이스 스테이지로서 간주될 수 있다.
UPI를 통해 프로그래밍되는 모드는 프로그램 가능한 쉬프트 레지스터 (bob)의 길이를 결정한다. 선택된 모드는 클럭 주기 마다, 두 클럭 주기 마다 또는 네 클럭 주기마다 출력 펄스를 출력한다. 이는 또한 그 상태가 (2선식 인터페이스에 대해서) in_valid, out_accept 및 신호 "in_last"에 의해 결정되는 메인 상태 머신을 제어한다. 이 신호는 각각의 라인의 첫 번째 및 마지막 픽셀이 두번 복사되고, 라인 사이에서 파이프라인을 클리어링 다운(clearing down)하게 한다.(라인이 완료된 직후, 파이프라인은 부분적으로 처리된 중복 데이타를 포함한다).
C.9절 컬러 공간 변환기
C.9.1 개요
본 발명의 컬러 공간 변환기 (CSC)는 다음에 덧셈이 오는 입력하는 9-비트 데이타에 대해 3x3 매트릭스 곱셉을 수행한다.
여기서, x0-2는 입력 데이타이고, yO-2는 출력 데이타이고 cnm은 계수이다. 명칭이 도면에서의 신호 명에 대응하기 때문에, 약간은 일반적이지 않은매트릭스 계수의 명칭이 붙여졌다.
비록 한정된 세트의 변환기가 상위 레벨의 레지스터에 사용될 지라도 CSC가 다른 컬러 공간의 수 사이를 변환할 수 있다. 컬러 공간 변환의 설계는 다음과 같다.
여기서, R, G, B는 범위 (0. . 511)에 있고, 다른 모든 크기는 (32 . . 470) 범위에 있다. 상위 레벨의 레지스터 CSC가 Y, CR, CB이기 때문에, 이들 식의 세 번째 및 네 번째 만이 관련된다.
CSC 설계에 있어서, 9 비트 데이타에 대해서 모든 출력 값이 알고리즘의 완전한 부동 소수점 시뮬레이션으로서 얻어진 값의 ± 1 비트 내에 있도록 계수의 정확도가 선택되었다. (이는 달성할 수 있는 최상의 정확도이다.). 이는 cx0 내지 cx3에 대해 13-비트 2-보수 계수와 cx4에 대해 14 비트 2-보수 계수를 제공한다.
모든 설계 변환에 대한 계수는 이하 두개의 10진 및 18진수로 주어진다.
테이블 C.8.1 여러가지 변환에 대한 계수
이들 모든 수는 기본 식으로부터 계산된다.
Y = 0.299ER + 0.587EG + 0.0114EB
그리고 다음 컬러-차 식
CR = ER - Y
CB = EB - Y
R, G, B의 식은 이들 양의 완전한 스케일 범위를 고려한 후 이들로부터 유도된다.
C.9.2 컬러 공간 변환기의 사용
리셋시, c0l, c12, 및 c23은 1로 세팅되고, 다른 모든 계수는 0으로 세팅된다. 그래서, y0=x0, yl=xl 및 y2=x2이고, 모든 데이타는 변형되지 않고 전달된다.
컬러 공간 변환을 선택하기 위해, 단순히 적당한 계수 (예를 들어, 테이블 C.8.1로부터)를 어드레스 맵의 지정된 장소에 기록한다.
도면을 참조하면, x0 . . 2는 in_data0 . . 2에 대응하고, y0 . . 2는 out_data0 . . 2에 대응한다. 사용자는 CSC로의 입력 데이타가 4:4:4로 업샘플링되어야 한다는 것을 알고 있을 것이다. 만약 이와 같은 경우가 아니면, 컬러 공간 변환은 의미가 없을 뿐아니라 칩이 잠길(lock) 것이다.
각각의 출력은 계수와 입력의 조합에 상수를 더하도록 (또는 빼도록) 허락된어떤 것으로부터도 형성될 수 있다. 그래서, 임의의 소정의 컬러 공간 변환을 위해, 변형 매트릭스의 행을 스왑함으로써 (즉, 계수가 기록되는 어드레스) 출력의 순서가 바뀌어야 한다.
CSC는 테이블 C.8.1의 모든 변형에 대해 유효하도록 되어 있다. 만약, 다른 변형이 사용되면 사용자는 다음을 알고 있어야만 한다.
1) 만약 계산에서 임의의 중간 결과가 정확도의 10 비트 이상 (부호 비트를제외한)을 필요로 하면, 하드웨어가 작동하지 않을 것이다.
2) CSC의 출력은 0과 511까지 포화된다. 즉, 0 미만의 임의의 수는 0으로 교체되고, 511 이상의 임의의 수는 511로 교체된다. 포화 논리의 구현은, 결과가 511 보다 약간 크거나 0 보다 약간 작을 것이라고 가정한다. 만약 CSC가 정확하지 않게 프로그램되면, 이때 공통적으로 발생하는 현상은 출력이 모든 (또는 대부분) 간에 포화하도록 나타날 것이라는 것이다.
C.9.3 CSC의 설명
CSC의 포화는 제169도에 도시되는데, 여기서 공간 상의 제한으로 인해 세개의 "성분"중 단지 두개의 성분만이 도시되었다. 도면에서, "레지스터" 또는 "R"은 마스터-슬레이브 레지스터를 의미하고, "래치" 또는 "L"은 투명 래치를 의미한다.
모든 계수는 도면에 명시적으로 도시되지 않은 판독-기록 UPI 레지스터로 로딩된다. 동작을 이해하기 위해, 가장 좌측 "성분" (out_data0를 생성하는)을 참조하여 다음 시퀀스를 고려한다.
1) 데이타는 입력 x0-2 (in_data0-2)에 도착한다. 이는 입력 컬러-공간에서 한 개의 픽셀을 표현한다. 이는 래치된다.
2) x0는 c0l으로 곱해져 제1 파이프라인 레지스터로 래치된다. xl과 x2는 한 개의 레지스터로 이동한다.
3) xl은 c02로 곱해지고, (xl,c0l)에 더해져, 다음 파이프라인 레지스터로 래치된다. x2는 한 개의 레지스터로 이동한다.
4) x2는 c03으로 곱해지고, (3)의 결과에 더해져 (xl.cOl + x2.c02 +x3.c03)를 만든다. 그 결과가 다음 파이프라인 레지스터로 래치된다.
5) (4)의 결과가 c04에 더해진다. 데이타가 곱셈기를 통해 캐리-세이브 포맷으로 유지되기 때문에, 이 가산기는 또한 일련의 곱셈기로부터의 데이타를 해석(resolve)하는 데 사용된다. 그 결과가 다음 파이프라인 레지스터에서 래치된다.
6) 마지막 연산은 데이타를 포화(saturate)하는 것이다. 이것을 달성하기 위해 해석하는 가산기에서 부분 결과가 포화 블럭으로 전달된다.
본 절의 시작에서 매트릭스 방정식에 명시된 바와 같이 결과가 y0이라는 것 을 알 수 있을 것이다. 이와 유사하게, yl과 y2도 같은 방법으로 형성된다.
피승수로서 계수를 그리고 승수로서 데이타를 갖는 세 개의 곱셈기가 사용된다. 이것은 부분 결과가 데이타경로 밑으로 흐르고 동일한 입력 데이타가 각각의 출력에 대해 하나씩인, 세 개의 평행하고 동일한 데이타경로 양단으로 라우팅되는 효율적인 레이아웃의 달성을 가능케 한다.
C.9.2절에 서술된 리셋 상태를 달성하기 위해, 세개의 "성분" 각각은 서로 다른 방법으로 리셋되어야 한다. 세 세트의 도면과 세 개의 약간 다른 레이아웃을 방지하기 위해, 이는 상위 레벨에서 높게 또는 낮게 고정된 UPI 레지스터에 대해 입력을 가짐으로서 달성된다.
CSC는 이것과 연관된 제어를 거의 가지고 있지 않다 그럼에도 불구하고, 각각의 파이프라인 스테이지는 2선식 인터페이스 스테이지이므로, 이들의 연관된 제어 (in_accept = out_accept_r + lin_valid_r)를 갖는 일련의 유효 및 수용 래치가 존재한다. 그래서, CSC는 정체될 때 데이타의 10 레벨을 유지할 수 있는 5-스테이지 깊이의 2선식 인터페이스이다.
출력은 출력 파이프의 다음 기능이 서로 다른 클럭 발생기를 런 오프(runs off)하기 때문에, CSC의 출력은 재동기화 래치를 포함한다.
C.10절 출력 제어기
C.10.1 소개
본 발명에 따른 출력 제어기는 다음과 같은 기능을 처리한다.
* 세 가지 모드중 한 가지 모드로 데이타를 공급한다.
* 24-비트 4:4:4
* 16-비트 4:2:2
* 8-비트 4:2:2
* vsync와 hsync 펄스와 프로그래밍된 타이밍 레지스터로서 정의된 비디오디스플레이 윈도우에 데이타를 정렬시킨다.
* 만약 필요하다면 비디오 윈도우 근처에 보더(border)를 더한다.
C.10.2 포트
입력 2선식 인터페이스
* in_val i d
* in_accept
* in_data[23:0]
출력 2선식 인터페이스
*out_va1id
*out_accept
*out_data[23:0]
*out_active
*out_window
*out_comp[1:0]
*n_vsync, in_hsync
nupdata[7:0], upaddr[4:0], upsel, rstr, wstr
tdin, tdout, tpho, tckm, tcks chip test
ph0, pho, notrst0, notrst1
C.10.3 출력 모드
출력의 포맷은 opmode 레지스터에 기록함으로서 선택된다.
C.10.3.1 모드 0
이 모드는 24-비트 4:4:4 RGB 또는 YCrCb이다. 입력 데이타는 출력으로 직접 전달된다.
C.10.3.2 모드 1과 2
이들 모드는 4:2:2 YCrCb를 제시한다. in_data[23:16]이 Y라고 가정하면, in_data[15:8]은 Cr이고, in_data[7:0]은 Cb이다.
C.10.3.2.1 모드 1
16-비트 YCrCb에서, Y는 out_data[15:8]로 제시된다. Cr과 Cb는 out_data[7:0]에서 Cb가 먼저 시간 멀티플렉싱된다. Out_data[23:16]는 사용되지 않는다.
C.10.3.2.2 모드 2
8-비트 YCrCb에서, Y, Cr 및 Cb는 Cb,Y,Cr,Y 순서로 out_data[7:0]으로 시간 멀티플렉싱된다. Out_dada[23:8]은 사용되지 않는다.
C.10.3.3 출력 타이밍
다음 레지스터는 비디오 디스플레이 윈도우에 데이타를 위치시키는데 사용된다.
* vdelay - 비디오 또는 보더의 첫 번째 라인 이전에 vsync 펄스를 뒤따르는 hsync 펄스의 수
* hdelay - async와 비디오 또는 보더의 첫 번째 픽셀 간의 클럭 사이클의 수
* 높이 - 라인에 있어서, 비디오 윈도우의 높이
* 폭 - 픽셀에 있어서, 비디오 윈도우의 폭
* 북쪽, 남쪽 - 라인에 있어서, 비디오 윈도우의 위와 밑에 있는 보더 각각 의 높이
* 서쪽, 동쪽 - 펠에 있어서, 비디오 윈도우의 좌측과 우측에 있는 보더 각 각의 높이(펠)
최소 vdelay는 제로이다. 첫 번째 hsync는 첫 번째의 활성 라인이다.
hdelay로 프로그래밍될 수 있는 최소 값은 2이다. 그러나, in_hsync에서 첫 번째 활성 출력 픽셀까지의 실제 지연은 hdelay + 1 사이클이다.
임의의 보더 에지는 값 제로를 가질 수 있다. 레지스터 border_r, border_g및 border_b에 기록함으로써 보더의 칼라가 선택된다. 보더 외부 영역의 컬러는 레지스터 blank_r, blankug 및 blank_b에 기록함으로써 선택된다. 출력 모드 1과 2에서 수행된 멀티플렉싱은 또한 보더 및 블랭크 성분에 영향을 미칠 것이다. 즉, 이들 레지스터의 값은 in_data(23.16), in_data(15:8) 및 in_data[7:0]에 해당한다.
C.10.4 출력 플래그
* out_active는 출력 데이타가 활성인 윈도우의 일부, 즉 비디오 데이타 또는 보더의 일부라는 것을 가리킨다.
* out_window는 출력 데이타가 비디오 윈도우의 일부라는 것을 가리킨다.
* out_comp[1:0]는 컬러 성분이 출력 모드 1과 2로 out_data[7:0]에 제시된다는 것을 가리킨다. 모드 1에서 0=Cb, 1=Cr이다. 모드 2에서 0=Y, 1=Cr, 2=Cb이다.
C.10.5 2선식 모드
본 발명의 2선식 모드는 2선식 레지스터에 1을 기록함으로서 선택된다. 이 는 다음 리셋으로 선택되지 않는다. 2선식 모드에서, 출력 타이밍 레지스터와 sync 신호는 무시되고, 블럭을 통하는 데이타의 흐름이 out_accept로서 제어된다.
정상 동작에서 out_accept는 높게 고정되어야 한다.
C.10.6 스누퍼
출력 플래그으로의 액세스를 포함하는 블럭의 출력에는 슈퍼-스누퍼가 존재
한다.
C.10.7 동작 방법
두개의 동일한 다운-카운터(down-counters)가 디스플레이의 현재 위치를 추적한다. "Vcount"는 hsyncs 상에서 감소하고, vsync 상에서 또는 그 종단 카운트에서 적당한 타이밍 레지스터로부터 로딩한다. 출력 모드 2에서, 한 픽젤은 두 개의 클럭 사이클에 해당한다는 것을 알아야 한다.
제.11절 클럭 분배기
C.11.1 개요
본 발명에서 상위 레벨의 레지스터는 한 클럭 분배기가 PICTURE_CLK를 발생하고, 또 하나의 클럭 분배기가 AUDI0_CLK를 발생하는 두개의 동일한 클럭 분배기를 포함한다. 이 클럭 분배기는 동일하고 독립적으로 제어된다. 그래서, 한 개의 클럭 분배기만이 서술될 것이다. 사용자의 관점으로 볼 때, 한 가지 차이점은 각각의 클럭 분배기의 제수(divisor) 레지스터가 메모리 맵에서 서로 다른 세트의 어드레스로 맵핑된다는 것이다.
클럭 분배기의 기능은 우수 표시-공간 비율(even-mark-space ratio)에 대한 구비조건이 필요없는 4X sysclk로 분배된 클럭 주파수를 제공하는 것이다.
제수는 범위 -0 내지 - 16,000,000 범위에 놓일 필요가 있고, 따라서 이는 최소 제수가 16이어야 하는 제한이 있는 24 비트를 사용하여 표현될 수 있다. 그 이유는 클럭 분배기가 제수/2를 사용함으로써 (한개의 sysclk 사이클 내에서) 동일한 표시-공간 비율을 개략적으로 표현할 것이기 때문이다. 이용 가능한 최대 클럭 주파수가 sysclk이기 때문에, 이용 가능한 최대 분배 주파수는 sysclk/2이다. 또한, 네 개의 카운터가 직렬(cascade)로 사용되기 때문에 제수/2는 결코 8 미만이어서는 안되고, 그 밖의 분배된 클럭 출력은 양의 전기 레일(positive power rail)로 구동되어야 한다.
C.11.2 클럭 분배기의 사용
각각의 클럭 분배기에 대한 어드레스 맵은 8-비트 젯수 레지스터와 한개의 1-비트 액세스 레지스터에 대응하는 4개의 장소로 구성된다. 클럭 분배기는 비활성으로 전원이 공급되고, 그 제수 레지스터(devisor register)로의 액세스 완료에 의해 구동된다.
제수 레지스터는 테이블 C.10.1의 어드레스 맵에 따라 임의의 순서로 기록될 수 있다. 클럭 분배기는 이 액세스 비트에서 0에서 1로의 전이를 검출함으로서 구동된다. 전이가 검출되는 최초에, 클럭 분배기가 리셋으로부터 벗어나 분배된 클럭을 발생할 것이다. 연속하는 전이 (제수가 또한 변경되었다고 가정)는 단지 클럭 분배기로 하여금 자신의 새로운 주파수를 "급격히(on-the-fly)" 록(lock) 할 것이다. 일단 구동되면, 칩 RESET 이외에는 클럭 분배기를 중지시킬 방법이 없다.
테이블 C.10.1 클럭 분배기 레지스터
16 내지 16,777,216 범위에서 임의의 제수 값이 사용될 수 있다.
C.11.3 클럭 분배기의 설명
클럭 분배기는, 한개의 카운터가 캐리하도록 직렬로 연결된(cascaded) 네개의 22 비트 카운터로서 구현된다. 이는 다음 카운터를 교대로 구동시킬 것이다.
카운터는 캐러하기 전에 제수/4의 값을 카운트 다운(count down)하고, 그래서 각각의 카운터는 그것을 교대로 취하여, 분배된 클럭 주파수의 펄스를 발생할 것이다.
캐리한 후, 카운터가 젯수/8로 다시 로딩되며, 이것은 카운팅 다운되어 거의 동일한 표시-공간 비율로 분배된 클럭(mark-space ratio divided clock)을 발생한다. 각각의 카운터가 이전 카운터로서 구동될 때 제수 레지스터로부터 다시 로딩됨에 따라, 이는 분배된 클럭 주파수를 인에이블 시켜 제수의 내용을 단순히 변경시킴으로서 급격히 변하게 된다.
각각의 카운터는 정확히 카운터 간의 클럭 스큐(clock skew)를 제어하고 각 각의 카운터가 서로 다른 세트의 클럭으로서 클럭될 수 있도록 자신의 독립적인 클럭 발생기에 의해 클럭된다.
상태 머신은 제수/4 및 제수/8 값의 발생을 제어하고, 또한 PLL에서 클럭 발생기로 정확한 소스 클럭을 멀티플렉싱한다. 이 카운터는 제수의 값에 따라 서로 다른 클럭으로서 클럭된다. 그 이유는, PLL로부터 공급된 클럭의 서로 다른 조합을 사용하여 그 에지가 놓이는 분배된 클럭을 서로 다른 제수 값이 생성할 것이기 때문이다.
C.11.4 클럭 분배기의 테스팅
클럭 분배기는 CHIPTEST 칩에 전원을 공급함으로서 테스팅될 수 있다. 이것은 PLL으로서 발생된 클럭과는 반대로 클럭 분배기의 클럭된 모든 논리를 sysclk으로서 강제로 클럭되게 하는 효과가 있을 것이다.
클럭 분배기는 완전한 스캔으로 설계되었고, 따라서 결국 칩이 상기와 같이 파워 업(power up)되는 한, 규격 JTAG 액세스를 사용하여 테스팅될 수 있다.
CHIPTEST가 하이로 유지되는 반면, 디바이스가 정상 동작으로 실행한다면 클럭 분배기의 기능이 보장될 수 없다.
C.12절 어드레스 맵
C.12.1 상위 레벨 어드레스 맵
주 : -
1) 테이블 C.11.1에 서술된 것과 같이 상위 레벨의 어드레스 맵에 대한 레지스터는 설계하는 동안 사용된 명칭이다. 이들은 반드시 데이타 용지(data sheet) 상에 나타나야 하는 명칭은 아니다.
2) 이것은 완전한 어드레스 맵이기 때문에, 여기에 열거된 많은 장소가 테스 트 전용의 장소를 포함한다.
테이블 C.11.1 상위 레벨의 레지스터 A 상위 레벨의 어드레스 맵
C.12.1 어드레스 발생기 키홀
어드레스 발생기 키홀 테이블에서 :
1) 어드레스 발생기 키홀에 있는 모든 레지스터는 그 폭에 관계없이 4바이트의 어드레스 공간을 점유한다. 빠져 있는 어드레스 (0x0, 0x04 등)는 항상 제로로 다시 판독될 것이다.
2) 관련된 블럭(dispaddr 또는 waddrgen)의 액세스 비트는 이 키홀을 억세스 하기 전에 세팅되어야 한다.
테이블 C.11.2 상위 레벨의 레지스터 A 어드레스 발생기 키홀
테이블 C.11.3 H-업샘플러 및 C공간 키홀 어드레스 맵
C.13절 화상 크기 변수
C.13.1 소개
다음의 코드 프래그먼드(code fragments)는 기록 어드레스 발생기로부터의 화상 크기 인터럽트에 응답하는 데 필요한 프로세싱을 도시한다. 화상 크기 변수는 (각각의 성분에 대해) HORIZONTAL_MBS, VERTICAL_MBS, 및 DEFN _ SAMPLING 토큰을 전송함으로서 "급격히" 변하게 되어, 결국 기록 어드레스 발생기 인터럽트가 발생하게 된다. 이들 토큰은 임의의 순서로 도착할 수 있어 일반적으로 어떠한 토큰도 모든 화상 크기 변수를 다시 계산하여야만 할 것이다. 그러나 셋업시, 이는 어떠한 계산을 수행하기 전에 모든 이벤트의 도착을 검출하기에 효과적이다.
셋업시, 특정 값을 화상 크기 변수 레지스터에 기록할 수 있으므로, 토큰에 응답하는 인터럽트 프로세싱에 의존하지 않는다. 이와 같은 이유로, 또한 SIF 화상에 대해 적당한 레지스터 값이 주어진다.
C.13.2 화상 크기 변수를 위한 인터럽트 프로세싱
5개의 화상 크기 이벤트가 존재하고, 각각의 주요 응답은 이하와 같다.
또한, 일괄성 있는 화상 크기 변수를 유지하기 위해 다음과 같은 계산이 필요하다:
비록 화상 크기 인터럽트에 응답하여 dispaddr 레지스터 값 (디스플레이 윈도우 크기와 같은)을 변경시키는 것은 꼭 필요하지 않지만, 응용 조건에 따르는 것이 바람직하다.
C.13.3 SIF 화상에 대한 레지스터 값
SIF, 4:2:0 스트림에 대한 상기 인터럽트 프로세싱 후에 모든 화상 크기 레지스터에 포함된 값은 다음과 같을 것이다.
C.13.3.1 1차 값(primary values)
만약 이들 값이 셋업시 명시적으로 기록되면, 대부분의 장소의 멀티-비트 특성을 고려하여야만 한다.
본 응용은 본 발명이 작동하도록 의도된 환경의 상세한 구조 및 동작을 인식할 수 있토록 당해 기술 분야에서 통상의 지식을 가진자에게 자명한 부수적인 도면이 포함되었다는 것에 유의하여야 한다.
상술한 본 발명의 시스템은 입력, 출력, 및 상기 입력과 출력 간의 복수의 프로세싱 스테이지를 갖는 향상된 시스템의 필요성에 대한 오랜 숙원을 충족시키는데, 상기 복수의 프로세싱 스테이지는 파이프라인을 따른 토큰과, 파이프라인의 모든 프로세싱 스테이지와 인터페이싱하고(interfacing) 프로세싱 스테이지간에 제어 데이타 및 결합된 제어-데이타 함수를 위해 파이프라인의 선택된 스테이지와 상호작용하기(interacting) 위해 범용 적응 유닛 형태의 제어 및 DATA 토큰을 운반하기 위한 2선식 인터페이스로서 상호접속되므로, 파이프라인의 프로세싱 스테이지는 컨피그레이션 및 프로세싱에 있어서의 유연성이 향상된다. 본 발명에 따르면, 상기 프로세싱 스테이지는 적어도 한 개의 토큰의 인식에 응답하여 컨피그될 수 있다. 프로세싱 스테이지 중의 하나는 입력을 수신하여 토큰을 발생하고/하거나 변환하는 시작 코드 검출기일 수 있다.
또한, 본 발명은 허프만 디코더, 인덱스 투 데이타 및 산술 논리 유닛과 다수의 상이한 화상 압축/압축 해제 규격마다 분리 저장되고 토큰에 의해 선택가능한 프로그램을 갖는 마이크로코드 ROM을 가짐으로써, 다수의 상이한 화상 규격에 대한 처리를 용이하게 하는 개선된 파이프라인 시스템에 관한 것이다.
본 발명의 시스템은 파이프라인 프로세싱 머신으로서 정렬된 2선식 인터페이스에 의해 복수의 스테이지가 상호접속된 다중-규격 비디오 해제 장치를 구비한다.
제어 토큰 및 DATA 토큰은 토큰 포맷으로 제어 및 데이타 모두를 운반하기 위한 단일 2선식 인터페이스를 통해 전달한다. 토큰 디코드 회로는 해당 스테이지과 유관한 제어 토큰으로서 임의의 토큰을 인식하고 파이프라인을 따라 인식되지 않은 제어 토큰을 전달하기 위해 임의의 스테이지에 배치된다. 리컨피그레이션 프로세싱 회로는 선택된 스테이지에 배치되고, 식별된 DATA 토큰을 처리하기 위해 이와 같은 스테이지를 리컨피그하기 위해 인식된 제어 토큰에 응답한다. 이 시스템을 구현하기 위한 다양한 지원 서브시스템 회로 및 프로세싱 기술이 공개된다.
상기 설명으로부터, 비록 본 발명의 특정 실시예가 서술되고 예시되었지만, 본 발명의 정신 및 영역을 벗어나지 않고 여러가지로 변형될 수 있다는 것을 알 수 있다. 따라서, 본 발명이 첨부된 특허 청구의 범위에 의해 한정되는 것을 제외하고는 한정되도록 의도되지 않았다.

Claims (10)

  1. 입력, 출력 및 상기 입력과 출력 사이에 적어도 하나의 프로세싱 스테이지(processing stage)를 포함하여 다수의 제어 및/또는 데이타 기능을 수행하는 시스템에 있어서, 상기 프로세싱 스테이지는 범용 적응 유닛(universal adaptation unit)의 형태를 가지는 적어도 하나의 토큰의 인식(recognition of at least one token)에 응답하여 상기 다수의 제어 및/또는데이타 기능 중 하나의 기능을 설정하도록 컨피그 가능(configurable)하며, 상기 토큰은 상기 프로세싱 스테이지를 리컨피그 하기 위하여 상기 프로세싱 컨피그 스테이지와 상호작용( interact )하여, 상기 프로세싱 스테이지의 컨피그레이션(configuration) 및 프로세싱의 유연성을 향상시키는 시스템.
  2. 2선식 인터페이스 프로세싱 버스(two-wire interface bus)에 의해 상호접속된(interconnected) 다수의 프로세싱 스테이지를 머신(pipeline processing machine)에 있어서, 상기 2선식 인터페이스를 통과하는 제어 토큰 및 데이타 토큰, 및 상기 프로세싱 스테이지 중의 어느 특정 스테이지에 위치하여 상기 토큰들 인식하고 다른 제어 중 특정 토큰을 상기 특정 스테이지에 관련된 제어 토큰으로서 토큰을 파이프라인을 따라 통과시키는 토큰 디코드 회로를 포함하는 것을 특징으로 하는 파이프라인 프로세싱 머신.
  3. 적어도 일부가 2선식 인터페이스를 채용하고 있는 복수개의 프로세싱 스테이지를 가지며, 상기 2선식 인터페이스를 통과하는(pass over) 제어 토큰 및 데이타 토큰을 더 가지는 리컨피그 가능한(reconfigurable) 프로세싱 시스템에 있어서, 상기 2선식 인터페이스에 의해 전달된 상기 토큰에 응답하여, 토큰의 특징(nature)을 나타내는 출력을 생성하기 위해 상기 리컨피그 가능한 프로세싱 시스템에 관련된 상기 토큰 시스템 중 특정 토큰 시스템을 인식하는 토큰 디코드 회로, 상기 토큰 회로의 출력에 응답하여 프로세싱 스테이지 리컨피그레이션(reconfiguration)을 용이 하게위한 스테이지(action identification stage), 및 상기 액션 식별 스테이지에 응답하여 상기 2선식 인터페이스를 거쳐 수신된 데이타 토큰을 처리하기 위해 리컨피그되는 적어도 하나의 프로세싱 스테이지를 더 포함하는 것을 특징으로 하는 리컨피그 가능한 프로세싱 시스템.
  4. 허프만 디코더(huffman decoder), 인덱스 투 데이타(index to data) 및 산술 논리 유닛을 갖는 비디오 데이타용 공간 디코더 시스템(spatial decodersystem)에 있어서, 복수개의 상이한 화상 압축/복원 규격(a plurality of different picture compression/decompression standards) 각각에 대해 개별적으로 저장된 프로그램(separate stored Programs)을 가지는 마이크로코드(microcode) ROM을 포함하고, 상기 프로그램들은 토큰의 형태로 인터페이싱 적응 유닛에 의해 선택가능하여, 복수개의 화상 규격에 대한 프로세싱이 용이하게 되는 것을 특징으로 하는 공간 디코더 시스템.
  5. 다수의 프로세싱 스테이지를 갖는 디지탈 화상 정보 처리 시스템(digital picture information processing system)에 있어서, 다수의 상이한 화상 압축/복원 규격에 따라 데이타를 처리하도록 상기 시스템을 선택적으로 컨피그하는 수단을 포함하고, 상기 수단은 상기 다수의 프로세싱 스테이지 중의 하나 이상의 스테이지를 선택적으로 컨피그하기 위한 제어 토큰을 포함하고, 상기 제어 토큰은 상기 다수의 상이한 화상 압축/복원 규격 중 하나를 선택하도록 하는 정보를 포함하는 것을 특징으로 하는 디지탈 화상 정보 처리 시스템.
  6. 다수의 프로세싱 스테이지를 갖는 시스템에 있어서, 상기 프로세싱 스테이지 사이에서 제어 및/또는 데이타 기능을 위하여, 데이타 유통 경로를 따라 상기 스테이지 중의 하나로부터 후속하는 프로세싱 스테이지로 전달되는 대화형 인터페이싱 토큰(interactive interfacing token)의 형태인 범용 적응 유닛을 포함하여, 상기 토큰이 하나의 프로세싱 스테이지로부터 다음 프로세싱 스테이지로 전달될 때에 상기 시스템의 프로세싱 스테이지들이 선택적으로 리컨피그 되는 것을 특징으로 하는 시스템.
  7. 입력, 출력 및 상기 입력과 상기 출력 사이에 다수의 프로세싱 스테이지를 갖는 시스템에 있어서, 상기 프로세싱 스테이지 사이에서 제어 및/또는 데이타 기능을 위해, 범용 적응 유닛을 정의하는 대화형 변형 인터페이싱 토큰(interactive metamorphic interfacing token)을 포함하며, 상기 대화형 토큰이 상기 프로세싱 스테이지와 상호작용하고 하나의 프로세싱 스테이지로부터 후속 프로세싱 스테이지로 전달되어 각각의 프로세싱 스테이지에 특정 기능을 부여하여, 다양한 태스크(task)의 수행에 있어서 상기 프로세싱 스테이지에 향상된 유연성을 제공하는 것을 특징으로 하는 시스템.
  8. 허프만 디코더, 인덱스 투 데이타 및 산술 논리 유닛을 갖는 비디오 데이타용 공간 디코더 시스템에 있어서, 송신기, 수신기, 및 상기 송신기와 상기 수신기에 접속된 클럭(clock)을 포함하며, 데이타에 대한 직렬 프로세싱 및 제어에 대한 병렬 프로세싱을 가능하게 하며, 프로세싱 스테이지를 상호접속하는 2선식 인터페이스 -상기 데이타는 상기 송신기가 준비되어 있고 상기 수신기가 준비되어 있는 경우에만 상기 클럭의 변화와 동시에 상기 송신기로부터 상기 수신기로 전송됨-, 토큰의 형태로 인터페이싱 적응 유닛에 의해 선택 가능하고 복수개의 상이한 화상 압축/복원 규격 각각에 대해 개별적으로 저장되는 프로그램을 갖는 마이크로코드 ROM, 및 토큰을 포맷팅 하여 복수개의 화상 규격에 대한 프로세싱이 용이하게 하고 데이타 토큰이 생성되도록하는 토큰 포맷터(token formatter)를 포함하는 것을 특징으로 하는 공간 디코더 시스템.
  9. 제8항에 있어서, 상기 2선식 인터페이스는 상기 스테이지에 저장된 데이타가 유효할 때 제1 상태의 검증 신호(validation signal) 그리고 상기 스테이지에 저장된 데이타가 무효일 때 제2 상태의 검증 신호를 생성하기 위하여 상기 송신기 및 상기 수신기 중의 적어도 하나 내에 있으며, 상기 검증 신호를 저장하기 위한 적어도 하나의 기억 장치를 포항하는 전기적 검증 회로(electrical validation circuitry), 상기 송신기에 저장된 데이타를 로딩할 수 있는 상기 수신기의 능력을 나타내는 수용 신호를 전달하는, 상기 송신기 및 상기 수신기 사이에 접속된 수용 신호기 (acceptance signal), 및 상기 기억 장치에 접속되어 상기 저장 장치로의 데이타 및 유효 신호의 로딩을 가능하게 하는 이네이블링 신호(enabling signal)를 생성하기 위한 이네이블링 회로(enabling circuitry)를 더 포함하며, 상기 기억 장치는 주 데이타 기억 장치 및 보조 데이타 기억 장치를 포함하며, 상기 데이타는 상기 각각의 주 데이타 기억 장치로, 상기 검증 신호는 각각의 보조 검증 기억 장치로 동시에 로딩되며, 상기 수용 신호가 이네이블링 상태를 나타내는 경우 데이타는 상기 각각의 데이타 기억 장치로 로딩되고, 상기 수신기의 상기 데이타 기억 장치와 연관된 상기 수용 신호가 상기 이네이블링 상태에 있는 경우 또는 상기 수신기의 상기 데이타 기억 장치 내에 있는 상기 데이타가 무효인 경우에만 상기 수용 신호가 상기 이네이블링 상태를 나타내는 것을 특징으로 하는 시스템.
  10. 제8항에 있어서, 상기 비디오 데이타는 MPEG1 및 MPEG2 인코딩된 데이타를 포함하는 시스템.
KR1019950006172A 1994-03-24 1995-03-23 리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템 KR100291532B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
GB9405914.4 1994-03-24
GB9405914A GB9405914D0 (en) 1994-03-24 1994-03-24 Video decompression
GB9504047A GB2288521B (en) 1994-03-24 1995-02-28 Reconfigurable process stage
GB9504047.3 1995-02-28

Publications (2)

Publication Number Publication Date
KR950033896A KR950033896A (ko) 1995-12-26
KR100291532B1 true KR100291532B1 (ko) 2001-06-01

Family

ID=26304581

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019950006172A KR100291532B1 (ko) 1994-03-24 1995-03-23 리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템

Country Status (5)

Country Link
JP (4) JP3302527B2 (ko)
KR (1) KR100291532B1 (ko)
CN (2) CN1137212A (ko)
CA (3) CA2145219C (ko)
GB (1) GB2288521B (ko)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
FR2794601B1 (fr) * 1999-06-02 2001-07-27 Dassault Automatismes Installation de communication pour une reception collective d'informations, notamment d'images de television numerique et/ou de donnees multimedia
EP1148727A1 (en) * 2000-04-05 2001-10-24 THOMSON multimedia Method and device for decoding a digital video stream in a digital video system using dummy header insertion
KR100354768B1 (ko) 2000-07-06 2002-10-05 삼성전자 주식회사 영상 코덱 시스템, 그 시스템과 외부 호스트 시스템과의데이터 처리방법 및 그 시스템에서의 인코딩/디코딩제어방법
US8284844B2 (en) 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
KR100722428B1 (ko) * 2005-02-07 2007-05-29 재단법인서울대학교산학협력재단 리소스 공유 및 파이프 라이닝 구성을 갖는 재구성가능배열구조
US7873105B2 (en) 2005-04-01 2011-01-18 Broadcom Corporation Hardware implementation of optimized single inverse quantization engine for a plurality of standards
KR100711088B1 (ko) * 2005-04-13 2007-04-24 광주과학기술원 동화상 인코더를 위한 정수 변환 장치
KR100718135B1 (ko) 2005-08-24 2007-05-14 삼성전자주식회사 멀티 포맷 코덱을 위한 영상 예측 장치 및 방법과 이를이용한 영상 부호화/복호화 장치 및 방법
KR101354659B1 (ko) * 2006-11-08 2014-01-28 삼성전자주식회사 멀티 코덱을 지원하는 움직임 보상 방법 및 장치
JP5698428B2 (ja) * 2006-11-08 2015-04-08 三星電子株式会社Samsung Electronics Co.,Ltd. 動き補償方法、記録媒体及び動き補償装置
KR101553648B1 (ko) 2009-02-13 2015-09-17 삼성전자 주식회사 재구성 가능한 구조의 프로세서
KR101532821B1 (ko) * 2010-04-02 2015-06-30 후지쯔 가부시끼가이샤 Occ 생성을 위한 장치 및 방법과 occ 매핑을 위한 장치 및 방법
US8413166B2 (en) * 2011-08-18 2013-04-02 International Business Machines Corporation Multithreaded physics engine with impulse propagation
US10219006B2 (en) * 2013-01-04 2019-02-26 Sony Corporation JCTVC-L0226: VPS and VPS_extension updates
US9395990B2 (en) * 2013-06-28 2016-07-19 Intel Corporation Mode dependent partial width load to wider register processors, methods, and systems
JP6223323B2 (ja) * 2014-12-12 2017-11-01 Nttエレクトロニクス株式会社 小数画素生成方法
WO2017007546A1 (en) * 2015-07-03 2017-01-12 Intel Corporation Apparatus and method for data compression in a wearable device
CN107729990B (zh) * 2017-07-20 2021-06-08 上海寒武纪信息科技有限公司 支持离散数据表示的用于执行正向运算的装置及方法
CN109901044B (zh) * 2017-12-07 2021-11-12 英业达科技有限公司 多电路板的中央处理单元差分测试系统及其方法
CN113591795B (zh) * 2021-08-19 2023-08-08 西南石油大学 一种基于混合注意力特征金字塔结构的轻量化人脸检测方法和系统

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0576749B1 (en) * 1992-06-30 1999-06-02 Discovision Associates Data pipeline system
US4680581A (en) * 1985-03-28 1987-07-14 Honeywell Inc. Local area network special function frames
US5325092A (en) * 1992-07-07 1994-06-28 Ricoh Company, Ltd. Huffman decoder architecture for high speed operation and reduced memory
US5298896A (en) * 1993-03-15 1994-03-29 Bell Communications Research, Inc. Method and system for high order conditional entropy coding
US5699460A (en) * 1993-04-27 1997-12-16 Array Microsystems Image compression coprocessor with data flow control and multiple processing units

Also Published As

Publication number Publication date
JP3302527B2 (ja) 2002-07-15
KR950033896A (ko) 1995-12-26
CN1235483A (zh) 1999-11-17
CN1137212A (zh) 1996-12-04
GB2288521A (en) 1995-10-18
JPH11266460A (ja) 1999-09-28
GB2288521B (en) 1998-10-14
CA2145549C (en) 2001-02-20
CA2145219A1 (en) 1995-09-25
GB2288521A8 (en) 1996-04-15
JPH08116260A (ja) 1996-05-07
JPH0870453A (ja) 1996-03-12
CA2145549A1 (en) 1995-09-25
CA2145426A1 (en) 1995-09-25
GB9504047D0 (en) 1995-04-19
CA2145219C (en) 2001-11-27
JPH0918871A (ja) 1997-01-17

Similar Documents

Publication Publication Date Title
KR100291532B1 (ko) 리컨피그 가능한 프로세싱 스테이지를 포함하는 정보처리시스템
EP0891088A1 (en) Pipeline decoding system
US20020066007A1 (en) Multistandard video decoder and decompression system for processing encoded bit streams including pipeline processing and methods relating thereto
US6263422B1 (en) Pipeline processing machine with interactive stages operable in response to tokens and system and methods relating thereto
US5835792A (en) Token-based adaptive video processing arrangement
KR100304511B1 (ko) 비디오복원및디코딩시스템
JP3302540B2 (ja) ビデオデータをデコードするシステム

Legal Events

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

Payment date: 20100122

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee