CN101072353B - 译码系统以及图形处理单元 - Google Patents

译码系统以及图形处理单元 Download PDF

Info

Publication number
CN101072353B
CN101072353B CN 200710126452 CN200710126452A CN101072353B CN 101072353 B CN101072353 B CN 101072353B CN 200710126452 CN200710126452 CN 200710126452 CN 200710126452 A CN200710126452 A CN 200710126452A CN 101072353 B CN101072353 B CN 101072353B
Authority
CN
China
Prior art keywords
mentioned
decoding
instruction
buffer
module
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
CN 200710126452
Other languages
English (en)
Other versions
CN101072353A (zh
Inventor
扎伊尔德·荷圣
约翰·柏拉勒斯
裴德辉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Via Technologies Inc
Original Assignee
Via Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Via Technologies Inc filed Critical Via Technologies Inc
Publication of CN101072353A publication Critical patent/CN101072353A/zh
Application granted granted Critical
Publication of CN101072353B publication Critical patent/CN101072353B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Image Generation (AREA)
  • Image Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明提供一种译码系统以及图形处理单元,其中揭露译码系统以及方法的不同实施例。一系统实施例包括软件可编程核心处理单元。软件可编程核心处理单元具有可变长度译码单元,用以执行着色器。着色器根据多个编码方法以选择性地执行视频串流编码的译码,以提供译码过的数据输出,其中译码的动作系使用软件以及硬件的组合来执行。本发明所述的译码系统以及图形处理单元,可将指令延迟减缩到最小,在设计上具有弹性。

Description

译码系统以及图形处理单元
技术领域
本发明是有关于数据处理系统,特别是有关于可编程图形处理系统以及方法。 
背景技术
计算机图形是用计算机产生图像、影像或是其他图形或图像信息的一种技术。目前,许多的图形系统是透过接口的使用而实施,例如:微软的Direct3D接口、OpenGL等,其可在执行特定操作系统(例如:微软的窗口系统)的计算机上对多媒体硬件(例如:图形加速器或是图形处理单元(graphics processing unit,GPU)提供控制。图像或是影像的产生一般称为描绘成像(rendering),上述操作的细节主要是经由图形加速器所实施。一般而言,在三维(three dimensional,3D)计算机图形中,场景内物件表面(或容体)所表示的几何被转换成像素(图像元素),并储存在帧缓冲器(frame buffer)内,接着显示于显示装置上。每个物件或是物件群都有与表面外观有关的特定视觉性质(例如:材料、反射系数、形状、纹理(texture)等),其可被定义成物件或物件群的描绘成像内容(rendering context)。 
计算机图形用以增加消费者对游戏及其他多媒体产品的控制性及特色的要求、产生更加真实的影像以及改善处理速度及耗能。现已发展出许多标准,可以利用较少的位数来产生较佳品质的影像。这些标准的一的H.264标准(亦为ISO动画专家群(motion picture experts group,MPEG)-4的第十部分)为高压缩数字视频编码译码(codec)标准。相较于MPEG-2编码器,H.264相容的编码译码器仅使用几乎三分之一的位数来编码视频并维持相似的视频品质。H.264规格提供两种型式的熵(entropy)编码处理,包括内容适应二进制算术编码(context-adaptive binary arithmetic coding,CABAC)以及内容适应可变长度编码(context-adaptive variable length coding,CAVLC)。
为了满足这些连续变化的需要,已提出了许多不同的纯软件或是纯硬件解决方式,然而,已知技术皆会导致较高的库存、立即淘汰的技术以及在设计上缺乏弹性。 
发明内容
本发明揭露用于图形处理单元的多执行序平行计算核心的译码系统以及方法。本发明提供一系统,包括一软件可编程核心处理单元,具有一可变长度译码单元,用以执行一着色器,上述着色器系选择性地执行一视频串流的一译码步骤以输出一译码数据,其中上述视频串流系根据内容适应二进制算术编码(CABAC)、内容适应可变长度编码(CAVLC)、EXP-Golomb、动画专家群(MPEG-2)以及VC-1标准而得,且上述译码步骤系使用软件以及硬件的一组合而执行,其中,上述译码步骤于一图形处理单元的内容编程内,透过执行于上述图形处理单元的执行单元数据路径硬件以及于一位流缓冲器中,用以自动管理的额外硬件而完成,以及其中上述多个编码方法包括内容适应二进制算术编码、内容适应可变长度编码、EXP-Golomb、动画专家群以及VC-1的至少二者,上述执行单元数据路径硬件包括上述可变长度译码单元。 
本发明提供另一系统,包括一图形处理单元耦接至一主机处理器以及存储器,上述图形处理单元包括一图形处理器,具有一软件可编程核心处理单元,包括一或多个执行单元,上述一或多个执行单元包括执行单元数据路径硬件,其包括一可变 长度译码单元,上述可变长度译码单元用以执行一着色器,上述着色器根据内容适应二进制算术编码、内容适应可变长度编码、EXP-Golomb、MPEG-2以及VC-1标准选择性地执行一视频串流编码的译码以提供一译码过的数据输出,其中上述视频串流系根据多个编码方法编码而得,且上述译码步骤使用软件以及硬件的一组合而执行,其中,上述译码步骤系于上述图形处理单元的内容编程内,透过执行于上述执行单元数据路径硬件以及于一位流缓冲器中,用以自动管理的额外硬件而完成,以及其中上述多个编码方法包括内容适应二进制算术编码、内容适应可变长度编码、EXP-Golomb、动画专家群以及VC-1的至少二者。 
本发明所述的译码系统以及图形处理单元,可将指令延迟(latency)减缩到最小,在设计上具有弹性。 
附图说明
图1系显示图形处理器系统实施例的方块图,其中可执行不同的译码系统及方法; 
图2系显示示范处理环境的方块图,其中可执行译码系统的不同实施例; 
图3系显示图2所显示的示范处理环境的选择元件方块图; 
图4系显示图2、3所显示的示范处理环境的计算核心方块图,其中可执行译码系统的不同实施例; 
图5A系显示图4中计算核心的执行单元的选择元件方块图,其中可执行译码系统的不同实施例; 
图5B系显示执行单元数据路径的方块图,其中可执行译码系统的不同实施例; 
图5C系显示图5B中译码系统实施例的方块图,其适用于多个编码标准,以及更显示对应的位流缓冲器的实施例; 
图6A系显示图5C中译码系统实施例的方块图,用以进行CABAC译码; 
图6B系显示图6A中译码系统实施例的方块图; 
图6C系显示图6A中译码系统的内容存储结构及相关暂存器实施例的方块图; 
图6D系显示使用图6A中译码系统的宏区块划分机制; 
图6E系显示使用图6A中译码系统所执行的示范宏区块译码机制的方块图; 
图7A系显示图5C中译码系统实施例的方块图,用以进行CABAC译码;以及 
图7B系显示图7A中译码系统所使用的表格结构实施例的方块图。 
具体实施方式
为让本发明的上述和其他目的、特征、和优点能更明显易懂,下文特举出较佳实施例,并配合所附图式,作详细说明如下。 
实施例: 
本发明揭露译码系统以及方法的许多实施例(其中,上述系统及方法将统称为译码系统)。在一实施例中,译码系统系内嵌于图形处理单元(graphics processing unit,GPU)的可编程、多执行序(multithread)以及平行计算核心的一或多个执行单元中。使用软件或硬件的结合以实施译码功能。即视频译码是在图形处理单元程序设计(programming)的内容(context)以及图形处理单元数据路径内的硬件实施所完成。例如,在一实施例中,译码运算或方法系由具有扩充指令集(extended instruction set)的着色器(shader)(例如:顶点着色器)、图形 处理单元的执行单元数据路径以及用于位流缓冲器的自动管理的额外硬件所实施。相较于现有系统,现有系统为处理纯硬件或纯软件为主的解决方式,因此会遇到于背景技术中所提到的一些问题。 
在本文所描述的译码系统中,可实施使用多个熵编码技术的信息译码的编码动作。译码系统可根据著名的国际电信联盟通讯标准部门(international telecommunication union telecommunication standardization sector,ITU-T)H.264标准的CABAC以及CAVLC进行译码,亦可根据MPEG-2以及VC-1标准进行译码。不同的译码系统实施例系根据多个模式之一而操作,其中各模式系对应于先前所描述的标准之一并根据执行一或多个从图形处理单元帧缓冲存储器或对应于主机处理器的存储器(例如主机中央处理单元(central processing unit,CPU))所接收到的指令集(例如经由预先载入(preload)等已知机制或是快取失败)。可重新使用硬件以提供多种型式的译码标准(即根据所选择的模式)。再者,所选择的模式亦会对初始化、使用和/或更新内容存储器的方式造成影响。 
根据译码的启动模式,译码系统可使用如Exp-Golomb编码、像霍夫曼(Huffman)的编码(例如:CAVLV、MPEG-2以及VC-1)和/或算术编码(例如:CABAC)。通过延伸对应于一或多执行单元的指令集,以及提供额外的自动管理位流的硬件来执行熵译码方法,以在CAVLV译码以及CABAC译码中执行内容模型。在一实施例中,熵编码表系使用不同的存储器表格或是其他的数据结构(例如只读存储器(read only memory,ROM)表)。 
此外,自动位流缓冲器具备一些优点,例如,一旦位流缓冲器的直接存储器存取(direct memory access,DMA)引擎得 知位流的位置(地址),便会自动管理位流而不需要进一步的指令。相较于传统的微处理器/数字信号处理器(digital signal processor,DSP)系统,位流管理代表了大量的间接费用。再者,透过追踪所使用的位数量,位流缓冲器机制可以侦测和处理错误的位流。 
本发明译码系统实施例的另一优点是将指令延迟(latency)减缩到最小。例如,因为CABAC译码是非常连续的动作且不易利用多执行序处理,因此在不同实施例中使用一种转发(forwarding)机制(例如暂存转发)以减少有效相依延迟。进一步解释,许多深管线(deep-pipeline)以及多执行序处理器的限制是无法在同一线程(thread)中每一周期内执行指令。有些系统可使用一般转发,其系通过检查先前结果的运算元(operand)地址以及指令运算元地址,当两者相同时,则使用先前结果的运算元。传统上,一般转发需要复杂的比较和多工。在译码系统的部分实施例中,不管是使用先前的计算结果(例如储存在内部的暂存器)或是原始运算元的数据,将利用不同的转发型式来使用指令中的位以编码,例如:总共2位而每一运算元使用1位。通过这种方式,可以减少整体的延迟而改善处理器管线的效率。 
图1系显示图形处理系统100的一实施例的方块图,其中译码系统以及方法的实施例于图形处理系统100中实施。在部分实施例中,图形处理系统100可以是计算机系统。图形处理器系统100可包括由显示接口单元(display interface unit,DIU)104驱动的显示装置102以及局部存储器106(例如:可包括显示缓冲器、帧缓冲器、纹理缓冲器、命令缓冲器等)。局部存储器106亦可取代为帧缓冲器或是储存单元。局部存储器106经由一或多个存储接口单元(memory interface unit,MIU)110耦接于图形 处理单元114。在一实施例中,存储接口单元110、图形处理单元114以及显示接口单元104皆耦接至与高速外围设备互连(peripheral component interconnect express,PCI-E)相容的总线接口单元(bus interface unit,BIU)118。在一实施例中,总线接口单元118可使用图形地址重新映射表(graphics address remapping table,GART),然而亦可使用其他的存储映射(mapping)机制。图形处理单元114包括译码系统200,其将描述于后。在部分实施例中,虽然译码系统200系显示为图形处理单元114内的一个元件,译码系统200亦可包括所显示的图形处理系统100的一或多个额外元件或是不同元件。 
总线接口单元118耦接于芯片组122(例如:北桥芯片组)或开关。芯片组122包括接口电子电路以增强来自中央处理单元126(又称主机处理器)的信号,并分离从系统存储器124进出的信号以及从输入输出(I/O)装置(未显示)进出的信号。虽然提到了PCI-E总线协议,然而在部分实施例中亦可在主机处理器与图形处理单元114之间使用其他的连接和/或通讯方式,例如:PCI、专属高速总线等。系统存储器124亦包括驱动软件128,其可使用中央处理单元126将指令集或命令传送至图形处理单元114内的暂存器。 
在部分实施例中,可透过芯片组122使用额外的图形处理单元经由PCI-E总线协议耦接至图1中的元件。在一实施例中,图形处理单元100可包括图1所显示的所有元件,或是较少元件和/或不同于图1所显示的元件。再者,在部分实施例中,可使用额外的元件,例如耦接至芯片组122的南桥芯片组。 
参考图2,图2系显示实施译码系统200的一实施例的处理环境的方块图。特别是图形处理单元114包括图形处理器202。图形处理器202包括多执行单元(execution unit,EU)及计算核 心204(亦称为软件可编程核心处理单元)。在一实施例中,计算核心204包括内嵌于执行单元数据路径(execution unit data path,EUDP)的译码系统200(亦称为VLD单元),其中执行单元数据路径被分配至一或多个执行单元。图形处理器202亦包括执行单元集合(execution unit pool,EUP)控制、顶点/串流快取单元206(这里称为执行单元集合控制单元206)以及具有固定功能逻辑单元(例如包含三角形设定单元(triangle set-up unit,TSU)、栅格-图块产生器(span-tile generator,STG)等)的图形管线208,其将描述于后。计算核心204包括多执行单元的集合以符合不同着色器程序的着色任务的计算要求,其中着色器程序包括顶点着色器、几何着色器和/或像素着色器处理图形管线208的数据。在一实施例中,当着色器透过计算核心204执行译码系统200的功能时,图形处理器实施例的说明将被描述,接着说明译码系统200的特定实施例。 
译码系统200可以周硬件、软件、韧体或其组合等方式而实施。在较佳实施例中,译码系统200系以硬件以及软件的方式实施,其包括下列已知技术的任何技术或是结合:具有逻辑门且可对数据信号进行逻辑功能的离散逻辑电路、具有适当组合逻辑门的专用集成电路(application specific integrated circuit,ASIC)、可编程门阵列(programmable gate array,PGA)、现场可编程门阵列(field programmable gate array,FPGA)以及状态机(state machine)等。 
参考图3以及图4,其分别为图形处理器202的实施例中选择元件的方块图。如前所述,译码系统200的一实施例可以是具有扩充指令集以及额外硬件元件的图形处理器202内的着色器,图形处理器202的一实施例以及对应的处理将描述于后。虽然图3与图4并未显示图形处理的全部元件,但是图3与图4所显示的元 件已足够使本领域技术人员理解到相关图形处理器的功能及架构。参考图3,可编程处理环境的中心为计算核心204,其包括译码系统200并可处理各种指令。不同型式的着色器程序可执行或映射到计算核心204,例如顶点、几何、像素着色器程序。多重事件(multi-issue)处理器的计算核心204可以在单一时脉周期内处理多个指令。 
参考图3,图形处理器202的相关元件包括计算核心204、纹理过滤(filtering)单元302、像素包装器(packer)304、命令流处理器306、写回单元308以及纹理地址产生器310。图3亦包括执行单元集合控制单元206,其中执行单元集合控制单元206亦包括顶点快取存储器和/或串流(stream)快取存储器。举例来说,如图3所显示,纹理过滤单元302提供纹素(texel)数据给计算核心204(输入A以及输入B)。在部分实施例中,纹素数据为512位数据。 
像素包装器304提供像素着色输入给计算核心204(输入C以及输入D),像素着色输入亦为512位数据格式。此外,像素包装器304向执行单元集合控制单元206请求像素着色任务,而执行单元集合控制单元206便会提供指定执行单元号码及线程号码给像素包装器304。像素包装器304及纹理过滤单元302为已知的技术,因此将不再进一步描述于此。虽然图3所显示的像素及纹素包为512位的数据包,但是依据图形处理器202所需的效能特征,可在部分实施例中改变包的大小。 
命令流处理器306提供三角形顶点索引给执行单元集合控制单元206。在图3的实施例中,索引为256位的数据。执行单元集合控制单元206组合来自串流快取存储器的顶点着色输入,并传送数据至计算核心204(输入E)。执行单元集合控制单元206亦组合几何着色输入并传送至计算核心204(输入F)。执行单 元集合控制单元206亦控制执行单元输入402及执行单元输出404(图4)。换句话说,执行单元集合控制单元206控制各输入流以及各输出流至计算核心204。 
经过处理之后,计算核心204提供像素着色输出(输出J1与输出J2)至写回单元308。像素着色输出包括色彩信息,例如红/绿/蓝/透明度(RGBA)信息,其为本领域技术人员所熟知。像素着色输出可以是两条512位的数据流。其他实施例亦可使用其他的位宽度。 
相似于像素着色输出,计算核心204亦输出包括UVRQ信息的纹理坐标(输出K1以及输出K2)至纹理地址产生器310。纹理地址产生器310发出纹理描述符号请求至计算核心204的L2快取存储器408(输入X),而计算核心204的L2快取存储器408(输出W)会输出纹理描述符号数据至纹理地址产生器310。纹理地址产生器310及写回单元308为已知的技术,因此将不再进一步描述于此。再者,虽然URVQ及RGBA是显示为512位的数据,但是此参数亦可随不同实施例而改变。在图3的实施例中,总线分成两条512位通道,其中各通道保持四像素的128位RGBA色彩值及128位UVRQ纹理坐标。 
图形管线208包括固定功能的图形处理功能。回应来自驱动软件128的命令,例如绘出三角形,则顶点信息通过计算核心204内的顶点着色逻辑单元以实施顶点转换。尤其是从物件空间转换物件成为工作空间和/或屏幕空间的三角形。三角形通过计算核心204至图形管线208的三角形设定单元,其中图形管线208结合基元(primitive),并亦执行已知的任务,例如:边界盒(bounding box)产生、拣选(culling)、边缘功能产生(edge function generation)以及三角形层级剔除(triangle level rejection)。三角形设定单元传递数据至图形管线208中具有图 块产生功能的栅格及图块产生单元。因此,数据物件被分割成图块(例如8×8、16×16等),并传递至其他的固定功能单元以执行深度(例如z-值)处理,例如z-值的高阶(例如:在相似的程序下,高阶使用的位数比低阶少)剔除。然后,根据所接收的纹理及管线数据,将z-值传回至计算核心204的像素着色逻辑元件以作为像素着色功能的效能。计算核心204将已处理的值输出至位于图形管线208内的目的单元。在不同快取存储器需要更新内部值之前,目的单元用以执行α测试及模板测试。 
值得注意的是,计算核心204的L2快取存储器408以及执行单元集合控制单元206之间亦有512位的顶点快取存储器溢出数据的传输。此外,从计算核心204输出两个512位顶点快取存储器写入数据(输出M 1及输出M2)至执行单元集合控制单元206做进一步的处理。 
参考图4,图4系显示计算核心204的附加元件以及相关元件。计算核心204包括执行单元集合412。在一实施例中,执行单元集合412包括一或多个执行单元420a-420h(统称为执行单元420)。每一个执行单元420可以在一个时脉周期内处理多个指令。因此,执行单元集合412在尖峰时可同时或是大体上同时处理多个线程。虽然图4显示了8个执行单元420(标示为EU0-EU7),可以了解的是其并非用以限定执行单元的数量为8,在部分实施例中可增加或是减少执行单元的数量。至少一个执行单元(例如执行单元420a,EU0)包含译码系统200的一实施例,其将进一步描述于后。 
计算核心204亦包括存储器存取单元(memory access unit,MXU)406,其中存储器存取单元406经由存储器接口仲裁器410耦接于L2快取存储器408。L2快取存储器408从执行单元集合控制单元206接收顶点快取存储器溢出数据(输入G),并提供顶 点快取存储器溢出数据(输出H)给执行单元集合控制单元206。此外,L2快取存储器408从纹理地址产生器310接收纹理描述符号请求(输入X),并对所接收到的请求提供纹理描述符号数据(输出W)给纹理地址产生器310。 
存储器接口仲裁器410对局部视频存储器提供控制接口(例如:画面缓冲器或是局部存储器106)。总线接口单元118对系统提供如PCI-E总线的接口。存储器接口仲裁器410以及总线接口单元118提供了存储器以及L2快取存储器408之间的接口。在部分实施例中,L2快取存储器408经由存储器存取单元406耦接至存储器接口仲裁器410与总线接口单元118。存储器存取单元406将从L2快取存储器408以及其他区块得到的虚拟存储器地址转换成实际存储器地址。 
存储器接口仲裁器410对L2快取存储器408提供存储器存取(例如读出/写入存取)、指令/常数/数据/纹理的提取、直接存储器存取(例如载入/储存)、暂存存取的索引、暂存器溢出以及顶点快取存储器内容溢出等。 
计算核心204更包括执行单元输入402以及执行单元输出404,并分别用于提供输入给执行单元集合412以及接收来自执行单元集合412的输出。执行单元输入402以及执行单元输出404可以是交叉开关(crossbar)或是其他总线,或是其他已知的输入与输出架构。 
执行单元输入402接收来自于执行单元集合控制单元206的顶点着色输入(输入E)以及几何着色输入(输入F),并提供信息给执行单元集合412以供各执行单元420进行处理。此外,执行单元输入402接收像素着色输入(输入C与输入D)以及纹素包(输入A与输入B),并将这些包传送至执行单元集合412以供各执行单元420进行处理。再者,执行单元输入402从L2快 取存储器408接收信息(L2读取),以及当需要时将这些信息提供给执行单元集合412。 
在图4的实施例中,执行单元输出404被分配成偶输出404a以及奇输出404b。相似于执行单元输入402,执行单元输出404可以是交叉开关、总线或是其他已知的架构。执行单元偶输出404a处理偶执行单元420a、420c、420e以及420g的输出,而执行单元奇输出404b处理奇执行单元420b、420d、420f以及420h的输出。执行单元偶输出404a以及执行单元奇输出404b共同地接收来自于执行单元集合412的输出,例如:UVRQ以及RGBA。这些输出可回传至L2快取存储器408或是从计算核心204经由输出J1以及输出J2输出至写回单元308,或是经由输出K1及输出K2输出至纹理地址产生器310。 
执行单元集合412的执行单元流程通常包括多个层级,其包括:描绘内容层级、线程或任务层级,以及指令或执行层级。在任一时间点,各执行单元420可准许两个描绘内容,其中通过使用一位标志或是其他机制来识别内容。在属于这个内容的任务开始之前,从执行单元集合控制单元206传递内容信息。内容层级信息可包括着色器种类、输入/输出暂存器的数量、指令起始地址、输出映射表、顶点识别符以及各个常数缓冲器内的常数。执行单元集合412的各执行单元420可同时储存多个任务或线程(例如在部分实施例中有32个线程)。在一实施例中,各线程系根据程序计数器来提取指令。 
执行单元集合控制单元206可作为任务的总排程,并利用数据驱动(data-driven)方法(例如:在输入内的顶点、像素以及几何包)来指派执行单元420内的适当线程。举例来说,执行单元集合控制单元206指派一线程给执行单元集合412的各执行单元420内的一空线程槽(slot)。当开始执行线程之后,由顶点 快取存储器、其他元件或是模块(根据着色器种类)所提供的数据将放置在通用暂存缓冲器中。 
通常,图形处理器202系使用可编程顶点、几何以及像素缓冲器。不把这些元件当成具有不同设计以及指令集的各个固定功能单元而实施这些元件的功能或是操作,而是通过具有统一指令集的执行单元420a、420b...420n的集合来执行这些操作。除了执行单元420a(其包括译码系统200,因此具有额外的功能)之外,各执行单元420的设计相同并且用于编程操作。在一实施例中,各执行单元420可同时地进行多线程操作。当顶点着色器、几何着色器以及像素着色器产生不同的着色任务时,这些着色任务将传送至各个的执行单元420去执行。在使用顶点着色器的一实施例中,译码系统200可以被实施,其具有部分修改和/或与其他执行单元420有差别。举例来说,包含译码系统200的执行单元(例如:执行单元420a)与其他执行单元(例如:执行单元420b)之间的差异是执行单元420a使用一译码系统200。而其他执行单元与执行单元420a不同的地方是在于一或多个对应的内部缓冲器中译码系统200安排。译码系统200的数据系通过连接413以及执行单元输入402从存储器存取单元406所接收。 
当各个任务产生时,执行单元集合控制单元206会指派这些任务给不同执行单元420中可使用的线程。当任务完成时,执行单元集合控制单元206进一步管理相关线程的释放。就这点而言,执行单元集合控制单元206指派顶点着色器、几何着色器以及像素着色器的任务给不同执行单元420的线程,并记录相关的任务以及线程。具体地,执行单元集合控制单元206会维持全部执行单元420的线程以及存储器的资源表(未显示)。执行单元集合控制单元206会明确知道哪一个线程被指派给任务并使用、 当线程结束后哪一个线程会被释放、多少共用暂存器文件存储器暂存器(register file memory register)在使用中,以及每一个执行单元有多少闲置空间可使用。 
因此,当指派任务给执行单元(例如执行单元420a)时,执行单元集合控制单元206将标示此线程为忙碌,并将全部可使用的共用暂存器文件存储器减去各线程所占用的暂存器文件覆盖区(footprint)的数量。覆盖区是由顶点着色器、几何着色器及像素着色器的状态而设定或决定。再者,各着色器状态可以有不同的覆盖区大小。例如,顶点着色器线程可以要求10个共用暂存器文件暂存器,而像素着色器线程可以仅要求5个共用暂存器文件暂存器。 
当线程完成其被指派的工作时,执行该线程的执行单元420会发出信号给执行单元集合控制单元206。接着,执行单元集合控制单元206会更新资源表以标注该线程未使用,并将全部线程共用暂存器文件空间的数量加回至可用空间。当所有的线程都是忙碌或是所有的共用暂存器文件存储器都被分配时(或是剩下的暂存器空间太小而无法容纳额外的线程时),执行单元420被视为已全满,以及执行单元集合控制单元206将不会指派任何额外或是新的线程给该执行单元。 
在各执行单元420内部亦有一个线程控制器以负责管理或标示各线程为使用中(例如执行中)或是可使用。就这点而言,至少在一实施例中,当顶点着色器正在执行译码系统200的功能时,执行单元集合控制单元206可以避免几何着色器以及像素着色器在同一时间被执行。 
图5A系显示具有前述图形处理器202以及计算核心204特征的执行单元420a,其包括内嵌译码系统200的执行单元数据路径512。具体来说,图5A是执行单元420a的方块图。在一实施 例中,执行单元420a包括指令快取存储器控制器504、耦接于指令快取存储器控制器504的线程控制器506、缓冲器508(例如:常数缓冲器)、共用暂存器文件(common register file,CRF)510、耦接于线程控制器506和缓冲器508以及共用暂存器文件510的执行单元数据路径(EU data path,EUDP)512、执行单元数据路径先进先出缓冲器(first in first out,FIFO)514、述词暂存器文件(predicate register file,PRF)516、纯量暂存器文件(scalar register file,SRF)518、数据输出控制器520以及线程任务接口524。如前所述,执行单元420从执行单元输入402接收输入,并提供输出给执行单元输出404。 
线程控制器506提供执行单元420a的控制功能,其包括管理各线程的功能以及判断功能,例如决定如何执行线程。执行单元数据路径512包括译码系统200,将进一步描述于后,其通常包括执行不同计算的功能,并包含像是浮点以及整数计算逻辑单元(arithmetic logic unit,ALU)、移位逻辑功能等的逻辑电路。 
数据输出控制器520将已完成的数据移至耦接于执行单元输出404的某些元件,例如执行单元集合控制单元206的顶点快取存储器、写回单元308等。执行单元数据路径512传送“任务结束”的信息给数据输出控制器520,并告知任务已完成。数据输出控制器520包含储存器以储存完成的任务(例如32项目(entry))以及多个写入端口。数据输出控制器520从储存器选择任务,并通过着色描绘内容所指定的暂存器位置,从共用暂存器文件510读取所有的输出数据项目,并将数据发送至执行单元输出404。 
线程任务接口524送出执行单元420a完成的任务识别符给执行单元集合控制单元206。任务识别符会通知执行单元集合控 制单元206以指派新任务给一特定执行单元(例如:执行单元420a)。 
在一实施例中,缓冲器508可分成16个区块,其中各区块有16槽,而每一槽有128位的水平向量常数。着色器使用运算元以及索引以存取常数缓冲器槽。举例来说,索引可以是包括32位不具正负号的整数或是接近32位不具正负号的常数的暂时暂存器。 
指令快取存储器控制器504是连接到线程控制器506的接口区块。当线程控制器读取请求存在时(例如从指令存储器提取可执行着色器码),指令快取存储器控制器504较佳地通过查找标签表(未显示)以执行命中/未命中(hit/miss)测试。举例来说,当请求的指令是位于指令快取存储器控制器504的快取存储器中时,则命中发生。当所请求的指令将从L2快取存储器408或是局部存储器106中提取时,则未命中发生。当命中发生时,如果没有来自执行单元输入402的请求,则指令快取存储器控制器504即可同意请求,这是因为指令快取存储器控制器504的指令快取存储器只有一个读写端口,而执行单元输入402具有最高的优先权。否则,如果未命中发生时,当L2快取存储器408内有可取代的区块以及有空间存在于暂停请求的执行单元数据路径先进先出缓冲器514中,指令快取存储器控制器504可同意请求。在一实施例中,指令快取存储器控制器504的快取存储器具有32组,其中每一组有4个区块。各区块带有2位状态信号以指示三种状态,其分别是无效、载入或是有效状态。在区块载入L2数据之前,区块为“无效”状态;当等候L2数据时,区块变为“载入”状态;以及当L2数据载入后,区块变为“有效”状态。 
经由执行单元数据路径512可对述词暂存器文件516进行读写。执行单元输入402作为进入数据与执行单元420a的接口。在 一实施例中,执行单元输入402包含一个8项目先进先出缓冲器以缓冲进入数据。执行单元输入402亦可传送数据至指令快取存储器控制器504的指令快取存储器以及常数缓冲器508。执行单元输入402亦维持着色器内容。 
执行单元输出404作为从执行单元420a送出数据至执行单元集合控制单元206、L2快取存储器408以及写回单元308的接口。在一实施例中,执行单元输出404包含一个4项目先进先出缓冲器,用以接收仲裁的请求,并缓冲执行单元集合控制单元206的数据。执行单元输出404包含多种功能,其包括仲裁指令快取存储器读取请求、数据输出写入请求以及执行单元数据路径读出/写入请求的功能。 
共用暂存器文件510用于储存输入、输出以及暂存数据。在一实施例中,共用暂存器文件510包括具有128×128位暂存器文件的一读一写端口和一读写端口的八个存储库(bank)。一读一写端口是由执行单元数据路径512所使用,以供由指令执行所初始的读出以及写入存取。存储库0、2、4以及6系由偶数线程所共用,而存储库1、3、5以及7系由奇数线程所共用。线程控制器506比对不同线程的指令,并确认共用暂存器文件的存储器没有读出或写入存储库的冲突。 
一读写端口是由执行单元输入402以及数据输出控制器520所使用,用以载入初始线程输入数据并将最后线程输出写至执行单元集合控制单元数据缓冲器及L2快取存储器408或是其他模块。执行单元输入402以及执行单元输出404共用一个读写输入/输出端口,以及在一实施例中,写入比读出具有较高的优先权。512位的输入数据进入四个不同的存储库以避免将数据载入至共用暂存器文件510时会发生冲突。传送2位通道索引、数据以及512位对齐基准地址(aligned base address)以指定输入数 据的开始存储库。举例来说,当开始通道索引为1时,假设线程基准存储库偏移量(offset)为0,则从最低有效位(lest significant bit,LSB)起算的第一个128位被载入至存储库1,下一个128位被载入至存储库2...等,以及最后一个128位被载入至存储库4。值得注意的是,使用线程ID的两个最低有效位来产生存储库偏移量,以随机排列每一个线程的开始存储库位置。 
可使用共用暂存器文件暂存器索引以及线程ID以建立唯一的逻辑地址,使标签能比对共用暂存器文件510所写入以及读出的数据。举例来说,地址可以排成128位,即共用暂存器文件存储库的宽度。通过结合8位的共用暂存器文件暂存器索引以及5位的线程ID,可以建立13位的地址以产生唯一的地址。每一个1024位线具有一标签,以及每一位线有两个512位项目(字)。各字储存于4个存储库中,以及将共用暂存器文件暂存器索引的两个最低有效位加入至目前线程的存储库偏移量以建立存储库选择。 
标签比对方法可让不同线程的暂存器共同使用共用暂存器文件510以有效利用存储器,因为执行单元集合控制单元206记录共用暂存器文件510的存储器使用程度,并确保对执行单元420a的新任务进行排程之前有足够的空间。 
对照于目前线程的全部共用暂存器文件暂存器的大小以检查目标共用暂存器文件暂存器索引。在线程控制器506着手进行线程以及着色器执行开始之前,输入数据就被预期存放在共用暂存器文件510内。当线程执行结束后,通过数据输出控制器520从共用暂存器文件510读取输出数据。 
前述执行单元420的实施例包括内含译码系统200的实施例的执行单元数据路径512,图5B系显示执行单元数据路径512的一实施例。执行单元数据路径512包含暂存器文件526、多工器 528、向量浮点单元532、向量整数计算逻辑单元534、特殊目的单元536、多工器538、暂存器文件540,以及译码系统200。译码系统200包含一或多个可变长度译码(variable length decoding,VLD)单元530,其可以译码一或多个串流。例如,单一可变长度译码单元530可以译码单一串流,两个可变长度译码单元530(如虚线所显示,因简洁之故而未显示其连接关系)可以同时译码两个串流等等。为了说明,之后的叙述仅针对使用单一可变长度译码单元530的译码系统200的操作,可以了解的是其原则可推衍至超过一个可变长度译码单元。 
如图所示,执行单元数据路径512包含对应于可变长度译码单元530、向量浮点单元532、向量整数计算逻辑单元534以及特殊目的单元536的一些平行数据路径,其根据所接收到的指令执行对应的操作。暂存器文件526接收运算元(标示为SRC1与SRC2)。在一实施例中,暂存器文件526可对应于图5A所显示的共用暂存器文件510、述词暂存器文件516,和/或纯量暂存器文件518。值得注意的是在某些实施例中,可使用额外的运算元。操作(功能)信号线542提供各单元530-536接收运算信号的媒介(medium)。当前信号线544耦接至多工器528,传送编码成指令的当前值以供各单元530-536完成小整数值的整数运算。指令译码器(未显示)提供运算元、运算(功能)信号以及当前信号。数据路径(可包含写回阶段)末端的多工器538选择已被选择的正确数据路径的输出结果并提供输出给暂存器文件540。暂存器文件540包括目标元件,其可以是相同于暂存器文件526或是不同暂存器的元件。值得注意的是在实施例中,当来源以及目标暂存器包含相同元件时,指令提供的位具有由多工器所使用的来源与目标选择以多路传输数据至/来自适当暂存器文件。 
因此,执行单元420a可视为多阶管线(例如4阶管线,具有4个计算逻辑单元),并在4个执行阶段中发生译码操作。需要实施延迟以允许执行译码线程。举例来说,当位流缓冲器发生向下溢位(underflow)、等候初始内容存储器、等候将位流载入至先进先出缓冲器以及SREG暂存器(解释于后),和/或处理时间已超过时间的既定定限(threshold)时,可以在执行阶段加入延迟。 
如前所述,在部分实施例中,译码系统200能使用单一执行单元420a同时译码两个位流。举例来说,根据一个扩充指令集,译码系统可以使用两个数据路径(例如新增另一可变长度译码单元530)以同时进行两个串流的译码,然而可一次译码较多或较少的串流(因此会使用较多或较少的数据路径)。当需要多个串流时,译码系统200的部分实施例并未限定于同时译码。再者,在部分实施例中,单一可变长度译码单元530可以执行串流的多个同时发生的译码。 
在实施例中,当译码系统200使用两个数据路径时,两个线程可以同时运行。例如,在两串流译码的实施例中,线程的数量限制为两个,其中指派第一线程(例如线程0)给译码系统200的第一存储库(即可变长度译码单元530),而指派第二线程(例如线程1)给译码系统200的第二存储库(例如图5B虚线所显示的可变长度译码单元)。在部分实施例中,两个或多个线程可运作在单一存储库。在部分实施例中,虽然显示译码系统200是内嵌于执行单元数据路径512内,其亦可包含其他的元件,例如执行单元集合控制单元206内的逻辑电路。在下面的描述中,可变长度译码单元530以及译码系统200可交换使用,而可以了解到译码系统200可包括一或多个可变长度译码单元530。 
将描述位于译码系统200下的结构,而各单独译码系统模式 描述如下。特别地,在一实施例中,由驱动软件128所提出的下列指令可设定不同模式。进一步描述如下:指令INIT_CTX(设置译码系统200为CABAC处理模式)、指令INIT_CAVLC(设置译码系统200为CAVLC处理模式)、指令INIT_MPEG2(设置译码系统200为MPEG-2处理模式),以及指令INIT_VC1(设置译码系统200为VC-1/WMV9处理模式)。在部分实施例中,经由指令INIT_AVS可提供额外的初始化,其可初始化音频视频标准(audio video standard,AVS)位流编码。对EXP-Golomb系统而言,在CABAC以及CAVLC编码下使用EXP-Golomb编码符号,因此指令INIT_CTX以及指令INIT_CAVLC下载EXP-Golomb系统的位流。其中,不需要对EXP-Golomb系统进行初始。举例来说,对要被编码的符号而言,在位流(例如在片段标头电平的位设定)所接收的计算编码标志会显示符号为EXP-Golomb编码、CABAC编码以及CAVLC编码。当使用EXP-Golomb编码时,执行下列所提出的适当的EXP-Golomb编码指令。虽然这些模式会影响编码引擎的实施,其亦会影响初始、使用以及更新存储器的方法,进一步描述于后。 
参考图5C,图5C系显示可变长度译码单元530的功能方块图,用以根据所选择的模式完成任何多个译码操作之一。可变长度译码单元530包括可变长度译码逻辑电路550,其中可变长度译码逻辑电路550耦接于由SREG串流缓冲器/DMA引擎562(于此亦称为DMA引擎模块)所组成的位流缓冲器管理以及邻近内容存储器(neighborhood context memory,NCM)564(亦称为内容存储器)。可变长度译码单元530亦包括一或多个暂存器566,其包括用以储存来自执行单元420(“CONTROL”,例如使用来自执行单元的译码器的控制信号以选择可变长度译码逻辑电路550的模块)有关给定模式的选择的译码数据的暂存器、 运算元(例如“SRC1”以及“SRC2”),以及转发暂存器(例如“F1”以及“F2”)。SREG串流缓冲器/DMA引擎562包括SREG暂存器562a以及位流缓冲器562b,将进一步解释于后。 
在一实施例中,可变长度译码逻辑电路550包括图5C所显示的模块(亦称为逻辑电路)。可变长度译码逻辑电路550包括硬件,其包括暂存器和/或布林或是计算逻辑电路,用以执行指令并根据所选择的模式执行译码。进一步解释,可变长度译码逻辑电路550包括读取邻近内容存储器模块(read_NCM)568、检查字串(INPSTR)模块570、读取模块572、计算前导1(CLO)模块574、计算前导0(CLZ)模块576、MPEG模块578、CABAC模块580、CAVLC模块582,以及耦接于计算前导0(CLZ)模块576的Exp-Golomb模块584。计算前导0(CLZ)模块576以及计算前导1(CLO)模块574包括可译码MPEG-2以及VC-1位流的指令。关于Exp-Golomb模块584,Exp-Golomb符号由跟在1之后的一些前导零所编码,接着一些位会等于零的数量。计算前导0(CLZ)模块576侦测前导零的数量,接着移动这些位加上1以记录前导零的数量。Exp-Golomb模块584读取尾随位(trailing bit)的数量,并根据Exp-Golomb模式而执行计算以判断值。 
读取邻近内容存储器模块568包括对应于产生地址以及请求存储器读取操作的逻辑电路。在存储器读取操作中,从邻近内容存储器564读取固定的位数并输出数据至目标暂存器。邻近内容存储器指令为从邻近内容存储器564读取32位的数据并经由多工器586传回所读取的值给执行单元420a的目标暂存器。CABAC以及CAVLC编码没有使用到邻近内容存储器指令,然而对其他可变长度译码运算而言(例如:VC-1、MPEG-4ASP(DivX)),可使用邻近内容存储器564以维持可变长度译码表,以及可使用读取邻近内容存储器模块以读取可变长度译码表内 的值。 
读取模块572包含逻辑电路以读取SREG暂存器562a,且从SREG暂存器562a的最高有效位(most significant bit,MSB)部分撷取特定位数,零延伸(zero extend),并将值放入暂存器内。因此,读取模块572包含逻辑电路以执行读取操作,其读取特定位数并从SREG暂存器562a移除以传回不具正负号数值的值给目标暂存器。检查字串模块570从SREG暂存器562a读取固定位数,但没有从SREG暂存器562a移除任何位(例如不改变指标位置),并传回不具正负号数值的值给目标暂存器。 
各模块568-584皆耦接至多工器586,其中多工器586根据各自的命令而选择一模式。在一实施例中,多工器586的输出提供至目标暂存器以进一步处理。模块568-582的输出亦提供至多工器586,其对应于一命令,选择模块568-582的输出并提供至SREG暂存器562a以作为输入。在各个相同的运算期间,提供来自转发、控制以及运算暂存器566的数据给CABAC模块580以及CAVLC模块582使用。经由接收控制信号(标示为图5C的EXP_GOLOMB_OP)以致能Exp-Golomb模块584。Exp-Golomb模块584接收来自计算前导0(CLZ)模块576的输入并提供输出至多工器586。CABAC模块580以及CAVLC模块582可使用邻近内容存储器564。 
对除了CABAC以及CAVLC模式之外的全部模式而言,读取指令为从SREG暂存器562a读取n位,并经由多工器586传回所读取的值至执行单元420a的目标暂存器。对除了CABAC以及CAVLC模块的模式而言,使用邻近内容存储器564以维持上方以及左方的内容值,其为自动读取以作为译码程序的部分。这 些元件以及可变长度译码单元530的其他元件将结合不同模式而进一步描述于后。值得注意的是在部分实施例中,可变长度译码逻辑电路550可包括少于(或多于)全部所显示的模块和/或多工器。 
将描述可变长度译码单元530的一般功能,而可变长度译码单元530配置在不同模式下的操作将进一步描述于后。 
CABAC译码 
下面简单解释CABAC译码,然后说明译码系统200的一些实施例。通常,H.264标准的CABAC译码程序可以说明为包括解析第一语法成分的已编码位流、初始化一片段的内容变量以及第一语法成分的译码引擎,以及二进制化(binarization)。接着,对每一个二进制值(bin)进行译码,其程序包括获得内容模块以及各语法成分的二进制值的译码,直到获得有意义的字码(codeword)比对。更进一步解释,译码系统200对语法成分进行译码,其中每一语法成分可以代表量子化系数、动作向量、和/或预测模式或其他有关宏区块(macroblock)的参数,用以表示影像或是视频的特定图场(field)或是帧(frame)。每一个语法成分可以包含连续的一或多个二进制符号或是二进制值,而每一个二进制符号会被译码成0或1值。译码系统200根据输入二进制符号的发生机率控制输出位长度。 
当某些符号(称为主要符号)比其他符号更可能发生,CABAC编码器可提供高效率编码方法。这些主要符号可用较小位/符号比例来进行编码。编码器持续更新进入数据的频率统计,并适当地调整编码演算的计算以及内容模型。具有较高可能性的二进制符号称为高可能性符号(most probable symbol,MPS),而其他符号则为低可能性符号(least probable symbol, LPS)。二进制符号与其内容模型结合,具有对应于低可能性符号的可能性以及高可能性符号值的各内容模型。 
为了对各二进制符号进行译码,译码系统200决定或是接收一对应范围、偏移量以及内容模型。内容模型是根据符号种类以及由邻近空间(例如目前宏区块或是属于前次译码的相邻宏区块)所决定的内容而从多个可能的内容模型中所选择。可由内容模型决定内容辨识符号,从而并使用以得到高可能性符号值以及用于译码程序的译码引擎的目前状态。范围表示一个区间(interval),每经过一次二进制译码就会缩小一次范围。 
区间分为两个子范围,分别对应于高可能性符号值以及低可能性符号值。通过将范围以及已知内容模型所指定的低可能性符号可能性相乘则可计算出低可能性符号子范围。通过将范围减去低可能性符号子范围可计算出高可能性符号子范围。偏移量是决定译码二进制值的标准,且通常是从编码位流中取出前9位进行初始化。对于已知二进制符号译码及内容模型,当偏移量小于高可能性符号子范围时,二进制值为高可能性符号值,而下一次译码所使用的范围会设为高可能性符号子范围。反之,二进制值由低可能性符号决定、高可能性符号值的反向值会包含在相关的内容模型中,以及下一个范围会设为低可能性符号子范围。译码程序的结果为连续的已译码二进制值,其被评估以判断此序列是否符合有意义的字码。 
概括叙述译码系统200的操作与CABAC译码的关系,下列叙述提出在CABAC译码程序的内容中译码系统200的各种元件,可将符合实际应用的各种变动列入考虑。熟悉本领域技术人员可知下列所使用的许多术语是出自H.264规格,为了简洁不再赘述,除非是有助于了解所述的不同程序和/或元件,才会再做进一步的说明。 
图6A至图6F系显示译码系统200及相关元件的具体实施例的方块图。如图所显示,译码系统200具有单一CABAC单元530(在图6A至图6F,所使用的CABAC单元530可与译码系统200互换),因此在实施例中,译码系统200可译码单一位流。同样的原理可应用至具有额外可变长度译码单元的译码系统200,可同时译码多个(例如两个)串流。简单地说,图6A系显示译码系统200的选择元件的方块图,而图6B系显示图6A所显示的选择元件加上其他元件的功能方块图。图6C以及图6E系显示译码系统200的内容存储器功能的方块图;以及图6D系显示使用于译码宏区块的示范机制的方块图。虽然下列叙述是有关宏区块译码的内容,但是本发明所提出的原理可应用到各种区块译码。 
参考图6A,可变长度译码单元530a包括CABAC逻辑模块580以及存储器模块650。在一实施例中,CABAC逻辑模块580包含三个模块,其分别是二进制化(BIND)模块620、取得内容(GCTX)模块622以及二进制计算译码(BARD)引擎624。二进制计算译码引擎624更包含状态索引(pStateldx)暂存器602、高可能性符号值(valMPS)暂存器604、码长范围(codlRange)暂存器606,以及码长偏移量暂存器(codlOffset)608。可变长度译码单元530a更包括存储器模块650,其包括邻近内容存储器564(亦称为宏区块邻近内容(mbNeighCtx)存储器或是内容存储器阵例)、局部暂存器612、总体暂存器614,以及SREG串流缓冲器/DMA引擎562(亦称为DMA引擎模块,将于图6C中做进一步说明),另外还有未显示的暂存器。在一实施例中,邻近内容存储器564包含如图6C的阵列结构,之后会有更进一步的说明。存储器模块650亦包括二进制字串(binstring)暂存器616。 
可变长度译码单元530a与执行单元420a的接口包括目标(DST)总线628、两个来源总线SRC1 632以及SRC2 630、共 用以及线程信息总线634,以及延迟/重置总线636。目标总线628上的数据可以直接或间接(例如经由中间快取存储器、暂存器、缓冲器或存储器)传送至图形处理单元114内部或外部的视频处理单元。目标总线628上的数据可以是多个不同格式之一,包括微软的DX API格式或是其他格式。这些数据可包含系数、宏区块参数、动作信息,和/或IPCM采样或是其他数据。可变长度译码单元530a亦包括具有地址总线638和数据总线640的存储器接口。通过从地址总线638得到地址,存储器接口可存取位流数据以供存取数据总线640所接收的数据。在一实施例中,数据总线640上的数据可以包括未编码视频串流,其包括各种信号参数以及其他数据与格式。于部分实施例中,可以使用载入-储存操作来存取位流数据。 
在开始说明可变长度译码单元530a的不同元件之前,简单说明有关CABAC译码的执行单元420a的整体操作。通常,根据片段(slice)的种类,驱动软件128(图1)准备并载入CABAC着色器至执行单元420a。CABAC着色器使用标准指令集,再加上二进制化指令、取得内容指令以及二进制计算译码指令以译码位流。因为可变长度译码单元530a使用的内容表可根据片段种类改变,其中每一片段均要载入。在一实施例中,在发出其他指令前,CABAC着色器所执行的第一个指令包含INIT_CTX指令和INIT_ADE指令。这两个指令使CABAC单元530开始译码CABAC位流,并从自动安排串流译码的指标载入位流至先进先出缓冲器,稍后将说明这两个指令。 
关于解析位流,从存储器接口的数据总线640接收位流,然后由SREG串流缓冲器/DMA引擎562进行缓冲。从片段数据解析阶段提供位流译码。亦即,位流(例如:NAL位流)包括一或多张图片,其将切割成图片档头(header)以及许多片段。 片段通常与连续的宏区块有关。在一实施例中,外部程序(即可变长度译码单元530a外部)解析NAL位流、译码片段档头并传送指向该片段数据(例如片段开始处)位置的指标。硬件(加上软件)可以从图形来解析H.264位流。不过,在一实施例中,CABAC编码仅出现于片段数据与宏区块阶段。通常,驱动软件128从片段数据阶段处理位流,因为这是应用程序以及API所提供的功能。指向片段数据位置的指标还包含片段数据的第一字节(例如:RBSPbyeAddress)以及指出是位流开始或标头位置(例如:sREGptr)的位偏移量指标(例如一或多个位)。位流的初始化将于稍后解释。在某些实施例中,可以利用主机处理器(例如图1的中央处理单元126)处理外部程序以提供图片阶段译码以及片段标头译码。在部分实施例中,由于译码系统200的编程特性,可以在任何阶段中进行译码。 
参考图5C以及图6A,SREG串流缓冲器/DMA引擎562用以分别接收总线632以及总线630的总线SRC1值以及总线SRC2值,以及对应于转发暂存器以及控制暂存器的数据。SREG串流缓冲器/DMA引擎562包含内部位流缓冲器562b,在一实施例中可为BigEndian格式的32位暂存器以及8个128位(8×128)暂存器。经由驱动软件发出如前述的初始化指令可初始设定SREG串流缓冲器/DMA引擎562。一旦初始化,便自动管理SREG串流缓冲器/DMA引擎562的位流缓冲器562b。使用SREG串流缓冲器/DMA引擎562以保留解析位的位置。在一实施例中,SREG串流缓冲器/DMA引擎562使用两个暂存器,一快速32位触发器与一较慢512或1024位存储器。位流会使用位。SREG暂存器562a以位进行操作,而位流缓冲器562b以字节进行操作,其可以节省电源。通常,指令操作在SREG暂存器562a中,并使用少许位(例如1-3位)。当SREG暂存器562a使用超过一字节的数据时, 数据(以字节片段)将从位流缓冲器562b传送给SREG暂存器562a,然后缓冲器指标会减少所传送的字节数量。当SREG串流缓冲器/DMA引擎562的DMA侦测到使用256位或是更多位时,从存储器提取256位以再填满位流缓冲器562b。因此,可变长度译码单元530a实施一个简单的循环缓冲器(256位片段×4)以记录位流缓冲器562b并提供填充。在某些实施例中,可以使用单一缓冲器,不过一个循环缓冲器需要更复杂的指标计算以跟上存储器的速度。 
可以利用初始化指令来达成位流缓冲器562b的内部动作,称为INIT_BSTR指令。在一实施例中是由驱动软件128发出INIT_BSTR指令以及其他之后说明的指令。已知位流位置的字节地址及位偏移量,INIT_BSTR指令将数据载入至内部位流缓冲器562b并开始管理程序。对于每一次呼叫处理片段数据,将发出下列格式的指令: 
INIT_BSTR  offset,RBSPbyteAddress 
发出INIT_BSTR指令以载入数据至SREG串流缓冲器/DMA引擎562的位流缓冲器562b。SRC2暂存器提供字节地址(RBSPbyteAddress),而SRC1暂存器提供位偏移量。如此,可提供下列通用的指令格式: 
INIT_BSTR  SRC2,SRC1 
其中,这个指令中的SRC1以及SRC2以及其他对应于内部暂存器566的值非限定在这些暂存器。在一实施例中,使用256位排列的存储器提取以存取位流数据,其写入至缓冲器暂存器并传送至SREG串流缓冲器/DMA引擎562的32位SREG暂存器562a。于一实施例中,在任何其他操作针对这些暂存器或是缓冲器的操作开始之前,位流缓冲器562b内的数据是以字节方式排列。通过使用排列指令可实施数据的排列,称之为ABST指令。 ABST指令排列位流缓冲器562b内的数据,其中在译码程序中,排列位(例如:填充位)最后将丢弃。 
当SREG暂存器562a使用数据时,位流缓冲器562b便会填充数据。换句话说,SREG串流缓冲器/DMA引擎562的位流缓冲器562b作为以3为模(modulo)的循环缓冲器以输入SREG串流缓冲器/DMA引擎562的32位暂存器562a。CABAC模块580与读取模块572一起可使用READ指令以从SREG暂存器562a读取数据。例如,在H.264规格中,某些符号为固定长度编码,以及通过执行这些特定位数的READ指令而得到值,并零延伸至暂存器的尺寸。READ指令的格式如下: 
READ DST,SRC1, 
其中DST对应于输出或目标暂存器。在一实施例中,SRC1暂存器包含不具正负号的整数值n。透过READ指令,从SREG暂存器562a读取n位。当从32位暂存器562a使用了256位的数据(例如译码一或多个语法成分),自动开始提取动作以获得另一个256位的数据以写入至位流缓冲器562b的暂存器,接着进入SREG暂存器562a进行使用。 
在某些实施例中,如果对应于一符号译码的SREG暂存器562a的数据已被使用了预定数量的位或字节,且位流缓冲器562b没有再接收到任何数据,则CABAC模块580可以经由延迟/重置总线636执行延迟,以便执行其他的线程(例如与CABAC译码程序无关的线程),像是顶点着色器操作。 
使用SREG串流缓冲器/DMA引擎562的DMA引擎可以减少所需的全部缓冲器以补偿存储器延迟(例如,于某些图形处理单元中,会有三百多周期)。当使用了位流,可以请求流入另外的位流数据。如果位流数据太低,且位流缓冲器562b有向下溢位的风险时(例如已知周期数量,让信号从可变长度译码单元 530a流至处理器管线),可传递延迟信号给处理器管线以暂停操作直到所等候的数据到达位流缓冲器562b。 
此外,SREG串流缓冲器/DMA引擎562原本就有处理错误位流的能力。例如,由于位流错误,有可能会没有侦测到片段结尾标示。这种侦测错误可能会导致完全地译码错误,并且使用到后来的图样或片段的位。SREG串流缓冲器/DMA引擎562记录所使用的位数。当使用的位数大于预设的定限值(可针对每一片段改变)时,结束处理程序并送出异常的信号至处理器(例如:主机处理器)。接着,处理器执行编码以尝试从错误中恢复。 
请同时参考图6A以及图6B,进一步说明可变长度译码单元530a的功能,尤其是译码引擎(例如:BARD引擎或是模块624)以及内容变量的初始化。在片段起始处且在译码对应于第一宏区块的语法成分之前,内容状态以及二进制计算译码模块624被初始化。在一实施例中,驱动软件128发出INIT_CTX指令以及INIT_ADE指令来进行初始化。 
INIT_CTX指令会启动CABAC译码模式并初始化一个或多个内容表(例如远端储存或是芯片上存储器,例如ROM)。INIT_CTX指令可根据下列指令格式而执行: 
INIT_CTX    SRC2,SRC1 
对INIT_CTX指令而言,根据位位置,运算元SRC1可具有下列一或多个关于已知H.264宏区块参数的值:cabac_init_idc、mbPerLine、constrained_intra_pred_flag、NAL_unit_type(NUT)以及MbaffFlag。需注意到constrained_intra_pred_flag、NAL_unit_type(NUT)以及MbaffFlag对应于已知H.264宏区块参数。此外,根据位位置,运算元SRC2具有下列值:SliceQPY以及mbAddrCurr。在一实施例中,进一步解释,执行INIT_CTX 指令(即CABAC内容表的初始化)需要cabac_init_idc以及sliceQPY(如量子化)参数。不过,要初始化整个CABAC引擎需要三个指令,即INIT_BTSR指令、INIT_CTX指令以及INIT_ADE指令,因此,SRC1及SRC2(例如:全部64位或各32位)中的可用位可以传递其他用于CABAC邻近内容的参数。因此两个来源暂存器SRC1以及SRC2664可以包含下列值: 
SRC1[15:0]=cabac_init_idc 
SRC1[23:16]=mbPerLine 
SRC1[24]=constrained_intra_pred_flag 
SRC1[27:25]=NAL_unit_type(NUT) 
SRC1[28]=MbaffFlag 
SRC1[31:29]=未定义 
SRC2[15:0]=SliceQPY 
SRC2[31:16]=mbAddrCurr 
SliceQPY的值是用于初始化位流缓冲器562b内的状态机(未显示)。 
虽然前文已讨论各种已知的图形与片段参数,另外提供一些关于可变长度译码单元530a的参数。在一实施例中,cabac_init_idc是针对未编码为I-picture和切换I-picture(SI)的片段所定义。换句话说,cabac_init_idc只能针对P、SP以及B片段而定义,以及当接收到I和SI片段时,cabac_init_idc为预设值。举例来说,当大概460个内容(例如I以及SI片段)被初始化时,可以将cabac_init_idc设为3(因为根据H.264规格,cabac_init_idc的值只能是0~2),致能2位以表示该片段为I或SI。 
可变长度译码单元530a亦可使用INIT_CTX指令以初始化局部暂存器612以及宏区块邻近内容存储器564阵列结构或是元件,包括与暂存相邻宏区块有关的暂存器。参考图6C,在一实 施例中,宏区块邻近内容存储器564位于图的上方。在一实施例中,宏区块邻近内容存储器564的宏区块基准邻近内容存储器排列成存储器阵列以储存有关宏区块的列(row)的数据。如图所示,宏区块邻近内容存储器564包括阵列元素mbNeighCtx[0,1,i-1,i,i+1,...119](标号为601),各元素用以储存120个宏区块中的一个宏区块至一列(例如对应于HDTV为1920×1080像素)。目前mbNeighCtxCurrent暂存器603用于储存当前译码的宏区块,而mbNeighCtxLeft暂存器605用于储存先前译码的邻近(左方)宏区块。此外,利用指标607a、607b和607c(在图6C中以箭头表示)指向暂存器603、605和阵列元素601。为了译码目前的宏区块,译码的数据储存于mbNeighCtxCurrent暂存器603。已知CABAC译码的内容本质,根据前次译码宏区块时所搜集的信息来译码目前的宏区块,亦即左方宏区块储存于左方mbNeighCtxLeft暂存器605并由指标607b所指向,而上方宏区块储存于阵列元素[i]中并由指标607c所指向。 
继续解释初始化指令,INIT_CTX指令用于初始化与目前宏区块(例如宏区块邻近内容存储器564阵列的元素)相邻的宏区块有关的上方及左方指标607c及607b。例如,左方指标607b可以设为0而上方指标607c可以设为1。此外,INIT_CTX指令会更新总体暂存器614。 
关于内容表的初始化,因应呼叫INIT_CTX指令,可变长度译码单元530a建立一或多个内容表,亦称为CTX_TABLE。在一实施例中,CTX_TABLE可以是4×460×16位表(8位给m,另外8位给n,具正负号的值)或是其他数据结构,内容表的每一个项目包含从状态索引暂存器602以及高可能性符号值暂存器604所存取的pStateIdx值及valMPS值。 
INIT_ADE指令起始化二进制计算译码模块624,亦称为译 码引擎。在一实施例中,完成INIT_BTSR指令后呼叫INIT_ADE指令。于执行INIT_ADE指令之后,可变长度译码单元530a建立两个暂存器,分别是码长范围(codlRange)暂存器606以及码长偏移量(codlOffset)暂存器608,具有下列指令或是数值: 
codlRange=0x01FE  以及 
codlOffset=ZeroExtend(READ(#9),#16) 
如此,在一实施例中,这些变量可以是9位数值。关于codlOffset指令,9位是从位流缓冲器562b所读取,零延伸(ZeroExtend)则储存于16位码长偏移量暂存器608中。部分实施例亦可使用其他数值。二进制计算译码模块624使用储存于暂存器606及608的数值以决定要输出0或1,且当二进制译码之后,这些值将进行更新。 
除了初始化码长范围暂存器606以及码长偏移量暂存器608,INIT_ADE指令操作亦初始化二进制字串暂存器616。在一实施例中,二进制字串暂存器616可以是32位暂存器,其接收来自二进制计算译码模块624的输出位。在部分实施例中可使用其他大小的暂存器。 
当宏区块编码成I_PCM数据时,二进制计算译码模块624亦被初始化。已知I_PCM数据包含像素数据,根据H.264规格,其并没有将转换或预测模型应用至原始视频数据。例如,I_PCM可被使用以供无损(lossless)编码应用。 
以上已描述与解析位流以及初始化各种译码系统元件有关的架构以及指令,下面将描述有关二进制化、接收模型信息与内容,以及根据模型及内容译码的一或多个程序。通常,可变长度译码单元530a用于取得解析语法成分(syntax element,SE)所有可能的二进制化,或是经由二进制化模块620及BIND指令至少足够取得模型信息。可变长度译码单元530a更经由取得内 容模块622及GCTX指令得到已知语法成分的内容,并根据内容及模型信息,经由二进制计算译码模块624及BARD指令实施运算译码。实际上,呼叫GCTX/BARD指令、输出一位给二进制字串暂存器616直到发现配合已知语法成分的有意义字码会构成一循环。在一实施例中,每一次译码二进制值之后,提供对应的译码位给二进制字串暂存器616,而二进制字串暂存器被读回至取得内容模块622,直到发现配对。 
更详细解释使用单一可变长度译码单元530a的译码系统架构,并同时参考图6A与图6B,经由驱动软件128所发出的BIND指令以致能二进制化模块620。于一实施例中,BIND指令具有下列格式: 
BIND    DST,#Imm16,SRC1, 
其中,DST对应于目标暂存器652,而#Imm16对应16位目前数值,以及SRC1对应于输入暂存器SRC1。BIND指令操作的输入包含语法成分(包含16位目前数值Imm)以及内容区块种类(ctxBlockCat)。语法成分可以包含任何符合H.264规格的任何语法成分型式(例如:MBTypeInI、MBSkipFlagB、IntraChromaPredMode等)。呼叫BIND指令会使得驱动软件128从储存在存储器(例如:芯片上存储器或远端存储器)中的表单(或其他数据结构)读取语法成分,并取得语法成分索引(SEIdx)。语法成分索引用于存取其他表单或是数据结构以获得如下文所描述的各宏区块参数。 
在一实施例中,目标暂存器652包含32位暂存器,其具有下列格式:位0-8(ctxIdxOffset)、位16-18(maxBinIdxCtx)、位21-23(ctxBlockCat)、位24-29(ctxIdxBlockCatOffset)以及位31(bypass flag)。这些数值(例如ctxIdxOffset,maxBinIdxCtx等等)会传送至取得内容模块622当作内容模型之 用。在此实施例中,任何未定义的保留位可以是0。根据语法成分索引以及内容区块种类的配对结果,ctxIdxBlockOffset可经由储存于远端或芯片上存储器的表单或其他数据结构而取得。表1说明一非限定实施例的表单内容: 
表1 
如果接收到未定义的内容区块种类,则可变长度译码单元530a可以把未定义参数当成0,使得ctxIdxBlockOffset被考虑成具有0值。 
呼叫BIND指令亦会使得重置信号(Rst_Signal)从二进制化模块620输出至二进制计算译码模块624,说明如下。 
为了说明二进制化模块620的各种输入与输出,这里提出根据至少一实施例的二进制化模块620的操作。呼叫二进制化模块620,则二进制化模块620撷取语法成分,并且经由软件提供已知的语法成分索引(SEIdx)。使用语法成分索引,二进制化模块620查找表单以获得maxBinIdxCtx、ctxIdxOffset以及bypassFlag的对应值。这个查找值会暂时储存在目标暂存器652的预先定义位配置。此外,使用语法成分索引以及内容区块种类,二进制化模块620进行第二次表单查找(例如:远端存储器或是芯片上存储器)以获得ctxIdxBlockOffset数值。第二次的查找值亦是暂时储存在目标暂存器652中。因此,已决定的值将用于建立目标暂存器652以作为32位数值输出目标。 
对某些语法成分而言,可使用额外的信息(语法成分与内容区块种类除外)以开始H.264译码操作。例如,对象是SigCoeffFlag以及lastSigCoeffFlag的宏区块参数而言,使用储存在宏区块邻近内容存储器564的阵列元素maxBinIdxCtx[1]里的值以及输入内容区块种类值以决定宏区块是图场编码或是帧编码。在某些实施例中,即使是不同的语法成分,同样的语法成分数目也使用于这些标志,然后使用mb_field_decoding_flag(mbNeighCtx[1]栏位)来识别。 
除了上述有关二进制化模块620的功能,注意到在图6B中,二进制化模块620可结合二进制索引暂存器654、多工器单元656和/或转发暂存器F1以及F2。至于二进制索引暂存器654以及多工器单元656,多工器单元656会根据不同输入而提供输出SRC1(例如暂存器SRC1内的值)给取得内容模块622。 
关于标示为F1的转发暂存器,当BIND(或GCTX)指令产生结果时,结果可被写入至目标暂存器(例如目标暂存器652和/或转发暂存器F1)。通过已知指令中的转发标志可表示一个指令以及对应的模块(例如取得内容模块622或二进制计算译码模块624)是否使用转发暂存器F1以及F2。代表转发暂存器的符号包括F1(即使用转发来源1的值,在一实施例中可以是指令中的位26所表示)以及F2(即使用转发来源2的值,在一实施例中可以是指令中的位27所表示)。对于取得内容模块622以及二进制计算译码模块624,数据可被转发至各个的输入,说明如下。 
前面已说明二进制化模块620以及相关程序,这里将说明关于取得内容模块622在GCTX指令方面如何取得已知模型的内容以及二进制索引。简单地说,取得内容模块622的输入包含maxBinIdxCtx、binIdx以及CtxIdxOffset,描述如下。取得内容模块622使用CtxIdxOffset及binIdx数值来计算CtxIdx的值(为一输出,代表内容索引)。GCTX指令的示范格式如下: 
GCTX    DST,SRC2,SRC1, 
其中,SRC1对应于由多工器单元656所输出的值并储存于暂存器SRC1,而SRC2对应于由目标暂存器652所输出的值并储存于暂存器SRC2,以及DST对应于目标暂存器。在一实施例中,各暂存器具有下列数值: 
SRC1[7:0]=binIdx;当目前语法成分包含codedBlockPattern 时,SRC1的值(从多工器单元656输出,并作为取得内容模块622的输入)可以是二进制索引暂存器654的值。 
SRC1[15:8]可以是levelListIdx(当计算sigCoeffFlag时)、lastSigCoeffFlag或是mbPartIdx(当计算编码区块图样的Ref_Idx或是binIdx)。当语法成分是sigCoeffFlag或是lastSigCoeffFlag时,多工器单元656可以用来传送levelListIdx。 
SRC1[16]可包含iCbCr标志,而当其值为0时,区块为Cb色度区块。此外,SRC1[16]可包含L0/L1值,如果是L0时,其值为0,本领域技术人员从本发明的内容可知L0/L1是用于移动补偿预测的图形参考列表(L0=list0,L1=list1)。 
SRC1[21:20]=mbPartitionMode 
SRC2[8:0]=ctxIdxOffset 
SRC2[18:16]=maxBinIdxCtx 
SRC2[23:31]=ctxBlockCat 
SRC2[29:24]=ctxIdxBlockOffset 
SRC2[31]=bypassFlag 
再者,DST包括取得内容模块622的输出并具有下列值: 
DST[15:00]=ctxIdx 
DST[23:16]=binIdx 
DST[27:24]=mbPartIdx 
DST[29:28]=mbPartitionMode 
DST[30]=L0 
取得内容模块622亦可与转发暂存器互动。因此,当使用转发暂存器时,指令可取得GCTX.F1.F2的格式,其中F1以及F2指示转发暂存器被使用,即有2位在指令译码(F1以及F2)。假如未得到一或两个转发标志,则表示转发暂存器未被使用。当这些位被设定时(例如设为1),则使用转发暂存器的值(内 部产生的值)。否则,就使用来源暂存器的值。因此,转发暂存器更提供一个有关何时为最早的时间可发出指令的建议给编译程序。当未使用转发时,指令可能遇到已知来源暂存器的写入后读取的延迟。 
对GCTX指令而言,当重置信号(Rst_Signal)被设定时,SRC1的值为0。当运算(F1&Rst_Signal)成立时,SRC1为来自取得内容模块622内部的binIdx值再加上1,否则SRC1为来自执行单元暂存器的binIdx值。可使用二进制化模块620的输出作为GCTX指令以及BARD指令的转发SRC2值。在后面的指令中,不会发出BIND指令直到BARD指令使用到转发暂存器。进一步解释,重置信号以及F 1转发信号结合成一信号(例如2位信号){F1,reset},其指示输入至取得内容模块622的SRC1值是否包括binIdx值或是转发值。提供重置信号的另一个作用是清除以及重置二进制字串暂存器616,并重置二进制索引暂存器654成0。 
继续讨论取得内容模块622以及得到内容信息,在一实施例中,下面表2以及表3所显示的信息分别对应于结构邻近内容存储器564以及mbNeighCtxCurrent暂存器603的值。mbNeighCtxCurrent暂存器603包含目前宏区块的译码输出结果。在目前宏区块处理的最后部分,发出CWRITE指令,其复制来自mbNeighCtxCurrent暂存器603的信息至邻近内容存储器564阵列内所对应的位置。之后,所复制的信息被当作顶部邻近值。 
表2 
Figure GSB00000424785100421
Figure GSB00000424785100431
表3 
Figure GSB00000424785100432
Figure GSB00000424785100441
在一实施例中,参数codedFlagTrans被分为三部分。举例来说,开始的4位系有关于内容区块种类为0或是1,而上面的4位系有关于内容区块种类为3或是4。上面的4位更可分为两部分,较低的2位给iCbCr=0而其他2位给iCbCr=1。参数predMode(预测模式)具有下列三选项之一:predL0=0、predL1=1以及NiPred=2。 
图6D系显示参考表2以及表3的参数refIdx结构的一实施例。需注意到参数refIdx与使用在图像复原的参考图像列表的索引有关。上述结构可提供存储器以及逻辑电路的最佳化。如图所显示,计算语法成分结构包括宏区块的顶部列609、宏区块分区611(如显示的四区)、L0/L1值613以及各L0/L1值的储存位值Gt0(大于0)617以及储存位值Gt1(大于1)615。通常,需要存取顶部邻近宏区块609,然而宏区块的底部列也是需要存取,其被分为4×4方阵的一实施例,结果产生四个mbPartition611。对各mbPartition 611而言,L0/L1值613的消息被确定,但并非实际值。关于L0值以及L1值为1或是大于1的判断被决定。在一实施例中,通过储存Gt0 617以及Gt1 615两位而获得决定,其被使用于计算语法成分。 
进一步简单说明计算语法成分结构,两个最佳化被执行。在一最佳化中,只有保持2位(虽然参考值传统上较大),而不需要更多位以供可变长度译码单元530a内计算语法成分的译码。译码全部的值并维持在执行单元暂存器或是存储器(例如:L2快取存储器)。第二最佳化只有四个元素被维持(例如两个在顶部而两个在左方)。四个元素为再循环,而最后的值会由 CWRITE指令写入于邻近,其储存在存储器中。之后,只有16位被维持在mbNeighCtxCurrent暂存器603,而只有8位被维持在mbNeighCtxLeft暂存器605以及阵列564的顶部mbNeighCtx元素601。在计算逻辑电路使用再储存,因为译码参考值的全部计算被较少位的布林运算所取代。 
mb_type包括如下列表4所显示。 
表4 
Figure GSB00000424785100451
未显示在图6B的额外暂存器可以被使用,例如mbPerLine(例如8位,不具正负号)、mb_qp_delta(8位,具正负号),以及mbAddrCurr(16-bit,目前宏区块地址)。对mbAddrCurr而言,1920×1080阵列被实施,虽然其只需要13位。部分实施例会使用16位以帮助16位计算的执行。 
来自先前所描述的暂存器的值亦被储存在总体暂存器614。复制储存在总体暂存器614内的值并储存在暂存器以帮助硬件设计。在一实施例中,总体暂存器614包括格式化的32位暂存器以包含对应于mbPerline、mbAddrCurr以及mb_qp_delta的值, 除了对应于NUT、MBAFF_FLAG以及chroma_format_idc的其他值之外。 
可使用INSERT指令来更新总体暂存器614内的不同栏位。INSERT指令的示范格式描述如下: 
INSERT    DST,#Imm,SRC1 
在上面INSERT指令中,#Imm的一实施例包括10位数字,其中前面5位宽度的数据以及上面5位指定数据被插入的位置。输入参数包括下列所述: 
Mask=NOT(0xFFFFFFFF<<#Imm[4:0]) 
Data=SRC1&Mask 
SDATA=Data<<#Imm[9:5] 
SMask=Mask<<#Imm[9:5] 
输出DST可表示如下: 
DST=(DST&NOT(sMask))ISDATA 
需注意到一些栏位(例如:NUT(NAL_UNIT_TYPE)、C(constrained_intra_pred_flag))、MBAFF_FLAG、mbPerLine以及mbAddrCurr值亦可使用INIT_CTX指令来写入/初始化至总体暂存器614。 
在一实施例中,局部暂存器612包括32位暂存器,其具有对应于b、mb_qp_delta、numDecodAbsLevelEq1以及numDecodAbsLevelGt1的栏位。这些栏位可使用INSERT指令来更新。局部暂存器612亦被初始化,使得b=0、mb_qp_delta=0、numDecodAbsLevelEq1=-1以及numDecodAbsLevelGt1=0。用以提供初始化的指令可使用下列格式: 
CWRITE    SRC1 
其中SRC1[15:0]=mbAddrCurr。CWRITE SRC1更新总体暂存器614的mbAddrCurr栏位。在邻近元素结构以及其译码的 简单描述之后,将描述透过CWRITE指令所提供的额外功能。 
在CABAC译码中,语法值被预期并从其邻近宏区块模仿。不同方法描述如后,其提供可变长度译码单元530a的实施例如何判断左方以及上方邻近宏区块以及如何判断这些宏区块为实际上为可使用。如前文所描述,译码程序使用邻近值(例如:从宏区块或区块至上方以及至左方)。在一实施例中,二进制计算译码引擎624计算下列方程序,其使用目前宏区块数量以及位于一线(mbPerLine)的宏区块的数量以计算上方宏区块的地址以及左方与上方宏区块是否为可用。 
举例来说,为了判断邻近宏区块(例如:左方邻近)是否存在(即有效),可执行运算(例如:mbCurrAddr%mbPerLine)以检查其结果是否为0。在一实施例中,可执行下列计算: 
a=(mbCurrAddr%mbPerLine) 
需注意到mbCurrAddr与对应于要译码的二进制符号的目前宏区块位置有关,而mbPerLine与每一已知列的宏区块的数量有关。上面计算是使用一个除法、一个乘法以及一个减法而实施。 
进一步描述由二进制计算译码引擎624所实施的译码机制,参考图6E,其显示将被译码的图像(16×8宏区块且mbPerLine=16)。当译码第35宏区块时(mbCurrent标记为35,而第36宏区块尚未被完全译码)时,需要来自先前已译码的上方宏区块(标记为19)以及左方宏区块(标记为34)的数据。上方宏区块的信息可从mbNeighCtx[i]得到,其中i=mbCurrent%mbPerLine。因此,就这个例子而言,i=35%16,则i=3。在目前宏区块被译码后,可使用CWRITE指令来更新阵列中的mbNeighCtxLeft 605以及mbNeighCtx[i]601。 
当另一例子时,考虑下列: 
mbCurrAddr∈[0:maxMB-1] 
其中,maxMB为8192而mbPerLine=120。在一实施例中,除可以通过乘上(1/mbPerLine)而实施,其查找储存于芯片上存储器的表(例如120×11位的表)。当mbCurrentAddr为13位时,可使用13×11位的乘法器。在一实施例中,完成乘法运算的结果、储存上方13位,以及执行13×7位的乘法,借以储存较低13位。最后,执行13位的减法以决定“a”。运算的全部顺序会使用到2个周期,而结果将被储存以使用在其他运算,以及当mbCurrAddr值改变时再计算一次。 
在部分实施例中,模数(modulo)运算不会被执行,反而可使用执行单元内的着色逻辑电路以提供对齐置于片段的第一线的第一mbAddrCurr值。举例来说,上述着色逻辑电路可执行下列计算:mbAddrCurr=absoluteMbAddrCurr-n*mbPerLine。因为,部分H.264弹性宏区块排序(Flexibility Macroblock Ordering,FMO)模式具有一些非常复杂的邻近结构,为了复制这些模式,可在译码系统200的额外着色器计算左方/上方的可得性,并载入至可变长度译码单元530a的一或多个暂存器。通过离开载入可变长度译码单元530a,当启动全部H.264模式以进行符号译码时可减少硬件的复杂性。 
CWRITE指令从mbNeighCtxCurrent 603复制适当的栏位至mbNeighCtxTop[]601以及mbNeighCtxLeft[](例如阵列564的左方宏区块)。根据是否设定mBaffFrameFlag(MBAFF)以及目前与先前宏区块是否为栏位或是帧译码,则特定mbNeighCtxTop[]601以及mbNeighCtxLeft[]数据写入。当(mbAddrCurr%mbPerLine==0)成立时,标记mbNeighCtxLeft605为不可用(例如其被初始化成0)。使用CWRITE指令可移 除mbNeighCtx存储器564、局部暂存器612以及总体暂存器614的内容。例如,CWRITE指令移动邻近内容存储器564的相关内容至第i个宏区块(例如mbNeighCtx[i]或是目前宏区块)的左方以及上方区块,并且亦清除mbNeighCtxCurrent暂存器603。如前文所描述,上方指标607c以及左方指标607b与邻近内容存储器564有关。在CWRITE指令之后,上方索引增加1,并且目前宏区块的内容移动到阵列内的上方位置以及左方位置。上述机构可减少读出/写入时存储器阵列中读出/写入端口的数量。 
可使用INSERT指令来更新邻近内容存储器564、局部暂存器612以及总体暂存器614的内容,如前文所述。例如,可使用INSERT指令(例如:INSERT$mbNeighCtxCurrent_1,#Imm 10,SRC1)来写入目前宏区块。后来的运算不会影响上方指标607c以及左方指标607b(即只写入至目前位置)。 
INSERT指令以及来自二进制计算译码模块624的更新被写入至邻近内容存储器564的mbNeighCtxCurrent阵列601。左方指标607b指向邻近内容存储器564的元素,其相同于邻近(邻近于mbNeighCtx 601)阵列元素(即mbNeighCtx[i-1])。 
鉴于上述关于得到内容以及模型信息,下文将根据内容以及模型信息讨论二进制计算译码模块624以及计算译码。二进制计算译码模块624在BARD指令下操作。BARD指令的示范格式描述如下: 
BARD DST,SRC2,SRC1 
其提供二进制计算译码运算,其中各二进制重复译码导致单一位输出。输入参数描述如下: 
SRC 1=binIdx/ctxIdx,为取得内容模块622的输出;以及 
SRC2=bypassFlag,为二进制化模块620的输出。 
当使用转发暂存器时,一示范格式可包括BARD.F1.F2,其 指示转发暂存器。假如未得到一或两个对应的转发标志,则表示转发暂存器未被使用。注意到二进制计算译码模块624亦接收如前文所描述的重置信号。特别地,在接收重置信号之后,二进制计算译码模块624维持重置信号直到接收到第一次呼叫BARD指令。之后,重置信号被清除。 
在运算中,二进制计算译码模块624接收内容索引(ctxIdx)值以及指标至来自取得内容模块622的译码位流(binIdx)的目前位分析位置。二进制计算译码模块624使用来自于码长偏移量暂存器608以及码长范围暂存器606的偏移量以及范围值以记录译码引擎的目前间隔状态(偏移量,偏移量+范围)。二进制计算译码模块624使用内容索引值以存取内容表(CTX_TABLE),其依序使用以存取目前可能状态pStateIdx以及高可能性符号值。使用pStateIdx(例如:来自于储存在远端或芯片上存储器的表单)以读取低可能性符号子范围值、下一个高可能性符号值以及下一个低可能性符号的可能值。 
根据高可能性符号值的状态、下一个范围以及可能性信息,二进制计算译码模块624计算目前二进制符号的高可能性符号值。二进制计算译码模块624输出二进制信号(位或是二进制值,例如:b0、b1、...bn)至二进制字串暂存器616。接着,对下一个二进制的相同或是不同内容重复程序,例如从二进制字串暂存器616至取得内容模块622的反馈连接658所显示。二进制计算译码模块624根据高可能性符号值的选择而更新偏移量以及范围值和可能性状态。此外,二进制计算译码模块624将目前高可能性符号以及可能性状态写入至内容表以供后来的内容使用。 
注意到关于转发暂存器F1以及转发暂存器F2的使用,当信号发出转发时,指令可能或是不可能具有延迟。例如,当从二进制化模块620转发至取得内容模块622中,没有延迟存在,且 可在下一个周期发出GCTX指令。在从取得内容模块622转发至二进制计算译码模块624中,会使用到4个周期。当在周期j发出GCTX指令时,则可在周期(j+5)发出BARD指令。有用指令的缺少会导致延迟槽最多填充4个NOP。在从二进制化模块620转发至二进制计算译码模块624中,没有延迟存在。在从二进制计算译码模块624转发至取得内容模块622中,当在周期j发出BARD指令时,则可在周期(j+5)发出GCTX指令。在从二进制计算译码模块624转发至二进制化模块620中,如果第二二进制字串被保留且二进制计算译码模块624与二进制化模块620之间有切换存在,则没有延迟存在。通过保留第二二进制字串,可允许发出BARD至BARD指令以供不需忍受延迟的旁路(bypass)情况。 
CAVLC译码 
已经描述用于CABAC译码的可变长度译码单元530a,目前将针对译码系统200的CAVLC实施例作进一步描述,其亦称为可变长度译码单元530b,如图7A所显示。在描述CAVLC架构之前,先简单描述在可变长度译码单元530b中内容的H.264CAVLC程序。 
已知,CAVLC程序编码有关宏区块或是其位置的信号的电平(例如:大小),以及电平何时会重复(例如多少周期),以避免需要对每一位做译码。位流562b接收以及分析上述信息,其中当信息由译码可变长度译码单元530b的译码引擎使用时,缓冲器被填充。可变长度译码单元530b通过从已接收位流所撷取具有电平以及运行(run)系数的宏区块信息来反向编码过程并重建信号。因此,可变长度译码单元530b从位流缓冲器562b接收宏区块信息,并分析串流已分别得到电平以及运行系数值给电平以及运行阵列的暂时储存器。举例来说,电平以及运行 阵列读出对应于宏区块中区块的4×4区块的像素,接着清除电平以及运行阵列以供下一个区块使用。依照H.264标准,软件可根据4×4构建区块而使用全部的宏区块。 
现在提供有关于译码宏区块信息的一般操作,下列叙述提出在CAVLC译码程序的内容中可变长度译码单元530b的不同元件,可将符合实际应用的各种变动列入考虑。本领域技术人员可知下列所使用的许多术语(例如不同参数的标号)是出自H.264规格,为了简洁不再赘述,除非是有助于了解所述的不同程序和/或元件,才会再做进一步的说明。 
图7A系显示可变长度译码单元530b一实施例的方块图。图7A系显示单一可变长度译码单元530b,而单一可变长度译码单元530b用以在实施例中译码单一位流。同样的原理可应用至具有额外可变长度译码单元的译码系统200,可同时译码多个(例如两个)串流。简单地说,图7A系显示可变长度译码单元530b的选择元件,而图7B系显示CAVLC译码的表格结构。虽然下列叙述是有关宏区块译码的内容,但是本发明所提出的原理可应用到各种区块译码,将不再进一步描述相同的部分。 
可变长度译码单元530b用以分析位流、初始化译码硬件与暂存器/存储器结构,以及阶段-运行译码。上述H.264标准的CAVLC译码程序的上述各功能将进一步描述于后。关于位流缓冲器操作,在CABAC以及CAVLC运算之间共用SREG串流缓冲器/DMA引擎562,因此除了下面提及CABAC以及CAVLC模式之间的操作差异之外,为了简洁将不再进一步描述相同的部分。CABAC以及CAVLC译码实施例皆使用相同的邻近内容存储器564,但是栏位(例如:结构)不相同,其将描述于后。因此,当CAVLC的邻近内容存储器564操作相似于前文所描述的CABAC运算时,为了简洁将不再进一步描述相同的部分。此外, 总体暂存器614以及局部暂存器612亦被使用,因此将不再进一步描述相同的部分。 
参考图7A,可变长度译码单元530b包括硬件的不同模块,其包括系数符记(token)模块(coeff_token)710、电平码模块(CAVLC_LevelCode)712、电平模块(CAVLC_Level)714、电平0模块(CAVLC_L0)716、零电平模块(CAVLC_ZL)718、运行模块(CAVLC_Run)720、电平阵列(LevelArray)722以及运行阵列(RunArray)724。译码系统亦包括如前文所描述的SREG串流缓冲器/DMA引擎562、总体暂存器614、局部暂存器612以及邻近内容存储器564。 
可变长度译码单元530b与执行单元420a的接口包括相同于前文所述的CABAC实施例的一或多个目标总线与对应的暂存器(例如:目标暂存器),以及两个来源总线与对应的暂存器(SRC1以及SRC2等)。 
通常,根据片段的种类,驱动软件128(图1)准备并载入CAVLC着色器至执行单元420a。CAVLC着色器使用标准指令集再加上额外的指令集,包括coeff_token、CAVLC_LevelCode、CAVLC_Level、CAVLC_L0、CAVLC_ZL以及CAVLC_Run指令以译码位流。额外的指令系包括有关于电平阵列722以及运行阵列724的读取以及清除运算的READ_LRUN以及CLR_LRUN指令。在一实施例中,在发出其他指令前,CAVLC着色器所执行的第一个指令包含INIT_CTX指令和INIT_ADE指令。这两个指令初始化可变长度译码单元530b以译码CAVLC位流,并从自动安排串译码的指标载入位流至先进先出缓冲器,稍后将说明这两个指令。因此,可变长度译码单元530b可用以分析位流、初始化译码硬件与暂存器/存储器结构,以及阶段-运行译码。H.264标准的CAVLC译码程序的上述各功能将进一步描述于 后。 
关于分析位流的指令,除了先前描述于CABAC程序的READ以及INIT_BSTR指令会共用于CAVLC程序之外,还有两个其他指令分析位流存取更有关于CAVLC程序,即INPSTR指令(对应于检查字串模块570)以及INPTRB指令(图5C中前次载入至可变长度译码逻辑电路550)。INPSTR指令以及INPTRB指令不需要限定在CAVLC操作(例如上述指令可使用在其他程序,如CABAC、VC-1以及MPEG)。使用INP STR指令以及INPTRB指令以侦测特定图案(pattern)(例如:数据开始或是结束图案)是否出现在片段、宏区块等,用以致能位流的读出而不需要进行位流。在一实施例中,指令的顺序包括INP STR以及INPTRB然后READ指令的实施。INPSTR指令的示范格式描述如下: 
INPSTR    DST 
其中,在一实施例中,检查位流并传回SREG暂存器562a的最高有效16位在目标暂存器的较低16位。目标暂存器的上16位包含sREGbitptr值。由于此操作,数据并未从SREG暂存器562a移除。根据下列示范伪码(pseudocode)可实施INPSTR指令: 
MODULE  INPSTR(DST) 
OUTPUT[31:0]DST 
DST={ZE(sREGbitptr),sREG[msb:msb-15]}; 
ENDMODULE 
另一个分析位流的指令为INPTRB指令,其检查原始字节序列承载(raw byte sequence payload,RBSP)尾随位(例如排列成字节的位流)。INPTRB指令提供位流暂存器562b的读取。INPTRB指令的示范格式描述如下: 
INPTRB DST。 
在INPTRB运算中,没有位从SREG暂存器562a移除。当SREG暂存器562a的高有效位包含例如100时,则SREG暂存器562a包含RB SP停止位,以及字节内剩下的位为alignment zero bits。根据下列示范伪码可实施INPTRB指令: 
提供READ指令以供位流缓冲器562b中数据调正。 
现在将描述可变长度译码单元530b的额外位串缓冲器操作,目前将针对CAVLC操作的的初始化作描述,尤其是存储器、暂存器结构以及译码引擎(例如:CAVLC模块582)的初始化。在片段起始处且在译码对应于第一宏区块暂存器结构的语法成分之前,总体暂存器614、局部暂存器612以及CAVLC模块582被初始化。在一实施例中,驱动软件128发出INIT_CAVLC指令以进行初始化。INIT_CAVLC指令的示范格式描述如下: 
INIT_CAVLC  SRC2,SRC1 
其中,SRC2包括片段数据中译码的字节的数目。其值写入于内部CVLC_bufferBytesRemaining内: 
SRC1[15:0]=mbAddrCurr; 
SRC1[23:16]=mbPerLine; 
SRC1[24]=constrained_intra_predflag; 
SRC1[27:25]=NAL_unit_type(NUT); 
SRC1[29:28]=chroma_format_idc(一实施例系使用对应于4:2:0格式的1的chroma_format_idc值,然而部分实施例可使用其他采样机制);以及 
SRC1[31:30]=未定义。 
关于INIT_CAVLC指令,SRC1内的值被写入至总体暂存器614中所对应的栏位。再者,SRC2内的值被写入至由INIT指令所设定的内部暂存器(例如:CVLC_bufferByteRemaining暂存器)。使用CVLC_bufferByteRemaining暂存器以复原任何错误位流,如前文所述。举例来说,可变长度译码单元530b(例如:SREG串流缓冲器/DMA引擎562)记录了分析已知片段的位流中缓冲位的信息。当使用位流时,可变长度译码单元530b计数并更新CVLC_bufferByteRemaining值。当其值低于0时,其中低于0的值是表示缓冲器或是位流错误,提示处理的终止以及返回至应用控制或是由驱动软件128控制以处理复原。 
INIT_CAVLC指令亦初始化可变长度译码单元530b的不同储存结构,包括在某方面来说相似于先前描述的CABAC程序的邻近内容存储器564、mbNeighCtxLeft暂存器605以及mbNeighCtxCurrent暂存器603。已知CAVLC译码的内容本质,根据前次译码宏区块时CAVLC_TOTC指令所搜集的信息来译码目前的宏区块,亦即左方宏区块储存于左方mbNeighCtxLeft暂存器605并由指标607b所指向,而上方宏区块储存于阵列元素[i]601中并由指标607c所指向。使用INIT_CAVLC指令来初始化上方指标607c与左方指标607b,并更新总体暂存器614。 
为了判断邻近宏区块(例如:左方邻近)是否存在(即有效),可由CAVLC_TOTC指令执行运算(例如:mbCurrAddr% mbPerLine),其相似于CABAC实施例中所执行的同一程序,因此将不再描述。 
相似于所描述的CABAC程序,使用CWRITE指令可移除邻近内容存储器564的内容,而使用INSERT指令可更新邻近内容存储器564的内容、局部暂存器612以及总体暂存器614,其中可使用INSERT指令以供写入至mbNeighCtxCurrent暂存器603。维持在邻近内容存储器564的数据的结构可描述如下: 
mbNeighCtxCurrent[01:00]:2’b:mbType 
mbNeighCtxCurrent[65:02]:4’b:TC[16] 
mbNeighCtxCurrent[81:66]:4’b:TCC[cb][4] 
mbNeighCtxCurrent[97:82]:4’b:TCC[cr][4] 
当执行CWRITE指令时,更新mbNeighCtx[]邻近值,然后初始mbNeighCtxCurrent暂存器603。 
已描述由可变长度译码单元530b初始的内容存储器结构以及初始化,下面将描述可变长度译码单元530b(特别是CAVLC_TOTC指令)如何使用邻近内容信息以计算总系数(TotalCoeff,TC),其之后将被使用来判断是否应该使用CAVLC表格以译码符号。通常,CAVLC的译码是利用描述于H.264规格的可变长度译码表格(于此称为CAVLC表格),其中根据先前已译码符号的内容选择CAVLC表格以译码各符号。即对每一格符号而言,其为不相同的CAVLC表格。图7B系显示基本表格结构,其为可变大小的二维阵列。提供表格的阵列(每一个表格可为一特定符号),而每一个符号为霍夫曼(Huffman)编码。霍夫曼码被储存成下列结构的表格: 
Figure GSB00000424785100581
下面将描述根据唯一前置(prefix)编码用以比对的方法(MatchVLC函数)。通常,CAVLC表格包括可变长度部分以及固定长度部分。通过执行一些固定大小的索引查找(lookup)可简化比对。在MatchVLC函数中,可执行READ运算而不从SREG暂存器562a移除位。因此,对处理位流的位流缓冲器562b而言,READ运算不同于前文所描述的READ指令。在下面所描述的MatchVLC函数中,一些位(fixL)从位流缓冲器562b被复制,然后于一指定表格中查找。指定表格内的各项目包含特定格式(例如:值以及以位型式的大小)。使用项目的大小以进行位流。 
图7B系显示上述表格结构的示范二维阵列的方块图,用以 描述在CAVLC译码的内容中的MatchVLC函数。从H.264标准内的表格9-5中得到当nC==-1时的例子,其描述如下: 
Figure GSB00000424785100591
在伪码(pseudo code)方面,上述表格可表示如下: 
Figure GSB00000424785100592
Figure GSB00000424785100601
使用上述表格结构,可使用上述的MatchVLC函数以实施CAVLC译码。由于MatchVLC函数,对位流执行计算前导0以存取已知语法成分的表格。再者,通过计算前导0的值是否大于Idx的最大值,MatchVLC函数可启动计算前导0运算(例如在部分实施例中,使用计算前导0模块576与读取模块572),然后传回maxIdx(其处置的情况为0000000,如图7B的表格所显示)。MatchVLC函数以及表格结构的另一优点为不需要多个指令来处置这些情况,其由下面MatchVLC区段所处置:Idx1=CLZ(sREG)计算前导0的数量,以及Idx1=(Idx1>maxIdx)?maxIdx:Idx1。接着,使用MatchVLC函数的下列区段移除已使用的位:SHL(sREG,Idx1+#1)。使用下面MatchVLC区段读取子阵列(sub-array)的标头:fixL=Table[Idx1].head,以及Idx2=(!fixL)?0:READ(fixL),其传送最大数量的位数以被不确定地读取。前导0可以相同,但尾随位的大小可以改变。因此,在一实施例中,可实施CASEX种类情况叙述(使用较多存储器,但较简单的码结构)。 
使用(val,shv)=Table[Idx1][Idx2]以及SHL(sREG,shv)读取表格的实际值,其亦显示实际上多少位为语法成分所使用。这些位从位流被移除,且语法成分的值返回至目标暂存器。 
已描述VLC匹配的方法以及表格结构的配置,接着返回参考图7A以描述CAVLC译码引擎或是程序(例如:CAVLC模块5 82)。一旦位流被载入,且译码引擎、存储器结构以及暂存器被载入,通过驱动软件1 28发出CAVLC TOTC指令可启动系数符记模块710。在一实施例中,CAVLC TOTC指令具有下面示 范格式: 
CAVLC_TOTC    DST,S1, 
其中,S1以及DST分别包括一输入暂存器以及一内部输出暂存器,具有下面所提供的示范格式: 
SRC1[3:0]=blkIdx 
SRC1[18:16]=blkCat 
SRC1[24]=iCbCr 
剩下的位为未定义。输出格式描述如下: 
DST[31:16]=TrailingOnes 
DST[15:0]=TotalCoeff 
因此,如图所显示,系数符记模块710接收对应于mbCurrAddr、mbType、是否正在处理色度通道的指示(例如:iCbCr),以及blkIdx(例如:区块索引,因为图像可被分成许多区块)。对从位流缓冲器562b所存取的已知宏区块而言,传送blkIdx,不管是8×8像素区块或是4×4像素区块正在已知位置上进行处理。由驱动软件128提供上述信息。系数符记模块710包括一查找表。根据前文描述而输入至系数符记模块710的查找表,可得到拖尾系数的个数(TrailingOnes)以及非零系数(TotalCoeff)的个数。TrailingOnes传送有多少个1在一列上,而TotalCoeff传送有多少运行/电平对(run/level pair)系数在从位流抽出的块状数据上。TrailingOnes以及TotalCoeff分别提供至CAVLC电平模块714以及零电平模块718。TrailingOnes亦提供至电平0模块716,其对应于从位流缓冲器562b所撷取的第一电平(例如:直流(DC)值)。 
电平模块714记录符号的字尾(suffix)长度(例如:尾随1的数目),以及电平模块714结合电平码(levelCode)来计算电平值(level[Idx]),之后电平值储存在电平阵列722以及运 行阵列724内。电平模块714操作在CAVLC_LVL指令下,其具有下列格式: 
CAVLC_LVL  DST,S2,S1,其中: 
S1=Idx(16-bit); 
S2=suffixLength(16-bit);以及 
DST=suffixLength(16-bit)。 
字尾长度(suffixLength)传送码字(code word)的大小为何。来自驱动软件128的输入提供指定字尾长度的大小的信息。此外,在一实施例中,因为字尾长度值被更新,DST以及S2可选择为同一暂存器。 
更注意到,转发暂存器(例如维持由已知模块内部地产生的数据)亦可被使用,例如F 1以及F2。由已知指令内的转发标志指示指令以及对应模块是否使用到转发暂存器。符号F1(即使用转发来源1的值,在一实施例中可由指令中的位26所指示)以及符号F2(即使用转发来源2的值,在一实施例中可由指令中的位27所指示)可表示转发暂存器。当使用转发暂存器时,CAVLC_LVL指令可具有下列示范格式: 
CAVLC_LVL.F1.F2 DST,SRC2,SR1 
其中当不是F1就是F2被设定时(例如成立),所指定的转发来源被当成输入。在电平模块714的情况中,转发暂存器F1对应于由电平模块714产生的电平索引(level[Idx]),其在递增(increment)模块内递增并输入至多工器730。同样地,转发暂存器F2对应于字尾长度(suffixLength),其由电平模块714所产生并输入至多工器728。多工器730以及多工器728的其他输入包括执行单元暂存器输入(在图7A中标示为EU),如下文所描述。 
电平模块714的另一输入是由电平码模块712所提供的电平 码。电平码模块712以及电平模块714的结合运算译码可译码电平值(电平为按比例缩放(scaling)之前的转换系数值)。透过具有下列示范格式的指令可致能电平码模块712。 
CAVLC_LC    SRC1 
其中SRC1=suffixLength(16位)。当使用转发暂存器F1时,指令可表示如下: 
CAVLC_LVL.F1  SRC1 
其中如果设定F1,则转发SRC1被当成输入。如图7A所显示,当设定F1时(例如F1=1),电平码模块712获得转发SRC1值(例如来自电平模块714的字尾长度)以作为输入,否则输入是从执行单元暂存器所获得(例如F1=0)。 
回到电平模块714,字尾长度输入可以是由电平模块714经由多工器728所转发,或是经由执行单元暂存器透过多工器728所提供。此外,Idx输入亦可由电平模块714经由多工器730所转发(且由递增模块来递增,或是在部分实施例中,能自动递增而不需要递增模块),或是经由执行单元暂存器透过多工器730所提供。再者,电平模块714亦直接从电平码模块712接收电平码输入。除了至转发暂存器的输出之外,电平模块714亦提供电平索引(level[idx])输出至电平阵列722。 
如前文所提到,TrailingOnes输出至电平0模块716。电平0模块716经由下列指令而致能: 
CAVLC_LVL0 SRC 
其中SRC=trailingOnes(coeff_token)。电平0模块716的输出包括电平索引(Level[Idx]),其被提供至电平阵列722。系数值被编码成为正负号以及大小。电平0模块716提供系数的正负号值。结合来自CAVLC电平模块714的大小值以及来自电平0模块716的正负号值,并写入至电平阵列722。使用电平索引 (level[Idx])来指定写入的位置。在一实施例中,系数是在子区块(区块为8×8)的一个4×4矩阵内,而不按照光栅(raster)顺序。阵列之后转换成4×4矩阵。换句话说,被译码的系数电平以及运行不是光栅格式。从电平-运行数据,4×4矩阵可以被重建(但是以锯齿形扫描顺序),接着重新排列成光栅顺序4×4。 
从系数符记模块710输出的TotalCoeff被提供至零电平模块718。零电平模块718可经由下列指令而致能: 
CAVLC_ZL  DST,SRC1 
其中,SRC1=maxNumCoeff(16位)以及DST=ZerosLeft(16位)。maxNumCoeff系由H.264标准所给定,并被重送以作为指令的原始值。换句话说,maxNumCoeff是由软件所设定。在部分实施例中,maxNumCoeff可被储存在硬件中。变换系数被编码成(电平,运行)格式,其与被编码成0的系数(电平)的数目有关。零电平模块718提供两个输出ZerosLeft以及Reset(reset=0),其分别被提供至多工器740以及多工器742。多工器740亦接收来自运行模块720的转发暂存器F2。多工器742接收来自运行模块720的已递增(在部分实施例中是经由递增模块或是其他方式)的转发暂存器F1。 
运行模块720分别从多工器740以及多工器742接收ZerosLeft以及Idx输入并提供运行索引(Run[Idx])输出至运行阵列724。如前文所描述,因为运行-长度编码被用作进一步压缩,则系数被编码成(电平,运行)格式。举例来说,假设拥有下列的值10 12 12 15 19 1 1 1 0 0 0 0 0 0 1 0,则可被编码成(10,0)(12,1)(15,0)(19,0)(1,2)(0,5)(1,0)(0,0)。这个码字通常较短。索引为电平索引的对应索引。运行模块720可经由下列指令而致能: 
CAVLC_RUN  DST,S2,S1 
其中,由于ZerosLeft值被更新,DST以及S2可选择为相同暂存器。因此,CAVLC_RUN指令的示范不具正负号值显示如下: 
S1=Idx(16-bit), 
S2=ZerosLeft(16-bit), 
DST=Zerosleft(16-bit)。 
参考图7A,转发暂存器被使用,其中CAVLC_RUN指令可得到下列格式: 
CAVLC.F1.F2  DST,SRC2,SRC1 
其中,当不是F1就是F2被设定时,则适当的转发来源被当成输入。 
关于两暂存器暂列,电平阵列722对应于电平,而运行阵列724对应于运行。在一实施例中,各阵列包含16个元素。对电平阵列722而言,各元素的大小包括16位具正负号的值,而对运行阵列724而言,其值为4位且不具正负号。使用下列指令分别从电平阵列722以及运行阵列724读取电平值以及运行值。 
READ_LRUN    DST 
其中,在一实施例中,DST包括四个128位连续的暂时暂存器(例如:执行单元暂时或是共用暂存器)。上述操作读取可变长度译码单元530内的电平暂存器以及运行暂存器,并储存至目标暂存器。当此运行被读出并储存于暂时暂存器时,运行值被转换成16位不具正负号的值。举例来说,前两个暂存器维持16个16位的电平值(即阵列储存第一16个系数),而第三以及第四暂存器维持16个16位的运行值。当超过16个系数时,其被译码至存储器。在一实施例中,以下列顺序写入值:在第一暂存器中,最低有效16位包含LEVEL[0]值,而位16-31包含 LEVEL[1]值等,直到位112-127包含LEVEL[7]值。接着,对第二暂存器对而言,最低有效16位包含LEVEL[8]等。相同的方法应用在RUN值。 
根据下列示范指令格式,可使用CLR_LRUN指令来清除电平阵列722以及运行阵列724的暂存器。 
上述可变长度译码单元530b的软件(着色程序)以及硬件操作(例如模块),特别是CAVLC模块582,可使用下列伪码来描述。 
Figure GSB00000424785100661
Figure GSB00000424785100671
MPEG译码 
以上已描述用作CABAC译码(经由CABAC模块580的可变长度译码单元530a)以及CAVLC译码(经由CAVLC模块582的可变长度译码单元530b)的译码系统200,接下来将描述译码系统200的MPEG实施例,于此称为可变长度译码单元530c。可变长度译码单元530c是根据由MPEG模块578(图5C所显示)所执行的运算而操作。为了简化,与CABAC以及CAVLC实施例共有的特征(包括位流缓冲器以及对应的指令)被省略,除了下列其他需要注意的部分。INIT指令设置可变长度译码单元530进入MPEG模式,以及使用READ、NPSTR、INPTRB(解释于前文)以及VLC_MPEG2指令的混合以译码MPEG-2位流。由着色器程序判断使用何种方法。MPEG-2位流具有全决定文法(fully deterministic grammar),且着色码执行用以解密文法的方法。 
在一实施例中,对MPEG-2处理而言,实施表格以霍夫曼译码于MatchVLC_X函数,描述于后。因此,两指令被载入至MPEG模块578,包括INIT_MPEG2指令以及VLC_MPEG2指令。INIT_MPEG2指令载入位流并设定可变长度译码单元530进入 MPEG2模式。在此模式中,当第一系数为直流(DC)时,总体暂存器614保持住值。在MPEG-2中有一或多个串流,其为相同的,但是根据是否为直流或是交流而有不同的解译。位载入至VLD_globalRegister.InitDC暂存器被使用,而不是创造另一个指令。注意到对应于总体暂存器614(例如映射到总体暂存器614(例如globalregister[0]))的暂存器使用在CABAC以及CAVLC模式中,但是因为MPEG2模式下而有不同的解译(以及因此标示不同)。因此,在宏区块的开始,值(VLD_globalRegister.InitDC暂存器内的位)被初始化成1。当使用MatchVLC_3函数时,判断VLD_globalRegister.InitDC暂存器内的位是否为1或是0。如果为1的话,位被改变成0,以供已知宏区块后来的离散余弦变换(discrete cosine transform,DCT)符号进行译码。由着色器以及内部重置设定上述值。在实体部分,VLD_globalRegister.InitDC位为标志值,其传送被译码的DCT符号是否为已知宏区块的DCT符号的开始。 
MPEG模块578使用一具有符号的非常特定文法进行译码,其中上述符号是使用限定数量的霍夫曼表格所译码。在具有特定符号值的着色器内执行文法的分析,其中特定符号值是使用具有#Imm16值使用于特定霍夫曼表格的VLC_MPEG2指令所得到,其应该被使用以译码特定符号。 
在描述可变长度译码单元530c的不同元件之前,用以实施MPEG-2标准的不同表格的硬件以及软件结构的简单描述如下。在MPEG-2标准(ISO-IEC 13818-2(1995))中,所使用的编码被定义在表B-1至表B-15,其为MPEG-2标准所提供的已知表格。在可变长度译码单元530c的不同实施例中,一或多个表B-1至表B-15以专业硬件型式而实施,例如合成为逻辑门。根据实施方式(例如:HDTV、HDDVD等)或是所需 的硬件安排,部分表格可以不用硬件方式来实施,而是可以使用其他指令(例如:将描述于后的EXP-GOL_UD指令,或是透过READ指令)来实施。举例来说,虽然表B-2、表B-3以及表B-11的逻辑门数量不大,所使用到的加法可能需要额外的多工器阶段,其意味有关速度以及延迟。在部分实施例中,表B-5至表B-8不由硬件所支持,因为其不需要支持设定档。然而,部分实施例可透过对效能具有最小影响的不同指令(例如:INPSTR、EXP_GOL_UD以及READ指令)而提供上述支持。 
继续参考已知的MPEG表格,表B-1(Macroblock_address_increment)、表B-10(motion_code)以及表B-9(coded_block_pattern)具有相似的结构。由于部分相似,上述三个表格可使用由MPEG模块578执行的MatchVLC函数而实施以及描述于后。对表B-9以及表B-10而言,示范的表格结构表示如下: 
Figure GSB00000424785100701
在下面功能中,只有SHL运算能从SREG暂存器562a移除数据。不像着色器的READ指令,使用在MatchVLC函数的READ功能能从SREG暂存器562a移除位而不需要从SREG暂存器562b移除任何位。下面描述使用在MPEG-2中实施表格的MatchVLC函数以提供作为霍夫曼译码。 
Figure GSB00000424785100702
Figure GSB00000424785100721
Figure GSB00000424785100731
Figure GSB00000424785100751
Figure GSB00000424785100761
Figure GSB00000424785100771
Figure GSB00000424785100791
从上面MatchVLC函数注意到,通常已译码的最低有效位会 决定值的正负号,如此可使用SGN功能来检查,其描述如下: 
FUNCTION SGN(R){RETURN(R==1)?-1:1;}更注意到对MatchVLC_3以及MatchVLC_4而言,表格为共同的(或是至少为一超集),因此可使用下面表格来存取功能。 
到MatchVLC的接口,或者应该说MatchVLC_X(其中X等于1、2等)函数为下列指令: 
VLC_MPEG2  DST,#Imm16 
,其中,使用#Imm 16值以选择适当的表格,且因此以译码特定语法成分。使用#Imm 16作为表格的索引(例如:0、1、2、3)而从指令存取表格。#Imm 16的值以及对应方法、语法成分以及MPEG-2表格的关系描述于下面表5。 
表5 
Figure GSB00000424785100802
Figure GSB00000424785100811
EXP-GOLOMB译码 
已描述用作CABAC译码(经由CABAC模块580的可变长度译码单元530a)、CAVLC译码(经由CAVLC模块582的可变长度译码单元530b)以及MPEG译码(经由MPEG模块578的可变长度译码单元530c)的译码系统200,接下来将描述译码系统200的EXP-Golomb实施例,于此称为可变长度译码单元530d。可变长度译码单元530d根据EXP-Golomb模块584(图5C所显示)的运算而操作。可变长度译码单元530d使用如CABAC及CAVLC实施例所使用的相同硬件以及相同位流缓冲器排列。因此,与CABAC以及CAVLC实施例共有的特征被省略,除了下列需要注意的部分。在描述可变长度译码单元530d之前,先提出有关EXP-Golomb的简单描述。 
在EXP-Golomb中,数据包含字首(prefix)以及字尾(suffix)格式,显示如下: 
Figure GSB00000424785100812
因为多数的码字较短,有压缩被获得。再者,多数的码字为唯一并且容易译码。在H.264中,有四种EXP-Golomb编码方法使用:不具正负号一元(Unary)、正负号以及映射(码字被映射至表格)。这些方法用以编码已编码的宏区块图案以及截短(truncate)。在可变长度译码单元530d中,提供单一指令以执行如下面表6所显示不同型式的EXP-Golomb码的译码。截短EXP-Golomb译码描述如下。 
表6 
Figure GSB00000424785100822
Figure GSB00000424785100831
进一步解释这些指令,EXP_GOLOMB_UD指令译码一元编码的编码符号。EXP_GOLOMB_SD指令译码具正负号的一元编码的编码符号。如表6所显示,对EXP_GOLOMB_SD指令而言,当k=0时,在正0以及负0之间没有差别,因此传回的值为0。EXP_GOLOMB_MD(SRC1)指令译码映射编码符号,其中SRC1=Type,其与宏区块参数以及coded_block_pattern有关。Type的值会导致下列coded_block_parameter: 
Type=0→Intra 4×4 
Type=1→Inter 
可使用表格(例如:芯片上存储器或是远端存储器内的表格)以根据宏区块预测模式(例如:码数量、k)而指定值给coded_block_parameter。 
译码截短Exp-Golomb符号的EXP-Golomb指令更描述如下: 
EXP_GOLOMB_TD  DST,SRC1 
其中,SRC1为范围。至少在一实施例中,执行截短Exp-Golomb编码时,需要先知道范围。接着,截短Exp-Golomb编码可被推导如下: 
因此,EXP_GOLOMB_D指令被提供。 
解释运算码以及驱动-发出软件指令之间的差异是有用 的。通常,当设计ISA时,至少有两个影响在工作上:(1)让指令译码器较简单以及在单一管线阶段中完成(即快速);以及(2)让程序设计师助记(mnemonics)较简单。参考五种EXP-Golomb基准的运算,从使用者的观点来看这些运算为有区别的。再者,有两种不同格式:全部EXP-Golomb基准的运算输出相同值,但是只有部分运算具有一输入(除了内含在运算中的位流),其提供至少一基本区别。传统上,CPU指令不具有隐含输入,但是却透过运算包括隐含输入。然而,位流不经由运算而揭露,但是却是内部自动管理以及使用INIT指令进行初始。 
从硬件的观点,可使用EXP-GOLOMB-UD的相同硬件的相同核心(或是至少)以及有关核心硬件的小加法来执行全部的其他EXP-GOLOMB-UD运算(例如在软件内相似于CASE/SWITCH的部分)。因此编译器/翻译器可映射全部的运算至单一指令。再者,这些运算为固定(例如运算不会动态改变)。参考下面表7的pseudonym行,注意到对EXP-GOLOMB-UD以及EXP-GOLOMB-SD运算,SRC1可以被加入(或是由核心所忽略),具有机制用以区别这些运算。同样地,注意到没有单一来源指令分组存在,但是可被映射至暂存器-立即分组。通过使用如表7所显示不同指令的明显立即数目,可以得到这些指令之间的区别,因此导致只有一个主要/次要运算码而不是五个,其包括一个有意义的储存。即只有一个次要运算码被使用因为可使用立即格式指令,以及通过编码带有适当数据的立即数据栏位并指定Pseudonym可完成不同EXP_Golomb指令之间的区别。 
EXP_GOLOMB_D Dst,#Type,Src1.lane 
其中经由下列表7可决定#Type: 
表7 
 #Type   Pseudonym   指令
  0x0   EXP_GOLOMB_UD  Dst   EGOLD  Dst,0×0,Src1
  0x1   EXP_GOLOMB_SD  Dst   EGOLD  Dst,0×1,Src1
  0x2   EXP_GOLOMB_TD  Dst,Src1   EGOLD  Dst,0×2,Src1
  0x3   EXP_GOLOMB_MD  Dst,Src1   EGOLD  Dst,0×3,Src1
  0x4   EXP_GOLOMB_CD  Dst,Src1   EGOLD  Dst,0×4,Src1
进一步解释表7,对#type=0×0或是#type=0×1而言,没有Src1栏位是需要的,以及不需要指定这些指令至另一主要或是次要运算码群组,因为可指定虚拟(dummy)Src或是Src以及Dst可被标示为相同。 
EXP-Golomb编码符号被编码成如下图所显示(例如包括0或是多个引导0、跟随着1,以及然后是对应于引导0的数量的一些位): 
Figure GSB00000424785100851
这些位如何被解释是根据特定Golomb型式而定(这里是根据H.264的三种型式以及AVS的第四型式)。使用UD以及SD(不具正负号以及正负号)计算逻辑单元来计算值。例如,当位流为0001010时,则UD的值为(1<<3)-1+2=9,而SD的值为(-1)^10*ceil(9/2)=+5。CD也发生相似的程序。然而,对MD而言,表单查找被执行(例如当UD编码时,对值作译码,接着使用此 值做为索引进入表格,传回6位的值(在表格中储存成6位的值,但是传回值是从0延伸至暂存器的宽度))。在一实施例中有两表格,一表格为Intra编码而另一表格为Inter编码。 
上述指令转换如何被使用在EXP-Golomb译码的内容中的例子,可通过H.264片段标头部分译码的示范伪码显示如下。 
sliceHeaderDecode: 
EXP_GOLOMB_UD    firstMBSlice 
EXP_GOLOMB_UD    sliceType 
EXP_GOLOMB_UD    picParameterSetID 
READ         frameNum,Nval 
IB_GT        frameMbsOnlyFlag,ZERO,$Label1 
READ         fieldPicFlag,ONE 
IB_EQ        fieldPicFlag,ZERO,$Label1 
READ         bottomFieldFlag,ONE 
Label1: 
ISUBI        t1,#5,nalUnitType 
IB_NEQ       ZERO,t1,$Label2 
EXP_GOLOMB_UD    idrPicID 
Label2: 
IB_NEQ       ZERO,picOrderCntType,$Label3 
READ         picOrderCntLSB,Nvalt 
Label3: 
ICMPI_EQ     p1,ONE,fieldPicFlag 
[p1]MOV      nfieldPicFlag,ZERO 
[!p1]MOV    nfieldPicFlag,ONE 
AND          t1,picOrderPresentFlag,nfieldPicFlag 
B_NEQ            ONE,t1,$Label4 
EXP_GOLOMB_SD    deltaPicOrderCntBottom 
Label4: 
转换至sliceHeaderDecode: 
EGOLD     firstMBSlice,#0,ZERO 
EGOLD     sliceType,#0,ZERO 
EGOLD     picParameterSetID,#0,ZERO 
READ      frameNum,Nval 
IB_GT     frameMbsOnlyFlag,ZERO,$Label1 
READ      fieldPicFlag,ONE 
IB_EQ     fieldPicFlag,ZERO,$Label1 
READ      bottomFieldFlag,ONE 
Label1: 
ISUBI     t1,#5,nalUnitType 
IB_NEQ    ZERO,t1,$Label2 
EGOLD     idrPicID,#0,ZERO 
Label2: 
IB_NEQ    ZERO,picOrderCntType,$Label3 
READ      picOrderCntLSB,Nvalt 
Label3: 
ICMPI_EQ  p1,ONE,fieldPicFlag 
[p1]MOV   nfieldPicFlag,ZERO 
[!p1]MOV nfieldPicFlag,ONE 
AND       t1,picOrderPresentFlag,nfieldPicFlag 
B_NEQ     ONE,t1,$Label4 
EGOLD     deltaPicOrderCntBottom,#1,ZERO 
VC-1译码 
已描述用作CABAC译码(经由CABAC模块580的可变长度译码单元530a)、CAVLC译码(经由CAVLC模块582的可变长度译码单元530b)、MPEG译码(经由MPEG模块578的可变长度译码单元530c)以及EXP-Golomb译码(经由EXP-Golomb模块584的可变长度译码单元530d)的译码系统200,接下来将描述译码系统200的VC-1实施例,于此称为可变长度译码单元530e。可变长度译码单元530e根据计算前导1模块574、计算前导0模块576的运算而操作。VC-1使用霍夫曼编码且具有更多表格。代替建立以及测试这些表格,既然位率需要较低,但是验证成本较高,必要的表格被载入至邻近内容存储器564。表格格式相同于MPEG-2所使用,而使用READ、VLC_CLZ、VLC_CLO以及INPSTR指令以译码位流。例如,使用下列伪码可执行特定表格: 
Figure GSB00000424785100881
Figure GSB00000424785100891
Figure GSB00000424785100901
在部分实施例中,可用分支指令代替CASE叙述。因此,和MPEG-2一样的VC-1具有容易定义的文法。文法中的符号具 有特定方法(表格),其可被执行成着色器,如上述编码所显示。 
以上所述仅为本发明较佳实施例,然其并非用以限定本发明的范围,任何熟悉本项技术的人员,在不脱离本发明的精神和范围内,可在此基础上做进一步的改进和变化,因此本发明的保护范围当以本申请的权利要求书所界定的范围为准。 
附图中符号的简单说明如下: 
100:图形处理器系统       102:显示装置 
104:显示接口单元         106:局部存储器 
110:存储接口单元         114:图形处理单元 
118:PCI-E总线接口单元    122:芯片组 
124:系统存储器           126:中央处理单元 
128:驱动软件             200:译码系统 
202:图形处理器           204:计算核心 
206:执行单元集合控制以及顶点/串流快取单元 
208:图形管线             302:纹理过滤单元 
304:像素包装器           306:命令流处理器 
308:写回单元             310:纹理地址产生器 
402:执行单元输入         412:执行单元集合 
404a:执行单元偶输出      404b:执行单元奇输出 
406:存储器存取单元       408:L2快取存储器 
410:存储器接口仲裁器 
504:指令快取存储器控制器 
506:线程控制器           508:缓冲器 
510:共用暂存器文件       512:执行单元数据路径 
514:执行单元数据路径FIFO 
516:述词暂存器文件       518:纯量暂存器文件 
520:数据输出控制器       524:线程任务接口 
526:暂存器文件         530:可变长度译码单元 
532:向量浮点单元 
534:向量整数计算逻辑单元 
536:特殊目的单元      540:暂存器文件 
562:SREG串流缓冲器/DMA引擎 
562a:SREG暂存器       562b:位流缓冲器 
564:邻近内容存储器 
568:读取邻近内容存储器模块 
570:检查字串模块      572:读取模块 
574:计算前导1模块     576:计算前导0模块 
578:MPEG模块          580:CABAC模块 
582:CAVLC模块         584:Exp-Golomb模块 
602:状态索引          604:高可能性符号值 
606:码长范围          608:码长偏移量 
612:局部暂存器        614:总体暂存器 
616:二进制字串暂存器  620:二进制化模块 
622:取得内容模块 
624:二进制计算译码引擎 
628:目标 
630:SRC2 
632:SRC1 
634:共用以及线程信息 
636:延迟/重置         638:地址 
640:数据              650:存储器模块 
654:二进制索引        710:系数符记模块 
712:电平码模块        714:电平模块 
716:电平0模块         718:零电平模块 
720:运行模块        722:电平阵列 
724:运行阵列 

Claims (18)

1.一种译码系统,其特征在于,包括:
一软件可编程核心处理单元,具有一可变长度译码单元,用以执行一着色器,上述着色器系选择性地执行一视频串流的一译码步骤以输出一译码数据,其中上述视频串流根据多个编码方法编码而得,且上述译码步骤使用软件以及硬件的一组合而执行,
其中,上述译码步骤于一图形处理单元的内容编程内,透过执行于上述图形处理单元的执行单元数据路径硬件以及于一位流缓冲器中,用以自动管理的额外硬件而完成,以及其中上述多个编码方法包括内容适应二进制算术编码、内容适应可变长度编码、EXP-Golomb、动画专家群以及VC-1的至少二者,上述执行单元数据路径硬件包括上述可变长度译码单元。
2.根据权利要求1所述的译码系统,其特征在于,对应于用以适应二进制算术译码的可变长度译码单元更包括:
一二进制化模块,用以接收包括一语法成分以及一内容区块种类的一第一信息,以及,对应于由上述二进制化模块所执行的上述着色器的一第一指令而根据用于上述内容区块种类的上述第一信息而提供对应于一或多个宏区块参数的一第二信息;
一得到内容模块,用以接收上述第二信息,以及,对应于由上述得到内容模块所执行的上述着色器的一第二指令而提供用于二进制译码的一二进制以及内容识别信息,其中上述内容识别信息对应于一高可能性符号机率或是一低可能性符号机率;以及
一二进制计算译码模块,用以接收上述二进制、上述内容识别信息、一偏移量以及一范围,以及,对应于由上述二进制计算译码模块所执行的上述着色器的一第三指令而译码一二进制符号。
3.根据权利要求2所述的译码系统,其特征在于,更包括一内容存储器阵列,用于基于内容的译码以及对应的暂存器,其中上述内容存储器阵列包括一目前宏区块以及一邻近宏区块单元,其中对应于由上述得到内容模块所执行的上述着色器的一第五指令,上述得到内容模块用以根据包含由上述暂存器至上述内容存储器阵列的数值转换的布林逻辑运算而写入至上述内容存储器阵列。
4.根据权利要求1所述的译码系统,其特征在于,上述可变长度译码单元更包括一二进制字串暂存器,用以接收一译码过的二进制符号并提供更新过的内容信息。
5.根据权利要求4所述的译码系统,其特征在于,上述二进制字串暂存器用以接收表示一译码过的语法成分的多个二进制符号。
6.根据权利要求1所述的译码系统,其特征在于,对应于用于适应可变长度译码的可变长度译码单元更包括:
一系数符记模块,用以接收宏区块信息,以及,对应于上述着色器的一第六指令而提供一拖尾系数以及一非零系数的信息;
一电平模块,用以接收上述拖尾系数信息以及一电平码信息,以及,对应于上述着色器的一第七指令而提供一字尾长度信息以及一电平索引信息,其中上述电平索引信息为递增;
一电平码模块,用以接收上述字尾长度信息,以及,对应于上述着色器的一第八指令而提供上述电平码信息至上述电平模块;
一电平0模块,用以接收上述拖尾系数信息,以及,对应于上述着色器的一第九指令,提供一第二电平索引信息至一电平阵列,其中上述第二电平索引信息为递增;
一零电平模块,用以接收上述总系数信息以及系数信息的一最大值,以及,对应于上述着色器的一第十指令而提供一零剩余信息至一第一多工器以及提供一重置值至一第二多工器;以及
一运行模块,用以分别接收来自上述第一多工器的上述零剩余信息以及来自第二多工器的第二电平索引信息,以及,对应于上述着色器的一第十一指令而提供一运行索引至一运行阵列。
7.根据权利要求6所述的译码系统,其特征在于,上述电平阵列以及上述运行阵列用以对应于上述着色器的一第十二指令而提供一译码过的电平值以及一译码过的运行值。
8.根据权利要求6所述的译码系统,其特征在于,上述电平阵列以及上述运行阵列对应于上述着色器的一第十三指令而被清除。
9.根据权利要求1所述的译码系统,其特征在于,上述可变长度译码单元更用以使用一指令中的位数而决定是否使用储存于一内部暂存器的一前一运算的一结果,或是在一来源运算元的一数据应使用于在一或多个模块的一目前运算。
10.根据权利要求1所述的译码系统,其特征在于,上述可变长度译码单元更包括一直接存储器存取引擎模块,包括一位流缓冲器以及一直接存储器存取引擎,上述直接存储器存取引擎用以对应于每片段的上述着色器的一指令的执行而于一既定数量的位数被使用时,重复地且自动地在上述位流缓冲器缓冲上述既定数量的位数,上述位数对应于上述视频串流。
11.根据权利要求10所述的译码系统,其特征在于,上述可变长度译码单元更用以对应于在上述位流缓冲器中的预期向下溢位而延迟上述直接存储器存取引擎模块。
12.根据权利要求10所述的译码系统,其特征在于,上述直接存储器存取引擎更用以追踪在上述位流缓冲器中所使用的位数,以及对应于上述位数大于一既定数量的侦测而停止上述位流缓冲器运算,并转换控制至一主机处理器。
13.根据权利要求1所述的译码系统,其特征在于,对应于用于MPEG-2译码的上述可变长度译码单元更包括:
一MPEG模块,用以使用一或多个MatchVLC函数以执行MPEG标准表格,每一上述一或多个MatchVLC函数对应于一各个语法成分,上述表格选择依据上述着色器的一指令。
14.根据权利要求13所述的译码系统,其特征在于,上述MatchVLC函数系至少部分以硬件来执行。
15.根据权利要求1所述的译码系统,其特征在于,对应于用于EXP-Golomb译码的上述可变长度译码单元更包括:
一EXP-Golomb模块,用以使用一单一运算码执行多个EXP-Golomb运算,每一上述多个EXP-Golomb运算使用在一着色器指令中的一立即数据栏位值的各个值来加以区别。
16.根据权利要求1所述的译码系统,其特征在于,对应于用于VC-1译码的上述可变长度译码单元用以选择性地载入VC-1表格至一内容存储器阵列,其中上述译码系根据上述选择性载入的表格。
17.一种图形处理单元,其特征在于,耦接至一主机处理器以及存储器,上述图形处理单元包括:
一图形处理器,具有一软件可编程核心处理单元,上述软件可编程核心处理单元包括一或多个执行单元,上述一或多个执行单元包括执行单元数据路径硬件,上述执行单元数据路径硬件包括一可变长度译码单元,上述可变长度译码单元用以执行一着色器,上述着色器选择性地执行一视频串流的译码步骤以输出一译码数据,其中上述视频串流根据多个编码方法编码而得,且上述译码步骤使用软件以及硬件的一组合而执行,
其中,上述译码步骤系于上述图形处理单元的内容编程内,透过执行于上述执行单元数据路径硬件以及于一位流缓冲器中,用以自动管理的额外硬件而完成,以及其中上述多个编码方法包括内容适应二进制算术编码、内容适应可变长度编码、EXP-Golomb、动画专家群以及VC-1的至少二者。
18.根据权利要求17所述的图形处理单元,其特征在于,更包括具有与上述可变长度译码单元相同结构的一或多个额外可变长度译码单元,其中上述可变长度译码单元以及上述一或多个额外可变长度译码单元用以同步地译码多视频串流。
CN 200710126452 2006-06-08 2007-06-08 译码系统以及图形处理单元 Active CN101072353B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US81182106P 2006-06-08 2006-06-08
US60/811,821 2006-06-08

Publications (2)

Publication Number Publication Date
CN101072353A CN101072353A (zh) 2007-11-14
CN101072353B true CN101072353B (zh) 2013-02-20

Family

ID=38899303

Family Applications (4)

Application Number Title Priority Date Filing Date
CN 200710110297 Active CN101072350B (zh) 2006-06-08 2007-06-08 译码系统及其译码方法
CN 200710110295 Active CN101072349B (zh) 2006-06-08 2007-06-08 内容适应性可变长度编码的解码系统与方法
CN 200710126453 Pending CN101087411A (zh) 2006-06-08 2007-06-08 译码方法
CN 200710126452 Active CN101072353B (zh) 2006-06-08 2007-06-08 译码系统以及图形处理单元

Family Applications Before (3)

Application Number Title Priority Date Filing Date
CN 200710110297 Active CN101072350B (zh) 2006-06-08 2007-06-08 译码系统及其译码方法
CN 200710110295 Active CN101072349B (zh) 2006-06-08 2007-06-08 内容适应性可变长度编码的解码系统与方法
CN 200710126453 Pending CN101087411A (zh) 2006-06-08 2007-06-08 译码方法

Country Status (2)

Country Link
CN (4) CN101072350B (zh)
TW (4) TWI354239B (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8156410B2 (en) * 2008-03-05 2012-04-10 Himax Technologies Limited Fast debugging tool for CRC insertion in MPEG-2 video decoder
US8686921B2 (en) 2008-12-31 2014-04-01 Intel Corporation Dynamic geometry management of virtual frame buffer for appendable logical displays
CN101577629B (zh) * 2009-05-14 2011-05-25 北京邮电大学 组播网络中基于图着色的编码向量动态分配方法
CN101908200B (zh) * 2009-06-05 2012-08-08 财团法人资讯工业策进会 具电源闸控功能的绘图处理系统及方法
US8681162B2 (en) * 2010-10-15 2014-03-25 Via Technologies, Inc. Systems and methods for video processing
GB2488159B (en) * 2011-02-18 2017-08-16 Advanced Risc Mach Ltd Parallel video decoding
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9231616B2 (en) * 2011-08-05 2016-01-05 Broadcom Corporation Unified binarization for CABAC/CAVLC entropy coding
CN103037213B (zh) * 2011-09-28 2016-02-17 晨星软件研发(深圳)有限公司 布林熵解码器及影像播放系统的布林熵解码方法
WO2013069991A1 (ko) 2011-11-08 2013-05-16 삼성전자 주식회사 비디오의 산술 부호화 방법 및 그 장치, 비디오의 산술 복호화 방법 및 그 장치
EP2831720A4 (en) * 2012-03-30 2015-12-09 Intel Corp PREFERRING MEDIA DEVICES WITH DETERMINED FUNCTIONS
US9451258B2 (en) 2012-04-03 2016-09-20 Qualcomm Incorporated Chroma slice-level QP offset and deblocking
JP6242385B2 (ja) * 2012-05-29 2017-12-06 寰發股▲ふん▼有限公司HFI Innovation Inc. サンプルアダプティブオフセット情報(SampleAdaptiveOffsetInformation)の符号化の方法と装置
US9196014B2 (en) * 2012-10-22 2015-11-24 Industrial Technology Research Institute Buffer clearing apparatus and method for computer graphics
CN103813177A (zh) * 2012-11-07 2014-05-21 辉达公司 一种视频解码系统和方法
US9947084B2 (en) 2013-03-08 2018-04-17 Nvidia Corporation Multiresolution consistent rasterization
EP3000043B1 (en) * 2013-05-21 2020-12-09 Square Enix Holdings Co., Ltd. Information processing apparatus, method of controlling the same and program
CN106959822B (zh) * 2013-12-27 2020-02-07 威盛电子股份有限公司 数据储存装置及其数据写入方法
US9455743B2 (en) * 2014-05-27 2016-09-27 Qualcomm Incorporated Dedicated arithmetic encoding instruction
US9727392B2 (en) 2014-09-16 2017-08-08 Nvidia Corporation Techniques for render pass dependencies in an API
US10205957B2 (en) 2015-01-30 2019-02-12 Mediatek Inc. Multi-standard video decoder with novel bin decoding
US10250912B2 (en) * 2015-02-17 2019-04-02 Mediatek Inc. Method and apparatus for entropy decoding with arithmetic decoding decoupled from variable-length decoding
CN104869398B (zh) * 2015-05-21 2017-08-22 大连理工大学 一种基于cpu+gpu异构平台实现hevc中的cabac的并行方法
GB2542162B (en) * 2015-09-10 2019-07-17 Imagination Tech Ltd Trailing or leading digit anticipator
US9537504B1 (en) * 2015-09-25 2017-01-03 Intel Corporation Heterogeneous compression architecture for optimized compression ratio
US10467006B2 (en) * 2015-12-20 2019-11-05 Intel Corporation Permutating vector data scattered in a temporary destination into elements of a destination register based on a permutation factor
US10375395B2 (en) 2016-02-24 2019-08-06 Mediatek Inc. Video processing apparatus for generating count table in external storage device of hardware entropy engine and associated video processing method
CN106921859A (zh) * 2017-05-05 2017-07-04 郑州云海信息技术有限公司 一种基于fpga的cabac熵编码方法与装置
CN107277505B (zh) * 2017-05-19 2020-06-16 北京大学 基于软硬件分区的avs-2视频解码器装置
CN107242882A (zh) * 2017-06-05 2017-10-13 上海瓴舸网络科技有限公司 一种b超显示辅助设备及其控制方法
CN114449277B (zh) * 2017-12-08 2024-06-07 谷歌有限责任公司 用于系数代码化的上下文推导的方法和设备
TWI674558B (zh) 2018-06-12 2019-10-11 財團法人工業技術研究院 數值陣列資料影像處理裝置、數值陣列資料影像處理方法及色碼表產生方法
CN109818855B (zh) * 2019-01-14 2020-12-25 东南大学 一种NDN中支持pipeline模式获取内容的方法
CN110458120B (zh) * 2019-08-15 2022-01-04 中国水利水电科学研究院 一种复杂环境下不同车型识别方法及系统
CN111028135B (zh) * 2019-12-10 2023-06-02 国网重庆市电力公司电力科学研究院 一种图像文件修复方法
CN112582009B (zh) * 2020-12-11 2022-06-21 武汉新芯集成电路制造有限公司 单调计数器及其计数方法
US11733895B2 (en) * 2021-03-31 2023-08-22 Silicon Motion, Inc. Control method of flash memory controller and associated flash memory controller and storage device
US11748011B2 (en) 2021-03-31 2023-09-05 Silicon Motion, Inc. Control method of flash memory controller and associated flash memory controller and storage device
CN114816434B (zh) * 2022-06-28 2022-10-04 之江实验室 一种面向可编程交换的硬件解析器及解析器实现方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1599049A2 (en) * 2004-05-21 2005-11-23 Broadcom Corporation Multistandard video decoder

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7742544B2 (en) * 2004-05-21 2010-06-22 Broadcom Corporation System and method for efficient CABAC clock
KR100612015B1 (ko) * 2004-07-22 2006-08-11 삼성전자주식회사 컨텍스트 적응형 이진 산술 부호화 방법 및 그 장치
US7800620B2 (en) * 2004-11-05 2010-09-21 Microsoft Corporation Optimizing automated shader program construction

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1599049A2 (en) * 2004-05-21 2005-11-23 Broadcom Corporation Multistandard video decoder

Also Published As

Publication number Publication date
TW200813884A (en) 2008-03-16
TWI428850B (zh) 2014-03-01
TWI344795B (en) 2011-07-01
CN101072349B (zh) 2012-10-10
TW200803526A (en) 2008-01-01
CN101072350A (zh) 2007-11-14
CN101072350B (zh) 2012-12-12
TW200809689A (en) 2008-02-16
CN101087411A (zh) 2007-12-12
CN101072353A (zh) 2007-11-14
TWI354239B (en) 2011-12-11
CN101072349A (zh) 2007-11-14
TWI348653B (en) 2011-09-11
TW200821982A (en) 2008-05-16

Similar Documents

Publication Publication Date Title
CN101072353B (zh) 译码系统以及图形处理单元
US7626518B2 (en) Decoding systems and methods in computational core of programmable graphics processing unit
US7656326B2 (en) Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit
US7626521B2 (en) Decoding control of computational core of programmable graphics processing unit
US7623049B2 (en) Decoding of context adaptive variable length codes in computational core of programmable graphics processing unit
CN1312938C (zh) 用于解码可变长度编码位流的方法和设备
US7710296B2 (en) N-bin arithmetic coding for context adaptive binary arithmetic coding
US7443318B2 (en) High speed context memory implementation for H.264
CN102098519B (zh) 视频编码方法、解码方法、编码及解码装置
CN101753148A (zh) 算术解码设备
US9001882B2 (en) System for entropy decoding of H.264 video for real time HDTV applications
CN101951516A (zh) 基于h.264/avc中cabac的并行编码实现电路及编码方法
CN101383954A (zh) 一种支持多种音视频标准的媒体处理芯片的实现方法
CN101252694A (zh) 基于块的视频解码的帧存储压缩和地址映射系统
CN101841707B (zh) 基于jpeg2000标准的高速实时处理算术熵编码方法
CN101527844A (zh) 分块化执行解码数据的方法
US20120243619A1 (en) Apparatus processing video stream
CN101365131A (zh) 适于vlsi实现的avs视频解码器变长解码的简化码表及实施方法
US9258565B1 (en) Context model cache-management in a dual-pipeline CABAC architecture
US7075462B2 (en) Speeding up variable length code decoding on general purpose processors
CN100403802C (zh) 一种基于寄存器组的行程解码与反扫描实现方法
CN1541356A (zh) 有软/硬件环压缩的先进先出写/后进先出读跟踪缓冲器
US11327687B2 (en) Encoding data arrays
Huang et al. High throughput VLSI architecture for H. 264/AVC context-based adaptive binary arithmetic coding (CABAC) decoding
Xu et al. A fast efficient architecture for MPEG-4 zerotree encoder

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant