KR20010083063A - 가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법 - Google Patents

가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법 Download PDF

Info

Publication number
KR20010083063A
KR20010083063A KR1020007014670A KR20007014670A KR20010083063A KR 20010083063 A KR20010083063 A KR 20010083063A KR 1020007014670 A KR1020007014670 A KR 1020007014670A KR 20007014670 A KR20007014670 A KR 20007014670A KR 20010083063 A KR20010083063 A KR 20010083063A
Authority
KR
South Korea
Prior art keywords
bit
register
value
vlx
instruction
Prior art date
Application number
KR1020007014670A
Other languages
English (en)
Inventor
리차드 딜레이
야틴 문드쿠르
이우빈
Original Assignee
벤자민 에프 커틀러
이퀘이터 테크놀러지스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=22223680&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=KR20010083063(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by 벤자민 에프 커틀러, 이퀘이터 테크놀러지스 인코포레이티드 filed Critical 벤자민 에프 커틀러
Publication of KR20010083063A publication Critical patent/KR20010083063A/ko

Links

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M7/00Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
    • H03M7/30Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
    • H03M7/40Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

가변 길이 인코드/디코드 프로세서(11)는 중앙 처리 장치(16) 및 명령어 버퍼(32) 및 중앙 처리 장치에 접속된 겟비트(getbits) 처리 엔진(18)을 포함한다. 이 프로세서(11)는 데이터를 가변 길이 기호로서 인코딩하거나 MPEG 프로토콜에서 사용된 가변 길이 기호를 디코딩하는데 사용될 수 있다.

Description

가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법{PROCESSING CIRCUIT AND METHOD FOR VARIABLE-LENGTH CODING AND DECODING}
가변 길이 코드는 많은 유형의 데이터를 인코딩하는데 사용된다. 예를 들면, 대중적인 블록 기반의 동화상 전문가 그룹(Motion Picture Experts Group; MPEG) 비디오 압축 표준은 비디오 데이터를 송신 또는 저장용 가변 길이 기호로서 인코딩한다. 또한, 후프만 코드(Huffman code)와 같은 많은 유형의 가변 길이 코드는 손실이 없다.
전형적으로, 가변 길이 인코딩된 데이터는 직렬 전송된다. 따라서, 이러한 데이터의 전송, 수신 및 디코딩은 병렬로 전송, 수신 및 디코딩될 수 있는 데이터에 비해 상대적으로 시간 소비적이다.
전송, 수신 및 디코딩 시간을 감소시키기 위해, 이러한 데이터를 처리하는 회로 하드웨어가 개발되어 왔다. 즉, 이러한 하드웨어의 아키텍처(architecture)는 가변 길이 디코딩 또는 인코딩 프로세스를 효율적으로 구현하도록 구성되어 있다. 그렇지만, 이러한 하드웨어에서의 문제점은 하드웨어가 전형적으로 특정 형의 가변 길이 코드에 맞게 설계된다는 것이다. 그러므로, 한 유형의 가변 길이 코드에 따라 데이터를 인코딩 또는 디코딩하도록 설계된 하드웨어는 다른 우형의 가변 길이 코드에 따라 데이터를 인코딩 또는 디코딩하는데 비효율적이거나 불가능할 수 있다. 그러나 일부 MPEG 비트 스트림과 같은 많은 비트 스트림은 서로 다른 가변 길이 코드에 따라 각각 인코딩된 비트 세그먼트를 포함한다. 그러므로, 디코딩 하드웨어는 각 가변 길이 코드에 따라 비트 세그먼트를 디코딩하도록 각각 설계된 다중 회로를 종종 반드시 포함해야 한다. 그러나, 불행히도, 이는 디코딩 하드웨어의 크기, 복잡성 및 비용을 종종 증가시킨다.
또 다른 대안은 가변 길이 인코딩 또는 디코딩을 수행하도록 프로세서를 프로그래밍하는 것이다. 그러므로, 하나 이상의 가변 길이 코드를 사용하는 비트 스트림의 경우, 프로세서 소프트웨어를 "매우 신속하게(on the fly)" 변경하여 모든 인코딩 또는 디코딩을 단일 프로세서로 수행할 수 있다. 그러나, 불행히도, 대부분의 프로세서의 아키텍쳐는 가변 인코딩 또는 디코딩에 대해 최적화되어 있지 않기 때문에, 그러한 프로세서는 데이터를 가변 길이 인코딩 또는 디코딩할 때 비교적 느리다. 그러므로, 그러한 프로세서가 데이터를 실시간으로 가변 길이 인코딩 또는 디코딩하는 것은 종종 어렵거나 불가능하다.
발명의 요약
본 발명의 한 실시태양에서, 가변 길이 인코드/디코드 프로세서는 중앙 처리 장치를 포함하고, 명령 버퍼 및 중앙 처리 장치에 접속된 겟비트 처리 엔진(getbitprocessing engin)을 포함한다. 그러한 프로세서는 데이터를 가변 길이 기호로서 인코딩하거나 MPEG 비트스트림에서 발견되는 것과 같은 가변 길이 기호를 디코딩하는데 사용될 수 있다.
후프만 인코딩과 같은 데이터 압축 스킴(scheme)은 가변 길이 코드(VLCs)를 사용한다. MPEG과 같은 비디오 압축 표준은 VLC를 사용하며, 예를 들면, 다음과 같은 것이 적법한 MPEG 코드이다:
'00'
'01'
'10'
'110'
'000000000000000000000001'
이러한 기호 유형의 스트림에서, 스트림 내의 제 2의 기호는 제 1의 기호의 길이 및 의미(semantics)가 알려질 때까지 디코딩될 수 없다. 이는 전용의 소형 프로그램 가능 엔진에 의해 효율적으로 수행될 수 있는 고유한 직렬 프로세스이다.
이러한 이유로, Map1000 프로세서와 같은 비디오 프로세서는 MEPG 스트림 내의 것과 같은 가변 길이 데이터의 처리 요구에 전용 엔진인, "VLx 프로세서"를 포함함으로써 이익을 얻는다. VLx 프로세서는 입력되는 비트스트림의 처리 및 그 비트스트림에 대한 정보가 Map1000에 다시 중계(relay)되는 방식에서 융통성을 허용한다. 효율적인 처리는 가변 길이 데이터 처리에서의 임계 루프를 최소화하고 압축된 세트의 표(table)를 사용함으로써 메모리를 절약하는 하드웨어를 설계함으로써 달성되어 왔다.
일반적인 설계 의도는 다음의 요구조건을 충족하는 것이었다:
·8 메가비트 비디오 버퍼링 검증기(Video Buffering Verifier, VBV) 버퍼 내로 19.4 메가비트/초로 고화질 텔레비전(High Definition Television, HDTV) MGEG 스트림을 취급(handle)한다.
· HDTV를 MP@ML 해상도로 디스플레이하도록 십진화된 계수를 발생시킨다
· 메인 레벨(MP@ML) 스트림에서 메인 프로필의 인코딩 및 디코딩을 동시에 취급한다
· HDTV MPEG 스트림의 디코딩과 같은 작업(task)을 위해 VLx 프로세서가 자신이 수행하는 프로그램에 기초한 다음 형태의 활동을 수행할 수 있다:
· 스트림의 내용을 정의하는 구조를 만들도록 MPEG 스트림을 예비처리한다
· 이산적 코사인 변환(Discrete Cosine Tranform, DCT) 계수를 디코딩한다
·MPEG 스트림을 생성한다
VLx 프로세서는 Map1000 작업에 의해 두 개중 하나의 방식으로 비트스트림을 공급받는다. VLx 프로세서는 코프로세서 메모리 뱅크(Coprocessor Memory Bank) 내에 위치한 데이터를 처리할 수 있거나, 또는 Map1000 데이터 스트리머 유닛(Data Streamer unit)에 의해 공급되는 I/O 채널을 통해 입력 비트스트림을 취한다.
결과적으로 생성된 정보, 십진화된 비트스트림, 또는 새로 생성된 스트림은 메모리 전송을 통해 또는 I/O 출력 스트림으로서 MAP1000에 다시 전송된다.
VLx 프로세서는 단순 처리 엔진, 한 세트의 전용 레지스터, 비트스트림 및I/O 상호작용(interaction)을 취급하기 위한 GetBits 엔진, 코프로세서 메모리 1(Coprocessor Memory 1, CM1) 액세스를 위한 FFB에 대한 최적화된 액세스 및 데이터 스트리머(Data Streamer)에 대한 DsContinue() 연산을 발생시키는 웨이(way)로 구성되어 있다.
본 발명은 일반적으로 이미지 처리 회로 및 기술에 관한 것으로, 보다 구체적으로는 비디오 데이터와 같은 데이터의 가변 길이 코딩 및 인코딩 처리 회로, 및 그 방법에 관한 것이다.
도 1은 본 발명의 실시예에 따른 가변 길이 인코더/디코더 프로세서를 포함하는 매체 처리 회로의 블록 다이어그램.
도 2는 도 1의 가변 길이 인코더/디코더 프로세서 및 본 발명의 실시예에 따른 주변 회로의 블록 다이어그램이다.
디지털 혁명이 확립되고 필름, 오디오 및 비디오 같은 모든 형태의 매체가 디지털화됨에 따라, 그러한 매체 데이터의 획득, 처리, 디스플레이, 저장 및 통신에 대한 필요성은 급속한 기술 발달을 고무시켰다. 이러한 기술의 등장에 힘입어서, 많은 새로운 응용 프로그램(application)이 가능해졌고 기존의 응용 프로그램도 향상된 비용/성능 비로 강화되었다. 디지털 비디오, 데스크탑 비디오 전자 회의, 기계 영상, 디지털 카메라/캠코더 및 의학 화상화(medical imaging)는 이러한 예 중 일부이다. 이미지 및 비디오 계산 알고리즘 및 이들의 빠른 구현은 이러한 응용 프로그램에 대한 핵심 가능 기술의 일부이다. 방대한 시장 잠재성으로 인해, 실시간 디지털 비디오 계산을 사용하는 소비 제품은 제작자 및 소비자 모두 사이에서 대단한 흥미를 유발시켜왔다. 그러한 시스템의 실시간 양상 및 소비자-수준의초점은 매우 낮은 비용에서 높은 계산 능력 및 핵심 알고리즘의 최적화된 구현을 요구한다. 이들 시스템을 표준화 및 설계하는데 있어서, 프로그램 가능 접근법은 새로운 응용 프로그램 및 변화되는 요구 조건에 대한 융통성 및 응용성을 제공하는데, 이는 특정화된 고정 배선 솔루션(hardwired solutions)에 비해 명백한 장점이다.
도 1은 고정 기능 블록(Fixed Function Block, FFB, 11) 및 본 발명의 실시예에 따른 가변 길이 인코더/디코더(VLx) 프로세서(12)를 포함하는 매체 프로세서(10)의 블록 다이어그램이다. 일 실시예에서, 프로세서(10)는 워싱턴주 시애틀시의 이퀘이터 테크놀로지즈(Equator Technologies)에 의해 생산된 MAP1000이다. 실시간으로 매체 처리를 수행하는데 초당 수십억의 연산이 필요하기 때문에 예전에 사용 가능한 것보다 훨씬 높은 계산 능력을 수행할 수 있는 프로세서에 대한 필요성이 매우 컸었다. MAP1000은 혁명적인 새로운 저-비용 프로그램 가능 단일-칩 솔루션으로서 디지털 매체 처리에 요구되는 계산 조건을 충족하도록 설계되었고, 다음의 것을 포함한다:
· 디지털 비디오: MPEG2 인코딩 및 디코딩, 비디오 전/후(pre/post) 필터링, 및 H.324 비디오 회의
· 디지털 오디오 압축: 5.1 채널 AC3 및 MPEG2 인코딩 및 디코딩
· 화상화: 사진 전문가의 연합 모임(Joint Photographic Experts Group, JPEG) 인코딩 및 디코딩, 잔물결(wavelet) 변형
· 3D 그래픽:
· 2D 그래픽
· 전화통신
· 디지털 오디오 합성
· 디지털 오디오 공간화(spatialization)
MAP 1000 상에서 사용 가능한 고도의 계산 능력은 MAP 1000을 오늘날 세계에서 가장 강력한 프로세서 중의 하나로 만든다. MAP 1000은 명령-레벨 병렬 계산으로서 공지된 기술을 통해 온-칩 병렬 계산을 사용하여 그러한 높은 계산 속도를 달성한다. 명령-레벨 병렬 계산은 다중 중앙 처리 장치(CPU) 연산이 단일 클록 사이클로 개시되는 것을 허용한다. 이것은 다중 온-칩 수행 유닛을 가지거나 및/또는 더 소형인 다중 유닛으로 특정 수행 유닛을 분배시킴으로써(예를 들면, 64-비트 산술 논리 유닛(Arithmetic Logic Unit, ALU)이 여덟 개의 3-비트 ALU로 분할됨) 행해진다.
그렇지만, MPEG, JPEG, 또는 Dolby AC3에서 사용되는 것과 같은 매체 비트스트림의 생성 또는 해석은 고유한 순차적 프로세스이다. 비트스트림 내의 각 비트 또는 구조는 선행한 기호로부터 해석을 행한다. 그리고 각 기호의 길이는 문맥에 기초하여 연역적으로 공지되거나 기호 값 자체에 선행하는 비트스트림 내의 길이 값으로서 인코딩된다. 이것은 MAP 1000의 모든 병렬 계산이 매체 스트림 인코딩 또는 디코딩을 수행할 때 허비됨을 의미한다.
매체 비트스트림의 인코딩 또는 디코딩을 더욱 방대하게 효과적으로 만들기 위해, 이퀘이터 테크놀로지즈는 일체형 VLx 프로세서(12)를 개발하였는데, 이는Map 1000 프로세서(10) 내에 배치되고 Map 1000의 코어(14)의 병렬 처리를 보충한다. VLx 프로세서(12)는 입력되는 비트스트림의 처리 및 그 비트스트림에 대한 정보가 Map1000에 다시 중계되는 방식에 융통성을 허용한다. 효율적인 처리는 가변 길이 데이터 처리에서의 임계 루프를 최소화하고 압축된 세트의 표를 사용하여 메모리를 절약하는 하드웨어를 설계함으로써 달성되어 왔다.
그러므로 VLx 프로세서(12)는 비트 분석을 돕는 많은 특이적 특징을 갖는 16-비트 순차 RISC 마이크로프로세서이다. 순차 비트-분석 알고리즘에 대해 VLx를 사용함으로써, 병렬 코어(14)는 VLx 프로세서(12)와 협력하여 병렬 코드를 더욱 효과적으로 자유롭게 가동시킨다. VLx 프로세서(12)가 완전히 프로그램 가능하기 때문에, 비터비(Viterbi), 리드솔로몬(Reed-Solomon), 또는 JBIG 처리의 가속화와 같은 기타 비트-직렬 조건적 작업에 사용될 수 있다. VLx 프로세서(12)는 도 1에 예시된 MAP 1000 온-칩 회로의 나머지와 일체화된다.
일 실시예에서, VLx 프로세서(12)는 다음의 조건을 충족하도록 설계된다:
·8 메가비트 VBV(버퍼) 내로 19.4 메가비트/초로 HDTV MGEG 스트림을 취급한다.
· MP@ML 해상도에서 HDTV를 디스플레이하도록 십진화된 계수를 발생시킨다
도 2는 도 1의 VLx 프로세서(12) 및 본 발명의 실시예에 따른 도 1의 FFU(11)의 부분의 블록 다이어그램이다. VLx 프로세서(12)는 16-비트 CPU(16) 및 GetBits(GB) 처리 엔진(18)을 포함하는데, GetBits 처리 엔진(18)은 CPU(16)와 통신하고 또한 입력/출력(I/O) 장치로서 작용한다. CPU(16) 및 GB 엔진(18)은 레지스터 파일(20)에 대한 액세스를 갖는데, 레지스터 파일(20)은 32개의 범용 레지스터를 포함한다. FFB(11)은 코프로세서 메모리 뱅크 1(CM1)를 포함하는데, CPU(16)는 명령어 선인출(prefetch) 연산 및 로드/스토아(load/store) 연산 모두에 대해 CM1를 액세스할 수 있다. GB 엔진(18)은 I/O 버스(22) 상에서 데이터의 소모 및 생성 모두를 할 수 있다.
CPU(16)은 레지스터 파일(20) 내의 32 개의 레지스터 상에서 동작하고, 이들 레지스터는, 비록 도 2에 개별적으로 도시되지는 않았지만, r0 - r31로 레이블된다. 이들 32 개의 레지스터 중, CPU(16) 및 GB 엔진(18)은 특수 표 처리를 위해 13 개의 레지스터 r0 - r12에 대한 액세스를 공유한다. 또한 4 개의 범용 레지스터 r0-r3을 갖는, 주소 지정 포트를 공유하는 가상 레지스터(아래에서 논의됨)도 있다. 이들 가상 레지스터는 읽기 전용이고, 부작용으로서 명령 처리를 변경시키는 어떤 기계 상태에 대한 뷰(view)이다. 레지스터 파일(20) 내의 레지스터 두 개까지는 명령어로 특정화될(specified) 수 있다. 명령어로 지명된 제 1 레지스터는 R1로 레이블된다. 제 2 레지스터는 만약 특정화되면, R2로 명명된다. 레지스터의 위치는 가상 레지스터 규격의 해석을 결정한다.
R1 레지스터는 명령어의 재기록 버전이 사용되는 경우 결과적인 재기록에 대한 목적지(destination)이다. 명령어는 명령의 수행에 뒤이은 사이클 상의acc가상 레지스터(24) 내에서 또한 사용될 수 있다.
범용 레지스터 r4-r31은 명령어에 의해 기록 또는 판독될 수 있다. 상기에서 언급된 바와 같이, 범용 레지스터 r0-r3은 주소 포트를 가상 레지스터와 공유한다. 이들 네 개의 범용 레지스터는 RAM 판독(LD.W) 명령에 의해서만 기록될 수 있다. 이들 레지스터 위치를 판독하기 위한 어떠한 시도도 가상 레지스터 값을 판독하는 결과를 초래할 것이다. GB(18)는 범용 레지스터 r0-r3을 DCT 처리의 일부로서 판독할 수 있다.
일 실시예에서, 레지스터 재기록에 대한 한 사이클 지연이 존재한다. 이는 변형된 레지스터에 대한 레지스터 내용이acc가상 레지스터(24) 내에서 다음 명령에 대해서만 사용 가능함을 의미한다.
상기에서 언급된 바와 같이, 가상 레지스터는 네 개의 범용 레지스터 r0-r3와 주소 지정 포트를 공유한다. 이는 이들 레지스터가 CPU(16)에 의해 액세스되는 경우, 사용된 값이 기계의 어떤 상태로부터 수신되지 범용 레지스터로부터 수신되지 않음을 의미한다.
가상 레지스터에는 기록할 수 없다. 가상 레지스터에 대한 재기록은 가상 레지스터 포트를 공유하는 범용 레지스터가 기록되는 것을 유발한다. VLx 어셈블러(도시되지 않음)는 이름에 의해 가상 레지스터를 인식하고 이들 가상 레지스터에 대한 기록 또는 재기록 연산을 플래그(flag)할 것이다.
GB(18)는 DCT 처리 모드에서 레지스터 r0-r12를 사용한다. GB(18)가 이들 레지스터를 액세스할 때, 레지스터 파일(20)에 대한 CPU(16)에 의한 액세스는 레지스터 파일 충돌을 유발한다. 그러므로, CPU(16)는 GB(18)이 레지스터 파일(20)을 액세스하고 있는 사이클 중에는 레지스터 파일을 액세스하는 것이 허용되지 않는다. 레지스터 r0-r12는 GB(18)에 의해 판독되어 DCT-계수 처리에 대한 적절한 조사 표(lookup table)가 작성될 수 있다. DCT 처리에 대한 예시적 코드는 CPU(16) 및 GB(18) 사이의 이들 레지스터 충돌을 회피하도록 설계된다. 다음의 표는 레지스터 사용의 요약을 나타낸다.
표 I
레지스터 요약
레지스터 가상 레지스터의사 기호(mnemonic) DCT 처리에 대한 표 기초로서 GB에 의해 사용되는지 여부 R1 위치에 있을 때의 값 R2 위치에 있을 때의 값
r0r1 acc dctSign, run 예예 최종 ALU 결과Gbsign?0:(RF[425]<10:5>)≪1 최종 ALU 결과최종 CM 로드 값 더하기 1의 비트 15:11의 값
r2r3 symbol isZero, nZero 예예 GB 모드에 의해 해석되는 GB 입력 버퍼의 첫 번째 16비트ALU 명령어에 대해 0 GB 모드에 의해 해석되는 GB 입력 버퍼의 첫 번째 16비트symbol에서 선행 0 또는 1 비트의 GB 카운트
r4..r12r13..r24 RF[레지스터]RF[레지스터] RF[레지스터]RF[레지스터]
r25r26..r31 lev RF[레지스터]RF[레지스터] call.dct가 사용되었을 때 최종 CM 로드 값의 비트 10:5의 값RF[레지스터]
R1 및 R2 위치는 프로세서(10)에 대해 제안된 데이터 시트의 섹션 5에 기술되어 있다. 이들 제안된 데이터 시트는 부록 A로서 첨부되었다.
VLx 프로세서(12)는 CM1과 같은 코프로세서 메모리를 사용하는데, CM1은 FFB(11) 내에 위치한다. 일 실시예에서, CM1은 메모리의 4KB 영역이다. FFU 3D2D 제어 레지스터(26)가 VLD모드인 경우, VLx 프로세서(12)는 메모리 요청(또는 64-비트 명령어 인출 또는 16-비트 로드/스토아)에 대해 한-사이클 반환(turnaround)을 갖고 메모리 뱅크 CM1은 3D 가속기(도 1)와 같은 FFB(11)의 다른 성분에 의해 사용될 수 없다.
메모리 영역 CM1은 FFU 3D2D 제어 레지스터(26)가 가변 길이 디코드(VLD)모드일 때, 데이터 스트리머(도 1) 또는 PIO 제어기(28)와 같은 FFB(11)에 대해 외부적인 성분 및 회로에 대해서만 액세스할 수 있다. 그러므로 CM1을 액세스하기 위한 VLx 프로세서(12)로부터의 요청은 메모리 CM1을 사용하는 FFB(11)에 대해 외부적인 회로 성분으로부터의 요청보다는 우선권을 갖는다.
VLx 프로세서(12)는 16-비트 주소로서 메모리 CM1을 주소 지정하는데, 여기서 0000은 CM1 내의 제 1 16-데이터-비트 위치를 특정하고 FFFF는 CM1 내의 최종 16-데이터-비트 위치를 특정한다.
이제부터 CPU(16)에 대해 보다 상세히 논의하기로 한다. CPU(16)는 레지스터 파일(20) 내의 32개의 16-개의 레지스터 상에서 단순 산술 연산(더하기, 빼기, 시프트)을 지원하는 16-비트 처리 유닛이다. CPU(16)는 또는 CM1 내로/으로부터 로드/스토아를 또한 개시할 수 있다. 특수 명령어가 GB(18)을 제어한다. CPU(16)에 대한 클록(도 2에 도시되지 않음)은 VLx PIO 레지스터(도 2에 도시되지 않음) 설정을 통해 중지/시작될 수 있다.
CPU(16)는 명령어 버퍼(30) 내로 선인출된 명령어를 연속적으로 처리한다. 명령어 버퍼(30)는 2 개의 4-명령 서브레지스터(32, 34) 내에 8 개의 16-비트 명령어를 보유한다. CPU(16)는 분기의 경우를 제외하고 명령어 파이프라인(pipeline)의 정지를 제때에 방지하거나 또는 세 개의 연속적인 로드/스토아 연산이 제때에 사용되기 위한 명령어 선인출을 방해할 때 4개의 16-비트 명령어의 명령어 선인출을 개시한다. 고속분기(fastbranch)라고 불리는 CPU(16)의 특정 모드는 CPU(16)가 어떠한 명령어 선인출 없이 명령어 버퍼(30) 내에서 명령어를 루프 수행하는 것을 허용한다.
CPU(16)는 PIO 리셋에 응답하여 CM1의 시작 메모리 위치(CM1의 베이스 주소가 어떤 것이 선택되더라도 오프셋0)에서 명령 수행을 시작하고, VLx 프로세서(12) 클록(도 2에 도시되지 않음)은 동시에 인에이블된다. CPU(16)는, 산술 및 논리 연산에 대한 명령어 수행의 결과가 다음 사이클에서acc가상 레지스터(24) 내에서 사용 가능해짐과 더불어 사이클마다 하나의 명령을 디코딩하고 이후 수행한다. 임의의 레지스터 재기록이 다음 사이클에서 행해진다. VLx CPU 파이프라인은 표 2에 나타낸 바와 같은 세 개의 단계를 갖는다.
표 II
VLx CPU 파이프라인
R/D 명령 디코드, 레지스터 판독
EX 연산 수행
WB [임의적인] 결과의 재기록
명령어 선인출은 분기가 발생하지 않을 경우 매 4 사이클 내에서 한번 발생하여 진행한다. 분기의 경우, 표적(target) 명령어 및 명령어 버퍼(30)를 채우는 뒤따르는 명령어에 대한 명령어 인출이 2 개의 연속적 사이클에서 잠재적으로 발생할 것이다. 분기 도중, CPU 파이프라인은 분기 표적이 계산되고, CM1으로부터 판독되고 이후 디코딩됨에 따라 3번의 사이클동안 처리를 지속할 것이다.
VLx 명령어 세트는 부록 A의 섹션 5에 상세히 기술된다. 명령어는 다음 카테고리로 나뉜다:
· 더하기, 빼기, and, or, xor, 좌측 시프트, 우측 시프트, 및 엔디안 교체(endian swap)와 같은 산술, 논리, 및 시프팅 연산
· 분기 연산, goto, 조건적 분기, 고속분기
· GB 제어 연산
· CM1 로드/스토아 연산
여전히 도 2를 참조하여, GB(18)가 이제 기술된다. GB(18)는 대형 비트시프터 및 I/O 장치 모두로서 작용한다. GB(18)은 비트스트림 내의 가변 길이 코드 워드의 인코딩 또는 디코딩을 돕도록 설계된다. 부가적으로, GB(18)은 MPEG2 비트스트림의 부분의 해석에 대한 특수한 논리를 가져서 이동 벡터의 DCT 계수 추출 또는 생성을 보조한다.
GB(18)은 다음의 능력을 갖는다:
· I/O 입력 비트스트림으로부터 입력되는 비트(도 1의 데이터 스트리머를 통해 I/O 버스(22) 상에서 수신됨)에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는 GB(18)에 의해 MPEG2 비트를 연속적인 순서로 유지하여 GB(18)가 거대 시프터로서 작용할 수 있다.
· I/O 출력 비트스트림으로부터의 송신 비트(도 1의 데이터 스트리머로 송신됨)에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는매우 긴 명령 워드(Very Long Instruction Word, VLIW) 프로그램과의 상호작용에 대한 적절한 엔디안(endianness)을 보존한다.
· 선택적으로, I/O 입력 스트림으로부터의 데이터를 시프트-인시켜 이 데이터의 제 1의 16비트를symbol가상 레지스터(36)에서 프로그램에 의해 이용가능하도록 하여 시프트된 비트가 출력 스트림 내에 위치되도록 한다.
·symbol가상 레지스터(36) 내에 저장된 값의 뷰(view)를 엔디안 교체한다(endian swap).
· 제한된 세트의 하드웨어 인코딩된 MPEG2 표 내에서 결과 값을 조사하기 위해symbol가상 레지스터(36) 내에 저장된 현재 값을 사용하고, 이후 표 값을symbol가상 레지스터(36)로 리턴한다.
· 레지스터 파일(20) 내의 범용 레지스터 r0-r12와 공동으로symbol가상 레지스터(36) 내에 저장된 현재 값을 사용하여 CM1의 주소를symbol가상 레지스터(36)로 리턴한다.
· 데이터를 출력 스트림 내로 스플라이스한다.
· 비트스트림 I/O상태 정보를 저장 및 복구하여 기타 I/O 비트스트림 쌍이 취급될 수 있게 한다.
GB(18)은 CPU(16)에 의해 제어된다. CPU(16)는 연산 및 두 개까지의 피연산자를 특정함으로써 GB(18)을 제어한다. 연산은 VLx 명령 내의 K1 피연산자로서 특정된다. 제 1 GB 피연산자는 위치 K1에서 VLx 명령 내의 GB 명령으로부터 직접 생성된. 연산 유형에 기초한 임의의 제 2 GB 피연산자는 명령의 K2 또는 R2 피연산자 값으로부터 취해진다(K2 및 R2 피연산자는 첨부된 부록 A에서 보다 상세히 논의된다). 일부 GB(18) 연산에서는 추가적인 정보를 요구한다. 이 정보는 GB 연산을 포함하는 것에 바로 뒤이어 오는 VLx 명령의acc가상 레지스터(24) 내에서 가시적으로 만들어진 최종 CPU(16) 결과 상태로부터 생성될 수 있다.
GB 파이프라인은 GB 연산에 따라 달라진다. 파이프라인에는 한 쌍의 변형체(variants)가 있다. 제 1 파이프라인은 비트가 입력 버퍼(42)로부터 시프트 아웃될 때의 것이다. 제 2 파이프라인은 출력 버퍼(44) 내로 비트를 스플라이스하기 위한 것이다. 제 3 파이프라인은 GB 구성을 저장/기록하기 위한 것이다. 제 4 파이프라인은 하드웨어-가속화된 표 조사 값을 위한 것이다. 이들은 파이프라인의 각 상태가 고유 자원을 조작하지 않는다는 점에서 진정한 파이프라인이 아니다. 대신, GB 연산은 지연 시간이 2 - 4 사이클로서 뷰되어져야 한다. GB 파이프라인의 요약이 표 III에 나타내어진다.
표 III
GB 비트 시프트 연산 파이프라인
디코드 VLx CPU 지시문을 수신 및 디코딩함
겟 GBSign 비트시프트 길이에 기초하여,dctSign결정에 사용되는 Gbsign을 결정함
시프트 및 카운트 GB 시프트 연산에 대해, 적절한 수의 비트를 입력 버퍼로부터 시프트함; 업데이트된symbol값을 산출; GB가 구성된 방식에 따라 선행 1 또는 0 비트의 수를 카운트함; 업데이트된nZero값을 산출함. 이는 소모된 비트를 출력 버퍼(44) 내로 선택적으로 스플라이스할 수 있다.
DCT 조사 만약 DCT 모드인 경우, tbase[nZero] 레지스터를 판독하고 표 색인을 계산함; 업데이트된symbol값을 산출함. 24쪽의 "DCT 처리"를 참조.
VLx 프로세서(12)에 대한 보다 상세한 것은 부록 A 및 아래에서 논의된다.
프로세서(12)의 요약에 이어서 CPU(16) 및 GB(18)의 연산을 포함하는 프로세서(12)의 연산에 대한 기술이 어진다.
특징
VLx 프로세서(12)는 단순 처리 엔진(CPU(16)), 한 세트의 전용 레지스터(레지스터 파일(20)), 비트스트림 및 I/O 상호작용을 취급하기 위한 GetBits 엔진(GB(18)), CM1 액세스를 위한 FFB(11)에 대한 최적화된 액세스 및 데이터 스트리머(도 1)에 대한 DsContinue() 연산을 발생시키는 웨이로 구성되어 있다.
VLx 프로세서(12) 성분은 다음 표 및 섹션으로 요약된다:
표 IV
성분 기능
16-비트 200MHz CPU(16) FFB(11), CM1으로부터의 VLx 명령어 판독을 처리함
명령어 버퍼(30) 8 개의 16-비트 명령어를 보유
레지스터(20) 32개의 16-비트 레지스터 r0-431(4포트);일부는 특수 목적; 일부는 범용
메모리 CM1 FFU(11) CM1 RAM에 대한 최적화된 액세스; VLx가 연산 중인 동안 다른 FFU 유닛이 CM1을 사용하지 않을 것을 요구함.
GetBits 엔진(18) I/O 버스(22)로부터 수신되거나 I/O 버스(22)로 송신하는 데이터의 최적화된 처리; 데이터를 한번에 4 바이트씩 보내고 받음.
VLx 프로세서 일반적인 연산 개요
VLx CPU(16)은 CM1 RAM으로부터 VLx 명령어 버퍼(30)내로 판독 입력되는 명령을 수행한다. 이들 명령어는 VLx 레지스터 값을 설정하고, 레지스터의 내용에 대한 단순 산술 연산을 수행하고, CM1으로부터 정보를 판독 및 기록하고, 명령어 스트림 내의 제어 흐름이 수정되고 GB 엔진(18)을 통하여 발생하는 I/O를 제어하는것을 허용한다.
VLx 프로세서(12)는 PIO 제어기(28)로부터 신호를 수신할 수있다. 이들 신호는 VLx 클록이(도 2에 도시되지 않음) 턴온 및 턴오프되고, VLx 프로그램 카운터(도 2에 도시되지 않음)가 제 1 명령으로 리셋되고, GB 엔진(18)에 대한 I/O 입력이 가능 또는 불가능해지는 것을 허용한다.
코어 블록(14, 도1)과의 통신은 데이터 전송 스위치에 대한(도시되지 않음) FFB CM1 접속을 통한다.
VLx GB 엔진(18)은 I/O 버스(22)에 접속된다. GB 엔진(18)은 어떤 순간에도 두 개까지의 데이터 스트리머 버퍼(도 1)와 상호작용할 수 있다 - 그 중 하나는 입력 스트림을 공급하고, 다른 하나는 출력을 취한다.
VLx 레지스터 기술
VLx CPU(16)는 레지스터 파일(20) 내에서 32개의 16-비트 레지스터 상에서 작동한다. 이들 레지스터는 일반(regluar)판독/기록 가능 레지스터이다. 이들 레지스터 중 일부는, 다른 명령의 수행의 결과로서 발생하는 시스템 내의 상태 검사의 웨이이기 때문에 판독만 될 수 있는 가상 레지스터와 주소 지정 포트를 공유한다.
일반 레지스터의 경우, 레지스터 재기록에 대한 1 사이클 지연이 있다. 이는 레지스터 내용이 레지스터를 수정하는 명령에 뒤따르는 다음 명령에 대해 사용될 수 없음을 의미한다. 만약 값(value)이 필요한 경우, 다음 명령은 수학적 연산결과 항상 설정되어 있는 가상 레지스터acc(24) 내의 누산기(accumulator) 값을 사용할 수 있다. 예를 들면
#zzin을 1만큼 증가시켜 결과를zzin에 재기록
ADD_K(W, zzin, 1);
#zzin값은 다음 명령에 사용될 수 없음.acc사용
SHL_K(0 acc,2);
#zzin값은 이제 사용 가능함.
여러 가상 레지스터가 있고, 그 중 가장 주목할만한 것은 누산기acc가상 레지스터(24)이다. 다음의 표는 이들 특별한 레지스터를 기술한다. 레지스터 색인 값이 아닌 레지스터 기호적 이름이 VLx 내에서 사용되어야만 한다는 것을 유의해야 하는데 실제 색인 값은 변경될 수 있기 때문이다. 또한 이들 가상 레지스터의 일부는 MPEG2 디코딩 처리 및 이 목적을 위한 GB 엔진(18)과의 상호작용에 특이적인 값을 가짐을 유의해야 한다.
표 V
명령 피연산자 R|1이 가상 레지스터를 참조할 때 사용되는 실제 값
레지스터 색인 레지스터 종류 어셈블러- 피연산자에 대한 기호적 이름 사용된 값 간접 소스
0 가상 acc 최종 결과 누산기
1 가상 보존됨 보존됨 GB 엔진(18)
1 가상 dctsign GBsign?0(iszeroR1으로부터):(FR[R|2]의 비트<10;5>)≪1 GB 엔진(18)
2 가상 symbol GBSymbol GB 엔진(18)
3 가상 iszeroR1 0 -
4...12 실제 tbase* RF[R|1] -
14...31 실제 RF[R|1] -
표 VI
명령 피연산자 R|2가 가상 레지스터를 참조할 때 사용되는 실제 값
레지스터 색인 레지스터 종류 어셈블러- 피연산자에 대한 기호적 이름 사용된 값 간접 소스
0 가상 acc 최종 결과 누산기
1 가상 보존됨
1 가상 보존됨
2 가상 symbol GBSymbol GB 엔진(18)
3 가상 nzero GBnzero GB 엔진(18)
4...12 실제 tbase* RF[R|2] -
25 가상 lev RF[25]의 비트 <10:5> -
14...31 실제 RF[R|2] -
FFB CM1 기술
VLx 프로세서(12)는 CM1에 대한 우선적인 액세스 경로를 요구한다. VLx 프로세서(12)가 CM1을 사용하는 동안, CM1은 3D 가속기(도 1)와 같은 다른 어떠한 FFB(11) 유닛에 의해 사용될 수 없다. CM1은 3D2D 제어 레지스터(26)를 설정함으로써 VLx 프로세서(12)에 의해 사용되도록 배치되어 VLx 프로세서(12)에 의해 위치를 특정한다.
CM1 로드 및 스토아 연산은 VLx 프로세서 발생 시간으로부터 1-사이클 지연 시간을 대표적으로 갖는다. 그렇지만, FFB(11) 내의 CM1에 대한 중재(arbitration)는 MAP1000 프로세서(10, 도1)의 다른 성분들이 CM1을 액세스하는 것을 허용하고 이는 외부 요청의 크기에 의존적인 증가된 지연 시간을 초래할 수 있다. 중재 알고리즘은 항상 데이터 스트리머(도 1)에 의해 행해진 것과 같은 외부 요청보다는 VLx 프로세서(12)에 항상 우선권을 준다. VLx 프로세서(12)가 수행되는 동안 CM1을 액세스할 필요성을 갖는 기타 성분은 VLx 응용 프로그램에 의해필요할 때 CM1 내로 또는 CM1로부터 데이터를 넣고 뺄 수 있는 데이터 스트리머를 포함한다.
VLx 프로세서(12)는 사이클 당 하나의 메모리 연산을 발생시킬 수 있다. 메모리 연산은 메모리에 영향을 주는 VLx 명령을 수행하는 결과로서 개시되는 로드 또는 스토아 연산과 더불어 명령어 선인출을 포함한다. 명령어 선인출에 대해, VLx는 8개 바이트(네 개의 16-비트 VLx 명령)의 메모리 판독을 요청한다. 명령어 로드/저장 스토아에 대해 VLx는 16-비트 양으로 메모리 연산을 요청한다.
만약 CM1에 대해 요구되는 외부 요청이 있는 경우, VLx 응용 프로그램은 이것을 고려하여 기록되어 CM1에 대해 어떠한 메모리 액세스가 행해지지 않은 사이클이 존재하여 외부 요청이 서비스 타임을 얻고, 스타베이션(starvation)을 예방한다.
VLx CPU 기술
VLx CPU(16)은 이번 장에서 나중에 기술되는 명령을 수행한다.
상기 프로세서는 상기에서 기술된 레지스터 파일(20) 내의 32 개의 16-비트 레지스터 상에서 작동한다. CPU(16)은 또한 상기에서 기술된 CM1 메모리 공간 내로 값을 판독 또는 기록할 수 있다. 특수 명령의 수행은 GB 엔진(18)을 제어하고 기타 명령은 VLx 적용이 데이터 스트리머(도 1) 내에서 수행하는 디스크립터(descriptor) 프로그램에 대한 DsContinue() 형 연산을 발생시키는 것을 허용한다.
CPU(16) 내의 중요 소자는 다음과 같다:
· 프로그램 카운터(도 2에 도시되지 않음)
· 명령어 선인출 버퍼(30)
· 명령 수행 로직(도시되지 않음)
· 누산기(비록 누산기 자체가 도 2에 도시되지는 않았지만, 누산기 내에 저장된 값은 가상 레지스터acc(24)을 판독함으로써 판독될 수 있다)
CPU(16)는 명령어 선인출 버퍼(30) 내로 선인출된 명령을 연속적으로 처리한다. 명령어 선인출 버퍼(30)는 3 개의 16-비트 VLX 명령어를 보유한다. CPU(16)는 분기 또는 4 사이클 당 CM1 상에서 동작하는 2 개 이상의 명령어의 수행의 경우를 제외하고는 명령어 파이프라인의 정지를 방지하기에 충분한 시간 내에 CM1으로부터 명령어 버퍼 선인출을 개시한다. 각 명령어 선인출은 네 개의 유효한 VLx 명령어를 선인출 버퍼(30) 내로 로딩한다.
VLx 프로세서(12)는 CM1의 시작부(CM1으로부터 오프셋 0)에서 명령어 수행을 시작한다. 명령어는 매 사이클마다 디코딩되고 이후 수행되고, 산술 및 논리 연산에 대한 명령어 수행의 결과는 다음 사이클에서 누산기 내에서 사용 가능하고, 선택적으로 순차적 사이클에서 결과 레지스터에 재기록된다.
VLx 명령어는 다음 카테고리로 나뉜다:
· ADD, SUB와 같은 산술 연산, AND, OR, XOR, 시프트 레프트, 시프트 라이트, 및 엔디안 교체(endian swap)
· >, ==, Goto, 조건적 분기, 간접 분기, 및 고속분기 메커니즘과 같은 분기 연산
· GetBits 연산
· 메모리 로드/스토아 연산
CPU의 16-비트 명령 워드는 몇 개의 피연산자와 함께 5-비트 연산 코드(opcode)로 구성된다. 명령어 세트는 몇 개 분류의 연산을 포함하고, 또한 GB 엔진의 제어 및 GB 엔진과의 상호작용에 대한 특수 연산 코드를 포함한다.
IOIF 고속분기 연산은 특정 조건하에서 루핑을 가속화하기 위해 포함된다. IOIF 고속분기 연산은 VLx 프로세서의 CPU(16)가 내부 명령어 버퍼(30)만을 사용하여 적절히(in place) 반복하는 것을 허용한다. 이는 명령용 CM1에 대한 호출을 제거할 뿐만 아니라 명령 루프의 선단에 대한 비-지연 분기를 제공하여 속도를 향상시킨다.
VLx 프로세서에 대한 PIO
VLx 프로세서(12)는 다음의 비트에 따라 판독 또는 기록되는 값을 갖는 하나의 32-비트 PIO 판독/기록 값을 갖는다:
표 VII
비트 이름 기술
0 Run 1로 설정되면 VLx 클록을 턴온함; 아니면 VLx 클록을 턴오프함
1 Step Step 1 클록 사이클
2 ResetPC PC를 0으로 설정함; 명령어 버퍼의 내용을 무효로서 표시함(어떠한 고속분기 상태로 강제함
3 Debug 디버그 정지점(breakpoint)을 설정. 만약 이 비트가 설정되면 비트 7-15는 정지점 주소를 특정함.
4 GBCooldown 입력 스트림에 대한 I/O 입력의 요청을 턴오프함
5 SetRFAddr 만약 설정되면 비트 11-15에 의해 특정된 레지스터를 판독 또는 기록할지를 결정하기 위해 비트 10을 사용함.
7-15 Breakpoint 또는 RAM Address 만약 비트 3이 설정되면 정지점 주소; 만약 비트 3도 비트 5도 설정되지 않으면 RAM 주소
11-15 RF Addr 레지스터 파일 내로의 색인
7 GBPending 만약 I/O이 있으면 설정
10 WriteRF 만약 비트 5가 설정되고 이 비트가 설정되면, 비트 16-31에 비트 11-15로 레지스터에 값을 기록; 그렇지 않으면 비트 11-15로 지정된 레지스터를 판독하여 비트 16-31 내에 값을 둠
16-31 RFData 만약 WriteRF 및 ForceRF 비트가 설정되면 비트 11-15로 지정된 색인에서 RF에 데이터가 기록됨; 그렇지 않으면 데이터는*R|1이다.
VLx 프로세서 파이프 단계
VLx 프로세서의 주요 단계는 다음과 같다:
· 선인출: 명령어 선인출 버퍼(30) 내로의 64-비트 선인출
· 디코드: 버퍼 및 설정된 레지스터 파일 주소로부터 CPU(16)에 의해 16-비트 명령어 디코드
· 수행: 명령어 수행
· 재기록: 레지스터 파일(20) 내의 레지스터에 결과를 재기록
선인출: 64-비트 선인출은 CPU(16)가 인-라인 코드를 수행한다는 가정 하에서 명령어 선인출 버퍼(30) 내로 명령어 데이터를 선인출하도록 설계된다. 각 신규 64-비트 워드는 최종 명령어가 CPU(16) 내로 로딩되면서 도달하도록 시간 조절된다. CPU(16)는 인라인 코드에 대한 명령어 손실로 인한 중지 없이 가동될 수 있다. 일 실시예에서, 명령어 선인출 버퍼(30) 크기는 128 비트(8개 명령어*명령어 당 16 비트)이고 2 개의 선인출 연산이 버퍼(30)를 채우는데 요구됨에 유의해야 한다.
디코드: 디코드 단계는 수행 단계에 도달할 때 레지스터 파일(20)로부터의 데이터가 준비되도록 레지스터 파일 주소를 설정한다. READ_GB_x 명령어와 같은 어떤 명령어의 수행은 READ_GB_x에 바로 연이은 명령어에 의해 적절히 설정된 레지스터-파일 주소에 의존함에 유의해야 한다.
제 1 단계 실행: 실행은 레지스터 파일(20)로부터의 데이터 또는 피연산자로서 공급된 상수를 사용한다. 명령어가 실행되고 결과는 다음 명령어의 실행에 의해 사용되는 시간 내에acc가상 레지스터(24) 내에서 사용 가능하다.
재기록: CPU(16)가 산술 및 논리 명령어의 결과를 누산기 내에 자동적으로 배치할지라도, 만약 프로그래머가 그 결과를 다른 레지스터에 복사시키는 것을 원할 경우, 그 행위는 명령어 내의 WB 필드를 통해 표시되어야만 한다. 실행 단계의 결과를 레지스터에 재기록하는데 한 사이클이 걸린다. 만약 프로그래머가 연산 결과를 다음 사이클에서 사용하고자 한다면acc가상 레지스터(24)가 사용된다.
분기
분기는 수행되는데 3 사이클이 걸린다. 모든 분기는 절대적으로 자연적이다. 이들은 즉시 피연산자(11비트) 또는 레지스터 값을 취할 수 있다. CPU(16)는 분기 op가 수신된 후 표적이 로딩될 때까지 어떠한 명령도 실행하지 않는다.
고속분기
고속분기 명령(IOIF 고속분기)은 CPU(16)가 CM1로부터의 명령어 인출을 중단하고 명령어 버퍼(30) 내에서만 코드를 실행하는 연산 모드를 정의한다. 이것의 장점은 루프가 CM1로부터의 인출을 요구하는 코드를 사용할 때보다 버퍼(30) 내의 코드 내에서 더욱 빨리 수행될 수 있다는 것인데, 왜냐하면 사용자-지정 오프셋에 대한 분기는 버퍼(30) 내에서 지연 없이 발생하기 때문이다. 이는 또한 CM1이 데이터 스트리머(도 1)에 의해 액세스되도록 사이클을 풀어준다(free up).
명령어 버퍼(30)는 8 개까지의 명령어를 보유할 수 있고, 버퍼(30) 내의 코드는 8 워드 한도 내에서 정렬되어야만 한다. 고속분기 능력의 사용은 프로그래머가 루프의 본체 내의 명령어의 수를 미리 정의할 것을 요구한다. 이 수는 0 - 3의 범위이고 버퍼(30) 내의 주소를 정의하여 일단 최종 명령(버퍼(30) 내의 8번째)이 도달하면 CPU가 중단된다. 이는 5 - 8 개의 명령어가 이 루프 내에 포함될 수 있음을 의미한다.
GetBits 엔진
VLx 프로세서(12) 내의 GB 엔진(18)은 가변 길이-코딩된 기호를 디코딩할 때 VLx 프로세서(12)를 보조하도록 설계된다. GB(18)는 I/O 버스(22)로부터 수신된 데이터에 대해 비트 추출 및 삽입 연산을 수행하고 계수 추출을 보조하도록 설계된다. GB(18)는 입력 데이터를 집합시키고 올바른 조사 표를 찾는데 필요한 계산의 일부를 행하는 책임을 진다.
GB 엔진(18)은 다음의 기본적인 능력을 갖는다:
· I/O 입력 스트림으로부터 입력되는 비트에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는 GetBits 처리에서 연속적인 GB 엔진(18)에 의해 취급되는 비트를 유지한다.
· I/O 출력 스트림으로부터 출력되는 비트에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는 VLIW 코어(14, 도 1)와의 상호작용에 대한 적절한 엔디안을 보존한다.
· I/O 입력 스트림으로부터의 데이터를 시프트-인시켜 이 데이터가symbol가상 레지스터(36) 내에서 사용 가능하도록 만들면서, 임의로 이 데이터가 또한 출력 스트림 내에 위치되도록 한다.
· I/O 입력 스트림 내의 비트의 뷰(view)를 엔디안 교체한다(endian swap).
· 비트스트림 최상위 비트 위치(바이트 당 비트 역전 후에 수신된 최초의 비트)로부터 시작하여 선행하는 0 또는 1 비트의 수를 카운트하고 이 카운트가 가상 레지스터nzero(도 2에 도시되지 않음)에서 사용 가능하게 만든다.
· 현재의symbol값을 임의로 사용하여 하드웨어 인코딩된 MPEG2 표의 한정된 세트 내에서 결과 값을 조사할 수 있고, 이후 표 값을symbol값으로서 리턴한다.
· 데이터를 출력 스트림 내로 스플라이스한다.
GB 엔진(18)은 VLx CPU(16)과의 두 가지 주요 인터페이스를 갖는다.
1. 레지스터 파일(20)을 통함
2. 단순 제어 비트
제어 비트는 다음과 같다:
· 가동/중지(VLx CPU(16)으로부터 GB(18)로)
· 완료/사용중(Done/Busy)(GB(18)로부터 CPU(16)로)
CPU(16)에 의한 VLx GB 명령어의 수행은 GetBits 연산을 구성하고 제어한다. 적절한 구성을 수행하기 위해, 적절한 데이터 스트리머 버퍼 및 채널 정보와 같은 정보가 VLx 프로세서(12)에 넘겨져서 GB 엔진(18)을 구성할 수 있어야만 한다.
GB 엔진(18)은 I/O 버스(22) 상에서 어떠한 주어진 시간에서 슬롯 중 두 개를 사용하여 I/O 버스(22)와 상호작용한다. 이들 슬롯 중 하나(38)는 입력 스트림용으로 사용된다. 다른 슬롯(40)은 출력 스트림용으로 사용된다.
GB 엔진(18)이 입력을 처리할 때, 입력 데이터가 입력 버퍼(42) 내로 이동된다. GetBits 연산이 수행됨에 따라 입력 버퍼(42) 내의 비트가 처리된다. GB 엔진(18)은 I/O 버스(22)에 대해 I/O 버스 속도로 판독 요청을 행하여 이 입력 버퍼(42)에 데이터가 계속 공급되도록 한다. 입력에 대한 I/O 전송 크기는 4 바이트이다.
GetBits 엔진(18)이 입력을 판독하도록 구성되었고, 또한 입력 버퍼(42) 내에 충분한 양의 비처리된 비트를 가지고 있으면, 엔진(18)은 입력 데이터만을 처리할 수 있다. VLx 프로그램은 입력에 대한 GB 엔진(18)을 구성하고, 특수 분기 조건적 명령어(BRACIND(...C_gbstall)를 사용하여 처리할 충분한 비트가 있는지를 검사하는 책임이 있다.
출력은 데이터의 명백한 배치를 통해(예를 들면 G_splice를 통해) 또는 시프팅의 부작용으로서 입력 버퍼(42) 내의 기호를 통해 출력 버퍼(44)로 발생된다.
GB 엔진(18)이 만약 I/O 버스(22)에 출력을 기록하도록 구성되고 출력 버퍼(44) 내에 더 많은 비트를 쓸 충분한 공간이 있다면, 엔진(18)은 단지 출력만을 발생시킬 수 있다.
유효 비트의 4 바이트 워드가 출력 버퍼(44)에 기록되었을 때, GB 엔진(18)은 I/O 버스(22)에 대해 4 바이트 I/O 기록 전송을 개시할 것이다.
입력 버퍼(42) 크기는 112 비트이다. 출력 버퍼(44) 크기는 92 비트이다. 입력 버퍼(42) 내에 최소한 40 개의 비트가 존재할 때 GetBits 처리를 위한 충분한 입력 데이터가 입력 버퍼(42) 내에 존재한다. 출력 버퍼(44)는 출력 버퍼 상태에 영향을 주는 GetBits 처리를 위한 최소한 21 개의 비트용 공간을 가져야만 한다.
VLx 명령어
CPU(16)는 VLx 어셈블리 언어로 프로그래밍된다. 명령어 세트는 다음과 같이 열거된다:
결과에 대한 목적지 제어
BRACIND를 제외한 명령어에 대해 다음 사항이 참(true)으로 유지된다:
만약 명령어의 WB 필드 = 0 이면, 명령의 결과는 산술 연산을 위한acc가상 레지스터(24)로부터 이용 가능하다.
만약 명령어의 WB 필드 = 1 이면, 명령의 결과는 명령어의 R|1 필드에 의해 주소 지정된 레지스터에 복사된다.
명령어 BRACIND만에 대해서, WB의 영향은 다르다. 논의를 위해 BRACIND의기술을 참조.
명령어 포맷
CPU의 16-비트 명령어 워드는 다음의 구조를 갖는다:
표 VIII
VLx 명령어 포맷
유형 필드 1-연산 코드 필드 2- 재기록 제어 필드 3- 피연산자(R|1) 필드 4- 피연산자(R|2)
1 5-비트 연산 코드 1-비트 WB 플래그 5-비트 피연산자(레지스터 주소) 5-비트 피연산자(레지스터 주소)
2 5-비트 연산 코드 1-비트 WB 플래그 5-비트 피연산자(레지스터 주소) 5-비트 피연산자(레지스터 주소)
3 5-비트 연산 코드 1-비트 WB 플래그 5-비트 피연산자(상수) 5-비트 피연산자(레지스터 주소)
4 5-비트 연산 코드 1-비트 WB 플래그 5-비트 피연산자(상수) 5-비트 피연산자(상수)
5 5-비트 연산 코드 1-비트 WB 플래그 5-비트 피연산자(상수) -
표 IX
명령어에 사용된 피연산자
피연산자 기능
WB 기록 비트(Write Bit)는 두가지 용도를 갖는다:Bracind를 제외한 모든 연산 코드에 대해, WB는 연산의 결과가 누산기 이외에 레지스터에 복사될지를 제어한다:0 = 연산 결과를 누산기에만 배치한다.1 = 연산 결과는 R|1 필드 내에 주소 지정된 레지스터 내로 복사된다.Bracind 연산 코드에 대해 WB는 다음의 작용을 한다:0 = RF[R|1] 내용을 변경시키지 않는다1 = RF[R|1]이 프로그램 카운터 값으로 설정되게 한다
R|1 레지스터 색인 1:레지스터 파일 내의 32 개의 레지스터 중의 하나 또는 가상 레지스터 중의 하나를 색인 지정하는 5-비트 레지스터 주소
R|2 레지스터 색인 2:레지스터 파일 내의 32 개의 레지스터 중의 하나 또는 가상 레지스터 중의 하나를 색인 지정하는 5-비트 레지스터 주소
K5 5-비트 값
M11 11-비트 코프로세서 메모리1(CM1) 메모리 주소
K11 11-비트 값
명령어 기술
명령어 기술을 위한 포맷은 아래와 같다. MNEMONIC은 명령어를 위한 어셈블리 의사(mnemonic) 언어이다. WB는 WB 필드의 값이다. Arg1 및 Arg2는 상기 표 6에서 기술된 바와 같은 피연산자이다. 모든 사이클 카운트는 200 MHz VLx 클록에 대한 VLx 클록 사이클에 있다.
----------------------------------------------------------------------
ADD_K(WB,R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터(대표적으로는 레지스터 파일(20) 내에서)에 대한 결과에 대해서는 2.
기능: 상수 K5 및 레지스터 R|1의 내용을 더한다.
: ADD_K(0,tbase12,0)
기술: 상기 예는 값 0 및 레지스터tbase12의 내용을 합한다. 연산의 결과는 사이클에서acc가상 레지스터(24) 내에서 사용 가능하다.
----------------------------------------------------------------------
ADD_R(WB,R|1,R|2)
사이클: 가상 레지스터 acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용 및 레지스터 R|1의 내용을 더한다.
: ADD_R(1,pctype,acc)
기술: 상기 예는 가상 레지스터acc(24)의 내용을pctype로서 기호적으로 주소지정된 내용과 더하고 그 결과를 연속하는 사이클에서 가상 레지스 터acc(24) 내에서, 및 두 개의 사이클에서 사용되는pctype레지스터 내에서 사용 가능하게 만든다.
----------------------------------------------------------------------
SUB_K(WB,R|1,K5)
사이클: 가상 레지스터acc에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 상수 K5를 레지스터 R|1의 내용으로부터 뺀다.
SUB는iszero가상 레지스터를 사용하여 상수 0을 공급하여 한 단계로 값을 부정하는데(negate) 사용될 수 있고 SUB_K(0,iszero,reg)를 사용하여 한 단계 부정을 허용함을 유의해야 한다.
: SUB_K(0,acc,1)
기술: 1을 가상 레지스터acc(24)로부터 빼고 그 결과는 다음 명령어에 대한acc(24) 내에서 사용 가능하게 만든다.
----------------------------------------------------------------------
SUB_R(WB,R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|2의 내용을 레지스터 R|1의 내용으로부터 뺀다.
: SUB_R(0,5,3)
----------------------------------------------------------------------
SHL_K(WB, R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을, K5의 비트 위치 0:3에서의 값과 같은 비트 수만큼 왼쪽으로 시프트한다. 모든 시프트 연산은 0이 빈 비트를 채우도록 시프트된다. K5의 비트 4의 값은 엔디안 교체가 시프트 연산 이전에 다음과 같이 행해질 것인지 여부를 제어한다:
K5[4]의 값=
1: 엔디안 교체, 이후 비트수=K5[3:0] 만큼 왼쪽으로 시프트
0: 비트수=K5[3:0] 만큼 왼쪽으로만 시프트
----------------------------------------------------------------------
SHL_K(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을, 색인 R|1에서 레지스터 R|2 내의 비트 위 치 0:3에서의 값과 같은 비트 수만큼 왼쪽으로 시프트한다(즉, 시 프트는 0-15 개 비트일 수 있다). 모든 시프트 연산은 0이 빈 비트를 채우도록 시프트된다. 레지스터 R|2의 내용의 비트 4의 값은 엔디안 교체가 시프트 연산 이전에 다음과 같이 행해질 것인지 여부를 제어한다:
만약 R|2 내용의 비트 4의 값 =
1: 엔디안 교체, 이후 양=R|2[3:0] 만큼 오른쪽으로 시프트
0: 양=R|2[3:0] 만큼 오른쪽으로만 시프트
----------------------------------------------------------------------
SHR_K(WB, R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을, K5 비트만큼 오른쪽으로 시프트한다. 모든 시프트 연산은 0이 빈 비트를 채우도록 시프트된다. K5의 비트 4의 값은 엔디안 교체가 시프트 연산 이전에 다음과 같이 행해질 것인지 여부를 제어한다:
K5[4]의 값=
1: 엔디안 교체, 이후 비트수=K5[3:0] 만큼 왼쪽으로 시프트
0: 비트수=K5[3:0] 만큼 왼쪽으로만 시프트
: 아래 참조
표 X
SHR_K 명령어의 예
연산 데이터 결과
1110 0000 0000 1011
SHR_K(0,acc,0b10000) 1101 0000 0000 0111 단순 엔디안 교체
SHR_K(0,acc,0b11000) 0000 0000 1101 0000 교체, 이후 8비트 오른쪽으로 시프트
SHR_K(0,acc,0b01000) 0000 0000 1110 0000 단순히 8비트 오른쪽으로 시프트
----------------------------------------------------------------------
SHR_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 사용 가능한 레지스터에 대한 결과에 대해서는 2.
기능: 색인 R|1에서 레지스터 R|1의 내용을, R|2에서 레지스터 내의 값과 같은 비트 수만큼 오른쪽으로 시프트한다. 모든 시프트 연산은 0이 빈 비트를 채우도록 시프트된다. 레지스터 R|2의 내용의 비트 4의 값은 엔디안 교체가 시프트 연산 이전에 다음과 같이 행해질 것인지 여부를 제어한다:
R|2 내용의 비트 4의 값 =
1: 엔디안 교체, 이후 양=R|2[3:0] 만큼 오른쪽으로 시프트
0: 양=R|2[3:0] 만큼 오른쪽으로만 시프트
----------------------------------------------------------------------
AND_K(WB, R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을 상수 K5와 논리적으로 AND
----------------------------------------------------------------------
AND_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을 레지스터 R12의 내용과 논리적으로 AND
----------------------------------------------------------------------
OR_K(WB, R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을 상수 K5와 논리적으로 OR
----------------------------------------------------------------------
OR_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을 레지스터 R12의 내용과 논리적으로 OR
----------------------------------------------------------------------
EXOR_K(WB, R|1,K5)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1의 내용을 상수 K5와 exclusive-OR
----------------------------------------------------------------------
EXOR_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 레지스터 R|1과 R|2의 내용을 exclusive-OR 및 결과를 누산기 내에 배치
복사 연산
----------------------------------------------------------------------
SETREG(WB, R|1,acc)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 누산기 내용을 레지스터 R|1에 복사
: SETREG(1,5,acc)
기술: 상기 예는 가상 레지스터acc(24)의 내용을 레지스터(5)에 복사한다. WB=0는 어떠한 작용도 유발하지 않으며 기능적으로NOP과 같음에 유의해야 한다.
----------------------------------------------------------------------
SET_K(K11)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: 11-비트 상수 K11을 가상 레지스터acc(24) 내에 복사
: SET_K(0b0000001000)
기술: 가상 레지스터 acc(24)를 값 0b0000001000로 설정한다.
----------------------------------------------------------------------
READ_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: R|2의 내용에 의해 주소 지정된 CM1 위치로부터 레지스터 R|1 내로 값을 판독한다.
: READ_R(W,resa,acc)
기술: 레지스터 resa 내의 값=RAM[acc] 내의 값으로 설정한다.
----------------------------------------------------------------------
WRITE_R(WB, R|1,R|2)
사이클: 가상 레지스터acc(24)에 대한 결과에 대해서는 1;
기타 다른 레지스터에 대한 결과에 대해서는 2.
기능: R|2의 내용에 의해 주소 지정된 위치에서 CM1 내로 값을 기록.
----------------------------------------------------------------------
BEQ0(K11)
사이클: 표적이 로딩될 때까지 3번 NOP.
기능: 가상 레지스터 acc(24)가 0이면 위치 K11로 분기
: BEQ0(0b000011110101)
----------------------------------------------------------------------
GOTO(K11)
사이클: 표적이 로딩될 때까지 3번 NOP.
기능: 위치 K11으로 진행
: GOTO(0b00000000011)
기술: 프로그램 카운터를 0b00000000011으로 설정
----------------------------------------------------------------------
BGT0
사이클: 표적이 로딩될 때까지 3번 NOP.
기능: 만약 가상 레지스터acc>0이면 위치 K11으로 분기
: BGTO(jumploc1)
----------------------------------------------------------------------
BRACIND(WB,R|1,K5)
사이클: 표적이 로딩될 때까지 3번 NOP.
기능: 분기 조건적 간접 명령어(Branch Conditional Indirect instruction)는 분기 조건을 제공한다. 사용자는 조건적 분기를 위해 테스트할 어떤 조건을 결정하기 위해 사용된 K5를 마스크한다. 네 개의 상호-배타적 그룹 또는 조건이 있다. 특정 조건 그룹 내에서, BRACIND 명령어는 세 개까지의 조건을 동시에 테스트한다. 동시에 테스트된 모든 조건은 분기가 취해지기 위해서는 모두 참이어야 한다. 목적지는 레지스터 파일 R|1 내에 값이 보유된 주소일 것이다. WB가 만약 설정된다면 현재의 프로그램 카운터 값이 기록될 것이다.
WB=0 만약 분기 조건이 검출되지 않으면, R|1 내용은 변경되지 않는다.
WB=1 만약 분기 조건이 검출되면, 현재 PC 값을 R|1 내에 둔다. (이것은 서브루틴 호출로부터의 리턴을 위한 설정을 허용한다).
K5: 네 개의 상호-배타적 그룹으로 구성된 값을 마스크한다. 각 값은 동시에 세 개까지의 조건을 테스트할 수 있다.
테스트 조건은 다음과 같다:
표 XI
조건 그룹 조건 이름 K5 값 조건 기술
그룹 1 C_gbpend 00100 어떤 IO 버스 이벤트(event)이 진행중인지 여부
C_gbloopp 00010 예약된-특수 기능
C_dts 00001 DTS 연속이 허용되는지 여부
그룹 2 C_gbstall 01100 GetBits 엔진이 중지되었는지 여부
C_eq0 01010 현재 결과=0인지 여부
C_4eq0 01001 현재 결과의 가장 오른쪽 4비트=0인지 여부
그룹 3 C_always 10100 항상 분기를 취함
C_8eq0 10010 현재 결과의 가장 오른쪽 8비트=0인지 여부
C_lsb 10001 레지스터 파일 입력이 !=0인지 여부
그룹 4 C_gbstall2 11100 Gbstall과 동일
C_lt0 11010 현재 값<0 여부
C_gt0 11001 현재 값>0 여부
다음 연산은 동시에 테스트될 수 있다:
· C-gbpend, C_gbloop, C_dts
· C_gbstall, C_eq0, C_4eq0
· C_always, C_8eq0, C_lsb
· C_gbstall2, C_lt0, C_gt0
동시 테스팅을 특정하는 방법은 상응하는 비트가 적절히 설정될 것을 요구한다. 예를 들면, C_neq0는 항상 정의된다. 이는 C_lt0 및 C_gt0에 대한 비트의 or'ing이다.
기술: BRACIND 사용의 일부 예는:
gb의 상태를 체크하는 것이다. 만약 GB가 준비되어 있지 않으면 중지 핸들러 루틴(stall handler routine)을 요청한다.
서브루틴 호출로부터 리터닝(상기 라인 내 루틴 참조).
목적지 주소를 미리 계산하고 이를 이용하여 프로그램 흐름을 제어한다.
----------------------------------------------------------------------
READ_GB_K(WB, K1,K2)
사이클: K1 값에 따라서, 4 사이클. G_hwmot의 K1 값은 이후 8 사이클까지 결과가 사용되지 않는 것을 유발한다.
기능: K1 및 K2의 값을 GB 엔진(18)에 보낸다.
----------------------------------------------------------------------
READ_GB_R(0,K1,R|2)
사이클: K1 값에 따라서, 4-8 사이클.
모든 프로그래머-제어된 구성 및 GB 엔진(18)의 제어는 GB 엔진(18)에 직접적으로 16-비트 제어 워드를 기록하는 CPU(16)에 의해 행해진다. 이것은 이 값을 사용하여 다음을 행한다:
· GB(18) 작동 모드를 설정한다
· 새로운 기호가 처리되도록 한다
GB 엔진(18) 결과는 가상 레지스터를 통해 CPU(16)에 의해 액세스된다. 이런 식으로 액세스될 수 있는 데이터 유형에는 다음과 같은 것이 포함된다:
· 가상 레지스터symbol(36)에 있는 기호 버퍼 내용(16 비트)
· 가상 레지스터nzero(도 2에 도시되지 않음) 내에 있는 선행하는 0/1의 개수
GetBits 코맨드 인자(Command Arguments)
상기에서 언급된 바와 같이, GB 엔진(18)은 두 개의 명령어, READ_GB_K 및 READ_GB_R을 사용하여 제어된다. 모든 GetBits 활동은 첫 번째 인자 플러스 요구된 유형의 2차 인자로서의 상수에 의해 제어된다.
아래의 표는 코맨드를 열거한다.
표 XII
GetBits 코맨드
어셈블러 기호 참조(K1 값) K2 또는 R|2 값 의미
G_dct 0 DCT 연산
G_revsym len 입력 비트스트림 len 비트를 전진시키고, 다음 16 비트를 가상 레지스터 기호 내에서 역전된 비트와 함께 리턴시키고, 가상 레지스터nzero내의 선행 0 또는 1을 카운트한다.
G_getsym len 입력 비트스트림 len 비트를 전진시키고, 레지스터 기호 내의다음 16 비트를 리턴시키고, 가상 레지스터nzero내의 선행 0 또는 1을 카운트한다.
G_align mask 입력 및/또는 출력 비트스트림을 바이트 경계 상에 정렬시킨다. 마스크 값은 입력 또는 출력 또는 두 비트스트림 모두 정렬되는지를 특정한다. 출력 비트스트림의 정렬은 절단(truncation)을 유발한다.
G_setopt G_setopt 기술 참조 GB 옵션을 설정
G_splice num 데이터의 num 비트를 출력 비트스트림 내로 스플라이스한다.
G_hwacc G_hwacc 기술을 참조 현재 기호 값 해석을 위해 특정 하드웨어 가속화된 표를 사용
G_adv2 unused 입력 스트림을 이전의 G_hwacc, G_hwmot, G_hwlum, 또는 G_hwchr 기능에서 계산된 길이만큼 시프트한다.
G_write 0..15 I/O 채널 정보를 판독 또는 설정한다
G_write
G_write는 데이터 스트리머 버퍼(도 1)가 입력 및 출력 요청 및 입력 및 출력 처리의 현재 상태에 의해 영향받는 지에 대해 GB 엔진(18)의 구성을 설정하고판독한다.
'1'의 값이 제 2 연산(K2 또는 R|2 값)으로서 공급될 때, 데이터 스트리머 버퍼 구성 정보는 GB 엔진(18)에 기록된다. '0'의 값이 제 2 연산으로서 공급될 때, 이 정보에 대한 GB 엔진(18)의 현재의 구성은symbol레지스터(36)에 리턴된다.
기록될 값은 VLx 명령어 스트림 내의 READ_GB_x에 연속하는 명령어의 디코딩된 R|1 값으로부터 취해진다. 이 값은 다음과 같이 해석된다:
비트 15-만약 설정되면, 입력 스트림이 시프트될 때 출력을 발생시키지 않는다.
비트 14-만약 설정되면, 출력 비트스트림이 출력 버퍼(44)에 기록되는 것을 허용한다.
비트 13-만약 설정되면, 비트 12에서 특정된 것만 카운트한다. 이것은 선행 1 또는 0의 카운팅에도 적용된다. 만약 클리어되면(clear), 이것은 이러한 카운팅을 발생하도록 하는 GetBits 연산을 위한 가상 레지스터nzero내에서 선행하는 다수의 1 또는 0(현재 기호 내의 값에 따라서)이 카운트되고 리턴될 것인지를 특정한다.
비트 12-만약 비트 13이 설정되면, 이것은 비트 12가 클리어되면 선행 0 만을 카운트하고, 아니면 선행 1만을 카운트하도록 특정한다.
비트 11:6-입력 스트림이 인출되어지는 DS 버퍼 ID
비트 5:0-출력 스트림이 보내지는 DS 버퍼 ID.
예를 들면, 다음 예는 입력 및 출력 스트림의 구성을 보여준다:
#구성 정보는 오프셋 L_GBDATA에 있다.
SET_K(L_GBDATA);
#이 구성을 레지스터tmp3내로 판독 입력한다
READ_R(W,tmp3,acc);
# RAM 연산에 대해 1 사이클 지연
NOP(0,tmp3,tmp3);
# 구성 정보를 기록한다.
READ_GB_K(0,G_write,1); # 값 0을 기록한다. 값 1을 판독한다
ADD_R(0,tmp3,tmp3); # G_write 에 대한 포트를 설정한다.
ADD_R(0,tmp3,tmp3); # G_write 에 대한 포트를 설정한다.
ADD_R(0,tmp3,tmp3); # G_write 에 대한 포트를 설정한다.
G_setopt
G_setopt 코맨드는 GB 엔진(18)의 모드를 구성한다. 이는 기호 처리에 대해 1 또는 0을 카운트할지, 및 입력 또는 출력 I/O가 가능한지와 같은 GB 엔진(18) 정보를 말해준다. 구성 정보는 K2 또는 R|2의 값으로서 넘겨진다.
구성은 특수한 비트의 설정에 의존한다:
비트 5: 0으로 설정
비트 4: 만약 1로 설정되면 DCT 처리 모드 강제
비트 3: 선행 비트 0 또는 1로서 카운트할 어떤 것
비트 2: 만약 0이면, 0 또는 1 모두를 카운트: 만약 1이면 비트 3에 있는 것만 카운트
비트 1: 만약 1이면, 더 이상의 입력 스트림을 입력 버퍼(42) 내로 판독 입력하지 않는다
비트 0: 만약 1이면, 어떠한 출력도 출력 버퍼(44)에 발생시키지 않는다
예를 들면, 다음의 예는 GetBits의 구성을 보여준다.
READ_GB_K(0,G_setopt,0b00101); # 출력을 기록한다. 0을 카운트한다
G_revsym
K2 또는*R|2 비트를 입력 버퍼(42)로부터 시프트한다. 입력 버퍼(42) 내의 다음 16 비트를 가상 레지스터symbol(36) 내로 비트 역전된 순서로 리턴한다.
G_getsym
K2 또는*R|2 비트를 입력 버퍼(42)로부터 다음 기호로서 시프트한다. 다음 16 비트를 가상 레지스터symbol(36) 내에서 현재 기호로서 리턴한다.
G_align
입력 스트림 또는 출력 스트림 또는 둘 모두를 가장 가까운 바이트 정렬에 대해 정렬하고, 만약 이미 정렬되지 않은 경우 출력에 대해 절단 또는 입력에 대해 재-판독을 하도록 한다. 이 명령어를 사용하기 전에 패딩 비트를 스플라이스하는 것이 출력에 대한 데이터의 손실이 없기 위해서 추천된다.
K2 또는*R|2는 입력 또는 출력 또는 모두를 정렬할 것인지 특정한다.
비트 1: 만약 설정되면, 출력 비트스트림을 정렬한다
비트 0: 만약 설정되면, 입력 비트스트림을 정렬한다
G_splice
특정된 수의 비트로 특정된 값으로부터 출력 비트스트림 내로 스플라이스한다. K2 또는 *R12는 출력 스트림 내로 스플라이스될 비트수를 특정한다.
스플라이스 데이터는 READ_GB_x에 바로 연속하는 명령어의 결과에 의해 GB 엔진(18)에 공급된다. GetBits는 이 데이터를 비트 15에서 최초로 시작하여 최상위 비트로 스플라이스한다.
예를 들면, 다음의 예는 출력 스트림 내로의 데이터 스플라이싱을 보여준다:
READ_GB_K(0,G_splice,16); # 16 개 0을 스플라이스한다
SET_K(0); # 값은 0이다
예 2:
READ_GB_K(0,G_splice,4); # 결과로부터 4 비트를 스플라이스한다
ADD_K(0,sdata,0); # 데이터를 제공하는데 ALU 연산을 사용
예 3:
READ_GB_R(0,G_splice,encsym); # 스플라이스 len이 하위 5비트임
SHR_K(0,encsym,8); # 데이터로부터 길이를 이동
7.5.4.2.1 G_dct
이것은 기호의 DCT 처리에 대한 것이다. GB 엔진(18)에 의해 수행된 활동은여러 사이클에서 발생한다.
G_hwacc
G_hwacc 함수는 GB 엔진(18)이 특정된 하드웨어 가속화된 MPEG2 표에 대항하여 가상 레지스터symbol값을 디코딩하고 그 표의 값을 리턴하도록 하게 한다:
K2 또는 R2 값 가상 레지스터 symbol (36) 내의 리턴된 값
G_hwchr 비트 3:0는 디코딩된 기호의 길이를 포함한다비트 15:4는 가상 레지스터 symbol(36) 내의 가변 길이 코드에 상응하는 dct_dc_size_크로미넌스 값을 UIMSB 순서(비트역전된)로 포함한다.
G_hwlum 비트 3:0는 디코딩된 기호의 길이를 포함한다비트 15:4는 가상 레지스터 symbol(36) 내의 가변 길이 코드에 상응하는 dct_dc_size_luminance 값을 UIMSB 순서(비트역전된)로 포함한다.
G_hwmot 비트 7:0은 가상레지스터 symbol(36) 내의 가변 길이 코드를 디코딩하기 위한 이동 코드 값인 부호있는(signed) 정수 값을 포함한다비트 15:8은 UIMSB 순서(비트역전된)로 상기 운동 잔류값을 포함한다. 이동 잔류 길이는 READ_GB_x(0,G_hwacc,G_hwmot)를 뒤따르는 3-6번째 명령어의 결과로서 GB 엔진(18)에 공급된다.
G_nzpa 비트 4:0은 현재 가상 레지스터 symbol 값을 취하는 결과를 포함하고, 가상 레지스터 nzero에 의해 특정화된 비트수를 +1만큼 시프트한다. 단지 기호의 다음 5 개 비트만이 가상레지스터 symbol(36) 내에 리턴된다.
G_mbi 비트 4:0은 디코딩된 기호의 길이를 포함하고비트 10:5는 가상 레지스터 symbol(36)의 현재 값을 가변 길이 코드로서 사용하여 I-픽처에 대해 해석되는 macroblock_type을 포함한다.
G_mbp 비트 4:0은 디코딩된 기호의 길이를 포함하고비트 10:5는 가상 레지스터 symbol(36)의 현재 값을 가변 길이 코드로서 사용하여 P-픽처에 대해 해석되는 macroblock_type을 포함한다.
G_mbb 비트 4:0은 디코딩된 기호의 길이를 포함하고비트 10:5는 가상 레지스터 symbol(36)의 현재 값을 가변 길이 코드로서 사용하여 B-픽처에 대해 해석되는 macroblock_type을 포함한다.
G_mai 비트 4:0은 디코딩된 기호의 길이를 포함하고비트 10:5는 가상 레지스터 symbol(36)의 현재 값을 가변 길이 코드로서 사용하여 macroblock_address_increment를 포함한다.
G_cbp 비트 4:0은 디코딩된 기호의 길이를 포함하고비트 10:5는 가상 레지스터 symbol(36)의 현재 값을 가변 길이 코드로서 사용하여 coded_block_pattern을 포함한다.
G_adv2
입력 스트림을, 이전의 G_hwacc, G_hwmot, G_hwlum, 또는 G_hwchr 값의 결과로서 계산된 값에 의해 전진시킨다. 다음 16 비트는 가상 레지스터 symbol 값으로서 리턴된다.
----------------------------------------------------------------------
IOIF(W,R|1,K5)
사이클: 1
기능: 이 코맨드는 발행 지시문을 외부 장치로 보내고 CPU 내부 중 일부를 제어하는데 주로 사용된다.(IO 플러스 내부 인터페이스)
: IOIF 명령어는 두가지로 사용될 수 있다; 모드는 K5 피연산자의 값에 의해 다음과 같이 선택된다:
K5=2: DsContinue를 수행한다
K5=5: Fastbranch 연산을 수행한다
DsContiue: DsContinue 모드에 대해, R|1은 DTS Continue가 보내어지는 DataStreamer 채널 ID를 표시하는 6비트 값이어야 한다
IOIF.고속분기: 고속분기 연산은 CPU가 자신의 명령어 버퍼만을 사용하여 적절히 반복하는 것을 허용한다. 이는 명령어를 위한 RAM에 대한 호출을 제거하고 또한 루프의 선단에 비-지연 분기를 제공한다. 이 모드를 위해, 제어 값이 IOIF 명령어 수행 이전에 누산기 내에 배치되어야 한다. 이 제어 값은 루프 크기를 정의한다.
IOIF 고속분기의 예:
6 개의 명령어를 실행하는 루프에 대해, 코드는 다음과 같이 특정될 필요가 있다:
-----------------------------------------------------------------------
NOP(0,0,0)
사이클: 1
기능: 이 명령어는 No-Op를 제공한다.
:NOP(0,0,0).(피연산자는 0이 아닐 수 있다)
기술: 어떠한 가시적 연산도 수행되지 않는다.
DCT MODE
VLx 프로세서(12)의 GB 엔진(18)은 극히 효율적인 가변 길이 기호 파싱(parsing)을 할 수 있다. 이는 다음과 같은 작용을 한다:
각 가변 길이 기호는 다수의 선행 0 또는 선행 1의 기준으로 분류된다. 선행 0 또는 1 사이의 선택은 미리 결정되고 GB 엔진(18)에 대한 옵션으로서 설정된다.
가변 길이 디코드(Variable Length Decode, VLD) 조사 표(Lookup Tables, LUTs)(도 2에 도시되지 않음)는 이후 기호 그룹마다 하나의 LUT로써 설정된다(즉, 0을 선행하는 0을 갖는 모든 기호에 대해 하나의 LUT, 1을 선행하는 1을 갖는 모든 기호에 대해 하나의 LUT, 1을 선행하는 2를 갖는 모든 기호에 대해 하나의 LUT-등). MPEG 비디오에 대해, 가변 길이 기호가 실행 및 레벨 쌍을 나타내는데 사용되고, 이것은 또한 DCT 계수로 처리될 수 있다. MPEG2의 경우, 요구되는 13개의 서로 다른 그룹이 있다(즉 13 개의 서로 다른 LUT). 이들 tbase 레지스터는 13 개의 서로 다른 LUT의 주소에 설정되지 않으면 안된다. 각 tbase 레지스터는 다음 방식으로 설정되어야 한다;
비트 15=>1: 0 개의 선행 1 또는 0
0: 1 또는 그 이상의 선행 0 또는 1
비트 14-11: 상응하는 LUT 내의 요소의 수의 로그 밑 2
비트 10:0: CM1 내의 LUT의 주소
표 자체는 특수한 방식으로 설정된다. 이것은 다음 예에 의해 가장 잘 기술된다:
만약 두 개의 선행 0을 갖는 모든 기호를 찾는다면, 다음을 갖는다:
0100s
011s
0101s
여기서 s는 기호를 따르는 부호 비트이다(디코딩된 DCT 계수의 부호에 따라 0 또는 1일 수 있다)
선행 0이후, 항상 하나의 1이 있다. 이 1은 중복이기 때문에 LUT 내에 표시될 필요가 없다. GB(18)는 이 중복 1을 지나친 기호만을 자동적으로 조사할 것이다. 또한 부호 비트는 LUT를 통해 디코딩되지 않고 단지 표로부터 판독된 후 추가된다. LUT 내의 엔트리의 수는 그룹에서 가장 긴 기호를 조사함으로써 결정된다. 중복 1 및 부호 비트 사이의 비트는 비트-역전되고 이후 GB(18)에 의해 LUT 내로의색인으로서 사용된다. 본 예에서, 가장 긴 기호는 0100s이다. 중복 1 및 부호 비트 사이에는 2 개의 비트가 있다. 1개의 선행 0을 갖는 기호에 대한 LUT는 2-비트 색인(즉 4 개의 엔트리가 있음)을 가질 것이다. 표를 구성할 때, 가장 긴 기호보다 더 짧은 모든 기호는 돈 케어 비트(don't care bit)로 패딩되어야만 한다. 본 예에서 다음을 갖는다:
0100s
011sx
0101s
LUT 내의 각 엔트리는 16 비트이고 실행, 레벨 및 기호 길이를 인코딩하고, 이는 기호에 상응한다. 실행은 5비트로 인코딩되고, 레벨은 6 비트, 길이는 5 비트로 인코딩된다. 그러므로 이 경우 실제 LUT는 다음과 같다:
LUT INDEX 0: 0000000001000101 # 실행=0 레벨=2 길이=5 # 기호=0100s
LUT INDEX 1: 0000100000100100 # 실행=1 레벨=1 길이=4 # 기호=011s
LUT INDEX 2: 0001000000100101 # 실행=2 레벨=1 길이=5 # 기호=0101s
LUT INDEX 3: 0000100000100100 # 실행=1 레벨=1 길이=4 # 기호=011s
더 짧은 기호(예를 들어, 011)는 돈 케어 비트(don't care bit)의 패딩으로 인해 표 내에서 복사됨에 유의해야 한다.
일단 모든 표가 설정되면, GB(18)이 기호를 파싱(parse)할 준비가 된다. DCT 모드(READ_GB_K 또는 BRACIND 명령어 통해)로 들어가면, GB(18)가 비트스트림을 조사하고, 선행 0(하나의 1)의 수를 결정한다. GB(18)는 이후 선행 0의 수에기초하여 어떤 LUT를 사용할지를 결정한다. 선택된 LUT에 상응하는 tbase 레지스터(도 2에 도시되지 않음)는 LUT 주소 및 기호 내에 얼마나 많은 비트가 LUT 색인으로서 사용되는지를 계산하는데 사용된다. 이 색인은 이후 추출되고 비트 역전된다. 최종 LUT 색인은 이후 조사표를 만드는데 사용된다. 이후에 조사 결과를 이용하여 실행 및 레벨 레지스터가 디코딩된 기호에 상응하는 올바른 실행 및 레벨 값으로 드라이브시킨다. 길이 값을 이용하여 부호 비트를 추출하고 dct 부호 레지스터가 부호 비트의 값으로 드라이브시킨다. 마지막으로, 길이 값을 이용하여 비트스트림을 새로운 기호로 전진시킨다.
Escape 코드 및 EOB는 레벨을 0으로 설정함으로써 표시된다. 만약 GB(18)이 BRACIND 명령어를 통해 DCT 모드를 들어가면, 이후 분기는 레벨이 0일 때만 실질적으로 유효하다. 이런 식으로, DCT 타이트 루프는 루프 외부로의 분기가 EOB 또는 escape 코드에 의해 발생하도록 설정될 수 있다.
상술한 내용으로부터, 비록 본 발명의 특정 실시예가 예시적 목적으로 기술되었지만, 본 발명의 사상 및 범위를 벗어나지 않고 다양한 수정이 행해질 수 있음을 이해할 것이다.
부록 A
제 2장 가변 길이 디코드/인코드 유닛
1. 요약
본 장은 Map1000의 가변 길이 디코더/인코더 유닛(VLx)을 설명한다. Vlx는 가변 길이 인코딩된 데이터를 갖는 비트스트림을 해석 또는 생성하기 위해 최적화된 프로그램 가능 유닛이다.
Vlx는 Map1000 코어에 대한 VLIW 처리 특성을 보충한다. 이는 양호한 성능으로 MPEG 또는 JPEG에 사용되는 비트스트림의 처리 또는 생성시에 매우 효율적이다.
본 문서에서, Vlx 구조 및 명령어 세트가 설명된다.
2. 소개
본 장은 비트스트림의 생성 또는 처리를 다루는 Map1000의 가변 길이 인코드/디코드(VLx) 유닛의 설명을 제공한다. VLx 유닛은 16 비트 CPU, 매우 큰 비트 시프터로서 기능하는 -- GetBits 엔진 -- I/O 장치, 및 Map1000 VLIW 코어와 공유될 수 있는 코프로세서 메모리로의 액세스로 구성되어 있다.
2.1 용어 및 표기법의 정의
다음의 표기법은 본 장에서 자주 사용된다.
acc최종 산술 또는 논리 명령의 결과를 보유하는 VLx 가상 레지스터
산술 코딩무손실 데이터 압축 기술
CMMAP1000 코프로세서 메모리; VLx는 코프로세서 메모리 뱅크 1을 사용한다
CPU간단한 산술 및 논리 연산, 제어 연산, 로드/저장 연산, 및 GB와의 상호 작용을 지원하는 VLx의 중앙 처리 장치
DCT 계수특정 코사인 베이스 함수의 진폭; VLx는 MPEG2 디코드의 일부로 MPEG 비트스트림으로부터 이 계수들을 추출하도록 프로그램될 수 있다
DSMap1000 데이터 스트리머
고속분기VLx CPU는 명령 버퍼 내에서 이미 명령어들을 루핑하고 CM으로부터 명령어 선인출을 행하지 않는다
FFUMAP1000 코프로세서 유닛; VLx는 3차원 그래픽 가속기와 함께 CM1의 사용을 공유한다
GBGetBits 엔진; 큰 비트시프터로 작용하고 MPEG2 디코드 특징을 전문화한 VLx의 I/O 장치부
JPEG사진 전문가의 연합 모임
HDTV고 화질 TV
후프만 코딩무손실 데이터 압축 기술
MP@ML메인 레벨에서의 메인 프로파일; 프로파일 및 레벨은 MPEG2 구문과 의미론의 서브셋의 식별, 및 VBV를 통한 비트율을 제공한다; MP@ML 제약 조건에 대한 H.262를 참조
MPEG동화상 전문가 그룹
MPEG2ITU H.262 또는 ISO/IEC 13818-2를 참조
레지스터범용 레지스터
RF32 16-비트 범용 레지스터를 포함하고 있는 VLx 레지스터 파일
기호비트스트림 내의 주어진 문맥에서 의미를 갖는 가변 길이 비트 시퀀스; VLC를 참조; VLC에서 선택적으로 보여질 수 있는 I/O 입력 버퍼의 제 1의 16 비트인 VLx 가상 레지스터는 GB 연산에 따라 표현된다
tbase 레지스터DCT 처리용 GB에 의해 사용되는 소프트웨어 테이블에 대한 색인을 보유하는 범용 레지스터. 레지스터 r0:r12는 tbase 레지스터이다
가상 레지스터GetBits 엔진 또는 CPU의 어떠한 상태에 대한 뷰(view)인 읽기 전용 레지스터 값; 뷰는 명령어 실행에 의해 수정된다
VBV비디오 버퍼링 검증기; 인코더가 생성하거나 디코더가 소비하는 데이터율의 가변성에 제약 조건을 주는 버퍼
VLC가변 길이 코딩; 보다 짧은 코드-워드를 빈번한 이벤트에 그리고 보다 긴 코드-워드를 덜 빈번한 이벤트에 할당하는 코딩하기 위한 가역 프로시저
VLd가변 길이 디코드
VLe가변 길이 인코드
VLxMAP1000 가변 길이 디코드/인코드 유닛
2.2 참조 목록
· [MPEG2]ITU-T H.262 또는 ISO 13818-2정보 기술 - 동화상 및 관련 오디오 정보의 포괄 코딩: 비디오
· [MPEG4 CD]ISO/IEC 14496-2정보 기술 - 오디오-비주얼 오브젝트: 비주얼
2.3 설계 원리
VLx 엔진은 MPEG 비트스트림에서 발견되는 것과 같은 가변 길이 코딩된 기호를 디코딩 또는 인코딩하는데 MAP1000을 지원하도록 설계된다. 이 디코드/인코드 프로세스는 본래 순차적이다. 비트스트림 내의 각 기호 또는 구조는 자신을 선행하는 기호로부터 그 해석을 취한다. 각 기호를 구성하는 비트의 수는 문맥에 기초하여 공지된priori이거나, 또는 기호 값 자신을 선행하는 비트스트림 내에서의 길이 값으로서 인코딩된다. 예를 들면, 다음 숫자는 MPEG2 비트스트림의 추출을 보여준다:
'...0000 0000 0000 0000 0000 0001 0000 1101 0011...'
'0000 0000 0000 0000 0000'b 시작 코드 접두사
'01'b 슬라이스 시작 코드, 매크로블록 형, 또는 문맥에 따라 기타 다수 개의 해석
'00'b 픽처 시작 코드, 1의 휘도 값, 0의 크로미넌스, 또는 문맥에 따라 다수 개의 기타 해석
'10'b B-픽처 내의 매크로블록 형, 2의 크로미넌스 값, 또는 문맥에 따라다수 개의 기타 해석
'110'b 4의 휘도 값, 3의 크로미넌스 값, 0 실행, 레벨 2의 DCT 계수 값, 문맥에 따라 기타 다수 개의 해석
도 2-1 MPEG2 기호 값의 예
실행-길이 인코딩, 후프만 인코딩 또는 산술 인코딩과 같은 데이터 압축 스킴은 데이터를 무손실 방식으로 압축하기 위해 값의 순서를 나타내는 가변 길이 코드를 사용한다. MPEG2와 같은 비디오 압축 표준은 전송 이전에 데이터를 압축하는(인코드) 이들 기술을 사용하고, 전송 후 데이터를 압축해제(디코드)한다.
VLx는 MPEG 비트스트림 내에서와 같은 가변 길이 데이터를 인코딩 또는 디코딩하는 처리 전용 프로그램 가능 엔진이다. 프로그램 가능 속성은 인코더 또는 코더 프로그램이 새로운 특징 또는 용도를 지원하도록 여러 번 기록되거나 적용되는 것을 허용한다. VLx는 다수 비트스트림을 처리하고 Map 1000 VLIW 코어와의 통신에서 유용성을 부여한다. 효율적인 처리는 가변 길이 데이터를 처리에서 임계 루프를 최소화하는 하드웨어를 설계함으로써 달성된다. 부가하여 특수 목적 하드웨어는 MPEG2 디코드 기능을 지원한다.
HDTV MPEG 비트스트림 디코딩과 같은 작업용으로 다음 형의 활동을 수행하도록 프로그래밍될 수 있다
· MPEG 비트스트림을 예비처리하여 스트림의 더 높은 레벨 문장 구조를 정의하는 구조를 작성한다: 픽처, 슬라이스, 매크로블록, 등
· DCT 계수를 디코딩한다
· 비트스트림을 필터링한다
· MPEG 비트스트림을 생성한다
설계 의도를 다음 조건을 취급하는 것이다:
·8 메가비트 VBV 내로 HDTV MGEG 스트림을 19.4 메가비트/초로 미리 파싱(preparsing)
· HDTV를 MP@ML 해상도로 디스플레이하도록 십진화된 계수를 발생시킴
· MP@ML에서 MPEG 스트림의 인코딩 및 디코딩을 동시에 취급
· 다중 스트림을 동시에 취급
2.4 특징/주요 기능적 특성
VLx 특성은 다음 표 및 섹션에서 요약된다.
성분 기능
16 비트 CPU 코프로세서 메모리(CM1)로부터 판독된 VLx 명령어를 처리함
명령어 선인출 버퍼 8 개의 16-비트 명령어 보유
레지스터 파일 32 개의 16-비트 레지스터; 이들 중 일부는 진정한 범용 레지스터; 이들 중 일부는 CPU 및 GB 사이에도 공유됨
가상 레지스터 CPU, GB 입력 버피 및 CM 로드 스테이징 영역의 특수 상태의 읽기 전용 뷰
I/O 버퍼 I/O 버스를 통한 데이터 전송용 버퍼; I/O 전송은 4 바이트 품질이다
GetBits 엔진 I/O 버스를 통해 송수신된 데이터를 처리한 논리적으로 큰 시프터; 또한 특이적 MPEG2 VLC에 대한 하드웨어-인코드 값의 리턴을 위한 특수 목적 하드웨어를 포함한다
메모리 코프로세서 메모리(CM1)에 대한 최적화된 액세스 경로, VLx 가 작동 중일 때 다른 어떠한 FFU 유닛이 CM1을 사용하지 않을 것을 요구(FFU에 대한 기타 외부적 유닛은 CM1을 계속 액세스할 수 있지만, VLx는 우선적인 액세스를 갖는다)
3. 배경
비디오 디코드 프로세스는 비디오 프레임을 코딩된 비트스트림으로부터 재구성한다. 이 프로세스는 순차적 처리를 취급하는 VLx용 프로그램(예를 들면, DCT 계수의 비트스트림 파싱 또는 디코딩)을 개발하고 디코드 프로세스의 기타 부분을 취급하는 하나 또는 그 이상의 VLIW 코어 프로그램에 대해 이를 사용함으로써 행해진다.
디코더 프로그램 실행을 갖는 VLx는 코딩된 비트스트림의 첫 번째 소비자 중의 하나이다. 비트스트림은 미리 파싱되어서 MPEG2 픽처, 슬라이스 또는 매크로블록과 같은 고 레벨 문장 구조가 해석될 수 있다. VLx MPEG2 디코더 프로그램에 대해, 이것은 입력 비트스트림을 통한 시프팅 및 VLIW 프로그램과 공유될 수 있는 결과적인 더 높은 문장 구조를 생성하는 문제이다.
VLx는 또한 DCT 계수 디코딩 및 GetBits 엔진 내의 특수 목적 기능을 통한 기타 MPEG2 표 조사 기능을 지원한다.
3.1 Map 1000 내의 VLx의 구조 위치
Map1000 내에 기타 요소를 갖는 VLx의 중요한 접속은 아래(도면)와 같다:
도 3-1. Map1000 구조 내의 VLx
4. VLx 개요
이 섹션은 VLx의 고-레벨 체계를 소개하고 주요 성분을 식별 및 요약한다. VLx 내부 구조 및 연산은 이 요소의 복잡성으로 인해 별도의 섹션에서 논의된다.
4.1 VLx 내부 체계
다음 다이어그램은 VLx 유닛의 고-레벨 내부 구조를 보여준다.
도 4-1.VLx 유닛의 상위-레벨 체계
4.2 VLx 성분의 개요
VLx는 16-비트 프로세서 및 VLx CPU와 통신하고 I/O 장치로서도 작용하는 GetBits 엔진으로 구성된다. CPU 및 GetPits 엔진은 32 개의 범용 레지스터의 레지스터 파일에 대한 액세스를 갖는다. CPU는 명령어 선인출 연산 및 로드/스토아 연산 모두에 대해 CM을 액세스할 수 있다. GetBits 엔진은 I/O 버스 상에서 데이터를 소모 및 생성 모두를 할 수 있다.
4.2.1 레지스터
VLx CPU는 32 개의 16-비트 레지스터:r0:r31 상에서 동작한다. 이들 32개의 레지스터 중, VLx CPU 및 GB는 특수 표 처리용의 13 개의 레지스터(r0:r12)에 대한액세스를 공유한다. 네 개의 범용 레지스터(r0:r3)를 갖는 주소 지정 포트를 공유하는 가상 레지스터도 있다. 이들 레지스터는 명령어 처리의 부작용으로서 변화할 수 있는 기계의 어떤 상태에 대한 뷰라는 점에서 읽기 전용이다.
4.2.1.1 명령어 내의 레지스터 규격
두 개의 레지스터까지는 명령어 내에서 특정될 수 있다. 제 1 레지스터는 R1로 명명된다. 제 2 레지스터는, 특정된다면 R2로 명명된다. 레지스터의 위치설정은 가상 레지스터 규격의 해석을 결정한다.
R1 레지스터는 명령어의 재기록 버전이 사용된다면 결과적인 재기록에 대한 목적지이다. 결과는 명령어를 뒤따르는 사이클에서acc가상 레지스터 내에서 또한 사용 가능하다.
4.2.1.2 범용 레지스터
범용 레지스터 r4:r31은 명령어에 의해 판독 및 기록될 수 있다. 레지스터 r0:r3은 가상 레지스터와 주소 포트를 공유한다. 이들 네 개의 일반 레지스터는RAM 판독(ld.w) 명령에 의해서 기록될 수만 있다. 이들 레지스터 위치를 판독하기 위한 어떠한 시도는 가상 레지스터 값을 판독하는 결과를 초래한다. GB는 범용 레지스터 r0:r3은 DCT 처리의 일부로서 판독할 수 있다.
레지스터 재기록에 대해 한번의 사이클 지연이 있다. 이것은 레지스터 내용이 수정된 레지스터에 대한 것이고acc가상 레지스터 내의 다음 명령어에 대해서만 사용 가능함을 의미한다.
4.2.1.3 가상 레지스터
가상 레지스터는 네 개의 범용 레지스터(r0:r3)를 갖는 주소 지정 포트를 공유한다. 이는 만약 이들 레지스터가 VLx CPU에 의해 액세스되면, 사용된 값이 기계의 어떤 상태로부터 생성되는 것이지 범용 레지스터로부터 생성되는 것이 아님을 의미한다.
가상 레지스터는 기록될 수 없다. 가상 레지스터에 대한 재기록은 가상 레지스터 포트를 공유하는 범용 레지스터가 기록되는 것을 유발한다. VLx 어셈블러는 이름에 의해 가상 레지스터를 인식하고 이들 가상 레지스터에 대한 기록 또는 재기록 연산 시도를 플래그한다.
4.2.1.4 GB에 의한 범용 레지스터의 사용
GB는 DCT 처리 모드에서 레지스터 r0:r12를 사용한다. GB가 이들 레지스터를 액세스할 때, 레지스터 파일에 대한 VLx CPU의 액세스는 레지스터 파일 충돌을초래한다. 그러므로, VLx CPU는 그 사이클 동안 레지스터 파일에 대한 액세스를 허용받지 못한다. 레지스터 r0:r12는 GB에 의해 판독되어 DCT 계수 처리에 대한 적절한 조사 표가 주소 지정될 수 있다. DCT 처리에 대한 예시적 코드는 이러한 충돌을 회피하도록 설계된다.
4.2.1.5 레지스터 요약
다음 표는 레지스터 용도의 요약을 예시한다. R1 및 R2 위치는 26쪽,VLx 명령어 세트, 섹션 5에 기술되어 있다.
레지스터 가상 레지스터 의사 기호 DCT 처리에 대한 표 기초로서 GB에 의해 사용되었는지 여부 R1 위치일 때의 값 R2 위치일 때의 값
r0 acc 최종 ALU 결과 최종 ALU 결과
r1 dctSign, run GBsign?0:(RF[r25]<10:5>)<<1 최종 CM 로드 값 플러스 1의 비트 15:11의 값
r2 symbol GB 모드에 의해 해석되는 GB 입력 버퍼의 첫 번째 16비트 GB 모드에 의해 해석되는 GB 입력 버퍼의 첫 번째 16비트
r3 isZero, nZero ALU 명령어에 대해 0 symbol내의 선행 0 또는 1비트의 GB 카운트
r4..r12 RF[레지스터] RF[레지스터]
r13..r24 RF[레지스터] RF[레지스터]
r25 lev RF[레지스터] call.dct가 사용된 경우 최종 CM 로드 값의 비트 10:5의 값
r26..r32 RF[레지스터] RF[레지스터]
표 4-1 레지스터 요약
4.2.2 코프로세서 메모리
VLx는 FFU 내에 위치한 코프로세서 메모리를 사용한다. MAP1000에 대해, 이것은 4K 영역의 메모리이다. FFU 3D 제어 레지스터가 vld_mode 일 때, VLx는 메모리 요청(64-비트 명령어 선인출 또는 16 비트 로드/스토아)에 대해 한 사이클 반환(turn-around)을 갖고 메모리 뱅크는 3D 유닛과 같은 기타 다른 FFU에 의해 사용될 수 없다.
이 메모리 영역은 FFU 3D 제어 레지스터가 vld_mode 일 때, DS 또는 PIO 제어기와 같은 FFU 외부 블록에 대해서만 액세스할 수 있다. VLx 요청은 다른 FFU 외부 블록 요청에 대해 우선권을 갖는다.
VLx는 16-비트 양으로 CM1을 주소 지정하고, 여기서 다수의 0은 코프로세서 메모리 뱅크 내의 첫 번째 16-비트 위치를 특정한다.
4.2.3 VLx CPU
VLx CPU는 상술된 32 개의 16-비트 레지스터 상에서 단순 산술 연산(더하기, 빼기, 시프트)을 지원하는 16-비트 프로세서이다. CPU는 CM으로부터/내로 로드/스토아를 또한 개시할 수 있다. 특수 명령어가 GB를 제어한다. CPU에 대한 클록은 VLx PIO 레지스터 설정을 통해 중지/시작될 수 있다.
CPU는 명령어 버퍼 내로 선인출된 명령어를 연속적으로 처리한다. 명령어 버퍼는 두 개의 4 개 명령어 양으로 8 개의 16-비트 명령어를 보유한다. CPU는 분기의 경우를 제외하고 명령 파이프라인의 정지를 제때에 방지하거나 또는 세 개의 연속적인 로드/스토아 연산이 제 때에 사용되기 위한 명령어 선인출을 방해할 때 4개의 16-비트 명령어의 명령어 선인출을 개시한다. CPU(16)의 특정 모드(고속분기)는 CPU가 명령어 버퍼 내에서 명령어를 루프 수행하는 것을 허용하고 어떠한 명령어도 선인출하지 않는다.
VLx는 PIO 리셋에 의해 CM1의 시작부(CM1 베이스로부터 오프셋 0)에서 명령어 실행을 시작하고 VLx 클록은 인에이블된다. 명령어는 한 사이클마다 디코딩되고 이후 실행되며, 산술 또는 논리 연산에 대한 명령어 실행의 결과는 다음 사이클의 가상 레지스터acc에서 사용 가능하다. 선택적인 레지스터 재기록이 다음 사이클에서 행해진다.
VLx CPU 파이프라인은 다음 표에 설명된 바와 같이 3단계를 갖는다:
R/D 명령어 디코드, 레지스터 판독
EX 명령어 실행
WB [선택적] 결과 재기록
표 4-2 VLx CPU 파이프라인
명령어 선인출은 분기가 발생하지 않는 한 매 4 사이클 내에서 한번씩 발생하여 진행한다. 분기의 경우, 표적 명령어 및 연이어서 그 명령어 버퍼를 채우는 명령어에 대한 명령어 선인출이 두 개의 연속적인 사이클에서 잠재적으로 발생할 것이다. 분기 도중 CPU 파이프라인은 분기 표적이 계산되고, CM으로부터 판독되고 이후 디코딩됨에 따라 3 사이클 동안 처리를 지속한다.
VLx 명령어는 섹션 5에서 기술된다. 명령어는 다음의 카테고리로 나뉜다
· 더하기, 빼기, and, or, xor, 좌측 시프트, 우측 시프트, 및 엔디안 교체(endian swap)와 같은 산술, 논리, 및 시프팅 연산
· 분기 연산, goto, 조건적 분기, 신속 분기
· GB 제어 연산
· CM1 로드/TM토아 연산
4.2.4 GetBits 엔진
GetBits 엔진은 대형 비트 시프터 및 I/O 장치 모두로서 작용한다. GB는 비트스트림 내의 가변 길이 코드 워드의 인코딩 또는 디코딩을 돕도록 설계된다. 부가적으로, GB는 MPEG2 비트스트림의 부분의 해석에 대한 특수한 논리를 가져서 이동 벡터의 DCT 계수 추출 또는 생성을 보조한다.
GetBits 엔진은 다음의 능력을 갖는다:
· I/O 입력 비트스트림으로부터 입력되는 비트(DS를 통해 수신된)에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는 GetBits 엔진에 의해 MPEG2 비트를 인접한 순서로 유지하여 GB(18)가 거대 시프터로서 작용할 수 있다.
· I/O 출력 비트스트림으로부터의 송신 비트(DS로 송신된)에 대해 바이트 당 비트 역전(a per byte bit reversal)을 수행한다. 이는 VLIW 프로그램과의 상호작용에 대한 적절한 엔디안(endianness)을 보존한다.
· I/O 입력 스트림으로부터의 데이터를 시프트-인시켜 이 데이터의 제 1의 16비트를 프로그램에 의해 사용되기 위해symbol가상 레지스터에서 사용 가능하게 한다.
·symbol가상 레지스터 내에 저장된 값의 뷰(view)를 엔디안교체한다(endian swap).
· 제한된 세트의 하드웨어 인코딩된 MPEG2 표 내에서 결과 값을 조사하기 위해symbol가상 레지스터 내에 저장된 현재 값을 사용하고, 이후 표 값을symbol값으로서 리턴한다.
· 레지스터 0:12와 공동으로 현재symbol값을 사용하여 CM1의 주소를symbol값으로서 리턴한다.
· 데이터를 출력 스트림 내로 스플라이스한다.
· 비트스트림 I/O상태 정보를 저장 및 복원하여 기타 I/O 비트스트림 쌍이 취급될 수 있게 한다.
GetBits 엔진(GB)은 VLx CPU에 의해 제어된다. CPU는 연산 및 두 개까지의 피연산자를 특정함으로써 GB를 제어한다. 연산은 VLx 명령 내의 K1 피연산자로서 특정된다. 제 1 GB 피연산자는 위치 K1에서 VLx 명령 내의 GB 명령으로부터 직접 생성된다. 연산 유형에 기초한 임의의 제 2 GB 피연산자는 명령의 K2 또는 R2 피연산자 값으로부터 취해진다. 어떤 GB 연산은 추가적인 정보를 요구한다. 이 정보는 GB 연산을 포함하는 것에 바로 뒤이어 오는 VLx 명령의acc가상 레지스터 내에서 가시적으로 만들어진 최종 ALU 결과 상태로부터 생성될 수 있다.
GB 파이프라인은 GB 연산에 따라 달라진다. 파이프라인에는 한 쌍의 변형체(variants)가 있다. 제 1 파이프라인은 비트가 입력 버퍼(42)로부터 시프트될 때의 것이다. 제 2 파이프라인은 출력 버퍼(44) 내로 비트를 스플라이스하기 위한 것이다. 제 3 파이프라인은 GB 구성을 저장/기록하기 위한 것이다. 제 4 파이프라인은 하드웨어-가속화된 표 조사 값을 위한 것이다. 이들은 파이프라인의 각 상태가 고유 자원을 조작하지 않는다는 점에서 진정한 파이프라인은 아니다. 대신, GB 연산은 지연 시간이 2 - 4 사이클로서 뷰되어져야 한다.
디코드 VLx CPU 지시문을 수신 및 디코딩함
겟 GBSign 비트시프트 길이에 기초하여,dctSign결정에 사용되는 Gbsign을 결정함
시프트 및 카운트 GB 시프트 연산의 경우, 적절한 수의 비트를 입력 버퍼로부터 시프트함; 업데이트된symbol값을 산출; GB가 구성된 방식에 따라 선행 1 또는 0 비트의 수를 카운트함; 업데이트된nZero값을 산출함. 이는 소모된 비트를 출력 버퍼(44) 내로 선택적으로 스플라이스할 수 있다.
DCT 조사 만약 DCT 모드인 경우, tbase[nZero] 레지스터를 판독하고 표 색인을 계산함; 업데이트된symbol값을 산출함. 24쪽의 "DCT 처리"를 참조.
표 4-3 GB 비트 시프트 연산 파이프라인
4.2.4.1 I/O 인터페이스
DMA 버스는 DS 버퍼로부터 GetBits 엔진 내로 비트스트림을 이동시키기 위한 주요 수단이다. GetBits 엔진은 버스 상에서 두 개의 슬롯-입력용 하나, 출력용 하나-을 사용한다. 데이터를 공급하고 소모할 수 있는 DS 버퍼는 GB로 구성될 수 있다.
하나의 입력 버퍼 및 하나의 출력 버퍼가 있다. GB 엔진 입력이 허가되면, GB는 네 개의 바이트 판독 요청을 만들고, 입력 버퍼 내에 공간이 있고 소모될 데이터가 있는 한 DS 버퍼로부터의 데이터를 소모한다. 바이트 당 비트 역전은 비트 가 입력 버퍼 내에 놓여져 있는 한 하드웨어 내에서 발생함으로써 비트스트림 인접을 유지한다. GB 연산이 VLx 프로그램 명령의 결과 실행됨에 따라, 입력 버퍼 내의 비트는 입력 버퍼로부터 시프트 아웃된다. 다른 네 개의 바이트 전송용 공간이입력 버퍼 내에 존재하는 순간, 다른 요청이 DS에 대해 행해진다.
GB는 입력을 허가하도록 구성되면 입력 데이터만을 처리할 수 있을 뿐이고, 입력 버퍼 내에 비처리된 충분한 양의 비트가 있고, 출력 버퍼 내에는(만약 출력이 또한 허가된다면) 공간이 있다. VLx 프로그램은 I/O에 대한 GB를 구성하고, 비트를 소모 또는 생성하는 GB 연산을 발행하기 이전에 충분한 비트 또는 공간이 있는지를 검사하는 책임이 있다.
출력은 데이터의 명백한 배치를 통해(예를 들면 출력 비트스트림 내로의 스플라이싱) 또는 시프팅의 부작용으로서 입력 버퍼 내의 기호(필터링 또는 예비 파싱)를 통해 출력 버퍼에 발생된다. 출력은 GB가 출력에 대해 구성되고 더 많은 비트를 쓸 충분한 자유 공간이 출력 버퍼 내에 있을 때에만 발생될 수 있다. 출력 버퍼 내에 송신할 최소한 네 개의 바이트 워드가 있을 때, GB는 DMA 버스를 통해 DS에 대해 네 개의 바이트 전송을 개시할 것이다. DMA 기록 완료시 바이트 당 비트 역전이 발생된다.
MAP 1000의 경우, 입력 버퍼(42) 크기는 112 비트이다. 출력 버퍼 크기는 92 비트이다. 40 개의 비트가 판독되었을 때 시프팅하기 위한 충분한 입력 데이터가 입력 버퍼 내에 존재한다. 출력 버퍼는 GB 출력 연산이 연속적으로 실행하기 위해 최소한 21 개의 비트용 공간을 가져야만 한다.
4.2.4.2 GetBits 구성
GB I/O는 VLx 프로그램에 의해 구성된다. 이 프로그램은 입력 또는 출력이 인에이블되었는지, 만일 그렇다면 어느 DS 버퍼로부터 또는 어느 DS 버퍼인지를 표시한다. 프로그램은 현재의 구성을 재생하는 능력을 갖는데, 이 구성은 I/O가 허가되는지 및 어느 DS 버퍼가 포함되는지 뿐만 아니라 입력 또는 출력 버퍼의 현재 상태(예를 들면, 버퍼 내의 비트 및 현재 비트 색인)까지 포함한다.
이것은 VLx 프로그램이 특정 DS 버퍼와의 상호작용에 대한 상태를 교체 또는 복원하는 것을 허용한다. 예를 들면, 만일 두 개의 버퍼가 각 비트스트림의 처리에 대해 사용되는 경우(입력에 대해 하나, 출력에 대해 하나), 다중 비트스트림의 동시 처리를 지원하기 위해 편리한 지점(예를 들면, 픽처 사이)에서 GB 상태를 교체(CM에 대해 저장 상태 및 CM으로부터 복원 상태)함으로써 다중 비트스트림이 지원될 수 있다.
4.2.4.3 GetBits 모드
GB는 다중 모드 연산을 지원한다. 첫 번째는 비트의 직선적 소모이다(선택적으로, 소모된 비트를 출력 버퍼로 넘겨주면서). 이에 대한 파이프라인은 19쪽의 표 4-3, "GB 비트 시프트 연산 파이프라인"에서 발견될 수 있다. 가상 레지스터symbol,dctSignnZero의 값은 영향받을 수 있다. 만약 GB가 DCT 계수를 처리한 다면(DCT 처리), GB는 파이프라인의 DCT 조사 단계에서 tbase 레지스터를 판독하기 위해 레지스터 파일을 액세스할 것이다.
연산의 두 번째 모드는 비트가 명백히 출력 버퍼 내로 푸싱되거나 스플라이싱되는 것이다. 이 모드 도중, 입력 버퍼 내에는 아무런 변화가 없다. 출력 버퍼 내로 스플라이싱된 비트는 발생할 I/O 기록이 출력 임계치가 크로스되도록 하면 이I/O 기록을 트리거할 수 있다. 이 모드의 연산을 위한 GB 관련 가상 레지스터의 상태에 대한 어떠한 변화도 없다.
디코드 스플라이스 연산 VLx CPU 지시문을 수신 및 디코드
Get 스플라이스 길이 이는 GB 연산에 대해 R2 또는 K2로부터 생성된다
비트 내의 스플라이스 스플라이스할 비트가 가상 레지스터acc로부터 취해지고, 그 비트의 수를 MSB 순서(비트 15 먼저)로 출력 버퍼 내로 스플라이싱
표 4-4 스플라이스 파이프라인
세 번째 모드의 연산은 GB 자체의 구성을 취급하는 것이다. 이 모드에서, 스플라이스의 경우와 같이, 제 2 피연산자,acc값은 GB에 의해 선택적으로 사용된다. 이 세 번째 모드에서, GB는 DS 버퍼가 I/O 버스를 통하여 상호작용하도록 구성될 수 있다. 특정 비트스트림에 대한 I/O 상태는 판독되거나 복원될 수 있다. 이 스토아/복원은 I/O의 완전한 상태를 보존하기 위해 전체적으로 행해져야만 한다는 것에 유의해야 한다. 또 다른 구성 선택은 입력 및/또는 출력 버퍼의 현재 비트 위치를 바이트 정렬된 경계로 이동시킴으로써(0을 입력 버퍼 내로 패딩하고, 출력 버퍼 상에서 절단) 입력 및/또는 출력 버퍼의 현재 비트 위치를 변경시키는 것이다.symbol값은 GB I/O 상태가 수정될 때 영향을 받는다.
디코드 VLx CPU 지시문을 수신 및 디코딩
GB 옵션을 구성 특정된 대로 옵션을 설정
선행 0 또는 1 비트를 카운트 nZero는 옵션 설정이 카운트된 것을 수정할 때 변경
DCT 조사 만약 DCT 모드인 경우, tbase[nZero] 레지스터를 판독하고 표 색인을 계산;업데이트된symbol값을 산출
표 4-5 GB I/O 설정 파이프라인
디코드 VLx CPU 지시문을 수신 및 디코딩
상태 저장 저장할 상태는 GB 연산에 대해 R2 또는 K2로부터 오고, 저장된 상태 정보는 R2 또는 K2 값 플러스 1. 상태는symbol레지스터에서 사용 가능하도록 만들어진다. 표 4-7 참조
새 상태를 기록(write) GB 연산에 바로 연속하는 명령어의 R1 피연산자의 값을 GB에 대한 상태 정보로서 기록
표 4-6 GB I/O 상태 교체 파이프라인
VLx GB I/O 상태는 표 4-7에 도시되어 있다.
GB 피연산자 1 기록된 GB I/O 상태 GB symbol 결과
0 ---- GB 제어 상태
1 GB 제어 상태 출력 버퍼제어
2 출력 버퍼 제어 불투명(I/O 버퍼 데이터)
3,13 불투명(I/O 버퍼 데이터) 불투명(I/O 버퍼 데이터)
14 불투명(I/O 버퍼 데이터) 입력 버퍼 제어
15 입력 버퍼 제어 GB 제어 상태
표 4-7 VLx GB I/O 상태
GB I/O 상태는 다음을 포함한다
· GB 제어 상태:nZero에 대해 카운트된 선행 0 또는 1, 선행 0 또는 1, 또는 모두만을 카운팅, 입력 소스에 대한 DS 버퍼 색인, 출력 표적에 대한 DS 버퍼 색인(47쪽, 표 5-23 "GB 제어 비트" 참조)
· 출력 버퍼 제어: 출력 버퍼 내의 비트 위치를 출력으로서 자동적으로 생성(47쪽 표 5-24, "GB 출력 버퍼 제어" 참조)
· 출력 버퍼 내의 비트
· 입력 버퍼 내의 비트
· 입력 버퍼 제어: 입력 버퍼 내의 비트 위치
네 번째 처리 모드는 현재의symbol값이 주어진 특정 MPEG2 표 값의 조사를 위해 GB 하드웨어 내에서 지원된다. 이것은 23쪽, 섹션 4.2.4.4, MPEG2 하드웨어가속화된 처리에 기술되어 있다.
4.2.4.4 MPEG2 하드웨어 가속화된 처리
거대 비트시프터 및 I/O 장치로서의 작용에 부가하여, GB는 MPEG2 비트스트림의 가속화된 처리를 지원한다. 먼저, GB는 DCT 계수 추출 모드를 지원한다. 이 모드 도중, GB는 DCT 계수 표로부터 실행, 레벨 정보를 결정하기 위해 소프트웨어 데이터 표 내에서 조사를 할 수 있다. 이것은 tbase 레지스터(GB 및 CPU에 의해 공유된 범용 레지스터)의 개시 및 CM 내의 VLC 인코딩된 데이터 표의 조합을 사용하여 행해진다. 더욱 상세한 설명을 위해, 24쪽 섹션 4.2.4.5,DCT 처리참조.
다른 특수 MPEG2는 다음에 대한 VLC에 상응하는 적절한 값의 조사를 지원하는 하드웨어 표를 포함한다.
· dct_dc_size_luminance
· dct_dc_size_chrominance
· coded_block_pattern
· macroblock_address_increment
· macroblock_type in I_pictures
· macroblock_type in B-pictures
이들 하드웨어 가속화된 조사 기능에 대해,symbol값은 입력 버퍼의 첫 번째 16 비트가 아닌, 표의 값으로부터 그 형태를 취한다. 이것은 49쪽섹션 5.8.4 GB MPEG2 하드웨어 표 조사 연산, 및 53쪽섹션 5.8.5, GB DCT 연산참조.
4.2.4.5 DCT 처리
GB가 DCT 계수를 처리할 때, GB는 시프팅 연산으로부터 결정된symbol값을 사용하여 적절한 소프트웨어 표(표 0-MPEG2 B. 14, 또는 표 1- MPEG2 B.15를 지원하는)에 대한 조사를 발생시키고, 적절한 표 엔트리의 CM 주소가 GB 모드가 또 다른 GB 연산에 의해 리셋될 때까지symbol값으로서 사용 가능하게 만든다.
차이는 처리의 DCT 조사 단계이다(19쪽, 표 4-3, "GB 비트 시프트 연산 파이프라인" 참조). 이 처리 단계 동안, GB는
·nZero의 값에 의해 표시된 레지스터를 판독한다. 이것은tbase레지스터이다.nZero값은 0 및 12 사이의 값이다. 만약 값이 0이면, tbase0(r0)가 GB에 의해 사용된다. 만약 값이 12이면, tbase12(r12)가 사용된다. 유사하게, 적절한 레지스터가 사이 값에 대해 사용된다.
· tbase 레지스터에 저장된 값은 세 개의 필드로서 해석된다: tskip, tkeep 및 tbase으로서 해석된다.
15 14:11 10:0
tskip tkeep tbase
Tbase는 적절하게 선행 1 또는 0의nZero수를 갖는 모든 VLC에 대한 하위표 용 기본 주소인 CM 내의 위치에 대한 포인터이다.Tkeep은 얼마나 많은 기호가 선행 서명:tkeepMask를 벗어나서 검사되는지를 식별하는데, 여기서 설정된 비트의 수는 tkeep 값에 의해 특정된다. Tskip은 첫 번째 비트가 표 오프셋을 계산할 때 카운트되는지를 식별한다. 하위표는 선행 0 또는 1을 단지 포함하지만, 둘 다를 포함하지는 않고, 첫 번째 비트는 비트의 카운트에서 무시된다. 이것은 하위 표의 크기를 양분한다.
nzero 1=(1 또는 0 비트 카운팅)?nZero:(nZero==0)?1:nZero) (등식 1)
· 리턴된 것을symbol값으로서 갖는 값은 아래와 같다.
symbol=tbase+((symbol>>(nzero 1 +tskip))&tkeepMask(등식 2)
주의: 등식의 오른쪽의symbol값은 입력 버퍼의 첫 번째 16비트로부터 생성된다.symbol가상 레지스터 내의 마지막 결과는 문제의 VLC에 대한 표 엔트리 값을 판독하는데 사용될 수 있다. 입력 버퍼의 첫 번째 16 비트는 연산에서의 이 계산에 의해 변경되지 않는다. 이들은 GB의 모드에 의해 단지 해석된다.
MPEG2 표 0 미 표 1을 지원하는 표의 설정은 60쪽 섹션 6.4,DCT 표 설정에서 기술된다.
5. VLx 명령어 세트
VLx CPU는 16-비트 프로세서이다. 모든 명령어 워드는 16 비트이다. 모든 명령어 포맷에 대해, 5-비트 필드는 연산 유형을 표시한다. 연산 유형에 따라, 다음과 같은 것이 있다
· 1-비트 재기록 표시기, 및 5-비트 레지스터 피연산자, 또는
· 1-비트 재기록 표시기, 하나의 5-비트 레지스터 피연산자 및 하나의 5-비트 상수 값, 또는
· 1-비트 재기록 표시기 및 5-비트 상수 값 및 하나의 5-비트 레지스터 피연산자, 또는
· 1-비트 재기록 표시기 및 두 개의 5-비트 상수, 또는
· 하나의 11 비트 상수 값.
이것은 다음 표에서 요약된다.
도 5-1 VLx 명령어 포맷
R1 및 R2는 범용 레지스터 또는 가상 레지스터를 식별하는 레지스터 주소이다. K1 및 K2는 상수이다. K11은 11 비트 상수이다. Wb는 만약 설정되면, R1이 결과적인 재기록에 대한 목적지 레지스터임을 표시한다.
주의: 재기록에 대한 목적지는 항상 범용 레지스터(r0:r31)이고, 결코 포트를 공유하는 가상 레지스터가 아니다. 예를 들면,add.w acc, r13은 r0=* acc+*r13이 된다.
5.1 표기법 및 기타 규칙
VLx 명령어는 다음이 형이다:
instr[.w][R1][R2|K2]
instr K11
macro(R2|K2)
instr명령어를 특정함
macroGB를 표적으로 하는 명령어, 또는 택일적 소스로부터의 피연산자를 취하는 명령어에 대한 택일적 형태를 특정함
.w2번의 사이클 지연을 있으면서 R1 내에서 특정된 레지스터에 재기록되는 결과를 표시
R1레지스터 소스 피연산자, 선택적으로 목적지 결과
R2레지스터 소스 피연산자
K25 비트 상수 소스 피연산자
K1111 비트 상수 소스 피연산자
* R1R1에 의해 특정된 레지스터 내에 포함된 값
* R2R2에 의해 특정된 레지스터 내에 포함된 값
CM[x]특정된 코프로세서 메모리 위치에서의 16-비트 값, 여기서 x는 코프로세서 메모리의 시작부로부터의 16-비트 주소 지정 오프셋임. x 값은*R1,*R2, K2 또는 K11일 수 있음.
&CM[x]x에 의해 특정된 코프로세서 메모리 내의 위치
5.1.1 예시적 연산
명령어 워드에 대한 비트 설정이 첫 번째 표에 도시되어 있다.
이 예에 대해서, 명령어 연산 코드는 0의 5-비트 값이고,nop명령어를 표시한다. 재기록 필드는 1 또는 0의 값을 갖는다. 만약 값이 1이면, 연산의 결과는 R1에 의해 명명된 5-비트 레지스터 주소에 의해 표시된 범용 레지스터 내로 기록된다.
명령어 디코드 사이클 명령어 실행 사이클 명령어 재기록 사이클
example.w R1,R2 acc=example result R1=*acc
표 5-1 예시적 명령
명령어는 표의 형태로 나타내어진다. 왼쪽 칼럼은 명령어이다. 명령어를 뒤따르는 칼럼의 수는 수정된 레지스터 내용이 사용 가능한 사이클을 표시한다. 예를 들면,example명령에 대해, 새로운 값이 1 사이클의 지연 후acc레지스터 내에서 사용 가능하고, 한편 그 값은 연속한 사이클에 대해 R1 레지스터 내에서 사용 가능하다.
5.2 No 연산
5.2.1 nop
표 5-2 단일 사이클 no 연산
no 연산이 수행된다. 선택적으로, 레지스터 포트 값이 설정된다.
5.3 레지스터 설정 연산
5.3.1 가상 레지스터 acc 를 11 비트 상수로 설정
표 5-3 가상 레지스터 acc 설정
가상 레지스터acc를 11 비트 상수에 의해 특정된 값으로 설정한다.
5.3.2 범용 레지스터를 acc 의 내용으로 설정
표 5-4 범용 레지스터 설정
R1에 의해 특정된 범용 레지스터를 가상 레지스터acc값으로써 설정한다. 이 값은 2 사이클 후 레지스터 내에서 사용 가능할 것이다.
5.4 산술 및 논리 연산
5.4.1 더하기
표 5-5 더하기
더하기 결과는 다음 명령어에 대한 가상 레지스터acc또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다.
5.4.2 빼기
표 5-6 빼기
빼기 결과는 다음 명령어에 대한 가상 레지스터acc내에서 또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다.
5.4.3 Bitwise 논리 AND
표 5-7 bitwise 논리 AND
R1, R2 및 상수 K2의 내용은 16 비트 불리언 문자열로서 취급된다. 논리적 AND 결과는 다음 명령어에 대한 가상 레지스터acc또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다.
5.4.4 bitwise 논리 OR
표 5-8 bitwise 논리 OR
R1, R2 및 상수 K2의 내용은 16 비트 부울 문자열로서 취급된다. 논리적 AND 결과는 다음 명령어에 대한 가상 레지스터acc또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다.
5.4.5 bitwise 논리 배타적 OR
표 5-9 bitwise 논리 배타적 OR
R1, R2 및 상수 K2의 내용은 16 비트 부울 문자열로서 취급된다. 논리 배타적 OR 결과는 다음 명령어에 대한 가상 레지스터acc또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다.
5.4.6 선택적 엔디안 교체, bitwise 왼쪽 시프트
표 5-10 왼쪽 비트 시프트 이전에 선택적 엔디안 교체
만약*R2 또는 K2의 비트 4가 설정되면*R1은 엔디안 역전된다. 비트 3:0은 왼쪽 시프트 양을 특정한다. 시프트 결과는 다음 명령어에 대한 가상 레지스터acc또는 두 사이클 후 결과의 레지스터 내에서 사용 가능하다. 비어있는 비트 위치는 0 값을 갖는 비트로 채워진다.
5.4.7 선택적 엔디안 교체, Bitwise 오른쪽 시프트
표5-11 왼쪽 비트 시프트 이전에 선택적 엔디안 교체 R1
만약*R2 또는 K2의 비트 4가 설정되면,*R1은 엔디안 역전된다. 비트 3:0은 오른쪽 시프트 양을 특정한다. 시프트 결과는 다음 명령을 위한 가상 레지스터 acc에서, 또는 두 개의 사이클 후 결과적인 레지스터 내에서 사용 가능하다. 비어있는 비트 위치는 0으로 매겨진 비트로 채워진다.
5.5 코프로세서 메모리 참조 연산
코프로세서 메모리는 VLx로부터 16-비트 양으로 주소 지정된다. 로드 표적 및 스토아 목적지는 코프로세서 메모리의 시작부로부터의 오프셋 내에서 특정된다.
5.5.1 로드
표5-12 코프로세서 메모리로부터의 로드
코프로세서 메모리로부터 로딩된 16-비트 값은 2 사이클 후에 최종 레지스터에서 사용 가능하다. 재기록 없는Id는 스테이징(staging) 영역 CM의 상태에만 영향을 미치고, 부작용으로서, 이는runlev가상 레지스터의 값이 변경되는 것을 초래하지만, 다른 유용한 것은 발생하지 않는다. 만약 재기록 비트가 설정되면, 로딩된 값은 R1 레지스터 내로 실제로 로딩된다.
5.5.2 스토아
표 5-13 코프로세서 메모리에 스토아
이 명령어는 R1로 지정된 레지스터 내의 값을 R2의 값으로 지정된 주소의 메모리 위치에 기록한다.
5.6 분기 연산
분기 연산은 명령어 스트림의 수행에서 세 개의 사이클이 지연되는 것을 유발한다(마치 세 개의nop연산이 삽입 된 것처럼; GB 연산이 진행을 계속한다). 이에 대한 예외는 고속분기인데, 고속분기는 명령어 버퍼 내에서 미리 명령어에 대해 루프한다.
5.6.1 Goto
디코드 실행 재기록
goto K11 64 비트 명령어 인출을 &CM[K11&~0x3]에 발행 &CM[K11]에서 명령어 디코드
표 5-14 Goto
이것은 K|1에 의해 지정된 표적 주소에 대한 비조건적 분기이다.
5.6.2 0과 같은 가상 레지스터 acc 값에 기초한 분기
디코드 실행 재기록
br.acceq0 K11 만약(acc==0)이면,64 비트 명령어 인출을 &CM[K11&~0x3]에 발행 &CM[K11]에서 명령어 디코드
표 5-15 0과 같은 acc 값에 대한 분기
이것은 가상 레지스터acc의 상대에 기초한 K|1에 의해 지정된 표적 주소에 대한 조건적 분기이다. 만약acc값이 0과 같으면 분기가 일어난다.
5.6.3 0과 같은 가상 레지스터 acc 값에 기초한 분기
디코드 실행 재기록
br.accgt0 K11 만약(acc>0)이면 64 비트 명령어 인출을 &CM[K11&~0x3]에 발행 &CM[K11]에서 명령어 디코드
표 5-16 0보다 큰 acc 값에 대한 분기
이것은 가상 레지스터acc의 상대에 기초한 K|1에 의해 지정된 표적 주소에 대한 조건적 분기이다. 만약acc값이 0보다 크면, 분기가 일어난다.acc값은 부호화된 16-비트 값으로서 취급됨을 유의해야 한다.
5.6.4 복잡한 조건 분기
디코드 실행 재기록
br R1, K2 만약(K2 조건){분기 표적=*R1;acc=*R1&0x3; 64 비트 명령어 인출을 &CM[acc]에 발행 &CM[분기 표적]에서 명령어 디코드
call R1, K2 만약(K2 조건){분기 표적=*R1; acc=*R1&0x3; 64 비트 명령어 인출을 &CM[acc]에 발행 &CM[분기 표적]에서 명령어 디코드
이것은 다수 개의 조건의 수 중 하나가 참인 것에 기초하여*R1에 의해 특정된 표적 주소에 대한 조건적 분기이다. 조합은 K2를 마스크로서 처리함으로써 특정될 수 있다. 동일한 뱅크 내의 어떠한 조건 세트도 동시에 체크될 수 있다.이들은 표 5-17, "brai 조건들"로 기술되어 있다.
표 5-17 brai 조건들
acc가 0과 같지 않으면(accne0) '11011'b의 K2 값으로써 분기가 달성될 수 있음에 유의해야 한다.
5.6.5 고속분기
디코드 실행 재기록
ioif R1,fastbranch 명령어 선인출을 턴오프하고, 고속분기 표적을 루프 오프셋하도록 설정
표5-18 고속분기
고속분기는 1-8 개의 명령어 루프로서, 모든 명령어가 명령어 버퍼 내에 있고, 그리하여 루프의 시작으로 리턴하는데 지연이 없고, 진행하는 명령어 선인출이 없다. 상기 루프는ioif명령어로서 설정된다. 코드 스트림 내의 명령어는 루프의 최종 명령어가 블록의 말단에 있으면서, 8 개의 명령어 블록 내에서 정렬될 필요가 있다.ioif는 VLx CPU를 고속분기 모드로 설정하고, 시작 위치를 루프의 시작을 위한 명령어 버퍼 내로 특정하는데 사용된다. 시작 위치는*R1으로서 특정된다. 시작 위치는 다음 식에 따라서 어셈블러 또는 프로그래머에 의해 미리 계산된다:
(4*내부루프오프셋)+2(등식 3)
식 중 내부 루프 오프셋은 정렬된 8 개의 명령어 블록 내의 명령이 루프의 최초 1이에 상응하는 수이다. 0의 내부 루프 오프셋 값은 정렬된 8개의 명령어 블록 내의 최초 명령어를 표시한다.
유의: 컴파일러 지원은 이 정렬 발행을 숨길 수 있다. 예를 들면,고속분기{instr..instr}생성은 적절히 놓여질 수 있는데, 여기서 포함된 명령어는 적절히 정렬되고,ioif 고속분기는 명령어 스트림 내로 삽입된다.
5.7 DS 연산
5.7.1 DsContinue
디코드 실행 재기록
ioif R1,dscontinue *R1로지정된 DS 채널에 대한 DsContinue를 보냄
표 5-19 DsContinue
이 명령은*R1으로 특정된 채널 인식자에 대해 DS에 DsContinue 요청을 보낸다. 이 연산을 발행하기 전에 이 채널이 중지되었는지를 VLx 프로그램이 체크하는 방법은 없다.dtsbusy분기는 이 연산 발행 이전에 체크되어야만 하는데 왜냐하면 다른 DsContinue가 VLx에 대해 진동되는 도중 VLx에 의해 발생된 DsContinue는 채널 인식자가 중복-기록되어 하나의 DsContinue가 DS에 대해 발행되는 것을 유발한다.
5.8 GB 연산
GetBits 연산은 VLx CPU로부터 GB로 발행된다. 연산을 GB에 명백히 넘기는데 사용되는 두 개의 명령이 있다:gb. K1 피연산자는 GB 연산에 대해 직접 번역한다.
디코드 실행 재기록
gb K1,K2 K1에 의해 지정된 GB 연산을 K2와 함께 GB 피연산자로서 GB에 보냄; GB는GBsign을 결정함. GB 연산 특이 GB 연산 특이
gb K1,R2 K2 대신*R2를 사용하여 상기 참조 상기 참조 상기 참조
표 5-20 gb 연산
K2 또는*R2는 GB 연산에 대한 인자이다. MPEG2 표 조사 기능에 대해, K1 피연산자는 이들 표 중의 하나가 요청되도록 하드웨어 가속화된 조사표를 특정한다. K2 또는*R2 피연산자는 어떤 표가 사용되는 지를 특정한다.
5.8.1 GB 시프팅 연산
GB K1 의사 기호 K1 값
----------------------
G_GETSYM 0b00011
G_REVSYM 0b00001
G_ADV2 0b10100
디코드 Exe/GB sign 재기록/GB 시프트 & 카운트
gb G_GETSYM,K2 gb G_GETSYM,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자로서 GB에 보냄; GB는GBsign을 결정함;GBsigndctSign값에 영향을 미침 GB는 K2 또는*R2에서 특정된 길이 만큼 입력 버퍼를 시프트함; 새로운nZero가 결정되고,symbol값은 시프트 양이 0보다 큰 경우 수정됨;symbol에 대한 GB 모드는 입력 버퍼로서의symbol값을 나타낸다.
gb G_GETSYM,K2 gb G_GETSYM,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자로서 GB에 보냄; GB는GBsign을 결정함;GBsigndctSign값에 영향을 미침 GB는 K2 또는*R2에서 특정된 길이 만큼 입력 버퍼를 시프트함; 새로운nZero가 결정되고,symbol값은 시프트 양이 0보다 큰 경우 수정됨;symbol에 대한 GB 모드는 변경될 때까지 역전 비트 순서로symbol값을 나타낸다.
gb G_GETSYM,K2 gb G_GETSYM,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자로서 GB에 보냄; GB는GBsign을 결정함;GBsigndctSign값에 영향을 미침 GB는 최종 GB 하드웨어 가속화된 조사 표 값에 의해 설정된 내부 레지스터 내에 유지된 길이 만큼 입력 버퍼를 시프트함; 새로운nZero가 결정되고,symbol값은 시프트 양이 0보다 큰 경우 수정됨;symbol에 대한 GB 모드는 역전 비트 순서로symbol값을 나타낸다.
GB는 프로그램 제어 하에서 입력 버퍼 내에서 비트를 소모한다. 가상 레지스터가 영향받을 때에 대한 파이프라인은 도 4-3 "GB 비트 시프트 연산 파이프라인"에 기술되어 있다.
symbol값은 입력 버퍼 색인의 현재 위치로부터 다음 16비트이다. 예를 들면, 다음 표는 비트스트림 내의 비트에 따라 어떤 값이 나타내어지는지를 보여준다. 1 및 0 비트는 'sv0 v1 v2'의 값에 뒤이은 VLC 0b'00001'을 나타낸다. 입력 스트림으로부터 VLC 및 그 값을 시프팅하는 것은 10비트가 소모되는 것을 유발할 것이다 - VLC, 그 값 및 부호 비트.
표 5-21 기호 예
5.8.2 GB 스플라이싱 연산
GB K1 의사 기호 K1 값
----------------------------
G_SPLICE 0b01111
디코드 Exe/GB 재기록/GB 스플라이스
gb G_SPLICE,K2 gb G_SPLICE,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자-길이로서 GB에 보냄 acc&lengthMask로부터 최상위 비트 제 1 순서로 출력 버퍼 내로 길이로 스플라이스 하고 여기서 lengthMask는 특정된 길이에 대해 하나의 비트 세트를 가짐
스플라이싱 연산은 출력 버퍼의 상태를 변경시킬 뿐이다.dctSign, symbolnZero와 같은 가상 레지스터는 최상위 비트로부터 최하위 비트 순서로acc값을 소트 비트스트림으로 사용하여 출력 스트림 내로 스플라이스된다.
5.8.3 GB 구성 연산
GB K1 의사 기호 K1 값
---------------------------
G_ALIGN 0b01000
G_SETOPT 0b01100
G_WRITE 0b11000
디코드 Exe/GB 재기록/GB 스플라이스
gb G_ALIGN,K2 gb G_ALIGN,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자-ioBitMask로서 GB에 보냄 만약 (ioBitMask&0x1)이면,입력 버퍼 위치를 바이트 정렬 상에 정렬함. 이것은 입력 바이트 스트림이 정렬되지 않고symbol값이 수정된 경우 이전 비트를 재생하도록 할 것이다.만약 (ioBitMask&0x2)이면,출력 버퍼 위치를 바이트 정렬 상에 정렬함. 이것은 출력 스트림이 가장 근접한 바이트 정렬에 대해 절단되도록 할 것이다. 출력 비트를 잃지 않기 위해, 프로그래머는 출력 버퍼를 정렬하기 이전에 7 개의 0-값 비트를 스플라이스하는 것을 선택할 수 있을 것이다. 이것은 0-패드로서 작용할 것이다.
gb G_SETOPT,K2 gb G_SETOPT,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자로서 GB에 보냄 0, 1 또는 두 선행 비트 모두를 카운트할지, 및 I/O가 허가되는지를 GB에게 고함. 피연산자용 비트 값은 46쪽, 도 5.8.3.1, "GB setopt 옵션"에 기술되어 있음
gb G_WRITE,K2 gb G_WRITE,R2 K1에 의해 특정된 GB 연산을 K2또는*R2와 함께 GB 피연산자-n으로서 GB에 보냄 GB I/O 상태 교체. 만약 n==0이면, 현재의 DS 버퍼 정보가 판독될 수 있다;만약 n==1이면, DS 버퍼 정보는 다음 명령어의 시행 결과인acc값을 사용하여 기록된다. 만약 n이 0 또는 1 이외의 것이면, I/O 채널 교체가 진행된다. 이 경우,G_WRITE의 n=0부터 n=15까지의 전체 서열이 필요함. 그렇지 않으면 GB I/O 상태가 미결정된다. 입력 버퍼의 첫 번째 16비트의 내용의 변경은symbol값을 변경시키는 점을 유의. 47쪽, "GB 구성 옵션(G_write) 참조)
구성 연산은 입력 버퍼, 출력 버퍼, 또는 GB의 구성을 수정한다. 입력 버퍼의 상태가 변경됨에 따라symbol, nZero를 통해 보여지는 값 및GBsign에 의해 영향받는 값 또한 영향받을 수 있음을 유의해야 한다.
5.8.3.1 GB SETOPT 옵션들
GB 옵션은 비트 값의 세트로서 취급된다. G_WRITE
비트 의미
----------------------------------------------------------
4설정되면 GB를 DCT 처리 모드로 강제한다
3선행 비트: 0 또는 1로서nZero에 대해 무엇을 카운트할지를 특정한다
클리어되면, 비트 3을 무시하고 만나는 첫 번째 비트의 값에 따라 연속한 0 또는 1 비트를 카운트한다.
2만약 설정되면 비트 3에 특정된 것만을 카운트한다.
1설정되면, 더 이상 입력을 입력 버퍼 내로 판독 입력하지 않는다(입력이 불가능해진다).
0설정되면 출력을 출력 버퍼로 발생시킨다(출력을 가능하게 한다)
표 5-22 GB G_SETOPT 비트 설정
예를 들면, 0b'00101'의 값이 특정되면, 입력 및 출력 모두가 가능해지고, 선행 0 비트만이 카운트될 것이다.
5.8.3.2 GB 구성 옵션(G_WRITE)
GB 구성은 I/O 상태가 판독되거나(만약 N==0이면) 또는 판독/기록(만약 n>0)되는 것을 허용한다. n 값은 상태의 어떤 부분이 판독/기록될 것인지를 결정한다. 어떤 n 값이 어떤 상태에 영향을 미치는 지를 결정하기 위해서는 도 4-7,"VLx GB I/O 상태"를 참조.
GB 제어 비트는 다음을 특정한다.
비트 의미
---------------------------------------------------------------
15설정되면, 입력 비트스트림이 시프트됨에 따라 출력을 발생시키지 않는다
14설정되면 출력이 가능해진다
클리어되면 비트 12를 무시하고 만나는 첫 번째 비트의 값에 따라서 인접한 0 또는 1 비트를 카운트한다.
13설정되면, 비트 12내에 특정되는 것만 카운트한다.
12선행 비트:0 또는 1로서nZero에 대해 카운트되는 것을 특정한다.
11:6입력 버퍼가 상주하는 버퍼에 대한 DS 버퍼 ID
5:0출력 버퍼가 보내어지는 DS 버퍼 ID
표 5-23 GB 제어 비트
출력 버퍼 제어 상태는 다음의 필드를 포함한다.
비트 의미
----------------------------------------------------------------
15:10예약됨
9:5현재의 비트 위치 색인을 특정한다. 새로운 비트가 이 위치에 부가된다.
4:2예약됨
1만약 설정되면, 출력이 출력 버퍼 내로 발생될 수 있다(출력이 가능해진다)
0입력이 소모됨에 따라 출력이 소모될 지 여부를 특정한다.
표 5-24 GB 출력 버퍼 제어
입력 버퍼 제어는 다음과 같다.
비트 의미
----------------------------------------------------------------
15:11 예약
10:5현재 비트 위치 색인을 특정한다. 비트는 이 위치로부터 소모될 것이다.
4:0예약된다.
표 5-25 GB 입력 버퍼 제어
5.8.4 GB MPEG2 하드웨어 표 조사 연산
이들 연산은 MPEG2 표에서의 값의 조사에 상응한다.
GB K2 또는 * R2 의사 기호 GB K2 또는 * R2 값
-----------------------------------------------
G_CHR 0b00000
G_LUM 0b00001
G_MOT 0b00011
G_MBI 0b00101
G_MBP 0b00110
G_MBB 0b00111
G_MAI 0b01000
G_CBP 0b01001
G_NZPA 0b00100
K1 값(G_HWACC)은 항상 0b10000이다. K2 또는*R2는 조사를 하는 MPEG2 표를 표시한다. 모든 하드웨어 인코딩된 MPEG2 표에 대해, 내부 레지스터가 VLC의 길이 플러스 값의 비트 길이로서 설정된다.G_ADV2GB 연산은 비트스트림이 VLC에 대해 전진하는 것을 유발하여야 하고 G_MOT 표 참조에 대한 비트스트림의 다음 요소의 값은 모두 H.262에서 MPEG2에 대해 정의된 표에 대한 것이다.
디코드 Exe/GB 재기록/GB hw 표 조사 GB hw 표 조사
gb G_HWACC,G_CHR 조사 요청을 GB에 보냄 현재의symbol값을 받고,symbol값으로서symbol의 비트 15:4에서 UIMSB의 크로미넌스 값(비트 위치 15에서의 MSB)을 및 길이를symbol의 비트 4:0으로서 표 B.13으로부터 리턴한다.
gb G_HWACC,G_LUM 조사 요청을 GB에 보냄 현재의symbol값을 받고,symbol값으로서symbol의 비트 15:4에서 UIMSB의 luminance 값(비트 위치 15에서의 MSB)을 및 길이를symbol의 비트 4:0으로서 표 B.13으로부터 리턴한다.
gb G_HWACC,G_MBI 조사 요청을 GB에 보냄 현재의symbol값을 받고, I-픽처에 대한macroblock_type(표 B.2)를 조사한다.symbol값으로서 비트 10:5에서의 6-비트 타입 및 비트 4:0에서의 길이를 리턴한다.
gb G_HWACC,G_MBP 조사 요청을 GB에 보냄 현재의symbol값을 받고, P-픽처에 대한macroblock_type(표 B.3)를 조사한다.symbol값으로서 비트 10:5에서의 6-비트 타입 및 비트 4:0에서의 길이를 리턴한다.
gb G_HWACC,G_MBB 조사 요청을 GB에 보냄 현재의symbol값을 받고, I-픽처에 대한macroblock_type(표 B.4)를 조사한다.symbol값으로서 비트 10:5에서의 6-비트 타입 및 비트 4:0에서의 길이를 리턴한다.
gb G_HWACC,G_MAI 조사 요청을 GB에 보냄 현재의symbol값을 받고, macroblock_address_increment(표 B.1)를 조사한다.symbol값으로서 비트 10:5에서의 6-비트 타입 및 비트 4:0에서의 길이를 리턴한다
gb G_HWACC,G_CBP 조사 요청을 GB에 보냄 현재의symbol값을 받고, 코딩된 block_pattern(표 B.9)를 조사한다.symbol값으로서 비트 10:5에서의 6-비트 타입 및 비트 4:0에서의 길이를 리턴한다
gb G_HWACC,G_NZPA 조사 요청을 GB에 보냄 symbol값으로서 (symbol>>(nZero+1)&0x1f를 리턴한다.
G_MOT는 GB 사이클의 수의 두 배가 수행되는 것을 요구하는 다단계 GB 연산임을 유의해야한다.
디코드 Exe/GB1 WB/GB1 GB1 디코드/GB2 Exe/GB2 GB2 GB2
gb G_HWACC, G_MOT 조사 요청을 GB에 보냄 현재의symbol값을 받고, 이동 코드 값을 조사 acc가상 레지스터는 불변경된채 남아있어야 한다; 이 값을 비트스트림에서 이동 잔류치를 구성하는 비트의 수를 결정하는데 사용 symbol값으로서 비트 15:8의 UIMSB(비트 위치 8 내의 MSB)의 이동 잔류치, 및 비트 7:0 내의 8비트 부호화된 이동 코드 값
5.8.5 GB DCT 연산
GB는 DCT 처리 모드로 명백히 강제된다. K1 피연산자의 값은 '0b0000'이다.
디코드 Exe/GB 재기록/GB 시프트 및 카운트 GB DCT
gb G_DCT,K2 gb G_DCT,R2 K1에 의해 특정된 GB 연산을, GB 피연산자로서 정의된 K2 또는*R2와 함께 GB로 보낸다. GB는GBsign을 결정한다;GBsigndctSign값에 영향을 미친다 GB는 K2 또는*R2에서 특정된 길이만큼 입력 버퍼를 시프트한다; 새로운nZero가 결정되고symbol값은 만약 시프트 양이 0보다 크면 수정된다;symbol에 대한 GB 모드는 입력 버퍼 내에서의symbol값을 나타낸다. nZero를 사용하여 상응하는 r[nZero] 레지스터를 판독하고 표 색인 값??르 계산한다(24쪽의 "DCT 처리" 참조). 업데이트된symbol값을 산출한다.
GB는G_SETOPT를 통해 DCT 모드 내로 둘 수 있다. 또한brai.dct는 GB를 DCT 모드 내에 둘 수 있다. 자세한 정보는 24쪽의 섹션 4.2.4.5,DCT 처리, 및 60쪽의 섹션 6.4,DCT 표 설정참조.
5.8.6 VLx PIO 레지스터 비트 리스트
다음 표는 VLx PIO 레지스터 비트 사용을 열거한다.
표 5-26 VLx의 PIO 레지스터 비트
MAP1000 PIO 메모리 맵에 정의된 하나의 레지스터가 있다. 이 레지스터의 모드에 따라서, 비트는 서로 다른 값을 취한다. 네 개의 모드가 있다:
· Normal 모드: Break는 0이고 NormalSetRFAddr은 0
·RF Read 모드: Break는 0, RFReadSetRFAddr은 1, 및 RFReadWriteRF는 1
·RF Write 모드: Break는 0, RFWriteRFAddr은 1, 및 RFWriteWriteRF는 1
·Breakpoint 모드:SetBkptBreak는 1, SetBkptRFAddr은 0
이 표는 MAP1000 PIO 메모리를 대체하지는 않고, 단지 편의를 위해서이다. MAP1000 PIO 메모리 맵은 제한적이다.
5.9 PIO 레지스터 비트 기술
5.9.1 Run
Run 비트(NormalRun, RFReadRun, RFWriteRun)는 VLx CPU 및 GB 클록의 상태를 나타낸다. 만약 비트가 설정되면, 클록은 턴온된다. 만약 비트가 클리어되면, 클록은 턴오프된다.
5.9.2 GBCool
GBCool 비트(NormalGBCool, RFReadGBCool, RFWriteGBCool)는 GB 입력이 가능한지를 표시한다. 비트가 설정되면, 입력이 불가능하다. 비트가 클리어되면 입력이 가능하다.
5.9.3 GBPending
GBPending 비트(NormalGBPending, RFREadGBPending, RFWriteGBPending)는 GB 입력 또는 출력에 대해 진행 중인 I/0 트랜잭션이 있는 지를 표시한다. 이것은 읽기 전용 비트이다. 비트가 소거되면 I/O 트랜잭션이 진행중이다.
6. 프로그래머용 노트
6.1 초기화
VLx CPU 및 GB 클록을 허가하기 전에;
· CPU에 대한 PC는 0으로 리셋되어야 한다(알려진 상태),
· VLx 프로그램은 CM 내로 로딩되어야만 한다, 및
· CM1은 VLx에 의한 액세스에 대해 허가되어야만 한다.
CPU 클록이 인에이블되면, VLx는 명령어 실행을 시작한다. GB는 GB 연산을 CPU로부터 넘겨받을 때 실행할 것이다.
VLx 프로그램을 CM 내로 로딩하기 전에, FFU 내의 CM1 뱅크는 VLx에 대해 DTS로부터 CM 뱅크에 대한 액세스를 허용하도록 허가되어야만 한다. 이것은 FFU를 3d2dControlRegister내의 유닛 비트를 통해 vld_mode로 설정하는 것을 요구한다.
VLx로부터 발행된 DsContinue는 사용전에 설정되는 것을 요구한다. VLx는 DS 채널을 DsContinue로 인식하는 6개의 비트(17:12)를 VldDsContinue에 공급한다. 그렇지만 VLIW 프로그램은 VldDsContiue 레지스터의 나머지 비트를 개시하는 책임이 있고, 그리하여 VLx로부터의 6개 비트의 기록이 PIO가 DS에 대해 발행되는 것을 유발한다.
6.2 문맥 전환에 대한 셧다운/상태 저장
VLx의 유용한 셧다운 또는 문맥 전환은 VLIW 코어에 대한 프로그램 실행의 제어 하에서 개시되지만, 또한 현재 실행하는 VLx 프로그램으로부터의 협조를 요구한다. 이를 행하는 순서는 다음과 같다:
VLIW 프로그램은 응용 프로그램 특이적 방법으로 VLx 프로그램과 통신하여 셧다운/문맥 전환이 요구된다. 이를 위한 한가지 메카니즘은 GBstall 조건과 같은 때에, 정확히 정의된 시간에서 VLx 프로그램이 체크되는 VLIW 프로그램에 의해 CM내에서command위치에 대해 일치된 기록이다.
·VLIW 프로그램 또는 VLx 프로그램은 VLx 프로그램이 처리 입력일 때 gb 중지를 결국 유발하는 GB I/O 입력을 금지한다.
· VLx 프로그램은 0 비트로 스플라이싱함으로써 GB 출력을 플러시한다(flush).
· VLx 프로그램은 I/O 출력을 금지한다.
· VLx 프로그램은 GB I/O 채널 상태를 CM으로 저장한다.
VLx 프로그램은 어떠한 적절한 프로그램 상태(레지스터 값과 같은)를 CM으로 저장한다. VLx 프로그램은 제 1 명령어가 리셋 체크 후에 실행되는 방식으로 기록되어 적절한 상태를 체크하고 상태에 기초하여 적절한 프로그램 위치로 분기함으로써 이것이 새로운 시작 또는 속행인지를 점검할 수 있다.
· VLx 프로그램은 응용 프로그램 특이적 방법을 통해 VLIW 프로그램을 신호하여 상대 저장이 완료된다.
· VLIW 프로그램은 VLx CPU 클록을 중지한다.
· VLIW 프로그램은 다른 VLx 또는 FFU 프로그램에 의한 사용을 위해 CM을 해제하기 전에 적절한 CM 내용을 안전한 위치로 전송하는 것을 개시한다.
VLxDML 돌연한 셧다운은 다음 순서에 다라 이루어질 수 있다:
· VLIW 프로그램이 GB I/0 입력 요청을 금지한다,
· VLIW 프로그램이 VLx 프로그램에 대한 일정 수의 사이클이 정지 상태에 도달하도록 한다,
·VLIW 프로그램은 VLx CPU 클록을 턴오프한다.
VLx 프리엠션(preemption)에 연이어 VLx 프로그램 실행을 다시 시작하기 위한 고유한 지원이 없음에 유의해야 한다.
또한, VLx CPU 클록을 턴오프함으로써, VLx 상태는 보존됨에 유의해야 한다. 그러므로, 만약 다른 용도로 전환되는데 필요한 유일한 자원이 CM인 경우(3D TAC 처리를 실행하기 위해), 이는 상기한 바와 같은 VLX의 돌연한 셧다운을 행한 후에 CM 상태를 단순히 저장 및 복원하고 이후 GB I/O 입력을 재-인에이블링하고 VLx CPU 클록을 다시 턴온함으로써 이루어질 수 있다.
6.3 채널 교체
비트스트림의 멀티플렉싱을 취급하기 위한 채널 교체는 VLx 프로그램에 의한 취급을 요구하는 것이다. VLIW 프로그램으로부터 VLx 프로그램 협동없이 이것을 완전히 행하는 메커니즘은 없다.
채널 교체는 다음을 요구한다
· GB I/O -- 입력 출력 모두를 디스에이블링,
· 채널 상태를 교체(21쪽의 "GetBits 모드" 참조), 및
· I/O 재-인에이블링.
채널 교체는 전체적으로 취급되어야만 한다. 부분적 교체는 GB I/O를 미결정된 상태로 둘 것이다. 이를 수행하는 명령 순서로 가능한 것 중 하나가 표 6-1에 보여진다.
레지스터 tmp3 r30;
레지스터 gbind r24;
L_GBSWAP;# 채널 상태를 저장
setacc $;#GBstall 상태에 있지 않음을 확신 또는
br.gbstall acc;#GBpending 상태, 이후 전환
setacc $;# 전체적인 채널 상태
br.gbpend acc;#주의: gbind는 데이터를 포함하는데 사용됨
setreg gbind, L-GBDATA000;#다른 GB 상태가 존재하는 위치
nop;
ld.w tmp3,gbind;#tmp3을 상태로서 설정
fastloop{# 고속분기 설정; gbind 하위 5비트=0
gb G_WIRTE, gbind;#tmp3 내의 값을 상태 gbind로 기록한다
add tmp3,0;#tmp3은 쓸 값을 갖는다
add tmp3,0;
nop;# 유효 기호 다음 사이클에 주의
st symbol, gbind;# gbind 위치에 대한 기호 저장
add gbind 1;# 교체를 위해 다음 단계로 증가
br.acc4eq0 pcsave;#gbind 하위 4 비트=0이면 호출자로 리턴
ld.w tmp3,gbind;# 다음 단계가 GB 내로 기록하도록 설정
}
align 16GBDATA000은 기록/판독할 인디케이터로서 주소의 하위 4비트를 찾는 G_write에 대해 정렬될 필요가 있다
L_GBDATA000:
data 0b 0000 0000 0000 0000#N=0
data 0b 0 00 00010 000011#N=1, chan:3에서 새로 in, chan:3에서 새로 out
data 0b 0000 0000 0000 0011#N=2, 소모된 입력으로서 출력을 발생시킴; 출력 허가됨; 출력 버퍼 내에 출력 없음
data 0 (12)# N-3-14 in/out 데이터
data 0b 0000 0 110000 100 00#N=15, 입력이 채워지도록 강제하는 초기 순서
표 6-1GB 채널 교체 예
이 예에서, L_GBDATA000은 16 바이트 정렬된 주소에 있음을 유의해야한다. G_write는 어떤 값을 이 예에서 기록/판독할 지를 결정하기 위해 주소의 하위 4비트를 사용할 것이다.
6.4 DCT 표 설정
DCT 처리를 위한 GB를 사용하기 위해, CM 내에 데이터로서 상주하는 조사 표의 시리즈로서 표가 생성되어야만 한다. tbase 레지스터는 표를 포함하는 하위 표의 위치 및 크기를 식별하도록 개시되어야만 하는 하위 표의 크기 및 위치를 식별하도록 개시되어야만 한다. tbase 레지스터 값은 24쪽 섹션 4.2.4.5,DCT 처리에 기술되어 있다.tkeep은 표의 크기를 표시하고, 여기서 표의 엔트리의 수는 2 tkeep-tskip 이다. 엔트리는 VLC 내에 비트 역전된 순서로 남아있는 비트의 값에 의해 조직화되고, 어떠한 누락된 엔트리가 없어야 한다. 예를 들면, 선행 0가 카운트되는 tbase 1에 대해 만약tkeep이 3의 값을 특정하고,tskip이 1의 값을 특정하면, 하위 표는 네 개의 엔트리 취급 VLC'0100'(엔트리 0; MSB 가장 왼쪽 비트), VLC'0110'(엔트리 1), VLC'0101'(엔트리 2), 및 VLC'0111'(엔트리 3)를 갖는다. VLC'0101'에 대한 아래의 스트림의 처리(가장 오래된 비트--MSB-가 오른쪽임에 유의)가
'xxxxxxxxxxxx1010'
GB가 두 비트(tkeep-tskip) 만큼 시프트하는 것을 유발하여
'xxxxxxxxxxxxxx10'을 초래하고 이후 이들 비트를tkeepMask(24쪽의 "DCT 처리" 참조)로 마스크하여 엔트리 '10', 또는 2가 하위 표에서 사용되는 것을 유발한다.
만약 이들 엔트리의 값이 부적법하거나 특수한 처리를 요구하면, 표 엔트리 내의 0의 길이를 특정하여 dct 루프를 종결하는 것에 유의해야 한다. 또한 VLCs '0110' 및 '0111'이 VLC(예, '001s')와 진정 같다면, 길이는 '4'로서 특정되고 마지막 비트는 부호 비트로서 취급됨에 유의해야 한다.
표 엔트리는 MPEG2 B.14 및 B.15에 정리된 바와 같이 실행 및 레벨 값을 포함한다. 표 엔트리는 길이 필드를 또한 포함하는데, 이것은 VLC의 길이이다. 실행 및 레벨 값은 표 엔트리가 로드 연산으로 CM으로부터 판독되면 가상 레지스터runlev값이 각각 된다.
15:11 10:5 4:0
run level length
길이는 매칭된 VLC의 길이만큼 비트스트림을 암시적으로 시프트하는데 사용된다. 만약 0의 길이가 표에서 특정되면, call.dct가 'DCTs를 처리하는 루프로부터 분기할 것이다.
결과적인 표 구조 및 상태 설정은 61쪽의 도 6-1에 도시된다.
도 6-1 DCT Tbase 레지스터 및 표 설정
GB를 DCT 처리 모드로 두는데는 두 가지 방법이 있다. 첫 번째는 모드를 명백히 설정하는 것이다:
gb_setopt(0b1xxxx); # 비트 4를 설정.
이는 현재 VLC에 대한 DCT CM 결과에 의해 기호 값을 취하는 것을 강제한다.
또 다른 방법은 연산이 DCT 처리 모드에서 처리되도록 강제하는
gb_dct(0);
를 사용하는 것이다.
부가적으로call.dct(r)는 몇 가지 연산이 GB, CPU 모두 내에서, 및 CM 액세스에 대해 병렬적으로 발생하도록 실질적으로 유발하는 특수 명령어이다.
· 현재의symbol값을 사용하여,ld.w lev를 사용하여,symbolCM 판독 연산이 개시된다. 이것은 표 엔트리 값을 판독하도록 이미 설정된symbol에 의해 특정된 CM을 판독한다는 것을 유의해야 한다.
· 만약 표 엔트리로부터의 길이 값이 0이면, 또는gbstall조건이 참이면, 레지스터에 대한 분기가 특정된다.
· 그렇지 않으면,gb_dct(length-returned-from-last-CM-read)와 유사한 특수 GB 연산이 개시된다.
7. 설계자의 논평
GB, CPU, 및 CM 상호작용은 5 개의 사이클 DCT 처리 루프를 지원하도록 설계되었다. 이에 대한 코드는 지연 및 충돌 문제를 만족시키기 위해 예시적 코드를 매우 유사하게 따를 필요가 있다. 이동 벡터, 명시도 및 기타 특수 가속화된 처리에 대해서도 유사한 주의가 필요하다.

Claims (19)

  1. 가변 길이 인코드/디코드 프로세서에 있어서,
    중앙 처리 장치;
    상기 중앙 처리 장치에 접속된 명령어 버퍼; 및
    상기 중앙 처리 장치에 접속된 겟비트(getbits) 처리 엔진
    을 포함하는 가변 길이 인코드/디코드 프로세서.
  2. 제1항에 있어서,
    상기 중앙 처리 장치 및 상기 겟비트 처리 엔진에 접속된 레지스터 파일을 더 포함하는 가변 길이 인코드/디코드 프로세서.
  3. 제1항에 있어서,
    상기 겟비트 처리 엔진에 접속된 입력 버퍼를 더 포함하는 가변 길이 인코드/디코드 프로세서.
  4. 제1항에 있어서,
    상기 겟비트 처리 엔진에 접속된 출력 버퍼를 더 포함하는 가변 길이 인코드/디코드 프로세서.
  5. 제1항에 있어서,
    상기 중앙 처리 장치는 가상 누산기 레지스터를 포함하는 가변 길이 인코드/디코드 프로세서.
  6. 제1항에 있어서,
    상기 겟비트 처리 엔진에 접속된 입력 버퍼를 더 포함하고, 상기 입력 버퍼는 가상 기호 레지스터를 포함하는 가변 길이 인코드/디코드 프로세서.
  7. 함수 처리 블록에 있어서,
    명령어 버퍼;
    메모리;
    겟비트 처리 엔진; 및
    상기 명령어 버퍼, 상기 메모리, 및 상기 겟비트 처리 엔진에 접속된 중앙 처리 장치를 포함하는 함수 처리 블록.
  8. 제7항에 있어서,
    상기 메모리는 상기 명령어 버퍼에 접속된 함수 처리 블록.
  9. 제7항에 있어서,
    상기 메모리는 상기 겟비트 처리 엔진에 접속된 함수 처리 블록.
  10. 제7항에 있어서,
    상기 메모리, 상기 겟비트 처리 엔진, 및 상기 중앙 처리 장치에 접속된 레지스터 파일을 더 포함하는 함수 처리 블록.
  11. 제7항에 있어서,
    상기 겟비트 처리 엔진에 접속된 입력 버퍼;
    상기 겟비트 처리 엔진에 접속된 출력 버퍼; 및
    상기 입력 버퍼 및 출력 버퍼에 접속된 입력/출력 버스를 더 포함하는 함수 처리 블록.
  12. 프로세서에 있어서,
    코어;
    상기 코어에 접속된 제어기; 및
    상기 제어기에 접속된 함수 처리 블록
    을 포함하며,
    상기 함수 처리 블록은
    메모리,
    입력/출력 버스, 및
    상기 메모리 및 상기 입력/출력 버스에 접속된 가변 길이 인코드/디코드 프로세서
    를 포함하고, 상기 가변 길이 인코드/디코드 프로세서는
    상기 입력/출력 버스에 접속된 겟비트 처리 엔진, 및
    상기 겟비트 처리 엔진에 커플링된 중앙 처리 장치를 포함하는 프로세서.
  13. 가변 길이 인코드/디코드 방법에 있어서,
    가변 길이 인코드/디코드 프로세서의 겟비트 엔진으로 데이터를 처리하는 단계; 및
    상기 가변 길이 인코드/디코드 프로세서의 중앙 처리 장치로 상기 겟비트 엔진을 제어하는 단계를 포함하는 방법.
  14. 제13항에 있어서,
    상기 중앙 처리 장치에 의해 명령어 버퍼 내에 저장된 명령어를 실행하는 단계를 더 포함하는 방법.
  15. 제13항에 있어서,
    상기 겟비트 엔진으로 입력/출력 버스로부터 데이터를 수신하는 단계; 및
    상기 겟비트 엔진으로 입력/출력 버스에 데이터를 공급하는 단계를 더 포함하는 방법.
  16. 제13항에 있어서,
    코어 프로세서에 의해 상기 가변 길이 인코드/디코드 프로세서를 제어하는 단계를 더 포함하는 방법.
  17. 제13항에 있어서,
    상기 겟비트 엔진으로 가변 길이 기호를 분석하는 단계; 및
    상기 가변 길이 기호의 값에 근거하여 조사표(look-up)를 액세스하는 단계를 더 포함하는 방법.
  18. 제13항에 있어서,
    상기 겟비트 엔진으로 가변 길이 기호를 분석하는 단계; 및
    상기 가변 길이 기호 내의 선행 0의 수에 근거하여 조사표를 액세스하는 단계를 더 포함하는 방법.
  19. 제13항에 있어서,
    상기 겟비트 엔진으로 가변 길이 기호를 분석하는 단계; 및
    상기 가변 길이 기호 내의 선행 1의 수에 근거하여 조사표를 액세스하는 단계를 더 포함하는 방법.
KR1020007014670A 1998-06-25 1999-06-24 가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법 KR20010083063A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US9064898P 1998-06-25 1998-06-25
US60/090,648 1998-06-25
PCT/US1999/014560 WO1999067883A2 (en) 1998-06-25 1999-06-24 Processing circuit and method for variable-length coding and decoding

Publications (1)

Publication Number Publication Date
KR20010083063A true KR20010083063A (ko) 2001-08-31

Family

ID=22223680

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020007014670A KR20010083063A (ko) 1998-06-25 1999-06-24 가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법

Country Status (8)

Country Link
US (3) US6507293B2 (ko)
EP (1) EP1099310A4 (ko)
JP (1) JP2002519884A (ko)
KR (1) KR20010083063A (ko)
CN (1) CN1306697A (ko)
AU (1) AU4723699A (ko)
TW (1) TW448374B (ko)
WO (1) WO1999067883A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7218257B2 (en) 2003-07-29 2007-05-15 Samsung Electronics Co., Ltd. Apparatus and method for variable length coding

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1999067883A2 (en) 1998-06-25 1999-12-29 Equator Technologies, Inc. Processing circuit and method for variable-length coding and decoding
US6347344B1 (en) * 1998-10-14 2002-02-12 Hitachi, Ltd. Integrated multimedia system with local processor, data transfer switch, processing modules, fixed functional unit, data streamer, interface unit and multiplexer, all integrated on multimedia processor
US8913667B2 (en) * 1999-11-09 2014-12-16 Broadcom Corporation Video decoding system having a programmable variable-length decoder
US6775414B1 (en) * 1999-11-19 2004-08-10 Ati International Srl Variable-length code decoder
GB2372848B (en) * 2001-02-20 2004-10-27 Advanced Risc Mach Ltd Data processing using a coprocessor
JPWO2002101935A1 (ja) * 2001-06-06 2004-09-30 セイコーエプソン株式会社 復号化装置、復号化方法、ルックアップテーブルおよび復号化プログラム
US6996702B2 (en) * 2001-07-31 2006-02-07 Wis Technologies, Inc. Processing unit with cross-coupled ALUs/accumulators and input data feedback structure including constant generator and bypass to reduce memory contention
US7035332B2 (en) * 2001-07-31 2006-04-25 Wis Technologies, Inc. DCT/IDCT with minimum multiplication
US20050207663A1 (en) * 2001-07-31 2005-09-22 Weimin Zeng Searching method and system for best matching motion vector
US7085320B2 (en) * 2001-07-31 2006-08-01 Wis Technologies, Inc. Multiple format video compression
US7184101B2 (en) * 2001-07-31 2007-02-27 Micronas Usa, Inc. Address generation for video processing
US7219173B2 (en) * 2001-07-31 2007-05-15 Micronas Usa, Inc. System for video processing control and scheduling wherein commands are unaffected by signal interrupts and schedule commands are transmitted at precise time
US6970509B2 (en) * 2001-07-31 2005-11-29 Wis Technologies, Inc. Cell array and method of multiresolution motion estimation and compensation
US7142251B2 (en) * 2001-07-31 2006-11-28 Micronas Usa, Inc. Video input processor in multi-format video compression system
US6981073B2 (en) * 2001-07-31 2005-12-27 Wis Technologies, Inc. Multiple channel data bus control for video processing
US7193541B2 (en) * 2001-12-04 2007-03-20 Sun Microsystems, Inc. Representation of sign in encoding scheme
US8284844B2 (en) 2002-04-01 2012-10-09 Broadcom Corporation Video decoding system supporting multiple standards
US7137121B2 (en) 2002-04-19 2006-11-14 Equator Technologies, Inc. Data-processing circuit and method for switching between application programs without an operating system
WO2005008472A1 (en) * 2003-07-10 2005-01-27 Computer Associates Think, Inc. System and method for buffering variable-length data
US8427494B2 (en) * 2004-01-30 2013-04-23 Nvidia Corporation Variable-length coding data transfer interface
US7457363B2 (en) * 2004-06-30 2008-11-25 Intel Corporation Method and apparatus for multi-threaded variable length coding
JP4455242B2 (ja) * 2004-09-15 2010-04-21 株式会社東芝 復号化回路
US7334116B2 (en) * 2004-10-06 2008-02-19 Sony Computer Entertainment Inc. Bit manipulation on data in a bitstream that is stored in a memory having an address boundary length
US7747095B2 (en) * 2004-10-08 2010-06-29 Nvidia Corporation Methods and systems for rate control in image compression
KR100697516B1 (ko) * 2004-10-27 2007-03-20 엘지전자 주식회사 3차원 웨이블릿 변환 기반의 동영상 코딩 방법
US7380036B2 (en) * 2004-12-10 2008-05-27 Micronas Usa, Inc. Combined engine for video and graphics processing
US7148821B2 (en) * 2005-02-09 2006-12-12 Intel Corporation System and method for partition and pattern-match decoding of variable length codes
US20060190251A1 (en) * 2005-02-24 2006-08-24 Johannes Sandvall Memory usage in a multiprocessor system
US7180437B1 (en) * 2005-08-03 2007-02-20 The Boeing Company Parallel-to-serial converter
US7372378B2 (en) * 2005-12-01 2008-05-13 Nvidia Corporation Efficient decoding of n-tuple variable bit length symbols
US7286066B1 (en) * 2005-12-16 2007-10-23 Nvidia Corporation Acceleration of bitstream decoding
US8599841B1 (en) 2006-03-28 2013-12-03 Nvidia Corporation Multi-format bitstream decoding engine
US8593469B2 (en) * 2006-03-29 2013-11-26 Nvidia Corporation Method and circuit for efficient caching of reference video data
US7324026B2 (en) * 2006-05-19 2008-01-29 Nvidia Corporation Optimization of decoder memory usage for VLC tables
US7508328B2 (en) * 2006-09-15 2009-03-24 Nemochips, Inc. Entropy processor for decoding
US8725504B1 (en) 2007-06-06 2014-05-13 Nvidia Corporation Inverse quantization in audio decoding
US8726125B1 (en) 2007-06-06 2014-05-13 Nvidia Corporation Reducing interpolation error
US8477852B2 (en) * 2007-06-20 2013-07-02 Nvidia Corporation Uniform video decoding and display
US8502709B2 (en) * 2007-09-17 2013-08-06 Nvidia Corporation Decoding variable length codes in media applications
US8849051B2 (en) * 2007-09-17 2014-09-30 Nvidia Corporation Decoding variable length codes in JPEG applications
US8934539B2 (en) * 2007-12-03 2015-01-13 Nvidia Corporation Vector processor acceleration for media quantization
US8704834B2 (en) * 2007-12-03 2014-04-22 Nvidia Corporation Synchronization of video input data streams and video output data streams
US8687875B2 (en) * 2007-12-03 2014-04-01 Nvidia Corporation Comparator based acceleration for media quantization
US8762602B2 (en) * 2008-07-22 2014-06-24 International Business Machines Corporation Variable-length code (VLC) bitstream parsing in a multi-core processor with buffer overlap regions
US9307267B2 (en) * 2008-12-11 2016-04-05 Nvidia Corporation Techniques for scalable dynamic data encoding and decoding
KR101175680B1 (ko) * 2008-12-23 2012-08-22 광운대학교 산학협력단 비트스트림 프로세서의 구동방법
US20110158310A1 (en) * 2009-12-30 2011-06-30 Nvidia Corporation Decoding data using lookup tables
KR101508409B1 (ko) 2011-12-27 2015-04-08 삼성전기주식회사 Mrlc를 이용한 오버레이 구현 장치 및 방법
US9105244B2 (en) * 2012-05-16 2015-08-11 Himax Technologies Limited Panel control apparatus and operating method thereof
US20140006536A1 (en) * 2012-06-29 2014-01-02 Intel Corporation Techniques to accelerate lossless compression
US9386326B2 (en) 2012-10-05 2016-07-05 Nvidia Corporation Video decoding error concealment techniques
US9336072B2 (en) * 2014-02-07 2016-05-10 Ralph Moore Event group extensions, systems, and methods
CN107102822B (zh) * 2017-04-27 2020-01-03 杭州迪普科技股份有限公司 一种数据回写方法及装置
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10880531B2 (en) * 2018-01-31 2020-12-29 Nvidia Corporation Transfer of video signals using variable segmented lookup tables
CN112492386A (zh) * 2020-11-09 2021-03-12 Tcl华星光电技术有限公司 解码方法、解码装置及可读存储介质

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4899149A (en) * 1986-02-28 1990-02-06 Gary Kahan Method of and apparatus for decoding Huffman or variable-length coees
US4920477A (en) * 1987-04-20 1990-04-24 Multiflow Computer, Inc. Virtual address table look aside buffer miss recovery method and apparatus
US5146592A (en) * 1987-09-14 1992-09-08 Visual Information Technologies, Inc. High speed image processing computer with overlapping windows-div
US5254991A (en) * 1991-07-30 1993-10-19 Lsi Logic Corporation Method and apparatus for decoding Huffman codes
US5857088A (en) * 1991-10-24 1999-01-05 Intel Corporation System for configuring memory space for storing single decoder table, reconfiguring same space for storing plurality of decoder tables, and selecting one configuration based on encoding scheme
CA2122139C (en) * 1991-10-24 2000-08-29 David Leroy Sprague Data processing system
CA2096584A1 (en) * 1992-05-28 1993-11-29 Frank H. Liao Variable length code decoder for video decompression operations
US5576765A (en) * 1994-03-17 1996-11-19 International Business Machines, Corporation Video decoder
US5566089A (en) * 1994-10-26 1996-10-15 General Instrument Corporation Of Delaware Syntax parser for a video decompression processor
JP3279852B2 (ja) * 1994-12-14 2002-04-30 株式会社日立製作所 信号復号装置
JPH08275160A (ja) * 1995-03-27 1996-10-18 Internatl Business Mach Corp <Ibm> 離散余弦変換方法
US5696985A (en) * 1995-06-07 1997-12-09 International Business Machines Corporation Video processor
US5638531A (en) * 1995-06-07 1997-06-10 International Business Machines Corporation Multiprocessor integrated circuit with video refresh logic employing instruction/data caching and associated timing synchronization
US5831557A (en) * 1996-06-11 1998-11-03 Apple Computer, Inc. Variable length code decoding according to optimum cache storage requirements
US6101276A (en) * 1996-06-21 2000-08-08 Compaq Computer Corporation Method and apparatus for performing two pass quality video compression through pipelining and buffer management
US5821887A (en) * 1996-11-12 1998-10-13 Intel Corporation Method and apparatus for decoding variable length codes
CN1156171C (zh) * 1997-04-07 2004-06-30 松下电器产业株式会社 提高处理效率的图象声音处理装置
US6029045A (en) * 1997-12-09 2000-02-22 Cogent Technology, Inc. System and method for inserting local content into programming content
WO1999067883A2 (en) 1998-06-25 1999-12-29 Equator Technologies, Inc. Processing circuit and method for variable-length coding and decoding

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7218257B2 (en) 2003-07-29 2007-05-15 Samsung Electronics Co., Ltd. Apparatus and method for variable length coding

Also Published As

Publication number Publication date
US6587058B1 (en) 2003-07-01
WO1999067883A9 (en) 2000-07-06
WO1999067883A2 (en) 1999-12-29
EP1099310A2 (en) 2001-05-16
US20040081245A1 (en) 2004-04-29
US6507293B2 (en) 2003-01-14
WO1999067883A3 (en) 2000-04-13
US7262720B2 (en) 2007-08-28
CN1306697A (zh) 2001-08-01
JP2002519884A (ja) 2002-07-02
AU4723699A (en) 2000-01-10
US20020011943A1 (en) 2002-01-31
EP1099310A4 (en) 2005-12-21
TW448374B (en) 2001-08-01

Similar Documents

Publication Publication Date Title
KR20010083063A (ko) 가변 길이 코딩 및 디코딩 처리 회로, 및 그 방법
US6393545B1 (en) Method apparatus and system for managing virtual memory with virtual-physical mapping
US5892966A (en) Processor complex for executing multimedia functions
US6272257B1 (en) Decoder of variable length codes
US6707463B1 (en) Data normalization technique
US6414687B1 (en) Register setting-micro programming system
US6289138B1 (en) General image processor
US6674536B2 (en) Multi-instruction stream processor
US6877020B1 (en) Method and apparatus for matrix transposition
US6397324B1 (en) Accessing tables in memory banks using load and store address generators sharing store read port of compute register file separated from address register file
US6573846B1 (en) Method and apparatus for variable length decoding and encoding of video streams
US7305540B1 (en) Method and apparatus for data processing
US6697076B1 (en) Method and apparatus for address re-mapping
US6693643B1 (en) Method and apparatus for color space conversion
US7681013B1 (en) Method for variable length decoding using multiple configurable look-up tables
US20060114264A1 (en) Method and apparatus for image blending
JP3729540B2 (ja) 画像処理装置
US7467287B1 (en) Method and apparatus for vector table look-up
US6822654B1 (en) Memory controller chipset
US6931511B1 (en) Parallel vector table look-up with replicated index element vector
US7558947B1 (en) Method and apparatus for computing vector absolute differences
AU744329B2 (en) Data normalization circuit and method

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application