CN101072350A - 译码系统及其译码方法 - Google Patents
译码系统及其译码方法 Download PDFInfo
- Publication number
- CN101072350A CN101072350A CN 200710110297 CN200710110297A CN101072350A CN 101072350 A CN101072350 A CN 101072350A CN 200710110297 CN200710110297 CN 200710110297 CN 200710110297 A CN200710110297 A CN 200710110297A CN 101072350 A CN101072350 A CN 101072350A
- Authority
- CN
- China
- Prior art keywords
- register
- decoding
- cabac
- content
- instruction
- 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.)
- Granted
Links
Images
Landscapes
- Image Generation (AREA)
- Image Processing (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明披露一种译码系统与方法,系统实施例包含软件可编程核心处理单元,其具有内容适应性二进制算术编码(CABAC)单元,用于执行一缓冲器,该着色器用于施行CABAC译码视讯流,并提供一译码数据输出。
Description
技术领域
本发明涉及译码系统及其译码方法,特别是涉及应用于可编程图形处理单元内的计算核心的内容适应性二进制算术编码的译码系统及其译码方法。
背景技术
计算机绘图是以计算机产生图像、影像或其它图形或图像信息的一门艺术和科学,目前的绘图系统多包含数个接口,例如微软的Direct3D接口及OpenGL等等,如此可于执行特定操作系统(如微软的WINDOWS)的计算机上控制诸如图形加速器或图形处理单元(graphics processing unit,GPU)等的多媒体硬件,图像、影像的产生常被称为「描绘成像(rendering)」,此类操作的细节一般是由图形加速器进行,于三维(3D)计算机绘图中,构成场景中对象表面(或物体)的几何形状经转变为像素(图形单元)后,储存于画面缓冲区(frame buffer)中,接着显示于显示装置上,每一个对象或对象群都有与表面外观有关的特定视觉性质,例如材质、反射性、形状、纹理等等,这些可以定义成对象或对象群的描绘内容(context)。
计算机绘图必须迎合消费者对游戏及其它多媒体产品的控制性及特色的重口味要求,还要能产生更加真实的影像以及改善处理速度及耗能,现已发展出许多标准可以利用较少的位数产生较佳影像的质量,例如H.264标准(又称为ISO动画专家群组MPEG-4第十部)是一种高压缩数字视讯编码标准,与MPEG-2兼容的编码相比,H.264兼容的编码仅需要差不多三分之一的位数,即可储存同样视频质量的视讯,H.264标准提供两种熵(entropy)译码程序,分别是内容适应性二进制算术编码(context-adaptive binary arithmeticcoding,CABAC)以及内容适应性可变长度编码(context-adaptive variablelength coding,CAVLC),关于CABAC,其解码运算通常是依序处理,需要大量的计算以得到范围、补偿、内容(context)信息等参数,目前CABAC译码结构可满足消费者的部分需求,但是在设计上仍有其限制。
发明内容
本发明披露一种内容适应性二进制算术编码(context-adaptive binaryarithmetic,CABAC)的译码系统及方法(之后简称为译码系统),运用于图形处理单元(graphics processing unit,GPU)内的多线程(multithread)并行计算核心,简单地说,于一实施例中,本系统包含一软件可编程核心处理单元,其内具有一CABAC单元以执行一着色器(shader),该着色器可以执行视讯流的CABAC译码,并提供一译码数据输出。
方法实施例则包括将着色器加载具有CABAC单元的可编程核心处理单元,CABAC执行该着色器以CABAC译码一视讯流,并提供一译码数据输出。
本领域技术人员在阅读以下结合附图的详细说明之后,可推演出其它系统、方法、特征及优点,所有这些推演的系统、方法、特征及优点均属本发明的范围,受到如所附权利要求的保护。
附图说明
这里所披露实施例的各方观点可参考下列附图以获得更深入的了解,图式中的组件并未限定其尺寸比例,仅用于清楚说明本发明的原则,各图中相似的标号代表相对应的部分。
图1是图形处理器系统实施例的方块图,其中可施行多种译码系统(及方法)实施例。
图2例示处理环境的方块图,其中可施行多种译码系统实施例。
图3是图2例示处理环境内的选择组件方块图。
图4是图2与图3例示处理环境内的计算核心方块图,其中可施行多种译码系统实施例。
图5A是图4计算核心内的执行单元的选择组件方块图,其中可施行多种译码系统实施例。
图5B是执行单元数据路径的方块图,其中可施行多种译码系统实施例。
图6A是图5所示译码系统实施例的方块图。
图6B是图6A译码系统的方块图。
图6C是图6A译码系统的位流缓冲器实施例的方块图。
图6D是图6A译码系统的内容存储器结构配合相关寄存器实施例的方块图。
图6E是应用图6A译码系统的宏块分割方式实施例的方块图。
图6F是利用图6A译码系统完成的例示宏块译码机制的方块图。
具体实施方式
本发明揭示了多种内容适应性二进制算术编码(context-adaptive binaryarithmetic coding,CABAC)的译码系统及方法(之后将通称为译码系统),于一实施例中,译码系统内嵌于图形处理单元(graphics processing unit,GPU)的可编程、多线程、并行计算核心的一个或多个执行单元中,利用软件结合硬件的方式来实现译码功能,亦即视讯译码是以图形处理单元编程(programming)的内容(context)配合施行于图形处理单元数据路径内的硬件所完成,举个例子,译码运算或方法是由具有扩充指令集(extended instructionset)的着色器(shader,如顶点着色器)、图形处理单元的执行单元数据路径、以及用于CABAC处理环境中的自动管理位流缓冲器及内容模型分析(context modeling)的附加硬件所共同完成,不像已知的旧有系统,仅具有单纯硬件或单纯软件的CABAC处理方法,因此或多或少会遇到于现有技术中所提到的问题。
另外,自动位流缓冲器具备一些优点,例如,一旦位流缓冲器的直接存储器存取(direct memory access,DMA)引擎得知位流的位置(地址),便会自动管理位流而不需要进一步的指令,这样的机制就跟传统的微处理器或数字信号处理器(digital signal processor,DSP)不同,一提到位流管理就代表了大量之间接费用,再则,通过记录已使用的位数量,位流缓冲器机制可以检测和处理错误的位流。
本发明译码系统的另一个优点是可以减少指令延迟(latency),因为CABAC译码是非常连续的动作,不易利用多线程,因此在各种实施例中就会使用一种转递机制来减少等待延迟,例如寄存器转递(register forwarding),进一步解释,便是深管(deep-pipeline)及多线程处理器无法以同一线程在每一周期执行指令,有些系统利用一般转递(general forwarding),是藉由检查前次产生的操作数(operand)地址以及指令操作数地址(如果相同,则使用前次产生操作数),此种一般转递需要复杂的比较及多任务动作。在某些译码系统实施例中,会使用不同的转递方式,不管是利用前次计算结果(如保留在内部寄存器)还是来源操作数的数据,均利用指令中的位(例如总共2位,每一操作数使用1位)来编码,藉由这种方式,可以减少整体的延迟,改善处理器管线的效率。
这里描述的译码系统可以利用已知的国际电信联盟通讯标准部门(International Telecommunication Union Telecommunication StandardizationSector,ITU-T) H.264标准,根据执行从图形处理单元画面缓冲器存储器或主处理器(如中央处理单元(central processing unit,CPU))存储器所接收到的一个或多个指令组(如藉由预加载(preload)等已知机制或是快取失败等),多种译码系统实施例即可进行运算。
图1是图形处理器系统100实施例的方块图,其中介绍了译码系统及方法,于某些实施方式中,图形处理器系统100可为计算机系统,其中,图形处理器系统100可包含由显示接口单元(display interface unit,DIU)104驱动的显示装置102以及区域存储器106(可包含显示缓冲器、画面缓冲器、纹理缓冲器、命令缓冲器等等),区域存储器106可以画面缓冲器或储存单元取代,区域存储器106通过一个或多个存储器接口单元(memory interfaceunit,MIU)110连接至图形处理单元(graphics processing unit,GPU)114,于一实施例中,存储器接口单元110、图形处理单元114、显示接口单元104三者连接至高速外围组件互连(peripheral component interconnect express,PCI-E)兼容的总线接口单元(bus interface unit,BIU)118,于一实施例中,总线接口单元118可以使用图形地址重绘表(graphics address remapping table,GART),当然也可使用其它存储器绘图机制,图形处理单元114包含译码系统200,稍后会针对此部分作进一步的说明,虽然于某些实施例中将图形处理单元元114内的译码系统200画成一个组件,但是译码系统200其实可以包含更多图形处理器系统100的绘示或未绘示组件。
总线接口单元118连接至芯片组122(如北桥芯片组)或开关,芯片组122包含接口电路(interface electronics),以增强从中央处理单元(centralprocessing unit,CPU)126(又称主处理器)接收到的讯号,并分离从系统存储器124进出的信号与从输出入(I/O)装置进出的讯号,虽然这里提到PCI-E总线协议,不过也可使用其它的连接和/或通讯方式来沟通主处理器与图形处理单元114(如PCI、专用高速总线等),系统存储器124还包含驱动软件128,可利用中央处理单元126将指令组或命令传送给图形处理单元114内的寄存器。
在某些实施例中可再另外配置图形处理单元,利用PCI-E总线协议或其它通讯协议经由芯片组122连接至图1的其它组件,于一实施例中,图形处理单元100可以包含图1的所有组件,当然亦可剔除、新增或改变某些组件,例如,可另外增加连接至芯片组122的南桥芯片组。
请参阅图2,其为例示处理环境的方块图,其中应用一译码系统200,图形处理单元114包含一图形处理器202,图形处理器202则包含多个执行单元(execution uit,EU)和计算核心204,于一实施例中,计算核心204包含内嵌于执行单元数据路径(execution unit data path,EUDP)的译码系统200,该数据路径分配至一个或多个执行单元,图形处理器202还包含执行单元集合(execution unit pool,EUP)控制及顶点/串流闪存单元206(以后称为EUP控制单元206)以及具有固定功能逻辑(例如,包含三角形设定单元(triangleset-up unit,TSU)、栅格-图块产生器(span-tile generator,STG)等)的绘图管线208,计算核心204包含联合的多个执行单元,以符合不同着色器程序的着色器任务的计算要求,所述着色器程序可包含顶点着色器、几何着色器、和/或像素着色器,使绘图管线208能处理数据,计算核心204的着色器能进行译码系统200的大部分功能,下面将详细说明图形处理器的实施例,接着说明译码系统200的细节。
译码系统可以硬件、软件、固件或其组合等方式实施,于较佳实施例中,译码系统200可包含硬件或软件,利用下列已知技术或其组合,例如:具有逻辑门而可对数据信号进行逻辑功能的离散逻辑电路、具有适当组合逻辑门的特殊应用集成电路(application specific integrated circuit,ASIC)、可编程门阵列(programmable gate array,PGA)、现场可编程门阵列(fieldprogrammable gate array,FPGA)等等组件。
请参考图3及图4,其为图形处理器202实施例选择组件的方块图,如前所述,译码系统200可以是图形处理器202内的着色器,另外加上扩充指令组及其它硬件组件,以下将说明图形处理器202及对应程序的实施例,虽然图3与图4并未绘出图形处理所用到的全部组件,但是已足以令本领域技术人员明了相关图形处理器的功能及架构。请参阅图3,可编程处理环境的中心为计算核心204,其包含译码系统200,并可处理各种指令,计算核心204可以执行或映像多种着色器程序,如顶点、几何、像素着色器程序等,多线程处理器的计算核心204可以在单一频率周期内处理多个指令。
于图3中,图形处理器202的相关组件包含计算核心204、纹理过滤单元302、像素打包组件304、命令流处理器306、写回单元308、以及纹理地址产生器310,图3中的EUP控制单元206也包含顶点闪存和/或串流闪存,另外,图3的纹理过滤单元302提供纹素(texel)数据给计算核心204(输入A及B),于某些实施例中,纹素数据为512位数据。
像素打包组件304提供像素器着色输入(PS输入,输入C和D)给计算核心204,输入同样是512位数据格式,另外,像素打包组件304向EUP控制单元206请求像素着色器任务,而EUP控制单元206便会提供指定执行单元号码(EU#)及线程号码(THREAD#)给像素打包组件304,因为像素打包组件304及纹理过滤单元302是已知的技术,这里便不再赘述,虽然图3显示像素及纹素分组为512位的数据分组,但是可依各实施例根据图形处理器202所需的效能改变其大小。
命令流处理器306提供三角形顶点索引给EUP控制单元206,于图3的实施例中,索引为256位的数据,EUP控制单元206组合从串流闪存接收到的顶点着色器输入,并将这些数据送至计算核心204(输入E);EUP控制单元206亦组合几何着色器输入,并将这些数据送至计算核心204(输入F);EUP控制单元206另外控制执行单元输入(EU输入)402及执行单元输出(EU输出)404(图4),换句话说,EUP控制单元206控制计算核心204的各输入流与输出流。
经过处理之后,计算核心204提供像素着色器输出(PS输出,输出J1与J2)给写回单元308,像素着色器输出包括色彩信息,例如红/绿/蓝/透明度(RGBA)信息,关于实施例中的数据结构,像素着色器输出可以是两条512位的数据流,其它实施例亦可使用其它的位宽度。
除了像素着色器输出,计算核心204亦会输出纹理坐标(TC,输出K1及K2)给纹理地址产生器310,其中包括UVRQ信息,纹理地址产生器310向计算核心204的L2闪存408发出纹理描述符号请求(T#请求,输入X),然后计算核心204的L2闪存408会输出纹理描述符号数据(T#数据,输出W)给纹理地址产生器310,因为纹理地址产生器310及写回单元308是已知的技术,因此这里不再赘述,再则,虽然画中显示URVQ及RGBA是512位的数据,但是此参数亦可随不同实施例而做变化,于图3的实施例中,总线分成两条512位信道,同时传输4个像素的128位RGBA色彩值及128位UVRQ纹理坐标。
绘图管线208包含固定功能的图形处理功能,例如,因应从驱动软件发出的绘制一三角形的命令,顶点信息通过计算核心204内的顶点着色器逻辑组件以进行顶点转换,对象将从对象空间种换成工作空间和/或屏幕空间的三角形,三角形通过计算核心204到达绘图管线208的三角形设定单元,结合像素后进行已知的任务,例如产生边界盒(bounding box)、拣选(culling)、产生边缘功能(edge function generation)及三角形层级剔除(triangle levelrejection)等,接着三角形设定单元再将数据传递至绘图管线208中具有图块产生功能的栅格及图块产生单元,因此,数据对象被分割成图块(例如8×8、16×16等),并且传递至其它的固定功能单元,进行深度(z-值)处理,例如z-值的高阶(同样的程序在高阶时使用的位数比低阶少)剔除,然后将z-值传回计算核心204的像素着色器逻辑组件,以根据所得纹理及管线数据进行像素着色器功能,计算核心204将已处理的值输出至位于绘图管线208内的目标单元,目标单元在各闪存将更新内部值之前进行α测试及模板测试。
请注意计算核心204的L2闪存408以及EUP控制单元206之间有512位的顶点闪存溢出(spill)数据的传输(输入G),另外,计算核心204输出两个512位顶点闪存(VC)写入数据(输出M1及M2)给EUP控制单元206做进一步的处理。
请参阅图4,其显示计算核心204的其它组件及相关组件,计算核心204包含具有一个或多个执行单元420a-420h(以后通称执行单元420)的执行单元集合(EUP)412,每一个执行单元420可以在一个频率周期内处理多个指令,因此,执行单元集合412在尖峰时可以同时或几乎同时处理多个线程,尽管图4仅绘出8个执行单元(EU0-EU7),但是并不表示限制其数量为8,于其它实施例可以增加或减少数量,其中至少一个执行单元(例如EU0 420a)具有一译码系统200,详细说明如下。
计算核心204亦包含存储器存取单元(memory access unit,MXU)406,存储器存取单元406藉由存储器接口仲裁器410与L2闪存408连接,L2闪存408从EUP控制单元206接收顶点闪存溢出数据(输入G),并提供顶点闪存溢出数据(输出H)给EUP控制单元206,另外,L2闪存408从纹理地址产生器310接收纹理描述符号请求(T#请求,输入X),并因应接收到的该请求,提供纹理描述符号数据(T#数据,输出W)给纹理地址产生器310。
存储器接口仲裁器410提供了区域视讯存储器(如画面缓冲器或区域存储器106)的控制接口,总线接口单元118则提供了系统的接口,其可为PCI-E总线,存储器接口仲裁器410和总线接口单元118作为存储器及L2闪存408之间的接口,于某些实施例中,L2闪存408藉由存储器存取单元406与存储器接口仲裁器410以及总线接口单元118连接,存储器存取单元406会把从L2闪存408及其它区块得到的虚拟存储器地址转换成实际存储器地址。
存储器接口仲裁器410提供L2闪存的存储器存取(如读/写存取),可提取指令/常数/数据/纹理、直接存储器存取(如加载/储存)、索引暂存存取、寄存器溢出、顶点快取记体内容溢出等等。
计算核心204还包含执行单元输入(EU输入)402和执行单元输出(EU输出)404,分别用于提供执行单元集合412的输入以及接收执行单元集合412的输出,执行单元输入402和执行单元输出404可以是交换开关(crossbar)或总线,或是其它已知的输入及输出机制。
执行单元输入402从EUP控制单元206接收顶点着色器输入(输入E)以及几何着色器输入(输入F),然后将信息提供给执行单元集合412,让各执行单元420去处理;另外,执行单元输入402接收像素着色器输入(输入C及D)及纹素分组(输入A及B),并将这些分组传送至执行单元集合412,让各执行单元420去处理;再者,执行单元输入402从L2闪存408接收信息(L2读取),然后在必要时将这些信息提供给执行单元集合412。
图4实施例的执行单元输出404分成偶输出404a和奇输出404b,执行单元输出404和执行单元输入402一样可为交换开关或总线,或是其它已知的架构,执行单元偶输出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可能准许两个描绘内容,其中利用一位标志或其它机制识别其描绘内容,在属于这个内容的任务开始之前,从EUP控制单元206输出内容信息,内容层级信息可为着色器种类、输入/输出寄存器数量、指令起始地址、输出对映表、顶点识别符、各常数缓冲器内的常数,执行单元集合412内的每一个执行单元420可以同时储存多个任务或线程(例如32个线程),于一实施例中,每一线程根据程序计数器提取一指令。
EUP控制单元206类似总任务排程,利用数据驱动(data-driven)方法(如输入讯号内的顶点、像素、几何分组)指派执行单元420内的适当线程,举例来说,EUP控制单元206指派一个线程给执行单元集合412的执行单元420内的一个空线程位置,当一线程已开始执行,顶点闪存或其它组件或模块(根据着色器种类)所输入的数据会放置在共享暂存缓冲器中。
通常图形处理器202使用可编程顶点、几何、及像素缓冲器,不再把这些组件当成具有不同设计及指令组的各别固定功能单元而各别执行或操作这些组件,而是取代成以联合的执行单元420a、420b...420n配合统一指令组执行,除了执行单元420a(这个执行单元包含译码系统200,因此具有额外的功能)之外,每一个用于程序运算的执行单元420的设计与结构均相同,于一实施例中,每一个执行单元420可以进行多线程运算,当顶点着色器、几何着色器、像素着色器等产生不同的着色器任务,这些着色器任务将送至个别的执行单元420去执行,于一实施例中,译码系统200可使用一顶点着色器,与其它执行单元420有些不同,例如,执行单元420a使用一译码系统200,这是其它执行单元(如图4的420b)所没有的,因为译码系统200管理一个或多个对应的内部缓冲器,译码系统200藉由接线413及执行单元输入402自存储器存取单元406取得数据。
当生成了个别的任务,EUP控制单元206会指派这些任务给不同执行单元420的可用线程,当完成任务,EUP控制单元206再管理相关线程的释放,就这一点而言,EUP控制单元206负责指派顶点着色器、几何着色器及像素着色器的任务给执行单元420的线程,然后记录相关的任务及线程,具体来说,EUP控制单元206会有所有执行单元420的线程及存储器的资源表(这里不多做说明),EUP控制单元206会知道哪一个线程指派给哪一个任务使用、知道哪一个线程的任务结束要释放、知道占用多少的共享寄存器文档存储器寄存器(register file memory register)、知道每一个执行单元有多少可用空间。
因此,如果已将一个任务指派给一个执行单元,如420a,EUP控制单元206会将这个线程标示为忙碌中,然后将全部的共享寄存器文档存储器减去每一个线程用掉的寄存器文档机体(footpring)数量,机体是根据顶点着色器、几何着色器及像素着色器的状态而定,另外,每一个着色器阶段可以有不同的机体大小,例如,顶点着色器线程可以要求10个共享寄存器文档寄存器,而像素着色器线程可以仅要求5个寄存器。
当一线程完成其被指派的工作,运行该线程的执行单元420便会发出一讯号给EUP控制单元206,EUP控制单元206便会更新资源表,标注该线程未使用,并将线程共享寄存器文档空间的数量加回可用空间,当所有的线程都处于忙碌中或所有的共享寄存器文档存储器都已分配完(或是保留的寄存器空间太小,无法容纳额外的线程),则该执行单元420算是已满,EUP控制单元206不会再指派新的线程给该执行单元。
每一个执行单元420内部亦有一个线程控制器,可以管理或标注每一个线程是在使用中(或执行中)或是可用的,就这一点而言,于一实施例中,当顶点着色器正执行译码系统200的功能时,EUP控制单元206可以防止几何着色器与像素着色器在此同时运行。
图5A说明具有前述图形处理器202及计算核心204特征的执行单元420a,其包含内嵌有译码系统200的执行单元数据路径512,具体来说,图5A是一执行单元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的控制功能,包括管理每一个线程及判断功能,例如决定如何执行其线程,EUDP 512包含译码系统200,可进行各种的计算,包含像是浮点运算计算逻辑单元(arithmetic logic unit,ALU)、移位逻辑功能等逻辑电路。
数据输出控制器520可将完成的数据移至某些与执行单元输出404连接的组件,例如EUP控制单元206的顶点闪存、写回单元308等等,EUSP 512传送「任务结束」的信息给数据输出控制器520,告知任务已完成,数据输出控制器520包含储存部分,以储存完成的任务(如32个项目(entry)),另包含多个写入端口,数据输出控制器520从储存部分选择任务,接着根据着色器描绘内容所指定的寄存器位置,从共享寄存器文档510读出所有的输出数据项,然后将数据送至执行单元输出404。
线程任务接口524输出执行单元420a完成的任务识别符给EUP控制单元206,任务识别符会通知EUP控制单元206有一特定执行单元内有线程资源,可指派新的任务给该执行单元(如420a)。
于一实施例中,缓冲器508(如常数缓冲器)可以分成16个区块,每一个区块有16个128位水平向量常数的位置,着色器使用一操作数与一索引存取一常数缓冲器位置,其中,索引可以是包含32位或接近32位不具正负号的整数常数的寄存器。
指令闪存控制器504是线程控制器506的接口方块,如果有线程控制器读取请求(如从指令存储器提取可执行着色器码),指令闪存控制器504会查找标签表(未绘出),进行击中/不中(hit/miss)测试,举个例子,如果请求的指令位于指令闪存控制器504的闪存中则表示击中,如果所欲请求的指令将从L2闪存408或存储器106提取则表示不中,如果击中,而同时没有从执行单元输入402发出的请求,则指令闪存控制器504即可同意请求,这是因为指令闪存控制器504的指令闪存只有一个读写端口,而执行单元输入402具有最高的优先权;相反地,如果不中,而L2闪存408内有可取代的区块并有空间存在EUDP FIFO 514,则指令闪存控制器504可同意请求。于一实施例中,指令闪存控制器504的闪存包含32组,每一组有4个区块,每一个区块带有2位状态讯号,可代表三种状态,分别是无效、加载、或有效状态,在区块加载L2数据之前,区块是「无效」状态,当等候L2数据时,是「加载」状态,当完全加载L2数据时,则成为「有效」状态。
通过EUDP路径512可对述部寄存器文档516进行读写,执行单元输入402作为进入数据与执行单元420a的接口,于一实施例中,执行单元输入402包含一8项目先进先出缓冲器以缓冲进入数据,执行单元输入402亦可将数据送至指令闪存控制器504的指令闪存及常数缓冲器508,执行单元输入402也可保留着色器内容。
执行单元输出404作为将输出数据从执行单元420a送至EUP控制单元206、L2闪存408、及写回单元308的接口,于一实施例中,执行单元输出404包含一4项目先进先出缓冲器,用以接收仲裁请求,并缓冲输出至EUP控制单元206的数据,执行单元输出404包含多种功能,可以仲裁指令闪存读取请求、数据输出写入请求、EUDP读/写请求。
共享寄存器文档510用于储存输入、输出、以及暂存数据,于一实施例中,共享寄存器文档510包含8存储页(bank)的128×128位寄存器文档及一读一写和一读写端口,一读一写端口供EUDP 512使用,用于指令执行启动的读写存取,偶线程共享存储页0、2、4、6,奇线程则共享存储页1、3、5、7,线程控制器506配对不同线程的指令,并确认共享寄存器文档的存储器没有读或写存储页冲突。
读写端口则供执行单元输入402及数据输出控制器520使用,以加载初始线程输入数据以及将最终线程输出写至EUP控制单元数据缓冲器及L2闪存408或其它模块,执行单元输入402及执行单元输出404共享一读写I/O端口,于一实施例中,写入比读出具有更高的优先权,512位输入数据进入4个不同的存储页,以避免将数据加载共享寄存器文档510时发生冲突,2位信道索引、数据与512位对齐基准地址(aligned base address)一起通过以指定输入数据的开始存储页,举个例子,如果开始信道索引为1,则存储页1加载从最低有效位(least significant bit,LSB)起算的第一个128位,下一个128位则加载存储页2,以此类推,假设线程基准存储页补偿为0,最后一个128位则加载存储页0,请注意线程ID的两个最低有效位用于产生一存储页补偿,以随机排列每一个线程的开始存储页位置。
CRF寄存器索引及线程ID可用于建立一独一无二的逻辑地址,以卷标配对(tag matching)共享寄存器文档510的读写数据,举个例子,地址可以排成128位,就跟共享寄存器文档存储页的宽度一样,藉由结合8位的CRF寄存器索引以及5位的线程ID,可以建立独一无二的13位地址,每一个1024位行有一个卷标,每一行则有两个512位项目(字符),每一字符储存于4个存储页中,并将CRF索引的两个最低有效位加入目前线程的存储页补偿,以建立存储页选择。
标签配对方法可让不同线程的寄存器共享共享寄存器文档510,有效利用存储器,EUP控制单元206记录共享寄存器文档510的存储器使用程度,确保排程执行单元420a的新任务时有足够的空间。
检查目前线程的目标CRF索引占全部CRF寄存器的大小,在线程控制器506着手进行线程及着色器执行之前,输入数据就应该存放于共享寄存器文档510中,当线程执行结束,数据输出控制器520从共享寄存器文档510读取输出数据。
前述执行单元420的实施例具有内含译码系统200的EUDP 512,图5B说明一EUDP 512的实施例,EUDP 512包含寄存器文档526、复用器528、向量浮点(FP)单元532、向量整数算术逻辑(ALU)单元534、特殊目的单元536、复用器538、寄存器文档540、以及译码系统200,译码系统200包含一个或多个CABAC单元530,可以译码一个或多个串流,举个例子,单一CABAC单元530可以译码单一串流,两个CABAC单元530(如虚线所示,但为简洁的故未绘出其连接关系)可以同时解码两个串流等等,为了清楚说明,之后的叙述仅针对使用单一CABAC单元530的译码系统200的操作,其原则可推衍至超过一个CABAC单元。
如图所示,EUDP 512包含对应于CABAC译码单元530、向量浮点单元532、向量ALU单元534、特殊目的单元536的一些平行数据路径,每一个单元均可根据接收到的指令执行对应的运算,寄存器文档526接收操作数(标示为SRC1及SRC2),于一实施例中,寄存器文档526可为图5A所示的共享寄存器文档510、述部寄存器文档516、和/或纯量寄存器文档518,请注意于某些实施例中,亦可使用更多的操作数运算(功能)讯号线542提供各单元530-536接收运算讯号的手段,目前讯号线544连接至复用器528,可传送编码成指令的当前值,供每一个单元530-536进行小整数值的整数运算,指令译码器(未绘出)提供操作数、运算(功能)讯号、以及目前讯号,数据路径(可以包含写回阶段)末端的复用器538选择正确路径的输出结果,送至寄存器文档540,输出寄存器文档540包含一目标组件,可以是寄存器文档526或其它寄存器,请注意,于一实施例中,当来源及目标寄存器包含相同组件,指令的位具有来源及目标组件选择,供复用器处理来自/送至适当寄存器文档的数据。
因此,执行单元420a可以视为一多阶管线(如4阶管线,具有4个算术逻辑单元),CABAC译码运算于4个执行时相中发生,需要延迟好让CABAC译码线程动作,举个例子,当位流缓冲器发生向下溢位(underflow)、等候初始话内容存储器、等候将位流加载FIFO缓冲器及sREG寄存器(稍后解释)、和/或处理时间已超过预定阈值时间等,可以在执行阶段加入延迟。
如前所述,与某些实施例中,译码系统200利用单一执行单元420a同时译码两个位流,举个例子,根据一个扩充指令组,译码系统可以使用两个数据路径(如新增另一CABAC单元530)同时进行两个串流的译码,当然也可译码较多或较少的串流(那么就会使用较多或较少的数据路径),当牵涉到多个串流,某些译码系统200并不限制同时解码,另外,在某些实施例中,单一CABAC单元530可以执行多重同时串流译码。
于一实施例中,当译码系统200使用两个数据路径、两个线程便可以同时运行,举个例子,在两串流译码实施例中,限制线程的数量为两个,第一线程(如线程0)指派给译码系统200的第一存储页(即CABAC单元530),第二线程(如线程1)则指派给译码系统200的第二存储页(即图5B的虚线CABAC单元),于某些实施例中,可以由两个或多个线程运行单一存储页,另外,虽然此处显示译码系统200是内嵌于EUDP 512,亦可包含其它的组件,像是EUP控制单元206内的逻辑电路。
现已说明执行单元420a、EUDP 512、以及CABAC单元530的某些实施例,下面简单解释CABAC译码,然后说明译码系统200的一些实施例,通常H.264 CABAC译码程序可以包括解析第一语法成分的编码位流、初始化第一语法成分的内容变量及译码引擎、以及二进制化(binarization),然后,针对每一个二进制译码,程序还包括获得一内容模型(content codel)以及二进制译码各语法成分,直到获得有意义的字码(codeword)配对,更进一步解释,译码系统200译码语法成分,而每一语法成分可以代表量子化系数、动作向量、和/或预测模式、或其它有关宏块(macroblock)的参数,用以表示影像或视讯的特殊图场(field)或帧(frame),每一个语法成分可以包含一系列的二进制符号或二进制值,而每一个二进制符号会被译码成0或1值,译码系统200根据输入二进制符号的发生机率控制输出位长度。
已知当某些符号(称为主要符号)比其它符号更容易发生时,CABAC编码器可提供高效率编码方法,这些主要符号可以较小位/符号比进行编码,编码器持续更新进入数据的频率统计数据,适当地调整编码演算的计算及内容模型,具有较高可能性的二进制符号称为高可能符号(most probablesymbol,MPS),而其它符号则为低可能符号(least probable symbol,LPS),二进制符号与其内容模型连结,每一内容模型对应于LPS机率以及一MPS值。
为了决定每一个二进制符号,译码系统200自行决定或接收一对应范围、补偿及内容模型,内容模型是根据符号种类和相邻图块(如目前宏块或属于前次解码的相邻宏块)决定的内容而从多个可能的环境模型中选择,内容辨识符(context identifier)可经由内容模型决定,从而得到MPS值以及用于译码程序的译码引擎的目前状态,范围则表示一个区间,每经过一次二进制译码就会缩小一次范围。
区间分为两个子范围,分别对应MPS值和LPS机率,将范围及已知内容模型所指定的LPS机率相乘可得LPS子范围,将范围减去LPS子范围则可得MPS子范围,补偿则是决定译码二进制值的标准,通常是从编码位流中取出前9位进行初始化,对于一已知的二进制符号译码及内容模型,如果补偿小于MPS子范围,则二进制值为MPS值,下一次译码所使用的范围便为MPS子范围,相反地,二进制值则为LPS,将MPS值的反值放在相关的内容模型中,同时下一个范围便设为LPS子范围,译码程序的结果为一连串的二进制值,将用于判断此串值是否符合有意义的字码。
概要说明译码系统200的运算与CABAC解码的关系,下列叙述提出于CABAC译码程序的内容中的译码系统200的各种组件,可将符合实际应用的各种变形列入考虑,本领域技术人员可知下列所使用的许多术语是出自H.264规格,为了简洁的故不再赘述,除非是有助于了解所述的不同程序和/或组件,才会再做进一步的说明。
图6A至图6F是说明译码系统200及相关组件的方块图,其中绘出的译码系统200具有单一CABAC单元530(于图6A至图6F,所使用的CABAC单元530可与译码系统200互换),因此于实施例中,译码系统200可译码单一位流,同样的原则可应用至具有多个CABAC单元的译码系统200,可同时译码多个(如两个)串流。简单地说,图6A是译码系统200的选择组件,图6B则为图6A选择组件加上其它组件的功能方块图,图6C则为说明译码系统200提供的串流缓冲器功能的方块图,图6D与图6F是说明译码系统200的内容存储器功能的方块图,而图6E是说明用于解码一宏块的例示机制的方块图,虽然下列叙述是有关宏块译码的内容,但是此原则可应用至各种图块译码。
请参阅图6A,译码系统200包含CABAC单元530,CABAC单元530具有CABAC逻辑模块660以及存储器模块650,于一实施例中,CABAC逻辑模块660包含三个模块,分别是CABAC单元530内的二进制化(BIND)模块620、取得内容(GCTX)模块622、以及二进制算术译码(BARD)引擎624,BARD引擎624还包含状态索引(pStateIdx)寄存器602、MPS值(valMPS)寄存器604、码长范围(codlRange)寄存器606、以及码长补偿(codlOffset)寄存器608,CABAC单元530的存储器模块650包括宏块相邻内容(mbNeighCtx)存储器610(亦称为内容存储器阵例(context memory array))、区域寄存器612、总寄存器614、以及移位寄存器(SREG)-串流缓冲器/直接存储器存取(DMA)引擎618(亦称为DMA引擎模块,将于图6C中做进一步的说明),另外还有未绘出的寄存器,于一实施例中,mbNeighCtx存储器610包含如图6D的阵列结构,之后会有更进一步的说明,存储器模块650还包含二进制字符串寄存器616。
CABAC单元530与执行单元420a的接口包括目标总线628、两个来源总线(SRC1 632和SRC2 630)、命令及线程信息总线634、以及延迟/重置总线636,目标总线628上的数据可以直接或间接(如经由中间闪存、寄存器、缓冲器、或存储器)传送至图形处理单元114内部或外部的视讯处理单元,目标总线628上的数据可以是微软的DX API格式或其它格式,这些数据包含系数、宏块参数、动作信息、和/或IPCM取样或是其它数据,CABAC单元530还包括由地址总线638和数据总线640组成的存储器接口,从地址总线638得到地址后,便可以藉由从数据总线640得到的数据进行位流数据的存取,于一实施例中,数据总线640上的数据可以包括未加密视讯流,其中包括各种讯号参数及其它数据与格式,于某些实施例中,可以使用加载-储存操作来存取位流数据。
在开始说明CABAC单元530的各组件之前,简单说明一下有关CABAC译码的执行单元420a的整个操作,通常,根据切片(slice)形式,驱动软件128(图1)准备CABAC着色器并将其加载执行单元420a,该CABAC着色器使用标准指令组加上BIND指令、GCTX指令、以及BARD指令,可以进行位流的译码,因为CABAC单元530使用的内容表(context table)可以根据切片种类改变,所以每一切片均要加载,于一实施例中,在发出其它指令前,CABAC着色器执行的第一个指令包含INT_CTX和INIT_ADE,这两个指令使CABAC单元530开始译码一CABAC位流,并将位流从串流解码点开始加载FIFO缓冲器,稍后将说明这两个指令。
关于解析位流,从存储器接口的数据总线640接收位流,然后由SREG串流缓冲器/DMA引擎618进行缓冲,切片数据解析阶段提供位流译码,位流(如NAL位流)包括一张或多张图片,将其切割成图档头(header)及许多切片(slice),一张切片通常包含一系列的宏块,于一实施例中,外部程序(即CABAC单元530外部)解析NAL位流、译码切片文件头、传送指向该切片数据(如切片开始处)的指针,硬件(加上软件)可以从图形解析H.264位流,不过,于一实施例中,CABAC编码仅出现于切片数据与宏块,通常,驱动软件128从切片数据处理位流,因为这是应用程序及API提供的功能,指向切片数据位置的指针传递还牵涉到切片数据的第一字节地址(如RBSPbyeAddress)和指出位流开始或标头位置(如sREGptr)的位补偿指针(如一个位或多个位),位流的初始化将于稍后解释,于某些实施例中,可以利用主处理器(如图1的中央处理单元126)处理外部程序,提供图片译码以及切片标头译码,与某些实施例中,因为译码系统200的可编程特性,可以于任何阶段进行译码。
请参阅图6C,其为CABAC单元530的SREG串流缓冲器/DMA引擎618的选择组件部分及其它组件的方块图,其包含操作数寄存器662及664,分别从总线632及630接收SRC1与SRC2值,再传递至寄存器666及668,其它组件则如有关图6A的说明,除非说明需要,为简洁之故不再赘述,SREG串流缓冲器/DMA引擎618包含内部位流缓冲器618b,于一实施例中可为BigEndian格式的32位寄存器及8个128位寄存器。驱动软件发出的初始化指令于开始时设定SREG串流缓冲器/DMA引擎618,一旦启动,便自动管理SREG串流缓冲器/DMA引擎618的内部缓冲器618b,SREG串流缓冲器/DMA引擎618保留待解析位的位置,于一实施例中,SREG串流缓冲器/DMA引擎618使用两个寄存器,一个快速32位触发器与一个较慢512或1024位存储器,位流会使用位,移位寄存器618a以位进行操作,而位流缓冲器618b以字节进行操作,可以节省能源。通常移位寄存器618a运算的指令会使用少许位(如1-3位),当移位寄存器618a使用超过一位的数据,数据(位片段)将从位流缓冲器618b传送给移位寄存器618a,然后缓冲器指针会减少传送的字节数量,当SREG串流缓冲器/DMA引擎618的DMA引擎检测到使用256位或更多位时,便从存储器提取256位填满位流缓冲器618b,如此CABAC单元530实行了一个简单的循环缓冲器(256位片段x4),以追踪位流缓冲器618b并进行填充,于某些实施例中可以使用单一缓冲器,不过一个循环缓冲器需要更复杂的指针计算来跟上存储器的速度。
利用初始化指令实现与内部缓冲器618b互动,称为INIT BSTR指令,于一实施例中是由驱动软件128发出INIT_BSTR指令以及其它之后说明的指令,如果已知位流位置的字节地址及位补偿,INIT_BSTR指令将数据加载内部位流缓冲器618b,并开始管理程序,每一次呼叫处理切片数据均会发出下列格式的指令:
INIT_BSTR offset,RBSPbyteAddress
这个指令用于将数据加载SREG串流缓冲器/DMA引擎618的内部缓冲器618b,SRC2寄存器664提供字节地址(RBSPbyteAddress),而SRC1寄存器662提供位补偿,如此,可以使用下列通用的指令格式:
INIT_BSTR SRC2,SRC1,
其中,这个指令中的SRC1以及SRC2及其它讯号是对应内部寄存器662及664内的值,但是不限于这些寄存器,于一实施例中,使用256位排列的存储器提取来存取位流数据,并将其写入缓冲器寄存器并传送至SREG串流缓冲器/DMA引擎618的32位移位寄存器618a,于一实施例中,在这些寄存器或缓冲器进行运算之前,位流缓冲器618b内的数据是以字节方式排列,此数据排列可藉由排列指令实施,亦称的为ABST指令,ABST指令会排列位流缓冲器618b内的数据,在译码过程中,排列位(如填充位)最后将被丢弃。
当移位寄存器618a使用数据,内部缓冲器618b便会填充数据,换句话说,SREG串流缓冲器/DMA引擎618的内部缓冲器618b类似以3为模(modulo)的循环缓冲器,并输入SREG串流缓冲器/DMA引擎618的32位寄存器618a,CABAC逻辑模块660可以使用READ指令从移位寄存器618a读取数据,READ指令的格式如下:
READ DST,SRC1,
其中DST对应于一输出或目标寄存器,于一实施例中,SRC1寄存器662包含不具正负号的整数值n,经过READ指令,从移位寄存器618a获得n位,当从32位寄存器618a消耗了256位的数据(如译码一个或多个语法成分),自动开始提取动作以获得另一个256位的数据,将其写入内部缓冲器618b的寄存器,接着进入移位寄存器618a攻下一循环使用。
于某些实施例中,如果对应于一符号译码的移位寄存器618a的数据已被使用了预定数量的位或字节,而内部缓冲器618b没有再接收到任何数据,则CABAC逻辑模块660可以经由延迟/重置总线636进行延迟,以便执行其它的线程(例如与CABAC译码程序无关的线程),像是顶点着色器操作。
使用SREG串流缓冲器/DMA引擎618的DMA引擎可以减少所需的缓冲器数量,以补偿存储器延迟(例如,于某些图形处理单元中,会到三百多周期),当使用了位流,可以请求流入排在后面的位流数据,如果位流数据太少使得位流缓冲器618b有向下溢位的风险(例如已知让讯号从CABAC单元530流至处理器管线的周期数),可传递延迟信号给处理器管线,暂停操作,等候数据到达位流缓冲器618b。
另外,SREG串流缓冲器/DMA引擎618原本便有处理错误位流的能力,举个例子,因为位流错误,有可能没有检测到切片结尾记号,这种检测错误可能会导致译码完全错误,并用到后来的图样或切片的位,SREG串流缓冲器/DMA引擎618记录使用的位数,如果使用的位数大于预设的阈值值(可针对每一切片改变),则结束处理程序并将除去的信号送到处理器(如主处理器),然后处理器执行编码尝试从错误中回复。
请同时参阅图6A与图6B,进一步说明CABAC单元530的功能,尤其是初始化译码引擎(即BARD引擎或模块624)及内容变量,在切片起始处,于解码对应于第一宏块的语法成分之前,初始化内容状态以及BARD模块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 662以及SRC2 664可以包含下列值:
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的值是用于初始化位流缓冲器618b内的一状态机(未绘出)。
虽然前文已讨论各种已知的图形与切片参数,另外提供一些关于CABAC单元530的参数,于一实施例中,cabac_init_idc的定义是针对未编码为I-picture(I)和切换I-picture(SI)的切片(I),换句话说,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。
CABAC单元530也可以使用INIT_CTX指令初始化区域寄存器612以及mbNeighCtx存储器610阵列结构或组件,如与暂存相邻宏块有关的寄存器,请参阅图6D,于一实施例中,mbNeighCtx存储器610位于图的上方,mbNeighCtx存储器610的宏块基准相邻内容存储器排列成一存储器阵列,以储存有关宏块列的数据,mbNeighCtx存储器610包含阵列元素mbNeighCtx[0,1,i-1,i,i+1,...119]601,每一个元素可储存一列120个宏块中的一个宏块(因HDTV为1920×1080像素),目前mbNeighCtx 603用于储存目前解码的宏块,而左侧mbNeighCtx 605用于储存现有解码的(左侧)宏块,另外,利用指标607a、607b和607c(在图6D中以箭头表示)指向寄存器603、605和阵列元素601,当译码目前的宏块时,译码的数据储存于目前mbNeighCtx 603,当已知CABAC解码的内容性质时,根据前次解码宏块时所搜集的信息来译码目前的宏块,亦即左侧宏块储存于左侧mbNeighCtx605并利用指标607b进行指向,而上方宏块储存于阵列元素[i]中并利用指标607c进行指向。
继续解释初始化指令,INIT_CTX指令用于初始化与目前宏块(如mbNeighCtx存储器610阵列的元素)相邻的宏块有关的上方及左侧指标607c及607b,举个例子,左侧指标607b可以设为0而上方指标可以设为1,另外,INIT_CTX指令还会更新总寄存器614。
关于初始化内容表,因应呼叫INIT_CTX,CABAC单元530建立一个或多个内容表,亦称为CTX_TABLE,于一实施例中,内容表可以是4x460x16位表(8位给m,8位给n,具正负号的值)或其它数据结构,内容表的每一个项目包含从pStateIdx寄存器602及valMPS寄存器604存取的pStateIdx值及valMPS值。
INIT_ADE指令起始化BARD模块624,亦称为译码引擎,于一实施例中,完成INIT_BTSR指令后呼叫INIT_ADE,于执行INIT_ADE指令之后,CABAC单元530建立两个寄存器,分别是codlRange寄存器606以及codlOffset寄存器608,伴随下列指令或数值:
codlRange=0x01FE以及
codlOffset=ZeroExtend(READ(#9),#16)
于一实施例中,这些变量可以是9位数值,关于codlOffset指令,从位流缓冲器618b读取9位,0延伸(zero-extended)则储存于16位codlOffset寄存器608中,某些实施例亦可使用其它数值。BARD模块624使用储存于寄存器606及608的数值,以决定要输出0或1,当二进制译码完成,这些值将进行更新。
除了初始化codlRange寄存器606以及codlOffset寄存器608,INIT_ADE操作同时初始化二进制字符串寄存器616,于一实施例中,二进制字符串寄存器616可以是32位寄存器,从BARD模块624接收每一输出位,当然亦可使用其它尺寸的寄存器。
当宏块编码成I_PCM数据,BARD模块624也会被初始化,已知I_PCM数据包含像素数据,根据H.264规格,并没有将转换或预测模型应用至原始视讯数据,举个例子,I_ PCM可应用至无损编码。
已说明与解析位流及初始化各种译码系统组件有关的架构及指令,下面将说明有关二进制化、取得模型信息及内容、以及根据模型及内容进行译码的程序,通常CABAC单元530用于取得解析语法成分(syntax element,SE)所有可能的二进制化,或是经由BIND模块620及BIND指令至少取得模型信息,CABAC单元530更经由GCTX模块622及GCTX指令得到已知语法成分的内容,并根据内容及模型信息,让BARD模块624及BARD指令实行运算译码,实际上,呼叫GCTX/BARD指令、输出一位给二进制字符串寄存器616直到发现配合已知语法成分的有意义字码等两步骤会构成一循环,亦即于一实施例中,每一次译码二进制值之后,提供对应的译码位给二进制字符串寄存器616,接着GCTX模块622读回二进制字符串寄存器的内容,直到发现配合的字码。
这里更详细解释使用单一CABAC单元530的译码系统架构,请再同时参阅图6A与图6B,驱动软件128发出的BIND指令会致能BIND模块620,于一实施例中,BIND指令具有下列格式:
BIND DST,#Imm16,SRC1,
其中,DST对应于DST寄存器652,#Imm16对应于16位目前数值,而SRC1对应输入寄存器SRC1662,BIND运算的输入包含语法成分(SE,包含16位目前数值Imm)以及内容区块种类(ctxBlockCat),语法成分可以包含任何符合H.264规格的语法成分种类(如MBTYpeInI、MBSkipFlagB、IntraChromaPredMode等等),呼叫BIND指令会使得驱动软件128从储存在存储器(如芯片上存储器或远程存储器)中的窗体(或其它数据结构)读取语法成分,并取得语法成分索引(SEIdx),该语法成分索引用于存取其它窗体或数据结构,以获得各宏块参数。
于一实施例中,DST寄存器652包含32位寄存器,具有下列格式:位0-8(ctxIdxOffset)、位16-18(maxBinIdxCtx)、位21-23(ctxBlockCat)、位24-29(ctxIdxBlockCatOffset)、以及位31(bypass flag),这些数值(如ctxIdxOffset、maxBinIndxCtx等等)会传送至GCTX模块622用作内容模型分析之用,在此实施例中,任何未定义的剩下位可以是0,根据语法成分索引与ctxBlockCat的配对结果,ctxIdx RlockOffset可从远程储存或储存于芯片上存储器的窗体或其它数据结构获得,表一说明一非限定实施例的窗体内容:
表一
codeNum(k) | Coded_block_pattern | |
Intra 4x4 | Inter | |
0 | 47 | 0 |
1 | 31 | 16 |
2 | 15 | 1 |
3 | 0 | 2 |
4 | 23 | 4 |
5 | 27 | 8 |
6 | 29 | 32 |
7 | 30 | 3 |
8 | 7 | 5 |
9 | 11 | 10 |
10 | 13 | 12 |
11 | 14 | 15 |
12 | 39 | 47 |
13 | 43 | 7 |
14 | 45 | 11 |
15 | 46 | 13 |
16 | 16 | 14 |
17 | 3 | 6 |
18 | 5 | 9 |
19 | 10 | 31 |
20 | 12 | 35 |
21 | 19 | 37 |
22 | 21 | 42 |
23 | 26 | 44 |
24 | 28 | 33 |
25 | 35 | 34 |
26 | 37 | 36 |
27 | 42 | 40 |
28 | 44 | 39 |
29 | 1 | 43 |
30 | 2 | 45 |
31 | 4 | 46 |
32 | 8 | 17 |
33 | 17 | 18 |
34 | 18 | 20 |
35 | 20 | 24 |
36 | 24 | 19 |
37 | 6 | 21 |
38 | 9 | 26 |
39 | 22 | 28 |
40 | 25 | 23 |
41 | 32 | 27 |
42 | 33 | 29 |
43 | 34 | 30 |
44 | 36 | 22 |
45 | 40 | 25 |
46 | 38 | 38 |
47 | 41 | 41 |
如果接收到未定义的ctxBlockCat,则CABAC单元530可以将未定义参数当成0,所以将ctxIdxBlockOffset当成0值。
呼叫BIND也会使得重置信号(Rst_Signal)从BIND模块620输出至BARD模块624,说明如下。
为了说明BIND模块620的各种输入与输出,这里提出至少一实施例说明BIND模块620的操作,呼叫BIND模块620,则BIND模块620取出语法成分,并且经由软件提供语法成分索引(SEIdx),利用语法成分索引,BIND模块620查找窗体以获得maxBinIdxCtx、ctxIdxOffset、以及bypassFlag的对应数值,这些查找值会暂时储存在DST寄存器652的预先定义位配置,另外,利用语法成分索引及ctxBlockCat,BIND模块620进行第二次窗体查找(如从远程存储器或芯片上存储器)以获得ctxIdxBlockOffset数值,第二次的查找值也是暂时储存在DST寄存器652中,因此决定值将用于建立DST寄存器652,作为32位数值输出目标。
针对某些语法成分,可利用其它的信息(语法成分与ctxBlockCat除外)开始H.264解码操作,举个例子,像是SigCoeffFlag以及lastSigCoeffFlag、储存在宏块邻近内容存储器610的阵列元素maxBinIdxCtx[1]里的值、以及输入ctxBlockCat值等宏块参数,均可用来决定宏块是图场编码或是帧编码,根据图形是图场编码或是帧编码,则SigCoeffFlag以及lastSigCoeffFlag会有不同的编码,于某些实施例中,即使是不同的语法成分,这些标志也使用同样的语法成分数目,然后利用mb_field_decoding_flag(mbNeighCtx[1]字段)来区分。
除了上述所列有关BIND模块620的功能,于图6B中,BIND模块620还与binIdx寄存器654、复用器单元656和/或转递寄存器666和/或668(在图6C中为F1)连接,复用器单元656会根据各输入提供输出SRC1(如寄存器SRC1内的值)给GCTX模块622。
至于标示为F1的转递寄存器,当BIND(或GCTX)指令产生结果,便会将结果写入目标寄存器(如DST寄存器652)和/或标示为F1的转递寄存器666及668,一个指令及对应的模块(如GCTX模块622或BARD模块624)是否使用转递寄存器666及668会于指令中用转递标志表示,代表转递寄存器666及668的符号有F1 666(使用转递来源i的值,于一实施例中可以指令中的位26表示)以及F2 668(使用转递来源2的值,于一实施例中可以指令中的位27表示),数据会分别转递至GCTX模块622以及BARD模块624,说明如下。
前面已说明BIND模块620及相关程序,这里将说明关于GCTX模块622及GCTX指令如何取得已知模型的内容及二进制索引,简单地说,GCTX模块622的输入包含maxBinIdxCtx、binIdx、以及CtxIdxOffset,GCTX模块622使用CtxIdxOffset及binIdx值来计算CtxIdx的值(为输出,代表内容索引)。
GCTX指令的范例格式如下:
GCTXDST,SRC2,SRC1,
其中SRC1对应于复用器单元656的输出值并储存于寄存器SRC1 662,而SRC2对应于DST寄存器652的输出值并储存于寄存器SRC2 664,而DST对应于目标寄存器,于一实施例中,各寄存器具有下列数值:
SRC1[7:0]=binIdx;如果目前语法成分包含一codedBlockPattern,则SRC1的值(从复用器单元656输出,并作为GCTX模块622的输入)可以是binIdx寄存器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包括GCTX模块622的输出并具有下列值:
DST[15:00]=ctxIdx
DST[23:16]=binIdx
DST[27:24]=mbPartIdx
DST[29:28]=mbPartitionMode
DST[30]=L0
GCTX模块622可以与转递寄存器互相作用,因此使用转递寄存器的指令格式可以是GCTX.F1.F2,其中F1及F2分别代表使用转递寄存器666及668,亦即,在指令编码中有两位(F1及F2),如果缺少一个或两个转递标志,则代表没有使用转递寄存器,如果有设定这些位(例如设成1),则代表使用转递寄存器的值(内部产生值),否则,就使用来源寄存器的值,因此,这个转递寄存器的特征在于当最早的指令发出时,将提供编译器提示,如果没有使用转递,则指令在来源寄存器可能会遇到写后读(read-after-write)风险。
对于GCTX指令,如果设定了重置信号Rst_Signal,则SRC1的值为0,如果(F1&rst_signal),则SRC1的值会是GCTX模块622内的值加1,不然SRC1会是从执行单元寄存器得到的binIdx值,BIND模块620的输出可以作为SRC2的值,供GCTX及BARD指令使用,此时要等到BARD指令使用转递寄存器后才会发出BIND指令,更进一步解释,Rst_Signal以及F1转递讯号将结合成一单一讯号{F1,reset}(2位讯号),表示输入GCTX模块622的SRC1值是包括binIdx值或转递值,提供Rst_Signal的另一个作用是清空并重置二进制字符串616,并将binIdx寄存器654重置为0。
继续讨论GCTX模块622以及取得内容信息,于一实施例中,表二及表三列出的信息分别对应于mbNeighCtx存储器610及目前mbNeighCtx寄存器603,如前所述,目前mbNeighCtx寄存器603包含目前宏块的解码输出结果,当目前宏块处理结束时,发出CWRITE指令,将目前mbNeighCtx寄存器603的信息复制到mbNeighCtx存储器610阵列的对应位置,这个复制的信息稍后会作为上方邻近值。
表二
参数 | 位数(位) | |
transform_size_8x8_flag | 1 | 0 |
mb_field_decode_flag | 1 | 1 |
mb_skip_flag | 1 | 2 |
Intra_chroma_pred_mode | 2 | 4:3 |
mb_type | 3 | 7:5 |
codedBlockPatternLuma | 4 | 11:8 |
codedBlockPatternChroma | 2 | 13:12 |
codedFlagY | 1 | 14 |
codedFlagCb | 1 | 15 |
codedFlagCr | 1 | 16 |
codedFlagTrans | 8 | 24:17 |
refIdx | 8 | 32:25 |
predMode | 4 | 36:33 |
表三
参数 | 位数(位) | |
transform_size_8x8_flag | 1 | 0 |
mb_field_decode_flag | 1 | 1 |
mb_skip_flag | 1 | 2 |
Intra_chroma_pred_mode | 2 | 4:3 |
mbQpDeltaGT0 | 1 | 88 |
codedBlockPatternLuma | 4 | 11:8 |
codedBlockPatternChroma | 2 | 13:12 |
odedFlagY | 1 | 14 |
codedFlagCb | 1 | 15 |
codedFlagCr | 1 | 16 |
codedFlagTrans | 24 | 87:64 |
refIdx | 16 | 52:37 |
predMode | 8 | 60:53 |
mb_type | 3 | 63:61 |
于一实施例中,codedFlagTrans分成三段,例如前4位与ctxBlockCat为0或1时有关,较高4位则与ctxBlockCat为3或4有关,较高4位还分成两个部分,较低2位用于iCbCr=0时,而另2位则用于iCbCr=1时,预测模式(predMode)有三种选项:predL0=0、predL1=、NiPred=2。
图6E显示表二与表三中的refIdx的一结构实施例,refIdx为重建图形的用的参考图形列表索引,这个结构对存储器及逻辑电路提供了最佳的方式,如图所示,refIdx结构包括第一列的宏块609、宏块分割区(partition)611(图中有4个)、L0/L1值613、以及每一个L0和L1值都有对应的储存位值Gt0(大于0)615和Gt1(大于1)617,虽然需要的是底部列的宏块,通常需要存取的是上方相邻宏块609,宏块被切成4x4方块,形成4个宏块分割区611,对于每一个分割区611,确定L0/L1613的值,但不是真实值,即判断L0及L1的值是1或大于1即可,于一实施例中,藉由储存2位Gt0 615和Gt1 617完成判断,这2位用于计算语法成分(refIdx)。
更进一步解释refIdx结构的好处,便是进行了两次最佳化,如果进行一次最佳化,只有保留2位(虽然参考值通常比较大),CABAC单元530译码refIdx不需要其它位,译码完整值并保留在执行单元寄存器或存储器(如L2闪存408)中,第二次最佳化则只保留4个元素(2个左侧及2个上方),这4个元素再次利用,并由CWRITE指令将最终值写入相邻元素,因为目前mbNeighCtx寄存器603只需要保留16位,左侧mbNeighCtx寄存器605以及阵列610的上方mbNeighCtx元素601只需要8位,所以可节省存储器,同时因为不再完整地计算解码参考值,改以较少位的布尔(Boolean)运算代替,亦节省了计算逻辑电路。
表四显示包含的mb_type:
表四
Mb_type | 名称 |
4’b000 | SI |
4’b001 | I_4x4 or I_NxN |
4’b010 | I_16x16 |
4’b011 | I_PCM |
4’b100 | P 8x8 |
4’b101 | B 8x8 |
4’b110 | B_Direct_16x16 |
4’b111 | Others |
另外也可使用图6B没有画出或讨论的寄存器,像是mbPerLine(8位,不具正负号)、mb_qp_delta(8位,具有正负号)、以及mbAddrCurr(16位,目前宏块地址),对于AddrCurr,提供1920x1080阵列,虽然只需要13位,但某些实施例可使用16位以增进16位计算效能。
总寄存器614也储存有从上述寄存器得到的值(如mbPerline、mbAddrCurr、以及mb_qp_delta),亦即这些储存在总寄存器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))I SDATA
利用INIT_CTX指令也可以将至少某些字段(如NUT(NAL_UNIT_TYPE)、C(constrained_intra_pred_flag)、MBAFF_FLAG、mbPerLine、以及mbAddrCurr)的值写入/初始化总寄存器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译码程序中,根据相邻的宏块(例如左侧及上方)预测和/或模式分析语法值,下面介绍几种方法,描述CABAC单元530如何决定左侧及上方相邻宏块,以及决定这些宏块是否存在,符号译码阶段利用mbPerLine参数,如前所述,译码程序使用邻近值(如上方或左侧的宏块或区块),于一实施例中,BARD模块624利用目前宏块号码及一列宏块数量(mbPerLine)计算下列式子,以计算出上方宏块地址并确定左侧及上方宏块是否存在。
举个例子,要判断相邻宏块(如左侧宏块)是否存在(有效),必须进行一运算(如mbCurrAddr%mbPerLine),检查结果是否为0,于一实施例中,进行下列算式:
a=(mbCurrAddr%mbPerLine)
mbCurrAddr代表对应于待译码二进制符号的目前宏块位置,mbPerLine代表每一列的宏块数量,上面的计算用到一除法、一乘法、以及一减法。
再进一步说明BARD模块624的译码机制,请参阅图6F,其显示待译码的图形(16x8宏块,因此mbPerLine=16),如果译码宏块35(mbCurrent为35,宏块36还未完全译码),需要前次译码的上方宏块19及左侧宏块34的数据,上方宏块的信息可从mbNeighCtx[i]获得,其中i=mbCurrent%mbPerLine,在这个例子中,i=35%16=3,当目前宏块译码完毕,利用CWRITE指令更新左侧mbNeighCtx寄存器605及阵列中的mbNeighCtx[i]601。
于另一例子中,考虑下式:
mbCurrAddr∈[0:max MB-1]
其中,maxMB是8192,而mbPerLine=120,于一实施例中,可利用乘法及由储存于芯片上存储器的窗体(如120x11位表)查找的(1/mbPerLine)进行除法,如果mbCurrentAddr是13位,则使用13x11乘法器,于一实施例中,将乘法运算的结果取整数,储存较上方的13位,进行13x7的乘法运算,储存较低的13位,最后进行13位的减法运算以决定“a”,整个运算程序需要2个周期,可以储存这个结果给其它运算使用,每当mbCurrAddr改变就计算一次。
于某些实施例中不进行模数(modulo)运算,改以执行单元(如执行单元420a,420b等等)内的着色器逻辑电路提供第一个mbAddrCurr值,将其指派给第一切片的第一行,举个例子,这个着色器逻辑电路可以进行下列计算:
mbAddrCurr=absoluteMbAddrCurr-nxmbPerLine
因为H.264弹性宏块顺序(flexible macroblock ordering,FMO)模式有些复杂的相邻结构,为了处理这些模式,要新增译码系统200的着色器以计算左侧/上方可用性,并加载CABAC单元530的一个或多个寄存器,如果不加载(off-loading)CABAC单元530,当致能所有H.264模式支持符号译码,可降低硬件的复杂性。
CWRITE指令从目前mbNeighCtx 603的适当字段复制到上方mbNeighCtx[]601以及左侧mbNeighCtx[](如阵列610中的左侧宏块),根据mBaffFrameFlag(MBAFF)是否设定以及目前与现有宏块的译码方式是图场译码或帧译码等因素,将数据写入特定的上方mbNeighCtx[]601以及左侧mbNeighCtx[],当(mbAddrCurr%mbPerLine==0),左侧mbNeighCtxLeft 605则标记为不存在(如初始化成0),可以利用CWRITE指令「移动」mbNeighCtx存储器610、区域寄存器612、以及总寄存器614的内容,举个例子,CWRITE指令移动mbNeighCtx存储器610的相关内容到第i个宏块的左侧及上方区块(如mbNeighCtx[i]或目前宏块),并清空mbNeighCtx寄存器603,如前所述,与mbNeighCtx存储器相关的两个指针是左侧指标607b及上方指针607c,CWRITE指令之后,上方索引增加1,而目前宏块的内容则移至阵列的上方位置及左侧位置,上述系统可以减少存储器阵列的读取/写入端口的数量至一个读取/写入端口。
利用INSERT指令可以更新mbNeighCtx存储器610、区域寄存器612、以及总寄存器614的内容,举个例子,使用INSERT指令(如INSERT$mbNeighCtxCurrent_1,#Imm10,SRC1)可以写入目前宏块,之后的运算不会影响左侧指标607b及上方指标607c(只写入目前位置)。
INSERT指令以及BARD模块624的更新将写入mbNeighCtx存储器610的目前mbNeighCtx阵列元素601,左侧指针607b指向存储器610的元素,这个元素与相邻的阵列元素(相邻于mbNeighCtx 601,例如mbNeighCtx[i-1])相同。
上面说明了有关取得内容及模型信息,接下来说明BARD模块624以及如何根据内容及模型信息进行算述译码,BARD模块624受BARD指令操作,BARD指令的格式可为:
BARD DST,SRC2,SRC1,
提供的二进制算术译码操作中,每一个二进制译码形成单一位输出,输入参数如下:
SRC1=binIdx/ctxIdx,这是GCTX模块622的输出
SRC2=bypassFlag,这是BIND模块620的输出
如果使用转递寄存器,格式可为BARD.F1.F2,其中F1及F2代表转递寄存器666及668,如果缺少一个或两个转递标志,这表示没有使用对应的转递寄存器,如前所述,BARD模块624会接收RST_Signal,而且在接收到讯号后,会保留RST_Signal等到第一次呼叫BARD指令,然后清空讯号。
运算时,BARD模块624从GCTX模块622接收内容索引(ctxIdx)值以及指向编码位流的目前位解析位置的指针(binIdx),BARD模块624使用从codlOffset寄存器608以及codlRange寄存器606接收到的补偿及范围值,以记录译码引擎的目前区间(补偿、补偿+范围)状态,BARD模块624使用内容索引来存取内容表(CTX_TABLE),依次使用内容表存取目前的可能性状态pStateIdx及MPS值,pStateIdx用于读取(从储存在远程存储器或芯片上存储器的窗体)LPS子范围值、次一MPS值、以及次一LPS机率。
根据MPS值的状态、次一范围及可能性信息,BARD模块624计算目前二进制符号的MPS值,BARD模块624输出一个二进制符号(位或二进制数值,例如b0、b1...bn)给二进制字符串寄存器616,然后针对下一个二进制值的相同或不同内容重复这个程序,路径如图中所示的从二进制字符串616寄存器到GCTX模块622的反馈接线658,根据MPS值的选择,BARD模块624亦更新补偿、范围值、以及次一二进制数值的可能性状态,另外,BARD模块624将目前MPS及可能性状态写入内容表,供后来的内容使用。
关于转递寄存器666及668的使用,如果利用信号通知转递,可以延迟或不延迟指令,举个例子,从BIND模块620转递至GCTX模块622没有延迟,所以在下一周期即发出GCTX指令;而从GCTX模块622转递至BARD模块624会用掉4个周期,如果在周期j发出GCTX指令,则可能在周期(j+5)发出BARD指令,中间没有指令的空位则填入4个NOP;从BIND模块620转递至BARD模块624也没有延迟;从BARD模块624转递至GCTX模块622的话,如果在周期j发出BARD指令,则在周期(j+5)发出GCTX指令;如果保留第二个二进制字符串而用切换的方式,从BARD模块624转递至BIND模块620也没有延迟,如果要保留第二个二进制字符串,可能发出BARD至BARD指令,成为没有延迟的绕走(bypass)方式。
应强调的是,本发明所举的上所实施例或「较佳」实施例仅为可能的施行范例,仅用以清楚说明本发明的原理,即便对上述实施例施以变化和修饰,然皆不脱此中所述系统及方法的精神和原则,所有这些修饰及变化应涵括于本发明的范围内,受所附权利要求保护。
Claims (24)
1.一译码系统,其包含:
一软件可编程核心处理单元,其具有执行一着色器的一内容适应性二进制算术编码CABAC单元,该着色器施行一视讯流的CABAC译码并提供一译码数据输出,
其中该CABAC译码使用硬件配合软件的方式施行。
2.如权利要求1所述的系统,其中该CABAC译码是以图形处理单元编程的内容配合施行于一图形处理单元数据路径内的硬件所完成。
3.如权利要求1所述的系统,其中该CABAC单元还包含一二进制化BIND模块,用以接收包含第一语法成分及一内容区块类型的第一信息,同时因应该BIND模块执行该着色器的一第一指令,根据该第一信息提供对应于一个或多个宏块参数的第二信息,供内容模型分析之用。
4.如权利要求3所述的系统,其中该CABAC单元还包含一取得内容GCTX模块,用以接收该第二信息,并因应该GCTX模块执行该着色器的一第二指令,产生一二进制值及内容识别符,供二进制译码之用。
5.如权利要求4所述的系统,其中该内容辨识符对应于一最高可能符号值MPS值或一最低可能符号LPS机率。
6.如权利要求4所述的系统,其中该CABAC单元还包含还一二进制算术译码BARD模块,用以接收该二进制值及内容辨识符、一补偿、以及一范围,并因应该BARD模块执行该着色器的一第三指令,译码一二进制符号。
7.如权利要求6所述的系统,其中该CABAC单元还包含一二进制字符串寄存器,以接收该译码的二进制符号,并提供更新内容信息。
8.如权利要求7所述的系统,其中该二进制字符串寄存器用于接收代表一译码语法成分的多个二进制符号。
9.如权利要求1所述的系统,其中该CABAC单元根据一指令内的位,判断储存在一内部寄存器之前一次运算结果是否可用,或是一来源操作数中的数据是否可供一个或多个模块于目前运算中使用。
10.如权利要求1所述的系统,其中该CABAC单元还包含一直接存储器存取DMA引擎模块,其内包含一位流缓冲器以及一DMA引擎,该DMA引擎模块因应该着色器针对每一切片执行的一第四指令,当已使用该位流内的预定数量的位,自动重复填入该预定数量的位,该位对应于该视讯流。
11.如权利要求10所述的系统,其中该CABAC单元因应该位流缓冲器内有向下溢位的可能,延迟该DMA引擎模块。
12.如权利要求10所述的系统,其中该DMA引擎用于记录该位流缓冲器内的已使用位数目,并因应检测到该位数目大于一预定值,暂停该位流缓冲器运算,并将控制权转移至一主处理器。
13.如权利要求1所述的系统,还包含一内容存储器阵列,供内容基础译码及对应寄存器使用,其中内容存储器阵列包含储存目前及相邻宏块的元素,因应一GCTX模块执行该着色器的一第五指令,该GCTX模块根据布尔逻辑运算写入该内容存储器阵列,其中包括数值从该寄存器移转至该内容存储器阵列。
14.一种解码方法,其包括步骤:
将一着色器加载具有一CABAC单元的一可编程核心处理单元中;
执行该CABAC单元上的该着色器,以CABAC译码一视讯流;以及
提供一译码数据输出。
15.如权利要求14所述的方法,其中该CABAC译码是以图形处理单元编程的内容配合施行于一图形处理单元数据路径内的硬件所完成。
16.如权利要求14所述的方法,还包括步骤:
BIND模块接收包含一语法成分及一内容区块类型的第一信息;以及
因应该BIND模块执行该着色器的一第一指令,根据该第一信息提供对应于一个或多个宏块参数的第二信息,供内容模型分析之用。
17.如权利要求16所述的方法,还包括步骤:
GCTX模块接收该第二信息;以及
因应该GCTX模块执行该着色器的一第二指令,产生一二进制值及内容识别符,供二进制译码之用,其中该内容辨识符对应于一高可能符号MPS值或一低可能号LPS机率。
18.如权利要求17所述的方法,还包括步骤:
一BARD模块接收该二进制值及内容辨识符、一补偿、以及一范围;以及
因应该BARD模块执行该着色器的一第三指令,译码一个或多个二进制符号。
19.如权利要求18所述的方法,还包括步骤:
一二进制字符串寄存器接收该一个或多个译码的二进制符号,该一个或多个译码的二进制符号代表一译码的语法成分;以及
提供更新内容信息。
20.如权利要求14所述的方法,还包括步骤:
利用一指令内的位,判断储存在一内部寄存器之前一次运算结果是否可用,或是一来源操作数中的数据是否可供一个或多个模块于目前运算中使用。
21.如权利要求14所述的方法,还包括步骤:
当译码程序已使用该位流内的预定数量的位,自动重复填入该预定数量的位,该位对应于该视讯流。
22.如权利要求14所述的方法,还包括步骤:
因应该位流缓冲器内有向下溢位的可能,延迟该DMA引擎模块。
23.如权利要求21所述的方法,还包括步骤:
记录该位流缓冲器内的以使用位数目,并因应检测到该位数目大于一预定值,暂停该位流缓冲器运算,并将控制权转移至一主处理器。
24.如权利要求14所述的方法,还包括步骤:
根据布尔逻辑运算写入用于CABAC译码的一内容存储器阵列,其中包括数值从作为该内容存储器的寄存器移转至该内容存储器阵列。
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 |
---|---|
CN101072350A true CN101072350A (zh) | 2007-11-14 |
CN101072350B CN101072350B (zh) | 2012-12-12 |
Family
ID=38899303
Family Applications (4)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710126453 Pending CN101087411A (zh) | 2006-06-08 | 2007-06-08 | 译码方法 |
CN 200710110297 Active CN101072350B (zh) | 2006-06-08 | 2007-06-08 | 译码系统及其译码方法 |
CN 200710126452 Active CN101072353B (zh) | 2006-06-08 | 2007-06-08 | 译码系统以及图形处理单元 |
CN 200710110295 Active CN101072349B (zh) | 2006-06-08 | 2007-06-08 | 内容适应性可变长度编码的解码系统与方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710126453 Pending CN101087411A (zh) | 2006-06-08 | 2007-06-08 | 译码方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200710126452 Active CN101072353B (zh) | 2006-06-08 | 2007-06-08 | 译码系统以及图形处理单元 |
CN 200710110295 Active CN101072349B (zh) | 2006-06-08 | 2007-06-08 | 内容适应性可变长度编码的解码系统与方法 |
Country Status (2)
Country | Link |
---|---|
CN (4) | CN101087411A (zh) |
TW (4) | TWI344795B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106851275A (zh) * | 2012-05-29 | 2017-06-13 | 寰发股份有限公司 | 视频数据的自适应采样点偏移的处理装置及方法 |
CN106921859A (zh) * | 2017-05-05 | 2017-07-04 | 郑州云海信息技术有限公司 | 一种基于fpga的cabac熵编码方法与装置 |
CN114816434A (zh) * | 2022-06-28 | 2022-07-29 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Families Citing this family (36)
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 | 晨星软件研发(深圳)有限公司 | 布林熵解码器及影像播放系统的布林熵解码方法 |
KR20130050904A (ko) | 2011-11-08 | 2013-05-16 | 삼성전자주식회사 | 비디오의 산술 부호화 방법 및 그 장치, 비디오의 산술 복호화 방법 및 그 장치 |
US20130307860A1 (en) * | 2012-03-30 | 2013-11-21 | Mostafa Hagog | Preempting Fixed Function Media Devices |
US9451258B2 (en) | 2012-04-03 | 2016-09-20 | Qualcomm Incorporated | Chroma slice-level QP offset and deblocking |
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 |
JP6379107B2 (ja) * | 2013-05-21 | 2018-08-22 | 株式会社スクウェア・エニックス・ホールディングス | 情報処理装置並びにその制御方法、及びプログラム |
CN107037984B (zh) * | 2013-12-27 | 2019-10-18 | 威盛电子股份有限公司 | 数据储存装置及其数据写入方法 |
US9455743B2 (en) * | 2014-05-27 | 2016-09-27 | Qualcomm Incorporated | Dedicated arithmetic encoding instruction |
TW201626218A (zh) | 2014-09-16 | 2016-07-16 | 輝達公司 | 傳遞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 |
CN107277505B (zh) * | 2017-05-19 | 2020-06-16 | 北京大学 | 基于软硬件分区的avs-2视频解码器装置 |
CN107242882A (zh) * | 2017-06-05 | 2017-10-13 | 上海瓴舸网络科技有限公司 | 一种b超显示辅助设备及其控制方法 |
CN110710219B (zh) * | 2017-12-08 | 2022-02-11 | 谷歌有限责任公司 | 用于系数代码化的上下文推导的方法和设备 |
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 | 武汉新芯集成电路制造有限公司 | 单调计数器及其计数方法 |
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 |
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 |
Family Cites Families (4)
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 |
EP1599049A3 (en) * | 2004-05-21 | 2008-04-02 | Broadcom Advanced Compression Group, LLC | Multistandard video decoder |
KR100612015B1 (ko) * | 2004-07-22 | 2006-08-11 | 삼성전자주식회사 | 컨텍스트 적응형 이진 산술 부호화 방법 및 그 장치 |
US7800620B2 (en) * | 2004-11-05 | 2010-09-21 | Microsoft Corporation | Optimizing automated shader program construction |
-
2007
- 2007-06-08 CN CN 200710126453 patent/CN101087411A/zh active Pending
- 2007-06-08 CN CN 200710110297 patent/CN101072350B/zh active Active
- 2007-06-08 TW TW96120899A patent/TWI344795B/zh active
- 2007-06-08 TW TW96120728A patent/TWI354239B/zh active
- 2007-06-08 TW TW096120896A patent/TWI348653B/zh active
- 2007-06-08 CN CN 200710126452 patent/CN101072353B/zh active Active
- 2007-06-08 TW TW96120726A patent/TWI428850B/zh active
- 2007-06-08 CN CN 200710110295 patent/CN101072349B/zh active Active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106851275A (zh) * | 2012-05-29 | 2017-06-13 | 寰发股份有限公司 | 视频数据的自适应采样点偏移的处理装置及方法 |
CN106921859A (zh) * | 2017-05-05 | 2017-07-04 | 郑州云海信息技术有限公司 | 一种基于fpga的cabac熵编码方法与装置 |
CN114816434A (zh) * | 2022-06-28 | 2022-07-29 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
CN114816434B (zh) * | 2022-06-28 | 2022-10-04 | 之江实验室 | 一种面向可编程交换的硬件解析器及解析器实现方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101072350B (zh) | 2012-12-12 |
CN101087411A (zh) | 2007-12-12 |
CN101072353B (zh) | 2013-02-20 |
TWI344795B (en) | 2011-07-01 |
CN101072349B (zh) | 2012-10-10 |
TWI348653B (en) | 2011-09-11 |
TW200809689A (en) | 2008-02-16 |
TW200813884A (en) | 2008-03-16 |
TWI428850B (zh) | 2014-03-01 |
TW200821982A (en) | 2008-05-16 |
TW200803526A (en) | 2008-01-01 |
CN101072349A (zh) | 2007-11-14 |
TWI354239B (en) | 2011-12-11 |
CN101072353A (zh) | 2007-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101072350B (zh) | 译码系统及其译码方法 | |
US7656326B2 (en) | Decoding of context adaptive binary arithmetic codes in computational core of programmable graphics processing unit | |
US7626518B2 (en) | Decoding systems and methods in computational core of programmable graphics processing unit | |
US7626521B2 (en) | Decoding control of computational core of programmable graphics processing unit | |
US7884743B2 (en) | Arithmetic decoding device | |
US7623049B2 (en) | Decoding of context adaptive variable length codes in computational core of programmable graphics processing unit | |
CN1312938C (zh) | 用于解码可变长度编码位流的方法和设备 | |
US9392292B2 (en) | Parallel encoding of bypass binary symbols in CABAC encoder | |
CN101753148B (zh) | 算术解码设备 | |
US7710296B2 (en) | N-bin arithmetic coding for context adaptive binary arithmetic coding | |
CN103918273B (zh) | 确定用于变换系数的二进制码字的方法 | |
US9351003B2 (en) | Context re-mapping in CABAC encoder | |
CN103931197B (zh) | 确定用于变换系数的二进制码字的方法 | |
US20080267293A1 (en) | Video Encoder Software Architecture for VLIW Cores | |
CN103765384A (zh) | 数据处理系统和在数据处理系统中进行任务调度的方法 | |
WO2010129684A1 (en) | Execution units for context adaptive binary arithmetic coding (cabac) | |
CN101836454A (zh) | 对有序熵切片执行平行cabac码处理的方法及装置 | |
CN104604235A (zh) | 用于视频处理的发送装置及其方法 | |
CN101951516A (zh) | 基于h.264/avc中cabac的并行编码实现电路及编码方法 | |
CN102088603A (zh) | 用于视频编码器的熵编码器及其实现方法 | |
CN101729893B (zh) | 基于软硬件协同处理的mpeg多格式兼容解码方法及其装置 | |
CN103227924A (zh) | 一种算术编码器及编码方法 | |
CN101466036A (zh) | 基于avs的运动矢量预测流水并行设计方法 | |
CN1320236A (zh) | 带算术逻辑单元和堆栈的数据处理器 | |
CN101090503B (zh) | 熵编码控制方法及熵编码电路 |
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 |