起始码检测器
技术领域
本发明属于图象处理技术领域,涉及图象传送接收端的一种图象解压缩技术,特别是关于一种起始码检测方法和装置
背景技术
本发明旨在改进解压缩方法和装置,它用于对按多种不同方式的输入信号进行解压缩和/或解码。为下文说明所选定的实施例涉及多种编码图象标准的解码,特别是此实施方式涉及称为JPEG、MPEG和H.261中任何一种人所熟知的标准的解码。
本发明的串行流水线处理系统包含单个双线(two-wire)总线,以控制令牌和数据令牌的形式,传送独有和专用的交互接口令牌到许多自适应解压缩电路及类似电路,后者形成一可重新配置的流水线处理器。
美国专利No.5,216,724中描述了一种现有技术系统。此装置包含多个计算模块,在一个优选实施方式中总共有4个并行耦合的计算模块。每一个这样的计算模块中有处理器,双端口存贮器,暂时(scratch-pad)存贮器及一个仲裁机构。第一总线与计算模块和主处理器耦合。设备包括一个共享存贮器,此存贮器与主处理器耦合,并通过第二总线耦合到计算模块。
美国专利No.4,785,349公开了一种包括大量流水线级的完整流水线。每一流水线级包括一组输入数据锁存器,其后是一个组合逻辑电路,此电路执行流水线级特定的逻辑操作。数据锁存器与触发信号同时被提供,触发信号是由与那一级相联系的数据传送控制电路产生的。数据传送控制电路被相互连接以形成一条链,发送和响应信号线路通过此链控制连续流水线级之间的握手式数据传送。此外,通常在每级中提供一个解码器,以选择将要在本级运算对象上完成的操作。还可以在前一级中布置一解码器,以预解码复杂的解码处理,并缓和逻辑电路中的临界路径问题。流水线的伸缩性消除了任何集中化控制,因为子模块间的所有互相配合由一完全局部化的决定来确定,此外,每一子模块可以在同一时间自主完成数据缓冲和自定时的数据传送控制。最后,为增加流水线的伸缩性,在已使用的级之间穿插了空级,以保证级之间的数据传送是可靠的。
美国专利No.5,278,646公布了一种经改进的解码技术,其中,每个子块中包括的系数个数都是可选择的,且位于每一编码视频序列起始处的比特串中都插入了一个码,此码指示每一层中系数的数目。通过为每个沿连续扫描选定的系数数目的标度(scale)来形成一个子块,这种技术使最高分辨率层中的零系数原始游程保持完整。通过在每个标度中填入适当数量的零与/或从每个标度中丢弃多余的系数,得到正方形排序的子块。再对这些子块应用离散余弦逆变换,就可以以标准方式解码。这种技术进一步改进了解码效率,因为它允许块结束的隐信号去区分离块,使得在大多数情况下无需解码块结束的显像信号。
美国专利No.4,903,018公布了一种用于压缩和扩展结构上相关的多个数据序列的处理方法和数据处理系统。处理方法对数据集是特殊的,在数据中进行了结构分析,以确定一个数据序列预定数目的连续数据元素所共有的特征。作为数据单元的替代,一个码被使用,此码在扩展过程中被再次解码。公共特性是通过分析在大量数据序列中具有相同顺序号的数据单元而获得的。在扩展过程中,通过解码得来的数据单元被以数据系列排列,这种排列是基于这些数据单元的序号的。用于执行处理的数据处理系统包括一个存贮矩阵(26)和一个指针存贮器(28),此指针存贮器在一分类行序列中具有存贮矩阵(26)的行地址。
美国专利No.4,334,246公布了一种电路和方法,它用于为了传送或存贮而在先前压缩之后对视频解压缩。电路假设由光栅输入扫描器产生的原始视频由一双线单测预测器操作,用运行长度编码方式编码成4、8或12位的码字,并被打包成16位数据字。然后,所描述的这个解压缩器通过连结16位数据字并然后分别连接各码字来对数据解包,将这些码字转换成一些全为零的4位的半字节和一个包含有一个或多个组成解码数据的位的终止半字节,检查前一扫描行的真实视频和本行的前一视频位以产生解预测器位,并对解码数据和解预测器位进行比较,以产生最后的真实视频。
美国专利No.5,060,242公布了一种图象信号处理系统,DPCM对信号编码,然后Huffman和游程长度对信号编码,以产生可变长度的码字,这些码字然后被无空隙地紧密打包,以便进行有效传送而不丢失任何数据。紧密打包的装置具有一桶形移位器,且其移位模数由一接收码字长度信息的累加器控制。一个或门与移位器相连,而一个寄存器被连接到门上。用于处理一个被紧密打包且去相关的数字信号的装置具有一个解包用的桶形移位器和累加器,一个Huffman和游程长度解码器以及一个反向DCPM解码器。
美国专利第No.5,168,375公布了一种方法,用于处理一场图象数据样本,以提供抽取、内插的一种或多种功能,且锐化是通过使用一个队列变换处理器完成,如JPEG压缩系统所使用的那种。在抽取和内插处理中,数据采样块都被离散偶余弦变换(DECT)变形,经过此变换后,频率的项数被改变。在抽取的情况里,频率项数被减小,然后进行逆向变换,以产生代表原始数据块的采样点的缩小矩阵。在内插的情况里,零值的附加频率成分被插入频率成分排列,然后逆向变换产生一个扩大了的数据采样集,而频谱带宽不增加。在锐化情况里,提供了一种逆向变换,产生了处理过的数据采样块集;锐化是由频域数据变换和频域滤波核相乘的卷积或滤波操作完成的。这些块被重叠,随后保留指定的样本,并将多余样本从重叠区域中丢弃。核的空间表示式通过减少其分量数目而被改变,以成为线性相位滤波器,并被装入零以便与数据块的采样数相等;此后将形成对已填充的核矩阵的离散奇余弦变换(DOCT)。
美国专利No.5,231,486公布了一种处理位流的高清晰度视频系统,它处理的位流包括高和低优先权的可变长度编码的数据字。通过分别的数据打包单元,编码数据被分成高优先权打包数据和低优先权打包数据。编码数据被连续提供给这两种打包单元。指示编码数据的高优先权和低优先权成分的高优先权和低优先权长度字被分别提供给高和低优先权数据打包器。当高优先权数据要被打包以便通过第一输出路径被传送时,低优先长度字为零;而当低优先数据要被打包以通过第二输出路径传送时,高优先长度字为零。
美国专利No.5,287,178公布了一种视频信号编码系统。它包括一个信号处理器,用于将编码视频数据分段成为具有一头部分和包装数据部分的传输块。系统还包括复位控制装置,用于在一次总系统复位后,以一预定的非同时分阶段的顺序发布分系统复位,以使信号处理能以预定顺序开始。当传输数据串时查觉到有合法数据,分阶段复位发布顺序即开始。
美国专利No.5,124,790公布了一种与图象存贮器一起使用的逆向量化器。该逆向量化器以标准方式被使用,以解码差异预测编码方法(DPCM)编码的数据。
授予美国Savatier等的专利No.136,371涉及一种具有可调节量化电平的去量化器,电平是可变的并由缓冲器的满度情况确定。申请者声称,他们的发明最新颖的特点在于实现了最大程度的可获得数据率。用在每一个块被编码后被重新计算的量化电平,对量化器152和去量化器156的量化步长作适应性改变,这就避免了缓冲器的上溢和下溢。与整个缓冲器大小相比,量化电平被作为对于帧已经编码的数据量的函数来计算。这样,量化电平可以由解码器有利地重新计算而不必被传送。
授与Sakagami等人的美国专利No.5,142,380公布了一种图象压缩装置,它适用于静止图象,如电子静止照像机使用固态图象传感器形成的那些图象。所使用的量化器与一存贮器装置相连,在这里存贮亮度信号Y的量化矩阵的阈值,rom 15则存贮色度信号I和Q的量化矩阵的阈值。
授与Guichard等人的美国专利No.5,193,002公布了一种装置,该装置用于与CCITT标准H.261结合的实时编码/解码图象信号。一个数字信号处理器执行正向量化和逆向量化。
授与Chen等人的美国专利No.5,241,383中描述了一种装置,该装置具有由可调节量化参数实现的假常数比特率视频编码。量化器32所使用的量化参数被周期性调节,以增加或降低由编码电路产生的码位数目。为了编码下一图象组而进行的量化参数改变由一差值测量确定,此差值测量是在编码电路为前一图象组产生的实际码位数和对前一图象组的估计码位数之间进行的。编码电路产生的码位数通过控制量化器的步长来控制。通常,较小的量化器步长产生较多的码位,而较大的量化器步长产生较少的码位。
授与Negata等人的美国专利No.5,113,255;Andrews等人的No.5,126,842;Gharavi等人的No.5,253,058;Hui等人的No.5,260,782以及Nomile等人的No.5,212,742等都被包括作为背景,并作为本行技术的一般说明。
发明内容
本发明提供一种流水线系统,包括:输入和输出,所述输入接收数据流;在所述输入和输出之间的多个处理级,,所述处理级包括第一处理级,该第一处理级具有用于从输入数据流检测起始码的起始码检测器,所述第一处理级响应于所检测的起始码而产生和/或转换交互接口令牌;所述交互接口令牌限定一个通用适应单元,用于在所述处理级之间进行控制和/或完成数据功能。
本发明是一个改进的流水线系统,该系统有一个输入,一个输出和在输入输出之间的许多处理级,这许多处理级用两线接口内部连结,为了沿流水线传送令牌和通用的匹配单元形式的控制令牌和/或数据令牌,为了与流水线中所有的级接口及与流水线中选定的级交互,为了在处理级中的控制数据和/或组合的控制一数据功能,使得流水线中的处理级在配置和处理方面增强了灵活性。根据本发明,一些处理级在响应至少一个令牌的识别时可以被重新配置。这些处理级之一可以是一个起始码解码器,它接收输入并产生和/或变换一些令牌。
本发明也包括一些令牌,PICTURE_START码形式的令牌表明一幅图象开始后面跟DATA令牌,PICTURE_END形式的令牌指明一幅图象的结束,FLUSH形式的令牌用于清除缓存器和使系统复位,和一个CODING_STANDARD形式的令牌规定系统对许多图象压缩/解压缩标准中被选定的一种标准处理。本发明也涉及一个对视频数据解码的改进的流水线系统,具有一个Huffman解码器,一个数据索引级(ITOD),一个算术逻辑单元(ALU)和一个紧跟在系统后面的数据缓冲装置,利用这些,由于视频图象数据量不同引起的时间分布(time spread)能够被控制。也根据本发明,接收输入数据流的处理级包括识别指定的位流模式,从而处理级使随机存取和改正错误变得容易。本发明也可包含一个装置用于执行一个图象停止以后(stop-after-picture)的操作,用于得到图象数据解码的明显的结束,用于指明一幅图象的结束和用于清除流水线。
改进的流水线系统也可包含一个固定大小,固定宽度的缓存器和填充缓存器的装置,传送任意位数通过缓存器。本发明也涉及一个包含游程长度编码的数据流和一个逆向造型器装置,该装置根据令牌对数据流起作用,用于run level码扩充成一个零数据的游程后随一个level,在这里每个令牌用一指定的值的数目表示。本发明也包括一个逆向造型器级,一个逆向离散余弦变换级和一个放在逆向造型器级和逆向离散余弦变化级之间的处理级,它响应一个处理数据的令牌表。
此外,本发明涉及改进的流水线系统。该系统有一个对根据H.261或MPEG或MPEG标准的Huffman编码规定编码的数据字进行解码的Huffman解码器,数据字包括对数据字过去用以编码的Huffman编码标准进行识别的识别器;有接收huffman编码数据字的装置;有读识别器以决定哪种标准曾经支配接收到的数据字的Huffman编码,并且,如有必要,对识别出Huffman编码数据字为H.261或MPEG Huffman编码的识别器读取作出响应的装置;有切实可行地连接到Huffman编码数据字接收装置的装置,以产生与每个从Huffman编码数据字接收装置收到的JPEGHuffman编码数据字有关的索引号;有运行包含Huffman码表的查找表的装置,Huffman码表有在JPEG标准下使用格式以传送JPEG Huffman表信息,该装置包括用于从索引号产生装置接收索引号的输入,还包括对应于该索引号的解码数据字输出。
附图说明
图1所示为对2种内部控制信号的不同组合的6级流水线的6个周期;
图2a和2b图示了一流水线,其中每一步包括辅助数据存贮器。它们还给出一种方式,在这种方式中流水线的级随在流水线中的延迟而能“压缩”和“扩展”;
图3a(1),3a(2),3b(1),3b(2)示出使用双线接口和多相时钟的优选实施例的流水线级之间数据传送控制;
图4是一个方框图,这图显示出引入一双线传输控制的流水线级的基本实施例,并且还显示2个具有二线传送控制的2个连贯流水线处理级;
图5a和5 b合起来描述一时序图的例子,这图显示了在定时信号,输入和输出数据以及用于图4所示流水线级中内部控制信号之间的关系;
图6是一流水线级的例子的框图,它在扩充位的控制下保持它的状态;
图7是流水线级的方框图,这些流水线级解码级的激活数据字;
图8a、8b共同形成方框图,显示在“数据复制(dataduplica-tion)”流水线级例子中双线传送控制的使用;
图9a、9b共同描述时序图的一个例子,这图显示双相时钟,双线传输控制信号及用在图8a、8b实施例中其它内部数据和控制信号;
图10是一个可重新组合处理级的方框图;
图11是空间解码器方框图;
图12是时间解码器方框图;
图13是视频格式器方框图;
图14a~c显示用在本发明中存贮器块的各种排列:
图14a是存贮器变换图,它显示了宏块的第一种排列;
图14b是存贮器变换器,它显示了宏块的第二种排列;
图14c是存贮器变换图,它显示了宏块的另外一种排列;
图15显示了文氏图的可能表选择值;
图16显示了用在本发明中图象数据的可变长度;
图17为包括预测滤波器的时间解码器的方框图;
图18是预测滤波过程图示的表示;
图19为宏块结构的一般表示;
图20显示了起始码检测器的一般框图;
图21说明在数据流中数据码的例子;
图22是描述标记发生器,解码指针,头标发生器,外加字发生器和输出锁存器之间关系的方框图;
图23是空间解码器DRAM接口的方框图;
图24是写交替缓冲器的方框图;
图25是说明从正被处理块预测数据偏移的示意图;
图26是说明预测数据偏移了(1,1)的示意图;
图27是说明霍尔曼解码器及空间解码器的分析程序状态机的框图;
图28是说明预滤波器框图;
图29显示典型的解码系统;
图30显示了JPEG静止图象解码器;
图31显示了JPEG视频解码器;
图32显示了多标平视频解码器;
图33显示了令牌的起始和结束;
图34显示了令牌地址和数据域;
图35显示了在接口上超过8位宽的令牌;
图36显示了宏块结构;
图37显示了双线接口协议;
图38显示了外部的双线接口的位置;
图39显示了时钟分析图;
图40显示了双线接口时序;
图41显示了存取结构例子;
图42显示了读传送周期;
图43显示了存取起始时序;
图44显示了用2个写传送的存取例子;
图45显示了读传送周期;
图46显示了写传送周期;
图47显示了刷新周期;
图48显示了一个32位数据总线及256k位深的DRAM(9位行地址);
图49显示了任何选通信号的定时参数;
图50显示了任何二个选通信号间的定时参数;
图51显示了总线和选通之间的定时参数;
图52显示了总线和选通之间的定时参数;
图53显示了MPI读时序;
图54显示了MPI写时序;
图55显示了在存贮器变换图中大量整数的组织;
图56显示了典型的解码时钟方式;
图57显示了输入时钟要求;
图58显示了空间解码器;
图59显示了输入电路的输入和输出;
图60显示了编码端口的协议;
图61显示了起始码检测器;
图62显示了起始码的检测及转换成令牌;
图63显示了起始码检器传递令牌;
图64显示了重迭MPEG起始码(字节定位);
图65显示了重迭MPEG起始码(非字节定位);
图66显示了二个视频序列之间的跳转;
图67显示了附加令牌插入的序列;
图68显示了解码器启动控制;
图69显示了输出以前允许数据流排队;
图70显示空间解码器缓冲器;
图71显示了缓冲器指针;
图72显示了视频分解器;
图73显示了一图象的结构;
图74显示了一个4∶2∶2宏块的结构;
图75显示了从pel ones计算宏块尺寸;
图76显示了空间解码;
图77显示了H.261逆量化的概观;
图78显示了JPEG逆量化的概观;
图79显示了MPEG逆量化的概观;
图80显示了量化表的存贮器变换;
图81显示了JPEG基线序列结构的概观;
图82显示了令牌化的JPEG图象;
图83显示了时间解码器;
图84显示了图象缓冲器说明;
图85显示了MPEG图象序列(m=3);
图86显示了“I”图象如何存贮和输出;
图87显示了“P”图象如何形成,存储和输出;
图88显示了“B”图象如何形成和输出;
图89显示了“p”图象格式;
图90显示了H.261预测格式;
图91显示了H.261“序列”;
图92显示了H.261句法层次;
图93显示了H.261图象层;
图94显示了H.261块组的排列;
图95显示了H.261“片”层;
图96显示了H.261宏块的排列;
图97显示了H.261块的序列;
图98显示了H.261宏块层;
图99显示了H.261在块中象元的排列;
图100显示了MPEG句法的层次性;
图101显示了MPEG序列层;
图102显示图象层的MPEG组;
图103显示了MPEG图象层;
图104显示了MPEG“片”层;
图105显示了MPEG块的序列;
图106显示了MPEG宏块层;
图107显示了“OPEN GOP”;
图108显示了存取结构的例子;
图109显示了存取起始时序;
图110显示了一快页写周期;
图111显示了一快页写周期;
图112显示了刷新周期;
图113显示了从芯片地址中抽取行和列地址;
图114显示了任何选通信号的定时参数;
图115显示了任何两个选通信号间的定时参数;
图116显示了总线和选通间的定时参数;
图117显示了一总线和选通之间的定时参数;
图118显示了霍尔曼解码器和分析器;
图119显示了H.261和MPEG AC系数解码流程图;
图120显示了JPEG(AC和DC)系数解码方框图;
图121显示了JPEG(AC和DC)系数解码流程图;
图122显示了霍尔曼令牌格式器;
图123显示了令牌格式器方框图;
图124显示了H.261和MPEG AC系数解码;
图125显示了霍尔曼ALU的接口;
图126显示了霍尔曼ALU的基本结构;
图127显示了缓冲器管理器;
图128显示了imodel和hsppk的方块图;
图129显示了imex状态图;
图130说明缓冲器的启动;
图131显示一DRAM接口;
图132显示了写交替缓冲器;
图133显示了一个算术块;
图134显示了iq块图;
图135显示了iqca状态机;
图136显示了IDCT一维变换算法;
图137显示了一IDCT一维变换结构;
图138显示了一令牌流方块图;
图139显示了一标准块的结构;
图140是微处理器测试存取方块图;
图141显示了一维变换宏结构;
图142显示了一时间译码器方块图;
图143显示了一双线接口级的结构;
图144显示了地址发生器方块图;
图145显示了块的象素偏移;
图146显示了多路预测滤波器;
图147显示了单个预测滤波器;
图148显示了一维预测滤波器;
图149显示了象素的块;
图150显示了读指针的结构;
图151显示了块和象素偏离;
图152显示了预测例子;
图153显示了读周期;
图154显示了写周期;
图155显示了使用定时基准的顶层寄存器的方块图;
图156显示了增加呈现号的控制;
图157显示了缓冲器管理状态机(完全);
图158显示了状态机的主循环;
图159显示了包括SIF图象的缓冲器0(22×18宏块);
图160显示了带有显示窗口的SIF分量0;
图161显示了显示存贮块地址一个例子的图象格式;
图162显示了包括SIF图象的缓冲器0(22×18宏块);
图163显示了一地址计算例子;
图164显示了一写地址发生器状态机;
图165显示了数据通路的分割;
图166显示了数据通路的二个周期的操作;
图167显示了方式1进行滤波;
图168显示了水平上采样器数据通路;
图169显示了彩色空间转换器的结构。
具体实施方式
简要地用普通术语来说,本发明提供一个输入,一个输出和输入输出之间的许多处理级。这许多处理级用两线接口内部连结,为了沿流水线传送令牌和通用匹配单元形式的控制令牌和数据令牌,为了与流水线中所有级接口以及与流水线中选定的级交互,为了在处理级中间的控制,数据和/或结合的控制-数据功能,利用这些,流水线中的处理级在配置和处理方面增强了灵活性。
流水线中每个处理级可以包含主要的和辅助的存储器两者。流水线中的级根据对被选中令牌的识别可以重新配置。流水线中的一些令牌是动态自适应的,为了完成功能位置可以与处理级有关,也可以无关。
根据本发明,在一流水线机器中,一些令牌可以被一些级的接口改变,一些令牌可以与流水线中所有的处理级交互,或者仅和上述的某些处理级交互而不是全部。流水线中的令牌可与相邻处理级交互,或者与不相邻处理级交互,并且令牌可以重新配置处理级。在流水线中这些令牌对某些功能可以是位置有关的,对另一些功能可以是位置无关的。
根据本发明,在一个改进的流水线机器中,这些令牌中的每个令牌可以包含一个扩展位,扩展位表明令牌中存在附加的一些字,并对那个令牌最后的字作出标记,地址字段长度可变也可以是Huffman编码。
在改进的流水线机器中令牌可以被处理级产生。令牌可以包括传送到处理级的数据或者没有数据。某些令牌可以识别为数据令牌给流水线中的处理级提供数据,而另一些令牌被识别为控制令牌,
只使流水线中的处理级达到所要求的规定,这些规定包括处理级的重新配置。还有一些令牌可以对流水线中的处理级提供数据和规定两者。某些上述令牌可以识别流水线中处理级的编码标准,而另一些令牌可以在处理级中与任何编码标准无关地工作。令牌能够被流水线中的处理级连续地改变。
根据本发明,令牌的交互灵活性和处理级协作为流水线中固有结构使处理级更多功能的多样化变得容易。令牌的灵活性使系统扩充和/或改变变得容易。令牌可以有能力使流水线中任何处理级内的许多功能变得方便。流水线令牌可以基于硬件或软件。因此令牌使流水线中系统带宽更容易有效利用。令牌可以对流水线中的处理级同时提供数据和控制。
本发明可包括一个流水线处理机,为了处理已安排成数字位单个串行位流的许多独立编码的位流,处理机有一些独立编码的控制码对和串行位流携带的相应数据,并使用许多由两线接口作内部连结的级,处理机进一步的特征用起始码检测器表示,该检测器响应单个串行位流产生应用于两线接口的控制令牌和数据令牌。用一个放在某些级的令牌解码线路来识别某些令牌作为适合于那级的控制令牌,并使不被识别的令牌沿流水线通过,用一个可重新配置的解码和分析处理装置响应一个识别的控制令牌重新配置一特定级去处理已识别的数据令牌。
根据本发明,起始码检测器是许多级之一用于接收输入并适合于产生和/或变换令牌。起始码检测器响应数据生成令牌,搜寻和检测起始码在那里响应生成令牌,能检测重叠起始码,从而忽略第一起始码,用第二起始码生成起始码令牌。
起始码检测器级适合于在搜寻方式下在输入数据流中搜索选中的起始码。检测器搜寻数据流中的间歇,搜寻可由外部数据源的数据构成。起始码检测器级可生成START_CODE令牌,PICTURE_START令牌,SLICE_START令牌,PICTURE_END令牌,SEQUENCE_START令牌,SEQUENCE_END令牌,和/或GROUP_START令牌。起始码检测器级也可以对令牌最末的字加一些位来执行填充功能。
在一个用于处理已安排成数字位串行位流的许多独立编码位流和具有独立编码的起始码对及在串行位流中携带的数据的机器中,起始码检测器可提供一起始码检测子系统。该子系统有串联的第一、第二和第三寄存器,每个寄存器储存来自位流不同数量的位,第一寄存器存一个值,第二寄存器和第一解码装置识别与上述第一寄存器包含的值有联系的起始码。线路装置把后者的值移位到第三寄存器预定的一端,第二解码装置被安排从第三寄存器并行接收数据。
也可提供一个响应第二解码装置的存储器用于提供存在存贮器中的一个或多个控制令牌作为与起始码有联系的值的解码结果。也可以提供许多标记移位寄存器用于处理表明来自寄存器数据的合法性的标记。系统也包括一些装置用于存取来自微处理器接口的输入数据流和一些装置用于格式化和组织数据流。
根据本发明,起始码检测器可识别与不同编码位流有联系的宽度可变的起始码。起始码检测器从输入数据流可产生许多数据令牌。而且根据本发明,系统可以是一流水线系统,起始码检测器可以放作流水线第一处理级。
本发明也提供一个有许多处理级的系统,在系统中,交互接口令牌形式的一个通用匹配单元用于在处理级中的控制和/或数据功能,令牌是一个PICTURE_START码令牌用于指明图象开始会有随后的数据令牌跟着。
令牌也可以是一个PICTURE_END令牌用于指明个别图象的结束。
令牌也可以是一个清除(FLUSH)令牌,当令牌从输入到输出在系统中从上到下前进时清除一些缓存器和复位系统。根据本发明,当令牌沿流水线从上往下前进时,清除令牌可以变化的方式复位一些级。
令牌也可以CODING_STANDARD令牌规定系统按照在许多图象压缩/解压缩标准中选定的一种去处理。
CODING_STANDARD令牌可指定图象标准为JPEG,和/任何其它合适的图象标准。至少有若干处理级响应CODING_STANDARD令牌重新配置。
系统中的处理级之一可以是Huffman解码器和分析器,在接收到一个CODING_STANDARD控制令牌时,分析器转换到一个与程序单元相应的地址单元,程序用于处理用CODING_STANDARD控制令牌识别的图象标准。CODING_STANDARD控制令牌也可选一复位地址对应用于测试Huffman解码器和分析器的存储器单元。
Huffman解码器可包括一个解码级和一个数据索引级,分析器可向数据索引单元送一个指令,选择特定的被识别编码标准所需要的一些表,分析器级指明到达的数据是否已倒相。
上述的一些令牌也可采用交互变形接口令牌的形式。
本发明也提供一个对视频数据解码的系统,有一个Huffman解码器,一个数据索引(ITOD)级,一个算逻单元(ALU)和一个紧跟系统的数据缓冲装置,利用这些,由于数据大小变化的视频图象引起的时间分布能被控制。
系统可包括一个空间解码器,有两线接口内部连接一些处理级,接口使能以对数据串行处理,对控制并行处理。
如前面指出的,系统可进一步包括一个ROM其中有为许多图象标准的每一个的分开存储的程序,程序可用令牌选择,使对许多不同图象标准的处理变得容易。
空间解码系统也包含一个令牌格式化器用于格式化令牌,使数据令牌被生成。
系统可以也包含一个解码级和一分析级用于对数据索引单元送一条指令,为特定已识别编码标准选择需要的一些表,分析级表明到达的数据是否已倒相。这些表被安排在存储器内使能在合适的地方多次使用表。
本发明也提供一流水线系统有一个输入数据流和为接收输入数据流的处理级,该级包括识别指定位流模式的装置,利用上述级使随机存取和改正错误变得容易。根据本发明,处理级可以是一起始码检测器,位流模式可以包括起始码。因此,发明提供一个搜索-方式装置用于搜寻安排成单个串行数据流的不同编码数据流,用于允许随机存取和增强错误改正。
本发明也提供一流水线机器,具有执行图象停止以后(stop-after-picture)操作的装置,用于提到图象数据解码明显的结束,用于指明图象结束和清除流水线,利用这些装置产生PICTURE_END令牌和FLUSH令牌的组合。
本发明在流水线机器中也提供一个固定大小,固定宽度的缓存器和装置用于填充缓存器,传送任意数目的位通过缓存器。填充装置可以是一起始码检测器。
填充只可在令牌的最后一个字上执行,填充保证字大小的一致。根据本发明,可提供一个可重新配置处理级作为空间解码器,填充装置对空间解码器处理的图象数据加进足够的外加位使得空间解码器输出的每幅解压缩图象有以位为单位的相同长度。
本发明还在一具有包含游程长度码的数据流的系统中提供一个逆造型器装置,此装置作用于从令牌来的数据流,以便将runlevel码扩充成零数据的run,后跟level,在这里每个令牌用指定数目的值表示。令牌可以是一个数据令牌。
逆向造型器装置阻止不够指定数目的值的令牌,在本发明的优先实施例中值的指定数目可以是64个系数。
本发明的实践可包括一个扩充线路用于接收有游程长度码的数据令牌并对游程长度码解码。与扩充线路通信的填充器(padder)电路检查数据令牌是否有预定长度,使得如果数据令牌长度小于预定长度,填充器电路对数据令牌加一些数据单元直到达到预定长为止。还提供一个傍路线路用于使数据令牌以外的任何令牌绕过扩充线路和填充线路。
根据本发明,提供一种数据有效地填充缓存器的方法,包括提供有第一预定宽度的第一类型令牌,至少是下面格式之一:
格式A -EXXXXXXLLLLLLLLLLL
格式B -ERRRRRRLLLLLLLLLLL
格式C -EOOOOOOLLLLLLLLLLL
这里E=扩展位;F=指定格式;R=游程位;L=长度位或非数据令牌;X=“任意”(“don′t Care)位,把格式A令牌分割成一个有ELLLLLLLLLLL形式的格式oa令牌,把格式B令牌分割成一个格式1令牌具有FRRRRRROOOOO形式和一个格式oa数据令牌,把格式C令牌分割成一个格式0令牌具有FLLLLLLLLLLL形式,并把格式0,格式oa和格式1令牌装进一个有第二预定宽度的缓存器。
本发明也提供一个对一组压缩图象提供时间延迟的装置,图象符合一种视频压缩/解压缩标准,在那里包含压缩图象的数据字用一计数电路计数,一个与计数器通信的微处理器适合于接收与视频压缩标准一致的起动信息,把起动信息通知计数器线路。
一个用于接收数据字和能延迟数据字的逆向造型器线路与计数器线路中间的控制线路通信,逆向造型器线路,控制线路也和计数器线路通信,计数线路把起动信息与数据字计数比较并向控制线路发信号。控制线路把那些与已满足起动准则的数据定相一致的信号排队并控制逆向造型器延迟特性。
本发明也对一个具有逆向造型器级和逆向离散余弦变换级的流水线系统提供改进,改进的特点在于位于逆向造型器和逆向离散余弦变换级之间,对处理数据的令牌表敏感的一个处理级。
根据本发明令牌可以是QUANT_TABLE令牌,用于使处理生成量化表。
本发明还提供一个Huffman解码器,以对按照H.261、JPEG或MPEG标准的Huffman编码条款编码的数据字解码,该数据字包含一个识别数据字过去用以编码的Huffman码标准的识别器。Huffman解码器有接收Huffman编码数据字的装置;有用于读识别符以决定哪种标准支配收到的数据字的Huffman编码的装置;有把数据字转换成JPEG Huffman编码数据字的装置,在1装置响应读识别符,识别出Huffman编码数据字为H.261或MPEG H Huffman编码后,必要时这种转才进行;有可实际接到Huffman编码数据字接收装置的装置,以产生与每个从Huffman编码数据字接收装置接收到的JPEG Huff-man编码数据字有关的索引号;有运行包含Huffman码表的查找表的装置,该Huffman码表有在JPEG标准下使用的格式,以传送JPEGHuffman表信息,该装置包括用于从索引号产生装置接收索引号的输入,还包括输出,该输出是对应于索引号的解码数据字。
本发明还在不同的范围程度涉及一种对数据字解码的方法,该数据字根据H.261,JPEG或MPEG标准的规定条款编码,包括一个对数据字过去用以编码的Huffman编码标准识别的识别器;这样的一些解码步骤包括接收Huffman编码数据字,含必要时读识别器以决定哪种标准过去支配接收到的数据字的Huffman编码,作为对将Huffman编码数据字识别为H.261或MPEG Huffman编码数据字的识别器读取的响应,包括产生与每个接收到的Huffman编码数据有关的索引号;包括运行内含Huffman码表的查找表,该Huffman码表有在JPEG标准下使用的格式,以传送JPEG Huffman表信息,这一步骤包括接收索引号及产生对应于收到的索引号的解码数据字。
本发明上述的和其它的目的和优点将从以下更详细的说明中阐述得更明白。
在本发明的实施的后面的说明中,下列条目是频繁使用的,所以对下面的词汇表作一般性定义:
词汇表
块:一个8行×8列象素矩阵或64 DCT系数(源,量化或反量化)。
色度(分量):表示二种色差信号之一同在位流中所定义状态内的基色有关的矩阵、块或单个象素,色差信号用符号Cr和Cb表示。
编码的表示:一个数据元素在它的编码形式内的表示。
编码的视频位流:在本说明中所定义的系列一幅或多幅图象的编码表示。
编码的次序列:图象传送和解码的次序。这个次序不需要同显示次序相同。
分量:矩阵、块或信号象素,它的来自形成图象的3个矩阵(亮度和2个色度)中一个。
压缩:减少位数用以表示数据项。
解码器:一个解码处理的实体。
解码(处理):本说明所定义的处理是读输入编码位流并生成解码图象或音频采样。
显示次序:所显示解码图象次序。一般,这同解码器的输入中表示的次序相同。
编码(处理):一种处理,在本说明中没有详细说明。读输入图象或音频采样的流并生成一个如本说明所定义的有效编码位流。
基编码:宏块和图象的编码所用信息仅来自宏块和图象。
亮度(分量):表示单色表示的信号同在位流中所定义方式下的基色的关系的矩阵,块或单个的象素,亮度用符号Y表示。
宏块:4个8×8亮度数据块及2个(为4∶2∶0色度格式)4个(为4∶2∶2色度格式)或8个(为4∶4∶4色度格式)相当于8×8色度数据块来自图象亮度成份的16×16部分,宏块在某些时候指象素数据,某些时候指象数值及本说明部分定义的句法的宏块头标中所立定的其它数据,对于一位具有本领域一般技巧者,从上下文看其用法是清楚的。
运动补偿:使用运动矢量是为了改进象素值的预测效率,预测是用运动矢量给过去的和/或将来参考图象提供偏置。参考图象包括前面的用于形成预测错误信号的解码象素值。
运动矢量:用于运动补偿的二维矢量,为此提供一从当前图象中坐标位置到参考图象中的坐标的偏置。
非基编码:宏块或图象的编码既用自己的信息亦用发生在其它时间的宏块和图象的信息。
象素:图象的元素。
图象:原始的,编码或重构的图象数据。原始的或重构的图象由3个表亮度和2个色度信号的8位数矩形矩阵组成,对逐行视频,一个图象等同于一帧,而对隔行视频,一个图象能以一帧来表示或者根据其前后关系,表示成一帧的顶场或底场。
预测:用一预测器来提供象素值或当前解码的数据元素的估计。
可重构的处理级(RPS):是一个步级,在此级中响应于识别的令牌重构自身以实现各种操作。
一系列宏块
令牌:一通用适匹单元,它以交互接口信息包的形式表示控制和/或数据功能。
起始码(系统和视频):嵌入在编码位流中的唯一32位码。它们用作几个目的,包括在编码句法中某些结构的标识。
可变长度编码;VLC:对编码的可述过程对频度高的事件赋给较短的编码字,而对频度数低的事件赋给较长的编码字。
视频顺序:一系列的一个或多个图象。
实施例的详细说明
作为本发明的优选实例中所用的流水线系统的最基本特征的说明,图1是大大简化的六级流水线的六周期的实例图。(如下面更详细地说明所述,此流水线的优选实施例包括若干图1中未示出的有益的特征)。
现在参看附图,其中同样的参考数字在附图的各个图中代表同样的或相应的元件,特别是图1示出本发明实例中六周期的方框图。每行逻辑框例示出一周期,每个不同的级分别用A~F标记。每个阴影逻辑框表明相应的级保持有效数据,即在一个流水线级中被处理的数据。在处理(可以包括只不过是不进行数据计算的简单传输)后,有效数据作为有效输出数据被输送出。
应注意,实际流水线应用可以多于或小于六个流水线级。应理解为本发明可以应用任意数量的流水线级。因此,数据可以在多级中进行处理,不同级的处理时间可以不同。
除了时钟和数据信号(下面将说明)外,流水线包括二个传输控制信号-“有效”信号和“接收”信号。这些信号用以控制流水线中数据的传输。图例中作为连接相邻级的两行中的上游的有效信号沿向前或向下方向从每个流水线级通过并到达最接近的相邻装置。此装置可以是另外的流水线级或某些其它系统。例如,最终的流水线级可以将其数据传到下面的处理电路。图例中作为连接相邻级二行中下游的接收信号,沿其它向上的方向通过并达到上一装置。
本发明实际使用的典型的数据流水线系统在优选实施例中有如下的一个或多个特征:
1、此流水线是“有伸缩性”的,以致在特定流水线级上的延迟对其它流水线级的可能干扰最小。随后的流水线级能继续处理,这就意味着在延迟级之后的数据流中,间断打通了。同样,上述流水线级也可以在可能处继续工作。在这种情况下,数据流中任何间断可以在凡是可能的地方从数据流中去掉。
2、调停流水线的控制信号是这样组织的:它们仅传播到最接近的邻近流水线级。对于流动方向与数据流相同的信号来说,这是紧接着的下一级。对于与数据流流动方向相反的信号来说,这是紧接着的上一级。
3、流水线中的数据被这样地编码,使得在流水线中可处理许多不同类型的数据。这种编码适合于可变大小的数据包而不必预先知道包的大小。
4、与说明数据类型有关的辅助操作尽可能地小。
5、对每个流水线级来说,仅识别其所要求功能所需要的最少数目的数据类型是可能的。然而,它还应能将所有数据类型传给下一级,尽管它未识别它们。这就使不相邻的流水线级之间的通信成为可能。
虽然在图1中未示出,但有一些数据线,即单线或若干平行线,它们形成也从每个流水线级引入和引出的数据母线。如下面更详细地举例说明那样,在这些数据线上,数据传输进、传输出流水线级和在流水线级之间传输。
应当指出,第一流水线级可以由任何形式的上述装置接收数据和控制信号。例如,数字图象传输系统的接收电路、其它的流水线或类似装置。另一方面,它自身可产生在流水线中被处理的全部数据或部分数据。实际上如下所述,“级”可以包括任意处理电路,所说的处理电路包括根本没有系统(只是为了通过数据)或全部系统(例如,另一个流水线甚至多个系统或多个流水线),而且它可以产生、改变和删除所要求的数据。
当流水线级包括沿流水线向下传输的有效数据时,表明数据有效性的VALID(有效)信号只需要再传输到最接近的下一流水线级,而不必传得更远。因此,二线接口包含在系统中每对流水线级之间。这包括前置部件和第一级之间的二线接口,及后置部件和最后级的二线界面,如果有这样的前后部件,并且数据要在它们和流水线之间传送的话。
每个信号,即“接收”和“有效”,都有一高和低的电平值。这些值分别简写为“H”和“L”。在所实施的发明中,流水线的最普通的应用,最典型的是数字式的。在这样的数字式实现中,高的值可以,例如是逻辑“1”,低的值可以是逻辑“0”。然而,此系统不限于数字式实现,在模拟式实现中,高的值可以是一电压或高于(或低于)一设定门限值的其它的类似量,低的值用低于(或高于)该值或另一门限值的相应的信号表示。对数字式应用来说,本发明可以利用任何公知技术,例如CMOS、双极型等来完成。
不必使用各别的存储装置和走线来实现有效信号的存储。甚至在数字式实施例中亦是如此。全部要求是数据“有效性”的指示与数据一起被储存。仅作为例子,在用数字值表示的数字式电视图象中,像在国际标准CCIR601中规定的那样,某些特殊值是不允许的。在此系统中,使用二进制数的8比特代表图象的采样值。数值零和255不可以使用。
如果这样的图象是在本发明实践中建立的流水线中被处理,则可能应用这些数值中的一个(例如零)指出在流水线内的特定级中的数据是无效的。因此,任何非零数据都应认为是有效的。在这个例子中,不存在可被识别并存储有关数据“有效”的特殊锁存器,尽管如此,数据有效性还是与数据一起被存储。
如图1所示,进入每级的有效信号的状态用在上部的向右指的箭头上的“H”或“L”指出。因此,从A级进入B级的有效信号是低电平,而从D级进入E级的有效信号是高电平。进入每级的接收信号的状态用在下部的向左指的箭头上的“H”或“L”指出。因此,从E级进入D级的接收信号是高电平,而从联接流水线下游的装置进入F级的接收信号是低电平。
每当下接级进入其上接邻近级的接收信号是高电平时,在一周期期间(下面说明)数据从一级传输到另一级。如果在两级之间接收信号是低电平,则数据不在这些级之间传输。
再参看图1,如果逻辑框被画上阴影线,作为例子,相应流水线级被认为包括有效输出数据。同样,从该级传送到下一级的有效信号是高电平。图1例示出B、D和E级包括有效数据时的流水线。A、C和F级不包括有效数据。在起始时,进入流水线级A的有效信号是高电平,这意味着在传输线上进入流水线的数据是有效的。
也在这时,进入流水线级F的接收信号是低电平,因此,没有数据,无论是有效的或无效的,从F级输出。应注意到有效和无效数据两者都在流水线级之间传输。不值得储存的无效数据可以改写,从而将其从流水线中除去。然而,有效数据不必改写,因为它是用以进行处理或在下接装置中应用的必须存储的数据,所说的下接装置是流水线、装置或连接到流水线并从流水线接收数据的系统。
在图1所例举的流水线中,E级包括有效数据D1,D级包括有效数据D2,B级包括有效数据D3,而与上游流水线连接的装置(未绘出)包括传输进流水线并在其中进行处理的数据D4。除了上接的装置之外,B、D和E级包括有效数据,因此,从这些级或装置分别进入它们下一级装置的有效信号是高电平。然而,由于这些级不包括有效数据,所以来自A、C和F级的有效信号是低电平。
现在假定从流水线向下连接的装置不准备接收流水线的数据。该装置将相应的低电平接收信号置进F级作告示。然而F级自身不包括有效数据,因此能从上述E级接收数据。所以由F级进入E级的接收信号设置成高电平。
同样,E级包括有效数据而且F级准备接收此数据。因此,只要有效数据D1首先传输到F级,E级就能接收新的数据。换言之,尽管F级不能向下传输数据,但所有其它级都能传输,而无任何有效数据被改写或损失。在周期1末端,数据能被“移位”一步到右边。这种情况示于周期2中。
在已例举的实例中,在周期2中,下接装置还不准备接收新数据,因此,进入F级的接收信号仍是低电平。由于这样做会引起有效数据D1改写和损失,所以F级不能接收新数据。所以由F级进入E级的接收信号成为低电平;同样,由于E级也包括有效数据D2,使接收信号也从E级进入D级。然而,所有的A~D级都能接收新数据(因为它们不包括有效数据,或者因为它们能使它们的有效数据向下面转移并接收新数据),它们通过将它们的相应接收信号设置为高电平,而传输这种条件信号到它们的前置最邻近级。
周期2之后的流水线级例示在图1中标记周期3的那一行。作为实例,假定下接的装置还不准备从F级接收新数据(进入F级的接收信号是低电平)。由此,E和F级仍然被“阻塞”,但在周期3中,D级已接收有效数据D3,其原先在该级中的无效数据已被改写。由于在周期3中D级不能传输数据D3,它就不能接收新数据,所以将进入C级的接收信号设置为低电平。然而,A~C级准备接收新数据,通过将它们相应的接收信号置于高电平来作告示。应当指出数据D4已被从A级移位到B级。
现在假定下接的装置变成准备在周期4中接收新数据。通过将进入F级的接收信号置于高电平来将此信息传递到流水线。虽然C~F级包括有效数据,现在它们能使数据向下移位,从而能接收新数据。因为每一级都能因此使数据向下面移位一步,它们将其各自输出接收信号置于高电平。
只要进入最后流水线级(在此例中为F级)的接收信号为高电平,则图1所示的流水线就充当固定连接的流水线,并只是在每个周期将数据向下移位一步。因此,在周期5中,周期4的F级中所包括的数据D1移出流水线到下一个装置,所有的其它数据向下移位一步。
现在假定在周期5中进入F级中的接收信号成为低电平。再重复一次,这意味着D~F级不能接收新数据。从这些级输出并进入最邻近的上级的接收信号成为低电平。因此,数据D2、D3和D4不能向下移位,然而数据D5能够。在周期5之后流水线的相应状态如图1中周期6所示。
按照本发明的优选实施例,因为流水线中的处理级变得互相隔离,流水线的“填充”未占用的处理级的能力是非常有益的。换句话说,虽然流水线级不立即接收数据,整个流水线也不必停止和等待延迟级。相反,当一级不能接收有效数据时,它在流水线中简单地形成一临时“壁”。尽管如此,“壁”的下接各级继续传输有效数据,甚至到与流水线连接的电路,“壁”左边各级仍然能接收和向下传输有效数据。甚至当一些流水线级暂时不能接收新数据时,其它级仍能继续正常工作。尤其是只要A级尚未包括由于下一级不立即接收新数据而不能前进的有效数据,流水线就能继续接收数据进入其最初的A级。如此例所述,甚至当一个或多个处理级阻塞时,数据仍能传输入流水线和各级之间。
在图1所示的实施例中,假定各个流水线级不存储它们从其最邻近的下一级收到的接收信号。代之的是,每当进入下一级的接收信号成为低电平时,此低电平信号向上游各级传播直到不包括有效数据的最邻近的流水线级。例如,参看图1,假定在周期1中进入F级的接收信号成为低电平。在周期2中,此低电平信号从F级传回到D级。
在周期3中,当数据D3被锁进D级时,接收信号向上游传送四级到C级。当在周期4中进入F级的接收信号成为高电平时,它必须向上游传送直到C级。换句话说,接收信号中的变化必须返传回四级。然而,如果存在某些能接收新数据的中间级,在图1例示的实施例中,接收信号就不必向回传送到流水线的起点。
在图1所例举的实施例中,每个流水线级将仍然需要独立的输入、输出数据锁存器,以使数据在级间传送而没有无意识地改写。而且虽然当下接的流水线被阻塞,即它们不能传送所含的数据时,图1中所例举的流水线能“压缩”,但此流水线并不为了在包括有效数据的各级之间提供不包括有效数据的级而“扩展”。确切些说,压缩能力取决于存在一些周期,在这些周期期间第一流水线级前不出现有效数据。
例如,在周期4中,如果进入F级的接收信号保持低电产,并且有效数据充填流水线级A和B,只要有效数据继续出现在A级输入处,流水线将不能做任何进一步压缩,有效输入数据可能会丢失。尽管如此,图1中所例示的流水线,由于只要存在不包括有效数据的流水线级,它就能压缩,所以减少了数据丢失的风险。
图2例示出流水线的另一实施例,它能以逻辑方式压缩和伸展,并包括限制接收信号向最邻近的前级传送的电路。下面将对用以实施此实施的电路进行详细地图示和说明,图2只用以说明其工作原理。
只是为了便于比较,进入图2所示流水线实施例中的输入数据和接收信号与进入图1所示流水线实施例中的相同。因此,E、D和B级分别包括有效数据D1、D2和D3。进入F级接收信号是低电平,数据D4出现在起始的流水线级A之前。在图2中示出连接每个邻近的流水线级对的三条线。可以是一母线的最上边的线为数据线。中间那条线是传输有效信号的线,底下那条线是传输接收信号的线。而且如上所述,进入F级的接收信号除了在周期4中之外都保持低电平。因此,在周期4中另外的数据D5出现在流水线前。
在图2中,每个流水线级用分成两半的方框表示,以说明在此流水线实施例中的每级都包括初级和次级数据存储单元。在图2中每级的右半部分表示初级数据存储单元。要知道这种描述只是为了说明,而不作为限定。
如图2所示,只要进入某级的接收信号是高电平,数据就在任意给定的周期期间从该级的初级存储单元传输到下一级的次级存储单元。因此,虽然进入F级的接收信号是低电平,但进入所有其它各级的接收信号是高电平,所以在周期2中数据D1、D2和D3向前移位一步,而数据D4移位进第一级A中。
到这时为止,图2所示的流水线实施例以类似图1所示的流水线实施例的方式起作用。然而,尽管进入F级的接收信号是低电平,从F级进入E级的接收信号是高电平。像下面所说明的那样,因为有次级存储单元,除了F级之外,低电平的接收信号就不需要向更前级传输。而且,通过让进入E级的接收信号继续为高电平,F级告示它可立即接收新数据。由于在周期3中F级不能向下传输在其初级存储单元中的数据D1(进入F级的接收信号是低电平),所以E级必须将数据D2传输进F级的次级存储单元。由于F级的初级和次级存储单元两者都包括不能传送的有效数据,所以从F级进入E级的接收信号置于低电平。因此,这表示低电平接收信号相对于周期2反向回传送一级,而此接收信号在图1所示的实施例中必须向回传送直到C级。
由于A~E级能传送其数据,从这些级进入其最邻近的前级的接收信号置于高电平。因而数据D3和D4向右移位一级,使得在周期4中,它们被分别加载进E级和C级的初级数据存储单元。尽管现在E级在其初级存储单元中包括有效数据D3,但其次级存储单元仍然能用以存储其它数据而不会有改写任何有效数据的危险。
如上所述,现在假定在周期4中进入F级的接收信号变成高电平。这表示流水线向其传送数据的下接装置可立即从流水线接收数据。然而F级已将其接收信号置于低电平,因而向E级表示F级不准备接收新数据。要注意到每个周期的接收信号指出在下一个周期中将“发生”什么,也就是说指出数据是否会传送(接收信号为高电平),或者数据是否必须保持在原来位置(接收信号为低电平)。因此,从周期4到周期5,数据D1从F级传送到下面的装置,数据D2在F级中从次级移位到初级存储器,但E级中的数据D3未传送到F级。由于下几级有高电平接收信号,所以数据D4和D5能像通常那样传送进下一个流水线级。
比较周期4和周期5中流水线的状态,可见次级存储单元的设置能使图2所示的流水线实施例扩展,也就是说随意增加有效数据能前进其中的数据存储单元。例如在周期4中,由于在进入F级的接收信号成为高电平之前,它们的数据不能传送,数据块D1、D2和D3形成一个“坚壁”。然而一旦此信号变成高电平,则数据D1移出流水线,数据D2移位进F级的初级存储单元,并且如果下面的装置不能接收数据D2,F级的次级存储单元就成为空闲的以接收新数据。流水线必须再次“压缩”。这表明在周期6中,数据D3已移位到F级的次级存储单元,数据4已像通常那样从D级传输到E级。
图3a(1)、、3a(1)、3b(1)和3b(2)(它们总起来用图3表示)例举出流水线的优选实施例。此优选实施例使用具有φ0和φ1相位的二相位不重叠时钟脉冲实现图2中所示的结构。尽管推荐了二相时钟脉冲,但应理解到使用具有多于二相的时钟脉冲来驱动本发明的各个实施例也是可能的。
如图3所示,每个流水线级用有二个分离的代表初级和次级存储单元的逻辑框表示。而且,虽然有效信号和数据线像上述那样连接不同的流水线级,但为了便于说明,在图3中仅示出接收信号。在某些接收信号的时钟脉冲相位期间,状态的变化在图3中使用向上的箭头表示从低电位到高电位的变化。同样,向下的箭头表示从高电位到低电位的变化。数据从一个存储单元到另一存储单元的传输用t的中空的箭头表示。假定每当任何给定级的初级或次级存储单元内含有效数据时,从这些存贮单元输出的有效信号处于高电位。
在图3中,每个周期用不重叠的时钟脉冲相位φ0和φ1的整个期间表示。像在下面更详细的说明那样,数据在时钟脉冲周期φ1期间从次级存储单元(在每级中用左边的逻辑框表示)传送到初级存储单元(在每级中用右边的逻辑框表示),而在时钟脉冲周期φ0期间,数据从一级的初级存储单元传送到下一级的次级存储单元。图3也表明每级中的初级和次级存储单元进一步经由一内部接收线连接,以便用接收信号从一级传到一级的同样方式通过该内部接收信号。这样,次级存储单元将知道什么时候其数据能传到初级存储单元。
图3示出周期1的φ1相位,其中已在先前分别移位入E、D和b级的次级存储单元的数据D1、D2和D3被移位入各相应级的初级存储单元。因此,在周期1的φ1相位期间,流水线呈现像在图2的周期1那样的相同结构。如上所述,进入F级的接收信号假定是低电位。然而如图3所示,进入F级的初级存储单元的接收信号是低电位,但由于此存储单元不包括有效数据,所以将进入其次级存储单元的接收信号置于高电位。
由于F级的次级存储单元不包括有效数据,从F级的次级存储单元进入E级的初级存储单元的接收信号也置于高电位。如上所述,由于F级的初级存储单元能接收数据,所有上游的初级和次级存储单元中的数据都能向下移位而没有任何有效数据被改写。在周期2中的下一个φ0相位期间发生从一级到下一级的数据移位。例如,在E级的初级存储单元中包括的有效数据D1移位入F级的次级存储单元,数据D4移位入流水级,即移位入A级的次级存储单元等等。
F级的初级存储单元在周期2中的φ0相位期间仍然不包括有效数据,因此从初级存储单元进入F级的次级存储单元的的接收信号维持高电位。在周期2中的φ1相位期间,数据因此能又向右移位一步,即从每一级中的次级到初级存储单元。
然而,如果从下接的装置进入F级的接收信号仍然是低电平,一旦有效数据加载进F级的初级存储单元,要将数据移位出F级的次级存储单元而又不改写和破坏有效数据D1是不可能的。从F级初级存储单元进入次级存储单元的接收信号因而成为低电平。然而由于它不包括有效数据和其输出的接收信号是高电平,数据D2仍然能被移位入F级的次级存储器。
在周期3的φ1相位期间,尽管数据能在所有上述各级内被移位,但要将数据D2移位入F级的初级存储单元是不可能的。一旦有效数据加载进F级的次级存储单元,F级就不能传送此数据。它将其输出接收信号设置于低电平,从而告示这一事件的发生。
假定进入F级的接收信号保持低电平,F级上方的数据在各个时钟脉冲相位期间能继续在级间和级内移位,直到下一个有效数据块D3达到E级的初级存储单元。如所说明那样,在周期4的φ1相位期间达到这种情况。
在周期5的φ0相位期间,数据D3已加载进E级的初级存储单元。由于此数据不能再被移位,E级的初级存储单元的输出接收信号置于低电产。上游的数据能像通常那样移位。
现在像在图2的周期5中那样,假定连接流水线下方的装置能接收流水线数据。它在周期4的φ1相位期间将进入流水线级F的接收信号置于高电平,从而发出这种情况的信息。F级的初级存储单元现在能向右移位数据并且它们也能接收新数据。此后,在周期5的φ0相位期间数据D1已被移位出去,所以F级的初级存储单元不再包含必须保存的数据。在周期5的φ1相位期间,在F级内数据D2被从次级存储单元移位到初级存储单元。F级的次级存储单元也能接收新数据,并将进入E级的初级存储单元的接收信号置于高电平,从而传出此信息。在级内数据传送期间,也就是从其次级到其初级存储单元,两组存储单元将包含同样的数据,但由于这数据也将保持在初级存储单元中,在次级存储单元中的数据能被无数据损失地改写。这种情况适用于数据从一级的初级存储单元传输入下一级的次级存储单元。
现在假定在周期5中的φ1相位期间进入F级的初级存储单元的接收信号成为低电平。这意味着F级不能使数据D2传送出流水线。因此,F级将从其初级存储单元到其次级存储单元的接收信号设置于低电平,以防止改写有效数据D2。然而存储在F级的次级存储单元的数据D2能被无损失地改写,而且因此数据D3在周期6的φ0相位期间被传送进F级的次级存储单元。数据D4和D5能像通常那样向下移位。只要进入F级初级存储单元的接收信号是低电平,一旦有效数据D3与数据D2一起存储在F级,则没有一个次级存储单元能接收新数据,并且通过将进入E级的接收信号置于低电平来告示这种信息。
当从下接的装置进入流水线的接收信号从低电平到高电平或者相反地变化时,这种变化除了到最邻近的上一存储单元(在同一级内或在上一流水线级内)外,不必在流水线内向上方传送。相反地,这种变化在流水线内每个时钟脉冲相位向上方传送一个存储单元部分。
如此例所述,在图3所例举的流水线结构中“级”的概念在某种程度上只是理解问题。因为数据在级内(从次级存储单元到初级存储单元)传输,像它在极间(从上一级的初级存储单元进入相邻的下一级的次级存储单元)传输一样,人们同样能认为级是包括“初级”存储单元,其后是“次级存储单元”而不是像在图3中所说的那样。因此“初级”和“次级”存储单元的概念主要是称谓问题。在图3中,“初级”存储单元也能称为“输出”存储单元,因为它们是使数据从一级传出进入下一级或下一装置的存贮单元,而“次级”存储单元应是同一级的“输入”存储单元。
在说明上述实施例中,如图1~3所示,仅叙述了在接收和有效信号控制下数据的传输。应进一步理解为每个流水线级也可以在它接收的随机数据在流水线的内部存储单元之间传输之前,或者在传送到下一个流水线级之前处理该数据。因此,再次参看图3,能将流水线级定义为含有输入和输出存储单元并随意地处理存储在其存储单元中的数据的那部分流水线。
此外,从流水线F级向下的“装置”不需要是某些其它类型的硬件结构,相反,它能是同一流水线的另一部分或另一流水线的一部分。像下述那样,流水线级不仅当全部下接的存储单元都装有效数据时能将本级的接收(ACCEPT)信号置成低电平,而且当为完成数据处理流水线级需要大于一个时钟脉冲相位时,也能将它置低。当流水线级在其一个或二个存储单元中建立有效数据时,这种情况也能存在。换句话说,某级不需要仅仅根据下接的最邻近的存储单元是否包括不能传送的有效数据来传送接收信号。相反,为了控制数据在相邻的存储单元之间传输,也可以在级内或者由外本级之外的电路使接收信号本身改变。有效(VALID)信号也可以用类似方法处理。
二线接口(有效和接收信号各一线)的很大的优点是它不用控制信号就能控制流水线,所说的控制信号必须逆着流水线的方向传送直到其起始级。再次参看图1,例如在其周期3,F级“通知”E级它不能接收数据,E级通知D级,D级又通知C级。的确,如果真有更多级包括有效数据,则这信号会沿流水线向回传送得更远。在图3所示的实施例中,在周期3,此低电平接收信号传回到E级为止,而且接着只传到其初级存储单元。
如上所述,此实施例无须大大增加完成设计所需要的硅片面积就能达到这种灵活性。具有代表性地是,流水线中用于数据存储器的每个锁存器仅需要一个单独的附加晶体管(它非常有效地设置在硅片中)。此外,最好再增加二个附加锁存器和小量门电路,用以处理与每半级中数据锁存器有关的接收和有效信号。
图4例示出完成图3中所示级的硬件结构。
仅作为例子,假定8比特数据通过流水线并行传输(在任意组合逻辑电路中具有或没有进一步的处理)。然而应理解到在实施本发明中也能应用多于或小于8比特的数据。此外,按照此实施例二线接口适用于任何数据母线宽度,而且如果特殊应用需要,此数据母线宽度甚至可以从一级变化到下一级。按照此实施例,该界面也能用来处理模拟的信号。
如前所述,当使用其它常规定时装置时,最好用二相不重叠时钟控制接口。在图4~9中,这些时钟相位信号记为PH0和PH1。在图4中,每个时相位拍信号用线表示。
输入数据经过多位数据线母线IN-DATA进入流水线级,并经过输出数据母线OUT-DATA传输到下面的流水线级,或者传输到随后的接收电路。该输入数据首先以下述方法加载进一组统称为LDIN的输入锁存器(每个输入数据信号一个),它们构成上述的次级存储单元。
在本实施例所例举的实例中,假定全部锁存器的Q输出跟踪它们的D输入,也就是说当时钟脉冲输入是高电平,即在逻辑“1”电平时它们被“加载”。此外,Q输出保持其最终值。换言这之,该Q输出被“锁存”在它们各自的时钟脉冲信号的下降沿上。每个锁存器都有二个不重叠时钟脉冲信号PH0和PH1中的任一个(如图5所示),或者是这些时钟脉冲信号PH0、PH1和一个逻辑信号的逻辑“与”组合。通过提供在时钟脉冲信号上升沿上锁存的锁存器或任何其它已知的锁存装置,只要常规方法被用来保证锁存工作的正确定时,本发明同样能工作。
来自输入数据锁存器LDIN的输出数据经由适当的和任意的组合逻辑电路B1传输,此电路B1将来自输入寄存器LDIN的输出数据转换成中间数据,然后此中间数据以后加载到由上述初级存储单元组成的输出数据锁存器LDOUT中。此来自输出数据锁存器LDOUT的输出在作为OUT_DATA向前传输到下游的下一级之前,同样可以通过适当的和任意的组合逻辑电路B2。这可以是另外的流水线级或任何连接到该流水线的其它装置。
在本发明的实践中,流水线的每级也包括有效输入锁存器LVIN、有效输出锁存器LVOUT、接收输入锁存器LAIN和接收输出锁存器LAOUT。这四个寄存器中的每一个最好都是简单的单级锁存器。由锁存器LVIN、LVOUT、LAIN和LAOUT的输出分别是QVIN、QVOUT、QAIN、QAOUT。由有效输入寄存器输出的输出信号QVIN可作为输入直接连接到有效输出寄存器LVOUT,或者经由可以改变信号的中间逻辑装置或电路。
同样,给定级的输出有效信号QVOUT可以直接连接到下一级的有效输入锁存器QVIN的输入端,或者经由可改变有效信号的中间装置或逻辑电路。此输入QVIN也连接到逻辑门电路(将在下面说明),其输出连接到接收输入锁存器LAIN的输入。由接收输出锁存器LAOUT的输出QAOUT可选择地经由另一逻辑门电路连接到同样的逻辑门电路(下面说明)。
如图4所示,输出有效信号QVOUT形成一能作为IN_VALID信号被后一级接收的OUT_VALIND信号,或者简单地指示连接到流水线的后续电路的有效数据。用信号OUT_ACCEPT向每级指出用以接收数据的下接电路或级的准备的状态,所说的信号OUT_ACCEPT作为输入,最好经下述逻辑电路连接到接收输出锁存器LAOUT。同样,接收输出锁存器LAOUT的输出QAOUT作为输入,最好经下述逻辑电路连接到接收输入寄存器LAIN。
在实施本发明当中,来自有效寄存器LVIN、LVOUT的输出信号QVIN、QVOUT分别与接收信号QAOUT、OUT_ACCEPT组合,以分别形成对接收锁存器LAIN、LAOUT的输入。在图4所例举的实施例中,这些输入信号作为各个有效信号QVIN、QVOUT与各个接收输出信号QAOUT、OUT_ACCEPT的逻辑取反的逻辑“与非”组合而形成。常规逻辑门NAND1和NAND2执行“与非”工作,倒相器INV1、INV2形成各个接收信号的逻辑取反。
如在数字设计技术中所公知,当任何或所有它的输入信号为逻辑“0”状态时,来自“与非”门的输出是逻辑“1”。所以,仅当其全部输入为逻辑“1”状态时,从“与非”门的输出是逻辑“0”。本行业务所公知的是,当其输入信号是“0”时,数字倒相器例如INV1的输出是逻辑“1”,当其输入信号是“1”时,它的输出是“0”。
到“与非”门NAND1的输入是QVIN和NOT(QAOUT),其“NOT”指的是二进制倒相。使用公知技术,到接收锁存器LAIN的输入能按下式解决:
NAND(QVIN,NOT(QAOUT))=NOT(QVIN)OR QAOUT
换言之,当信号QVIN是“0”或者当信号QAOUT是“1”,或者两者同时出现时,倒相器INV1和“与非”门NAND1的组合是逻辑“1”。门电路NAND1和倒相器INV1能用单个“或”门来完成,它的输入之一直接依赖接收锁存器LAOUT的QAOUT输出,另一个输入,依赖有效输入锁存器LAIN的输出信号QVIN的反值。
如在数字设计技术中所公知,适于用作有效和接收锁存器的许多锁存器可以有两个输出Q和NOT(Q),即Q和它的逻辑反值。如果选择这样的锁存器,则到“或”门的一个输入能直接依赖有效锁存器LVIN的NOT(Q)输出。门电路NAND1和倒相器INV1能使用常规公知技术来完成。然而依靠所用的锁存器结构,使用无反相输出的锁存器可以更有效,代替的是提供门电路NAND1和倒相器INV1,这两者也能在硅器件中有效地完成。因此,任何公知的装置都可以用来产生Q信号和/或它的逻辑反值。
当时钟脉冲信号(在输入侧是PH0,在输出侧是PH1)和来自同一侧的接收锁存器的输出两者都是逻辑“1”时,数据和有效锁存器LDIN、LDOUT、LVIN和LVOUT加载它们各自的数据输入。这样,时钟脉冲信号(输入锁存器LDIN和LVIN的PH0)和各个接收锁存器(在这种情况下是LAIN)的输出以逻辑“与”方式应用,当它们两者都是逻辑“1”时,仅加载数据。
在特殊应用中,例如锁存器的CMOS装置,控制锁存器加载(经已图示出的CK或使能“输入”)的逻辑“与”操作,能通过使各个使能输入信号(例如PH0和为锁存器LVIN和LDIN的QAIN)连接到在锁存器的输入线中串联连接的MOS晶体管门电路用的常规方式很容易地完成。因此,必须提供实际的逻辑“与”门,它可能由于在高速应用中延迟传送产生定时问题。所以,图中所示的“与”门仅表明在产生各种锁存器的使能信号中完成的逻辑功能。
因而,仅当PH0和QAIN两者都是逻辑“1”时,数据锁存器LDIN加载输入数据。当两个信号中的任何一个变成“0”时,它将锁存此数据。
尽管仅时钟脉冲相位信号PH0或PH1中的一个被用作时钟加到流水线级的输入(和输出)侧的数据锁存器和有效锁存器,另一个时钟脉冲相位信号却直接被用作时钟加到同一侧的接收锁存器。换言之,最好在流水线任一侧(输入和输出)的接收锁存器的时钟与同一侧的数据锁存器和有效锁存器“不同相”。例如,尽管在为数据锁存器LDIN和有效锁存器LVIN产生时钟信号CK中应用PH0,PH1却被用作接收输入锁存器的时钟。
作为通过双线有效和接收电路扩展了的流水线的工作实施例,假定最初在线路的输入端不存在从以前的流水线级,或者从传输装置来的有效数据。换言之,假定从系统最近复位后,到所例举的级的有效输入信号IN_VALID未变成“1”。还假定从系统上次复位后过了几个时钟脉冲周期,相应地,电路已达到稳定状态的条件。在时钟脉冲PH0的下一个正周期期间,来自有效锁存器LVIN的有效输入信号QVIN被作为“0”装载。在时钟脉冲信号PH1的下一个正周期期间,到接收输入锁存器LAIN(经门电路NAND1或另一个等效门电路)的输入被作为“1”装载。换言之,因为在数据输入锁存器LDIN中的数据不是有效的,所以该级发出它准备接收输入数据的信息(因为它未保持任何值得保存的数据)。
在此例中应指出,信号IN_ACCEPT被用以使能数据和有效锁存器LDIN和LVIN。由于这时IN_ACCEPT是“1”,这些锁存器像常规透明锁存器那样有效地工作,使得不管在IN_DATA总线上是什么数据,一等到时钟脉冲信号PH0变成“1”,就都装进数据锁存器LDIN。当然,只要来自其接收锁存器的输出QAOUT是“1”,此有效数据也将装进下一流水线级的下一个数据锁存器LDOUT。
因此,只要数据锁存器不包含有效数据,在其各个时钟信号的下一个正周期期间,它接收或“装载”任何提供给它的数据。在另一方面,这样的无效数据不装入任何来自其相应接收锁存器的接收信号是低电平(即“0”)的那些级。此外,来自有效锁存器(它对下一有效锁存器形成有效输入信号)的输出信号只要相应的IN_VALID(或QUIN)信号对有效锁存器是低电平,就保持“0”。
当到数据锁存器的输入数据有效时,有效信号IN_VALID通过提高到“1”指出此状态。然后相应的有效锁存器的输出在其各自时钟脉冲相位信号的下一个上升沿时刻提高到“1”。例如,当在时钟脉冲相位信号PH0的下一个上升沿时刻相应的信号IN_VALID成为高电平(即提高到“1”)时,锁存器LVIN的有效输入信号QVIN就提高到“1”。
现在假定代之以数据输入锁存器LDIN包含有效数据。如果数据输出锁存器LDOUT准备接收新数据,其接收信号QAOUT将是“1”。在这种情况下,在时钟脉冲信号PH1的下一个正周期期间,数据锁存器LDOUT和有效锁存器LVOUT将被使能,数据锁存器LDOUT将装载在其输入端存在的数据。由于时钟脉冲信号是不重叠的,这将在另一时钟脉冲信号PH0的下一个上升沿前面发生。因此,在PH0的下一个上升沿,上述数据锁存器(LDIN)在数据输出锁存器LDOUT安全地锁存从锁存器LDIN传来的数据之前将不锁存来自前级的新的输入数据。
因此,每个相邻的能接收数据的数据锁存器对(在一级内或相邻级之间)采用同样的工序,因为它们将根据时钟脉冲的交替的相位工作。任何不准备接收新数据的数据锁存器,因为它包含已不能传送的有效数据,将有一低电平的输出接收信号(来自其接收锁存器LA的QA输出),而且将不装载其数据锁存器LDIN或LDOUT,此后,只要给定级或级的每侧(输入或输出)的接收信号(来自接收锁存器的输出)是低电平的,将不装载其相应数据锁存器。
图4也示出优选实施例中所包括的一个复位特性。在所例举的实例中,复位信号NOTRESET0连接到有效输出锁存器LVOUT的倒相复位输入端R(反相像常规那样用小圆圈表示)。众所周知,这意味着每当复位信号NOTRESET0成为“0”,有效寄存器LVOUT将被迫输出“0”。当复位信号成为低电平时(成为“0”)再使锁存器复位的一个好处是传输中的间歇将使该锁存器复位。然后每当有效传输开始和复位信号成为高电平,它们将处在它们的“零位”或复位状态。因此,复位信号NOTRESET0起数字式“ON/OFF”开关作用,为了驱动流水线,它必须处于高电位值。
应指出,不必使流水线中所有持有有效数据的锁存器复位。如图4中所描绘,有效输入锁存器LVIN不是直接用复位信号NOTRESET0复位,而宁可说是间接复位。假定复位信号NOTRESET0跌落到“0”。有效输出信号QVOUT也降落到“0”,与其以前的状态无关,随后到接收输出锁存器LAOUT(经门电路NAND1)的输入成为高电平。接收输出信号QAOUT也提高到“1”。然后,此QAOUT值“1”作为“1”被传送到接收输入锁存器LAIN的输入端而与有效输入信号QVIN的状态无关。然后在时钟脉冲信号PH1的下一个上升沿,接收输入QAIN提高到“1”。假定有效信号IN_VALID已准确地复位到“0”,则在时钟脉冲信号PH0的下一个上升沿,来自有效锁存器LVIN的输出将变成“0”,就像它直接复位一样。
如此例所述,必须仅在每级(包括最后级)的一侧复位有效锁存器,以便复位全部的有效锁存器。实际上,在许多应用中将不必复位每个其它有效寄存器:如果在时钟脉冲的两个相位PH0、PH1的大于一个完整周期期间能保证复位信号NOTRESET0是低电平,则在前面的流水线级中有效锁存器将发生“自动复位”(向回传送复位信号)。实际上,如果在时钟脉冲两相位至少有流水线级数那么多的整个周期数内复位信号保持低电平,就只须在最后的流水线级中直接将有效输出锁存器复位。
图5a和5b(统称为图5)例示出时序图,它示出不重叠的时钟脉冲信号PH0、PH1之间的关系,复位信号的作用,和不同排列的有效和接收信号的数据的保持和传输,所说的保持和传输是在图4所示实施例中配置的流水线级两侧的和在它们之间的。在图5的时间图中例示的实例中,假定来自数据锁存器LDIN、LDOUT的输出无须通过插入逻辑方框B1、B2的进一步处理来传输。这是作为举例而非限制。应理解到在连续的流水线级的数据锁存器间,或者在单独流水线级的输入和输出侧之间可以包括任何组合逻辑结构。所例举的实际输入数据的值(例如十六进制数据字“aa”或“04”)也仅是说明性的。如上所述,只要数据锁存器其它存储器件能接纳和锁存,或者存储每比特或输入字的值,则输入数据总线可以有任意宽度(而且甚至可以是模拟的)。
优选的数据结构-“令牌”
在图4所示的应用实例中,由于任何级都不包括避免使输入数据通过它的组合逻辑块B1、B2等等的控制电路,所以每一级处理所有的输入数据。为提供更大的适应性,本发明包括一数据结构,其中的“令牌”用以在整个系统中分配数据和控制信息。每个令牌都由分开进入一个或多个令牌字块的一系列二进制比特组成。此外,比特为三种类型中的一种:地址比特(A)、数据比特(D)、扩展比特(E)。作为例子而不是作为限定,假定数据在带有1比特扩展比特线的8比特母线作为字传输。四字令牌的实例是按传输排列:
第一字 E A A A D D D D D
第二字 E D D D D D D D D
第三字 E D D D D D D D D
第四字 E D D D D D D D D
应指出,扩展比特E(最好)用来作为对每个数据字的补充。此外,地址字段的长度是可变的,最好是在第一字的扩展比特之后就传送。
因此,在本发明中令牌由(二进制)数字式数据的一个或多个字组成。每个这种字顺次地而且最好是并行地传送,虽然这种传送方法不是必须的:某些使用公知技术的串行数据传送也是可能的。例如,在视频分析器中,并行传输控制信息,而串行传输数据。
如该例所说明,每个令牌在起始端最好有一用以识别令牌中所包括的数据类型的地址字段(A比特起始的串)。在大多数应用中,为传送整个地址字段、单个字或一个字的部分是足够的,但根据本发明这不是必要的,只要相应的流水线级包含逻辑电路,该逻辑电路就能存储某些足够长的部分地址字段的表示,以便这些级接收和解码整个地址字段。
应指出,传送地址字段不需要专用线或寄存器。使用数据位传输。如下所述,如果不想用特定的地址字段驱动,流水线就不会慢下来,也就是说,流水线级将能无延迟地传送令牌。
在令牌中跟随地址字段的数据剩余部分不受使用令牌的约束。这些D-数据位可以采用任意值,而且这些位所表示的意义在这里是不重要的。也就是说,数据的意义能改变,例如,取决于某一特定时刻数据在系统内被安放的位置。在地址字段后附加的数据D的数量能根据需要或长或短,在不同令牌中数据字的数可以极大地变化。地址字段和扩展位被用来将控制信号传送到流水线级。因为数据线(D比特串)中的字数可以是任意的,在数据字段中传递的信息也能相应地变化。因此,下面的说明是针对地址位和扩展位的使用。
在本发明中,当若干电路方框图在比较简单的结构中连接到一起时,令牌是特别有用的。最简单的结构是处理步骤的流水线。例如图1所示的结构。然而,令牌不限于只用在流水线结构上。
再次假定每个逻辑框代表一完整的流水线级。在图1的流水线中,数据在图中从左向右流动。数据进入机器并传送进处理级A。该级可以修改或不修改该数据,然后将此数据传送到B级。这种修改如果有的话会是随机复杂的,而且通常送进各级的数据项数与输出的不同。B级再次改变了数据并送到C级,如此等等。在诸如这种方案中,数据不能向相反方向传送,使得C级不能将数据传送到A级。这种限制常常是完全允许的。
在另一方面,虽然两级之间没有直接的连接,很希望A级能和C级通讯。A级和C级通讯只能通过B级。令牌的优点之一是它们有能力实现这类通讯。因为任何处理级对其不认识的令牌只是简单地让它不改变地送往下级。
按照这个例子,在每个令牌中,一个扩展位和地址及数据字段一起传送,使得一个处理级能通过一个令牌(它可以是任意长度)而完全不必对它的地址解码。按照这个例子,任何一个扩展位是HIGH(一个“1”)的令牌,后面跟着是同一令牌的一部分的一个随后的字。这个字也有一个扩展位,它表明在令牌中是否有一个另外的字。当一级遇到一个扩展位是LOW(一个“0”)的令牌,就知道这是令牌的最后一个字。于是,下一个字被看作一个新令牌的第一个字。
注意,虽然处理级的简单流水线特别有用,但应理解令牌可用于处理单元的更复杂的结构。一个更复杂的处理单元的例子描述于下。
根据本发明,不必要用扩展位的状态,即把扩展位置“0”,来作为一个给定令牌的最后字的信号。代替本优先方案的另一方法是改变扩展位的位置,使它表明是令牌的第一个字而不是最后的字。在解码硬件中作相应的改变就可以实现这点。
用本发明的扩展位作为令牌中最后一个字而不是第一个字的信号的优点是,对于修改一块线路的特性常常有用。这个修改取决于令牌是否有扩展位。这种例子之一是,一个令牌使处理视频量化值的那一级起作用。视频量化值储存在一个量化表中(典型地是一个存储器器件)。例如,一张包含64个8位任意二进制整数的表。
为了装一个新的量化表到流水线的量化器级,一个“QUANT_TABLE”令牌被送到量化器。在这一情况下,假定令牌包含65个令牌字。第一个字包含“QUANT_TABLE”码,即建立一量化表。这后面跟着64个字,它们是量化表中的整数。
当为视频数据编码时,偶尔必须传送这样一张量化表。为了实现这一功能,一个不带扩展字的QUANT_TABLE令牌可以送到量化器级。见到这个令牌并注意到它的第一个字的扩展位为低,量化器级可读出它的量化表,并建一个QUANT_TABLE令牌。这个令牌包含64个量化表值。第一个字的扩展位(它原来是LOW)变为HIGH,令牌继续带着一些HIGH扩展位,直到令牌的新的结束为止。用第64个量化表值的扩展位为LOW表明令牌的新结束。在整个系统中以这种典型的方式进行并编码成位流。
继续看这个例子,量化器根据QUANT_TABLE令牌的第一个字的扩展位是否置1,装一新量化表到它自己的存储器件,或者从存贮器件中读出它的表。所以,选择是否在一令牌中用扩展位作为第一个或最后一个令牌字的信号,取决于将要用流水线的系统。根据本发明,两种可供选择的方法都是可能的。
对优先使用的扩展位方案的另一可供选择的方法是在令牌开始包含一长度计数。这种安排在令牌很长时,可以有好处,比如,效率高。例如,在一已知应用中,假定一典型令牌是1000字长。用上面说明的扩展位方案(用附于每个令牌字的位),为了包含所有的扩展位,令牌就得需要1000个额外的位。然而,把令牌长度以二进制形式编码只需要10位。
所以,虽然长令牌有一些用处,经验表明,短令牌也有许多用处。在这里,本优先使用的扩展位方案是有利的。如果一个令牌只有一个字长,则只需一位来作此标志。然而,一个计数方案典型地就得和前面一样要求同样的10位。
长度计数方案的缺点包括以下方面:1)对短令牌效率不高;2)对令牌加了一个最大长度限制(只用10位,不能对大于1023字计数);3)在产生计数(这大概是在令牌开始时刻)以前必须已知令牌长度;4)处理令牌的每块线路可能需要有对字计数的硬件;和5)如果计数万一被破坏(由于一个数据传送错误),就不清楚是否能得到恢复。
根据本发明,扩展位方案的优点包括:1)流水线级不需要包含对每个令牌解码的线路块,因为对未被识别的令牌只考虑扩展位而能让它正确地通过;2)对所有令牌,扩展位的编码是同样的;3)对令牌长度没有限制;4)对短令牌此方案效率高(在表示令牌长度的总开销方面);5)可自然地完成纠错。如果一个扩展位被破坏,则将产生一随机令牌(当一个扩展位的破坏是从“1”变成“0”时)或者丢失一个令牌(扩展位的破坏是从“0”变成“1”)。另外,问题局限于所涉及的一些令牌。在那个令牌以后,自动地重新开始正确运行。
另外,地址字段的长度可以改变。这是非常有利的,因为它允许最常用的令牌压缩到最小的字数。这在视频数据流水线系统中同样是很重要的,因为它保证所有处理级能在全带宽连续运行。
根据本发明,为了允许地址字段的长度是可变的,地址是这样选择的,使得后面跟着随机数据的短地址永远不会和一个较长的地址相混淆。对地址字段编码优先使用的技术是被Huffman第一个发现的著名技术,因此,通用名字叫“Huffman Code”。(地址字段也用作激活一个预期的流水线级的“码”)。然而有本行一般技能的人会知道,其他编码方案也可以被成功地使用。
虽然在数字设计领域Huffman编码是大家很熟悉的,下面的例子提供一个概略的背景:
Huffman码包含由一个符号串组成的字(在数字系统的情况下,就如本发明中,符号通常是二进制数字)。码字的长度可变。Huffman码字的特殊特性在于码字是这样选择的,使得没有一个较长的码字是用形成一个较短的码字的符号开始的。根据本发明,令牌地址字段优先选用著名的Huffman编码技术(虽然不是必要的)。
在本项发明中,地址字段也优先从第一个字令牌的最高有效位(MSB)开始。(注意,MSB的指定是任意的,本方案可以修改以适应对MSB的不同指定)。地址字段延伸到邻近的一些较低有效位。在一已知应用中,如一个令牌地址要求多于一个令牌字,即超出了任一给定字中的最低有效位,此地址字段将延续到下个字的最高有效位。地址字段的最小长度是一位。
在本发明中,若干已知的硬件结构中的任一个可用来产生令牌。这类结构之一是微编程状态机。然而,大家知道的微处理器或其它设备也可用。
按照本发明,令牌方案的主要优点在于它对预想不到的需要的适应能力。例如,假使引入一个新令牌,最大的可能性是这将只影响少量流水线级。最可能的情况是,只影响两级或两块线路,即首先产生令牌的那一块和已经被新设计或修改来处理新令牌的那一块或那一级。注意,不必要去修改任何其它流水线级。更确切地说,这些级不需对它们的设计作修改就能够处理新令牌,因为它们不识别新令牌,就相应地让那个令牌不被修改地通过。
本发明有能力保持大量的已存在的、已设计的器件不受影响。这种能力有明显的优点。保持一组芯片中的某些半导体芯片完全不受该组中其它芯片改进设计的影响是可能的。从用户和芯片制造者的观点看都是有利的。即使修改意味着由于设计改变影响到所有的芯片(由于集成度的增加,一个系统内的芯片数目减少,所以这一情况变得越来越可能),在投放市场的时间方面仍比用别的办法会有可观的优势,因为同样的设计可以被重复使用。
特别注意当必须把令牌组扩展到包含两个字地址时发生的情况。甚至在这种情况,仍旧不必要修改一个已存在的设计。在流水线级中的令牌解码器会企图对这样一个令牌的第一个字解码,而会决断出它不能识别这个令牌。然后它会把未改变的令牌传送过去,利用扩展位正确地进行这一操作。它不会企图对令牌的第二个字解码(即使这包含着地址位),因为它会“假定”第二个字是它不能识别的令牌数据字段的一部分。
在许多情况下,一个流水线级或一个有联系的线路块会修改令牌。这通常地,但不是必定地,采取修改一个令牌的数据字段的方式。另外,普通的情况是修改令牌中数据字的数目,或者去除某些数据字或者添加一些新字。在某些情况,把一些令牌完全从令牌流中删去。
在大多数应用中,流水线级会典型地只对少数令牌解码(只被少数令牌起动);此级不识别其它令牌而不改变地让它们通过。在许多情况下,只有一个令牌被解码,即数据令牌字本身。
在许多应用中,一特定级的操作常常取决于它自己过去操作的结果。因此,这一级的“状态”取决于它以前的状态。换句话说,这一级取决于存储的状态信息。另外一种说法是,它必须保留一个或更多的周期以前有关它自己历史的某些信息。本发明不仅适用于在数据通路中锁存器是简单的流水线锁存器的应用,也很好地适用于包含这样的“状态机”级的流水线。
按照本发明,两线接口对上述的状态机线路的适用性是本发明的一个很大的优点。在用状态机控制数据通路的地方尤其是这样。在这种情况,上述的两线接口技术可用来保证状态机的“当前状态”保持和流水线中控制着的数据同步。
图6表示线路的一个例子的简化方框图。这个线路包含在一个为令牌地址字段解码的一个流水线级中。它表示一个具有“状态机”特性的流水线级。令牌的每个字包含一个“扩展位”,在令牌中有更多的字时,扩展位为高(HIGH),如为令牌的最后一个字则扩展位为低(LOW)。如果这是令牌的最后一个字,下一个有效数据字是新令牌的开始,所以它的地址必须被解码。在任何给定字中是否要对令牌地址解码的决定,取决于知道前面的扩展位的值。
只是为了简化的原因,两线接口(以及接受和使有效信号及锁存器)在图中未说明,所有处理线路复位的细节也被略去。和以前一样,假定为一个8位字只是为了举例,不是为了限制。
这个示范的流水线使数据位和扩展位延迟了一个流水线级。它也对数据令牌解码。当数据令牌的第一个字出现在线路的输出时,信号“DATA_ADDR”被产生并设置为“HIGH”。数据位被LDIN和LDOUT锁存器延迟。对于用于本例的8个数据位,两个锁存器中的每一个重复8次(对应一个8-输入,8-输出锁存器)。类似地,扩展位被扩展位锁存器LEIN和LEOUT延迟。
在本例中,锁存器LEPREV被提供作存储扩展位的最近状态之用。扩展位的值装入LEIN,然后在不重叠(non_overlapping)时钟相位信号PH1的下一个上升沿到来时装入LEOUT。所以,只在非重叠两相时钟的第二个一半期间,锁存器LEOUT包含当前扩展位的值。然而,锁存器LEPREV在时钟信号PH0的下一个上升沿来到时装入这个扩展位的值。这个时钟信号与扩展位输入锁存器LEIN的使能信号是同一个信号。所以,在上一PH0时钟相位期间,锁存器LEPREV的输出QEPREV会保持扩展位的值。从反相(inverting)Q输出的数据字的5位,加上锁存器LDIN不反相MD[2],与前面的扩展位值QEPREV一起,在一系列逻辑门NAND1、NAND2和NOR1中被组合。这些逻辑门的操作在数字设计技术中是大家熟知的。符号表示“N-MD[m]”表明中间数据字MD[7:0]的m位的逻辑反。用大家知道的布尔代数的技术,可以表明只有当上一次扩展位是“0”(QRPEV=“0”)和非反相Q锁存器LDIN的输出处的数据字(原来的输入字)的结构是“000001xx”时,从这个逻辑部件的输出信号SA(从NOR1的输出)是HIGH(一个“1”)。“000001xx”这个结构表示MD[7]-MD[3]这5个高次序位都是“0”,MD[2]位是“1”,在0~1位置的位为任何任意值。因此,有4个可能的数据字(“xx”有四种排列)会使SA变HIGH。SA连接到地址信号锁存器LADDR的输入端,所以也使LADDR锁存器的输出变高。换句话说,仅当四个可能合适的令牌之一出现和仅当前面的扩展位是零时,这一级才提供一个起动信号(DATA_ADDR=“1”)。上次扩展位是零,就是说上次的数据字是上次令牌字串中的最后一个字,这意味着当前令牌字是当前令牌的第一个字。
当从锁存器LEPREV来的信号QPREV为LOW时,在锁存器LDIN输出处的值便是一个新令牌的第一个字。逻辑门NAND1、NAND2和NOR1对数据令牌(000001xx)解码。然而,这个地址解码信号SA在锁存器LADDR中被延迟,使得信号DATA_ADDR与输出数据OUT_DATA和OUT_EXTN有同样的定时。
按照本发明,图7是另一个状态有关流水线级的例子,它产生LAST_OUT_EXTN信号以表明前一个输出扩展位OUT_EXTN的值。加到现在的和上一个扩展位锁存器(它们分别是LEOUT和LEPREV)上的两个使能使号(在CK输入处)之一是从逻辑门AND1得到的,使得这些锁存器只在数据有效和数据正被接收时才为它们自己装入新值(输出有效锁存器LVOUT和输出接受锁存器LAOUT的Q输出都为高)。这样,它们只保持有效扩展位而不装入与无效数据有联系的不符合逻辑的值。在图7所示的具体装置中,两线的有效/接收逻辑包括OR1门和OR2门,它们的输入信号是下游的接收信号和分别叫LVIN和LVOUT的有效锁存器的倒相输出。这列举了一种方法:如果锁存器有反相输出,图4中的NAND1/2门和INV1/2门可被取代。
虽然这是一个“状态有关”的流水线级的极其简单的例子,即,它仅依赖于一个单个位的状态,但仅当数据真正在流水线之间传送时,所有锁存器中保持的状态才会被更新。这一点是普遍正确的。换句话说,仅当数据是既有效又正在被下一级接收时,锁存器中的状态才会被更新。相应地,必须小心保证这些锁存器合适地复位。
按照本发明,令牌的产生和使用同大家知道的数据通过流水线传送的编码技术相比有几个优点。
第一,如上所述,令牌使不同长度的地址字段(并且,例如,可利用Huffman编码来)提供效率高的常用令牌的表示法。
第二,令牌长度的一致编码使得令牌的结束(因而下一令牌的开始)被正确处理(包括简单的不处理传送)。即使在给定的流水线级中令牌解码器线路不能识别的令牌也可正确处理。
第三,对不被识别的令牌(即不改变地传送它们)处理的规则和硬件结构使得流水线中的一级可以与不是它紧邻的下游级之间通讯。这也增加了流水线的可扩充能力和效率高的适应能力,因为它使将来改变令牌组时不需要对现有的流水线级作大规模地重设计。本发明的令牌在和上面和下面都说到过的两线接口一起使用时更是特别有用。
作为上述的一个例子,图8a和8b取在一起(下面集体地称之为图8),描述一个流水线级的方块图。其功能如下。如果这级正在处理一预定的令牌(在此例中已知为数据令牌),则它会复制令牌中的每个字,除掉第一个字以外。第一个字中包含数据令牌的地址字段。另一方面,如果这级正在处理任何其它类型的令牌,它会删除每个字。在输出端的最终效果是只出现数据令牌而且这些令牌中的每个字重复两次。
本示例系统中的许多组成部分可能和那些已描述过的示于图4、6和7中的简单得多的结构中的组成部分一样。这说明了一个很大的优点。更加复杂的流水线级会仍旧享有同样的灵活性和伸缩性的好处,因为同样的两线接口可以不需改制或很少改制而被使用。图8所示的数据复制级仅是在任何已知应用中流水线级能够完成的无数种不同类型的操作的一个例子。然而,这个“复制级”是能够形成“瓶颈”的级,使得按照这个具体实现,流水线会“挤在一起”。
“瓶颈”可以是任何级,或者它要相对长的时间来完成操作,或者在流水线中它生成的数据比它接收的更多。这个例子也说明,按照这个具体实现,两线接收/有效接口可以很容易地适应不同的应用。
图8所示的复制级也有两个锁存器LEIN和LEOUT,如同图6所示的例子,它们分别把在这一级的输入端和输出端的扩展位的状态锁住。如图8a所示,输入扩展位锁存器LEIN和输入数据锁存器LDIN及使有效信号IN_VALID是时钟同步的。
为了易于参阅,包含在复制级的各种锁存器和它们各自的输出信号配对如下:
在复制级,从数据锁存器LDIN的输出,形成被称作MID_DATA的中间数据。这个中间数据字仅当中间接受信号(在图8a中标为“MID_ACCEPT”)设置为HIGH时,才装入数据输出锁存器LDOUT。
图8中在接收锁存器LAIN和LAOUT下面所示的线路系统是被加到基本流水线结构的线路,以产生各种内部控制信号。这些信号用来复制数据,包括“DATA_TOKEN”信号,它表明线路当前正在处理的是一个有效数据令牌,还包括NOT_DUPLICATE信号,它用来控制数据的复制。当线路正在处理数据令牌时,NOT_DUPLICATE信号在一个HIGH和一个LOW状态之间变动,这使令牌中的每个字被复制一次(但不是多次)。当线路不是正在处理一个有效数据令牌,则NOT_DUPLICATE信号保持在HIGH状态。相应地,这意味着正在处理的令牌字不被复制。
如图8a说明,中间数据字8位中的较高的6位和从锁存器LI1来的输出信号形成逻辑门组NOR1、NOR2、NAND18的输入。从逻辑门NAND18来的输出信号标明为S1。用众所周知的布尔代数可以看出,仅当输出信号QI1是“1”和NID_DATA字有以下结构:“000001xx”时,信号S1才是“0”。结构“000001xx”表明较高的五位都是“0”,MID_DATA[2]是“1”,在MID_DATA[1]和MID_DATA[0]位置上有任何任意值。所以信号S1充当“令牌识别信号”,仅当MID_DATA有一预定的结构和从锁存器LT1来的输出是“1”时S1才是低。锁存器LI1和它的输出QI1的特性进一步说明如下。
锁存器LO1完成对中间的扩展位(标为“MID_EXTN”和作为信号S4)的最后值锁存的功能,在时钟相伴随PH0的下一个上升沿来到时它的把这个值装入锁存器LI1。LI1的输出是位QI1,它也是形成信号S1的令牌解码逻辑组的输入之一。如上面说明的,信号S1只有在信号QI1是“1”(并且MID_DATA信号有预定的结构)时,才可以降低为“0”。所以,每当上一扩展位是“0”,表明上一令牌已结束时,信号S1才可降低到“0”。所以,MID_DATA字是一个新令牌的第一个数据字。
锁存器LO2和LI2和与非门NAND20、NAND22一起为DATA_TOKEN信号形成存储器。在正常情况,NAND20输入端的信号QI1和NAND22输入端的信号S1两者都会是在逻辑“1”状态。再用布尔代数技术可以看出,在这一情况下这些与非门的工作方式和倒相器一样,即锁存器LI2的输出信号QI2在NAND20中倒相,然后这个信号又被NAND22倒相,形成信号S2。在这一情况下,因为通路中有两次逻辑倒相,信号S2会有与QI2相同的值。
也可看出DATA_TOKEN信号在锁存器LO2的输出端形成对锁存器LI2的输入。作为结果,只要QI1和S1两者都是HIGH的情况保持不变,信号DATA_TOKEN就会保持它的状态(无论是“0”或“1”)。即使时钟信号PH0和PH1正在对锁存器(分别是LI2和LO2)锁存时,这也是正确的。只有当信号QI1和S1两者都是“0”或其中之一是“0”时,DATA_TOKEN的值才能改变。
如早些时说明的,当前面的扩展位是“0”时,信号QI1总是“0”。所以每当MID_DATA值是令牌的第一个字时(所以也包括令牌的地址字段),信号QI1总是“0”。在这一情况,信号S1可以是“0”或者“1”。如早些时说明的,如果MID_DATA字有在本例中指明为“数据”令牌的预定结构,信号S1就会是“0”。如果MID_DATA字有其它任何结构(指明令牌是某种别的令牌,不是一个数据令牌),S1就会是“1”。
如果QI1是“0”和S1是“1”,这表明有某个不同数据令牌的令牌。在数字电子学领域,众所周知,NAND20的输出必定是“1”。与非门NAND22会把它反相(如前面说明的),所以信号S2将是“0”。作为结果,在下一个PH1时钟相位开始时,这个“0”值会被装入锁存器LO2,DATA_TOKEN信号会变成“0”,表明线路正在处理的不是数据令牌。如果QI1是“0”和SO是“0”,从而表明是一个数据令牌,于是信号S2将是“1”(不管从NAND20输出来的NAN22其它输入是什么)。结果,在下一个PH1时钟相位开始时,这个“1”值会被装入锁存器LO2,DATA_TOKEN信号会变成“1”,表明线路正在处理一个数据令牌。
NOT_DUPLICATE信号(输出信号QO3)类似地在时钟PH0的下一个上升沿到来时被装入锁存器LI3。锁存器LI3的输出信号QI3和输出信号QI2在逻辑门NAND24中被组合成信号S3。和以前一样,布尔代数能被用来表明,仅当两个信号QI2和QI3都有值″1″时,信号S3才会是“0”。如果信号QI2变成“0”,即数据令牌信号是“0”,则信号S3变成“1”。换句话说,如果没有一个有效数据令牌(QI2=0)或数据字不是一个复制品(QI3=0),则信号S3变高。
现在假定,在多于一个时钟信号期间,数据令牌信号保持为高。因为NOT_DUPLICATE信号(QO3)“反馈”到锁存器LI3,并会被逻辑门NAND24倒相(因为它的另一个输入QI2保持HIGH),输出信号QO3将在“0”和“1”之间跳变。然而如果没有有效数据令牌,信号QI2会是“0”,而信号S3和输出QO3会被强迫为HIGH,直到DATA_TOKEN信号再次变成“1”为止。
输出QO3(NOT_DUPLICATE信号)也被反馈并在一系列逻辑门(NAND16和INV16,它们共同形成与门)中与接受锁存器LAIN的输出QA1相结合。仅当QA1和Q03两者的值都是“1”时,逻辑门的输出才是“1”。如图8a所示,与门(逻辑门NAND16后面跟着逻辑门INV16)的输出也形成接收信号IN_ACCEPT。如上面描述过的,这个信号用于两线接口结构。
接收信号IN_ACCEPT也用作对锁存器LDIN,LEIN和LVIN的使能信号。结果,如果NOT_DUPLICATE信号是低,接收信号IN_ACCEPT也会是低,而所有这三个锁存器会被禁止,会在它们的输出端保持存贮的值。在NOT_DUPLICATE信号变高以前,本级将不接收新数据。为了强迫接收锁存器LAIN的输出为高,除了前述的一些要求外,还以此作补充。
只要有一个有效数据令牌(DATA_TOKEN信号QO2是“1”),信号QO3就会在HIGH和LOW状态之间跳变,使得输入锁存器能够并至多可能在两个时钟相位PH0和PH1各自的隔周完整周期内接受数据。用“HIGH”OUT_ACCEPT信号表明的下一级已准备好接收数据,这个附加条件当然必须仍旧被满足。所以输出锁存器LDOUT要把同样的数据字放到输出总线OUT_DATA上,这至少持续两个完全时钟周期。仅当数据令牌有效(QO2 HIGH),使有效信号QVOUT又是HIGH时,OUT_VALID信号才会是“1”。
信号QEIN是对应MID_DATA的扩展位。它和信号S3在一系列逻辑门(INV10和NAND10)中被组合而形成信号S4。在一个数据令牌出现期间,每个数据字MID_DATA被重复。方法是把它装入输出锁存器两次。在这样做的第一次期间,由于NAND10的作用,S4会被迫为“1”。在MID_DATA被装入LDOUT形成OUT_DATA[7:0]的同时,信号S4被装入锁存器LEOUT,形成OUTEXIN。
所以,给定的MID_DATA第一次被装入LEOUT时,有关的OUTEXTN会被迫变高,而在第二次时,OUTEXTN会和信号QEIN一样。现在考虑这种情况,在一个令牌的最后字期间已知QEIN是低。在第一次期间,MID_DATA装入LDOUT,OUTEXTN会是“1”;而在第二次期间OUTEXTN会是“0”,表明令牌的真正结束。
使有效锁存器LVIN的输出信号QVIN和信号QI3一起在类似的门组合(INV12和NAND12)中被组合,形成信号S5。用已知的布尔技术可以看出,不论在使有效信号QVIN为高,还是在信号QI3为低(表明数据是复制品)时,信号S5是高。信号S5装入使有效输出锁存器LVOUT,同时,MID_DATA装入LDOUT,中间扩展位(信号S4)装入LEOUT。信号S5和信号QO2(数据令牌信号)也在逻辑门NAND30和INV30中组合,形成输出使有效信号OUT_VALID。如早些时所说的,仅当有效令牌和使有效信号QVOUT为高时,OUT_VALID才为高。
在本发明中,MID_ACCEPT信号和信号S5在一系列逻辑门(NAND26和INV26)中组合,形成信号S6。这些逻辑门实现大家知道的与功能。信号S5用作对锁存器LO1,LO2和LO3的两个使能信号之一。当MID_ACCEPT信号为高以及不论使有效信号QVIN为高还是令牌是一个复制品(QI3是“0”)时,信号S6上升到“1”。所以,如果信号MID_ACCEPT为高,当时钟信号PH1为高,每当有效输入数据装到这一级的输入或当被锁存的数据是复制品时,锁存器LO1~LO3会被使能。
从以上讨论可以看出,在图8a和8b中所示的这一个级能在使有效信号和接收信号的控制下接收和传送数据,如在前面的具体装置中那样。但有一个例外,就是在输入方的接收锁存器LAIN的输出信号和跳变的复制信号组合,使得在新字将被接收以前,一个数据字会被输出两次。
当然,各种逻辑门,诸如NAND16和INV16,可以用等效的逻辑电路(在这一情况,一个单个的与门)替换。类似地,例如,如果锁存器LEIN和LVIN有倒相输出,倒相器INV10和INV12就是不必要的。更确切地说,门NAND10和NAND12的相应输入可以直接接到这些锁存器的倒相输出端。只要完成合适的逻辑操作,这级就能在同样的状态下工作。数据字和扩展位仍旧会被复制。
必须注意,示例级所完成的复制功能会不被完成,除非令牌的第一个数据字在字的第三个位置是“1”,并且在5个高次序位上都是“0”。(当然,选择别的逻辑门和互连而不是如图中所示的NOR1,NOR2,NAND18逻辑门,可以很容易地改变和设置所需的模式)。
另外,如图8所示,在整个令牌期间,OUT_VALID信号可被迫为低,除非第一个数据字有上述的结构。其效果是,除了产生复制过程的那一个令牌外,所有的令牌都会从令牌流中删除,因为连接到输出端(OUTDATA,OUTEXIN和OUTAVLID)的一个器件不能把这些令牌字作为有效数据来识别。
同前,本级的使有效锁存器LVIN,LVOUT两者都可用一根单个导线NOT_RESETO和用一个在下游锁存器LVOUT上的单个使复位输入R来复位。同时,复位信号反向传播使上游的使有效锁存器在下个时钟周期被强迫变低。
应当注意,在图8所示的例中,包含在数据令牌中的数据的复制只用作一个方法的例子。在这个方法中,线路可处理ACCEPT和VALID信号,使不断离开流水线级的数据比不断到达输入端的数据更多。类似地,图8中的例子排除所有非数据令牌,纯粹是作如方法的一个说明,在这个方法中线路可以操纵VALID信号从流中除去数据。然而,在大多数典型的应用中,流水线级能让它未识别的任何令牌简单地不改变地通过,使得在流水线再下面的其它级在需要时可以对它们起作用。
图9a和9b取在一起说明一个定时图解的例子。这个图解是为图8a和8b中所示的数据复制线路而作的。同前,定时图解表明两相时钟信号之间的关系,各种内部和外部控制信号,在本级输入方和输出方之间数据被锁存的方式和数据被复制的方式。
现在更详细地参考图10,图中表示根据本发明的一个方面而提供的可重构处理级。
输入锁存器34在第一个总线31上收到输入。输入锁存器的第一个输出通过线32送到令牌解码子系统33。输入锁存器的第二个输出通过线35送到处理单元36作为其第一个输入。令牌解码子系统33的第一个输出通过线37送到处理单元36作为其第二个输入。令牌解码子系统33的第二个输出通过线40送到动作识别单元39。动作识别单元39也通过线46从寄存器43和44接收输入。寄存器43和44总起来保存机器的状态。这个状态由以前接收的令牌的历史决定。动作识别单元39的输出通过线38送到处理单元36作为其第三个输入。处理单元36的输出送到输出锁存器41。输出锁存器41的输出送到第二总线42。
现在参看图11,起始码解码器(SCD)51通过两线接口52接收输入。这个输入可以或者是数据令牌形式或者是数据流中的数据位。起始码解码器51的第一个输出通过线53送到第一个先进先出缓存器(FIFO)54。第一个FIFO 54的输出合乎逻辑地通过线55送到Huffman解码器56作为其第一输入。起始码解码器51的第二个输出通过线57送到DRAM接口58作为其第一个输入。DRAM接口58通过线60也接收从缓存器管理器59来的输入。用DRAM接口58通过线61向外部DRAM(图中未画出)发送信号或接收信号。DRAM接口58的第一个输出通过线62送到Huffman解码器56作为其第一个物理输入。
Huffman解码器56的输出通过线63作为一个输入送到数据索引单元(ITOD)64。Huffman解码器和ITOD 64作为一个单个逻辑单元一起工作。ITOD 64的输出通过线65送到算逻单元(ALU)66。ALU 66的第一个输出通过线67送到只读存储器(ROM)状态机68。ROM状态机68的输出通过线69送到Huffman解码器56作为其第二个物理输入。ALU66的第二个输出通过线70送到令牌格式化器(T/F)71。
本发明的T/F 71的第一个输出72通过线72送到第二个FIFO 73。第二个FIFO 73的输出通过线74送到逆向造型器75作为其第一个输入。T/F 71的第二个输出通过线76送到DRAM接口58作为其第三个输入。DRAM接口58的第三个输出通过线77送到逆向造型器75作为其第二个输入。逆向造型器75的输出通过线78作为一个输入送到逆向量化器79。逆向量化器79的输出通过线80作为输入送到逆向zig_zag(IZZ)81。IZZ 81的输出通过线82作为输入送到逆向离散余弦变换器(IDCT)83。IDCT 83的输出通过线84送到时间解码器(未画出)。
现在更详细地参看图12,按照本发明的一个时间解码器被展示。岔口91通过线92接收IDCT 83(示于图11)的输出作为它的输入。作为岔口91的第一输出的控制令牌,例如移动矢量等等,通过线93送到地址发生器94。为了计数的目的,数据令牌也送到地址发生器94。作为岔口91的第二个输出,数据通过线95送到FIFO 96。然后FIFO 96的输出通过线97作为第一个输入送到加法器98。从地址发生器94的输出通过线99作为第一个输入送到DRAM接口100。用DRAM接口100通过线101对外部的DRAM(未示出)发送信号或接收信号。DRAM接口100的第一个输出通过线102送到预测滤波器103。预测滤波器103的输出通过线104作为第二个输入送到加法器98。加法器98的第一个输出通过线105送到输出选择器106。加法器98的第二个输出通过线107作为第二个输入送到DRAM接口100。DRAM接口的第二个输出通过线108作为第二个输入送到输出选择器106。输出选择器106的输出通过线109送到视频格式化器(在图12中未示出)。
现在参看图13,岔口111通过线112从输出选择器106(示于图12)接收输入。作为岔口111的第一个输出,控制令牌通过线113送到地址发生器114。地址发生器114的输出通过线115作为第一输入送到DRAM接口116。作为岔口111的第二个输出,数据通过线117作为第二个输入送到DRAM接口116。用DRAM接口116通过线118对外部的DRAM(未示出)发送或接收数据。DRAM接口116的输出通过线119送到一个显示管道120。
从以上描述显见必要时每根线可包含许多根线。
现在参看图14a,在MPEG标准中,一幅图象131作为一片(slic)或多片132来编码。每片132又包含许多块133,并一行一行地编码,在每行中从左到右。如图所示,每片132可以恰好复盖块133的一整行,或少于一行如块133的B或D,或多行如块133的C。
参看图14b,在JPEG和H.261标准中,采取了常用中间格式(CIF),在那里一幅图象141作为6行来编码,每行包含两个块组(GOBS)142。每个块组又由数目不确定的块143内的3行或6行组成。每个GOB 142按箭头144所指的曲折方向编码。各块组142依次逐行处理,每行从左到右。
现在参看图14c,可以看出,对MPEG和CIF两者,编码器的输出都是以数据流151的形式表示。解码器接收这个数据流151。于是解码器可根据编码的格式重建图象。为了使解码器识别每种标准的起始点和结束点,数据流151被分成长度为33块的一些段。
参看图15的Venn图,它表明根据本发明的Huffman解码器56(示于图11)作出的表选(table selection)值的可能范围。MPEG解码器可能的值和H.261解码器可能的值有些是重叠的,表明一个单个的表选择能对某些MPEG格式和某些H.261格式两者都解码。同样,MPEG解码器可能的一些值和JPEG解码器可能的一些值重叠,这表明一个单个表选择会对某些JPEG格式和某些MPEG格式两者都解码。另外,图中表明H.261的值和JPEG的值不重叠,这表明不存在对两种格式都能解码的单个表选择。
现在更详细地参看图16,它是根据本发明实践的可变长图象数据的图解表示。要处理的第一幅图象161包含第一个PICTURE_START令牌162,第一个不定长图象信息163,和第一个PICTURE_END令牌164。要处理的第二幅图象165包含第二个PICTURE_START令牌166,第二个不定长图象信息167,和第二个PICTURE_END令牌168。PICTURE_START令牌162和166对处理器表明图象161和165的开始。同样,PICTURE_END令牌164和168对处理器指明图象161和165的结束。这样使得处理器可以处理可变长的图象信息163和167。
参看图17,分割器(split)171通过线172接收输入。分割器171的第一个输出通过线173送到地址发生器174。地址发生器174产生的地址通过线175到DRAM接口176。用DRAM接口176通过线177对外部DRAM(未示出)发送信号或接收信号。DRAM接口176的第一个输出通过线178送到预测滤波器179。预测滤波器179的输出通过线180作为第一输入送到加法器181。分割器171的第二个输出通过线182作为输入送到先进先出(FIFO)183。从FIFO 183的输出通过线184作为第二输入送到加法器181。加法器181的输出通过线185送到写信号发生器186。写信号发生器186的第一个输出通过线187送到DRAM接口176。写信号发生器的第二个输出通过线188作为第一个输入送到读信号发生器189。DRAM接口176的第二个输出通过线190作为第二个输入送到读信号发生器189。读信号发生器189的输出通过线191送到视频格式化器(在图17中未画出)。
现在参看图18来说明预测滤波过程。一个前向图象201通过线202作为第一输入送到加法器203。一个后向图象204通过线205作为第二输入送到加法器203。加法器203通过线206输出。
参看图19,一个片211包含一个或多个宏块212。依次,每个宏块212包含四个亮度块213和两个彩色信号块214,并包含一个原来的16×16象素块的信息。四个亮度块213的每一个和两个彩色信号块214的大小都是8×8象素。四个亮度块213包含从原来的16×16象素块一个象素对一个象素地映射得来的亮度(Y)信息。一个彩色信号块214包含蓝彩色信号(CU/b)的色度等级的信息,另一个彩色信号块214包含红彩色信号(CV/r)的色度等级的信息。每个色度等级被二次抽样(subsampled)使得每个8×8彩色信号块214包含整个原来的16×16象素块彩色信号的色度等级。
现在参看图20,起始码解码器的结构和功能就会变得显而易见。值寄存器221通过线222接收图象数据。线222是8位宽,它允许每次并行传送8位。值寄存器221的输出以串行方式通过线223送到解码寄存器224。解码寄存器224的第一输出通过线226送到检测器225。线226是24位宽,它允许每次并行传送24位。检测器225检测映象是否存在。映像对应于一个与标准无关的起始码,以23个“0”值跟着一个单个的“1”值表示。8位数据值的映象跟在有效起始码映象后面。在检测到起始码映象时,检测器225通过线227传送一个起始映象到值解码器228。
解码寄存器224的第二输出以串行方式通过线229到值解码移位寄存器230。值解码移位寄存器230能保存15位长的数据值映象。跟在起始码映象后面的8位的数据值被移位到值解码移位寄存器230的右边,如区域231所指。这种处理消除重叠的起始码映象,讨论见后。值解码移位寄存器230的第一输出通过线232送到值解码器228。线232是15位宽,它允许每次并行传送15位。值解码器228用第一查找表(未示出)对值映象解码。值解码移位寄存器230的第二输出传送到值解码器228,它通过线235传送一个标识到令牌索引变换器234。值解码器228也通过线236传送信息到令牌索引变换器234。信息或者是数据值映象或者是起始码索引映象,它是从第一查找表得到的。标志表明传送的是哪一种信息形式。线236是15位宽,它允许每次并行传送15位。虽然本发明中选择的宽度为15位,可以看到其它长度的位数也可用。令牌索引变换器234用第二查找表(未示出)把信息变换成令牌映象。第二查找表类似用户手册已给出的表12-3。然后,由令牌索引变换器234产生的令牌映象通过线237输出。线237是15位宽,它允许每次并行传送15位。
参看图21,包含一些各别位242的数据流241输入到起始码检测器(在图21中未示出)。起始码检测器检测到第一个起始码映象。然后起始码检测器接收第一个数据值映象244。在处理第一个数据值244以前,起始码检测器可能检测到第二个起始码映象245,它和第一数据值映象244在一段长度246上重叠。如果发生这种情况,起始码检测器不处理第一数据值映象244,而接收和处理第二数据值映象247。
现在参看图22,标识发生器251通过线252作为第一输入接收数据。线252是15位宽,它允许一次并行传送15位。标识发生器251也通过线253接收标识作为第二输入,并通过第一个两线接口254接收输入有效映象。标识发生器251的第一输出通过线255送到输入有效寄存器(未示出)。标识发生器251的第二输出通过线256送到解码指针257。解码指针257产生四个输出;一个图象起始映象通过线258传送,一个图象号映象通过线259传送,一个插入映象通过线260传送,和一个替代映象通过线261传送。头标发生器263用查找表产生替代映象,它通过线262b传送。一个额外的字发生器264用MPU产生插入映象,它通过线262c传送。线262a和线262c合并成线262,它是输出锁存器265的第一输入。输出锁存器265通过线266传送数据。线266是15位宽,它允许一次并行传送15位。
输入有效寄存器(未示出)通过线268传送一个映象作为第一输出送到第一或门267。插入映象通过线269作为第二输入送到第一或门267。第一或门267的输出通过线271作为第一输入送到第一与门270。取消映象(remove image)的逻辑反通过线272作为第二输入送到第一与门270,又通过线273作为第二输入送到输出锁存器265。输出锁存器265通过第二个两线接口274传送输出有效映象。用输出接收锁存器275通过第二两线接口274接收输出接收信号。输出接收锁存器275的输出通过线276送到输出接收寄存器(未示出)。
输出接收寄存器(未示出)通过线278传送一个映象作为第一输入送到第二或门277。输入有效寄存器输出的逻辑反通过线279作为第二输入送到第二或门277。取消映象通过线280作为第三输入送到第二或门277。第二或门277的输出通过线282作为第一输入送到第二与门281。插入映象的逻辑反通过线283作为第二输入送到第二与门281。第二与门281的输出通过线284送到输入接收锁存器285。输入接收锁存器285的输出通过第一两线接口254传送。
表600
格式 接收的映象 产生的令牌
1. H.261 SEQUENCE START SEQUENCE START
MPEG PICTURE START GROUP START
JPEG (None) PICTURE START
PICTURE DATA
2. H.261 (None) PICTURE END
MPEG (None) PADDING
JPEG (None) FLUSH
STOP AFTER PICTURE
表600表示在某些与机器无关的控制令牌中,没有标准信号与有标准信号之间的关系。如该表所示,起始码检测器51对映象的检测产生一系列机器无关控制令牌。列在“接收的映象”栏的每个映象,启动列在“产生的令牌”栏的机器无关控制令牌的产生。所以,如表600第一行所示,在H.261处理期间每当收到一个“序列起始”映象或在MPEG处理期间每当收到一个“图象起始”映象时,就产生整组四个控制令牌,每个令牌后面跟着它的相应的一个数据值或一些数据值。另外,如表600的第二行表示,第二组的四个控制令牌在合适的时间产生,不管起始码检测器51收到的映象是什么。
表601
显示次序:I1 B2 B3 P4 B5 B6 P7 B8 B9 I10
传送次序:I1 P4 B2 B3 P7 B5 B6 I10 B8 B9
如表601行1所示,它表明传送的图象和显示的图象之间的定时关系,图象帧按数字次序显示。然而,为了减少帧的数目它必须存在存贮器中,一些帧以不同次序传送。从基帧(I帧)开始分析是有用的。I1帧是按照待显示的次序传送的。下一个预测帧(P帧)P4然后被传送。然后,传送要在I1帧和P4帧之间显示的任何双向内插帧(一些B帧),用帧B2和B3表示。这就使被传送的B帧能够以过去帧(前向预测)为基准,或者以末来帧(后向预测)为基准。在传送了所有的要在I1帧和P4帧之间显示的B帧以后,传送下一个P帧P7。下面,所有要在P4帧和P7帧之间被显示的B帧,对应为B5和B6,被传送。然后,下一个I帧,I10,被传送。最后,所有要在P7帧和I10帧之间显示的B帧,相应为帧B8和B9,被传送。这个传送帧的次序在任一时刻只要求在存储器中保持两帧,而不要求解码器等待下一个P帧或I帧的发送以显示一个相邻的B帧。
更多的关于本发明的结构和操作,还有特性、目的和优点等方面的信息,在随后对发明直观的具体化的更详细的描述中,对本行有一般技术的人会变得更显而易见。为了使说明清楚和方便的目的,将它归类和表示如下:
1、多标准配置
2、JPEG静止图象解码
3、活动图象去压缩
4、RAM存储器图
5、位流特性
6、可重构处理级
7、多标准编码
8、多标准处理线路—操作的第二方式
9、起始码解码器
10、令牌
11、DRAM接口
12、预测滤波器
13、寄存器的存取
14、微处理器接口(MPI)
15、MPI读时序
16、MPI写时序
17、锁眼地址定位
18、图象结束
19、清除操作
20、清除功能
21、图象后停止
22、多标准搜索方式
23、逆向造型器
24、逆向量化器
25、Huffman解码器和程序分析器
26、各种离散余弦变换器
27、缓存器管理器
1、多标准配置
因为各种压缩标准,即JPEG,MPEG和H.261是众所周知的,如作为例子在前面叙述过的美国专利NO.5,212,742,那些标准的详细说明这里不再重复。
如前面所说,本发明能够对许多种不同编码的数据位流去压缩。在每个不同的编码标准中,需要某些形式的输出格式化器去取数据。这些数据出现在单独操作空间解码器输出端,或者出现在一个空间解码器和时间解码器组合操作操作的串连输出端,(如本文中随后更加详细叙述的)。两解码器还对该输出重新格式化,以便使用和在计算机或其它显示系统(包括视频显示系统)上显示。这个格式化的实现因编码标准和/或所选择的显示类型而变化很大。
根据本发明,在第一个具体实现中,如前面描述的参考图10~12,地址发生器用来存储一个已格式化的数据块。这个数据块或者是第一解码器(空间解码器)的输出或者是第一解码器(空间解码器)和第二解码器(时间解码器)的组合输出。地址发生器还用于以光栅的顺序将经过解码的信息向存贮器存和/或取。下文描述的视频格式化器提供大量的输出信号的组合。
本发明优先的多标准视频解码器具体实施中,空间解码器和时间解码器要求既实现MPEG编码信号又实现H.261视频解码系统。在两个设备上的DRAM接口是可配置的,使得当工作在一些小图象格式和低编码数据率时所需的DRAM量可以减少。这些DRAM的重构在下文DRAM接口中将进一步描述。典型情况下,每个时间解码器和空间解码器线路要求一个单个的4兆字节DRAM。
本发明的空间解码器完成在一个单幅图象内所有必需的处理。这就减少一幅图象内的冗余度。
时间解码器减少主题图象(subject picture)和在主题图象到达前到达的一幅图象之间的冗余度,还减少主题图象和在它到达以后到达的一幅图象之间的冗余度。时间解码器的一个方面是要提供一个地址解码网络,它处理复杂的寻址需要,以最少的电路数目,高速度和改进的精确度读出与所有这些图象有关的数据。
如前所述,参考图11,数据到来前,先通过起始码解码器,位于Huffman解码器和分析器(parser)之前的FIFO寄存器再通过第二FIFO寄存器,逆向造型器,逆向量化器,逆向zigzag和逆向DCT。这两个FIFO不需要放在芯片上。在一种具体实施中,数据不流过在芯片上的FIFO。数据加到DRAM接口,FIFO-IN存贮寄存器和FIFO-OUT寄存器。两者都是在芯片外的。这些操作完全与标准无关的寄存器在本文中随后会更详细地叙述。
示于图11的大多数子系统和大多数级是真正与所用特定标准无关的,它们包括DRAM接口58,产生DRAM接口地址的缓存器管理器59,逆向造型器75,逆向zig-zag 81,和逆向DCT 83。在Huffman解码器和分析器之内的与标准无关的单元包括ALU 66和令牌格式化器71。
现在参考图12,与标准无关的单元包括DRAM接口100,岔口91,FIFO寄存器96,加法器98和输出选择器106。与标准有关的单元是地址发生器94,它在H.261和MPEG中是不同的,还有预测滤波器103,它是可重构的,有能力在H.261和MPEG两种标准都工作。JPEG数据能够完全不改变地流过整个机器。
图13描述视频格式化器芯片的一个高层框图。芯片的很大部分与标准无关。受标准影响的仅有的一些项目是在H.261情况下数据写入DRAM的方式,这种方式与在MPEG或JPEG时不同;并且在H.261中不必要对每个单一图象编码。有某些定时信息称为时间标准(temp-oral reference),当图象要被显示时它提供某些有关信息。这件事也用视频格式化器中逻辑的地址发生类型来处理。
在视频格式化器中实现的线路剩余部分与所用的特定压缩标准完全无关,这些部分是:所有的彩色空间变换,过采样(up-sampl-ing)滤波器和所有的γ校正RAM。本发明的起始码解码器是与压缩标准有关的,它必须对位流中每种标准不同的起始码模式加以识别。例如,H.261有一个16位起始码,MPEG有一个24位起始码而JPEG用标记码,它与其它起始码完全不同。一旦起始码解码器已经识别出那些不同的起始码,它的操作实质上就与压缩标准无关。例如,在搜索期间,除了识别不同类型的标记的线路以外,在三种不同的压缩标准之间大部分操作是很相似的。
下一个单元是状态机68(图11)位于Huffman解码器和分析器之内。这里,用于三个压缩标准的每一个的实际线路是差不多全同的。事实上,操作中受标准影响的唯一元件是机器的复位地址。如果只是分析器被复位,则它对应每个标准跳到不同的地址。实际上,被识别的有四个标准。这些标准是H.261,JPEG,MPEG和另外一种。在此第四标准中,分析器引入一段用于测试的码。这说明线路在差不多每个方面是全同的,但差别在于对每种标准的微码程序。所以当一个用H.261操作的程序正在运行时,和当一个不同标准的程序正在运行时,它们之间没有重叠。对JPEG这同样保持正确,JPEG是第三个完全独立的程序。
下一个单元是Huffman解码器56,它和数据索引单元64一起工作。那两个单元互相合作完成Huffman解码。这里不管压缩标准是哪种,对Huffman解码用的算法是一样的。不同点在于用哪一种表和数据进入Huffman编码器是否倒相。Huffman解码器本身还包含状态机,它理解编码标准的某些方面。这些不同操作的选择对应于从分析器状态机来的一个指令。分析器状态机对三种压缩标准的每一个用不同的程序工作,并在和运行标准相一致的不同时间向Huff-man解码器发出正确的命令。
在芯片上最后的一个单元是与压缩标准有关的逆向量化器79,在这里,逆向量化器为每种不同的标准所完成的运算是不同的。在这点上,一个CODING_STANDARD令牌被解码,逆向量化器79记住正在运行的是哪一种标准。然后,在那个事件以后但在另一个CODING_STANDARD可能出现以前,随后的数据令牌就用被逆向量化器内部已记住的CODING_STANDARD指明的方式来处理。在更详细的描述中,有一张表说明不同标准中的不同参数和哪种线路对应那些不同参数或计算。
在H.261中,对图12和图13中所示的每个子系统,地址的产生有所不同。在图11中,在Huffman解码器前、后的两个FIFO的地址产生,不因编码标准而改变。即使在H.261中,在那个芯片上发生的地址的产生也是不改变的。实质上,这些标准之间的差别是与MPEG和JPEG的差别,有一个若干宏块的组织,这些宏块是以直线行方式水平地从图象的一边伸展到另一边。在图14a中可以最好地观察到,第一个宏块A覆盖一整行。宏块B覆盖少于一行。宏块C覆盖多行。在MPEG中的分割是分成若干片132,一片可以是一个水平行A,或者可以是水平行的一部分B,或者它也可以从一行扩展到下一行,C。这些片132的每一个组成宏块的一行。
在H.261中,组织相当地不同,因为图象被分成一些块组(GOB)。一个块组是三行宏块高乘11宏块宽。如果是一幅CIF图象,有12个这样的块组。然而,它们不是一个放在另一个上面这样组织的。而是有两个块组互相靠着,并且有6个高,即垂直方向有6个块组,水平方向有2个块组。
在所有其它标准中,当进行寻址时,宏块是按上述次序编址的。更具体地,寻址沿着行进行,到达行尾后开始下一行。在H.261中,在一个块组内,块的次序和描述的一样,但在移向下一个块组时,次序差不多是之字形(zig-zag)。
本发明提供线路处理后者的影响。在空间解码器和视频格式化器中地址的产生就是那样因H.261而变化的。每当信息写到DRAM时就完成这样的变化。它是用前面所说的地址发生序列的知识来写的,所以序列在RAM中物理定位的位置,和假如这是一幅同样大小的MPEG图象时应在的位置是恰好一样的。因此,从DRAM读数据的所有地址产生线路,例如,当形成预测时,不必要理解那是H.261标准,因为信息在存储器中的物理位置和假如是在MPEG序列中它应在的位置是一样的。所以在所有情况下,只有数据的写被影响。
在时间解码器中,对H.261有抽象化,电路系统自认为某些事情和实际上正在发生的不一样。那就是,每个块组在概念上被延伸出去,使得它不是一个11×3宏块的矩形,而是宏块被延伸出去成为一个33块长度(见图14c)的块组,它的高是一个宏块。由于那样做了,与在时间解码器中为计算通过的块组所用的计数机构,完全相同地也用于MPEG。
H.261块组线路设计的方法和MPEG片线路设计方法相对应。当H.261数据在起始码解码器以后被处理,每个块组前面有一个slice_start_code。下一个块组前面有下一个slice_start_code。为了对此结构从头到尾计数而在时间解码器内部进行着的计数,自认为这是一个宏块高,33个宏块长的块组。这就足够了,虽然电路也每隔11个宏块进行计数。当它数到第11个宏块或第22个宏块,它使某些计数器复位。这用另一个计数器的简单线路来实现,这个计数器对每个宏块计数,当它得到11时,它复位为零。微码询问并做那个工作。本发明的时间解码器中的所有线路就宏块的物理布局来说实质上是与压缩标准无关的。
在多标准适应性方面,有许多不同的表和线路,在合适的时候为合适的标准选择合适的表。每种标准有许多表;电路系统在任何给定时间从表集中作选择。在任何一种标准中,电路一次选择一张表,另一张表则在另一个时刻选择。在不同的标准中,电路选择不同的表集。在那些表之间有某些交叉,如在前面讨论图15时所指出的。例如,用在MPEG中的一张表也用于JPEG。这些表不是完全孤立的集。图15说明一个H.261集,一个MPEG集和一个JPPEG集。注意,在H.261集和MPEG集之间有一个大得多的重叠。就他们所用的表而言,两集是相当共同的。在MPEG和JPEG之间有少量重叠,在H.261和JPEG之间完全不重叠,因而这些标准有完全不同的表集。
如前面指出的,系统单元的最大部分与压缩标准无关。如果一个单元与标准无关,则这样的单元不需要记住正在处理的是什么CODING_STANDARD。所有与标准有关的单元在CODING_STANDARD流过它们时记住压缩标准。当在第一个编码标准中编码/解码的信息被分布到整个机器,而某个机器正在改变标准时,在微处理器控制下的在前面的机器就会正常地选择按照H.261压缩标准工作。在这些在前面的机器中的MPU就产生信号,在机器内部的多处不同的地方表示压缩标准正在改变。MPU在不同的时候作出改变,另外,它可以清除整个流水线。
按照本发明,位于流水线中第一个单元的起始码解码器发出CODING_STANDARD令牌的改变,这使压缩标准的改变很容易处理。令牌宣称某种编码标准即将开始,于是那个控制信息沿机器往下流,并在合适的时间配置所有其它寄存器。MPU不需规划每个寄存器。
预测令牌通知如何用位流中的一些位来形成预测。电路系统把在标准中找到的信息,即从位流中找到的信息转化成一个预测方式令牌。这取决于正在运行哪一个压缩标准。这个处理是用Huffman解码器和分析器状态机完成的,在这里容易处理基于某些条件的一些位。起始码解码器产生这个预测方式令牌。于是令牌沿机器往下流到时间解码器线路,它负责形成预测。空间解码器电路不必知道它正在运行的是什么标准就能解释令牌,因为在三个不同标准中,令牌中的各位是不变的。空间解码器只是按令牌所告知的去做。有了这些令牌并适当地利用它们,机器中其它单元的设计就被简化了。虽然在程序中可能有某些复杂情况,但是本来难于设计成多标准的某些硬线逻辑可以在此使用,所以得到了好处。
2、对JPEG静止图象的解码
如前面指出的,本发明关系到信号的去压缩,尤其关系到不管使用什么压缩标准对已编码视频信号的去压缩。
本发明的一个方面是在流水线处理系统中提供一个第一解码线路(空间解码器)去对第一编码信号(JPEG编码视频信号)解码,还提供一个第二解码线路(时间解码器)去对第一编码信号(MPEG或H.261编码视频信号)解码。为了JPEG解码不需要时间解码器。
在这点上,本发明通过用一个简单流水线解码器和去压缩系统,使众多的不同编码信号的去压缩变得容易。解码和去压缩流水线处理器以独特的结构组成,这种结构使得能通过使用所有与单个流水线解码器和处理系统兼容的技术来处理多标准视频信号。空间解码器和时间解码器结合,视频格式化器用于驱动视频显示器。
本发明的另一方面是用了空间解码器和视频格式化器的组合,它只用于静止图象。与压缩标准无关的空间解码器完成一个单个图象范围内所有数据的处理。这样一个解码器处理了内部图象数据的空间去压缩,那些数据通过流水线并分配在有关的RAM内。与标准无关的地址发生器线路处理在存储器内信息的存储和检索。静止图象数据在空间解码器的输出被解码,这个输出用作多标准,可重配置视频格式化器的输入,然后格式化器向显示终端提供输出。在相似图象的第一个序列中,每个在空间解码器输出端的已去压缩的图象的位的长度,在图象到达空间解码器输出时,都是一样的。一些图象的第二个序列可能有完全不同的图象大小,因此,和第一个长度比较有不同的长度。还有,相似图象的所有这些第二序列的位的长度,在这些图象达到空间解码器的输出时,也都是一样的。
发明的另一方面是在内部将进入的与标准有关的位流组织成为控制令牌和数据令牌的序列。与此组合,还有众多的顺序安放的,可重配置的,经过选择和组织的处理级,组作为一个与标准无关、可重配置的流水线处理器。
就JPEG解码而论,一个单个没有芯片外DRAM的空间解码器能很快对基本的JPEG图象解码。空间解码器支持基本JPEG编码标准的所有特性。然而,能解码的图象大小可能限于能提供的缓存器输出的大小。空间解码器电路也包括一个随机存取存储器电路,还具有与机器有关,但与标准无关的地址发生器线路。此线路用于处理将信息存贮到存储器中去。
如前面指出的,时间解码器不要求对JPEG编码视频信号解码。相应地,当配置时间解码器为JPEG运行时,数据令牌所携带的信号直接通过时间解码器而不作进一步的处理。
本发明的另一个方面是在空间解码器中提供一对存储器电路,诸如缓存器存储器电路,这是为了与Huffman解码器/视频信号分离器线路(HD和VDM)组合起来工作。第一个缓冲器存储器放在HD和VDM前面,第二个缓存器存储器放在HD和VDM后面。HD和VDM对在标准编码位流中的二进制1和0的位流解码,把这些流转换成用于下游的数字。双缓存器系统是为了实现一个多标准的去压缩系统。这两个缓存器与证实了实现的Huffman解码器的组合,在下文中将更详细地描述。
本多标准去压缩电路再一个方面是起始码解码器和Huffman解码器的组合。起始码解码器位于第一前向缓存器的上游。这个组合的一个优点是在处理输入位流,特别是在处理位流中必须加入的填充时增加了灵活性。这些证实了的部件,起始码解码器,存储缓存器和Huffman解码器的布署增强了对输入位流中的某些序列的处理。
另外,芯片外DRAM用于实时解码JPEG编码的视频图象。和DRAM一起用的一些缓存器的大小和速度取决于视频编码数据的速率。
编码标准识别出所有与标准有关的类型的信息,为了存储在与空间解码器有连系的DRAM中,那些信息是必要的。空间解码器用的是与标准无关的电路。
3、活动图象去压缩
在本发明中,如果活动图象要通过解码步序去压缩,就必须再有一个时间解码器。时间解码器将在空间解码器中已解码的数据和前面已解码的一些图象结合起来。这些图象预定或者在当前正在解码的图象以前或者以后显示。时间解码器在图象编码数据流中接收信息,去识别这个时间错开的信息。时间解码器被组织去对时间和空间错开的信息编址,检索这些信息和组合这些信息,组合以这样一种方式进行,用当前正在解码的图象去解码位于一幅图象中的信息,并且用一幅合成图象作为结束。这幅图象是完整的,而且适用于传送到视频格式化器以驱动显示屏幕的。换句话说,合成的图象能存起来为以后对随后来的图象作时间解码时使用。
一般说,时间解码器进行图象和图象之间的处理。这些图象在时间上比当前正在解码的图象早一些和/或晚一些。时间解码器重新引入那些在图象的编码表示法内设有编码的信息,因为它是冗余的,并且在解码器已经可以得到。更明确地说,以下情况是可能的,即任何给定图象能包含和另一些在时间上或前或后的图象相似的信息。如果加了活动补偿,这种相似性会变得更大。时间解码器和去压缩电路也减少在相关图象之间的冗余度。
在本发明的另一方面中,时间解码器用于处理从空间解码器来的与标准有关的输出信息。这个单幅图象的与标准有关的信息分布在DRAM的几个区域当中。这是在以下意义上说的,用空间解码器处理的去压缩输出信息,是用别的RAM存储在别的一些DRAM寄存器内的。这些RAM还有另外一些与机器有关而与标准无关的地址发生器电路。地址发生器线路用于组合空间已解码图象信息的空间已解码信息包中的一幅图象。这幅图象在时间上与第一幅图象的时间位置错开。
在有能力对MPEG编码信号解码的多标准线路中,可能要求更大的逻辑DRAM缓存器以支持用MPEG时可能更大的一些图象格式。
图象信息以8象素×8象素块为单位流过串行流水线。在本发明的一种形式中,地址解码电路沿这些块的边界处理这些象素块(存储和检索)。地址解码线路也从这些边界的一头到另一头处理这些8×8象素块的存储和检索。这个多方面的适应性的下文中更完全地描述。
第二个时间解码器也可以被提供,它把第一个解码器电路(空间解码器)的输出直接传送到视频格式化器,为了在处理时没有信号处理延迟。
时间解码器也重排图象数据块的次序以便用显示电路显示。下文中描述的地址解码电路提供这个重排序的处理。
如前所述,时间解码器的一个重要特性是把从一些图象中选择的图象信息加在一起。这些图象比正在处理的图象早一些或晚一些到达。在这个意义上描述图象时,可能总味着下面的任何一点:
1、图象的编码数据表示;
2、结果,即解码器完成的处理步骤相加的结果所形成的最后解码图象。
3、从DRAM读出的在以前解码的图象;
4、空间解码的结果,即在一个PICTURE_START令牌和一个随后的PICTURE_END令牌之间的一大片数据。
在用时间解码器处理图象数据信息以后,数据或者被显示或者写回到图象存储器单元。然后这个信息被保存以便在处理另一幅不同的编码数据图象时作进一步参考。
为了可见的显示而对MPEG编码图象的重排序含有用改变时间解码器和重排序特性的方法,得到一幅要求的编码图象的可能性。
4、RAM存储器图
空间解码器,时间解码器和视频格式化器都用外部DRAM。最好,所有三个器件都用同一个DRAM。虽然所有三个器件都用DRAM,并且所有三个器件都用与地址发生器连结的DRAM接口,但是在DRAM中每一个器件完成什么是不同的。就是说,每个芯片,例如空间解码器和时间解码器,即使它们用相似的物理外部DRAM,它们的DRAM接口和地址发生器线路是不同的。
简要地说,空间解码器在公共DRAM中装入两个FIFO。再参看图11,一个FIFO 54放在Huffman解码器56和分析器前面,另一个放在Huffman解码器和分析器后面。FIFO以一种相对简单的方式实现。为每个FIFO,DRAM的一个特定部分搁在一边作为物理存储器。FIFO将装在其中。
与空间解码器DRAM接口58有联系的地址发生器用两个指针保持对FIFO地址的跟踪。一个指针指向存在FIFO中的第一个字,另一个指针指向存在FIFO中的最后一个字,所以能在适当的字上进行读/写操作。当在读或写的过程中达到物理存储器的终端,地址发生器就“叠绕”到物理存储器的始端。
简要地说,本发明的时间解码器必须能存两整幅图象或帧,无论指定的是什么编码标准(MPEG或H.261)。为简单起见,在DRAM中存储两帧的物理存储器分成两半,每一半专用(用适当的指针)于两幅图象中指定的一幅。
MPEG用三种不同的图象类型:基(I),预测的(P)和双向内插的(B)。如前所述,B图象基于根据两幅图象作出的预测。一幅是未来的,一幅是过去的。I图象不需要用时间解码器进一步编码,但必须存在两个图象缓存器之一,为以后对P和B图象解码时用。P图象的解码要求从一幅前面已解码的P或I图象形成预测。已解码的P图象存在图象缓存器中,这是为了用于P和B图象的解码。B图象可以要求两个图象缓存器都提供预测。然而B图象不存在外部DRAM中。
注意,I和P图象解码后不从时间解码器输出。而是,I和P图象写入图象缓存器之一,并且仅当随后的要解码的I或P图象到达时才被读出。换句话说,时间解码器依靠随后的P或I图象把两个图象缓存器中前面的图象清除,如下文中清除部分进一步讨论的。简要地说,空间解码器在视频序列结束处能提供伪造的I或P图象用来把上次的P或I图象清除出去。在随后的视频序列开始时,这幅假图象又被清除。
当对B图象解码时,发生最大存储器带宽负荷。最坏的情况是可能根据从两个图象缓存器的预测来形成B帧,而所有预测的精度要达到半个象素。
如前所述,时间解码器能被配置以提供MPEG图象重排序。由于这个图象重排序,P和I图象的输出被延迟,直到数据流中的下一个P或I图象开始被时间解码器解码为止。
因为P或I图象被重排序,当图象写到图象缓存器时,某些令牌暂时存在芯片上。当图象为了显示而被读出时,这些存储的令牌被收回。在时间解码器的输出,新解码的P或I图象的数据令牌被老的P或I的图象的数据令牌所代替。
可是,H.261只从刚解码的图象作出预测。因为每幅图象被解码,它被写入两个图象缓存器之一,所以它能被用于下一幅图象的解码。对DRAM存储器操作只要求写8×8块和以整数精确度的移动矢量形成预测。
简要地说,视频格式化器存三帧式三幅图象。需要存三幅图来适应如重复图象或跳越图象这样的特性。
5、位流特性
在现在特别涉及本发明的空间解码器时,回顾编码数据流的位流(bit stream)特性很有帮助,因为空间解码器及时间解码器的电路系统必须讨论这些特性。例如,在一种或更多种标准之下,该标准的压缩比靠改变某幅图象各图使用的编码位数来实现。位数可以大范围地改变。具体说,这意味着对一幅图象的基准图编码用的位流长度可以确定为一个单位长,而该图象另一张图可以是几个单位长,第三张图则可以是不到一个单位长。
现有各标准(MPEG 1.2,JPEG,H.261)都没有规定结束一张图的方法,其隐含意义是,下一张图开始时,当前的那张已经结束。此外,各标准(尤其是H.261)允许编码器产生不完整图象。
根据本发明,提供了一张图象结束的方法,这就是使用其令牌之一:PICTURE_END。从起始码检测器出来的仍为编码的图象数据包括各张由PICTURE_START令牌开始至PICTURE_END令牌结束的图,它们的长度变化仍很大。可能还(在第一张和第二张图之间)送出别的信息,但是第一张图确知已经送完。
在空间解码器输出的数据流表示一些仍保持图象开始和图象结束标志的图象,但是对于给定序列,它们的长度(位数)相同。一次图象开始和一次图象结束之间的时间长短可变。
视频格式化器取这些时间长短不一的图象,并将它们在屏幕上显示,图象显示速度是固定的,具体数字取决于被驱动的显示器类型。全世界使用了不同的显示速度,例如有PAL、NTSC等电视标准。以独特方式兼顾了这种差异:有选择地删去或重复一些图象。通常的“帧速变换器”,如将3帧减为2帧(2-3 pulldown),以固定的输入图象速率工作,但是视频格式化器却可以处理可变的输入图象速率。
6、可重配置的处理级(RECONFIGURABNLE PROCESSING STAGE)
再次参阅图10,可重配置处理级(RPS)由令牌解码电路33组成,它用于接收来自双线接口37和输入锁存器34的令牌。令牌解码电路33的输出通过双线接口37加到处理单元36,输出也加到动作识别(action identification)电路。处理结束后,处理单元36经过输出寄存器41将如此完成的信号送到输出双线接口总线42。
动作识别解码电路39的输入,经过双线接口总线40,从令牌解码电路33来,与/或经过双线接口总线46从存贮器电路43和44来。来自令牌解码电路33的令牌同时加到动作识别电路39和处理单元36。RPS和动作识别的功能将在本说明的后面部分用图表进一步阐述。
图10中的功能框图说明了图11、12、13中那些不是标准独立电路的各级的工作。数据先后流过令牌解码电路33、处理单元36、输出锁存器41,到达双线接口电路42。如果控制令牌(Control Token)被RPS识别,它就在令牌解码电路33内被解码,此后将发生适当的动作。如果未被识别,它就不加改变地经过输出电路41送到输出双线接口42。本发明起到流水线处理的作用,它配有双线接口以控制控制令牌在流水线内的移动。发明的这一特点在以前申请的欧洲专利局(EPO)专利申请号92306038.8中有更详细的叙述。
在本发明中,令牌解码电路33用于识别目前进入双线接口42的令牌究竟是数据令牌还是控制令牌。如果由令牌解码电路正在考察的令牌被认出,它就退出到动作识别电路39,同时出现适当的指示符(index)信号或标志信号以指示该动作已被采用。与此同时,令牌解码电路33也提供适当的标志或指示符信号到处理单元36,以提醒后者注意有令牌正在动作识别电路39中处理。控制令牌也可以接受相应的处理。
将在下文中对本发明可用的各种令牌类型作更详细的说明。就这部分说明的目的来说,只要注意到控制令牌所携带的地址在解码器33中解码,并用于访问在动作识别电路39内的寄存器,这就足够了。当正受考察的令牌是被认出的控制令牌时,动作识别电路39用它的重配置状态电路(reconfiguration state circuit)在整个状态机内分配各控制信号。如前所述,这就使动作识别解码器39的状态机开动起来,于是解码器39对它本身进行重配置。例如,它可以改变编码标准。由此可见,动作识别电路39解出了为处理目前正通过状态机的特定标准所需的动作,参看图10。
与此相似,在动作识别电路39控制下的处理单元36,现在随时可以处理包含在数据令牌数据字段中的信息,只要时机适宜的话。在许多场合下,控制令牌首先来到,将动作识别电路39重配置;数据令牌紧跟其后,然后在处理单元36中接受处理。控制令牌恰好在处理单元36处理完毕的数据令牌之前退出输出锁存器电路41并到达输出双线接口42的另一侧。
在本发明中,动作识别电路39是一个保持历史状态(historystate)的状态机。寄存器43和43保持着己从令牌解码器解出、并贮存在该寄存器内的信息。这样的寄存器可以根据需要设在芯片内或芯片外。这些众多的状态寄存器含有与当前正在动作识别电路39中识别的动作识别有关的动作信息。连接40直接从令牌解码器33到达动作识别部件39。其目的是表示动作也可以受当前正被令牌解码电路33处理的令牌的影响。
至此大体指出了根据本发明所进行的令牌解码和数据处理。数据处理按照动作识别电路39构成的方式来进行。动作受到许多条件的影响,它还被以下因素所影响:一般说从以前解出的令牌中得到的信息,更具体地说从以前解出的令牌中得到的贮存在寄存器43和44中的信息,正在处理中的当前令牌,以及动作识别单元39本身已获得的状态和历史信息。我们借此来指出控制令牌和数据令牌之间的差别。
在任一RPS(可重配置处理级)中,一些令牌被该RPS单元看成是控制令牌,这是由于它们在某个后继时刻大概会影响RPS的工作。而另一些令牌则被该RPS看作数据令牌,这样的数据令牌含有由该RPS处理的某种信息,处理方式取决于:个别(particular)电路系统的设计,以前被解码的令牌和动作识别电路39的状态。虽然某个别的RPS认出某些令牌用作该个别RPS的控制,认出另一些令牌是数据令牌,这是该个别RPS的见解。另一个RPS可以对同一令牌有不同看法。一个RPS单元可能将某个令牌看成是数据令牌,而另一个RPS单元则可能决出它实际上是控制令牌。例如,就Huffman解码器和状态机而言,量化表信息是数据,它被格式化成一系列8位字,这些字又形成称作量化表令牌(QUANT_TABLE)的令牌,下传到处理流水线。就该机器而言,这些全都是数据;处理数据,将一类数据转换成另一类,这明白无疑是机器这部分进行处理的一种功能。然而,当该信息到达逆向量化器时,逆向量化器将该令牌内的信息存入众多的寄存器。事实上,因为有64个8位数,所以有许多寄存器,一般说,可以有众多的寄存器。这个信息被看作是控制信息。然后,该控制信息会影响对后继数据令牌的处理,因为它影响对每一数据字的乘数。以上就是一级可能将令牌看作数据而另一级可能将它看作控制的例子。
根据本发明,令牌数据在整个机器中几乎一律被看作数据。重要方面之一是,一般说,具有令牌解码器的每一级电路系统必须寻找某些令牌,它识别不出的任何令牌必须按原样通过本级从流水线往下传,使得在当前级下游的各后继级有权看到这些令牌,并可能对之作出响应。这是一个很重要特点,即,使用令牌技巧可以实现彼此不相邻的各部件之间的通信。
本发明的另一重要特点是,电路系统的每一级都有内部处理能力,以进行每一种标准下的必要操作,并进行以令牌形式来到的控制,去决定在某给定时刻应该完成哪些操作。为了提供上述能力,有一个处理元件,但它在不同级都有差异。在Parser的状态机ROM中,有三种分开的完全不同的程序,每一种程序适应一个所涉及的标准。执行哪种程序取决于CODING_STANDRAD令牌。换言之,三种程序的每一种都在其内部具有处理解码和处理CODING_STANDARD标准令牌的双重能力。当三种程序的每一种看到下一个要解码的编码标准是哪个时,它们就如实地跳到为该特定程序设置的微码ROM内的起始地址。以上是各级如何对待多标准性。
有两件东西受到不同标准的影响。第一是位流中被认为是起始码或标志码的各位的式样,以便对移位寄存器重配置,去检测起始标志码的长度。第二是在微码中表示该起始码或标志码意义的一则信息。请回忆起,三种标准下各位的编码不同。因此,微码在为该压缩标准特定的表内查找与标准无关的某种东西,即代表到来码的一种令牌。由于在大多数情况下,每一种不同的标准都提供某个码去产生此令牌,它一般与标准无关。
逆向量化器79具有数学运算能力。量化器做乘法和加法,并有能力适应由一些参数形成的所有三种压缩标准。例如,在受控ROM中的一个标志位会告知逆向量化器是否加某一常数K。另一标志告知它是否加另一常数。当CODING_STANDARD令牌流过逆向量化器时,量化器将它存在寄存器中。当数据令牌此后通过时,逆向量化器将这是哪一种标准存贮下来,并查找它加到处理元件上的、为进行适当操作所需的各个参数。例如,逆向量化器将查找适合某一特定压缩标准的K是置零还是置1,并将此加到处理电路。
与此类似,在Huffman解码器内有许多表,有些为JPEG,有些为MPEG,有些为H.261而设置。事实上,这些表格多数能为一种以上的这些压缩标准服务。使用哪些表取决于这个标准的语法(synt-ax)。当接到来自状态机的命令后,Huffman解码器就工作,状态机告知解码器要使用哪些表。因此,并不是有一个状态直接进入Huffman解码器本身,在那里贮存下来,并告知它要处理的是什么样的编码。相反,是Parser状态机和Huffman解码器结合在一起将信息包含在它们的内部。
至于本发明的空间解码器,地址的产生有变动,这与图10所示相似,即从令牌中解码许多信息,比如编码标准。编码标准和附加信息被录入寄存器,而这就影响了地址发生器状态机的前进,因为它一步一步地走过,并逐个地对系统中的宏块计数。最后一级可能是预测滤波器179(图17),它工作在两种方式之一,或是H.261或是MPEG,而这是容易识别的。
7、多标准编码
本发明的系统还提供与标准无关的一些指示符(indices)产生电路的组合,这些电路与令牌解码电路结合在一起被策略地遍布全系统。例如,本系统被用于特定地对H.261视频标准,或MPEG视频标准,或JPEG视频标准解码。这三种压缩编码标准类似地规定了对到来数据应处理的步骤,但数据流结构却不相同。如前所述,起始码检测器的功能之一就是检测MPEG起始码、H.261起始码和JPEG标记码,并将它们全都转换成一种形式,即一种含有体现当前编码标准的令牌流的控制令牌。控制令牌通过流水线处理器,并在与之有关的状态机内被使用(即被解码)。控制令牌也通过与之无关的其它状态机。就此而言,也以同样方式对待数据令牌,因为它们只在那些能被控制令牌构成处理它们的状态机中接受处理。在其余的状态机内,它们原样不变地通过。
更具体一点说,根据本发明,控制令牌内可以包括一个以上的字。如果如此,被称为扩展位的那一位被置1,从而规定在令牌中使用附加的字以携带附加信息。这些附加控制位的某些位相当于指示符(indices),用来指示要在相应的状态机中使用的信息,以产生一组与标准无关的指示符信号。令牌的其余部分用来指示和识别内部处理控制功能(internal processing control function),后者对所有通过流水线处理的数据流都是标准的。在本发明的一种形式中,令牌扩展用于传送(carry)编码标准,该标准由遍布整机的有关令牌解码电路解出。凡是在适于以新的编码标准操作的地方,令牌扩展也用于对遍布整机的各级的动作识别电路39进行重配置。此外令牌解码电路能指出某控制令牌是否与选定标准之一有关,这准是电路设计好能处理的。
更具体说,MPEG起始码和JPEG标记的后面是一个8位数值。1起始码的后面是一个4位数值。由于这个原因,起始码检测器检测MPEG起始码或JPEG标记(marker)的办法来指示后续的8位与起始码有关联的值。与上面这件事无关,它接着产生一个信指出这不是H.261起始码而是MPEG起始码或者是JPEG标记。首8位值进入解码电路,8位的一部分产生表示指示符和标志g)的信号,该信号在当前电路中用于处理通过本电路的令牌。被用于插入控制令牌的一些片断,以后要检查这些片断,以确在处理的是哪个标准。从这个意义上说,控制令牌中一部分指伴随的数据应作哪种类型的操作,也有一部分指出它与MPEG标关。如前所述,该操作信息在系统中用于对处理级重配置,而级用于完成不同标准所要求的不同功能,各种标准就是为此目建立的。
例如,以H.261起始码为准,它与紧跟其后的4位值有关。起始测器将此值送入令牌发生器状态机。数值被加到8位解码器,就产生3位的起始号。起始号用来识别一幅图象的开始,图号用起始号的数值指示的。
本系统还包括多级并行处理流水线,该流水线按照前述的双线的原理工作。每级由通常采用图10所示形式的机器组成。令牌电路33用于引导当前进入状态机的令牌到动作识别电路39,或理单元36,以适宜为准。处理单元在以前已被更前面的控制令配置成处理当前编码标准所需的形式,当前编码标准现在正进理级,并为下一个数据令牌所携带。此外,根据发明的这种情况,在处理流水线内的各后继状态机可以以一种编码标准(即H.261)工作着,而其前级可以用另外的标准(如MPEG)工作着。同一个双线接口用于传送控制令牌和数据令牌。
本发明的系统还利用了控制令牌,这些控制令牌被要求用固定数目的可重配置处理级对一些编码标准解码。更具体一点说,使用了PICTURE_END控制令牌,因为,有图象真正结束时刻的指示非常重要。与此相应,在多标准机的设计中,必须在多标准的流水线处理机内部产生额外的一些控制令牌,使处理机能指示要使用哪种标准解码技术。这样的一个控制令牌就是PICTURE_END令牌。该PICTURE_END令牌用来指示当前的图象已经完毕,用来强使缓存器冲洗干净并用来把当前图象从解码器推送到显示器。
8、多标准处理电路-第二种工作方式
以前述的起始码检测器的形式组成的、与编码标准有关的压缩电路,经过某个适当的总线,被相配地互连到与标准无关的压缩电路。与标准有关的电路还通过同一总线,连接到与标准无关的组合电路,以及连到附加总线。与标准无关的电路将附加的输入加到与标准有关的电路,而后者又将信息送回与标准无关的电路。从与标准无关的电路出来的信息通过另一条适当的总线加到输出端。表600说明了作为与标准有关的起始码检测器51输入的多种标准包含着某些位流,后者在每一编码位流中具有与标准有关的意义。
9、起始码检测器
如前指出,根据本发明,起始码检测器能提取MPEG、JPEG和H.261的位流,并能由此产生一个专有(proprietary)令牌序列,这些专有令牌对于解码器的其余部分是富有意义的。作为一个多种标准解码如何完成的例子,MPEG(1和2)picture_start_code,H.261 picture_start_cide和JPEG start_of_scan(SOS)标记被起始码检测器当作等价的信号,它们全都产生一个内部PICTURE_START令牌。与此相似,MPEG sequence_start_code和JPEG SOI(start_of_image)标记也都产生一个机器sequence_start令牌。然而,H.261标准没有等价的起始码。因此,作为对第一个H.261picture_start_code的响应,起始码检测器将产生一个sequence_start令牌。
上述各种图象没有一个被直接使用,在起始码检测器(SCD)内的使用除外。相反,机器PICTURE_START令牌,举例说,已被认为与包含在位流中的各PICTURE_START映象(inages)等同。此外,必须记住,机器PICTURE_START本身并不是在标准内的PICTURE_START的直接映象(direct image)。相反,它是一个控制令牌,用于同其它控制令牌组合后提供与标准无关的解码,这模拟了在每一压缩编码标准下对图象的操作。各控制令牌的配合,加上与各别状态机令牌解码电路部分产生的指示符和/或标志的进一步配合,在本质上是独特的。各控制令牌的配合,加上随控制令牌所携带的信息对电路的重配置,这在本质上同样是独特的。一个典型的可重配置状态机将在以后加以叙述。
再次参看表600,在表的左栏示出的是一组标准图象的名称,右栏示出的是与机器有关的一些控制令牌,它们被用来对标准编码信号仿真,该标准编码信号在标准图象中不存在或未被采用。
参考表600,可以看出当起始码检测器对该表所示的任一标准信号解码时,如前所述,它就产生一次机器sequence_start信号。起始码检测器产生sequence_start,group_start,sequence_end,slice_start,user_data,extra_data和PICTURE_START等令牌,它们被应用于遍及全系统的双线接口。与这些控制令牌配合工作的每一级的结构由令牌内容来决定,或由令牌内容所产生的指示符决定。各级都准备好处理当图象数据令牌来到该级时预期要收到的数据。
如前所述,压缩标准之一,例如H.261,在它在数据流中没有sequence_start的映象,也没有PICTURE_END的映象。起始码检测器指示出在进入的位流中PICTURE_END的处所,并产生PICTURE_END令牌。在这方面,本发明的系统的意图是传送充分组合的数据字,使得本发明实施中选用的每个寄存器位置上都有一位信息。为此,选择了15位作为在两个起始码之间传送的位数。当然,一个具有本行一般技能的人也能意识到可以作出多于或少于15位的选择。换言之,正从起始码检测器送入DRAM接口的数据字的全部15位对于正常工作都是必需的。因此,起始码检测器要产生称为装填的额外一些位,以插入数据令牌的最后字中。为了示例的目的,选择了15位。
为了实现装填操作,根据本发明,二进制0后继若干二进制1被自动插入,以填满15位数据字。此数据然后通过编码数据缓存器,送到Huffman解码器,该解码器又把装填除去。如此,任意位数就可以通过固定大小和宽度的缓存器。
在一种具体实现中,slice_start控制令牌被用来识别一片(slice)图象。使用slice_start控制令牌,以便将图象分切成更小的区域。区域的大小由编码器选择。起始码检测器识别出这个独特格式的slice_start码,以便位于起始码检测器下游的、与机器有关的各状态级将正在收到的图象分切成一些更小的区域。区域的尺寸由编码器选择,由起始码检测器识别,由重新组成(recombinat-ion)电路系统和控制令牌使用,以便对编码图象解压缩(decompre-ss)。slice_start码主要用于出错后的复原。
起始码提供一种起动解码器的独特方法,这将在以后作更详细的讨论。将起始码检测器放在编码数据缓存器之前,而不是放在其后并放在Huffman解码器及视频信号分离器(video demultiplexor)之前,这有许多好处。将起始码检测器位于第一缓存器可使它:1)收集(assemble)令牌,2)对标准控制信号解码,如对起始码解码,3)在数据进入缓存器之前装填位流,4)产生合适的控制令牌序列,以出空缓存器,同时将现有数据从缓存器推入Huffman解码器。
由起始检测器输出的控制令牌的大部分直接反映了不同图象的语法元素(syntactic elements)和视频编码标准。起始码检测器将语法元素变换成控制令牌。除了这些自然令牌之处,还产生了一些独特的和/或与机器有关的令牌。这些独特的令牌包括一些专门为在本发明的系统中使用而设计的令牌,后者在本质上是独特的,有助于体现本发明的适应多标准的性质。这些独特令牌的例子有PICTURE_END和CODING_STANDARD。
还引入了一些令牌,以去除各编码标准之间的某些语法差异,及具备与出错条件协作的功能。令牌的自动产生是在对与标准有关的数据作了一系列分析之后才完成的。因此空间解码器对两类令牌的响应相同。一类是那些已经直接提供到空间解码器即SCD输入端的令牌,一类是那些在编码数据中检测到起始码之后已经产生的令牌。一连串额外的令牌被插入双线接口,以便控制本发明的多标准特性。
MPEG和H.261编码视频流具有与标准有关的、非数据的、可识别的位模型,其中之一今后被称作起始映象(start image)和/或与标准有关码。在JPEG中起类似作用的码叫标记码(marker codes)。这些起始/标记码用来识别编码数据流语法的重要部分。由起始码检测器完成的起始/标记码的分析是对编码数据作语法分析(parsing)的第一步。
起始/标记码的模型设计得使它们可以在不必对整个位流解码就被识别出来。所以根据本发明,它们可以用来协助做出错复原和编码器起动的工作。起始码检测器提供在编码数据结构中检测错误的设施,并帮助解码器起动。解码器起动过程及起始码检测器检测错误的能力都将在以后作更详细的讨论。
以上的说明主要涉及到了与机器有关的位流的特性及其与本发明的寻址特性的关系。以下将参照起始码检测器说明与标准有关的编码数据的位流特性。
每一个标准的压缩编码系统都使用了一种独特的起始码构形(configuration)或其映象,选定使用它是为了识别该系统特定的规范。每种起始码也都随身带有起始码值。起始码值用于在本标准的语言范围内识别与该起始码有关的操作类型。在本发明的多标准解码器中,如前所述,兼容性基于控制令牌和数据令牌的构形。指示符信号,包括标志信号,在每个状态机内部由电路产生,它们将在今后适宜时加以说明。
在各标准中包含的起始码和/或标记码,以及与数据字相对立的其它标准字,有时被认为是映象,以避免与使用的码和/或与机器有关的码相混淆,后者是指在机器内使用的控制令牌和/或数据令牌的内容。再者,起始码这个词时常作为类属词(generic term)使用,指MPEG和H.261起始码,也指JPEG标记码。标记码和起始码的用途相同。再有,“冲洗”一词既用来指FLUSH令牌,也作为动词使用,例如当说到冲洗起始码检测器的移位寄存器时(包括信号“已被冲洗”中的“flushed”)。为避免混淆,冲洗令牌中的冲洗(英文词)总是用大写体书写。该词的其它用法(动词或名词)用小写体。
与标准有关的编码输入图象输入流由不同长度的数据和起始映象组成。起始映象随身带着数值,该数值告知用户根据本标准对紧接其后的数据将进行哪种操作。然而,在本发明的多标准流水线处理系统中,要求对多种标准有兼容性,系统已经过优化,可以用所有标准进行所有的操作。因此,在许多场合下,必须建立独特的起始控制令牌,不但它们与包含在编码信号标准映象的数值内的数值兼容,它们还能控制各级去模拟本标准的操作,每种标准都有指定的本行熟知的参数来表示其操作。所有这样的标准都根据参考资料体现在本说明书中。
重要的是理解令牌之间的关系,这些令牌单独地或与其它控制令牌结合地模拟包含在标准位流内的非数据信息。每个状态机各自产生一套指示符信号,包括标志信号,以在该状态机内部作某种处理。在各标准中附带的数值可以用来访问与机器有关的各控制信号,以便模拟对标准数据和非数据信号的操作。例如,slice_start令牌是双字令牌,然后它进入前述的双线接口。
输入到本发明的系统的数据可以是从任何合适的数据源,例如磁盘、磁带等等,来的数据。数据源将8位数据提供给空间解码器第一个功能级,起始码检测器(图11)。起始码检测器包括三个移位寄存器;第一个移位寄存器8位宽,下一个24位宽,再下一个15位宽。每个移位寄存器都是双线接口的一部分。从数据源来的数据在一个定时周期内以单个8位的字节装入第一寄存器。此后,第一移位寄存器的内容一次一位地移入解码(第二)移位寄存器。在24个周期后,24位寄存器就满了。
8位字节每8个周期一次地装入第一移位寄存器。每个字节被装入值移位寄存器221(图20),然后用8个附加周期将它出空,并对移位寄存器224装入。出空它用了8个周期,所以在三次这样的操作或24周以后,在24位寄存器内仍有三个字节的内容。值解码移位寄存器230仍旧是空的。
假定现在在24位移位寄存器内有一个PICTURE_START字,检测周期认出了该PICTURE_START码的格式,并提供起始信号作为其输出。一旦检测器检测到一次起始,在此信号之后的字节便是与该起始码有关的值,该字节当前正占在值寄存器221内。
由于检测移位寄存器的内容已被识别为起始码,其内容必须从双线接口中除去,以确保不再用这三个字节进行进一步的处理。解码寄存器被出空,值解码移位寄存器等待着要全部经过这样的寄存器移过来的值。
值解码移位寄存器的低位位置上现在有一个与PICTURE_START相关的值。空间解码器内与标准的PICTURE_START信号对应的信号称作SD PICTURE_START。SD PICTURE_START信号本身现在即将包含在令牌头内,值也即将包含在令牌头的扩展字内。
10、令牌
在本发明的实践中,令牌是一种用途广泛的适应单元(adapta-tion unit),其形式是一交互接口信息包(an interactiveinterfacing messenger package),用于控制和/或数据。它适应于可重配置处理级的使用。后者(RPS)在响应某一已识别的令牌时,对自己重配置以进行各种各样的操作。
为了实现不同的功能,令牌可以或者与处理级的位置有关,或者与位置无关。令牌也可以是变形的,它们可以被某一处理级修改,然后下传到流水线以执行更多的功能。令牌可以同所有各级或少于所有各级互相配合,从这个意义上说,令牌可以同相邻级和/或不相邻级互相配合。令牌对某些功能可以与位置有关,而对另一些功能却与位置无关;令牌与某一级的具体相互作用可以以某级过去的处理历史为条件。
PICTURE_END令牌是在多标准解码器中标志图象结束的一种方法。
多标准令牌是将MPEG、JPEG和H.261数据流映射到单一解码器的一种方法。该解码器使用与标准有关和与标准无关的硬件与控制令牌的混合体。
SEARCH_MODE令牌是一种搜索MPEG、JPEG和H.261数据流的技巧,它允许随机访问和增强的出错复原。
STOP_AFTER_PICTURE令牌是清楚地结束解码的一种方法,它标志一幅图象的结束并清除解码器流水线,即通道变换(channelchange)。
此外,对令牌装填是将任意位数通过固定大小、固定宽度缓存器的一种方法。
本发明的目标是一种使用令牌和双线装置的、配置可变的流水线处理系统。采用控制令牌和数据令牌并与双线装置相结合,使多标准系统变得容易。与不使用控制令牌的系统相比,它具有扩展的操作能力。
控制令牌由解码器处理器内部的电路系统产生,它们模拟许多不同类型的与标准有关的信号的工作,这些信号送入串行的流水线处理器接受处理。所使用的方法是研究被串行处理器选用的那些多标准的所有参数,注意1)这些标准的相似点,2)它们的不同点,3)它们的需要和要求,4)选择正确的令牌功能,以有效地处理所有送入串行处理器的标准信号。令牌的作用是对标准作模拟。控制令牌的作用部分地用作与标准有关的信号之间的仿真/转换,部分地用作在流水线处理器内传送控制信息的要素。
在先有技术的系统中,是按照熟知方法设计能辨认标准的专用机,然后靠微处理器接口确立专用的线路系统。从微处理器来的信号被用于控制数据在专用下游组件中的流动。这一解压缩功能的选择、定时和组织都处于固定的逻辑电路的控制之下,有微处理器的信号参加控制。
与上述对照,本发明的系统则在控制令牌的控制下对下游的各功能级配置。从MPU(微处理器单元)得到必需的和/或其替换的控制,这作为任选项提供。
令牌为在解压缩电路流水线处理器中传送信息提供并制定了切合实际的格式。在下文选定的、优先实施例用的设计中,每个令牌字至少8位宽,一个令牌可以延续一个或更多字。地址字段的长度可变,并可能延续多个字。在优选实施例中,地址不长于8位。然而,这不是对本发明适用范围的限制,这只是限制了利用这些令牌而必须完成的、选定的处理步骤数目。注意在扩展位识别标牌项下,在字1和字2中的扩展位为1,其意义是,此后将出现一些附加字。字3中的扩展位为0,因此指示该令牌的结束。
令牌也能是可变位长的。例如,令牌字为9位,加上扩展位,总共就是10位。在本发明的设计中,各输出总线的宽度也是可变的。空间解码器的输出是9位宽,或者,当包括扩展位在内时,是10位。在优先实施例中,利用这些扩展位的唯一令牌是数据令牌;所有其它令牌都忽视该扩展位。应该明白,这不是限制,这只是一种实现。
通过应用数据令牌和控制令牌的构形特点,就可能改变正由这些数据令牌传送的数据的长度,这是从字内位数的意义上说的。例如,曾经讨论过,数据令牌某字中的一些数据位可以和同一数据令牌另一字中的一些数据位相结合,以形成11位或10位地址,用于访问遍布在本串行解压缩处理器中的各个随机存贮器。这就增加了可变性的程度,也就使大大扩充多功能性变得容易了。
如前所述,数据令牌将数据从一个处理级传送到下一个。因此,这个令牌的特性在它通过解码器时改变了。例如,在空间解码器的输入处,数据令牌携带的是8位字组成的位序列(bit serial)编码视频数据。此处,对每个令牌的长度没有限制。然而,为了举例说明本发明在这方面的多功能性(在空间解码器电路的输出),每个数据令牌恰好具有64字,每字为9位宽。更具体地说,标准编码信号允许不同长度的消息对图象的不同密度和不同细节编码。一组图象中的第一幅通常具有最长的数据位数,因为它需要向处理单元提供最多的信息,使得它能用尽可能多的信息去开始解压缩。在典型情况下,后继字的长度较短,因为它们所包含的是将第一字和扫描信息字段上的第二位置比较后得出的差别信号。
正如标准编码系统所要求的,这些字互相夹杂,使得能为空间解码器输入提供不同数量的数据。然而,在空间解码器完成作用之后,其输出端信息却是以适宜在屏幕上显示的图象格式速率提供的。为了与全世界不同显示制式接轨(如NTSC、PAL和SECAM),以空间解码器时间表示的输出速率可以改变。视频格式化器将此可变图象速率转换成适于显示的固定图象速率。但是,图象数据仍旧由64字的数据令牌传送。
11、DRAM接口
在三个解码器芯片中的每一个,都使用了单独的高性能可配置的DRAM接口。一般说,在每个芯片上的DRAM接口基本上是一样的,但是这些接口在如何处理通道优先次序方面却各不相同。本接口被设计成能直接驱动为空间解码器、时间解码器和视频格式化器所用的DRAM。典型情况下,在那些系统中,DRAM接口到DRAM之间的连接总是不需要外部逻辑、缓存器或别的组件。
根据本发明,接口可以可从两方面配置:
1、接口的详细定时关系可配置,以适合各种不同类型的DRAM。
2、数据接口至DRAM的宽度可配置,以便在不同应用中达到价格/性能的折衷。
一般说,DRAM接口是装在本系统三种芯片的每片上与标准无关的部分。再次重复,它们是空间解码器、时间解码器和视频格式化器。再次参看图11、12和13,这些图分别展示了DRAM接口和空间解码器、时间解码器、视频格式化器剩余部分的关系框图。在每种芯片上,DRAM接口将芯片接至某个外部DRAM。使用DRAM是因迄今为止在片内制造所需的数量相对庞大的DRAM还不合实际。注意:每个芯片有它自己的外部DRAM和它自己的DRAM接口。
此外,虽然DRAM接口是与压缩标准无关的,它仍必须配置以实现多标准中的每一种标准,H.261、JPEG和MPEG。至于如何对DRAM接口重配置以实现多标准操作,这将在本说明书后面作进一步说明。
了解DRAM接口的工作,相应地需要了解DRAM接口和地址产生器的关系,以及了解二者如何用双线接口来通信。
一般说,顾名思义,地址产生器产生DRAM接口对DRAM寻址(即读出或写入DRAM的特定地址)所需的地址。有了双线接口,只有当DRAM接口同时有数据(来自流水线各前级)和有效地址(来自地址产生器)时才发生读和写。正如以下进一步讨论的,使用分开的地址发生器既简化了地址发生器的结构,也简化了DRAM接口的结构。
在本发明中,DRAM接口可以在一种时钟下运行,该时钟与地址发生器异步,它也和数据通过的各级的时钟异步。采用了特别技巧来对待操作的这种异步特性。
数据典型地以64字节的块为单位在DRAM接口和芯片其余部分之间传送(唯一例外是时间解码器内的预测数据)。传送靠一种称为“交替缓存器”的器件来实现。这主要是一对以双缓存形式工作的RAM,在DRAM接口装满或出空一个RAM的同时,芯片另一部分出空或装满另一个RAM。每个交替缓存器都配有分别的总线,以传送从地址发生器来的地址。
在本发明中,每种芯片都有四个交替缓存器,但每种情况下这些交替缓存器的作用都不相同。在空间解码器中,一个交替缓存器用来将编码数据传送到DRAM,另一个用来从DRAM读取编码数据,第三个用来将令牌化数据传送到DRAM,第四个用来从DRAM读令牌化数据。在时间解码器中,则是一个交替缓存器用来将基(intra)或预测的图象数据写入DRAM,第二个从DRAM读基或预测的图象数据,其余两个读前向或后向预测数据。在视频格式化器中,一个交替缓存器用来将数据传送到DRAM,其余三个用于从DRAM读数据,每个各读亮度(Y)和红、兰色差数据(分别是Cr和Cb)中的一个。
以下将说明具有一个写交替缓存器和一个读交替缓存器的假想DRAM接口的工作。它基本上和空间解码器的DRAM接口的工作相同。工作情况在图23中说明。
图23表明地址产生器301、DRAM接口302和传送数据的芯片其它各级之间的控制接口都是双线接口。地址产生器301可以产生作为接收控制令牌结果的地址,也可以仅仅产生固定的地址序列(例如,用于空间解码器的FIFO缓存器)。DRAM接口以特殊方式对待与地址产生器301有关的双线接口。当准备好接受地址时,它并不使接受(accept)线保持为高,而是等待地址产生器提供有效地址,处理该地址,然后在一个时钟周期期间置接受线为高。如此,它实现了请求/响应(REQ/ACK)协议。
DRAM接口302的一个独有特点是它能独立地和地址产生器301及与提供或接受数据的各级通信。例如,地址产生器可以产生与写交替缓存器内数据有关的地址(图24),但是不会有动作发生,直到写交替缓存器发信号表明已有一块数据准备好待写入外部DRAM。类似地说,写交替缓存器可以含有一块已准备好待写入外部DRAM的数据,但是没有动作发生,直到有地址从地址产生器301加到适当的总线上。此外,一旦写交替缓存器中的一个RAM已经充满数据,另一个RAM可能完全出空,并在数据输入被停止(双线接口的接受信被置为低)之前就被“交替”到DRAM接口方。
在理解本发明的DRAM接口302工作的过程中,重要的是在一个配置适当的系统内,DRAM接口必须能使交替缓存器与外部DRAM303之间传送数据的速度至少和交替缓存器和芯片其余部分之间传送数据的所有平均速度之和一样快。
每个DRAM接口302决定它下次将使用哪个交替缓存器。一般说,这将是一次“循环”(round robin)(即,下次使用的交替缓存器是最近最少轮到而下次又可以得到的那个),或是一个优选次序编码器(即,在其中,某些交替缓存器比另一些具有更高的优先级)。在这两种情况下,刷新请求发生器(refresh request generator)都会送出一次额外请求,该请求比所有其它请求的优先级都高。刷新请求由刷新计数器产生,后者可以通过微处理器接口编程。
现在参看图24,在那里是写交替缓存器的框图。写交替缓存器接口含有两个RAM,RAM1 311和RMA2 312。正如本文进一步要讨论的,在写地址313和控制314的控制下,从前级来的数据被写入RAM1311和RAM2 312。数据从RAM1 311和RAM2 312。数据从RAM1 311和RAM2 312写入DRAM 315。当将数据写入DRAM 315时,DRAM的行地址由地址产生器提供,列地址则由写地址和控制信号提供,这在今后还要叙述。在工作期间,有效数据在输入316处出现(数据输入)。典型情况下,从前级接收数据。随着每个数据从前级收到,它被写入RAM1 311,然后写地址控制使RAM1的地址增值,以允许下一数据写入RAM1。数据继续被写入RAM1 311,直到或是不再有数据,或是RAM1已满。当RAM1满时,输入方放弃控制并发信号至读方,以指示RAM1现在已准备好被读出。该信号在两种异步时钟体系之间通过,因此通过三个同步用的触发器。
如果RAM2 312为空,在输入方来到的下一数据就被写入RAM2。否则,当RAM2 312出空后才写入。当循环或优先级编码器(视个别芯片使用哪个而定)指出现在轮到读取本交替缓存器时,DRAM接口就读取RAM1 311的内容并将它们写到外部DRAM 315。接着,越过异步接口送回一个信号,以表示RAM1 311现在准备好可再次被填充。
如果DRAM接口出空RAM1 311并在输入方充满RAM2 312之前“交替”到RAM1,则数据可以由交替缓存器不断地接受。否则,当RAM2满时,交替缓存器会将其接受信号置低,直到RAM1已被“交替”回来以供输入方使用。
根据本发明,读交替缓存器的工作与此相似,不过要巅倒输入和输出总线。
本发明的DRAM接口的设计使它具有最大可得的存贮器带宽。每个8×8的数据块存在同一DRAM页内。因此,可充分地使用DRAM快速页访问的各种方式,该方式先提供一个行地址,接着提供许多列地址。特别是,行地址由地址产生器供给,而列地址由DRAM接口供给。这在以后还将进一步讨论。
此外,该接口还有这样的装置,它允许接到外部DRAM的数据总线的宽度是8、16或32位。因此,所使用的DRAM数量可以同特定应用所需的大小和带宽相配。
在本例(它和空间解码器内的DRAM接口工作原理完全相同)中,地址产生器给DRAM接口提供每个读和写交替缓存器的器件地址。该地址用作DRAM的行地址。六位的列地址由DRAM接口本身提供,这六位也用作交替缓存器RAM的地址。至交替缓存器的数据总线为32位宽。因此,如果至外部DRAM的总线宽度小于32位,则在下一字从写交替缓存器读出或下一字写入读交替缓存器之前(读和写是指相对于外部DRAM的传送方向),必须进行两次或四次外部DRAM的访问。
如果是时间解码器和视频格式化器,情况就更复杂。时间解码器的寻址更为复杂是由于它的预测方面,这在本节进一步讨论。视频格式化器的寻址更为复杂是由于视频输出的多标准方面,这在与视频格式化器有关的各节中进一步讨论。
如前所述,时间解码器有四个交替缓存器:其中两个用于读和写解码的基(I)和预测(P)的图象数据。这个的工作如同前述。另两个用于接收预测数据。这两个缓存器较为有趣。
一般说,预测数据将根据动动矢量规定的x和y值,从正在处理的本块位置偏移。因此有待检索(to be retrieved)的那块数据一般不和原来编码(并写入DRAM)时的数据块的边界相符。这一点在图25中表示,带阴影的面积代表正在形成的块,而虚线轮廓代表正在推算的块。地址产生器将动动矢量所规定的地址转换成块偏移(整块数,用大箭表示)和象素偏移(用小箭表示)。
在地址产生器中,帧指针、基块地址和矢量偏移三者相加,以形成有待从DRAM检索的块的地址。如果象素偏移为零,就只产生一次请求。如果有x方向或y方向的偏移,就产生两次请求,即原来的块地址及紧接在下面的地址。如果既有x偏移又有y偏移,则产生四次请求。对于每个要检索的块,地址产生器计算出起始和停止地址,这最好用例子说明。
设想有(1,1)的象素偏移,用图26的阴影面积表示。地址产生器作出四次请求,在图中的标号为A至D。要解决的问题是如何快速提供行地址序列。答案是使用“起始/停止”技术,说明如下。
考察图26中的块A。读取必须在位置(1,1)开始和在位置(7,7)结束。暂定一次正在读一个字节(即,8位的DRAM接口)。在坐标(co_ordinate pair)对中的x值形成地址的三个最低有效位,y值形成三个最高有效位。x和y的起始值都是1,因此地址为9。数据从该地址读出,然后x增值。这一过程重复,直到x值到达停止值。这时y值增1,x的起始值重新装入,给出地址17。当每个数据字节读出后,x值再次增加直到到达它的停止值。此过程重复,直到x和y值都到达停止值。于是产生了地址序列9、10、11、12、13、14、15、17......、23、25、......、31、33、......、......57、......、63。
类似地,块B的起始和停止坐标是(1,0)和(7,0),块C是(0,1)和(0,7),块D是(0,0)和(0,0)。
下一问题是此数据应该写入何处。很明显,看块A,从地址9读出的数据应该写入交替缓存器中的地址0,而从地址10读出数据应该写入交替缓存器中的地址1,等等。与此相似,从块B内地址8读出的数据应该写入交替缓存器内的地址15,而从地址16读出的数据应该在交替缓存器内写入地址15。这一功能证明可以有非常简单的实现,概述如下。
考察块A。在读开始时,交替缓存器地址寄存器装入停止值的反值(inverse)。y反停止值形成3个最高有效位,x反停止值形成3个最低有效位。在这情况下,当DRAM接口在外部DRAM读地址9时,交替缓存器地址为零。然后,当外部DRAM地址寄存器增值时,交替缓存器地址寄存器增值,这与恰当的预测寻址是一致的。
到此为止,讨论集中在8位DRAM接口上。如果是16位或32位接口,必须作少量局部的修改。首先,必须对象素偏移矢量“修剪”(clip),使它指到16或32位的边界。在我们一直使用的例中,对于块A,第一个DRAM读将指向地址0,在地址0至3中的数据将被读取。其次,必须抛弃不需要的数据。这靠将所有数据写入交替寄存器(其物理容量必须比8位时的所需量大)并加上偏移后读取。当进行MPEG半象素内插时,用x和/或y表示的9个字节必须从DRAM接口读出。在此情况下,地址产生器提供合适的起始和停止地址。在DRAM接口内使用了一些额外的逻辑,但是DRAM接口的工作方式没有根本的变动。
对本发明的时间解码器DRAM接口最后要注意的一点是,必须给预测滤波器提供附加信息以指示对数据作何种处理。该信息由以下组成:
“最后字节”信号,以指示一次传送(64、72或81字节)的最后一个字节;
H.261标志;
双向预测标志;
两个二进制位以表示块的尺寸(用x和y表示的8个或9个字节);以及
由两个二进制位形成的数,以指示各块次序。
最后字节的标志可以在数据从交替缓存器读出时产生。其余信号从地址产生器得到,并通过DRAM接口传送,使得当数据被预测滤波器从交替缓存器读出时,这些信号和正确的数据块相关联。
在视频格式化器中,数据一块一块地写入外部DRAM,但是按光栅次序读出。写入与前已说明的空间解码器的方法完全相同。但是读出稍微复杂一些。
在视频格式化器外部DRAM中的数据作如此安排,使得在一个单页内至少装入8块数据。这8块是8个连续的水平块。当光栅扫描时,必须从这8个连续块的每一块中读出8个字节,并将其写入交替缓存器(即,在八块中每块的同一行)。
考察最高行(假定接口为一个字节宽),x地址(最低的三个有效位)被置成零,y地址(最高的3个有效位)也同样置零。然后,当每次头8个字节被读出时,x地址增值。这时,地址的的高位部分(即位6及以上的位,因为最低有效位是位0)增值,而x地址(最低的3个有效位)被复位至零。此过程不断重复,直到64字节全部读完。如果至外部DRAM的接口宽度为16或32位,只须分别将x地址增二或增四,而不是增一。
在本发明中,地址产生器可以发信号给DRAM接口要求读少于64字节(在一个光栅行的头或尾处可能有此需要),虽然它总是读8字节的倍数。这可以使用起始值和停止值来达到。起始值用于地址的高位(位6及以上的位),停止值与起始值比较,以产生信号指示何时应该停止读取。
在本发明中的DRAM接口定时部件使用了定时链,以使DRAM信号的边沿精确到系统时钟的四分之一周期。使用了由锁相环来的相位互差90°的时钟。将它们组合成名义上的两倍时钟。然后每个链用两个并行的移位寄存器组成,以互为反相的两倍时钟工作。
首先,有一个链产生页起始周期,另一个产生读/写/刷新各周期。每个周期的长度可通过微处理器来编程。经过这样的编程后,页起始链具有固定的长度;而另一个周期链的长度在一个页起始期间可变,以适宜为准。
在复位时,各链被清除,产生一个脉冲。脉冲沿着各链前进,并且受从DRAM接口来的状态信息的控制。该脉冲产生DRAM接口的时钟。每个DRAM接口的时钟周期对应于DRAM的一周,因此,由于DRAM周期有不同长度,DRAM接口时钟的速度不是恒定的。
此外,另有一些定时链将从上述各链来的脉冲与从DRAM接口来的信息相组合,产生输出选通和使能信号,如notcas、notras、notwe、notbe。
12、预测滤波器
再次参阅图12、17、18,特别是图12,在那里示出了时间解码器的框图。它包括预测滤波器。预测滤波器和时间滤波器其余部分的关系,在图17中更详细地示出。预测滤波器的结构要素见图18和图28。预测滤波器工作的详细说明可在“本发明更详细的说明”一节中找到。
一般说,根据本发明,预测滤波器在MPEG和H.261方式而不在JPEG方式下使用。请记起,在JPEG方式,时间解码器只是将数据送往视频格式化器,它不做任何实质的解码,除了空间解码器所做的那种的解码以外。再次参阅图18,在MPEG方式,前向和后向预测滤波器是等同的,它们分别对MPEG前向和后向预测块进行滤波。然而,在H.261方式,只使用前向预测滤波器,因为H.261不用后向预测。
本发明的两个预测滤波器实质上是相同的。再次参阅图18和28,特别是图28,在那里是预测滤波器结构的框图。每个预测滤波器由串联的四级组成。数据进入格式级331,被放入容易进行滤波的格式之中。在下一级332中,对X-座标进行I-D推算。在维缓存器(dimension buffer)级333完成必要的转置之后,在级334进行对Y-座标的预测。如何进行预测将在以后更详细地说明。需要哪些滤波操作,这由压缩标准来定义。如果是H.261,所进行的滤波与低通滤波器的类似。
再一次参阅图17,多标准操作要求预测滤波器可以被重新配置,以便或是进行MPEG或H.261滤波,或是在JPEG方式根本不进行滤波。如同三芯片系统其它许多可重新配置的方面一样,预测滤波器也是用令牌的方法被重新配置的。令牌还周来告知地址产生器本特定工作方式。用这种办法,地址产生器就可以给预测滤波器提供所需数据的地址,这些地址在MPEG和JPEG之间差别很大。
13、对寄存器的访问
在微处理器接口(micro processor interface,MPI)中的大多数寄存器只能当它们与之有关的级停止时才能被修改内容。因此,各组寄存器总是典型地与访问寄存器联系在一起。在访问寄存器内的值零指明与该访问寄存器有关的那组寄存器不该被修改。在访问寄存器内写入1,就请求某级停止工作。然而,该级并不立即停止,所以级访问寄存器将保持值零,直到该级停止。
任何与MPI有关及靠MPI来完成工作的用户软件都必须“在向某个请求访问寄存器写1之后”等待着,直到从该访问寄存器读出1。如果在其访问寄存器置零期间,用户将值写到某个配置寄存器(configuration register),其结果是不确定的。
14、微处理器接口
在空间解码器和时间解码器内的所有电路上,都使用了标准的一字节宽的微处理器接口(MPI)。MPI的工作与空间解码器和时间解码器的各种时钟都不同步。参看后面更详细说明中的表A.6.1,它示出了用在该接口上的各种不同的MPI信号。信号的字符在输入/输出栏内示出,信号名称在信号名称栏内示出,信号功能的说明在说明栏内示出。MPI的电技术条件见表A.6.2。所有技术条件都按照类型来分类,这些类型在标题为符号的栏内示出。对这些符号代表什么的说明在参数栏内示出。实际的技术条件在相应的最小、最大和单位各栏内示出。
各DC(直流)工作条件可参看表A.6.3。表中各栏的标题与表A.6.2的相同。Dc电特性用表A.6.4示出,其它各栏标题与表A.6.2和A.6.3描述的相同。
15、MPI的读定时
MPI读定时图的AC(交流)特性用图54示出。图中的每一行都用相应的信号名称标出,定时以毫微秒为单位给出。微处理器接口详尽的读定时特性用表A.6.5表示。标题为号码(Number)的栏目用来表示相应于特性栏中示出的信号名称的那个信号。以MIN和MAX为标记的栏目分别给出信号存在的最短时间和信号可用的最长时间。单位一栏给出用来描述信号的测量单元。
16、MPI的写定时
MPI写定时图的总体说明见图54。该图示出了与MPI写定时有关的每一各别信号的名称。信号的名称、特征和其他种种物理特性在6中示出。
键孔地址单元(KEYHOLE ADDRESS LOCATIONS)在本发明中,在键孔寄存器之后放置了某些较不经常访问的存映射单元。键孔寄存器有两个与它有关的寄存器。第一个寄存键孔地址寄存器。第二个寄存器是键孔数据寄存器。键孔地址了在扩展地址空间内部的某个存贮单元(location)。对键孔数存器的一次读操作或写操作就访问了由锁孔地址寄存器指定的单元。在访问锁孔数据寄存器之后,与之有关的锁孔地址寄存值。每次访问,只有将新值写到键孔地址寄存器,才可能在扩地址空间内部进行随机访问。在本发明内的电路可以有不止一孔存贮器映射。不过,不同键孔之间不存在相互影响。
PICTURE_END
再次参考图11,图示在本发明中使用的空间解码器的总框图。过使用该框图来说明PICTURE_END的作用。PICTURE_END功能具应多标准的优点,它能处理H.261编码图象信息、MPEG信号和信号。
如前所述,图11的系统用前述的双线接口互连。每个功能部件得使它们按照图10所示的状态机配置那样工作。
一般说,根据本发明,PICTURE_END的功能在起始码检测器处,后者产生PICTURE_END控制令牌。PICTURE_END控制令牌不加地通过起动控制电路到DRAM接口。在这里它被用来把DRAM接口写交替缓存器清除干净。请记起,只有当交替缓存器满时,其才被写到RAM去。然而,一幅图象可能在缓存器不满处结束,导致图象数据的堵塞。PICTURE_END令牌强使此数据从交替缓存器输出。
由于本发明是多标准机,对于每一压缩标准,机器的操作不一样。更详细一些说,对机器作了这样充分的叙述:它是按照与机器有关的各动作周期来工作的。对于每一个压缩标准,可以由控制令牌和/或从MPU来的输出信号的组合,从总的可得到的动作周期中选出某个数目的周期;或者,可以由这些令牌本身的设计将它们选出。从此意义上说,本发明是这样组织的,使信息推迟进入后继部件,直到在上游部件内所有信息已经收集完毕。本系统处于等待状态,直到数据已准备好传至下级。PICTURE_END信号以这种方式加到编码数据缓存器,PICTURE_END信号的控制部分使数据缓存器的内容被读出和被加到Huffman解码器和视频信号分离(video demultiple-xor)电路。
PICTURE_END控制令牌的另一好处是,为了Huffman解码器和信号分离器使用上的原因,将图象的结束识别出来,即使图象没有典型地达到预期的满程和/或没有典型所预期的那么多信号加到Huuf-man解码器和视频信号分离电路。在这种场合,编码数据缓存器内的信息作为一幅完全的图象被加到Hufman解码器和视频信号分离器。因此,Huffman解码器和视频信号分离器仍能根据系统的设计处理这些数据。
PICTURE_END控制令牌的另一个好处是它能完全出空编码数据缓存器,使得不会有零星信息偶然地遗留在片外DRAM中或交替缓存器中。
PICTURE_END功能的再一个好处是它用于出错复原。例如,假定在编码数据缓存器正被保持的数据量少于典型地使用的量,后者用于描述以一幅单一图象为准的空间信息。因此,最后的那幅图象会被保留在数据缓存器直到交替缓存器满;然而,根据定义,该缓存器不会再注入。在某个时刻,机器会决定出存在某个出错条件。因此,只要PICTURE_END令牌被解码,并且它强制在编码数据缓存器内的数据加到Huffman解码器和视频信号分离器,最后的图象就可解码,信息也能从缓存器出空。其结果是,机器不会进入出错复原方式,并会成功地继续处理编码数据。
使用PICTURE_END令牌的另一个好处是,串行流水线处理器能继续处理未被中断的数据。由于使用了PICTURE_END令牌,串行流水线处理器被配置到能处理比预期数量少的数据,所以处理能继续下去。由于具备出错条件,使用先有技术的机器本身就会停止,这是典型情况。如前所述,当宏块进入编码数据缓存器的贮存区域时,该缓存器就对宏块计数。此外,Huffman解码器和视频信号分离器通常知道对每幅图象解码预期的信息量,即,Huffman解码器和视频信号分离器的状态机部分知道在每幅图象的恢复周期内它要处理的块数。当从编码数据缓存器到来的块数不对时,本来会典型地产生出错恢复的过程。然而,由于PICTURE_END控制令牌已经重新配置了Huffman解码器和视频信号分离器,状态机可以继续工作,这是因为重新配置告知了Huffman解码器和视频信号分离器,状态机的确是在处理适量的信息。
再参阅图10,缓存管理器的令牌解码部分检测由起始码检测器产生的PICTURE_END控制令牌。在正常工作情况下,正如以前述及的交替缓存器的正常工作情况,缓存寄存器先是装满然后出空。再说一次,部分装入数据的交替缓存器不会出空,直到它完全装满和/或它知道出空时间已到。PICTURE_END控制令牌在缓存管理器的令牌解码部分被解码,它强制只有部分装入的交替缓存器将自己出空,将内容送入编码数据缓存器。该内容直接或通过DRAM接口送到Huffman解码器和视频信号分离器。
19、清除操作
PICTURE_END控制令牌的另一优点是它和FLUSH令牌的联合工作。FLUSH指令既与控制状态机的重新配置无关,也与向系统提供数据无关。但是,它将以前的部分信息补全,以供与机器有关的状态机使用。每个这样的状态机将FLUSH控制令牌看作是不予处理的信息。因此,FLUSH令牌被用于将编码数据缓存器留下的空余部分装满,并允许一组完整的信息发送到Huffman解码器和视频信号分离器。因此,FLUSH令牌与缓存器的装填(padding)相似。
在Huffman电路内的令牌解码器认得FLUSH令牌,但是忽视由FLUSH令牌强使进入它的伪数据。于是Huffman解码器只对PICTURE_END令牌和FLUSH令牌到来之前就存在的最后图象缓存器的那些数据内容进行操作。单独使用PICTURE_END令牌或与FLUSH令牌联合使用的另一个好处是Huffman解码器电路的重新配置和/或重组(reorgan-ization)。由于PICTURE_END令牌的到来,Huffman解码器电路知道它将有少于正常预期的信息来对最后图象解码。Huffman解码电路结束对包含在最后图象内的信息的处理,并将此信息经过DRAM输出至逆向模式化器内。在最后图象的识别之后,Huffman解码器立即进入其清除方式并且为下一图象信息的来临作重新调整。
20、清除作用
根据本发明,FLUSH令牌用以通过整个流水线处理器,并确保各缓存器被出空、其它电路被重新配置以等待新数据的到来。更具体地说,本发明包含PICTURE_END令牌、装填字和FLUSH令牌的结合,它向串行流水线处理器指出对当前图象形式的图象处理已经完毕。此后,各状态机需要重新配置以等待新数据到来接受新处理。还要注意,FLUSH令牌充当本系统的特别复位。FLUSH令牌在它通过每一级时将它复位,但是允许后面的各级继续运行。这就防止了数据丢失。换言之,FLUSH令牌是一种可变复位而不是绝对复位。
21、STOP_AFTER_PICTURE
STOP_AFTER_PICTURE功能用于在串行流水线去压缩电路运行中的某一逻辑点上停止它的工作。此时,产生PICTURE_END令牌,指示数据已结束从数据输入线进入,并且装填操作也已完成。装填操作将部分空缺的数据令牌装满。然后,产生FLUSH令牌,它通过串行流水线系统,将所有信息从寄存器推出,强制这些寄存器回到它们中性的备用状态。换言之,PICTURE_END令牌发出图象结束的信号,而STOP_AFTER_PICTURE则发出所有当前操作结束的信号。
22、多标准搜索方式
本发明的另一特色是使用了SEARCH_MODE控制令牌,它用来重新配置串行流水线处理器的输入,以检查进入的位流。当设定搜索方式时,起始码检测器只搜索用于任一压缩标准的特定起始码或标记。然而,必须理解,为实现此目的,也可利用来自其它数据位流的其它图象。因此,这些图象可在整个本发明中使用,以变成另一种实现,后者除了有可重新配置的电路之外还能混合使用控制令牌和数据令牌以得到类似的操作。
在本发明中,搜索方式的使用在许多场合下是适宜的,其中有:1)如果发生数据位流的中断;2)当用户用有意改变通道(例如,用传送压缩数字视频信号的电缆送来数据)的办法中断数据位流时;或3)当用户从可控数据源(如光盘或视盘)启动快进或快倒时。一般说,当用户在机器不期望发生中断的地方中断串行流水线正常运行时,搜索方式就是适宜的。
当任一种搜索方式被设置时,起始码检测器就寻找适于产生与机器无关的令牌的输入起始映象。在识别与标准有关的起始映象之前进入起始码检测器的所有数据都被认为无意义而抛弃,在等待此信息时机器处于空闲状态。
起始码检测器可以采取许多配置中的任一种。例如,这些配置之一允许搜索一组图象或允许更高程度的起始码。这一模式使起始码检测器丢弃它的所有输入,而去寻找group_start标准映象。当识别到这样的映象时,起始码检测器就产生GROUP_START令牌,然后搜索方式自动复位。
重要的是注意到,Huffman解码器和视频信号分离器是根据多种输入信号工作的单一电路。这些输入信号有:CODING_STANDATD信号,也有与标准无关的各个设定(set-up)信号。CODING_STANDA-RD信号将直接传送来自输入位流、为Huffman解码器和视频信号分离器所需的信息。然而,Huffman解码器和视频信号分离电路是在与标准无关的信号序列的运行下工作的。
选择这种工作方式是因为它最有效,而且按照它本来的设计,可以用在特别控制令牌的场合。使用这些特别令牌,可以将与标准有关的信号送入Huffman解码器和视频信号分离器而不是传送这些实际信号本身。
23、逆向模式化
逆向模式化是所有三种标准的一个共同特点,它对于所有三种标准是相同的。一般说,在令牌缓存器内的数据令牌含有被量化系数(quantized coefficients)的值的信息,也含有系数间表现出来的零的个数的信息(这是一种游程长度编码的形式)。本发明的逆向模式化器已经适应与令牌一起使用,它只是扩充了有关零的游程的信息,使数据令牌含有必需的64个值。此后,在数据令牌中的值就是可被逆向量化器使用的经过量化的系数。
24、逆向量化器
本发明的逆向量化器是对序列解码的必需部件,但它已经实现成允许整个集成电路组处理多标准数据。此外,逆向量化器已经适合与令牌一起使用。逆向量化器位于逆向模式化器和反DCT(IDCT)之间。
例如,在本发明中,在逆向量化器中的加法器用于在数据送到IDCT上之前加某个数到象素解码号。
IDCT使用了象素解码号,此号随着信息编码所使用的每个标准而变化。为了对信息正确地解码,在数据继续传送到IDCT之前,由逆向量化器将1024的值加到解码号上。
加法器已经在逆向量化器中。使用这些加法器使量化器之前的数据到达IDCT时标准化了。这就在处理被不同标准压缩的数据时省去了集成电路内额外的电路系统或软件。其它允许多标准运行的操作在“量化后操作”期间完成,讨论见后。
附有数据的控制令牌被解码,需要逆向量化器完成的各种实现标准化的程序被识别,识别的详情见后。这些“量化后”操作的实现,都避免了电路的重复,也都允许本集成电路处理多标准编码数据。
25、Huffman解码器和Parser机
再参阅图11和27,空间解码器包括Huffman解码器,后者用来对被不同压缩标准作过Huffman编码的数据进行解码。
JPEG、MPEG和H.261标准的每一种都需要对某些数据作Huffma-n编码,但是每种标准所要求的Huffman解码却在一些重要方面各不相同。在本发明的空间解码器内,并不是设计并制造三个各别的Huffman解码器,每种标准一个;本发明识别出每种Huffman解码器的共同方面,只制造这些方面一次,用这样的方法来节约贵重的片芯空间。此外,使用了巧妙的多部分(multi-part)算法,使每种标准的Huffman解码器的更多方面也能与其它标准共同,否则就做不到这点。
简单地说,Huffman解码器321与其它单元一起工作,见图27。这些其它单元是Parser状态机322,输入移位器323,数据索引单元324,算术逻辑单元325,和令牌格式化器326。如前所述,这些部分之间的连接由双线接口来控制。关于这些单元的工作情况将在以后作更详细介绍,这里重点说明根据本发明Huffman解码器在支持多标准操作方面的一些情况。
本发明的Parser状态机是可编程状态机,其作用是协调视频Parser(Video Parser)的其余部分。作为对数据的响应,Parser状态机产生与此数据并排的控制字,控制字被传到系统的其它部件,对这些其它部件起作用,从而达到控制的目的。由于这些部件通过双线接口连接,并排地传送控制字和有关数据不但有用而且必不可少。这样,数据和控制就同时到达。在图27中,控制字的传送用控制线327表示,它位于连接各部件的数据线328之下。除其它任务之外,这个码字识别正在被解码的那个特定标准。
Huffman解码器321也具有某些控制功能。特别是,Huffman解码器321含有能控制数据索引单元324和算逻单元325某些功能的状态机。由Huffman解码器来控制这些单元是必要的,以便对部件级信息作出恰当的解码。如果让Parser状态机322来做这些决定,就要花太多的时间。
本发明的Huffman解码器的一个重要方面是能对读入Huffman解码器的各编码数据位取反。这在对H.261型的Huffman码解码时是必要的,因为H.261(事实上还有MPEG)所使用的Huffman码的那种特别类型和JPEG所使用的码有相反的极性。因此,使用倒相器事实上就允许了Huffman解码器对三种标准使用同一张表。Huffman解码器如何实现所有三种标准的其它方面在“对本发明更详细的说明”中更详细地讨论。
数据索引单元324完成多部(muti-part)算法中的第二部。该单元有一张提供实际Huffman解码(decoded)数据的查找表。对各表项的组织以Huffman解码器产生的索引号为基础。
算逻单元(ALU)325实现多部算法的各剩余部分。特别是,ALU处理信号扩展。ALU还包括保持矢量预测和DC预测的寄存器组(register file),它们的使用在与预测滤波器有关的各节中讨论。此外,ALU还有一些计数器,它们对正由空间解码器解码的图象的结构从头到尾地计数,尤其是,图象的尺寸被编程,送入与计数器有关的寄存器中,这就方便了“图象起始”的检测和各宏块码的起始。
根据本发明,令牌格式化器326(Token formatter,TF)将经过解码的数据装配到数据令牌中去,然后令牌被传送到空间解码器的其它级或其它部分。
在本发明中,输入移位器323接收来自FIFO(先进先出)的数据。FIFO缓存通过起始码检测器的数据。由输入移位器接收的数据一般属于两种类型:数据令牌和起始码。起始码检测器已经将这些起始码用各自的令牌代换,这在令牌一节中进一步讨论。注意:数据中出现最多的,大概是需要解码的数据令牌。
输入移位器323将数据串行地送到Huffman解码器321。另一方面,它并行地传送控制令牌。在Huffman解码器中,Huffman编码数据按照多部算法的第一部分被解码。尤其是,特定的Huffman码被识别,然后用索引号替换它。
Huffman解码器321还识别某些需要由图27中其它部件作特殊处理的数据。这种数据包括块结束和退出。在本发明中,在Huffman解码器321内检测它们,而不是数据索引单元324中检测它们,这就节省了时间。
这个索引号然后被传送到数据索引单元324。数据索引单元本质上是查找表。根据算法的一个方面,查找表与JPEG规定的Huffm-an码表相差无几。一般说,查找表使用压缩(condensed)数据格式,这种格式是JPEG传送替代的JPEG表时所规定的。
经过解码的索引号或其它数据与伴随的控制字一起,从数据索引单元324送到ALU 325,后者进行前述的各项操作。
从ALU 325出来,数据和控制字被送到令牌格式化器326(TF)。在令牌格式化器中,数据根据需要与控制字组合以形成令牌,令牌然后被传送到空间解码器的下面各级。注意,在此时此处,系统要用的令牌都有了。
26、逆向离散余弦变换(Inverse Discretc Cosine Tramform)
根据本发明,逆向离散余弦变换(IDCT)对与图象DC成份的频率有关的数据进行去压缩。当一幅特定的图象正被压缩时,图象中亮光的频率被量化,因而减少了需要存贮的信息量。IDCT取此经过量化的数据,将它去压缩,还原成频率信息。
IDCT对图象的一部分操作。这一部分的大小是8×8象素。对该数据的数学运算主要由对数据编码所用的特定标准来决定。然而,在本发明中,有效地利用了各标准共同的数学操作以避免电路系统不必要的重复。
由于使用了特定的定标次序(scaling order),算法上下两部分的对称性改善了,所以共同的数学操作可以再次使用,消除了额外的电路系统。
IDCT响应许多多标准令牌。IDCT的第一部分检查进来的数据,以确保数据令牌的大小正确,适合处理。事实上,在某此场合,如果误差不太大,令牌流可以被改正。
27、缓存管理器
在本发明缓存管理器接受输入的视频信息,它还给地址产生器提供数据来临、显示和帧频的定时信息。使用了多个缓存器以允许出现(presentation)率和显示(display)率的变化。在典型情况下,出现率和显示率总是随此前已编码的数据和正在显示信息的监视器而变化。数据到来的速度通常随编码、解码中的错误或随产生数据的源材料而变化。当信息来到缓存管理器时,它被去压缩。然而,数据是按照对去压缩电路有用的次序排列的,而不是对特定的显示单元有用的次序排列的。当一块数据进入缓存管理器时,缓存管理器向地址产生器提供信息,使该数据块能按照显示装置能够使用的次序放置。缓冲管理器将调整输入数据块所需要的帧速变换考虑进去,以使数据块能在所使用的特定显示装置上显示出来。
在本发明中,缓存管理器的主要任务是向地址产生器提供信息。尽管如此,也还要它同本系统的其它部件连接。例如,有一个接口同输入FIFO相连,FIFO将令牌传送到缓存管理器,缓存管理器再将这些令牌传到写地址产生器。
缓存管理器还同显示器的地址产生器连接,以接收该显示装置是否准备好显示新数据的信息。缓存管理器还确认显示器的地址产生器已经清除了缓存器内的显示信息。
本发明的缓存管理器始终监视着特定的缓存器是否空、满、准备使用或正在使用。它还始终监视着与每个缓存器内特定数据有关的出现号(presentation number)。因此,缓存管理器用一次只使一个缓存器准备好显示的方法,部分地决定这些缓存器的状态。一旦某一缓存器被显示,该缓存器就处于“空闲”状态。当缓存管理器接收到PICTURE_START、FLUSH、有效或访问令牌时,它就决定每个缓存器的状态及其接受新数据的准备情况。例如,PICTURE_STA-RT令牌使缓存管理器巡视每个缓存器,以发现哪一个可以接受新数据。
缓存管理器也可配置成能处理它收到的令牌所要求的多种标准。例如,在H.261标准中,在显示期间,数据可能被跳过。如果这样的令牌到缓存管理器,要跳过的数据就会从贮存它的缓存器中被清除掉。
因此,通过对缓存器的管理,可以根据用以对数据编码的压缩标准、根据数据解码的速率和根据所使用特定类型的显示装置,将数据有效地显示出来。
相信上述说明对本发明的总体概念、系统实现和各方面工作做了足够详细的适当叙述,使得具有本行一般技能的人能借助它所有的特点、目标和优点来制作和实际使用本发明。然而,为了便于对本发明有进一步更深入细致的了解,为了便于获得与本发明各实施例更具体、更商品化的实现有关的补充细节,建议阅读以下的进一步说明和解释。
这是对一个多标准视频解码器芯片集的更详细的说明。它被分为三个主要部分:A、B和C。为了便于组织、简洁以及说明的方便,这个附加的公开在下面的部分中被建立。
·芯片集中芯片的公共特征描述:
·令牌(TOKEN)
·双线接口
·DRAM接口
·微处理器接口
·时钟
·空间解码芯片的说明
·时间解码芯片的说明
A.1
第一说明部分包括了绝大部分与使用芯片集相关的电路设计问题。
A.1.1排印约定
为了强调某些类型的信息使用了印刷排印约定小集:
NAMES_OF_TOKENS令牌名
Wire_name 信号高电平有效
Wire_name 信号低电平有效
register_name 寄存器名
A.2视频解码器系列
·30MHz操作
·解码MPEG,JPEG和H.261
·编码数据率到25Mb/S
·视频数据率到21MB/S
·MPEG分辨率达704×480,30Hz,4:2:0
·可变色度采样格式
·全JPEG基线(baseline)解码
·少贴粘(Glue-less)页模式DRAM接口
·208条引腿的PQFP型封装
·独立编码数据和解码器时钟
·重排(Re=orders)MPEG图象序列
·视频解码器系列提供一低芯片数方案来实现高分辨率数字视频解码器。为支持三种不同的视频和图象编码系统:JPEG,MPEG和H.261,芯片集通常是可配置的。
全JPEG基线图象解码被支持。720×480,30Hz,4:2:2的JPEG编码的视频可以被实时解码。
CIF(公共交换格式)和QCIF H.261视频可以被解码。具有高达740×480,30Hz,4:2:0格式的全特征(featrue)MPEG视频可被解码。
注意:上述值只是对本发明一个实施例的举例说明而不必限制于此。相应地,其它取值和/或范围的使用将受到赏识。
A.2.1系统构造
A.2.1.1输出格式
在下面给出的例子当中,每一例都需要某种形式的输出格式化器,以取得空间解码器或时间解码器的输出中出现的数据,并为计算机或显示系统对其重新格式化。这一格式化的细节对不同的应用是不同的。在某种简单情况下,全部所需的只是一个地址产生器,以取得由解码器芯片输出的块格式化数据,并以一光栅顺序将其写入存贮器。
图象格式化器是一单芯片VLSI设备,它提供大范围的输出格式化功能。
A.2.1.2 JPEG静止图象解码
一个没有芯片外DRAM的单一空间解码器可以迅速解码基线JPEG图象。空间解码器将支持基线JPEG的所有特征。然而,可被解码的图象尺寸将受到用户提供的输出缓冲器大小的限制。输出格式化器的特性可能会限制能被支持的色度取样格式和彩色空间。
A.2.1.3 JPEG视频解码
给空间解码器加上芯片外DRAM可使其能实时解码JPEG方式编码的视频图象。所需要的缓冲器的大小和速度将依视频和编码数据率而定。时间解码器不需要解码JPEG方式编码的视频。然而,如果时间解码器出现于一多标准解码器芯片集中,当系统为JPEG操作而配置时,它仅使数据通过时间解码器而不作任何改变或修改。
A.2.1.4 H.261解码
要实现一个H.261视频解码器,空间解码器和时间解码器均是需要的。这DRAM对上述两种器件的接口是可配置的,以便在使用小图象格式和低编码数据率工作时完成适当操作所需的DRAM数量可以减少。典型地说,每一空间解码器和时间解码器需要一个单个4Mb(也就是512K×8)DRAM。
A.2.1.5 MPEG解码
完成MPEG操作所需的配置与H.261所需的相同。然而,要支持MPEG可能出现的更大图象格式可能需要更大的DRAM缓冲器,如同具有本领域一般技能的人所共识的。
A.3 令牌
A.3.1 令牌格式
相应于本发明,令牌为通过解码器芯片集的通信信息提供了广泛的格式。虽然在本发明中,令牌的每一个字都至少有8个比特宽,具有本领域中一般技能的人所共识的,令牌可以为任意宽度。此外一单一令牌可以跨一个或几个字;这可以通过在每个字中使用一扩展位而实现。令牌的格式总结在表A.3.1中。
扩展位指示一个令牌是否继续到另一个字。在令牌的所有字中除最后一个字以外扩展位都被设置为1。如果令牌的第一个字具有为0的扩展位,就说明此令牌只有一个字长。
每个令牌由一个地址字段识别,它从令牌第一个字的第7比特开始。此地址字段长度可变,并可以长达多个字(在当前芯片中没有长度超过8比特的地址,然而一个具此领域一般技能的人将再次认识到地址可以是任何长度的)。
某些接口传送超过8比特的数据。举例说,空间解码器的输出有9比特宽(包括扩展位则是十比特)。唯一从这些额外比特取得好处的令牌是数据令牌。为在系统中某特定位置执行处理,数据令牌可以根据需要具有任意多的比特。所有的其它令牌均忽略额外的比特。
A.3.2 数据令牌
数据令牌将数据从一个处理级带到下一个。因此,这个令牌的特性在其通过解码器时发生改变。而且,数据令牌携带的数据含义根据数据令牌在系统中的位置而变化,也就是说,数据是依位置而定的。在这一点上,根据数据令牌在空间解码器中的位置,数据既可以是频域也可以是像素域数据。例如,在空间解码器的输入,数据令牌携带组装于8比特字中的比特串编码视频数据。在这里,每令牌的长度没有限制。然而,与之相比,在空间解码器的输出,每一数据令牌恰好携带64个字且每个字都是9比特宽。
A.3.3 使用令牌格式化的数据
在某些应用当中,电路需要与解码器或芯片集的输入端或输出端直接相连。在多数情况下,收集数据令牌并查出几个提供同步信息(如PICTURE_START)的令牌已经足够。在这点上,请参见后面的A.16部分,“连接空间解码器的输出端”和A.19部分“连接时间解码器的输出端”。
如上所讨论,观察扩展位的活动足以识别何时一个新的令牌开始。再则,扩展位标志了当前令牌的最后的字。此外,地址字段可被测试以识别令牌。不需要或不能识别的令牌可以被消灭(并丢弃)而不需知道它们的内容。然而,被识别的令牌会引起一个适当行为的出现。
此外,输入给空间解码器的数据可以作为被编码的数据字节或者以数据令牌(见A.10部分,“编码数据输入”)的形式被提供。通过编码数据端口或通过微处理器接口提供令牌可以使解码器芯片集的许多特点从数据流被设置。这提供了通过微处理器接口完成配置的另一种途径。
表A.3.1令牌一览表
7 6 5 4 3 2 1 0 |
令牌名称 |
参考 |
0 0 1 |
QUANT_SCALE | |
0 1 0 |
PREDICTION_MODE | |
0 1 1 |
(保留) | |
1 0 0 |
MVD_FORWARDS | |
1 0 1 |
MVD_BACKWARDS | |
0 0 0 0 1 |
QUANT_TABLE | |
0 0 0 0 0 1 |
DATA | |
1 1 0 0 0 0 |
COMPONENT_NAME | |
1 1 0 0 0 1 |
DEFINE_SAMPLING | |
1 1 0 0 1 0 |
JPEG_TABLE_SELECT | |
1 1 0 0 1 1 |
MPEG_TABLE_SELECT | |
1 1 0 1 0 0 |
TEMPORAL_REFERENCE | |
1 1 0 1 0 1 |
MPEG_DCH_TABLE | |
1 1 0 1 1 0 |
(保留) | |
1 1 0 1 1 1 |
(保留) | |
1 1 1 0 0 0 0 |
(保留)SAVE_STATE | |
表A.3.1令牌一览表(续)
7 6 5 4 3 2 1 0 |
令牌名称 |
参考 |
1 1 1 0 0 0 1 |
(保留)RESTORE_STATE | |
1 1 1 0 0 1 0 |
TIME_CODE | |
1 1 1 0 0 1 1 |
(保留) | |
0 0 0 0 0 0 0 0 |
NULL | |
0 0 0 0 0 0 0 1 |
(保留) | |
0 0 0 0 0 0 1 0 |
(保留) | |
0 0 0 0 0 0 1 1 |
(保留) | |
0 0 0 1 0 0 0 0 |
SEQUENCE_START | |
0 0 0 1 0 0 0 1 |
GROUP_START | |
0 0 0 1 0 0 1 0 |
PICTURE_START | |
0 0 0 1 0 0 1 1 |
SLICE_START | |
0 0 0 1 0 1 0 0 |
SEQUENCE_END | |
0 0 0 1 0 1 0 1 |
CODING_STANDARD | |
0 0 0 1 0 1 1 0 |
PICTURE_END | |
0 0 0 1 0 1 1 1 |
FLUSH | |
0 0 0 1 1 0 0 0 |
FIELD_INFO | |
表A.3.1令牌一览表(续)
7 6 5 4 3 2 1 0 |
令牌名称 |
参考 |
0 0 0 1 1 0 0 1 |
MAX_COMP_ID | |
0 0 0 1 1 0 1 0 |
EXTENSION_DATA | |
0 0 0 1 1 0 1 1 |
USER_DATA | |
0 0 0 1 1 1 0 0 |
DHT_MARKER | |
0 0 0 1 1 1 0 1 |
DQT_MARKER | |
0 0 0 1 1 1 1 0 |
(保留)DNL_MARKER | |
0 0 0 1 1 1 1 1 |
(保留)DRI_MARKER | |
1 1 1 0 1 0 0 0 |
(保留) | |
1 1 1 0 1 0 0 1 |
(保留) | |
1 1 1 0 1 0 1 0 |
(保留) | |
1 1 1 0 1 0 1 1 |
(保留) | |
1 1 1 0 1 1 0 0 |
BIT_RATE | |
1 1 1 0 1 1 0 1 |
VBV_BUFFER_SIZE | |
1 1 1 0 1 1 1 0 |
VBV_DELAY | |
1 1 1 0 1 1 1 1 |
PICTURE_TYPE | |
1 1 1 1 0 0 0 0 |
PICTURE_RATE | |
1 1 1 1 0 0 0 1 |
PEL_ASPECT | |
表A.3.1令牌一览表(续)
7 6 5 4 3 2 1 0 |
令牌名称 |
参考 |
1 1 1 1 0 0 1 0 |
HORIZONTAL_SIZE | |
1 1 1 1 0 0 1 1 |
VERTICAL_SIZE | |
1 1 1 1 0 1 0 0 |
BROKEN_CLOSED | |
1 1 1 1 0 1 0 1 |
CONSTRAINED | |
1 1 1 1 0 1 1 0 |
(保留)SPECTRAL_LIMIT | |
1 1 1 1 0 1 1 1 |
DEFINE_MAX_SAMPLING | |
1 1 1 1 1 0 0 0 |
(保留) | |
1 1 1 1 1 0 0 1 |
(保留) | |
1 1 1 1 1 0 1 0 |
(保留) | |
1 1 1 1 1 0 1 1 |
(保留) | |
1 1 1 1 1 1 0 0 |
HORIZONTAL_MBS | |
1 1 1 1 1 1 0 1 |
VERTICAL_MBS | |
1 1 1 1 1 1 1 0 |
(保留) | |
1 1 1 1 1 1 1 1 |
(保留) | |
A.3.4令牌说明
本部分作为资料给出了根据本发明在空间解码器和时间解码器内被提供的令牌。见表A.3.2
注意:
·“r”表示那些当前被保留且取值为0的比特。
·所有的整数都是无符号数,除非特别指明。
表A.3.2 在空间解码器和时间解码器内提供的令牌
E 7 6 5 4 3 2 1 0 |
说明 |
1 1 1 1 0 1 1 0 0 |
BIT_RATE test into only |
1 r r r r r r b b | 携带MPEG比特率参数R。由Huffman(哈夫曼)解码器在解码-MPEG比特串时产生b-一个由MPEG定义的18比特整数 |
1 b b b b b b b b |
0 b b b b b b b b |
1 1 1 1 1 0 1 0 0 |
BROKEN_CLOSED携带两个MPEG标志位C-closed_gapb-broken_link |
0 r r r r r r c b |
1 0 0 0 1 0 1 0 1 |
CODING_STANDARDS-一个指示当前编码标准的8比特整数。其值当前被赋为:0-H.2611-JPEG2-MPEG |
0 s s s s s s s s |
1 1 1 0 0 0 0 c c |
COMPONENT_NAME联系一分量ID与分量名之间的关系。参见......C-2比特分量IDn-8比特分量“名称” |
0 n n n n n n n n |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
1 1 1 1 1 0 1 0 1 |
CONSTRAINEDC-携带由一MPEG比特串解码来的约束参量标志 |
0 r r r r r r r c |
1 0 0 0 0 0 1 c c |
数据携带数据通过解码器芯片集C-一个2比特整数分量ID(见A.3.5.1)。这个字段不是为携带编码的令牌而定义的(不是象元信息) |
1 d d d d d d d d |
0 d d d d d d d d |
1 1 1 1 1 0 1 1 1 |
DEFINE_MAX_SAMPLING最大水平和垂直取样数。它们说明了在任意宏块分量中水平/垂直的最大块数。见A.3.5.2h-2比特水平取样数v-2比特垂直取样数 |
1 r r r r r r h h |
0 r r r r r r v v |
1 1 1 0 0 0 1 c c |
DEFINE_SAMPLING某一特定颜色分量的水平和垂直采样。见A.3.5.2C-2比特分量IDh-2比特水平采样数V-2比特垂直采样数 |
1 r r r r r r h h |
0 r r r r r r v v |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
0 0 0 0 1 1 1 0 0 |
DHT_MARKER此令牌通知视频分配器,它后面的数据令牌包含有哈夫曼表说明,给出使用JPEG“定义哈夫曼表段”的文法。此令牌只在编码标准是JPEG时是合法的此令牌是当数据串中出现一个DHT记号时由起始码检测器在JPEG解码过程中产生的 |
0 0 0 0 1 1 1 1 0 |
DNL_MARKER此令牌通知视频分配器其后的数据令牌包含有JPEG参数NL,该参数指定了一帧中的行数。此令牌当数据串中出现一个DNL记号时由起始码检测器在JPEG解码过程中产生的。 |
0 0 0 0 1 1 1 0 1 |
DQT_MARKER此令牌通知视频分配器它后面的数据令牌包含有量化表说明,给出使用JPEG“定义量化表段”的文法。这个令牌只有在编码标准是JPEG时才是合法的。视频分配器产生一个OUANT_TABLE令牌,它包含新量化表信息。这个令牌是当数据串中出现一个DQT记号时由起始码检测器在JPEG解码过程中产生的。 |
0 0 0 0 1 1 1 1 1 |
DRI_MARKER此令牌通知视频分配器它后面的数据令牌包含有JPEG参数R;该参数指明重新开始记号之间的最小编码单元的数目。此令牌是当数据串中出现一个DRI记号时,由起始码检测器在JPEG解码过程中产生的。 |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
1 0 0 0 1 1 0 1 0 |
EXTENSION_DATA JPEG此令牌通知视频分配器它后面的数据令牌包含有扩展数据。参见A.11.3“起始码向令牌的转换”,以及A.14.6“用户和扩展数据的接收”。在JPEG操作中八比特字段,携带JPEG记号值。这使得扩展数据的类别可被识别。 |
0 v v v v v v v v |
0 0 0 0 1 1 0 1 0 |
EXTENSION_DATA MPEG此令牌通知视频分配器它后面的数据令牌包含有扩展数据。参见A.11.3“起始码向令牌的转换”,以及A.14.6,“用户和扩展数据的接收”。 |
1 0 0 0 1 1 0 0 0 |
FIELD_INFO |
0 r r r t p f f f |
携带关于其后图象的信息以辅助该图象的显示。此功能不由任何现有编码标准发出。t-如果图象是一个隔行帧,这个比特指示上面的字段是否是第一个(t=0)或第二个。p-如果图象是字段,它指示下一图象是一帧中的上字段(p=0)还是下字段。f-一个3比特数,指明字段在8字段PAL序列中的位置。 |
0 0 0 0 1 0 1 1 1 |
FLUSH用于指示当前编码数据的结尾并推动数据串的结尾通过解码器。 |
0 0 0 0 1 0 0 0 1 |
GROUP_START在解码MPEG过程中找到图象起始码群时,或解码JPEG过程中找到帧记号时被产生。 |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
1 1 1 1 1 1 1 0 0 |
HORIZONTAL_MBSh-一个13比特整数,指示以宏块表示的图象的水平宽度。 |
1 r r r h h h h h |
0 h h h h h h h h |
1 1 1 1 1 0 0 1 0 |
HORIZONTAL_SIZEh-16比特整数,指示用象素表达的图象的水平宽度。它可以取任何整数值。 |
1 h h h h h h h h |
0 h h h h h h h h |
1 1 1 0 0 1 0 c c |
JPEG_TABLE_SELECT通知逆量化器在特定颜色分量上选用哪个量化表。C-2比特分量ID(见1.3.5.1)t-2比特整数表。 |
0 r r r r r r t t |
1 0 0 0 1 1 0 0 1 |
MAX_COMP_IDm-2比特整数,指示将在下一图象中使用的分量ID的最大值(见A.3.5.1)。 |
0 r r r r r r m m |
0 1 1 0 1 0 1 c c |
MPEG_DCH_TABLE配置对于颜色分量CC应使用哪个DC系数Huffman表。c-2比特分量ID(见A.3.5.1)t-2比特整数表号码。 |
0 r r r r r r t t |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
0 1 1 0 0 1 1 d n |
MPEG_TABLE_SELECT通知逆量化器是否对于内部或非内部信息使用缺省或用户定义量化表。n-0指示内部信息,1指示非内部d-0指示缺省表,1用户定义 |
1 1 0 1 d v v v v |
MVD_BACKWARDS携带向后运动矢量的一个分量(垂直或水平)d-0指x分量,1指y分量v-12比特2的补码数,最低有效位提供1/2的象素的分辨率 |
0 v v v v v v v v |
1 1 0 0 d v v v v |
MVD_FORWARDS携带向前运动矢量的一个分量(垂直或水平)。d-0指X分量,1指Y分量。v-12比特2的补码数,最低有效位提供1/2象素的分辨率 |
0 v v v v v v v v |
0 0 0 0 0 0 0 0 0 |
NULL不做任何事。 |
1 1 1 1 1 0 0 0 1 |
PEL_ASPECTp-一个由MPEG定义的4比特整数。 |
0 r r r r p p p p |
0 0 0 0 1 0 1 1 0 |
PICTURE_END由起始码检测器加入,指示当前图象的结束。 |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
1 1 1 1 1 0 0 0 0 |
PICTURE_RATEp-一个4比特整数,由MPEG定义。 |
0 r r r r p p p p |
1 0 0 0 1 0 0 1 0 |
PICTURE_START指示一幅新图象的开始。n-一个由起始码检测器分配给图象的4比特图象索引 |
0 r r r r n n n n |
1 1 1 1 0 1 1 1 1 |
PICTURE_TYPE MPEGp-一个指示后面图象的图象编码类型的2比特整数0-内部1-预测2-双向预测3-DC内部 |
0 r r r r r r p p |
1 1 1 1 0 1 1 1 1 |
PICTURE_TYPE H.261指示不同的H.261选项是开(1)还是关(0).这些选项对于MPEG和JPEG总是关。s-分裂屏指示器。d-资料摄像机f-解除图象冻结源图象格式:q=0·QCIFq=1·CIF |
1 r r r r r r 0 1 |
0 r r s d f q 1 1 |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
0 0 1 0 h y x b f |
PREDICTION_MODE一个标志位集,指示后面宏块的预测方式。f-向前预测b-向后预测x-复位向前向量预测y-复位向后向量预测h-使能H.261环滤波器 |
0 0 0 1 s s s s |
QUANT_SCALE通知逆量化器一新标量因子s-从1到31范围的5比特整数。0是保留值。 |
1 0 0 0 0 1 r t t |
QUANT_TABLE以64个8比特无符号整数加载指定的逆量化器表。取值按z字形排列t-指明拟加载的逆量化器表的2比特整数。 |
1 q q q q q q q q |
0 q q q q q q q q |
0 0 0 0 1 0 1 0 0 |
SEQUENCE_ENDMPEG seguence_end_code和JPEG EOI记号使这个令牌被产生。 |
|
0 0 0 0 1 0 0 0 0 |
SEQUENCE_START由MPEG序列起始码产生。 |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
1 0 0 0 1 0 0 1 1 |
SLICE_START相应于MPEG slice_start,H.261 GOB和JPEG再同步间隔。8比特整数“S”的意义随不同编码标准而异。MPEG·片垂直位置-1H.261·块组号-1JPEG·再同步间隔标识(仅4个最低位) |
0 s s s s s s s s |
1 1 1 0 1 0 0 t t |
TEMPORAL_REFERENCEt-携带时间参照。对于MPEG,这是一个10比特整数。对H.261,只有5个最低位被使用,高位将总为0。 |
0 t t t t t t t t |
1 1 1 1 0 0 1 0 d |
TIME_CODEMPEG time_code:-停帧标志-指示小时的5比特整数m-指示分钟的6比特整数-指示秒的6比特整数p-指示图象的6比特整数 |
1 r r r h h h h h |
1 r r m m m m m m |
1 r r s s s s s s |
0 r r p p p p p p |
1 0 0 0 1 1 0 1 1 |
USER_DATA JPEG令牌通知视频分配器后面的数据令牌包含有用户数据。见A.11.3,,“起始码向令牌的转换”和A.14.6,“用户和扩展数据的接收”。在JPEG操作中,8比特字段“V”携带JPEG记号值。这使得用户数据的类别可以被识别。 |
0 v v v v v v v v |
表A.3.2 在空间解码器和时间解码器内提供的令牌(续)
E 7 6 5 4 3 2 1 0 |
说明 |
0 0 0 0 1 1 0 1 1 |
USER_DATA MPEG此令牌通知视频分配器后面的数据令牌包含有用户数据。见A.11.3“起始码向令牌的转换”和A.14.6“用户和扩展数据的接收”。 |
1 1 1 1 0 1 1 0 1 |
VBV_BUFFER_SIZEs-一个如MPEG定义的10比特整数。 |
1 r r r r r r s s |
0 s s s s s s s s |
1 1 1 1 0 1 1 1 0 |
VBV_DELAYb-一个如MPEG定义的16比特整数。 |
1 b b b b b b b b |
0 b b b b b b b b |
1 1 1 1 1 1 1 0 1 |
VERTICAL_MBSv-一个表明以宏块为单位的图象的垂直的大小的13比特整数。 |
1 r r r v v v v v |
0 v v v v v v v v |
1 1 1 1 1 0 0 1 1 |
VERTICAL_SIZEv-一个表明以象素为单位的图象垂直大小的16比特整数,它可以是任何整数值。 |
1 v v v v v v v v |
0 v v v v v v v v |
A.3.5 令牌中的数字标示
A.3.5.1 分量标识号码
相应于本发明,分量ID号码是一个指明一颜色分量的2比特整数典型地说,这个2位字段被作为头标的一部分置于数据令牌中。对于MPMG和H.261,其关系是很简单的:见表A.3.3
表A.3.3 对MPEG和H.261的分量ID
分量ID |
MPEG或H.261颜色分量 |
0 |
亮度(Y) |
1 |
蓝色差信号(Cb/u) |
2 |
红色差信号(Cr/v) |
3 |
不使用 |
对于JPEG,情况要更复杂,因为JPEG不限制可以使用的颜色分量。解码器芯片在每一扫描中允许高达四种不同颜色。ID在颜色分量的说明到达解码器时被连续分配。
A.3.5.2 水平和垂直采样数
对于四个颜色分量中的每一个,对水平或垂直排列于宏块中的块数都有一详细说明,此说明包括一个比块数小1的两比特整数。
例如,在MPEG(或H.261)中在具4:2:0色度采样(图A.15.4)和分量ID如表A.3.3被分配。
表A.3.4对4:2:0/MPEG的采样数
分量ID |
水平采样数 |
以块为单位的宽度 |
垂直采样数 |
以块为单位的高度 |
0 |
1 |
2 |
1 |
2 |
1 |
0 |
1 |
0 |
1 |
2 |
0 |
1 |
0 |
1 |
3 |
不用 |
不用 |
不用 |
不用 |
见A.3.5.1注意:JPEG在处理4:2:2数据时对其宏块要求一2:1:1结构。
表A.3.5对于4:2:2 JPEG的采样数
分量ID |
水平采样数 |
以块数计量的宽度 |
垂直采样数 |
以块计量的高度 |
Y |
1 |
2 |
0 |
1 |
U |
0 |
1 |
0 |
1 |
V |
0 |
1 |
0 |
1 |
A.3.6.特殊令牌格式
相应于本发明,诸如数据令牌和量化表令牌的令牌在解码器芯片集中以其“扩展形式”被使用。在扩展形式中,令牌包括一些数据。在数据令牌的情况中,它们可以包括编码数据或像素数据。在量化表令牌的情况中,它们包括量化表信息。
另外,这些令牌的“非扩展形式”在本发明中被定义为“空”。这一令牌格式在令牌串中提供了一个可以被同一令牌的扩展版本随后填充的地方。这种格式主要应用于编码器,因而在此不再进一步作为资料给出。
表A.3.6对不同标准的令牌
令牌名称 |
MPEG |
JPEG |
H.261 |
BIT_RATE |
√ | | |
BROKEN_CLOSED |
√ | | |
CODING_STANDARD |
√ |
√ |
√ |
COMPONENT_NAME | |
√ | |
CONSTRAINED |
√ | | |
DATA |
√ |
√ |
√ |
DEFINE_MAX_SAMPLING |
√ |
√ |
√ |
DEFINE_SAMPLING |
√ |
√ |
√ |
DHT_MARKER | |
√ | |
DNL_MARKER | |
√ | |
DQT_MARKER | |
√ | |
DRI_MARKER | |
√ | |
表A.3.6 对不同标准的令牌(续)
令牌名称 |
MPEG |
JPEG |
H.261 |
EXTENSION_DATA |
√ |
√ | |
FIELD_INFO | | | |
FLUSH |
√ |
√ |
√ |
GROUP_START |
√ |
√ | |
HORIZONTAL_MBS |
√ |
√ |
√ |
HORIZONTAL_SIZE |
√ |
√ |
√ |
JPEG_TABLE_SELECT | |
√ | |
MAX_COMP_ID |
√ |
√ |
√ |
MPEG_DCH_TABLE |
√ | | |
MPEG_TABLE_SELECT |
√ | | |
MVD_BACKWARDS |
√ | | |
MVO_FORWARDS |
√ | |
√ |
NULL |
√ |
√ |
√ |
PEL_ASPECT |
√ | | |
PICTURE_END |
√ |
√ |
√ |
PICTURE_RATE |
√ | | |
PICTURE_START |
√ |
√ |
√ |
PICTURE_TYPE |
√ |
√ |
√ |
PREDICTION_MODE |
√ |
√ |
√ |
QUANT_SCALE |
√ | |
√ |
QUANT_TABLE |
√ |
√ | |
SEQUENCE_END |
√ |
√ | |
SEQUENCE_START |
√ |
√ |
√ |
SLICE_START |
√ |
√ |
√ |
TEMPORAL_REFERENCE |
√ | |
√ |
TIME_CODE |
√ | | |
USER_DATA |
√ |
√ | |
VBV_BUFFER_SIZE |
√ | | |
VBV_DELAY |
√ | | |
VERTICAL_MBS |
√ |
√ |
√ |
VERTICAL_SIZE |
√ |
√ |
√ |
A.3.7 不同标准的令牌使用
相应于本发明,每种标准使用一个不同的被定义令牌的子集。见表A.3.6。
A.4 双线接口
A.4.1 双线接口和令牌端口
一个简单的双线有效/接受协议在芯片集中的全部级别上被使用以控制信息的流动。只有在当时钟上升沿时观察到发送方和接收方都准备好时数据才在块之间被发送。
1)数据传送
2)接收方未准备好
3)发送方未准备好
如果发送方未准备好(如上面3的发送方未准备好),接收方的输入端必须等待。如果接收方未准备好(如上面2中的接收方未准备好),发送方将继续把同样数据放在其输出端,直到它被接收方接收。
当令牌信息被在器件之间传送时,器件之间的双线接口被称做一个令牌端口。
A.4.2 使用字段所
相应于本发明,解码器芯片集使用双线接口来连接三个芯片。此外,输入到空间解码器的编码数据也是一个双线界面。
A.4.3 总线信号
由双线接口传送的数据字宽度依相关接口的需要而变化(见图35,“宽于8比特的接口上的令牌”)。例如,12比特系数被输入给离散余弦逆变换(IDCT),但只有9比特被输出。
表A.4.1 双线接口数据宽度
接口 |
数据宽度(比特) |
输入给空间解码器的编码数据 |
8 |
空间解码器的输出端口 |
9 |
时间解码器的输入端口 |
9 |
时间解码器的输出端口 |
8 |
图象格式化器的输入端口 |
8 |
除了数据信号还有另外三个通过双线接口传送的信号:
·有效
·接收
·扩展
A.4.3.1 扩展信号
扩展信号与前面说明的令牌扩展比特相对应。
A.4.4 设计考虑
双线接口的目的在于芯片之间的短程点到点通信。
解码器芯片应当被彼此相连地放置,以使芯片之间的PCB连线长度最短。在可能的地方,连线长度应保持小于25mm。PCB连线电容应保持在最小值。
时钟的分配应设计为使芯片之间不出现时钟不齐。如果有任何时钟不齐,应当安排使“接收芯片”在“发送芯片”之前看到时钟。
所有通过双线接口的芯片通信应由同一数字电源操作。
A.4.5 接口定时
表A.4.2 双线接口定时
号码 |
特性 |
30MHz最小 最大 |
单位 |
注ab |
1 |
输入信号置位时间 |
5 |
ns | |
2 |
输入信号保持时间 |
0 |
ns | |
3 |
输出信号驱动时间 |
23 |
ns | |
4 |
输出信号保持时间 |
2 |
ns | |
a、在表A.4.2中图可以随设计不同而不同
b、最大信号装载是2095(20微微法)
注释1:图A.16.3显示了系统分配器芯片和从主解码器时钟操作的空间解码器编码数据通道之间的双线接口。这是可选的,因为此双线接口可以从能与解码器时钟同步的编码数据时钟工作。参见A.10.5部分,“编码数据时钟”。类似地,图象格式化器的显示接口可以从与主解码器时钟同步的一个时钟被操作。
A.4.6 信号电平
双线接口使用CMOS输入和输出。VHmin大约是VDD的70%且V1LMax大约是VDD的30%。表A.4.3所示的数值是V1H和V1L在其各自最差VDD情况下的。
VDD=5.0±0.25V。
表A.4.3 直流电特性
符号 |
参数 |
最小 |
最大 |
单位 |
V1H |
输入逻辑“1”伏 |
3.68 |
VDD+0.5 |
V |
VIL |
输入逻辑“0”伏 |
GND-0.5 |
1.43 |
V |
VOH |
输出逻辑“1”伏 |
VDD-0.1 | |
Va |
VDD-0.4 | |
Vb |
VOL |
输出逻辑“0”伏 | |
0.1 |
Vc |
| | |
0.4 |
Vd |
lIN |
输入漏电流 | |
±10 |
μA |
a.IOH≤1毫安
b.IOH≤4毫安
c.IOL≤1毫安
d.IOL≤4毫安
A.4.7 控制时钟
通常说来,控制通过双线接口传送的时钟是芯片的解码器时钟(decoder_clock)。到空间解码器的编码数据端口输入是个例外。它由编码时钟(coded_clock)控制的。下面将进一步描述时钟信号。
A.5 DRAM接口
A.5.1 DRAM接口
一单一高性能可配置的DRAM接口被使用在每一个视频解码器芯片。通常,每个芯片上的DRAM接口实质上是相同的;然而,在如何处理通道优先级上接口之间是不同的。接口被设计用于直接驱动每一个解码器芯片所用的DRAM。典型情况下,在大多数系统中,不需要外部逻辑、缓冲器或元件来连接DRAM接口于DRAM。
A.5.2 接口信号
表A.5.1 DRAM接口信号
信号名称 |
输入/输出 |
说明 |
DRAM_data(31:0) |
I/O |
32比特宽的DRAM数据总线。此总线可选择地被配置为16或8比特宽,见A.5.8部分 |
DRAM_addr(10:0) |
O |
22比特宽的DRAM接口地址是在11比特宽的总线上作分时多路的 |
RAS |
O |
DRAM行地址迭通信号 |
CAS(3:0) |
O |
DRAM列地址迭通信号。接口的数据总线的每个字节被提供一个信号。所有的CAS信号被同时驱动。 |
WE |
O |
DRAM允许写入信号 |
OE |
O |
DRAM允许输出信号 |
DRAM_enable |
I |
当此输入信号为低时使接口上的所有输出信号变成高阻态。注:当DRAM接口处于高阻态片上数据处理是不停止的,因而在DRAM_enable使能信号是低电平时,如片子打算存取DRAM时错误将会产生。 |
相应于本发明,接口可以以两种方式配置:
·接口的细节时序可被配置以适应多种不同的DRAM类型
·DRAM接口的“宽度”可被配置以在不同应用中提供价格/性能的折衷。
A.5.3 DRAM接口的配置
通常,有三组寄存器与DRAM接口相联系:接口定时配置寄存器,接口总线配置寄存器和刷新配置寄存器。刷新配置寄存器(表A.5.4中的寄存器)应当被最后配置。
A.5.3.1 复位后的状况
复位后,根据本发明,DRAM接口启动操作,伴有一系列缺省定时参数(与操作的最慢方式相应)。开始,DRAM接口将连续执行刷新周期(包括所有的其它传送)。这将继续到一个值被写入刷新间隔寄存器。然后DRAM接口将能够在刷新周期之间执行其它类型的传送。
A.5.3.2 总线配置
总线配置(表A.5.3中的寄存器)应只在接口不进行数据传送时完成。紧接在复位之后且在一个值被写入刷新间隔寄存器之前,接口被置于此状态。如果需要,仅在无传送被尝试时接口可以在以后重新配置。见时间解码器芯片存取寄存器(A.18.3.1)和空间解码器缓冲器管理存取寄存器(A.13.1.1)。
A.5.3.3 接口定时配置
根据本发明,接口定时配置信息由接口定时存取(interface_timing_access)寄存器控制。为此寄存器写入1使得接口定时寄存器(表A.5.2中)可被修改。当interface_timing_access=1,DRAM接口继续以它前面的配置操作。在写入1后,用户应在写任何接口定时寄存器之前等待直至1可以从interface_timing_access被读回。当配置结束后,0应当被写入interface_timing_access。新的配置然后将被传送给DRAM接口。
A.5.3.4 刷新配置
本发明DRAM接口的刷新间隔在复位后只能配置一次。接口继续执行刷新循环,直到refresh_interval被配置。这防止了任何其它的数据传送。数据传送可在一个值被写入refresh_interval之后开始。
如此领域中所被熟知的,在首次加电之后DRAM典型需要一个100μs到500μs之间的“暂停”,接着地是正常运行前可能的大量刷新周期。相应地,这些DRAM起动要求应在给refresh_interval一个值之前被满足。
A.5.3.5 对配置寄存器的读操作
本发明的所有DRAM接口寄存器都可在任意时刻被读。
A.5.4 接口定时(ticks脉冲)
DRAM接口定时由一个时钟获得,此时钟以四倍于设备的输入时钟的速率运转(解码器时钟)。此时钟由一个芯片内锁相环产生。
为了简便,此高速时钟的周期被表示为“ticks脉冲”。
A.5.5 接口寄存器
表A.5.2 接口定时配置寄存器
寄存器名称 |
大小/方向 |
复位状态 | 说明 |
intertace_timing_access |
1bitrw |
0 |
此功能使寄存器能够存取DRAM接口时序配置寄存器。在此寄存器保持0值时,配置寄存器不应被修改。在0被写入此寄存器之后DRAM接口将开始在时序配置寄存器内使用新值。 |
page_start-length |
5bitrw |
0 |
以ticks指明存取起始的长度。可使用的最小值为4(指4个tick)。0选择32ticks的最大长度。 |
transfer_cycle_length |
4bitrw |
0 |
指明以ticks表达的最快页读或写周期。可使用的最小值是4(指4个tick)。0选择16ticks的最大长度。 |
refresh_cycle-length |
4bitrw |
0 |
以ticks指明刷新周期的长度。可使用的最小值为4(指4个tick)。0选择16ticks的最大长度。 |
RAS_falling |
4bitrw |
0 |
指定在启动存取后启动
RAS转为低电平的tick数。可使用的最小值为4(指4个tick)。0选择16ticks的最大长度。 |
CAS_falling |
4bitrw |
8 |
指定在启动读周期、写周期或者存取后,启动
CAS转为低电平的tick数。可使用的最小值为1(指1tick)。0选择16ticks的最大长度。 |
表A.5.3 接口总线配置寄存器
寄存器名称 |
大小/方向 |
复位状态 |
说明 |
DRAM_data-width |
2bitrw |
0 |
指明用在DRAM接口数据总线DRAM_data[31:0]上的比特数。见A.5.8 |
row_address-bits |
2bitrw |
0 |
指明为DRAM接口地址总线的行地址部分使用的比特数。见A.5.10 |
DRAM_enable |
1bitrw |
1 |
为寄存器写入0值迫使DRAM接口进入一高阻抗状态。如果DRAM_enable信号处于低电平或0已被写入寄存器,0将从此寄存器被读出。 |
CAS_strength |
3bitrw |
6 |
这些三比特寄存器配置DRAM接口信号的输出驱动强度。这使得接口可为多种不同负载而被配置。见A.5.13 |
RAS_strength |
addr_strength |
DRAM_data-strength |
OEWE_strength |
A.5.6 接口操作
DRAM接口使用快速页面模式。有三种不同类型的存取被支持:
·读
·写
·刷新
每一读或写存取向一单个DRAM页面地址传送1到64字节的脉冲串。在一单一存取中读和写传送是不相混杂的,且每一连续的存取都作为对一新DRAM页面的随机存取处理。
表A.5.4 刷新配置寄存器
寄存器名称 |
大小/方向 |
复位状态 |
说明 |
refresh_interval |
8bitrw |
0 |
这个值指明了以16个decoder_clock周期为单位的刷新周期之间的间隔。从1到255范围内的值可被配置。在复位后0值被自动装载并迫使DRAM接口继续执行刷新周期,直至一个有效刷新间隔被配置。在每次复位后refresh_interval最好只被配置一次。 |
no_refresh |
1bitrw |
0 |
给这个寄存器写入值1防止了任何刷新周期的执行。 |
A.5.7 存取结构
每一存取包括两部分
·存取起始
·数据传送
本发明中,每一存取由一个存取起始开始,其后跟随一个或多个数据传送周期。此外,对存取起始和数据传送周期都有一个读、写和刷新变体。
当对一特定存取完成了最后数据传送时,接口进入其缺省状态(见A.5.7.3)且保持此状态,直到一个新的存取做好开始的准备。如果一个新的存取在上一个存取已经结束时准备开始,那么此新存取将立即开始。
A.5.7.1 存取起始
存取起始为读或写传送提供页面地址并建立某些初始信号条件。相应于本发明,有三种不同的存取起始:
·读起始
·写起始
·刷新起始
表A.5.5 DRAM接口定时参数
号码 |
特性 |
最小 |
最大 |
单位 |
注释 |
5 |
由寄存器RAS_falling设置的RAS预加载周期 |
4 |
16 |
tick | |
6 |
由寄存器page_start_length设置的存取起始持续 |
4 |
32 | | |
7 |
由寄存器CAS_fallinq设置的CAS预加载长度 |
1 |
16 | |
a |
8 |
由寄存器transfer_cycle_length设置的快速页面读或写周期长度 |
4 |
16 | | |
9 |
由寄存refresh_cycle设置的刷新周期长度 |
4 |
16 | | |
a.这个值可以小于RAS_falling,以保证CAS在RAS刷新之前出现。
在每种情况下,RAS的时序和行地址都是由寄存器RAS_falling和Page_start_length控制的。OE和DRAM_data[31:0]状态从前一数据传送的结束起被保持,至到RAS变为低电平。当RAS变为低电平时,三种不同存取起始类型只在它们如何驱动OE和DRAM_data[31:0]上有所差别。见图43。
A.5.7.2 数据传送
在本发明中,数据传送周期有不同类型:
·快速页面读周期
·快速页面后写周期
·刷新周期
一个刷新起始可以只跟随有一单一刷新周期。一个读(或写)起始可以跟随有一个或多个快速页面读(或写)周期。在读周期的起始CAS被驱动为高电平且新的列地址被驱动。
进一步,一个早写周期被使用。在第一次写传送的起始WE被驱动为低电平并保持低电平直到最后一个写传送的结束。输出数据依照地址被驱动。
由于在RAS刷新周期之前的CAS是由刷新周期的起始引发的,在刷新周期内没有接口信号活动。刷新周期的目的在于满足DRAM所需的最小RAS低电平期。
A.5.7.3 接口缺省状态
本发明中接口信号在一次存取的结尾进入一缺省状态:
RAS,CAS和WE高电平
*数据和OE保持在它们的以前状态
·地址保持稳定
A.5.8 数据总线宽度
二位寄存器DRAM_data_width允许DRAM接口的数据路径宽度被配置。这使得在小图象格式工作时DRAM成本可降至最低。
表A.5.6 配置DRAM_data_width(DRAM数据宽度寄存器)
DRAM_data_with | |
0a |
DRAM_data[31:24]b上的8比特宽数据总线 |
1 |
DRAM_data[31:16][b]上的16比特宽数据总线 |
2 |
DRAM_data[31:0]上的32比特宽数据总线 |
a、复位后的缺省
b、未使用的信号被保持在高阻抗
A.5.9 行地址宽度
为提供行地址而从24比特内部地址的中间部分取出的比特数由寄存器row_address_bits配置。
表A.5.7 配置row_address_bits(行地址比特)
row_address_bits |
行地址宽度 |
1 |
DRAM_addr[9:0]上10比特 |
2 |
DRAM addr[10:0]上11比特 |
A.5.10 地址位
一个24位地址被在芯片上产生。这个地址被如何用来产生行和列地址要依据数据总线的宽度和为行地址选择的位数而定。某些配置不允许所有的内部地址位都被使用,且因此产生“隐藏位”。
类似地,行地址被从地址的中间部分抽取出。相应地,这使DRAM以最大速率被自然刷新。
表A.5.8 内部和外部地址之间的映射
行地址宽度 |
内部→外部行地址转换 |
数据总线宽度 |
列地址转换内部→外部 |
9 |
[14:6]→[8:0] |
8 |
[19:15]→[10:6] [5:0]→[5:0] |
16 |
[20:15]→[10:5] [5:1]→[4:0] |
32 |
[21:15]→[10:4] [5:2]→[3:0] |
10 |
[15:6]→[9:0] |
8 |
[19:16]→[10:6] [5:0]→[5:0] |
16 |
[20:16]→[10:5] [5:1]→[4:0] |
32 |
[21:16]→[10:4] [5:2]→[3:0] |
11 |
[16:6]→[10:0] |
8 |
[19:17]→[10:6] [5:0]→[5:0] |
16 |
[20:17]→[10:5] [5:1]→[4:0] |
32 |
[21:17]→[10:4] [5:2]→[3:0] |
A.5.10.1 低位列地址位
列地址中最低有效位的4到6位被用于为多达64字节的快速页面方式传送提供地址。控制这些传送所需的地址位数将依据数据总线的宽度而定(见A.5.8)。
A.5.10.2 解码行地址以存取更多的DRAM体
在只使用DRAM的一个单一体的地方,所使用的行地址将取决于使用的DRAM类型。对于那些需要多于一个单一DRAM体所能典型提供的存贮量的应用,可以配置一个更宽的行地址,且然后解码某些行地址位以选择一单一DRAM体。
注意:行地址是从内部地址的中间抽取出来的。如果行地址的某些位被解码以选择DRAM的体,那么这些“体选择位”的所有可能值必须选择一个DRAM体。否则,地址空间就可能留下空洞。
A.5.11 DRAM接口使能
在本发明中,有两个方法可使DRAM接口上的所有输出信号变成高阻抗,也就是,通过设置DRAM_enable寄存器和DRAM_enable信号。为使DRAM接口上的驱动器运行,寄存器和信号都必须处于逻辑1。如果任何一个是低的,那么接口被置成高阻抗。
注意:当DRAM接口在高阻抗时芯片上数据处理并未结束。因而,如果芯片试图在接口处于高阻抗时存取DRAM就可能发生错误。
相应于本发明,将DRAM接口置成高阻抗的能力被提供,以使得在空间解码器(或时间解码器)未被使用时其它设备能测试或使用由空间解码器(或时间解码器)控制的DRAM。这不是为了在正常运行中让其它设备共享存贮器。
A.5.12 刷新
除非对寄存器no_refresh写入以禁止刷新,DRAM接口将在由寄存器refresh_interval决定的一个间隔内在
RAS刷新周期之前使用一个
CAS自动地对DRAM刷新。
refresh_interval中的值以16个decoder_clock周期来指明刷新周期之间的间隔。在1到255范围内的值可被配置。在复位后0值被自动装载并迫使DRAM接口继续执行刷新周期(一旦允许),直到一个有效刷新间隔被配置。我们建议,refresh_interval在每次复位后应当只被配置一次。
当
reset信号出现时,DRAM接口不能刷新DRAM。然而,解码器芯片所需的复位时间足够短,因而应当可以复位它们,且在DRAM的内容耗失之前重新配置DRAM接口。
A.5.13 信号强度
DRAM接口的输出的驱动强度可以由用户使用3位的寄存器CAS_strength,RAS_strength,addr_strength,DRAM_data_strength和OEWE_strength来配置。这个3比特值的最高位选择边沿速率的快或慢。两个低有效位为不同的负载能力配置输出。
复位后的缺省强度是6,它配置输出如果负载电容为24pf,大约以10ns来驱动一个介于GND和VDD之间的信号。
表A.5.9 输出强度配置
强度值 |
驱动特性 |
0 |
在6pf的电容负载上大约4毫微秒/伏 |
1 |
在12pf的电容负载上大约4毫微秒/伏 |
2 |
在24pf的电容负载上大约4毫微秒/伏 |
3 |
在48pf的电容负载上大约4毫微秒/伏 |
4 |
在6pf的电容负载上大约2毫微秒/伏 |
5 |
在12pf的电容负载上大约2毫微秒/伏 |
6a |
在24pf的电容负载上大约2毫微秒/伏 |
7 |
在48pf的电容负载上大约2毫微秒/伏 |
a、复位后缺省
当一个输出为了它所驱动的负载而被适当配置,它将符合表A.5.13到A.5.16中指示的交流电特性。在配置适当时,每个输出都与其负载大致匹配,因此在一个信号跳变之后将出现最小程度的过冲。
A.5.14 电特性
此部分提供的所有信息仅是本发明一个实施方式的说明,是包括在范例之内而不必作为限制。
表A.5.10 最大额定值
符号 |
参数 |
最小 |
最大 |
单位 |
VDD |
与GND参照的电源电压 |
-0.5 |
6.5 |
V |
VIN |
在任意引脚上的输入电压 |
GND-0.5 |
VDD+0.5 |
V |
TA |
运行温度 |
-40 |
+85 |
℃ |
TS |
存贮温度 |
-55 |
+150 |
℃ |
表A.5.10仅为说明实施方式设置了最大额定值。对这个下面强调的特定实施方式,表中列出的应被采用,以保证运行的可靠性。
表A.5.11 直流操作条件
符号 |
参数 |
最小 |
最大 |
单位 |
VDD |
与GND参照的电源电压 |
4.75 |
5.25 |
V |
GND |
地 |
0 |
0 |
V |
VIH |
输入逻辑“1”电压 |
2.0 |
VDD+0.5 |
V |
VIL |
输入逻辑“0”电压 |
GND-0.5 |
0.8 |
V |
TA |
运行温度 |
0 |
70 |
℃a |
a、带有TBA线状英尺/分钟横向气流
表A.5.12直流电特性
符号 |
参数 |
最小 |
最大 |
单位 |
VOL | 输出逻辑“0”电压 | | 0.4 | Va |
VOH |
输出逻辑“1”电压 |
2.8 | |
V |
IO |
输出电流 |
±100 | |
μAb |
IOZ |
输出截止态漏电流 |
±20 | |
μA |
IIZ |
输入漏电流 |
±10 | |
μA |
IDD |
RMS电源电流 | |
500 |
mA |
CIN |
输入电容 | |
5 |
pF |
COUT |
输出I/O电容 | |
5 |
pF |
a、AC参数被以VOLmax=0.8V为测量级别而指出
b、这是接口的稳态驱动能力。
瞬间电流可能会大得多。
A.5.14.1 AC特性
表A.5.13 选通脉冲相对名义值的偏差
号码 |
参数 |
最小 |
最大 |
单位 |
注释a |
10 |
周期时间 |
-2 |
+2 |
ns | |
11 |
周期时间 |
-2 |
+2 |
ns | |
12 |
高电平脉冲 |
-5 |
+2 |
ns | |
13 |
低电平脉冲 |
-11 |
+2 |
ns | |
14 |
周期时间 |
-8 |
+2 |
ns | |
a、信号的驱动强度必须相应其负载而被配置,如具有本领域中一般技能的人能认识到的。
表A.5.14 两次选通之间对名义值的偏差
号码 |
参数 |
最小 |
最大 |
单位 |
注释a |
15 |
选通到选通的延时 |
-3 |
+3 |
ns | |
16 |
低电平保持时间 |
-13 |
+3 |
ns | |
17 |
选通到选通的予加载时间,如tCRP,tRCS,tRCH,tRRH,tRPC |
-9 |
+3 |
ns | |
任意二个
CAS间的予加载脉冲在广阔的多个DRAM上的
CAS信号,如tCP或在
RAS上升与
CAS下降间的CAS信号如tRPC |
-5 |
+2 |
ns | |
表A.5.14 两次选通之间对名义值的偏差(续)
号码 |
参数 |
最小 |
最大 |
单位 |
注释a |
18 |
在禁止前的予充 |
-12 |
+3 |
ns | |
a、两个信号的驱动器强度必须适应它们的负载而被配置
表A.5.15 总线和选通之间相对于名义值的偏差
号码 |
参数 |
最小 |
最大 |
单位 |
注释a |
19 |
设置时间 |
-12 |
+3 |
ns | |
20 |
保持时间 |
-12 |
+3 |
ns | |
21 |
地址存取时间 |
-12 |
+3 |
ns | |
22 |
选通后下次有效 |
-12 |
+3 |
ns | |
a、总线和选通的驱动器强度必须适应它的负载而被配置
表A.5.16 总线和选通之间相对于名义值的偏差
号码 |
参数 |
最小 |
最大 |
单位 |
注释 |
23 |
在
CAS信号开始升为高电平之前读数据设置时间 |
0 | |
ns | |
24 |
在
CAS信号开始升为高电平之后读数据持续时间 |
0 | |
ns | |
在读DRAM时,DRAM接口在
CAS信号升为高电平时采样DRAM_data[31:0]。
表A.5.17“标准”DRAM参数名和定时参数值之间的相互参照
参数 |
参数 |
参数 |
名称 |
数值 |
名称 |
数值 |
名称 |
数值 |
tPC |
10 |
tRSH |
16 |
tRHCPtCPRH |
18 |
tRC |
11 |
tCSH |
tASR |
19 |
tRP |
12 |
tRWL |
tASC |
tCP |
tCWL |
tDS |
tCPN |
tRAC |
tRAH |
20 |
tRAS | 13 | tOAC/tOE | tCAH |
tCAS |
tCHR |
tDH |
tCAC |
tCRP |
17 |
tAR |
tWP |
tRCS |
tAA |
21 |
tRASP |
tRCH |
tRAL |
tRASC |
tRRH |
tRAD |
22 |
tACP/tCPA |
14 |
tRPC | | |
tRCD |
15 |
tCP | | |
tCSR |
tRPC | | |
A.6微处理器接口(MPI)
一标准字节宽度的微处理器接口(MPI)被用于视频解码器芯片集内的所有芯片上,然而,一个具本领域中一般技能的人将认识到,其它宽度的微处理器接口也可被使用。MPI与多种解码器芯片时钟同步运行。
A.6.1 MPI信号
表A.6.1 MPI接口信号
信号名称 |
输入/输出 |
说明 |
enable[1:0] |
输入 |
二个低电平有效的片使能,二者必须均为低电平方能通过MPI进行存取 |
r
w |
输入 |
高电平指示设备想要从视频芯片读值。当芯片被允许时此信号应当是稳定的。 |
addr[n:o] |
输入 |
地址指示芯片的存贮器变换图中2n个地点中的一个。当芯片被允许时此信号应当是稳定的。 |
data[n:o] |
输出 |
8比特宽的数据I/O端口。如果任一使能信号是高电平这些引脚就是高阻抗。 |
irq |
输出 |
一个低电平有效集电极开路中断请求信号。 |
A.6.2 MPI电学特性
表A.6.2 绝对最大额定值
符号 |
参数 |
最小 |
最大 |
单位 |
VDD |
与GND参照的电源电压 |
-0.5 |
6.5 |
V |
VIN |
任意引脚上的输入电压 |
GND-0.5 |
VDD+0.5 |
V |
TA |
操作温度 |
-40 |
+85 |
℃ |
TS |
存贮温度 |
-55 |
+150 |
℃ |
表A.6.3 DC操作条件
符号 |
参数 |
最小 |
最大 |
单位 |
VDD |
与GND参照的电源电压 |
4.75 |
5.25 |
V |
GND |
地 |
0 |
0 |
V |
VIH |
输入逻辑“1”电压 |
2.0 |
VDD+0.5 |
Va |
VIL |
输入逻辑“0”电压 |
GNO-0.5 |
0.8 |
V(a) |
TA |
操作温度 |
0 |
70 |
℃b |
a、AC输入参数是在1.4V测量级别上测量的。
b、带有TBA线状英尺/分钟横向气流。
表A.6.4 DC电特性
符号 |
参数 |
最小 |
最大 |
单位 |
VOL |
输出逻辑“0”电压 | |
0.4 |
V |
V0LOC |
OC输出逻辑“0”电压 | |
0.4 |
Va |
VCH |
输出逻辑“1”电压 |
2.4 | |
V |
IO |
输出电流 |
±100 | |
μAb |
I0OC | OC输出电流 | 4.0 | 8.0 | mAc |
IOZ |
输出截止状态漏电流 | |
±20 |
μA |
IIN |
输入漏电容 | |
±10 |
μA |
表A.6.4 DC电特性(续)
符号 |
参数 |
最小 |
最大 |
单位 |
ICD |
RMS电源电流 | |
500 |
mA |
CIN |
输入电容 | |
5 |
pF |
COUT |
输出I/O电容 | |
5 |
pF |
a、Io≤I0ocmin
b、这是接口的稳态驱动能力,瞬时电流可能会高得多。
c、当OC输出
irg置位,且下拉阻抗≤100Ω时。
A.6.2.1 AC特性
表A.6.5 微处理器接口读定时
号码 |
特性 |
最小 |
最大 |
单位 |
注释a |
25 |
低电平允许期 |
100 | |
ns | |
26 |
高电平允许期 |
50 | |
ns | |
27 |
地址或读
写信号设置到芯片使能去 |
0 | |
ns | |
28 |
地址或读
写保持从芯片禁止来 |
0 | |
ns | |
29 |
输出开启时间 |
20 | |
ns | |
30 |
读数据存取时间 | |
70 |
ns |
b |
表A.6.5 微处理器接口读定时(续)
号码 |
特性 |
最小 |
最大 |
单位 |
注释 |
31 |
读数据保持时间 |
5 | |
ns | |
32 |
读数据关断时间 | |
20 | | |
a、在此例中,选择
enable[0]来起始周期和选择
enable[1]来结束之是任意的。这些信号的地位相同。
b、存取时间是对于每一数据[7.0]上最大负载为50pF而指定的。更大的负载可能会增长存取时间。
表A.6.6 微处理器接口写定时
号码 |
特性 |
最小 |
最大 |
单位 |
注释 |
33 |
写数据建立时间 |
15 | |
ns |
a |
34 |
写数据待续时间 |
0 | |
ns | |
a、在本例中,选择
enable[0]来起始周期和选
enable[1]来结束周期是任意的。这些信号的地位相同。
A.6.3 中断
根据本发明,“事件”是一个用于描述一种用户可能想要监视的芯片上状态的术语。一个事件可以指示一个错误或者可为用户的软件提供信息。
有两个单一位寄存器与每个中断或“事件”相联系。它们是状态事件寄存器和状态屏蔽寄存器。
A.6.3.1 状态事件寄存器
状态事件寄存器是一个一位读/写寄存器,它的值被一个出现于电路内部的状态设置为1。甚至在此状态是瞬间且现已消逝的情况下寄存器也被设置为1。然后寄存器被保证设置为1,直到用户的软件对其复位(或整个芯片被复位)。
·此寄存器通过写0值而被设置为0。
·给寄存器写0使寄存不被改变
·寄存器必须在再次观察到这种状态的出现之前由用户软件设置为0。
·寄存器将在复位时被复位为0
A.6.3.2 状态屏蔽寄存器
状态屏蔽寄存器是一个一位读/写寄存器,如果相应的状态事件寄存器被设置,它允许一个中断请求被产生。如果当1被写入状态屏蔽寄存器时状态事件已被设置,一个中断请求会马上发出。
·值1允许中断
·在复位时寄存器清0。
除非已说明为别种情况,一个块在产生一中断请求后将停止操作并将在状态事件或状态屏蔽寄存器被清0后重新开始操作。
A.6.3.3 事件和屏蔽位
事件位和屏蔽位常被归组为存贮器映象中连续字节中的相应位的位置(见表A.9.6和A.17.6)。这使得中断服务软件可以使用从屏蔽寄存器读出的值作为事件寄存器中值的屏蔽;以识别哪一事件产生了中断。
A.6.3.4 芯片事件和屏蔽
每个芯片具有一单一“总体”事件位,它概括了芯片上事件的活动性。芯片事件寄存器提供了所有在其屏蔽位有1的芯片上事件的或。
芯片屏蔽位中的一个1使芯片可以产生中断。芯片屏蔽位中的一个0阻止任何芯片上事件产生中断请求。
给芯片事件写入1到0不产生任何影响,在所有事件(由它们屏蔽位中的一个1而使能)都已被清除时,它才被清除。
A.6.3.5 irq信号
如果芯片事件位和芯片事件屏蔽两者都被设置,
irq信号被置位。
irq信号是一个低电平有效、“集电极开路”输出,它要求一个芯片外上拉电阻。当有效时
irq输出被一个100Ω或更小的阻抗下拉。
我们认为大约4KΩ的上拉电阻将适用于大多数应用。
A.6.4 存取寄存器
A.6.4.1 停止电路允许存取
在本发明中,如果与之相关联的块被停止,大多数寄存器才能被修改。因而,寄存器组通常与一存取寄存器相联系。
存取寄存器中的0值指示与该存取寄存器相关联的寄存器组不应被修改。向一存取寄存器写1要求一个块被停止。然而,块可能不会立即停止且块的存取寄存器将保持0值直到它被停止。
相应地,用户软件将等待(在写入1来请求存取后)直到从存取寄存器读出1。如果用户在其存取寄存器被设置为0时向配置寄存器写入一个值,结果是未定义的。
A.6.4.2 寄存器中持有的整数
在存贮器映象中任何字节的最低有效位是与信号数据[0]相联系的。
那些保持有大于8位的整数值的寄存器被在存贮器映象中分裂为2或4个连续字节位置。字节顺序是如图55所示的“大数结尾”。然而,不存在任何关于字节被写入多字节寄存器这类有关顺序的假设。
存贮器映象中不用的位在被读时将返回0,除非寄存器中不用的位保持带符号整数。在这种情况下,寄存器的高有效位将被符号扩展。例如,一个12位符号寄存器将被符号扩展以填充一个16位的存贮映象位置(2字节)。一个保持有一个12位无符号整数的16位存贮器映象位置将从其高有效位返回0。
A.6.4.3 锁眼(Keyhole)地址定位
在本发明中,某些较不常被存取的存贮映象位置已被置于“锁眼(Keyhole)”后面。一个“锁眼”有两个与之相关的寄存器,一个是锁眼地址寄存器,一个是锁眼数据寄存器。
锁眼地址指明在一扩展地址空间内的单元。一个对锁眼数据寄存器读或写的操作存取由锁眼地址寄存器指定的单元。
在存取了一个锁眼数据寄存器后与之相关的锁眼地址寄存器产生增量。在扩展地址空间内的随机存取只有通过为每一存取向锁眼地址寄存器写入新值才是可能的。
一个相应于本发明的芯片可以具有不止一个“锁眼”存贮变换图。不同锁眼之间没有相互作用。
A.6.5 特殊寄存器
A.6.5.1 未使用的寄存器
被描述为“未使用”的寄存器或位就是存贮器变换中那些没有在当前的设备实施中使用的位置。通常,可以从这些位置读到0值。向这些位置写入零没有任何作用。
正如一个具有本领域中一般技艺的人所将了解的那样,为了保持与这些产品将来有可能出现的变异相兼容,用户软件最好不要依赖于从未使用位置读出的值。类似地,当配置设备时,这些位置应该避免或设置为0值。
A.6.5.2 保留寄存器
类似地,在本发明中被描述为“保留”的寄存器或位没有作为资料给出它对于设备性能的影响,不应当被存取。
A.6.5.3 检测寄存器
进一步,被描述为“检测寄存器”的寄存器或位控制着设备可检测性的多种方面。因而,这些寄存器在设备的一般使用中不被应用,且不需要被一般设备配置和控制软件存取。
A.7 时钟
相应于本发明,在视频解码器系统中有许多不同时钟可被识别。时钟的例子在图56中有所说明。
当数据穿过视频解码器芯片集中的不同时钟区域时,它被与每个新时钟再同步(在芯片上)。在本发明中,任何输入时钟的最大频率是30MHz。然而,具有本领域中一般技术的人将认识到,其它频率,包括那些大于30MHz的,也可以被使用。在每个芯片上,微处理器接口(MPI)与芯片时钟同步操作。此外,图象格式化器可以产生一个与被解码视频的图象率同步的低频音频时钟。相应地,这个时钟可以被用于提供音频/视频同步。
A.7.1 空间解码器时钟信号
空间解码器有两种不同的(且潜在异步的)时钟输入:
表A.7.1 空间解码器时钟
信号名称 |
输入/输出 |
说明 |
coded_clock |
输入 |
此时钟控制向空间解码器的编码数据端口内的数据传送。在芯片上这个时钟控制编码数据的处理,直到此数据达到编码数据缓冲器。 |
decoder_clock |
输入 |
解码器时钟控制空间解码器上大部分处理功能。解码器时钟还控制数据通过输出端口传到空间解码器外部。 |
A.7.2 时间解码器时钟信号
时间解码器只有一个时钟输入:
表A.7.2 时间解码器时钟
信号名称 |
输入/输出 |
说明 |
decoder_clock |
输入 |
解码器时钟控制时间解码器上所有的处理功能。解码器时钟还控制数据通过其输入端口向时间解码器的传送和通过输出端口的输出。 |
A.7.3 电学特性
表A.7.3 输入时钟要求
号码 |
特性 |
30MHz |
单位 |
注释 |
最小 |
最大 |
35 |
时钟周期 |
33 | |
ns | |
36 |
时钟高电平期 |
13 | |
ns | |
37 |
时钟高电平期 |
13 | |
ns | |
表A.7.4 时钟输入条件
符号 参数 最小 最大 单位
VIH 输入逻辑“1”电压 3.68 VDD+0.5 V
VIL 输入逻辑“0”电压 GND-0.5 1.43 V
IOZ 输入漏电流 ±10 μA
A.7.3.1 CMOS的电平
时钟输入信号是CMOS输入。V1H min大约是VDD的70%且V1Lmax大约是VDD的30%。表A.7.4中所示的值是那些V1H和V1L在其各自的最差VDD情况下的。
VDD=5.0±0.25V
A.7.3.2 时钟稳定性
在本发明中,用于驱动DRAM接口和芯片到芯片接口的时钟是从输入时钟信号获得的。这些接口的时序技术要求假设输入时钟定时在±100PS(微微秒)范围内是稳定的。
A.8 JTAG
随着电路板排布越来越密集,利用传统的方法越来越难查对元件之间的联连,如使用钉床(bed-of-nails)手段的电路内测试。从方法论上在解决存取问题和标准化的尝试中,联合测试行动组(JTAG)产生了。此小组的工作归结为“标准测试存取端口和边界扫描结构”,现已被IEEE作为标准1149.1而采用。空间解码器和时间解码遵从此标准。
该标准使用一个边界扫描链,它与设备上每个数字扫描引脚顺序相连。在一般操作中测试电路系统是透明的,但在测试方式中边界扫描链允许测试模式被改变,并施加于设备的引脚。所得到的出现于电路板上JTAG设备输入的信号可以被扫描出并被相对简单的测试装备检测。通过这种方法,元件之间的联系可被测试,就如同电路板上的逻辑区域可被测试一样。
所有JTAG操作是通过由5个引脚构成的测试存取端口(TAP)完成的。
trst(测试复位)引脚对JTAG电路系统复位以保证设备在测试方式中没有上电。tck(测试时钟)引脚被用于以时钟驱动系列测试模式到tdi(测试数据输入)引脚,并从tdo(测试数据输出)引脚出去,最后,JTAG电路系统的操作模式通过将适当顺序的位以时钟驱动进入tms(测试方式选择)引脚而被设置。
JTAG标准是可扩展的,以适应芯片制造商酌情附加的特性。在空间解码器和时间解码器上有9个用户指令,包括3个JTAG命令性指令。附加指令允许某种程度的内部设备测试被执行,并提供了附加的外部测试灵活性。例如,所有的设备输出可被一简单的JTAG序列所容纳。
要了解关于可获得的设备和关于如何使用JTAG端口的指令的全部细节,参见下面的JTAG应用注释。
A.8.1 JTAG引脚与非JTAG系统的连结
表A.8.1 如何连结JTAG输入
信号 方向 说明
trst 输入 此引脚具有内部上拉负载,但必须在上电时为低
电平,即使JTAG特点未被使用。这可以通过将公
共
trst与芯片复位引脚
reset相连而达到。
tdi 这些引脚有内部上位负载,且如果JTAG电路未被
输入 使用时可以不被连结。
tms
tck 输入 此引脚不具上拉负载,如果不使用JTAG电路时应
当被接地。
tdo 输出 除JTAG扫描操作时都是高阻抗。如果JTAG不被使
用,这个引脚可以不被连结。
A.8.2 与IEEE 1149.1的符合级别
A.8.2.1 规则
所有规则都被坚持,尽管下面的情况应当被注意:
表A.8.2 JTAG规则
规则 说明
3.1.1(b)
trst引脚被提供
3.5.1(b) 为所有公共指令保证(见IEEE 1149.1 5.2.1(c))
5.2.1(c) 为所有公共指令保证。对某些私人指令,TDO引脚可
以在Capture-DR,Exit-DR,Exit-2-DR和Pause-DR中任
一状态下成为有效。
5.3.1(a) 通过
trst引脚的使用完成上电复位。
6.2.1(e.f) BYPASS指令的一个码在测试-逻辑-复位状态被装载。
7.1.1(d) 未被分配的指令码与BYPASS相同。
7.2.1(c) 不存在设备ID寄存器。
7.8.1(b) 单一步操作需要系统时钟的外部控制。
7.9.1(...) 不存在RUNBIST设施
7.11.1(...) 不存在IDCODE指令
7.12.1(...) 不存在USERCODE指令
8.1.1(b) 不存在设备识别寄存器
8.2.1(c) 为所有公共指令保证。从tdi到tdo的路径显示长度当
私人指令码被装载时在某些字段合下可能会变化。
8.3.1(d-i) 为所有公共指令保证。当私人指令码被装载时,除
tck的上升沿外的其它时间,数据可能被装入。
表A.8.2 JTAG规则(续)
规则 |
说明 |
10.4.1(e) |
在INTEST期间,系统时钟引脚必须受外面控制。 |
10.6.1(c) |
在INTEST期间,通过tdi输出引脚受控于移位数据。 |
A.8.2.2 建议
表A.8.3 可满足的建议
建议 |
说明 |
3.2.1(b) |
tck是一高阻抗CMOS输入 |
3.3.1(c) |
tms有一高阻抗上拉 |
3.6.1(d) |
供片子使用) |
3.7.1(a) |
供片子使用) |
6.1.1(e) |
采样/预装载指令码在Capture-IR期间被装入 |
7.2.1(f) |
提供INTEST指令 |
7.7.1(g) |
在EXTEST期间,在系统输出引脚上零被装入 |
7.7.2(h) |
全部系统输出可能被设置为高阻抗 |
7.8.1(f) |
在INTEST期间在系统输入引脚上零被装入 |
8.1.1(d.e) |
设计专用测试数据寄存器不供公共存取 |
A.9 空间解码器
·30MHz操作
·解码MPEG,JPEG,和H.261
·编码数据率达25Mb/S
·视频数据率达21MB/S
·可变色度采样格式
·完全JPEG基线解码
·无粘结(Glue-less)的DRAM接口
·单一+5V电源
·208引脚的PQFP型封装
·最大功率消耗2.5W
·独立编码数据和解码器时钟
·使用标准页面模式PRAM
空间解码器是一个可配置的VLSI解码器芯片,使用于多种JPEG,MPEG和H,261图象和视频解码应用。
在一个不含有芯片外DRAM的最小配置中,空间解码是一个单芯片的高速JPEG解码器。加入DRAM使得空间解码器可以解码JPEG编码的视频图象。720×480,30Hz,4:2:2的“JPEG视频”可以被实时解码。
有了时间解码器,空间解码器可被用于解码H.261和MPEG(以及JPEG)。704×480,30Hz,4:2:0的MPEG视频可以被解码。
再次指出,上述值只是用于说明相应于本发明的一种实施方式的典型值,仅为举例而无需以此为限制。相应地,那些具有本领域中一般技艺的人仍将认识到其它数值和/或范围也可被使用。
表A.8.4 未实现的建议
建议 |
说明 |
10.4.1(f) |
在EXTEST期间,从系统时钟引脚驱动进入片上逻辑的信号是由外部提供的。 |
A.8.2.3 允许
表A.8.5 可满足的允许
允许 |
说明 |
3.2.1(c) |
为所有公共指令保证 |
6.1.1(f) |
指令寄存器未用于收集设计专用信息 |
7.2.1(g) |
一些附加公共指令被提供 |
7.3.1(a) |
一些私有指令码被分配 |
7.3.1(c) |
(规则?)此类指令码列入资料 |
7.4.1(f) |
一些附加码对BYPASS的作用全同 |
10.1.1(i) |
每一输出引脚都有自己的三态控制 |
10.3.1(h) |
提供并行锁存器 |
10.3.1(i.j) |
在EXTEST期间,输入引脚通过tdi由移位数据控制 |
10.6.1(d.e) |
在Test-Logic-Reset状态,三态元件未被强制不活动 |
A.9.1 空间解码器信号
表A.9.1 空间解码器信号
信号名 |
入/出 |
引脚号 |
说明 |
coded_clock |
I |
182 | 空间解码器编码数据或令牌见A10.1部分和A.4.1部分 |
coded_data[7:0] |
I |
172,171,169,168,167,166,164,163 |
coded_extn |
I |
174 |
coded_valid |
I |
162 |
coded_accept |
O |
161 |
byte_mode |
I |
176 |
enable[1:0] |
I |
126,127 |
微处理器接口(MPI)见A.6.1部分 |
r
w |
I |
125 |
addr[6:0] |
I |
136,135,133,132,131,130,128 |
data[7:0] |
O |
152,151,149,147,145,143,141,140 |
irq |
O |
154 |
表A.9.1 空间解码器信号(续)
信号名 |
入/出 |
引脚号 |
说明 |
DRAM_data[31:0] |
I/O |
15,17,19,20,22,25,27,30,31,33,35,38,39,42,44,47,49,57,59,61,63,66,68,70,72,74,76,79,81,83,84,85 | DRAM接口见A.5.2部分 |
DRAM_addr[10:0] |
O |
184,186,188,189,192,193,195,197,199,200,203 |
RAS |
O |
11 |
CAS[3:0] |
O |
2,4,6,8 |
WE |
O |
12 |
OE |
O |
204 |
DRAM_enable |
I |
112 |
out_data[8:0] |
O |
88,89,90,92,93,94,95,97,98 |
输出端口A.4.1部分 |
out_extn |
O |
87 |
out_valid |
O |
99 |
out_accept |
I |
100 |
表A.9.1 空间解码器信号(续)
信号名 |
入/出 |
引脚号 |
说明 |
tck |
I |
115 | JTAG端口见A.8部分 |
tci |
I |
116 |
tdo |
O |
120 |
tms |
I |
117 |
trst |
I |
121 |
decoder_clock |
I |
177 |
主解码时钟,见A.7部分 |
reset | I | 160 | 复位 |
表A.9.2 空间解码器测试信号
信号名 |
入/出 |
引脚号 |
说明 |
tph0ish |
I |
122 |
如override=1则tph0ish和tph1ish是片上两相时钟输入,正常操作设override=0。tph0ish和tph1ish被忽略(接地或接VDD) |
tph1ish |
I |
123 |
override |
I |
110 |
chiptest |
I |
111 |
正常操作设chiptest=0 |
tloop |
I |
114 |
正常操作接地或接VDD |
ramtest |
I |
109 |
如ramtest=1允许测试片上RAM。正常操作设ramtest=0 |
表A.9.2 空间解码器信号(续)
信号名 |
入/出 |
引脚号 |
说明 |
pllselect |
I |
178 |
如pllselect=0片上锁相环被禁止。正常工作设置pllselect=1 |
ti |
I |
180 |
在测试操作时DRAM接口要求的二个时钟。正常工作时接地或接VDD |
tq |
I |
179 |
pdout |
O |
207 |
为了锁相环,此两引脚连结到外部滤波器 |
pdin |
I |
206 |
表A.9.3 空间解码器引脚分配
信号名 |
引脚 |
信号名 |
引脚 |
信号名 |
引脚 |
信号名 |
引脚 |
nc |
208 |
nc |
156 |
nc |
104 |
nc |
52 |
test pin |
207 |
nc |
155 |
nc |
103 |
nc |
51 |
test pin | 206 | irq | 154 | nc | 102 | nc | 50 |
GND |
205 |
nc |
153 |
VDD |
101 |
DRAM_data[15] |
49 |
OE |
204 |
data[7] |
152 |
out_accept |
100 |
nc |
48 |
DRAM_addr[0] |
203 |
data[6] |
151 |
out_valid |
99 |
DRAM_data[16] |
47 |
VDD |
202 |
nc |
150 |
out_data[0] |
98 |
nc |
46 |
nc |
201 |
data[5] |
149 |
out_data[1] |
97 |
GND |
45 |
DRAM_addr[1] |
200 |
nc |
148 |
GND |
96 |
DRAM_data[17] |
44 |
DRAM_addr[2] |
199 |
data[4] |
147 |
out_data[2] |
95 |
nc |
43 |
GND |
198 |
GND |
146 |
out_data[3] |
94 |
DRAM_data[18] |
42 |
DRAM_addr[3] |
197 |
data[3] |
145 |
out_data[4] |
93 |
VDD |
41 |
nc | 196 | nc | 144 | out_data[5] | 92 | nc | 40 |
DRAM_addr[4] |
195 |
data[2] |
143 |
VDD |
91 |
DRAM_data[19] |
39 |
VDD |
194 |
nc |
142 |
out_data[6] |
90 |
DRAM_data[20] |
38 |
DRAM_addr[5] |
193 |
data[1] |
141 |
out_data[7] |
89 |
nc |
37 |
DRAM_addr[5] | 192 | data[0] | 140 | out_data[8] | 88 | GND | 36 |
nc |
191 |
nc |
139 |
out_extn |
87 |
DRAM_data[21] |
35 |
GND |
190 |
VDD |
138 |
GND |
86 |
nc |
34 |
DRAM_addr[7] |
189 |
nc |
137 |
DRAM_data[0] |
85 |
DRAM_data[22] |
33 |
DRAM_addr[8] |
188 |
addr[6] |
136 |
DRAM_data[1] |
84 |
VDD |
32 |
VDD |
187 |
addr[5] |
135 |
DRAM_data[2] |
83 |
DRAM_data[23] |
31 |
DRAM_addr[9] |
186 |
GND |
134 |
VDD |
82 |
DRAM_data[24] |
30 |
nc |
185 |
addr[4] |
133 |
DRAM_data[3] |
81 |
nc |
29 |
DRAM_addr[10] | 184 | addr[3] | 132 | nc | 80 | GND | 28 |
GND |
183 |
addr[2] |
131 |
DRAM_data[4] |
79 |
DRAM_data[25] |
27 |
coded_clock |
182 |
addr[1] |
130 |
GND |
78 |
nc |
26 |
VDD |
181 |
VDD |
129 |
nc |
77 |
DRAM_data[25] |
25 |
test pin |
180 |
addr[0] |
128 |
DRAM_data[5] |
76 |
nc |
24 |
test pin |
179 |
enable[0] |
127 |
nc |
75 |
VDD |
23 |
test pin |
178 |
enable[1] |
126 |
DRAM_data[5] |
74 |
DRAM_data[27] |
22 |
decoder_clock |
177 |
r
w |
125 |
VDD |
73 |
nc |
21 |
byte_mode |
176 |
GND |
124 |
DRAM_data[7] |
72 |
DRAM_data[28] |
20 |
GND |
175 |
test pin |
123 |
nc |
71 |
DRAM_data[29] |
19 |
coded_extn |
174 |
test pin |
122 |
DRAM_data[8] |
70 |
GND |
18 |
表A.9.3 空间解码器引脚分配(续)
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
nc 208 |
nc 156 |
nc 104 |
nc 52 |
test pin 207 |
nc 155 |
nc 103 |
nc 51 |
test pin 206 |
irq 154 |
nc 102 |
nc 50 |
GND 205 |
nc 153 |
VDD 101 |
DRAM_data[15] 49 |
OE 204 |
data[7] 152 |
out_accept 100 |
nc 48 |
DRAM_addr[0] 203 |
data[6] 151 |
out_valid 99 |
DRAM_data[15] 47 |
VDD 202 |
nc 150 |
out_data[0] 98 |
nc 46 |
nc 201 |
data[5] 149 |
out_data[1] 97 |
GND 45 |
DRAM_addr[1] 200 |
nc 148 |
GND 96 |
DRAM_data[17] 44 |
DRAM_addr[2] 199 |
data[4] 147 |
out_data[2] 95 |
nc 43 |
GND 198 |
GND 146 |
out_data[3] 94 |
DRAM_data[18] 42 |
DRAM_addr[3] 197 |
data[3] 145 |
out_data[4] 93 |
VDD 41 |
nc 196 |
nc 144 |
out_data[5] 92 |
nc 40 |
DRAM_addr[4] 195 |
data[2] 143 |
VDD 91 |
DRAM_data[19] 39 |
VDD 194 |
nc 142 |
out_data[5] 90 |
DRAM_data[20] 38 |
DRAM_addr[5] 193 |
data[1] 141 |
out_data[7] 89 |
nc 37 |
DRAM_addr[6] 192 |
data[0] 140 |
out_data[3] 88 |
GND 36 |
nc 191 |
nc 139 |
out_extn 87 |
DRAM_data[21] 35 |
GND 190 |
VDD 138 |
GND 86 |
nc 34 |
DRAM_addr[7] 189 |
nc 137 |
DRAM_data[0] 85 |
DRAM_data[22] 33 |
DRAM_addr[8] 188 |
addr[6] 136 |
DRAM_data[1] 84 |
VDD 32 |
VDD 187 |
addr[5] 135 |
DRAM_data[2] 83 |
DRAM_data[23] 31 |
DRAM_addr[9] 186 |
GND 134 |
VDD 32 |
DRAM_data[24] 30 |
nc 185 |
addr[4] 133 |
DRAM_data[3] 81 |
nc 29 |
DRAM_addr[10] 184 |
addr[3] 132 |
nc 80 |
GND 28 |
GND 183 |
addr[2] 131 |
DRAM_data[4] 79 |
DRAM_data[25] 27 |
coded_clock 182 |
addr[1] 130 |
GND 78 |
nc 26 |
VDD 181 |
VDD 129 |
nc 77 |
DRAM_data[26] 25 |
test pin 180 |
addr[0] 128 |
DRAM_data[5] 75 |
nc 24 |
test pin 179 |
enable[0] 127 |
nc 75 |
VDD 23 |
test pin 178 |
enable[1] 126 |
DRAM_data[6] 74 |
DRAM_data[27] 22 |
decoder_clock 177 | r
w 125 | VDD 73 | nc 21 |
byte_mode 176 |
GND 124 |
DRAM_data[7] 72 |
DRAM_data[28] 20 |
GND 175 |
test pin 123 |
nc 71 |
DRAM_data[29] 19 |
coded_extn 174 |
test pin 122 |
DRAM_data[9] 70 |
GND 18 |
表A.9.3 空间解码器引脚分配(续)
信号名 |
引脚 |
信号名 |
引脚 |
信号名 |
引脚 |
信号名 |
引脚 |
nc | 173 | trst | 121 | GND | 69 | DRAM_data[30] | 17 |
coded_data[7] |
172 |
tdo |
120 |
DRAM_data[9] |
68 |
nc |
16 |
coded_data[6] |
171 |
nc |
119 |
nc |
67 |
DRAM_data[31] |
15 |
VCD |
170 |
VDD |
118 |
DRAM_data[10] |
66 |
VDD |
14 |
coded_data[5] |
169 |
tms |
117 |
VDD |
65 |
nc |
13 |
coded_data[4] |
168 |
tdi |
116 |
nc |
64 |
WE |
12 |
coded_data[3] |
167 |
lck |
115 |
DRAM_data[11] |
63 |
RAS |
11 |
coded_data[2] |
166 |
test pin |
114 |
nc |
62 |
nc |
10 |
GND |
165 |
GND |
113 |
DRAM_data[12] |
61 |
GND |
9 |
coded_data[1] |
164 |
DRAM_enable |
112 |
GND |
60 |
CAS[0] |
8 |
coded_data[0] |
163 |
test pin |
111 |
DRAM_data[13] |
59 |
nc |
7 |
coded_valid |
162 |
test pin |
110 |
nc |
58 |
CAS[1] |
6 |
coded_accect |
161 |
test pin |
109 |
DRAM_data[14] |
57 |
VDD |
5 |
reset |
160 |
nc |
108 |
VDD |
56 |
CAS[2] |
4 |
VDD |
159 |
nc |
107 |
nc |
55 |
nc |
3 |
nc |
158 |
nc |
106 |
nc |
54 |
CAS[3] |
2 |
nc |
157 |
nc |
105 |
nc |
53 |
nc |
1 |
A.9.1.1“nc”无连接引脚
表A.9.3中标有nc的引脚当前不被使用。这些引脚应当不被连接。
A.9.1.2 VDD和GND引脚
如具本领域中一般技艺的人所将认识到的,被提供的所有VDD和GND引脚都应与适当的电源相连接。除非所有的VDD和GND引脚都被正确使用,否则不能保证正确的设备运行。
A.9.1.3 正常操作的测试引脚连结
空间解码器上的9条引脚保留用于内部测试。
表A.9.4 缺省测试引脚连接
引脚号 |
连接 |
|
正常操作时接地 |
|
正常操作时接VDD |
|
正常操作时任其开路 |
A.9.1.4 正常操作的JTAG引脚
见A.8.1部分
A.9.2 空间解码器存贮映象
表A.9.5 空间解码器存贮器映象一览表
地址(十六进制) |
寄存器名 |
见表 |
0x00...0x03 |
中断服务区 |
A.9.6 |
0x04...0x07 |
输入电路寄存器 |
A.9.7 |
0x08...0x0F |
起始码检测寄存器 |
0x10...0x15 |
缓冲器启动控制寄存器 |
A.9.8 |
0x16...0x17 |
未用 | |
0x18...0x23 |
DRAM接口设置寄存器 |
A.9.9 |
0x24...0x26 |
缓冲管理器存取和锁眼寄存器 |
A.9.10 |
0x27 |
未用 | |
0x28...0x2F |
哈夫曼解码寄存器 |
A.9.13 |
0x30...0x39 |
逆量化寄存器 |
A.9.14 |
0x3A...0x3B |
未用 | |
0x3C |
保留 | |
0x3D...0x3F |
未用 | |
0x40...0x7F |
测试寄存器 | |
表A.9.6 中断服务区寄存器
表A.9.6 中断服务区寄存器(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x03 |
7 |
ldct_too_few_mask | |
6 |
ldct_too_many__mask | |
5 |
accept_enable_mask | |
4 |
target_met_mask | |
3 |
counter_flushed_too_early_mask | |
2 |
counter_flushed_mask | |
1 |
parser_mask | |
0 |
huffman_mask | |
表A.9.7 起始码检测器和输入电路寄存器
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x04 |
7 |
coded_busy | |
6 |
enable_mpl_lnput |
5 |
coded_extn |
4:0 |
未用 |
0x05 |
7:0 |
coded_data | |
0x06 |
7:0 |
未用 | |
0x07 |
7:0 |
未用 | |
0x08 |
7:1 |
未用 | |
0 |
start_code_detector_accessalso lnput_clrcuit_accessCED_SCD_ACCESS | |
0x09 |
7:4 |
未用的CED_SCE_STATUS | |
3 |
stop_after_picture | |
2 |
discard_ertension_data | |
1 |
discard_user_data | |
0 |
Ignore_non_aligned | |
0x0A |
7:5 |
未用的CED_SCD_CONTROL | |
4 |
insert_sequence_start | |
3 |
discard_all_data | |
2:0 |
start_code_search | |
表A.9.7 起始码检测器和输入电路寄存器(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x0B |
7:0 | 测试寄存器length_count | |
0x0C |
7:0 |
0x0D |
7:2 |
未用 | |
1:0 |
start_code_detector_coding_standard | |
0x0E |
7:0 |
start_value | |
0x0F |
7:4 |
未用 | |
3:0 |
plcture_number | |
表A.9.8 缓冲器启动寄存器
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x10 |
7:1 |
未用 | |
0 |
startup_access CED_BS_ACCESS | |
0x11 |
7:3 | | |
2:0 |
bit_count_prescale CED_BS_PRESCALE | |
0x12 |
7:0 |
bit_count_target CED_BS_TARGET | |
0x13 |
7:0 |
bit_count CED_BS_COUNT | |
0x14 |
7:1 |
未用 | |
0 |
offchip_queue CED_BS_OUEUE | |
0x15 |
7:1 |
未用 | |
0 |
enable_stream CED_BS_ENABLE_NXT_STM | |
表A.9.9 DRAM接口设置寄存器
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x18 |
7:5 |
未用 | |
4:0 |
page_start_lengthCED_IT_PAGE_START_LENGTH | |
0x19 |
7:4 |
未用 | |
3:0 |
read_cycle_length | |
0x1A |
7:4 |
未用 | |
3:0 |
write_cycle_length | |
表A.9.9 DRAM接口设置寄存器(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x1B |
7:4 |
未用 | |
3:0 |
refresh_cycle_length | |
0x1C |
7:4 |
未用 | |
3:0 |
CAS_talling | |
0x1D |
7:4 |
未用 | |
3:0 |
RAS_falling | |
0x1E |
7:1 |
未用 | |
0 |
Interface_timing_access | |
0x1F |
7:0 |
refresh_Interval | |
0x20 |
7 |
未用 | |
6:4 |
DRAM_addr_strength[2:0] | |
3:1 |
CAS_strength[2:0] | |
0 |
RAS_strength[2] | |
0x21 |
7:6 |
RAS_strength[1:0] | |
5:3 |
OEWE_strength[2:0] | |
2:0 |
DRAM_data_strength[2:0] | |
0x22 |
7 |
为装填强度等的ACCESS位等?未使用的CED_DRAM_CONFIGURE | |
6 |
zero_butters | |
5 |
DRAM_enable | |
4 |
no_refresh | |
3:2 |
row_address_bits[1:0] | |
1:0 |
DRAM_data_wldth[1:0] | |
0x23 |
7:0 |
测试寄存器CED_PLL_RES_CONFIG | |
表A.9.10 缓冲管理器存取和锁眼寄存器
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x24 |
7:1 |
未用 | |
0 |
butter_manager_access | |
0x25 |
7:6 |
未用 | |
5:0 |
butter_manager_keyhole_address | |
0x26 |
7:0 |
butter_manager_keyhole_data | |
表A.9.11 缓冲管理器扩展地址空间
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x00 |
7:0 | 未用 | |
0x01 |
7:2 |
1:0 |
cdb_base | |
0x02 |
7:0 |
0x03 |
7:0 |
0x04 |
7:0 |
未用 | |
0x05 |
7:2 |
1:0 |
cdb_length | |
0x06 |
7:0 |
0x07 |
7:0 |
0x08 |
7:0 |
未用 | |
0x09 |
7:0 |
cdb_read | |
0x0A |
7:0 |
0x0B |
7:0 |
0x0C |
7:0 |
未用 | |
0x0D |
7:0 |
cdb_number | |
0x0E |
7:0 |
0x0F |
7:0 |
0x10 |
7:0 |
未用 | |
0x11 |
7:0 |
tb_base | |
0x12 |
7:0 |
0x13 |
7:0 |
0x14 |
7:0 |
未用 | |
0x15 |
7:0 |
tb_length | |
0x16 |
7:0 |
0x17 |
7:0 |
0x18 |
7:0 |
未用 | |
0x19 |
7:0 |
tb_read | |
0x1A |
7:0 |
0x1B |
7:0 |
0x1C |
7:0 |
未用 | |
0x1D |
7:0 |
tb_number | |
0x1E |
7:0 |
0x1F |
7:0 |
表A.9.11 缓冲管理器扩展地址空间(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x20 |
7:0 |
未用 | |
0x21 |
7:0 |
buffer_limit | |
0x22 |
7:0 |
0x23 |
7:0 |
0x24 |
7:4 |
未用 | |
3 |
cdb_full | |
2 |
cdb_empty | |
1 |
tb_full | |
0 |
tb_empty | |
表A.9.12视频分离器寄存器
表A.9.12 视频分离器寄存器(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x2F |
7 |
CED_H_TRACE_EVENT写1到单步,当单步完成后,1将被读出 | |
6 |
CED_H_TRACE_MASK设置成1,以进入单步模式 | |
5 | CED_H_TRACE_RST当安排好1,0序列时,部分复位 | |
4:0 |
未用 | |
表A.9.13 视频分离器扩展地址空间
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0xC00x0F |
7:0 |
未用 | |
0x10 |
7:0 |
horiz_pels r_horiz_pels | |
0x11 |
7:0 |
0x12 |
7:0 |
vert_pels r_vert_pels | |
0x13 |
7:0 |
0x14 |
7:2 |
未用 | |
1:0 |
buffer_size r_buffer_size | |
0x15 |
7:0 |
0x16 |
7:4 |
未用 | |
3:0 |
pel_aspect r_pel_aspect | |
0x17 |
7:2 |
未用 | |
1:0 |
bit_rate r_bit_rate | |
0x18 |
7:0 |
0x19 |
7:0 |
0x1A |
7:4 |
未用 | |
3:0 |
pic_rate r_pic_rate | |
0x1B |
7:1 |
未用 | |
0 |
受限制的r_constrained | |
0x1C |
7:0 |
picture_type | |
0x1D |
7:0 |
h261_pic_type | |
表A.9.13 视频分离器扩展地址空间(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x1E |
7:2 |
未用 | |
1:0 |
broken_closed | |
0x1F |
7:5 |
未用 | |
4:0 |
prediction_mode | |
0x20 |
7:0 |
vbv_delay | |
0x21 |
7:0 |
0x22 |
7:0 |
MPEG私用寄存器full_pel_fwdJPEG Pending_frame_change | |
0x23 | 7:0 | MPGE私用寄存器full_pel_bwd,JPEG restart_index | |
0x24 |
7:0 |
私用寄存器horiz_mb_copy | |
0x25 |
7:0 |
plc_number | |
0x25 |
7:1 |
未用 | |
1:0 |
max_h | |
0x27 |
7:1 |
未用 | |
1:0 |
max_v | |
0x28 |
7:0 |
私用寄存器scratch1 | |
0x29 |
7:0 |
私用寄存器scratch2 | |
0x2A |
7:0 |
私用寄存器scratch3 | |
0x2B |
7:0 |
Nt MPEG unused 1. H.261 ingob | |
0x2C |
7:0 |
MPGE私用寄存器first_group,JPEG first_scan |
0x2D |
7:0 |
MPEG私用寄存器in_picture | |
0x2E |
7 |
dummy_last_picture r_rom_control | |
6 |
lield_into | |
5:1 |
未用 | |
0 |
继续 | |
0x2F |
7:0 |
rom_revlsion | |
0x30 |
7:2 |
未用 | |
1:0 |
dc_huff_0 | |
0x31 |
7:2 |
未用 | |
1:0 |
dc_huff_1 | |
0x32 |
7:2 |
未用 | |
1:0 |
dc_huff_2 | |
表A.9.13 视频分离器扩展地址空间(续)
地址(十六进制) | 位号 | 寄存器名 | 参考页 |
0x33 |
7:2 |
未用 | |
1:0 |
dc_huff_3 | |
0x34 |
7:2 |
未用 | |
1:0 |
ac_huff_0 | |
0x35 |
7:2 |
未用 | |
1:0 |
ac_huff_1 | |
0x36 |
7:2 |
未用 | |
1:0 |
ac_huff_2 | |
0x37 |
7:2 |
未用 | |
1:0 |
ac_huff_3 | |
0x38 |
7:2 |
未用 | |
1:0 |
to_0 r_to_0 | |
0x39 |
7:2 |
未用 | |
1:0 |
to_1 r_to_1 | |
0x3A |
7:2 |
未用 | |
1:0 |
to_2 r_to_2 | |
0x3B |
7:2 |
未用 | |
1:0 |
to_3 r_to_3 | |
0x3C |
7:0 |
component_name_0 r_c_0 | |
0x3D |
7:0 |
component_name_1 r_c_1 | |
0x3E |
7:0 |
component_name_2 r_c_2 | |
0x3F |
7:0 |
component_name_3 r_c_3 | |
0x400x53 |
7:0 |
私用寄存器 | |
0x40 |
7:0 |
r_dc_pred_0 | |
0x41 |
7:0 | |
0x42 |
7:0 |
r_dc_pred_1 | |
0x43 |
7:0 | |
0x44 |
7:0 |
r_dc_pred_2 | |
0x45 |
7:0 | |
0x46 |
7:0 |
r_dc_pred_3 | |
0x47 |
7:0 | |
0x480x4F |
7:0 |
未用 | |
表A.9.13 视频分离器扩展地址空间(续)
地址(十六进制) |
位号 |
寄存器名 |
参考页 |
0x8500x85F |
7:0 |
CED_KEY_MTYPE_P_CPB |
|
0x8600x86F |
7:0 |
CED_KEY_MTYPE_B_CPB |
|
0x8700x88F |
7:0 |
CED_KEY_MTYPE_H.251_CPB |
|
0x8800x900 |
7:0 |
未用 |
|
0x901 |
7:0 |
CED_KEY_HDSTROM_0 |
|
0x902 |
7:0 |
CED_KEY_HDSTROM_1 |
|
0x9030x90F |
7:0 |
CED_KEY_HDSTROM_2 |
|
0x9100xAB F |
7:0 |
未用 |
|
0xAC0 |
7:0 |
CED_KEY_DMX_WORD_0 |
|
0xAC1 |
7:0 |
CED_KEY_DMX_WORD_1 |
|
0xAC2 |
7:0 |
CED_KEY_DMX_WORD_2 |
|
0xAC3 |
7:0 |
CED_KEY_DMX_WORD_3 |
|
0xAC4 |
7:0 |
CED_KEY_DMX_WORD_4 |
|
0xAC5 |
7:0 |
CED_KEY_DMX_WORD_5 |
|
0xAC6 |
7:0 |
CED_KEY_DMX_WORD_6 |
|
0xAC7 |
7:0 |
CED_KEY_DMX_WORD_7 |
|
表A.9.13视频分配器扩展地址空间(续)
地址(十六进制) |
位号 |
寄存器名 |
参考页 |
0x189 |
7:0 |
ac_eob_1 CED_H_KEY_EOB_INDEX1 |
|
0x18A0x18B |
7:0 |
未用 |
|
0x18C |
7:0 |
ac_zrl_0 CED_H_KEY_ZRL_INDEX0 |
|
0x18D |
7:0 |
ac_zrl_1 CED_H_KEY_ZRL_INDEX1 |
|
0x18E0x1FF |
7:0 |
未用 |
|
0x2000x2AF |
7:0 |
ac_huffval_0[161:0] CED_H_KEY_AC_ITOD_0 |
|
0x2B00x2BF |
7:0 |
dc_huffval_0[11:0] CED_H_KEY_DC_ITOD_0 |
|
0x2C00x2FF |
7:0 |
未用 |
|
0x3000x3AF |
7:0 |
ac_huffval_1[161:0] CED_H_KEY_AC_ITOD_1 |
|
0x3B00x3BF |
7:0 |
dc_huffval_1[11:0] CED_H_KEY_DC_ITOD_1 |
|
0x3C00x7FF |
7:0 |
未用 |
|
0x8C00xACF |
7:0 |
私用寄存器 |
|
0x8000x80F |
7:0 |
CED_KEY_TCOEFF_CPB |
|
0x8100x81F |
7:0 |
CED_KEY_CBP_CPB |
|
0x8200x82F |
7:0 |
CED_KEY_MBA_CPB |
|
0x8300x83F |
7:0 |
CED_KEY_MVD_CPB |
|
0x8400x84F |
7:0 |
CED_KEY_MTYPE_1_CPB |
|
表A.9.13 视频分配器扩展地址空间(续)
|
|
|
|
0x79 |
7:2 |
|
|
1:0 |
blocks_h_1 r_blk_h_1 |
|
0x7A |
7:2 |
|
|
1:0 |
blocks_h_2 r_blk_h_2 |
|
0x7B |
7:2 |
|
|
1:0 |
blocks_h_3 r_blk_h_3 |
|
0x7C |
7:2 |
|
|
1:0 |
blocks_v_0 r_blk_v_0 |
|
0x7D |
7:2 |
|
|
1:0 |
blocks_v_1 r_blk_v_1 |
|
0x7E |
7:2 |
|
|
1:0 |
blocks_v_2 r_blk_v_2 |
|
0x7F |
7:2 |
|
|
1:0 |
blocks_v_3 r_blk_v_3 |
|
0x7F0xFF |
7:0 |
|
|
0x1000x10F |
7:0 |
dc_bits_0[15:0] CED_H_KEY_DC_CPB0 |
|
0x1100x11F |
7:0 |
dc_bits_1[15:0] CED_H_KEY_DC_CPB1 |
|
0x1200x13F |
7:0 |
|
|
0x1400x14F |
7:0 |
ac_bits_0[15:0] CED_H_KEY_AC_CPB0 |
|
0x1500x15F |
7:0 |
ac_bits_1[15:0] CED_H_KEY_AC_CPB1 |
|
0x1600x17F |
7:0 |
|
|
0x180 |
7:0 |
dc_zssss_0 CED_H_KEY_ZSSSS_INDEX0 |
|
0x181 |
7:0 |
dc_zssss_1 CED_H_KEY_ZSSSS_INDEX1 |
|
0x1820x187 |
7:0 |
|
|
0x188 |
7:0 |
ac_eob_0 CED_H_KEY_EOB_INDEX0 |
|
地址(十六进制) |
位号 |
寄存器名 |
参考页 |
0xAC8 |
7:0 |
CED_KEY_DMX_WORD_8 |
|
0xAC9 |
7:0 |
CED_KEY_DMX_WORD_9 |
|
0xACA0xACB |
7:0 |
未用 |
|
0xACC |
7:0 |
CED_KEY_DMX_AINCR |
|
0xACD |
7:0 |
|
0xACE |
7:0 |
CED_KEY_DMX_CC |
|
0xACF |
7:0 |
|
表A.9.13 视频分配器扩展地址空间(续)
表A.9.14 逆量化器寄存器
地址(十六进制) |
位号 |
寄存器名 |
参考页 |
|
7:0 |
未用 | |
0x30 |
7:1 |
未用 | |
0 |
lq_access | |
0x31 |
7:2 |
未用 | |
1:0 |
lq_coding_standard | |
0x32 |
7:5 |
未用 | |
4:0 |
测试寄存器iq_scale | |
0x33 |
7:2 |
未用 | |
1:0 |
测试寄存器iq_component | |
0x34 |
7:2 |
未用 | |
1:0 |
测试寄存器inverse_quantiser_prediction_mode | |
0x35 |
7:0 |
测试寄存器jpeg_indirection | |
0x36 |
7:2 |
未用 | |
:0 |
测试寄存器mpeg_indirection | |
0x37 |
7:0 |
未用 | |
表A9.14逆量化器寄存器(续)
地址(十六进制) |
位号 |
寄存器名 |
参考页 |
0x38 |
7:0 |
iq_table_keyhole_address | |
0x39 |
7:0 |
iq_table_keyhole_data |
表A.9.15 Iq(逆量化)表扩充地址空间
地址(十六进制) |
寄存器名 |
参考页 |
0x00:0x3F |
JPEG逆量化表0MPEG缺省基表 | |
0x40:0x7F |
JPEG逆量化表1MPEG缺省非基表 | |
0x80:0xBF |
JPEG逆量化表2MPEG远程装入基表 |
0xC0:0xFF |
JPEG逆量化表3MPEG远程装入非基表 |
A.10编码数据输入
相应于本发明的系统必须知道何种视频标准正在为处理而被输入。此后,系统可以接受预先存在的令牌或者原始字数据,原始字节数据然后被起始码检测器放入令牌中。
因而,编码数据和设置令牌可以通过两种途径被提供给空间解码器:
·编码数据输入端口
·微处理器接口(MPI)
选择使用哪条路径将依赖于应用和系统环境。例如,在低数据率时有可能使用一单一微处理器来同时控制解码器芯片集和完成系统比特串的多路分配。在这种情况下,有可能通过MPI完成编码数据的输入。作为另一种选择,一个高编码数据率可能要求编码数据通过编码数据端口被提供。
在某些应用中,可能适合采取MPI和编码数据端口混合输入。
A.10.1 编码数据端口
表A.10.1 编码数据端口信号
信号名 |
输入/输出 |
说明 |
coded_clock |
入 |
一高达30兆赫的时钟控制输入电路的操作 |
coded_data[7:0] |
入 |
实现令牌端口传送8bit数据值所要求的11线,见A.4部分对此接口的电气描述。芯片外电路必须组装编码数据成为令牌 |
coded_extn |
入 |
coded_valid |
入 |
coded_accept |
出 |
byte_mode |
入 |
当此信号为高电平则表示经过编码数据端口传输的信息是按字节方式而不是令牌方式。 |
相应于本发明的编码数据端口可以两种模式被操作:令牌模式和字节模式。
A.10.1.1 令牌模式
在本发明中,如果byte_mode是低电平,那么编码数据端口在一般方法中作为一令牌端口运行,并且在coded_valid和coded_accept控制下接受令牌。此接口的电操作细节见A.4部分。
信号byte_mode与data[7:0],coded_extn和coded_valid同时即在Coded_Clock的上升沿被采样。
A.10.1.2 字节模式
然而,如果byte_mode处于高电平,那么数据的一个字节在双线接口控制信号coded_valid和coded_accept的控制下被传送到data[7:0]上。在此情况下,coded_extn被忽略。字节被在芯片上连续装配入DATA令牌,直到输入模式被改变。
1)在令牌模式中提供的令牌的第一个字(“头”)。
2)提供的令牌最后一个字(coded_extn变为低电平)。
3)在字节模式中提供的数据的第一个字节。一个新的DATA令牌被在芯片上自动产生。
A.10.2 通过MPI提供数据
令牌可以通过存取编码数据输入寄存器经MPI提供给空间解码器。
A.10.2.1 通过MPI写标志
本发明中的编码数据寄存器被组装成存贮器映象中的两个字节以便于有效的数据传送。8个数据位,coded_data[7:0]在一个存贮单元,而控制寄存器,coded_busy,enable_mpi_input和coded_extn在第二个存贮单元内(见表A.9.7)。
为通过MPI的令牌输入而配置时,每当一个值被写入coded_data[7:0],当前令牌就被以coded_extn的当前值扩展。软件应在任意令牌的最后一个字被写入coded_data[7:0]之前将coded_extn设置为0。
例如,向coded_extn写入1然后向coded_data[7:0]写入0×04可以起始一个DATA令牌。然后,这个新DATA令牌的起始被传递给空间解码器以作处理。
每当一个新的8位值被写入coded_data[7:0],当前令牌就被扩展。当结束当前令牌,例如引入另一令牌时,coded_extn只需被再次存取。通过向coded_extn写入0然后向coded_data[7:0]写入当前令牌的最后一个字,当前令牌的最后一个字可被提出。
表A.10.2 编码数据输入寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
coded_extn |
1rw |
不确定 |
通过写这些寄存器,经MPI,令牌可以提供给空间解码器 |
coded_data[7:0] |
8w |
不确定 |
coded_busy |
1r |
1 |
此寄存器状态表示,空间解码器是否可以接受写在coded-data[7:0]中的令牌。值1表示接口忙,不能接受数据。当coded_busy=1时,用户试图对coded_data[7:0]写入则情况不能确定。 |
enable_mpl_input |
1rw |
0 |
此功能允许寄存器的值控制到空间解码器的编码数据输入是通过编码数据端口(0)还是通过MPI(1) |
在每次写coded_data[7:0]之前,coded_busy应当被检查以看接口是否已准备好接受更多的数据。
A.10.3 输入模式之间的转换
假设适当的预告被观察到,则有可能动态地改换数据输入模式。通常说来,通过任何一种途径进行的令牌传送应当在转换模式之前结束。
表A.10.3 转换数据输入模式
先前模式 |
下一模式 |
行为 |
字节 |
令牌 |
片上电路将用在字节模式下提供的最后一个字节作为数据令牌的最后一个字节,此数据令牌是在接受下一个令牌之前构成的,(也就是,extn位将被置为0) |
MPI输入 |
令牌 |
字节 |
在令牌模式下,提供令牌的片外电路在选择字节模式前负责完成令牌(即信息最后字节的extn位设置为0) |
MPI输入 |
通过MPI存取输入将不被允许(即coded_busy将保持设置为1),除非在令牌模式下提供令牌的电路已经完成了令牌(即信息最后字节的extn位设置为0) |
MPI输入 |
字节 |
在enable_mpi_input被设置为0之前,控制软件必须完成这令牌(即信息最后字节的extn位设置为0) |
MPI输入 |
用字节模式提供的第一字节导致一个DATA令牌头在芯片上被产生。任何以字节模式传送的其它字节都在此后被附加于这个DATA令牌,直到输入模式发生改变。再回忆一下,DATA令牌可包括所需的任意多位。
MPI寄存器位,coded_busy和信号coded_accept指示空间解码器将愿意从哪个接口接受数据。这些信号的正确监测可以保证没有数据被丢失。
A.10.4 编码数据接受速率
在本发明中,输入电路将令牌传送到起始码检测器(见A.11部分)。起始码检测器连续地分析DATA令牌中的数据位。检测器的正常处理速率是每个时钟周期(coded_clock的)一位。相应地,典型地说它将每8个coded_clock周期解码一个字节的编码数据。然而,有时还需要附加的处理周期,例如当一个非DATA令牌被提供或在编码数据中碰到一个起始码时。当这种情况发生时,起始码检测器在一短暂时间内将不能接受更多的信息。
在起始码检测器之后,数据进入一个第一逻辑编码数据缓冲器。如果这个缓冲器已满,那么起始码检测器将不能接受更多的信息。
因而,当起始码检测器不能接收更多信息时,从编码数据端口或是从MPI都不会有更多编码数据(或其它令牌)被接受。这将由信号(coded_accept的状态和寄存器coded_busy所指示。
通过使用coded_accept和/或coded_busy,用户被保证不会有编码信息被丢失。然而,如具有本领域中一般技艺的人所将认识到的,如果空间解码器不能够接受数据,系统必须能够缓冲新到达的编码数据(或停止新数据的到达)。
A.10.5 编码数据时钟
相应于本发明,编码数据端口、输入电路和空间解码器内的其它功能被coded_clock所控制。进一步,这个时钟可以与主decoder_clock异步。数据传送被与芯片上decoder_clock同步。
A.11 起始码检测器
A.11.1 起始码
如本领域中人所熟知的,MPEG和H.261编码的视频串包含有被称为起始码的可识别位模型。在JPEG中记号码起着类似功能。起始/记号码识别编码数据串语法的有效部分。起始码检测器完成的起始/记号码的分析是编码数据语法分析中的第一步。起始码检测器是空间解码器上跟在输入电路后面的第一个块。
起始/记号码模型被设计为使其能被识别而无需解码整个位串。这样,它们可以相应于本发明被使用以帮助发现错误和起动解码器。起始码检测器提供设施以在编码数据结构中检测错误并协助解码器的起动。
A.11.2 起始码检测器寄存器
如前所述,许多起始码检测器寄存器被起始码检测器经常性地使用着。因此,如果起始码检测器正在处理数据,存取这些寄存器将是不可靠的。用户有责任保证在存取其寄存器之前起始码检测器被停止。
寄存器start_code_detector_access被用于停止起始码检测器并从而允许存取其寄存器。在它产生一个中断后,起始码寄存器将停止。
在起始码找寻和丢弃所有数据模式何时可被引发上还有进一步的限制。这些在A.11.8和A.11.5.1中有所描述。
表A.11.1 起始码检测器寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
start_code_detector_access |
1rw |
0 |
写1到此寄存器请求起始码检测器停止以允许存取它的寄存器。用户需要等到值1能从此寄存器读出,以表示操作已经停止并且可以进行存取 |
illegal_length_count_event |
1rw |
0 |
一计数长度非法事件在写编码JPEG数据时将出现,长度计数字段被发现的值小于2,这应仅出现在JPEG数据中产生错误结果如屏蔽寄存器设置为1,中断能被产生,起始码解码器将停止工作。如果错误被抑制(屏蔽寄存器设置为0)伴随有错误的行为是不可预测的,见A.11.4.1 |
illegal_length_count_mask |
1rw |
0 |
ipeg_overlapp-ing_start_event |
1rw |
0 |
如编码标准是JPEG,在对记号码锁定的同时,序列0×FF 0×FF被发现,则此事件发生。此序列是有效填充序列。如屏蔽寄存器是设置成1,则中断能被产生,且起始码解码器将停止工作,见A.11.4.2 |
ipeg_overlapp-ing_start_mask |
1rw |
0 |
overlapping_start_event |
1rw |
0 |
如编码标准是MPEG或H.261,在对起始码锁定的同时,一重叠起始码被发现,则此事件出现。如屏蔽寄存器是设置为1则中断能被产生,且起始码解码器将停止工作。见A.11.4.2 |
overlapping_start_mask |
1rw |
0 |
表A.11.1起始码检测器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
unrecognised_start_event |
1rw |
0 |
如果一不可识别的起始码被碰到,此事件将发生。当屏蔽寄存器被设为1则中断可被产生,且起始码解码器将停止工作。当起始码解码器停止时,从位串中读出的起始码值可在start_value寄存器中得到。见A.11.4.3在正常操作时,start_value中包含的是起始/记号码最新的解码值。在H.261操作下,仅start_value的4个最低有效位被使用4个高有效位均为0。 |
unrecognised_start_mask |
1rw |
0 |
start_value |
8ro |
不确定 |
stop_after_picture_event |
1rw |
0 |
如stop_after_picture寄存器设置为1,则一个“图象后停止”事件将发生在图象尾已通过起始码解码器之后如屏蔽寄存器被设为1则中断能够产生,且起始码解码器将停止工作,见A.11.5.1在图象尾已被检测出后,stop_after_picture不被清0,因此须要被直接清0。 |
stop_after_picture_mask |
1rw |
0 |
stop_after_picture |
1rw |
0 |
表A.11.1起始码检测器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
non_aligned_start_event |
1rw |
0 |
当ignore_non_aligned被置为1,没有字节定位的起始码被忽略(作为正常数据对待)当ignore_non_aligned被置为0,H.261和MPEG起始码将被检测。不管字节定位还是非字节定位,起始事件都将出现。如屏蔽寄存器被设置为1,则事件将引起中断,起始码解码器将停止,见A.11.6若编码标准被配置成JPEG,ignore_non_aligned被忽略,非定位的起始事件将永不发生 |
non_aligned_start_mask |
1rw |
0 |
ignore_non_aligned |
1rw |
0 |
discard_extension_data |
1rw |
1 |
当此寄存器被置为1,不能被空间解码器解码的扩展或者用户数据,是被起始码解码器丟弃,见A.11.3.3 |
discard_user_data |
1rw |
1 |
discard_all_data |
1rw |
0 |
当置为1时,所有数据和令牌被起始码解码器丢弃。此情况一直延续到FLUSH令牌被提供或寄存器被直接清0。复位此寄存器的FLUSH令牌被忽略,并且不被起始码解码器输出,见A.11.5.1 |
insert_sequence_start |
1rw |
1 |
见A.11.7 |
表A.11.1起始码检测器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
start_code_search |
3rw |
5 |
当此寄存器被置为0,起始码解码器正常地操作,当置为高值,起始码解码器忽略数据,除非指定类型的起始码被检出。当指定的起始码被检出,此寄存器被置为0,并且转为正常操作。见A.11.3 |
start_code_detector_coding_standard |
2rw |
0 |
此寄存器配置起始码解码器使用的编码标准。寄存器可直接装载或使CODING_STANDARD令牌。每当起始码解码器产生CODING_STANDARD令牌(见A.11.7.4),它携带当前编码标准的配置。此令牌将配置解码芯片集所有其它部件使用的编码标准。见A.21.1和A.11.7 |
picture_number |
4rw |
0 |
每当起始码解码器在数据流中检测到图象起始码(或者在H.261或JPEG中的等效物)一PICTURE_START令牌被产生,它带有picture_number当前值。此寄存器随后被增值。 |
length_count |
16ro |
0 |
此寄存器包含JPEG长度计数的当前值,寄存器在编码数据时钟控制下被修改,并且只能在起始码解码器停止时,通过MPI读取。 |
A.11.3起始码向令牌的转变
在正常操作中,起始码检测器的功能是在数据串上识别起始码,然后将它们转变成适当的起始码令牌。在最简单的情况下,数据以单个长DATA令牌形式提供给起始码检测器。起始码检测器的输出是大量其间插以起始码令牌的较短DATA令牌。
相应于本发明,可供选择的另一方法是,起始码检测器的输入数据可以被分为大量较短的DATA令牌。对于编码数据被如何分成DATA令牌没有限制,除了每个DATA令牌必须包括8×n位,在此n为一个整数。
其它令牌可以被直接提供给起始码检测器的输入。在这种情况下,令牌不作任何处理地穿过起始码检测器到达空间解码器的其它阶段。这些令牌只能被插入到紧靠编码数据中一个起始码位置之前处。
A.11.3.1起始码格式
本发明中的起始码检测器可以识别三种不同的起始码格式。这是通过寄存器start_code_detector_coding_standard而被配置。
表A.11.3起始码格式
编码标准 |
起始码类型(十六进制) |
起始码值大小 |
MPEG |
0×00 0×00 0×01(value) |
8bit |
JPEG |
0×FF(value) |
8bit |
H.261 |
0×00 0×01(value) |
4bit |
A.11.3.2起始码令牌的等同物
在检测到一个起始码后,起始码检测器研究与起始码相关联的值,并产生一个适当的令牌。通常,令牌是仿造合适的MPEG文法被命名,然而,具有本领域中一般技艺的人将认识到令牌可以遵从其它的命名格式。当前所选择的编码标准配置了起始码值和所产生令牌之间的关系。这种关系如表A.11.4中所示。
表A.11.4来自起始码值的令牌
a、令牌包含一8bit的数据段,它被加载的值是由起始码决定的值。
b、指出基线DCT编码数据开始。
A.11.3.3编码标准的扩展特征
编码标准提供了大量手法以使数据被嵌入数据串中,数据串的使用当前不被编码标准所定义。这可以是为一特定制造商提供额外设施的针对应用的“用户数据”。作为选择,它也可是“扩展数据”。编码标准当局保留了在将来使用扩展数据为编码标准增添特征的权利。
两种独特的技巧被采用,JPEG优先用户块和具有记号码的扩展数据。然而,H.261插入了由编码数据中一个额外信息位指示的“额外信息”。MPEG可以使用这两种技法。
相应于本发明MPEG/JPEG用户块和在起始/记号码后面的扩展数据可被起始码检测器检测出来。H.261/MPEG“额外信息”被本发明的Huffman解码器检测。参见A.14.7“额外信息的接收”。
寄存器discard_extension_data和discard_user_data允许起始码检测器被配置以丢弃用户数据和扩展数据。如果这个数据没有在起始码检测器被丢弃,它可在到达视频分离器时被存取。参见A.14.6.“用户和扩展数据的接收”。
本发明的空间解码器支持JPEG的基线特征。JPEG的非基线特征被空间解码器视为扩展数据。因此,所有在非基线JPEG数据之前的JPEG记号码都被作为扩展数据对待。
A.11.3.4JPEG表定义
JPEG支持远程装入的Huffman和量化表。在JPEG数据中,属于这些表的定义之前的是记号码DNL和DQT。当这些记号码被检测时,起始码检测器产生令牌DHT_MARKER和DQT_MARKER。这些令牌向视频分离器指示后面的DATA令牌包含说明Huffman或量化表的编码数据(使用JPEG中说明的格式)。
A.11.4错误检测
起始码检测器可以检测编码数据中的某些错误,并提供某些设施以使解码器在一个错误被检测出后恢复(见A.11.8,“起始码找寻”)。
A.11.4.1非法JPEG长度计数
多数JPEG记号码具有一个与之相联系的16位长度计数字段。这个字段指示有多少数据与此记号码相关联。0或1的长度计数是非法的。非法长度只应当在一数据错误之后发生,在本发明中,如果illegal_length_count_mask被设置为1,这将产生一个中断。
由于在JPEG数据中寻找起始码的困难性,从JPEG数据中的错误中恢复有可能还需要其它指明应用的数据(参见A.11.8.1)。
A.11.4.2重叠起始/记号码
在本发明中,重叠起始码应当只在数据错误后面出现。一个MPEG、字节定位的重叠起始码在图64中有所说明。在此,起始码检测器首先见到一种看起来类似一图象起始码的模式。然后,起始码检测器看到此图象起始码被与一组起始重叠。相应地,起始码检测器产生一重叠起始事件。进而,起始码检测器将产生一个中断且停止,如果overlapping_start_mask被设置为1。
区别两个起始码中哪一个是正确的而哪一个是由一数据错误引起是很重要的。然而,相应于本发明的起始码检测器丢弃第一个起始码,并将在重叠起始码事件被服务后继续解码第二个起始码,“就象它是正确的”。如果存在一系列的重叠的起始码,起始码检测器将丢弃除最后一个之外所有的(为每次重叠起始码产生一个事件)。
在非字节定位系统中类似的错误也是可能的(H.261或可能MPEG)。在这种情况下,ignore_non_aligned状态也必须被考虑。图65描述了一个例子,其中,所找到的第一起始码是字节定位的,但它与一非定位起始码重叠。如果ignore_non_aligned被设置为1,那么第二个重叠起始码将被起始码检测器作为数据对待,且因而不会发生重叠起始码事件。这隐藏了一种可能的数据通信错误。如果ignore_non_aligned被设置为0,起始码检测器将看到第二个非定位的起始码并将看到它与第一起始码相重叠。
A.11.4.3不可识别的起始码
当一个不可识别的起始码被检测到,起始码检测器可以产生一个中断,如果(unrecognized_start_mask=1)。引起这个中断的起始码的值可以从寄存器start_value中被读。
起始码值0×B4(序列错误)在MPEG解码器系统中被用于指示一个通道或媒体错误。例如,这个起始码可以被一ECC电路插入数据中,如果它检测出一个它不能改正的错误。
A.11.4.4事件产生的顺序
在本发明中,某些编码数据模型(可能指示一错误情况)将导致不只一个上述错误情况在一短暂时间空隙内出现。因而,起始码检测器对编码数据检测错误情况的顺序是:
1)非定位的起始码
2)重叠起始码
3)不可识别的起始码
这样,如果一个非定位起始码与其它后面的起始码重叠,所产生的第一事件将是与非定位起始码相联系的。当这个事件被服务之后,起始码检测器的操作将继续,在短时间后检测重叠起始码。
起始码检测器仅在所有非定位和重叠起始码的检测完成之后才试图识别起始码。
A.11.5解码器起动和关闭
起始码检测器提供设施以使当前解码任务被干净地完成以便一个开始一项新任务。
这些技术的使用具有一些限制,由于JPEG编码视频作为数据片断可以包含模拟记号码的值(见A.11.8.1)。
A.11.5.1干净结束解码
起始码检测器可被配置一旦当前图象的数据完成产生一个中断,并停止工作。这通过设置stop_after_picture为1和stop_after_picture_mask为1来达到。
一旦一幅图象的结尾通过起始码检测器,一个FLUSH令牌即被产生(见A.11.7.2),一个中断被产生,且起始码检测器停止。注意刚被完成的图象将被以正常方式解码。然而,在某些应用中,宜于检测到达解码器芯片集输出的FLUSH,因为它将指示当前视频序列的结束。例如,显示将冻结于最后图象的输出。
当起始码检测器停止后,可能会有来自“老”视频序列的数据“陷”于媒体和解码芯片之间的用户实现的缓冲器内。设置寄存器discard_all_data将使空间解码器消耗和丢弃这个数据。这将继续到一个FLUSH令牌到达起始码检测器或discard_all_data通过微处理机接口被复位。
在从“老”序列丢弃了任何数据之后,解码器现已准备好针对序列开始工作。
.5.2何时起始全丢弃模式
全丢弃模式将在一个1被写入discard_all_data寄存器后马上。如果这是在起始码检测器正在活跃地处理数据时进行的,那果无法预测。
全丢弃模式可以在任何一个起始码检测器事件(非定位起始事),产生了一个中断被安全地引发。
.5.3起始一新序列
如果还不知道一个新编码视频序列的起始位于某编码数据的何那么可以使用起始码找寻的机制。这种方法丢弃在序列起始之任何不需要的数据。
.5.4序列间跳跃
此部分描述了某些上述技术的应用,目的在于从编码视频序列部分“跳”到另一部分。在本例中,文件编排系统只允许存取“块”。这个块结构可以从一个盘的扇区大小或一个错误改正块的大小得来。这样,进入点与出口点在编码视频数据中的位以与文件编排系统块结构无关。
stop_after_picture和discard_all_data机构允许来自老视频的不需要数据被丢弃。在上一文件编排系统数据块的末尾处插FLUSH令牌可复位discard_all_data模式。那么起始码找寻模可被使用,以丢弃下一数据块中处于适当进入点之前的任何数
.6字节定位
如在本领域中熟为人知的,不同的编码方案对于数据串中起始/记号码的字节定位有完全不同的看待。
例如,H.261把通信看作是位串,这样,就不存在起始码字节定位的概念。通过设置ignore_non_aligned为0,起始码检测器能够检测具有任意位排列的起始码。通过设置non_aligned_start_mask为0。起始码非定位中断被抑制。
然而,相比之下,JPEG是为一种字节定位被保证的计算机环境设计的。因此,记号码应当只在字节定位时被检测。
当编码标准被配制为JPEG,寄存器ignore_non_aligned被忽略,且非定位起始事件将永不被产生。然而,建议设置ignore_non_aligned=1和non_alianed_start_mask=0来保证与未来产品的兼容性。
另一方面,MPEG是为了同时满足通信(位串)和计算机(面向字节的)系统的需要而设计的。MPEG数据中的起始码一般应按字节正常排列。然而,标准是为起始码的位串行找寻而设计的(除非它就是起始码,没有其它具有任何位定位的MPEG位模型将看起来象一起始码)。这样,一个MPEG解码器可被设计为将容忍在串行数据通信中字节定位的丢失。
如果一个非定位起始码被找到,通常它将指示一个以前出现过的通信错误。如果错误是一个在一位串行通信系统中的“位偏移”,那么包含有此错误的数据已被传送给解码器。这个错误有可能会引起解码器中的其它错误。然而,到达起始码检测器的新数据可以在这个字节定位的丢失之后能够继续被解码。
通过设置ignore_non_aligned=0和non_aligned_start_mark=1,如果一个非定位起始码被检测出,一个中断可以被产生。响应将依赖于应用。所有后面的起始码将是非定位的(直到字节定位被恢复)。相应地,在字节定位已被丢失之后设置non_aligned_start-mask=0也许是恰当的。
表A.11.5字节定位的配置
|
MPEG |
JPEG |
H.261 |
ignore_non_aligned |
0 |
1 |
0 |
non_aligned_start_mask |
1 |
0 |
0 |
A.11.7自动产生令牌
在本发明中,大多数由起始码检测器输出的令牌直接反映了多种图象和视频编码标准的语法元素(syntactic elements)。除这些“天然”令牌之外,某些有用的“发明”令牌被产生。例如这些专有的令牌是PICTURE_END和CODING_STANDARD。令牌也被引入以消除编码标准之间的某些语法差别,并在出错误的情况下去“收拾”局面。
这个自动令牌产生是在编码数据的序列分析之后被完成的(见图61,“起始码检测器”)。因此,对于通过起始码检测器直接提供给空间解码器输入端的令牌和已经被起始码检测器在编码数据中检测出起始码所产生的令牌,系统的反映是相同的。
A.11.7.1指示一图象的结束
通常,编码标准不明确地标志出一图象的结束。然而,本发明中的起始码检测器在检测到指示当前图象已被结束时产生一个PICTURE_END令牌。
使PICTURE_END被产生的令牌是:SEQUENCE_START,GROUP_START,PICTURE_START,SEQUENCE_END和FLUSH。
A.11.7.2图象结束选择后的停止
如果寄存器stop_after_picture置位,那么起始码检测器将在一PICTURE_END令牌通过后停止。然后,一个FLUSH令牌被插入到PICTURE_END之后以“推动”编码数据的末端通过解码器和使系统复位。(见A.11.5.1)。
A.11.7.3为H.261插入序列起始
H.261不具备一个相当于序列起始的语法元素(见表A.11.4)。如果寄存器insert_sequence_start被设置,那么起始码检测器将保证在下一PICTURE_START之前有一SEQUENCE_START令牌,也就是说,如果起始码检测器没有在一个PICTURE_START之前看到一个SEQUENCE_START,将会插入一个。如果已经有一个SEQUENCE_START存在,将不会再引入。
这一功能对MPEG和JPEG不应使用。
A.11.7.4为每一序列设置编码标准
所有离开起始码检测器的SEQUENCE_START令牌之前总有一个CODING_STANDARD令牌。这个令牌被装载有起始码检测器的当前编码标准。它为每一新视频序列对整个解码器芯片集设置了编码标准。
A.11.8起始码找寻
根据本发明的起始码检测器可以被用于在一编码数据流中找寻一特定类型的起始码。这使得解码器在某些编码数据的体系中从一指定级别重新开始解码(在丢弃它前面的任何数据之后)。它的应用包括:
·在跳入一编码数据文件后在一未知位置起动一解码器(例如,随机存取)。
·在数据中找寻一已知点以帮助一处数据错误后的复原。
例如,表A.11.6显示为start_code_search的不同配置而找寻的MPEG起始码。等效的H.261和JPEG起始/记号码可以在表A.11.4中看见。
表A.11.6起始码找寻模式
start_code_search |
为......而寻找的起始码 |
0a |
正常操作 |
1 | 保留(将表现为丢弃数据) |
2 |
3 |
序列起始 |
start_code_search |
为......而寻找的起始码 |
4 |
组或序列起始 |
5b |
图象,组或序列起始 |
6 |
片,图象,组或序列起始 |
7 |
下一起始或记号码 |
a.在此找寻模式中,FLUSH令牌位于起始码检测器。
b.这是复位后的缺省模式。
当一非零值被写入start_code_search寄存器,起始码检测器将开始丢弃所有的到达数据,直到指定的起始码被找到。然后start_code_search寄存器将复位为0且正常运行将继续。
起始码找寻将在一个非零值被写入start_code_search寄存器之后马上开始。如果这是在起始码检测器正在活跃处理数据时完成,则其结果将无法预测。因此,在引发一起始码找寻之前,起始码检测器应当被停止,此时没有数据在被处理。如果任何的起始码检测器事件(非定位起始事件等)刚产生了一个中断,起始码检测器将总处于这种状态。
A.11.8.1对JPEG使用起始码找寻的限制
大多数JPEG记号码具有一个与之相联系的16位长度计数字段。这个字段指示与记号码相联系的一个数据分段的长度。这个分段可以包含仿效记号码的值。在正常运行中,起始码检测器不在这些数据分段中寻找起始码。
在对这样一个分段中的某些JPEG编码数据“领地(lands)”的随机存取中,起始码找寻的机制不能被可靠使用。通常,JPEG编码的视频将需要附加的外部信息来为随机存取识别进入点。
A.12解码器起动控制
A.12.1解码器起动的概述
在一解码器中,视频显示通常在编码数据首次获得之后被延迟一小段时间。在这个延迟当中,编码数据在解码器内的缓冲器中累积。这一缓冲器的预填充保证了在解码中缓冲器从不会空,且这从而保证了解码器能在标准间隔内能够解码新的图象。
通常,正确起始一解码器需要两种手法。第一,必须有一种手段来测量已有多少数据被提供给解码器。第二,必须有一种手法来防止一新视频串的显示。本发明中的空间解码器在其输入端附近提供了一个位计数器,以测量有多少数据已到达,在其输出端附近提供了一个输出门以防止正在被输出的新视频串的起始。
这些手法的控制有三种复杂级别
·输出门总打开
·基本控制
·高级控制
若输出门总是开的,图象输出将在编码数据开始到达解码器之后尽快开始。这对于静止图象的解码或显示正被某种其它手法延迟的情况是适宜的。
基本和高级控制之间的差别取决于任何时刻解码器缓冲器可以容纳多少短视频串。在大多数应用中基本控制已经足够。然而,高级控制使用户软件能帮助解码器管理几个很短的视频串的起动。
A.12.2MPEG视频缓冲器检验器
MPEG描述了一种为恒数据率系统使用的“视频缓冲器检验器”(VBV)。使用(VBV)信息使解码器在其开始显示图象之前预填充其缓冲器。再则,这种预填充保证了解码器的缓冲器在解码期间总不会空。
总地说来,每一MPEG图象携带一个vbv_delay参数。这个参数指定了在第一幅图象被解码之前,一“理想解码器”的编码缓冲器的多长应被编码数据填充。在观察到第一幅图象的起动延迟后,所有后面图象的要求都将自动被满足。
因而,MPEG将起动要求规定为延迟。然而,在一恒定比特率系统中,一延迟将被很容易地转换成位计数。这就是本发明中空间解码器的起动控制得以运行的基础。
A.12.3流的定义
在此应用中,术语“流(stream)”被使用以避免与MPEG术语“序列(sequence)”混淆,因此,流代表一个应用所“感兴趣”的大量视频数据。因而,一个流可以是许多MPEG序列,或者可以是一单一图象。
本章中所描述的解码器起动设施与满足一个流中第一幅图象的VBV要求有关,该流中后面图象的要求被自动满足。
A.12.4起始控制寄存器
表A.12.1解码器起动寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
startup_acceCED_BS-ACCESS |
1rw |
0 |
对此寄存器写1要求位计数器和门开启逻辑停止,以允许访问它们的配置寄存器 |
bit_countCED_BS_COUNT_ |
8rw |
0 |
当编码数据离开起始码检测器,此位计数器增值,一次增加bit_count所要求的位数大约是2(bit_count_prescale+1)×512在FLUSH令牌通过位计数器后,位计数器开始计数,在位计数目标满足后,它就被清0,然后停止增值。 |
bit_count_prescaleCED_BS_PRESCALE | 3rw | 0 |
bit_count_targetCED_BS_TARGET |
8rw | 不定 |
此寄存器指示位计数的目标值,当下列条件变为真时目标满足事件发生:bit_count≥bit_count_target |
target_met_eventBS_TARGET_MET_EVENT |
1rw |
0 |
当位计数目标满足时,此事件发生,如屏蔽寄存器被置1,则会产生中断。然而,位计数器将不停止处理数据。当位计数器增加计数到达它的目标值时,事件将发生,如果被写入的目标值小于或等于位计数器的当前值,事件也将会发生。写0到bit_count_target将总会发生满足目标的事件。 |
target_met_mask |
1rw |
0 |
表A.12.1解码器起动寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
counter_flushed_eventBS_FLUSH_EVENT |
1rw |
0 |
当FLUSH令牌通过位计数电路,此事件将发生,如果屏蔽寄存器被置1,一中断可被产生,且位计数器将停止。 |
counter_flushed_mask |
1rw |
0 |
counter_flushed_too_early_eventBS_FLUSH_BEFORE_TARGET_MET_EVENT |
1rw |
0 |
如FLUSH令牌通过位计数器电路,且位计数还未满足目标值,此事件将发生。如屏蔽寄存器被置1,中断可被产生,且位计数器将停停止。见A.12.10 |
counter_flushed_too_early_mask |
1rw |
0 |
offchip_queueCEO_BS_OUEUE |
1rw |
0 |
设置此寄存器到1,配置门开启逻辑去请求微处理器支持,当此寄存器被置0,输出门控逻辑将自动控制输出门操作。见A.12.6和A.12.7 |
表A.12.1解码器起动寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
enable_streamCED_BS_ENABLE_NXT_STM |
1rw |
0 |
当芯片外队列被使用,在流的结尾通过它以后,写enable_staeam控制输出门的行为。此寄存器的1允许输出门开启。当accept_enable中断产生,此寄存器将被复位。 |
accept_enable_eventBS_STREAM_ENO_EVENT |
1rw |
0 |
此事件表明FLUSH令牌已通过输出门(造成其关闭),并且曾有一使能信号允许此门打开过。如果屏蔽寄存器被置1,中断能够产生且寄存器enable_stream将被复位。见A.12.7.1 |
accept_enable_mask |
1rw |
0 |
A.12.5常开启的输出门
输出门可被设置为保持开启。在静止图象被解码或在可获得某些其它机制来管理视频解码器的起动时,这种配置是适宜的。
复位之后需要下面的配置(已经通过向startup_access)写入1获得了对起动控制逻辑的访问):
·设置offchip_queue=1
·设置enable_stream=1
·保证所有的解码器起动事件屏蔽寄存器被设置为0使它们不能中断(这是复位后的缺省状态)。
(见A.12.7.1对为何这样可保持输出门开启的解释)。
A.12.6基本操作
在本发明中,起动逻辑的基本控制对于大多数MPEG视频应用已经足够了。在此方式中,位计数器直接与输出门通信。当一视频流的结尾通过并由一个FLUSH令牌所指示时,输出门将自动关闭。门将保持关闭,直到当一个流已达到其起动位计数时,一个允许信号由位计数器提供。
在复位后需要如下配置(已经通过向startup_access写入1获得了对起始控制逻辑的访问):
·为编码数据率的预期范围大致设置bit_count_prescale。
·设置counter_flushed_too_early_mask=1来使此错误状态能被检测出。
需要两种中断服务例行程序:
·视频分配器服务以为每一新流中的第一幅图象获得vbv延迟的值。
·计数器过早清除(flush)服务以响应这种状态。
视频分配器(也被称为视频解析器)可以在其为一新视频流(也就是在FLUSH之后第一幅到达视频分配器的图象)解码vbv_delay时产生一个中断。中断服务例程应当为bit_count_target计算一适当值并写它。当位计数器达到这一目标时,它将在位计数器和输出门之间的一个短队中插入一个使能。当输出门打开时,它从这个队中移走一个使能。
A.12.6.1在另一流结束后马上开始一个新流
举例说,将要结束的MPEG流被称为A而将要开始的MPEG流被称为B。在A的结尾之后一个FLUSH令牌应当被插入。它推动其编码数据的最后一个通过解码器,并通告解码器的多个部分期待一新流。
通常,在A已经满足其起动条件时,位计数器将已复位为零。在FLUSH之后,位计数器将开始计数流B中的位。当视频分配器已经解码了来自流B中第一幅图象的vbv_delay后,一个中断将被产生,以使得位计数器被配置。
当标志了流A的结尾的FLUSH通过输出门时,门将关闭。门将一直关闭直到B符合其起动条件。根据很多参数,诸如:流B的起动延迟和缓冲器深度,有可能在输出门关闭时B将已经满足了其起动条件。在此情况下,在队中将有一个使能在等待,且输出门将立即打开。否则,流B将必须等待直到它满足了其起动条件。
A.12.6.2若干短流的连续
位于位计数器和输出门之间的队的容量足以使3个分别的视频流达到它们的起动条件并等待着一个前面的流结束被解码。在本发明中,只有当一些很短的流在被解码或者芯片外缓冲器与正在被解码的图象格式相比是很大的时才会发生这种情况。
在图69中,流A正在被解码且输出门开启。流B和C已经满足了它们的起动条件并且被整个包含于由空间解码器管理的缓冲器中。流D仍正在到达空间解码器的输入端。
流B和C的使能在队中。因此,当流A被完成后B将能够立即开始。类似地,C可以紧跟在B后。
如果当D满足其起动目标时A仍在通过输出门,一个使能将被加到队列中以填充队列。如果当D的尾端通过位计数器时(也就是,A仍然在通过输出门)还没有使能被从队列中移走,将没有新的流开始通过位计数器。因此,编码数据将在输入端停留直到A结束且当输出门被打开以使B通过时一个使能被从队列移走。
A.12.7高级操作
相应于本发明,起动逻辑的高级控制可以使用户软件能无限扩展A.12.6“基本操作”中所描述的使能队列的长度。这一级别的控制只在视频解码器必须容纳一系列比A.12.6.2“若干短流的连续”中描述的流更长的短视频流时才需要。
除了系统基本操作所需的配置,下面的配置在复位后被需要(已经通过向start_up存取写入1而获得了对起始控制逻辑的访问:
·设置offchip_queue=1
·设置accept_enable_mask=1,以在一个使能已被队列移走时允许发出中断。
·设置target_met_mask=1,以在一个流的位计数目标被满足时允许发出中断。
还需要两个附加的中断服务例程:
·接受使能中断
·目标满足中断
当一个目标满足中断出现时,服务例程应向其芯片外使能队列增加一个使能。
A.12.7.1输出门逻辑行为
向enable_stream寄存器写入一个1即向一短队列装入了一个使能。
当一个FLUSH(标志着流的末端)通过输出门,门将关闭。如果在队列的末端可获得一个使能,门将打开并产生一个accept_enable_event。如果accept_enable_mask被设置为1,一个中断可以被产生且一个使能被从队列的末端移去(寄存器enable_stream被得位)。
然而,如果accept_enable_mask被设置为零,没有中断在accept_enable_event之后被产生,且使能不被从队列的末端移走。这种技巧可以用于如A.12.5中描述的那样保持输出门的开启。
A.12.8位计数
当一个FLUSH令牌通过位计数器后,它开始计数。这个FLUSH令牌指示当前视频流的末端。在这一点上,位计数器继续计数直到它满足设置于bit_count_target寄存器内的位计数目标。然后一个目标满足事件被产生,位计数器复位为0并等待下一个FLUSH令牌。
位计数器还将在它达到其最大计数(255)时停止增加。
A.12.9位计数预先标度(prescale)
在本发明中,2(bit_count_prescale+1)×512位被需要用以增加一次位计数器。此外,bit_count_prescale是一个可以取0至7之间值的3位寄存器。
表A.12.2 位计数器范围示例
n |
Range(bits) |
Resolution(bits) |
0 |
0到262144 |
1024 |
1 |
0到524288 |
2048 |
7 |
0到31457280 |
122880 |
位计数是大致的,因为视频流的某些元素已经被令牌化(如起始码),因此包括非数据令牌。
A.12.10过早被清除的(flushed)计数器
如果一个FLUSH令牌在达到位计数目标之前到达位计数器,一个可以导致一中断的事件被产生(如果counter_flushed_too_early_mask=1)。如果中断被产生,那么位计数器电路将停止,以防止进一步的数据输入。将由用户软件负责判断在这一事件出现后何时开启输出门。输出门可以通过将位计数目标写为0而被开启。只有当试图解码只持续几幅图象的视频流时才应当出现这些情况。
A.13缓冲器管理
空间解码器管理两个逻辑数据缓冲器:编码数据缓冲器(CDB)和令牌缓冲器(TB)。
CDB对起始码检测器和Huffman解码器的输入之间的编码数据进行缓冲。这样就为低数据率的编码视频数据提供了缓冲。TB缓冲Huffman解码器的输出和空间视频解码电路(逆向模式化器,量化器和DCT)的输入之间的数据。这第二个逻辑缓冲器使处理时间包括一个扩展,以适应处理具有变化数据量的图象。
这两种缓冲器物理上都包含于芯片外一个单一DRAM阵列中。这些缓冲器的地址由缓冲器管理器产生。
A.13.1缓冲器管理器的寄存器
空间解码器缓冲管理器打算在设备复位后立即被配置。在正常操作中,不需要配置缓冲器管理器。
在复位从空间解码器去除后,缓冲器管理器被停止(同时其存取寄存器buffer_manager_access被设置为1)等待配置。当寄存器被置好之后,buffer_manager_access可被设置为0且解码可开始。
当缓冲器管理器在运行时,缓冲器管理器中使用的大多数寄存器不能被可靠地访问。在任何缓冲器管理器的寄存器被存取之前,buffer_manager_access必须被设置为1。这使得遵守等待协议很重要,直到可以从buffer_manager_access读出值1。获得和脱离访问所花的时间,在询问这些寄存器,象cdb_full和cdb_empty,以监视缓冲器状况时应当被考虑。
表A.13.1 缓冲管理器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
buffer_manger_access |
1rw |
1 |
此存取位停止缓冲器管理器的操作,以使管理器的各个寄存器能被可靠地访问,见A.6.4.1注意:此存取寄存器不寻常,它复位后的缺省状态是1,也就是复位后缓冲器管理器停止,等待通过微处理器接口对其配置。 |
buffer_manger_keyhole_address |
6rw |
不定 |
键孔访问扩展地址空间,此空间为下面所示的缓冲管理器寄存器使用。见A.6.4.3有关通过键孔访问寄存器的更多信息。 |
buffer_manager_keyhole_data |
8rw |
不定 |
buffer_ |
18rw |
不定 |
指定整个联接到空间解码器上的DRAM阵列的大小。全部缓冲器地址按此缓冲大小被取模计算,故其在所的DRAM中重叠循环。 |
表A.13.1 缓冲管理器寄存器(续)
寄存器名 |
大小/向 |
复位状态 |
说明 |
cdb_base |
18rw |
不定 |
这些寄存器指向编码数据(cdb)和令牌(tb)缓冲器的基地址。 |
tb_base |
cdb_length |
18rw |
不定 |
这些寄存器指向编码数据(cdb)和令牌(tb)缓冲器的长度(即大小)。 |
tb_length |
cdb_read |
18读 |
不定 |
这些寄存器保存相对于缓冲器基地址的偏移量,指出下一数据从什么地方读出。 |
tb_read |
cdb_number |
18只读 |
不定 |
这些寄存器显示当前有多少数据保留在缓冲器中。 |
tb_number |
cdb_full |
1只读 |
不定 |
如果编码数据(cdb)或令牌(tb)缓冲器满,这些寄存器将被置1。 |
tb_full |
cdb_empty |
1只读 |
不定 |
如果编码数据(cdb)或令牌(tb)缓冲器空,这些寄存器将被置1。 |
tb_empty |
A.13.1.1缓冲器管理器指针值
典型地说,数据以64字节突发方式(使用DRAM的快页面方式)在空间解码器和芯片外DRAM之间被传送。所有的缓冲器指针和长度寄存器都涉及这些64字节(512位)的数据块。因此,缓冲器管理器的18位寄存器描述一256K块的线性地址空间(也就是128Mb)。
64字节传送与DRAM接口宽度(8、16或32位)无关。
A.13.2缓冲器管理器的寄存器的使用
空间解码器的缓冲管理器有两套定义两种类似缓冲器的寄存器。缓冲限制寄存器(buffer_limit)定义存贮空间的物理上限。所有的地址以此数为模而被计算。
在可获得的存贮器的限制之内,每个缓冲器的范围由两个寄存器定义:缓冲器基地址(cdb_base和tb_base)和缓冲器长度(cdb_length和tb_length)。至此所描述的所有寄存器必须在缓冲器可被使用之前被配置。
每一缓冲器的当前状态都可在4个寄存器内被观察到。缓冲器读寄存器(cdb_read和tb_read)指示相对于缓冲器基地址的一个偏移量,这个编移地址下一个数据将被读出。缓冲器数量寄存器(cdb_number和tb_number)指示当前由缓冲器保留的数据量。状态位cdb_full,tb_full,cdb_etmpty和tb_empty指示缓冲器是空或是满。
如A.13.1.1中所述,所有上面提到的寄存器的单元是一个512位数据块。相应地,从cdb_number读出的值应当被512乘,以获得编码数据缓冲器中的位数。
A.13.3零缓冲器
不具有“实时”要求的静止图象应用(例如使用JPEG)将不需要由缓冲器管理器支持的大的芯片外缓冲器。在这种情况下,DRAM接口能够被配置(通过向zero_buffers寄存器写入1)以忽略缓冲器管理器,从而为编码数据缓冲器和令牌缓冲器提供一128位流片内FIFO(先进先出)。
零缓冲器选择也可以适合于以低数据率和小图象格式操作的应用。
注意:zero_buffers寄存器是DRAM接口的一部分,因此应当仅在DRAM接口的复位后配置期间被设置。
A.13.4缓冲器操作
通过缓冲器进行的数据传送由一握手协议控制。因此保证了如果缓冲器充满或全空也不会有数据错误产生。如果一个缓冲器被充满,那么试图向缓冲器送数据的电路将被停止,直到缓冲器中有了空间。如果缓冲器持续为满,缓冲器“上游”(“up stream”)*的更多处理阶段将停止直到空间解码器不能够在其输入端口接收数据。类似地,如果一个缓冲器全空,那么试图从缓冲器移走数据的电路将停止,直到数据可以获得。
如A.13.2中所述,编码数据和令牌缓冲器的位置和大小由缓冲器基地址和长度寄存器指定。用户有责任配置这些寄存器并保证两个缓冲器间的存贮使用中没有冲突。
A.14视频多路分配器(Demux)
视频分配器,或者被称作视频分析器(parser),完成由起始码检测器起始的将编码数据转换成令牌的任务。在视频分配器中有四个主要处理块:分析器状态机,Huffman解码器(包括一ITOD),宏块计数器和ALU。
分析器或状态机遵守编码视频数据的语法并指令其它单元。Huffman解码器将多种长度编码(VLC)数据转换成整数。宏块计数器追踪图象的哪一部分正在被解码。ALU完成需要的数学计算。
A.14.1视频分配器寄存器
表A.14.1 顶层视频分配器寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
demux_accessCED_H_CTRL(7) |
1rw |
0 |
此访问位停止视频分配器的操作,以使它的各个寄存器被可靠地存取,见A.6.4.1 |
huffman_error_codeCED_H_CTRL(6:4 |
3ro | |
当视频分配器停止,huffman__even中断跟着产生,这3位寄存器保持值指示为什么产生中断,见A.14.5.1 |
parser_error_codeCED_H_DMUX_ERR |
8ro | |
当视频分配器停止跟随着parser-event产生中断请求,这8位保持值指示为什么产生中断,见A.14.5.2 |
demuxkeynole_addressCED_H_KEYHOLE_ADDR |
12rw |
不定 |
键孔访问视频分配器的扩充地址空间。关于通过键孔访问寄存器的更多信息,见A.6.4.3表A.14.2、A.14.3及A.14.4说明可经锁眼访问的寄存器。 |
demux_keynole_dadtCED_H_KEYHOLE |
8rw | 不定 |
表A.14.1 顶层视频分配器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
dummy_last_pictureCED_H_ALU_REGOr_rom_controlr_dummy_last_frame_bit |
1rw |
0 |
当这个寄存置位到1,视频分配器就产生信息,将“空”的基图象作为MPEG序列的最后图象。当时间解码被配置用作自动图象重排序(见A.18.3.5图象序列重排序),为了使最后一个P或I图象清除出时间解码器,此功能是有用的。以下情况不需要空图象:时间解码器不形成重排序·其它MPEG序列将立即解码因为这也会清除掉最后图象)·编码器标准不是MPEG |
field_intoCED_H_ALU_REGOr_rom_controlr_field_into_bit |
1rw |
0 |
当此寄存器置1,任何MPEGextra_information_picture的第一字节放到FIEID_INFO令牌中(见A.14.7.1) |
continueCED_H_ALU_REGOr_rom_controlr_continue_bit |
1rw |
0 |
当解码器析测到是额外数据时,此寄存器允许用户软件控制它打算接收的额外用户数据或扩展数据的多少。(见A.14.6,A.14.7) |
表A.14.1 顶层视频分配器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
rom_revisionCED_H_ALU_REG1r_rom_revision |
8ro |
0 |
紧跟复位后,此寄存器获得微码ROM的版本号拷贝。此寄存器也用于给出从编码数据中读出的控制软件数据值。见A.14.6“接收用户和扩展数据”及A.14.7“接收额外信息” |
huffman_event |
1rw |
0 |
如果在编码数据中发现错误,Huffman事件被产生,见A.14.5.1对这些事件的说明。如果屏蔽寄存器置1,那么产生产生中断,视频多路分配器将停止。若屏蔽寄存器置0,无中断产生,视频多路分配器试图从错误中恢复。 |
huffman_mask |
1rw |
0 |
parset_event |
1rw |
0 |
一Parser事件根据编码数据中的错误或多路分解器的到达信息请求软件干预,见A.14.5.2对这些事件的说明。如果屏蔽寄存器设置为1,产生中断,视频多路分配器停止。若屏蔽寄存器设置为0,无中断发生,视频多路分配器将试图继续。 |
parser_mask |
1rw |
0 |
表A.14.2 视频分配器图象结构寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
component_name_0component_name_1component_name_2component_name_3 |
8rw |
不定 |
在JPEG工作期间寄存器component_name_n保持8位值,(向某种应用)表示哪种彩色分量有分量IDn。 |
horiz_pels |
16rw | |
这些寄存器保持以象素为单位的正被译码的视频的水平和垂直大小。(见A.14.2节) |
vert_pels |
16rw |
不定 |
horiz_macroblocks |
16rw |
不定 |
这些寄存器保持以宏块为单位的被解码的视频的水平和垂直大小。见A.14.2节 |
vert_macroblocks |
16rw |
不定 |
max_h |
2rw |
不定 |
这些寄存器保持以块(8×8象素)计算的宏块的宽和高。值0到3表示1到4块的宽度/高度。见A.14.2节 |
max_v |
2rw |
不定 |
max_component_id |
2rw |
不定 |
值0到3表示当前被解码的1到4个不同视频分量。见A.14.2 |
表A.14.2 视频分配器图象结构寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
Nf |
8rw |
不定 |
在JPEG工作期间,这个寄存器保保持参数Nf(在帧内图象分量号) |
blocks_h_0blocks_h_1blocks_h_2blocks_h_3 |
2rw |
不定 |
对4个彩色分量中的每一个,寄存器blocks_h_n和block_v_n保持相应于分量IDn的彩色分量在垂直和和水平方向上的宏块数。见A.14.2 |
blocks_v_0blocks_v_1blocks_v_2blocks_v_3 |
2rw |
不定 |
tq-0tq-1tq_2tq_3 |
2rw |
不定 |
由寄存器tq_n保持2位值,说明当用分量IDn解码数据时使用反向量化表的哪一个。 |
A.14.1寄存器装载和令牌产生
视频分配器中的很多寄存器具有与编码图象/视频数据中通常通信的参数直接相关的值。例如,horiz_pels寄存器相应于MPEG序列头信息,horizontal_size和JPEG帧头参数X。当适当的编码数据被解码时这些寄存器被视频解码器装载。这些寄存器也与某个令牌有关。例如,寄存器horiz_pels与令牌HORIZONTAL_SIZE相关。当编码数据被解码时(或在此之后不久)令牌被视频解码器产生。令牌也可被直接提供给空间解码器的输入。在这种情况下,由令牌携带的值将配置与之相关的视频解码器寄存器。
表A.14.3 视频多路分配器Huffman表寄存器
寄存器名 |
大小/尺寸 |
复位状态 |
说明 |
dc_huff_0dc_huff_1dc_huff_2dc_huff_3 |
2rw | |
由寄存器DC_huff_n保持的值说明当分量IDn对数据的DC系数解码时使用Huufman解码表的哪一个。同样,当解码AC系数时ac_huff_n说明所用的表。每次扫描基线JPEG需要2个Huff-man表,提供的表值只是0和1。 |
ac_huff_0ac_huff_1ac_huff_2ac_huff_3 |
2rw | |
dc_bits_0[15:0]dc_bits_1[15:0] |
8rw | |
这些表每一张有16个8位值,它们提供BITS信息(见JPEG Huffman表说明)形成2个DC和2个ACHuffman表说明的一部分。见A.14.3.1。 |
ac_bits_0[15:0]ac_bits_1[15:0] |
8rw | |
dc_huffval_0[11:0]dc_huffval_1[11:0] |
8rw | |
这些表每张有12个12位值,它们提供HUFFVAL信息(见JPEGHuffman表说明)形成2个DCHuffman表的说明的一部分。见A.14.3.1。 |
表A.14.3 视频多路分配器Huffman表寄存器(续)
寄存器名 |
大小/尺寸 |
复位状态 |
说明 |
ac_huffval_0[161:0]ac_huffval_1[161:0] |
8rw | |
这些表每张有162个8位值,它们提供HUFFVAL信息(见JPEGHuffman表说明书)形成2个ACHuffman表的一部分。见A.14.3.1。 |
dc_zssss_0 |
8rw | |
这些8位寄存器保持当作“特殊情况处理”的值,以加速某些常用JPEG VLCS的解码。dc_ssss-DC系数的大小是0。ac_eob-块的结束。ac_zrl-16个零的游程。 |
dc_zssss_1 |
8rw | |
ac_eob_0 |
8rw | |
ac_eob_1 |
8rw | |
ac_zrt_0ac_zrt_1 |
8rw | |
表A.14.3 其他视频分配器寄存器
寄存器名 |
大小/尺寸 |
复位状态 |
说明 |
buffer_size |
10rw | |
当用表示一个理想解码器所需VBV缓冲器的大小的值进行MPEG数据解码时,此寄存器被装载。在解码器芯片中不用此值,然而当配置编码数据缓冲器大小和确定是否解码器能解码特殊MPEG数据文件时,该寄存器保持的值对用户软件可能是有用的。 |
pel_aspect |
4rw | |
当用表示象素长宽比的值解码MPEG数据时,此寄存器被装载。这值是4位整数,作为对MPEG定定的表的指针。见MPEG标准对此表的定义。在解码器芯片中不用此值,但当配置显示或输出设备时,它的保持值对用户软件可能是用的。 |
bit_rate |
18rw | |
当用表示编码数据率的值解码MPEG数据时,这寄存器被装载。见MPEG标准对这值的定义。在解码器芯片中不用此值,当配置解码器起动寄存器时,它的保持值对用户软件可能有用。 |
pic_rate |
4rw | |
当用表示图象率的值解码MPEG数据时,这寄存器被装载。见MPEG标准对这值的定义。在解码器芯片中不用此值,但当配置显示和输出设置时,它的保持值对用户软件可能有用。 |
constrained |
1rw | |
当解码MPEG数据以指示是否解码数据满足MPEG的限制参量时,此寄存器被装载。见MPEG标准对此标记的定义。在解码器芯片中不用此值,但这值对用户软件决定是否解码器能解码特殊MPEG数据文件可能是有用的。 |
表A.14.4 其他视频分配器表寄存器(续)
表A.14.1 顶层视频分配器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
vbv_delay |
16rw | |
在解码起动前用表示最小启动延迟值解码MPEG数据时,此寄存器被装载。见为此值定义的MPEG标准。解码器芯片不用此值,但当配置解码器起动寄存器时,保持的此值可能对用户软件有用。 |
pic_number |
8rw | |
这寄存器为图象保持图象号,此图象是由视频多路分配器当前解码的。当该图象到达这里时,此号由起始码解码器产生。见A.11.2对图象号的说明。 |
dummy_lastpicture |
1rw |
0 |
这些寄存器在顶层也能看到。见表A.14.1 |
field_info |
1rw |
0 |
continue |
1rw |
0 |
rom_revision |
8rw | |
coding_standard |
2ro | |
此寄存器由CODING_STANDARD令牌装载,以配置视频多路分解器的工作方式。见A.21.1 |
restart_interval |
8rw | |
在解码开始前,当用指示最小start_up延时值,对JPEG数据解码时,此寄存器被加载。见MPEG标准对此值的定义。 |
表A.14.5 寄存器对令牌的交叉访问
寄存器 |
令牌 |
标准 |
注释 |
component_name_n |
COMPONENT_NAME |
JPEG |
在编码数据中 |
MPEG |
在标准中不用 |
H.261 |
horiz_pelsvertt_pels |
HORIZONTAL_SIZEVERTICAL_SIZE |
MPEG |
在编码数据中 |
JPEG |
H.261 |
自动从图象类型中得到 |
horiz_macroblocksvert_macroblocks |
HORIZONTAL_MBSVERTICAL_MBS |
MPEG |
控制软件自水平和垂直图象尺寸中得到 |
JPEG |
H.261 |
自动从图象类型中得到 |
max_hmax_v |
DEFINE_MAX_SAMPLING |
MPEG |
控制软件必须须配置,采样结构由标准固定 |
JPEG |
在编码数据中 |
H.251 |
自动地为4∶2∶0视频配置 |
max_component_ld |
MAX_COMP_ID |
MPEG |
控制软件必须配置。采样结构由标准确定 |
JPEG |
在编码数据中 |
H.261 |
对4∶2∶0视频自动配置 |
表A.14.5 寄存器对令牌的交叉访问(续)
寄存器 |
令牌 |
标准 |
注释 |
tq_0tq_1tq_2tq_3 |
JPEG_TABLE_SELECT |
JPEG |
在编码数据中 |
MPEG | 在标准中不用 |
H.216 |
blocks_h_0blocks_h_1blocks_h_2blocks_h_3blocks_v_0blocks_v_1blocks_v_2blocks_v_3 |
DEFINE_SAMPLING |
MPEG |
控制软件必须配置采样结构由标准确定 |
JPEG |
在编码数据中 |
H.261 |
对4∶2∶0视频自动配置 |
dc_huff_0dc_huff_1dc_huff_2dc_huff_3 |
在扫描头数据中 |
JPEG |
在编码数据中 |
MPEG_DCH_TABLE |
MPEG |
控制软件必须配置 |
|
H.261 |
在标准中不使用 |
ac_huff_0ac_huff_1ac_huff_2ac_huff_3 |
在扫描头数据中 |
JPEG |
在编码数据中 |
|
MPEG |
在标准中不使用 |
H.261 |
dc_bits_0[15:0]dc_bits_1[15:0]dc_huf fval_0[11:0]dc_huffval_1[11:0]dc_zssss_0dc_zssss_1 |
in DATA TokenfollwingDHT_MARKER Token |
JPEG |
在编码数据中 |
|
MPEG |
控制软件必须配置 |
H.261 |
在标准中不用 |
表A.14.5 寄存器对令牌的交叉访问(续)
寄存器 |
令牌 |
标准 |
注释 |
ac_bits_0[15:0]ac_bits_1[15:0]ac_huffval_0[161:0]ac_huf fval_1[161:1]ac_eob_0ac_eob-1ac_zrl-0ac_zrl_1 |
in DATA TokenfollowingDHT_MARKER Token |
JPEG |
在编码数据中 |
|
MPEG |
在标准中不用 |
H.261 |
buffer_size |
VBV_BUFFER_SIZE |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
pel_aspect |
PEL_ASPECT |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
bit_rate |
BIT_RATE |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
pic_rate |
PICTURE_RATE |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
constrained |
CONSTRAINED |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
表A.14.5 寄存器对令牌的交叉访问(续)
寄存器 |
令牌 |
标准 |
注释 |
| | | |
picture_type |
PICTURE_TYPE |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
broken_closed |
BROKEN_CLOSED |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
prediction_mode |
PREDICTION_MODE |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
h_261_pic_type |
PICTURE_TYPE(当标准是H.261时) |
MPEG |
无关在编码数据中 |
JPEG |
H.261 |
vbv_delay |
VBV_DELAY |
MPEG |
在编码数据中 |
JPEG |
在标准中不用 |
H.261 |
pic_number |
Carried by:PICTURE_START |
MPEG |
由起始码检测器产生 |
JPEG |
H.261 |
表A.14.5 寄存器对令牌的交叉访问(续)
寄存器 |
令牌 |
标准 |
注释 |
coding_standard |
CODING_STANDARD |
MPEG |
由控制软件检测器在起始码中设置的 |
JPEG |
H.261 |
A.14.2图象结构
在本发明中,图象维数被以两种不同单元向空间解码器说明:象素和宏块。JPEG和MPEG都使用象素进行图象维数的通信。以象素进行的维数通信确定包含有合法数据的缓冲器面积;这可能比缓冲器总体尺寸要小。以宏块进行的维数通信确定解码器所需的缓冲器大小。宏块维数必须由用户从象素维数得来。与这一信息相关的空间解码器寄存器为:horiz_pels,vert_pels,horiz_macroblocks和vert_macrobloks。
空间解码器寄存器blocks_h_n,blocks_v_n,max_h,max_v和max_component_id指示宏块的构成(JPEG中最小的编码单元)。每一个是一个2位寄存器,可以保存0到3范围内的值。除max_component_id以外所有的均指示一个1到4的块计数。例如,如果寄存器max_h取1,那么一个宏块为2个块宽。类似地,max_component_id指示所涉及的不同颜色成分的数目。
表A.14.6 各种宏块格式的配置
|
2∶1∶1 |
4∶2∶2 |
4∶2∶0 |
1∶1∶1 |
max_h |
1 |
1 |
1 |
0 |
max_v | 0 | 1 | 1 | 0 |
max_component_ld |
2 |
2 |
2 |
2 |
blocks_h_0 |
1 |
1 |
1 |
0 |
blocks_h_1 | 0 | 0 | 0 | 0 |
blocks_h_2 |
0 |
0 |
0 |
0 |
blocks_h_3 |
x |
x |
x |
x |
blocks_v_0 |
0 |
1 |
1 |
0 |
blocks_v_1 |
0 |
1 |
0 |
0 |
blocks_v_2 |
0 |
1 |
0 |
0 |
blocks_v_3 |
x |
x |
x |
x |
A.14.3 Huffman表
A.14.3.1 JPEG类型的Huffman表说明
本发明中,Huffman表说明被通过JPEG使用的格式提供给空间解码器以连通在编码器和解码器之间的表说明。每一表说明有两个元素:BITS和HUFFVAL。对于一个如何编码表的全面描述,用户可以参阅JPEG说明书。
A.14.3.1.1 BITS
BITS是一张数值表,说明对VLC的每一长度有多少不同符号被编码。每一入口是一8位值。JPEG允许VLC有16位长,故每张表内有16个入口。
BIT[0]说明存在多少不同的1位VLC,而BIT[1]说明存在多少不同的2位VLC,以此类推。
A.14.3.1.2 HUFFVAL
HUFFVAL是一张8位数据取值表,按VLC长度递增的顺序排列。这个表的大小将依据可被VLC编码的不同符号数目而定。
JPEG说明书对于Huffman编码表能被如何编码或解码为这种格式做了进一步详细说明。
A.14.3.1.3令牌的配置
在一JPEG位流中,DHT记号位于用于编码AC和DC系数的Huffman表说明之前。当起始码检测器识别出一个DHT记号时,它产生一个DHT_MARKER令牌并将Huffman表说明放入下一个DATA令牌中(见A.11.3.4)。
AC和DC系数Huffman表在空间解码器中的配置可以在空间解码器被为JPEG操作配置时通过向空间解码器的输入端提供DATA和DHT_MARKER令牌而被实现。这一手法可被用于MPEG操作所需的DC系数Huffman表,然而空间解码器的编码标准必须在当表被向下装载(downloaded)时被设置为JPEG。
表A.14.7 经过令牌对Huffman表配置
E 7 6 5 4 3 2 1 0 |
令牌名 |
1 0 0 0 1 0 1 0 1 |
CODING_STANDARD1=JPEG |
0 0 0 0 0 0 0 0 1 |
0 0 0 0 1 1 1 0 0 |
DHT_MARKER |
1 0 0 0 0 0 1 X X |
DATA |
表A.14.7 经过令牌对Huffman表配置(续)
E 7 6 5 4 3 2 1 0 |
令牌名 |
1 t t t t t t t t |
Th表示Huffman表被装载,JPEG允许4个表被上级装载。值0x00和0x01指定DC系数编码表0和1值0x10和0x11指定AC系数编码表0和1 |
这牌序中列被能说被明重复以允许n个表在一令 |
1 n n n n n n n n |
Li-携带BITS信息的16个字 |
|
1 n n n n n n n n |
1 n n n n n n n n |
Vii-携带HUFFVAL信息的字(字数取决于不同符号数)。e-若这是数据令牌结束扩展位将为0,若在同样DATA令牌中包含其它表说明则将为1。 |
|
e n n n n n n n n |
A.14.3.1.4 MPI进行配置
AC和DC系数Huffman表也可被通过MPI直接写给寄存器。见表A.14.3。
·寄存器dc_bits_0[15:0]和dc_bits_1[15:0]保存表0x00和0x01的BITS值。
·寄存器ac_bits_0[15:0]和ac_bits_1[15:0]保存表0x10和0x11的BITS值。
·寄存器dc_huffval_0[11:0]和dc_huffvla[11:0]保存表0x00和0x01的HUFFVAL值。
·寄存器ac_huffval_0[161:0]和ac_huffval_1[161:0]保存表0x10和0x11的HUFFVAL值。
A.144不同标准的配置
视频分配器支持MPEG,JPEG和H.261的需要。编码标准被起始码检测器产生的CODING_STANDRAD令牌自动配置。
A.14.4.1 H.261 Huffman表
解码H.261所需的所有Huffman表被保存在空间解码器内的ROM中,更确切地说,是在视频分配器的分析器(Parser)状态机器中,因此不需要用户的干涉。
A.14.4.2 H.261图象结构
H.261被定义为只支持两种图象格式:CIF和QCIF。被使用中的图象格式在位流的PTYPE部分用信号说明。当这个数据被空间解码器解码,它被置于h_261_pic_type寄存器和PICTURE_TYPE令牌中。此外,所有的图象和宏块结构寄存器被自动配置。
在各种寄存器内的信息也被放在它们的相关令牌中(见表A.14.5),而且这样保证了其它解码器芯片(如时间解码器)被正确配置。
A.14.4.3 MPEG Huffman表
解码MPEG所需的大部分Huffman编码表被保存在空间解码器中的ROM中(又是在分析器状态机器中),因此不需用户的干涉。解码内部宏块的DC系数所需的表是个例外。两个表被需要,一个为了色度,另一个为亮度。这些必须在解码开始之前由用户软件配置。
表A.14.8 对H.261的自动设定
宏块结构 |
CIF/OCIF | 图象结构 | CIF | OCIF |
max_h |
1 |
horiz_pels |
352 |
176 |
max_v |
1 |
vert_pels |
288 |
144 |
max_component_id |
2 |
horiz_macroblocks |
22 |
11 |
blocks_h_0 |
1 |
vert_macroblocks |
18 |
9 |
blocks_h_1 |
0 | | | |
blocks_h_2 |
0 | | | |
blocks_v_0 |
1 | | | |
blocks_v_1 |
0 | | | |
blocks_v_2 |
0 | | | |
表A.14.10显示了配置空间解码器内的DC系数Huffman表所需的令牌序列。作为选择,相同的结果也可通过将此信息经MPI写给寄存器而获得。
寄存器dc_huff_n控制对每一颜色成分使用哪一DC系数Huffman表。表A.14.9显示了它们应当如何为MPEG操作而配置。这可以通过MPI直接完成或通过使用MPEG_DCH_TABLE令牌完成。
表A.14.9 由MPI对MPEG DC Huffman表选择
dc_huff_0 |
0 |
dc_huff_1 |
1 |
dc_huff_2 |
1 |
dc_huff_3 |
x |
表A.14.10 MPEG DC Huffman表配置
E [7:0] |
令牌名 |
1 0x15 |
CODING_STANDARD1=JPEG |
0 0x01 |
0 0x1C |
DH_MARKER |
1 0x04 |
DATA(可以是任何彩色分量,本例中用0) |
1 0x00 |
0指示此Huffman表是DC系数编码表0 |
表14.10 MPEG DC Huffman表配置(续)
E |
[7:0] |
令牌名 |
1 |
0x00 |
携带多位信息的16字,共对9个不同VLC进行说明2,2位码3,3位码1,4位码1,5位码1,6位码1,7位码如果由MPI配置而不是用令牌配置,这些值将被写到dc_bits_0[15:0]寄存器中 |
1 |
0x02 |
1 |
0x03 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x00 |
1 |
0x00 |
表14.10 MPEG DC Huffman表配置(续)
E |
[7:0] |
令牌名 |
1 |
0x00 | |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x01 |
携带HUFFVAL信息的9个字。如果由MPI配置而不是用令牌配置,这些值将被写到dc_huffval_0[11:0]寄存器中 |
1 |
0x02 |
1 |
0x00 |
1 |
0x03 |
1 |
0x04 |
1 |
0x05 |
1 |
0x06 |
1 |
0x07 |
0 |
0x08 |
表14.10 MPEG DC Huffman表配置(续)
E |
[7:0] |
令牌名 |
0 |
0x1C |
DHT_MARKER |
1 |
0x04 |
DATA(可是任何彩色分量,在本例中用0) |
1 |
0x01 |
1表示此Huffman表是DC系数编码表1 |
1 |
0x00 |
携带位信息的16个字,共对9个不同VLC进行说明3,2位码1,3位码1,4位码1,5位码1,6位码1,7位码1,8位码如果由MPI配置而不是用令牌配置,这些值将被写到dc_bits_1[15:0]寄存器中 |
1 |
0x03 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x01 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
表14.10 MPEG DC Huffman表配置(续)
E |
[7:0] |
令牌名 |
1 |
0x00 | |
1 |
0x00 |
1 |
0x00 |
1 |
0x00 |
携带HUFFVAL信息的9个字。如果由MPI配置而不是用令牌配置,这些值将被写到dc_huffval_0[11:0]寄存器中 |
1 |
0x01 |
1 |
0x02 |
1 |
0x03 |
1 |
0x04 |
1 |
0x05 |
1 |
0x06 |
1 |
0x07 |
0 |
0x08 |
1 |
0xD4 |
MPEG_DCH_TABLE配置成分量0使用表0 |
0 |
0x00 |
表14.10 MPEG DC Huffman表配置(续)
E | [7:0] | 令牌名 |
1 |
0xD5 |
MPEG_DCH_TABLE配置分量1使用表1 |
0 |
0x01 |
1 |
0xD6 |
MPEG_DCH_TABLE配置分量2使用表1 |
0 |
0x01 |
1 |
0x15 |
CODING_STANDARD2=JPEG |
0 |
0x02 |
A.14.4.4 MPEG图象结构
为MPEG定义的宏块结构与H.261所使用的相同。图象的维数被编码于编码数据内。
对标准4∶2∶0操作,宏块特性应当如表A.14.8中指示的那样被配置。这可以通过如指示地那样写寄存器或将相同的令牌(见表A.14.5)提供给空间解码器的输入端而完成。
配置图象维数的方法令牌将依应用而定。如果图象格式在解码开始之前已经知道,那么列于表A.14.8中的图象结构寄存器可以被适当的值初始化。作为选择,图象维数可以从编码数据中被解码并配置空间解码器。在此情况下,用户必须修理分析器错误ERR_MPEG_SEQUENCE,见A.14.8“在MPEG序列层的变化”。
A.14.4.5 JPEG
在基线JPEG中,有大量的编码选择,它们显著改变操作解码器所需的控制软件的复杂程度。通常,空间解码器被设计为在下列条件被满足时所需的支持最小:
·每一帧的颜色成分数目小于5(Nf≤4)
A.14.4.6 JPEG Huffman表
进一步,JPEG允许Huffman编码表被向下装载给解码器。当解码说明系数的VLC时这些表被使用。每一扫描允许两个表解码DC系数,2个表解码AC系数。
JPEG文件有三种不同类型:互换格式,为压缩图象数据的缩略格式和为表数据的缩略格式。在一互换格式文件中既有压缩图象数据也有解码图象数据所需的所有表(Huffman,量化等)的定义。缩略图象数据格式文件省略了表的定义。缩略表格式文件只包含表的定义。
空间解码器将接受所有的三种格式。然而,缩略图象数据文件只在所有所需的表都已被定义的情况下才能被解码。这个定义可以通过另两种JPEG文件类型的任一种而被完成,或者,表可以被用户软件设置。
如果每次扫描使用一套不同的Huffman表,那么表的定义在每次扫描之前被放入(由编码器)编码数据中。这些被空间解码器自动装载以在这一个或任何后续扫描中被使用。
为提高Huffman解码的性能,某些经常使用的符号被特别装入。它们是:数值为0的DC系数,块AC系数的结尾和16个零AC系数的管理。这些特殊场合的值应被写入适当的寄存器。
A.14.4.6.1表的选择
寄存器dc_huff_n和ac_huff_n控制着对何种颜色成分使用哪个AC或DC系数Huffman表。在JPEG操作中,这些关系由扫描头标语法的TDj和Taj字段定义。
A.14.4.7 JPEG图象结构
存在着两种显著的由空间解码器支持的基线JPEG解码级别:每帧小于等于四种成分(Nf≤4)和每帧大于四种成分(Nf>4)。如果使用(Nf>4),控制软件需要变得更复杂。
A.14.4.7.1 Nf≤4
包含于JPEG帧标题内的帧分量规格参数在它们被解码时配置宏块结构寄存器(见表A.14.8)。不需要用户干预,解码4种不同颜色成分所需的所有说明都如定义。
为获JPEG提供的选择的更多详情,读者应学习JPEG说明书。同时,在A.16.1中的JPEG图象格式中也有简短说明。
A.14.4.7.2具有四种以上成分的JPEG
空间解码器可以解码具有多达256种不同彩色分量(JPEG所允许的最大值)的JPEG文件。然而,如果要解码4种以上分量,附加的用户干预是需要的。JPEG在任何扫描中最多只允许四种分量。
A.14.4.8非标准变型
如上所述,空间解码器支持某些超出JPEG和MPEG所定义的图象格式范围。
JPEG限制最小编码单元,因此它们每次扫描包括的块不超过10个。这一限制不适用于空间解码器,因为它可以通过blocks_h_n,blocks_v_n,max_h和max_v说明能处理的任何的最小编码单元。
MPEG只是为4∶2∶0的宏块(见表A.14.8)作定义。然而,空间解码器可以处理三种其它成分宏块结构(例如4∶2∶2)。
A.14.5视频事件和错误
视频分配器可以产生两类事件:分析器事件和Huffman事件。关于如何处理事件和中断的描述,参见A.6.3“中断”。
A.14.5.1 Huffman事件
Huffman事件由huffman解码器产生。由huffman event和huff-man_mask指示的事件判断是否产生了一个中断。如果huffman_mask被设置为1,一个中断将被产生,且Huffamn解码器将停止。寄存器huffman_errov_code[2:0]将保存一个指示事件原因的值。
如果在中断服务之后1被写给huffman_event,Huffman解码器将试图从错误中恢复。同样,如果huffman_mask被设置为0。(中断屏蔽且不停止Huffman解码器),Huffman解码器将试图从错误自动恢复。
A.14.5.2分析器事件(Parser events)
分析器事件由分析器产生。事件由Parser_event指示。此后parser_mask判断是否一个中断被产生。如果parser_mask被设置为1,一个中断将被产生且分析器将停止。寄存器parser_error_code[7:0]将保存一个指示事件原因的值。
如果在中断服务之后1被写入huffman_event,Huffman解码器将试图从错误恢复。同样,如果huffman_mask被设置为0,(中断屏蔽且不停止Huffman解码器),Huffman解码器将试图从错误中自动恢复。
如果在中断服务后1被写入parser_event,分析器将再次开始运行。如果事件指示一个位流错误,视频分配器将试图从错误中恢复。
如果分析器被设置为0,分析器将设置其事件位,但是不会产生一个中断或停止。它将继续操作并试图从错误自动恢复。
表A.14.11 Huffman错误码
huffman_eror_code |
说明 |
[2] [1] [0] | |
0 0 0 |
无错误,在正常操作期间不发生此错误 |
x 0 1 |
在VLC的16位中找不到终止码 |
x 1 0 |
当希望令牌时找到串行数据 |
x 1 1 |
当希望串行数据时找到令牌 |
1 x x |
已解码的信息说明单个块中的系数多于64个,这表示位流错。由视频分配器输出的块,仅包含64个系数。 |
表A.14.12 Parser错误码
parser_errorcode[7:0] |
说明 |
0x00 |
ERR_NO_ERROR,这事件在正常情况下不发生 |
0x10 |
ERR_EXTENSION_TOKENEXTENSION_DATA令牌已被Parser检测出来。本令牌的检测应当优先处理包括扩展数据的DATA令牌见A.14.6 |
0x11 |
ERR_EXTENSION_DATA紧跟着EXTENSION_DATA令牌的检测,一个包括扩展数据的数据令牌已被检测,见A.14.6 |
表A.14.12 Parser错误码(续)
parser_errorcode[7:0] |
说明 |
0x12 |
ERR_USER_TOKENUSER_DATA令牌已被Parser检测出来,本令牌的检测应当优先处理包括用户数据的数据令牌(见A.14.6) |
0x13 |
ERR_USER_DATA下面是USER_DATA令牌的检测,包括用户数据的数据令牌已经检测过,见A.14.6 |
0x20 |
ERR_PSPAREH.261 PSARE信息已被检测,见A.14.7 |
0x21 |
ERR_GSPAREH.261 GSARE信息已被检测,见A.14.7 |
0x22 |
ERR_PTYPEH.261图象类型的值已经改变,寄存器h_261_pic_type可被检查,以查新的值是什么 |
0x30 |
ERR_JPEG_FRAME |
0x31 |
ERR_JPEG_FRAME_LAST |
0x32 |
ERR_JPEG_SCAN图象大小或号改变 |
0x33 |
ERR_JPEG_SCAN_COMP分量改变 |
0x34 |
ERR_DNL_MARKER |
表A.14.12 Parser错误码(续)
parser_errorcode[7:0] |
说明 |
0x40 |
ERR_MPEG_SEQUENCE在MPEG序列层中传递参数中一个已改变,见A.14.8 |
0x41 |
ERR_EZTRA_PICTUREMPEG extra_information_picture已经被检测,见A.14.7 |
0x42 |
ERR_EZTRA_SLICEMPEG extra_information_slice已经被检测,见A.14.7 |
0x43 |
ERR_VBV_DELAY在新的MPEG视频序列中第一图象的VSV_DELAY参数已通过视频分配器检测出来,新的延迟值可以在寄存器vbv_delay中得到新序列的第一个图象被定义为序列结束后的第一个图象,FLUSH或复位 |
0x80 |
ERR_SHORT_TOKEN一个错误格式令牌已经检测出,这错误在正常工作中不发生 |
0x90 |
ERR_H261_PIC_END_UNEXPECTED在H.261工作期间,在不希望地方遇到图象结束信号,这很可能表示有一错误在编码数据中 |
0x91 |
ERR_GN_BACKUP在H.261工作期间,块组已同比希望值小的一组数相遇,这很可能表示有一错误在编码数据中 |
表A.14.12 Parser错误码(续)
parser erforcode[7:0] |
说明 |
0x92 |
ERR_GN_SKIP_GOB在H.261工作期间,块组已同比希望值大的一组数相遇,这很可能表示有一错误在编码数据中 |
0xA0 |
ERR_NBSE_TAB在JPEG工作期间,试图加载一个Huffman表,这表不被基线JPEG支持(基线JPEG仅支持熵编码的表0和1) |
0xA1 |
ERR_QUANT_PRECISION在JPEG工作期间试图加载一个量化表,这表不被基线JPEG支持(基线JPEG仅支持量化表中8位预测) |
0xA2 |
ERR_SAMPLE_PRECISION在JPEG工作期间,试图指定一采样精度,它大于基线JPEG,支持的精度(基线JPEG仅支持8位精度) |
0xA3 |
ERR_NBASE_SCANJPEG扫描头标参数Ss,Se,Ah和Aj的一个或多个被设置一个值,它不被基线JPEG支持(表示特殊选择和/或在基线JPEG中不被支持的连续近似值) |
0xA4 |
ERR_UNEXPECTED_DNL在JPEG工作期间一个DNL标记已在一次扫描中,但不是一帧的第一次扫描时遇到 |
0xA5 |
ERR_EOS_UNEXPECTED在JPEG工作期间,一个EOS标记已在不希望地方遇到 |
表A.14.12 Parser错误码(续)
parser_errorcode[7:0] |
说明 |
0xA6 |
ERR_RESTART_SKIP在JPEG工作期间,一个再起动标记已在不希望位置被遇到或一个再起动标记的值是不希望的。若一再启动标记当希望找到时没有被找到,Huffman事件“当希望令牌时找到串数据”将被产生 |
0xB0 |
ERR_SKIP_INTRA在MPEG工作期间,一个具有宏块地址增量大于1的宏块已经在intra(I)图象中发现。这是非法的且可能表示位流错误 |
0xB1 |
ERR_SKIP_DINTRA在MPEG工作期间,一个具有宏块地址增量大于1的宏块已经只在DC(D)图象中找着。这是非法的,可能表示一个位流错误 |
GxB2 |
ERR_BAD_MARKER在MPEG工作期间,标记位没有希望的值。这可能表示位流错误 |
0xB3 |
ERR_D_MBTYPE在MPEG工作期间,仅在DC(D)图象中,一个除1外的宏块类型的宏块被发现。这是非法的,可能表示一位流错误 |
0xB4 |
ERR_D_MBEND在MPEG工作期间,仅在DC(D)图象中,一个宏块结尾为0的宏块被发现,这是非法的,可能表示一位流错误 |
表A.14.12 Parser错误码(续)
parser_errorcode[7:0] |
说明 |
0xB5 |
ERR_SVP_BACKUP在MPEG工作期间,一个片的垂直位置小于希望值的片已遇到,很可能表示在编码数据中一错误 |
0xB6 |
ERR_SVP_SKIP_ROWS在MPEG工作期间,一个片的垂直位置大于希望值的片已经遇到。很可能表示在编码数据中的一错误 |
0xB7 |
ERR_FST_MBA_BACKUP在MPEG工作期间,一宏块地址小于所希望值的宏块已被遇到。很可能表示在编码数据中一错误 |
0xB8 |
ERR_FST_MBA_SKIP在MPEG工作期间,一宏块已经遇到一宏块地址大于所希望地址。这很可能表示在编码数据中一个错误 |
0xB9 |
ERR_PICTURE_END_UNEXPECTED在MPEG工作期间,一个PICTURE_END令牌已在不希望地方遇到,这很可能表示在编码数据中一个错误 |
0xE0...0xEF |
错误为内部测试程序保留 |
0xE0 |
ERR_TST_PROGRAM在测度程序中难解地达到 |
0xE1 |
ERR_NO_PROGRAM如果测试程序不包括在其中 |
表A.14.12 Parser错误码(续)
parser_errorcode[7:0] |
说明 |
0xE2 |
ERR_TST_END测试结束 |
0xF0...0xFF |
保留错误 |
0xF0 |
ERR_UCODE_ADDR严重错误 |
0xF1 |
ERR_NOT_INPLEMENTED |
每种标准使用定义的分析器错误码的一个不同子集。
表A.14.13 分析器错误码及不同标准
令牌名 |
MPEG |
JPEG |
H.261 |
ERR_NO_ERROR |
/ |
/ |
/ |
ERR_EXTENSION_TOKEN |
/ |
/ | |
ERR_EXTENSION_DATA |
/ |
/ | |
ERR_USER_TOKEN |
/ |
/ | |
ERR_USER_DATA |
/ |
/ | |
ERR_PSPARE | | |
/ |
ERR_GSPARE | | |
/ |
ERR_PTYPE | | |
/ |
ERR_JPEG_FRAME | |
/ | |
ERR_JPEG_FRAME_LAST | |
/ | |
ERR_JPEG_SCAN | |
/ | |
表A.14.13 分析器错误码及不同标准(续)
令牌名 |
MPEG |
JPEG |
H251 |
ERR_JPEG_SCAN_COMP | |
/ | |
ERR_DNL_MARKER | |
/ | |
ERR_MPEG_SEOUENCE |
/ | | |
ERR_EXTRA_PICTURE |
/ | | |
ERR_EXTRA_SLICE |
/ | | |
ERR_VBV_DELAY |
/ | | |
ERR_SHORT_TOKEN |
/ |
/ |
/ |
ERR_H251_PIC_END_UNEXPECTED | | |
/ |
ERR_GN_BACKUP | | |
/ |
ERR_GN_SKIP_GOB | | |
/ |
ERR_NBASE_TAB | |
/ | |
ERR_OUANT_PRECISION | |
/ | |
ERR_SAMPLE_PRECISION | |
/ | |
ERR_NBASE_SCAN | |
/ | |
ERR_UNEXPECTED_DNL | |
/ | |
ERR_EOS_UNEXPECTED | |
/ | |
ERR_RESTART_SKIP | |
/ | |
ERR_SKIP_INTRA |
/ | | |
ERR_SKIP_DINTRA |
/ | | |
ERR_BAD_MARKER |
/ | | |
ERR_O_MBTYPE |
/ | | |
ERR_D_MBENO |
/ | | |
ERR_SVP_BACKUP |
/ | | |
ERR_SVP_SKIP_ROWS |
/ | | |
ERR_FST_MBA_BACKUP |
/ | | |
ERR_FST_MBA_SKIP |
/ | | |
ERR_PICTURE_END_UNEXPECTED |
/ | | |
ERR_TST_PROGRAM |
/ |
/ |
/ |
ERR_NO_PROGRAM |
/ |
/ |
/ |
ERR_TST_END |
/ |
/ |
/ |
ERR_UCODE_AOOR |
/ |
/ |
/ |
ERR_NOT_IMPLEMENTED |
/ |
/ |
/ |
A.14.6接收用户和扩展数据
MPEG和JPEG使用类似手法以存放用户和扩展数据。数据前面有一起始/记号码。如果应用这类数据不感兴趣,起始码检测器将删除这个数据(见A.11.3.3)。
A.14.6.1识别数据来源
分析器事件,ERR_EXTENSION_TOKEN和ERR_USER_TOKEN在视频分配器指示EXTENSION_DATA或USER_DATA令牌的到达。如果这些令牌已经被起始码检测器产生(见A.11.3.3),它们将携带起始/记号码的值使起始码检测器产生令牌(见表A.11.4)。这个值可以在分析器中断服务时通过读rom_revision寄存器读出。视频分配器将保持停止直到1被写入parser_evetn(见A.6.3“中断”)。
A.14.6.2读数据
EXTENSION_DATA和USER_DATA令牌后面应当紧紧跟随一个携带扩展或用户数据的DATA令牌。这个DATA令牌到达视频分配器将产生一个ERR_EXTENSION_DATA或一个ERR_USER_DATA语法分析器事件。DATA令牌的第一字节可以在中断服务时通过读rom_revision寄存器而被读。
当事件被清除后,视频分配器寄存器的状态“continue”决定着状态。如果这个寄存器保存0值,那么DATA令牌中任何剩余数据都可被视频分配器消除且不产生任何事件。如果continue被设置为1,扩展或用户数据的每一字节到达视频解码器时都会有一个事件被产生。这将继续直到DATA令牌被消耗或continue被设置为0。注意:
1)扩展/用户数据的第一字节总是通过rom_revision寄存器被表达而不管continue的状态。
2)不存在指示扩展/用户数据的最后一个字节已被读的事件。
A.14.7接收外部信息
H.261和MPEG允许扩大编码标准的信息被装入图象和块组(H.261)或片(MPEG)中。其手法不同于对扩展和用户数据所使用的(在A.14.6部分中有说明)。在数据前面没有起始码,因此,它不能被起始码检测器删除。
在H.261操作中,分析器事件ERR_PSPARE和ERR_GSPARE指示检测到此信息。在MPEG中的相应事件是ERR_EXTRA_PICTURE和ERR_EXTRA_SLICE。
当分析器事件被产生,附加信息的第一字节被通过寄存器rom_revision被呈现。
视频分配器寄存器continue判断事件被清除后的行为。如果这个寄存器取值为0,那么任何剩余的附加信息都将被视频译码器消除而不会有事件产生。如果继续被设置为1,附加信息的每一字节到达视频分配器时都会有一个事件被产生。这将持续到附加信息被用完或continue被设置为0。
注意:
1)无论continue的状态如何,扩展/用户数据的第一字节总是通过rom_revision寄存器显现。
2)不存在指示扩展/用户数据的最后一字节已经被读的事件。
A.14.7.1 FIELD_INFO令牌的产生
在MPEG操作中,如果寄存器field_info被设置为1,任何extra_information_picture的第一字节被放于FIELD_INFO令牌中。这一行为不被MPEG的标准化活动所包括。表A.3.2显示了FIELD_INFO令牌的定义。
如果FIELD_INFO被设置为1,对extra_information_picture的第一字节不会有分析器事件被产生。然而,对于extra_infor-mation_picture的任何后续字节会有事件产生。如果extra_infor-mation_picture只有一个单一字节,不会有分析器事件产生。
A.14.8 MPEG序列层的变化
MPEG序列标题描述了将要被解码的视频的如下特性:
·水平和垂直尺寸
·象素宽高比
·图象率
·编码数据率
·视频缓冲器检验器缓冲大小
如果当空间解码器解码一个序列标题时这些参数中的任何一个有变化,分析器ERR_MPEG_SEQUENCE将被产生。
A.14.8.1图象大小的改变
如果图象大小有所变化,用户软件应当读horiz_pels和vert_pels的值,并且计算将被装入寄存器horiz_macroblocks和vevt_macroblocks的新值。
A.15空间解码
相应于本发明,空间解码发生于令牌缓冲器的输出和空间解码器的输出之间。有三种负责空间解码的主要单元:逆向模式化器,逆向量化器和逆向离散余弦变换器。在进入这部分(从令牌缓冲器)输入端,DATA令牌包含一个游程和级表示的量化系数。在输出端(逆向DCT的),DATA令牌8×8块象素信息。
A.15.1逆向模式化器(The Inverse Modeler)
令牌缓冲器内的DATA令牌包含关于量化系数的值和被代表的系数中0的数目的信息。逆向模式化器关于0的游程扩展信息,以使每个DATA令牌包含64个值。在这点上,DATA令牌中的值是量化系数。
无论当前使用的编码标准是什么,逆向模式化器处理都是相同的,不需要进行配置。
为了更好地理解模式化和逆向模式功能所有需要,读者可以查看任何一种图象编码标准。
A.15.2逆向量化器
在一编码器中,量化器除DCT的输出以降低DCT系数的分辨率。在一解码器中,逆向量化器的功能是乘这些量化的DCT系数以恢复它们近似的原始值。
A.15.2.1标准量化方案综述
每种不同编码标准使用的量化方案有显著不同。为获得对于每种标准所使用的量化方案的详细了解,读者可研究相关编码标准文件。
寄存器iq_coding_standard配置逆向量化器的操作以满足不同标准的需要。在一般操作中,这个寄存器被CODING_STANDARD令牌自动装载。要获得关于编码标准配置的更多信息,参见A.21.1部分。
量化方案之间的主要差异在于量化系数要被乘以的数字的来源。这些在下面被概述。在所需的代数运算上(舍入等)也有细微差异,此处不做说明。
A.15.2.1.1 H.261 IQ总述
在H.261中,一个单一“标度因子”被用于标度系数。编码器可以周期性改变此标度因子以调整产生的数据率。在内部编码块中略有不同的规则被施加于“DC”系数。
A.15.2.1.2 JPEG IQ总述
基线JPEG允许一幅图象在每次扫描中包含多达4种不同的颜色成分。对这4种颜色分成的每一种可以指定一个64入口的量化表。这些表的每一个入口被用作64个量化系数中一个的“标度”因子。
JPEG量化表的值被包括于编码JPEG数据中并将被自动装入量化表。
A.15.2.1.3 MPEG IQ总述
MPEG使用H.261和JPEG量化技术。象JPEG那样,MPEG可以使用4个量化表,每一量化表有64个入口。然而,表的使用截然不同。
考虑两“类”数据:内部和非内部数据。每种数据类型使用一个不同的表。两个缺省表被MPEG定义。一个用于内部数据而另一个用于非内部数据(见表A.15.2和表A.15.3)。这些缺省表必须在MPEG解码成为可能之前被写入空间解码器的量化表存贮器。
MPEG还允许两个“向下装载”量化表。一个是为了内部数据,另一个是为了非内部数据。这些表的值被包含于MPEG数据流中并将被自动装载入量化表存贮器中。
从表中输出的值被标度因子修正。
A.15.2.2逆向量化器寄存器
表A.15.1 逆相量化器寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
iq_access |
1rw |
0 |
此存取位停止逆向量化器的工作,所以它的各种寄存器能被可靠存取 |
iq_coding_standard |
2rw |
0 |
被逆相量化器用的编码标准由此寄存器设置此寄存器直接加载或使用CODING_STANDARD令牌。(见A.21.1) |
iq_keyhole_address |
8rw |
x |
键孔存取其中的4个量化表,见A.5.4.3为通过键孔存取寄存器的更多信息,见A.5.4.3 |
iq_keyhole_data |
8rw |
x |
在本发明中,iq_acces寄存器必须在量化表存贮器被存取之前被设置。如果当iq_access被设置为0时试图读量化表存贮器,它将返回零值。
A.15.2.3配置逆向量化器
在一般操作中,不需配置逆向量化器的编码标准,因为它将被CODING_STANDARD令牌自动配置。
对H.261操作,量化表不被使用。不需要任何特殊配置。对JPEG操作,逆向量化器需要的表应当和从编码数据中抽取的信息一起被自动装载。
MPEG操作需要装载缺x量化表。这应当在iq_access被设置为1时完成。表A.15.2中的值应当被写入逆向量化器的扩展地址空间的0x00到0x3F位置(可通过键孔寄存器iq_keyhole_address和iq_keyhole_data存取)。类似地,表A.15.3中的值应当被写入逆向量化器的扩展地址空间的0x40到0x7F的位置。
表A.15.2 对基编码块的缺省MPEG表
i | wi.0 | i | wi.0 | i | wi.0 | i | wi.0 |
0123456789101112131415 | 8161619161922222222222226242627 | 16171819202122232425262728293031 | 27272526262527272729292934343429 | 32333435363738394041424344454647 | 29292727292932323434373837353534 | 48495051525354555657585960616263 | 35383840404048484646565658696983 |
a相对于量化表存储器的起始偏移
b量化表值
表A.15.3 对非基编码块的缺省MPEG表
i | wi.1 | i | wi.1 | i | wi.1 | i | wi.1 |
0123456789101112131415 |
16161616161616161616161616161616 |
16171819202122232425262728293031 |
16161515161616161616161616161616 |
32333435363738394041424344454647 |
15151515151516161515161616151615 |
48495051525354555657585960616263 |
16161616161616161616161616161616 |
A.15.2.4令牌配置表
作为通过MPI配置逆向量化表的一种替代,它们也可由令牌初始化。这些令牌通过编码数据端口或MPI被提供。
QUANT_TABLE令牌在表A.3.2中说明。它有一个两位字段比,指明4张(0到3)表位置中的哪一个被令牌定义。对MPEG操作,表0和1的缺省定义需要被装载。
A.15.2.5量化表值
对于JPEG和MPEGA,量化表入口都是8位数。255到1的值是合法的。0值不合法。
A.15.2.6量化表的数字顺序
量化表值以“Z型(zlg-zag)”扫描顺序(见编码标准)被使用。表应当被看成一个64个值的一维排列(而不是8×8矩阵)。表在相应于低频率DCT系数的低地址进入。
当量化表值由QUANT_TABLE令牌携带时,令牌标题后的第一个值是“DC”系数的表入口。
A.15.2.7逆向量化器检测寄存器
表A.15.4 向量化测试寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
iq_quant_scale |
5rw | |
这寄存器保持量化比例因子的当前值,它由QUANT_SCALE令牌装载,在JPEG作期间这是不使用的。 |
iq_component |
2rw | |
这寄存器保持从最近数据令牌头取的2位分量ID。这值被包括在量化表的选择中。该寄存器亦将在QUANT_TABLE令牌到达以后保持这表ID以装载此表。 |
iq_prediction_mode |
2rw | |
这保持最近PREDICTION_MODE令牌的2个最低有效位。 |
iq_jpeg_indirection |
8rw | |
此寄存器使DATA令牌的二位分量ID号同应该被使用的量化表的表号有关。位1:0指定将被分量0使用的表号。位3:2指定将被分量1使用的表号。位5:4指定将被分量2使用的表号。位7:6指定将被分量3使用的表号。这寄存器由JPEG_TABLE_SECE--CL令牌装载。 |
表A.15.4 反向量化测试寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
iq_mpeg_indrection |
2rw | |
这两位寄存器记录是否用缺省值或通过内部或非内部数据由上级装载量化表。一个0在bit位置上表示缺省表应该被使用,一个1表示由上级装载表应该被使用。位0涉及内部数据,位1涉及非内部数据,寄存器通常由令牌MPEG_TABLE_SELECT装载。 |
A.15.3逆向离散余弦变换
本发明中的逆向离散变换处理器符合CCITT推荐H.261,IEEE说明书P1180的要求,并符合当前MPEG修改草案中描述的要求。
无论使用何处编码标准,逆向离散余弦变换处理器是相同的。不需用户进行配置。
有两个事件与逆向离散变换处理器有关。
表A.15.5 反相DCT事件寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
ldct_too_few_event |
1rw |
0 |
反向DCT要求所有DATA令牌包括准确的64个值。若发现小于64个值,那产生事件太少,如果屏蔽寄存器被设置为1那么产生中断,反向DCT将停止。此事件应仅发生在紧跟在编码数据中错误。 |
idct_too_few_mask |
1rw |
0 |
表A.15.5 反相DCT事件寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
idct_too_many_event |
1rw |
0 |
反向DCT要求所有DATA令牌包括准确的64个值。若发现大于64个值,那么产生事件太多,若屏蔽寄存器被设置为1,那么能产生中断,反向DCT停止。此事件应仅发生在紧跟在编码数据中错误。 |
idct_too_many_mask |
1rw |
0 |
为更好地理解DCT和逆向DCT功能,读者可以查看任何图象编码标准。
A.16连接空间解码器的输出端
空间解码器的输出端是一个具有9位宽数据字的标准令牌端口。欲知接口电性能的更多信息,参见A.4部分。
输出端显示的令牌将依赖于使用的编码标准。例如,公布的这一部分是为JPEG操作配置时考虑空间解码器的输出的。这一部分还描述了JPEG操作时在时间解码器的输出端观察到的令牌序列,因为时间解码器不改变从解码JPEG得来的令牌序列。
然而,MPEG和H.261都需要时间解码器的使用。欲知关于在为MPEG和H.261操作而配置时的时间解码器的输出端连结的信息,参见A.19部分。
此外,此部分确定在空间解码器的输出端可获得哪个令牌,以及哪个令牌在设计电路以显示输出时最有用。其它令牌也出现,但不需用于显示输出,因此在此不作讨论。
这部分主要显示:
·如何识别序列的开始和结束。
·如何识别图象的开始和结束。
·如何确定何时显示图象。
如何确定图象数据应被放入显示的何处。
A.16.1 JPEG图象的结构
这部分提供了JPEG体系的某些特征的总述。欲知全部细节,请参见编码标准。
JPEG为编码单个图象提供了多种手法。JPEG并不试图说明如何一起编码大量图象以提供编码视频的一种手法。
按照于本发明,空间解码器支持JPEG的基线连续(baselinesequential)操作方式。体系中有三个主要级别:图象,帧和扫描。一幅连续图象只包括一单一帧。一帧可以包括1到256种不同的图象(颜色)分量。这些图象分量可以用多种方式被分组成为扫描。每一扫描可以包括1到4种图象分量(见图81,“JPEG基线连续结构总述”)。
如果一扫描包含一单一图象分量,它是非隔行的;如果它包含超过一种图象分量,它是一隔行扫描。一帧可以包括隔行和非隔行扫描的混合。一帧可以包括的扫描数由一帧可包括的图象分量数的256限制而决定。
在隔行扫描中,数据被组织成最小的编码单元(MCU),这些编码单元与MPEG和H.261中使用的宏块相似。这些MCU在一幅图象中按光栅排列。在一非隔行扫描中,MCU是一单一8×8块。这些同样也是光栅排列的。
空间解码器能够轻易解码包含1到4种不同颜色成分的JPEG数据。描述更多成分量数的信息也可被解码。然而,为适应下一组将要被解码的分量,可将需要扫描之间的某些重新配置。
A.16.2令牌序列
JPEG标记码被起始码检测器转换成一个相似的MPEG命名的令牌(见表A.11.4,见图82“令牌化JPEG图象”)。
A.17时间解码器
·30MHz操作
·为MPEG和H.261视频解码器提供时间解码
·H.261 CIF和QCIF格式
·MPEG视频分辨率达740×480,30Hz,4∶2∶0
·灵活的色度采样格式
·能够重排MPEG图象序列
·Glue_Less DRAM接口
·单一正5伏电源
·208引脚PQFP封装
·最大耗电2.5W
·使用标准页式DRAM
时间解码器是空间解码器的一个成对芯片。它提供H.261和MPEG所需的时间解码。
时间解码器完成MPEG和H.261所需的所有预测形成特性。借助于一个单一4Mb DRAM(例如,512 k×8),时间解码器可以解码CIF和QCIF H.261视频。借助于8Mb DRAM(例如,2256 k×16),740×480,30Hz,4∶2∶0 MPEG视频可被解码。
对于内部编码方案(如JPEG)不需要时间解码器。如果时间解码器包括在一多标准解码器内,它将使被解码的JPEG图象通过其输出。注意:上述值仅是举例作为本发明一种实施方案的说明,不需要以此为限制。不偏离本发明而使用其它的数值和范围也将是被欣赏的。
A.17.1时间解码器信号
表A.17.1 时间解码器信号
信号名 |
I/O |
引脚号 |
说明 |
in_data[8:0] |
I |
173,172,171,169,168,167,166,164,163 |
输入端口,这是一标准双线接口,正常时连到空间解码器输出端口。见A.4和A.18.1 |
in_extn |
I |
174 |
in_valid |
I |
162 |
in_accept |
O |
161 |
enable[1:0] |
I |
126,127 |
微处理器接口(MPI)。见A.6.1页59 |
rw |
I |
125 |
addr[7:0] |
I |
137,136,135,133,132,131,130,128 |
data[7:0] |
O |
152,151,149,147,145,143,141,140 |
irq |
O |
154 |
表A.17.1 时间解码器信号(续)
信号名 |
I/O |
引脚号 |
说明 |
DRAM_data[31:0] |
I/O |
15,17,19,20,22,25,27,30,31,33,35,38,39,42,44,47,49,57,59,61,63,66,68,70,72,74,76,79,81,83,84,85, |
DRAM接口。见A.5.2 |
DRAM_addr[10:0] |
O |
184,186,188,189,192,193,195,197,199,200,203 |
RAS |
O |
11 |
CAS[3:0] |
O |
2,4,6,8 |
WE |
O |
12 |
OE |
O |
204 |
DRAM_enable |
I |
112 |
out_data[7:0] |
O |
89,90,92,93,94,95,97,98 |
输出端口,这是一标准双线接口。见A,4和A,19 |
out_extn |
O |
87 |
out_valid |
O |
99 |
out_accept |
I |
100 |
表A.17.1 时间解码器信号(续)
信号名 |
I/O |
引脚号 |
说明 |
tck |
I |
115 |
JTAG端口。见A.8 |
tdi |
I |
116 |
tdo |
O |
120 |
tms |
I |
117 |
trst |
I |
121 |
decoder_clock |
I |
177 |
主解码器时钟。见A.7.2 |
rest |
I |
160 |
复位 |
表A.17.2 时间解码器测试信号
信号名 |
I/O |
引脚号 |
说明 |
tphOish |
I |
122 |
若override=1,那么Tphoish和tphish作为芯片上两相时钟的输入。对正确操作设定override=0tphoish和Tphiish被忽略(因而连到GND或VCC)。 |
tphlish |
I |
123 |
override |
I |
110 |
chiptest |
I |
111 |
正确工作设置chiplist=0。 |
tloop |
I |
114 |
在正确工作时连到GND或VDD。 |
表A.17.2 时间解码器测试信号(续)
信号名 |
I/O |
引脚号 |
说明 |
ramtest |
I |
109 |
若ramtest=1,允许测试片上RAM,设置ramtest=0为正常操作。 |
pllselect |
I |
178 |
若pllselect=0,在芯片上的锁相环被禁止。在正常工作中,设pilselecl=1。 |
ti |
I |
180 |
在测试工作期间对DRAM接口需要2个时钟。在正常工作期间接到地或VDD。 |
tq |
I |
179 |
pdout |
O |
207 |
这两个引脚为锁相环而联接外部滤波器 |
pdin |
I |
206 |
表A.17.3 时间解码器引脚分配
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
nc 208 |
nc 156 |
nc 104 |
nc 52 |
test pin 207 |
nc 155 |
nc 103 |
nc 51 |
test pin 206 |
irq 154 |
nc 102 |
nc 50 |
GND 205 |
nc 153 |
VDD 101 |
DRAM_data[15] 49 |
OE 204 |
data[7] 152 |
out_accept 100 |
nc 48 |
DRAM_addr[0] 203 |
data[6] 151 |
out_valid 99 |
DRAM_data[16] 47 |
VDD 202 |
nc 150 |
out_data[0] 98 |
nc 46 |
nc 201 |
data[5] 149 |
out_data[1] 97 |
GND 45 |
DRAM_addr[1] 200 |
nc 148 |
GND 96 |
DRAM_data[17] 44 |
DRAM_addr[2] 199 |
data[4] 147 |
out_data[2] 95 |
nc 43 |
GND 198 |
GND 146 |
out_data[3] 94 |
DRAM_data[18] 42 |
DRAM_addr[3] 197 |
data[3] 145 |
out_data[4] 93 |
VDD 41 |
nc 196 |
nc 144 |
out_data[5] 92 |
nc 40 |
表A.17.3 时间解码器引脚分配 (续)
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
DRAM_addr[4] 195 |
data[2] 143 |
VDD 91 |
DRAM_data[19] 39 |
VDD 194 |
nc 142 |
out_data[6] 90 |
DRAM_data[20] 38 |
DRAM_addr[5] 193 |
data[1] 141 |
out_data[7] 89 |
nc 37 |
DRAM_addr[6] 192 |
data[0] 140 |
nc 88 |
GND 35 |
nc 191 |
nc 139 |
out_extn 87 |
DRAM_data[21] 35 |
GND 190 |
VDD 138 |
GND 86 |
nc 34 |
DRAM_addr[7] 189 |
addr[7] 137 |
DRAM_data[0] 85 |
DRAM_data[22] 33 |
DRAM_addr[8] 188 |
addr[6] 136 |
DRAM_data[1] 84 |
VDD 32 |
VDD 187 |
addr[5] 135 |
DRAM_data[2] 83 |
DRAM_data[23] 31 |
DRAM_addr[9] 186 |
GND 133 |
VDD 82 |
DRAM_data[24] 30 |
nc 185 |
addr[4] 133 |
DRAM_data[3] 81 |
nc 29 |
DRAM_addr[10] 184 |
addr[3] 132 |
nc 80 |
GND 28 |
GND 183 |
addr[2] 131 |
DRAM_data[4] 79 |
DRAM_data[25] 27 |
nc 182 |
addr[1] 130 |
GND 78 |
nc 26 |
VDD 181 |
VDD 129 |
nc 77 |
DRAM_data[25] 25 |
test pin 180 |
add[0] 129 |
DRAM_data[5] 76 |
nc 24 |
test pin 179 |
enzble[0] 127 |
nc 75 |
VDD 23 |
test pin 178 |
enzble[1] 125 |
DRAM_data[5] 74 |
DRAM_data[27] 22 |
decoder_clock 177 |
rw 125 |
VDD 73 |
nc 21 |
nc 176 |
GND 124 |
DRAM_data[7] 72 |
DRAM_data[23] 20 |
GND 175 |
test pin 123 |
nc 71 |
DRAM_data[29] 19 |
in_exin 174 |
test pin 122 |
DRAM_data[8] 70 |
GND 18 |
in_data[8] 173 |
trst 121 |
GND 69 |
DRAM_data[30] 17 |
in_data[7] 172 |
tdo 120 |
DRAM_data[9] 58 |
nc 16 |
in_data[6] 171 |
nc 119 |
nc 57 |
DRAM_data[31] 15 |
VDD 170 |
VDD 113 |
DRAM_data[10] 56 |
VDD 14 |
in_data[5] 169 |
rns 117 |
VDD 65 |
nc 13 |
in_data[4] 168 |
tdi 116 |
nc 64 |
WE 12 |
in_data[3] 167 |
tck 115 |
DRAM_data[11] 63 |
RAS 11 |
in_data[2] 166 |
test pin 114 |
nc 62 |
nc 10 |
GND 165 |
GND 113 |
DRAM_data[12] 61 |
GND 9 |
in_data[1] 164 |
DRAM_enable 112 |
GND 60 |
CAS[0] 3 |
in_data[0] 163 |
test pin 111 |
DRAM_data[13] 59 |
nc 7 |
in_valid 152 |
test pin 110 |
nc 58 |
CAS[1] 5 |
in_acc ept 161 |
test pin 109 |
DRAM_data[14] 57 |
VDD 5 |
表A.17.3 时间解码器引脚分配(续)
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
信号名 引脚 |
reset 160 |
nc 108 |
VDD 56 |
CAS[2] 4 |
VDD 159 |
nc 107 |
nc 55 |
nc 3 |
nc 15a |
nc 106 |
nc 54 |
CAS[3] 2 |
nc 157 |
nc 105 |
nc 53 |
nc 1 |
A.17.1.1“nc”不连结引脚
表A.17.3中标有nc的引脚是本发明中当前未使用且为将来产品保留的。这些引脚应不被连接。它们不应连结于VDD,GND,不应彼此连接或连于任何其它信号。
A.17.2 VDD和GND引脚
正如人们了解的,所提供的所有VDD和GND引脚必须连结于相应电源。所有VDD和GND引脚均需正确使用,否则器件将不会正常运行。
A.17.1.3一般操作的引脚连结测试
时间解码器的9条引脚被留作内部测试使用。
表A.17.4 缺省测试引脚连结
引脚号 |
连结 |
|
为正常工作连到地 |
|
为正常工作连到VDD |
|
为正常工作悬空 |
A.17.1.4一般操作的JTAG引脚
见A.8.1部分
表A.17.5 时间解码器存储器映象一览
地址 |
寄存器名 |
见表 |
0x00...0x01 |
中断服务区 |
A.17.6 |
0x02...0x07 |
不用 | |
0x08 |
芯片存取 |
A.17.7 |
0x09...0x0F |
不用 | |
0x10 |
图象顺序 |
A.17.8 |
0x11...0x1F |
不用 | |
0x20...0x2E |
DRAM接口配置寄存器 |
A.17.9 |
0x2F...0x3F |
不用 | |
0x40...0x53 |
缓冲器配置 |
A.17.8 |
0x54...0x5F |
不用 | |
0x60...0xFF |
测试寄存器 |
A.17.11 |
表A.17.6 中断服务区寄存器
地址 |
位 |
寄存器名 |
页号 |
0x00 |
7 |
chip_event | |
6:2 |
不用 | |
1 |
chip_stopped_event | |
0 |
count_error_event | |
0x01 |
7 |
chip_mask | |
6:2 |
不用 | |
1 |
chip_stopped_mask | |
0 |
count_error_mask | |
表A.17.7 芯片存取电阻
地址 |
位 |
寄存器名 |
页号 |
0x08 |
7:1 |
不用 | |
0 |
chip_access | |
表A.17.8 图象定序
地址 |
位 |
寄存器名 |
页号 |
0x10 |
7:1 |
不用 | |
0 |
MPEG_reordering | |
表A.17.9 DRAM接口配置寄存器
地址 |
位 |
寄存器 |
页号 |
0x20 |
7:5 |
不用 | |
4:0 |
page_start_length[4:0] | |
0x21 |
7:4 |
不用 | |
3:0 |
read_cycle_length[3:0] | |
0x22 |
7:4 |
不用 | |
3:0 |
write_cycle_length[3:0] | |
0x23 |
7:4 |
不用 | |
3:0 |
refresh_cycle_length[3:0] | |
0x24 |
7:4 |
不用 | |
3:0 |
CAS_falling[3:0] | |
0x25 |
7:4 |
不用 | |
3:0 |
RAS_falling[3:0] | |
0x26 |
7:1 |
不用 | |
0 |
interface_timing_access | |
0x27 |
7:0 |
不用 | |
0x28 |
7:6 |
RAS_strength[2:0] | |
5:3 |
OEWE_strength[3:0] | |
2:0 |
DRAM_data_strength[3:0] | |
0x29 |
7 |
不用 | |
6:4 |
DRAM_addt_strength[3:0] | |
3:1 |
CAS_strength[3:0] | |
0 |
RAS_strength[3] | |
表A.17.9 DRAM接口配置寄存器(续)
地址 |
位 |
寄存器名 |
页号 |
0x23 |
7 |
nolused | |
6:4 |
ORAM_addr_strengtn[3:0] | |
3:1 |
CAS_strength[3:0] | |
0 |
RAS_strength[3] | |
0x29 |
7:5 |
RAS_strength[2:0] | |
5:3 |
OEWE_strength[3:0] | |
2:0 | DRAM_data_strength[3:0] | |
0x2A |
7:0 |
refresh_interval | |
0x2B | 7:0 | not used | |
0x2C |
7:5 |
not used | |
5 |
DRAM_enable | |
4 |
no_refresh | |
3:2 |
row_address_bits[1:0] | |
1:0 |
ORAM_data_width[1:0] | |
0x2D |
7:0 |
not used | |
0x2E |
7:0 |
Test regisiers | |
表A.17.10 缓冲器配置寄存器
地址 | 位 | 寄存器名 | 页号 |
0x40 |
7:0 |
不用 | |
0x4l |
7:2 |
1:0 |
picture_butter_0[17:0] | |
0x42 |
7:0 |
0x43 |
7:0 |
0x44 |
7:0 |
不用 | |
0x45 |
7:2 |
1:0 |
picture_butter_1[17:0] | |
0x46 |
7:0 |
0x47 |
7:0 |
表A.17.10 缓冲器配置寄存器(续)
地址 |
位 |
寄存器名 |
页号 |
0x48 |
7:0 |
不用 | |
0x49 |
7:1 |
0 |
component_offset_0[16:0] | |
0x4A |
7:0 |
0x4B |
7:0 |
0x4C |
7:0 |
不用 | |
Gx4D |
7:1 |
0 |
component_offset_1[16:0] | |
0x4E |
7:0 |
0x4F |
7:0 |
0x50 |
7:0 |
不用 | |
0x51 |
7:1 |
0 |
component_offset_2[16:0] | |
0x52 |
7:0 |
0x53 |
7:0 |
表A.17.11 测试寄存器
地址 |
位 |
寄存器名 |
页号 |
0x2E |
7...4 |
PLL电阻器 | |
3...0 |
0x50 |
7...6 |
不用 | |
5...4 |
coding_standard[1:0] | |
3...2 |
picture_type[1:0] | |
1 |
H251_filt | |
0 |
H261_s_t | |
0x51 |
7...6 |
component_id | |
5...4 |
prediction_mode | |
3...0 |
max_sampling | |
0x62 |
7...0 |
samp_h | |
0x63 |
7...0 |
samp_v | |
表A.17.11 测试寄存器(续)
地址 |
位 |
寄存器名 |
页号 |
0x54 |
7...0 |
back_h | |
0x55 |
7...0 | |
0x56 |
7...0 |
back_v | |
0x57 |
7...0 | |
0x58 |
7...0 |
forw_h | |
Cx59 |
7...0 | |
0x5A |
7...0 |
lorw_v | |
0x5B |
7...0 | |
0x5C |
7...0 |
width_in_mo | |
0x6D |
7...0 | |
A.18时间解码器操作
A.18.1数据输入
时间解码器的输入数据端口是一个具有8位宽数据字的标准令牌端口。在大多数应用中,这将直接与空间解码器的输出令牌端口相连。欲获得关于此接口电特性的更多信息,参见A.4部分。
A.18.2自动配置
与编码视频的图象格式相关的参数被空间解码器产生的令牌自动装入时间解码器内的寄存器。
表A.18.1 经过令牌的时间解码器的配置
令牌 |
配置实现 |
CODING_STANDARD |
时间解码器的编码标准由CODING_STANDARD令牌自动被配置。每次,一新序列被起动,通过空间解码器产生这些配置,见图58。 |
DEFINE_SAMPLING |
对每个彩色分量的水平和垂直色度采样信息由DEFINE_SAMPLING令牌自动被配置。 |
HORIZONTAL_MBS |
以宏块计的图象的水平宽度由HORIZONTAL_MBS令牌自动配置。 |
A.18.3人工配置
用户必须配置(通过微处理器接口)视应用而定的参数。
A.18.3.1何时配置
时间解码器应该仅在不进行数据处理时被配置。这就是在复位被移去之后的缺省状态。时间解码器可以被停止,以通过面chip_access寄存器写1来重新配置。当配置完成后,应当在chip_access中写入0。
关于何时配置DRAM接口的细节,参见A.5.3部分。
A.18.3.2 DRAM接口
DRAM接口时序必须在有可能预测性解码编码视频(例如H.261或MPEG)之前被配置。见A,5部分,“DRAM接口”。
表A.18.2 时间解码器寄存器
寄存器名 |
大小/方向 |
复位状态 |
说明 |
chip_access |
1rw |
1 |
为能重新配置,对chip_access写1,请求时间解码器停止工作。时间解码器将继续正常工作,直到到达当前视频系列的结束。复位之后在除chip_access=1,即时间解码器被停止。当芯片停,产生芯片停止事件。若chip_stopped_mask=1产生中断。 |
chip_stopped_event |
1rw |
0 |
chip_stopped_mask |
1rw |
0 |
count_error_event |
1rw |
0 |
时间解码器有一加法器,加法器把预测加到错误数据上。若错误数据字节数和预测数据字节数之间不同,那么计数错误事件产生。若count_error_mask=1产生中断,形成预测将停止。这事件仅紧跟硬件错误产生。 |
count_error_mask |
1rw |
0 |
picture_buffer_0 |
18rw |
x |
这些指定图象缓冲器的基地址 |
picture_buffer_1 |
18rw |
x |
component_offset_0 |
17rw |
x |
这些指定图象缓冲器指针偏移量,在缓冲器中存贮每个彩色分量。ID=n分量的数据以由component_offset_n指示的位置为起点被存贮。见A.3.5.1“分量标识数”。 |
component_offset_1 |
17rw |
x |
component_offest_2 |
17rw |
x | |
表A.18.2 时间解码器寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
MPEGreordering |
1rw |
0 |
此寄存器设置为1,使时间解码器改变图象次序,从non-causA1MPEG图象序列变为正确显示次序。见A.18.3.5。在JPEG和H.261工作期间该寄存器应该忽略。 |
A.18.3.3图象缓冲器寄存器内的数
图象缓冲器指针(18位)和分量偏移(17位)寄存器指示一个块(8×8字节)地址而不是一个字节地址。
A.18.3.4图象缓冲器分配
为了解码预测性地编码的视频(H.261或MPEG),时间解码器必须管理两个图象缓冲器。欲获得更多关于如何使用这些缓冲器的信息,参见A.18.4和A.18.4.4部分。
用户必须保证在每一个图象缓冲器指针(picture_buffer_0和picture_buffer_1)上有足够的存贮空间以存贮一幅所需视频格式的单一图象(不与其它图象缓冲器重叠)。通常,图象缓冲器指针中的一个将被设置为0(即存贮器底),而另一个将被设置为指向存贮空间的中部。
A.18.3.4.1 MPEG或H.261的一般配置
H.261和MPEG均在不同彩色分量之间使用一4∶1∶1比率(即,亮度象素数目四倍于经一色度成分中的象素数目)。
如A.3.5.1“分量识别号码”中所述的,分量0将是亮度成分,而分量1和2将是色度。
分量偏置寄存器的一种范例配置即为,设置component_offset_0为0以使分量0在图象缓冲器指针处开始。类似地,component_offset_1可以被设置为图象缓冲器大小的4/6,component_offset_2可以被设置为图象缓冲器大小的5/6。
A.18.3.5图象序列重排
MPEG使用三种不同的图象类型:内部(I)、预测(P)和双向插入(B)。B类图象是基于来源于两幅图象的预测的:一幅来自将来,一幅来自过去。图象顺序在编码器被修改,以使I和P类图象在其被要求解码B类图象前可从编码数据被解码。
图象序列必须在这些图象可被显示之前更正。时间解码器可以提供这种图象重排(通过设置寄存器MPEG_reodering=1)。作为选择,用户可能希望将图象重排作为他显示接口功能的一部分来完成。配置时间解码器以提供图象重排可能会降低可被解码的视频分辨率,参见A.18.5部分。
A.18.4预测形成
H.261解码和MPEG解码的预测形成要求是截然不同的。CODING_STANDARD令牌自动配置时间解码器,以适应不同标准的预测要求。
A.18.4.1 JPEG操作
在为JPEG操作配置时,由于JPEG不需要任何时间解码,因此不进行预测。
A.18.4.2 H.261操作
在H.261中,预测仅来自刚被解码的图象。运动向量仅指整数的象素精度。编码器将指示一个低通滤波器被用于预测的结果。
由于每幅图象都已被解码,它被写入芯片外DRAM内的一个图象缓冲器,以便DRAM可被用于解码下一图象。被解码的图象当它们被写入芯片外的DRAM时出现于时间解码器的输出端。
关于预测的详情以及涉及的数学运算,读者可参考H.261标准。本发明的时间解码器与H.261的要求是完全相符合的。
A.18.4.3 MPEG操作(不重排)
对于三种不同MPEG图象类型(I,P和B)的每一种,时间编码器的运行有所变化。
“I”类图象不需时间解码器的进一步解码,但必须被存贮于一个图象缓冲器(帧存贮),以便将来在解码P和B类图象中使用。
解码P类图象需要从一幅前面被解码的P或I类图象形成预测。被解码的P类图象被存贮于一图象缓冲器中以在解码P和B类图象中使用。MPEG允许运动向量指示半象素精度。芯片内滤波器提供插入以支持这种半象素精度。
B类图象需要来自两种图象缓冲器的预测。类似P类图象,半象素运动向量分辨率精度需要图象信息的芯片上插值。B类图象不被存贮于芯片外缓冲器中。它们只是瞬时的。
所有的图象在其被解码时出现于时间解码器的输出端。这样,图象序列将与其在编码MPEG数据中的序列相同(见图85的上部)。
关于预测详情以及涉及的数学运算,读者可参考提出的MPEG标准草案。这些要求由本发明的时间解码器满足。
A.18.4.4 MPEG操作(用重排)
当为图象重排的MPEG操作配置时,(MPEG_reordering=1),形成预测的操作如上面在A.18.4.3部分中所描述的。然而,附加的数据传送被进行以便重排图象序列。
B类图象的解码如A.18.4.3部分中所描述的。然而,I和B类图象在它们被解码时不被输出。它们被写入芯片外缓冲器(如前所述),并只在一幅后续I或P类图象到达以被解码时才被读出。
A.18.4.4.1解码器起动特性
第一幅I类图象的输出被延迟,直到后面的P(或I)类图象开始解码。这应当在估计视频解码器起动特性时被考虑。
A.18.4.4.2解码器关闭特性
时间解码器依靠后面P或I类图象来将前面的图象清除(Flush)出芯片外缓冲器(帧存贮)。这在视频序列的结尾在和在开始新的视频序列时有重要性。空间解码器提供设备,以在视频序列的结尾产生一个“伪”P/I图象以清除最后的P(或I)图象。然而,这个“伪”图象将在一个后序视频序列开始时被清除。
空间解码器提供选择以排除这个“伪”图象。在已知道当一个旧序列被结束后将马上有一个新的视频序列被提供给解码器处,这将是有用的。这个新序列的第一幅图象将把前一序列的最后一幅图象刷除。
A.18.5视频分辨率
在解码MPEG时时间解码器可以支持的视频分辨率受到其DRAM接口的存贮器带宽的限制。对于MPEG,需要考虑两种情况:用和不用MPEG图象重排。
A.18.5.2和A.18.5.3部分讨论了MPEG说明书当前草案所需的最差情况的要求。MPEG的子集可以期望有较低的存贮器带宽要求。例如,只使用整数分辨率运动向量,或者,作为选择,不使用B类图象,可以显著地降低存贮器带宽要求。这些子集在此不做分析。
A.18.5.1 DRAM接口特性
通过DRAM接口传送数据所采取的周期数依赖于许多因素:
·DRAM接口为适应选用DRAM所用的时间配置
·数据总线宽度(8,16或32位)
·数据传送的类型
·8×8块读或写
·为预测半象素精度
·为预测整数象素精度
关于DRAM接口配置的详细信息,参见A.5部分“DRAM接口”。
表A.18.3显示了对于每种类型的数据传送需要多少DRAM接口“周期”。
表A.18.3 时间解码器的数据传送时间
数据总线宽度(位) |
读写8×块 |
来自预测器(半象素精度) |
来自预测器(整数象素精度 ) |
8 |
1页地址+64个传送 |
4页地址+81个传送 |
4页地址+64个传送 |
16 |
1页地址+32个传送 |
4页地址+45个传送 |
4页地址+40个传送 |
32 |
1页地址+16个传送 |
4页地址+27个传送 |
4页地址+24个传送 |
表A.18.4采用了表A.18.3中的数值并对一个“典型的”DRAM评价它们。在本例中,假设了一个27兆赫的时钟。应当了解的是,尽管在此用27兆赫,它并不作为一种限制。存取起始占据了11个小标记(Tick)(102ns)而数据传送占据了6个小标记(56ns)。
A.18.5.2无重排的MPEG分辨率
当解码B类图象时发生存贮器峰值带宽负载。在一“最差情况”方案中,B帧可以通过预测形成,而预测来源于2个图象缓冲器,且所有的预测都是半象素精度。
表A.18.4 “典型”DRAM说明
数据总线宽度(位) |
读或写8×8块 |
来自预测器半象素精度) |
来自预测器(整数象素精度) |
8 |
3657ns |
4907ns |
3963ns |
16 |
1880ns |
2907ns |
2185ns |
32 |
991ns |
1907ns |
1741ns |
使用表A.18.4中的举例数据可以看出,为读x两种准确半象素精度预测所需的数据(通过一个32位宽的接口),DRAM接口将花费3815ns。时间解码器能够支持的分辨率由在一个图象时间内可以完成的这些预测的数量所决定。在此例中,时间解码器在一单一的33毫秒的图象周期中可以处理8737个8×8块(例如,对一个30赫的视频)。
如果所需的视频格式是704×480,那么每幅图象包括7920个8×8块(考虑4∶2∶0色度采样)。可以看出,此视频格式占用可获得的DRAM接口带宽的大约91%(在考虑进诸如DRAM刷新等因素之前)。相应地,时间解码器可以支持此视频格式。
A.18.5.3具有重排的MPEG分辨率
当采用MPEG图象重排时,在解码P类图象时会遇到最差情况方案。在这种时候,DRAM接口上有3种负载:
·形成预测
·写回结果
·读出前面的P或I图象
使用来自表A.18.3的举例数字,我们可以找到在可获得一个32位宽的接口时,这种工作中每一个所要花费的时间。形成预测花费1907ns/n,而读和写各要用991ns,总共是3899ns。这使得时间解码器能够在33ms的周期内处理8485个8×8的块。
因此,处理704×480的视频将使用可获得存贮器带宽的大约93%(忽略刷新)。
A.18.5.4 H.261
H.261仅支持两种图象格式(CIF(352×288)和QCIF(172×144)且图象速率达30赫。一幅CIF图象包括2376个8×8块。所需的唯一存贮器操作是写8×8的块并以整数精度运动矢量形成预测。
对于一个8位宽的存贮器接口使用来自表A.18.4中的举例数字,可以看出写每一个块将用3657ns,而为一个块形成预测将用3963ns/n,故每一个块将花费7620ns。因此,每个单一CIF图象的处理时间是大约18ms,远小于支持30赫视频所需的33ms。
A.18.5.5 JPEG
可被支持的JPEG“视频”分辨率将由本发明的空间解码器的容量或显示器接口决定。时间解码器不影响JPEG分辨率。
A.18.6事件和错误
A.18.6.1芯片停止
在本发明中,为给chip_access写入1,要求时间解码器停止操作以便于重新配置。一但被接收到,时间解码器将继续正常运行,直到其到达当前视频序列的末端。然后,时间解码器被停止。
当芯片停止时,一个芯片停止事件将发生。如果chip_stopped_mask=1,将有一个中断产生。
A.8.6.2计数错误
本发明的时间解码器包括一个加法器,将预测加到错误数据中去。如果错误数据的字节数与预测数据的字节数之间有差别,那么会产生一个计数错误事件。
如果count_error_mask=1,一个中断将被产生,且预测的形成将停止。
向count_error_event写入1就清除了事件,并使时间解码器继续。因而导致错误产生的DATA令牌将继续。然而,引起错误的DATA令牌将不会是正确长度(64字节)的。这有可能会导致进一步的问题。因此,只有在一个显著硬件错误已发生时才会产生一个计数错误。
A.19连到时间解码器的输出端
时间解码器的输出端是一具有8位宽数据字的标准令牌端口。关于接口电特性的进一步信息,请参见A.4部分。
出现在时间解码器输出端的令牌将取决于所使用的编码标准,在MPEG的情况下,则依赖于图象是否正在被重排。此部分识别令牌中的哪一个可以在时间解码器的输出端获得,以及哪一个在设计电路以显示那个输出时最有用。其它的令牌将出现,但无需显示输出,因此在此不做讨论。
这部分着重显示:
·如何识别序列的起始和末端
·如何识别图象的起始和末端
·如何识别何时显示图象
·如何识别图象数据应被放于显示中的何处
A.19.1 JPEG输出
在解码JPEG数据时,由时间解码器输出的令牌序列与空间解码器的输出端被看见的一样。回想起来,JPEG不需要时间解码器进行的处理。然而,时间解码器测试内部数据令牌(来自空间解码器中IDCT的有限数学精确的结果),对负值以零代替。
关于在JPEG操作中观察到的输出序列的进一步讨论,参见A.16部分。
A.19.2 H.261输出
A.19.2.1过程的起始和结束
H.261在视频数据中视频流中没有起始和结束信号。不过,这将由应用隐含。例如,当电信连结时序列开始,当线路中断时结束。这样,视频体系中最高的层是“图象层”。
根据本发明,空间解码器的起始码检测器使得SEQUENCE_START和CODING_STANDARD令牌被自动插入到第一个PICTURE_START之前。
参见A.11.7.3和A.11.7.4。
在H.261过程的最后(也就是当线路关闭),用户应当在编码数据末端的后面插入一个FLUSH令牌。这具有许多作用(参见附录A.31.1):
·它保证了PICTURE_END被产生,以标志最后一幅图象的结束。
·它保证了编码数据的末端被推动经过解码器。
A.19.2.2图象的获得
每一图象在体系中的层由称为分层的元素组成。在解码H.261时,在时间解码器输出端的令牌序列反映出这一结构。
A.19.2.1图象层
每一图象的前面有一PICTURE_START令牌,且后面紧跟着一个PICTURE_END令牌。H.261本来不包括一个图象结束。这个令牌是由空间解码器的起始码检测器自动插入的。
在PICTURE_START令牌后,将有TEMPORAL_REFERENCE和PICTURE_TYPE令牌。TEMPORAL_REFERENCE令牌携带一个10位数(其中只有5个最低位(LSB)被在H.261中使用),此数指示图象应在何时被显示,这应当被任何一种显示系统所考虑,因为H.261编码器可能会从序列中省略图象(以实现更低的数据率)。由于时间标记在两连续图象之间增加了不只一号,图象的省略可被检测出来。
下一步,PICTURE_TYPE令牌携带关于图象格式的信息。一显示系统可以考虑此信息以查看CIF或QCIF图象是否正在被解码。然而,关于图象格式的信息也可通过研究Huffman解码器内的寄存器而获得。
(请参考Huffman解码四部分)
A.19.2.2.2块层组
每幅H.261图象是由大量“块组”构成的。它们中的每一个前面都有一个SLICE_START令牌(由H.261组号和组起始码得到)。此令牌携带一8位的值,此8位值指示块组应被放在显示中的何处。这就为解码器提供了一个机会使其在数据错误之后再次同步化。此外,如果有不需要附加信息来描述它们的图象区域,上述方式还为编码器提供了一种跳块的手法。当SLICE_START到达时间解码器输出端时,这一信息就成为十分多余的,因为空间解码器和时间解码器已经使用了此信息以保证每幅图象包含正确的块数且这些块处于正确的位置。因此,仅仅通过计算从图象的起始开始后已被输出的块的数目,就有可能计算在何处放置由时间解码器输出的数据块。
由SLICE_START携带的号码比H.261组的块数小1(关于更多信息,参见H.261标准)。图94显示了在CIF和QCIF图象中H.61块组的定位。注意:在本发明中,所示的块编号与由SLICE_START携带的号码相同。对于编号这些组不同于H.261惯例。
在SLICE_START(它指示每一块组的起始)和第一宏块之间还可能有其它令牌。这些可以忽略,因为显示图象数据并不需要它们。
A.19.2.2.3宏块层
每一块组中的宏块序列是由H.261定义的。不存在描述每一宏块位置的特别令牌信息。用户应当通过宏块序列计算,确定在何处显示每一条信息。
图96显示了每一块组中宏块被放置的顺序。
每一宏块包括6个数据令牌。每6个一组的DATA令牌顺序是由H.261宏块结构所定义的。每一个DATA令牌对于一单一彩色分量的8x8象素区域应当恰好包括64数据字节。彩色分量由DATA令牌内的一个2位数携带(参见A.3.5.1)。然而,在H.261中彩色分量的顺序已被定义。
每一组DATA令牌之前都有大量令牌,这些令牌通讯关于运动向量、量化比例因子等的信息。显示图象不需要这些令牌,因此可被忽略。
每一DATA令牌对其8×8的单一彩色分量包括64个数据字节。以光栅顺序存放。
A.19.3 MPEG输出
MPEG的体系中具有更多层。它们接受诸如视频序列和图象组。
A.19.3.1 MPEG序列层
一个序列可以有多个入口点(序列起始),但应只有一个出口点(序列结束)。当一个MEPG序列的标题码被解码,空间解码器产生一个CODING_STANDARD令牌,其后是一个SEQUENCE_START令牌。
在SEQUENCE_START之后,将有大量序列标题信息的令牌,它们说明视频格式等。关于序列标题中所指的信息,参见MPEG标准草案;关于这个数据如何被转换成令牌的信息,参见表A.3.2。这说明视频格式的信息也可在Huffman解码器内的寄存器内获得。
如果一个MPEG序列有几个入口点,这个序列标准信息可以在此序列中出现几次。
A.19.3.2图象层组
一个MPEG图象组在序列起始提供不同类型的“入口”点。序列标题提供关于图象/视频格式的信息。相应地,如果解码器不知道一个序列中使用的视频格式,它必须在一个序列起始处开始,然而,一旦视频格式被配置入解码器,应该可以在任何一个图象组中开始解码。
MPEG不把图象号码限制在组内。然而,在许多应用当中,一个组相应于约0.5秒,因为它提供随机存取的合理单元。
一组图象的起始由一个GROUP_START令牌指示。在GROUP_START之后提供的头信息包括两种有用的令牌:TIME_CODE和BROKEN_CLOSED。
TIME_CODE携带SMPTE时间码信息的一个子集。这在使视频解码器与其它信号同步化当中是有用的。BROKEN_CLOSED携带MPEGclosed_gap和broken_link位。关于随机存取和解码已被编辑的视频序列的实施的更多信息,可参见A.19.3.8。
A.19.3.3图象层
一幅新图象的起始由PICTURE_START令牌指示。在此令牌之后,将有TEMPORAL_REFERENCE和PICTURE_TYPE令牌。如果时间解码器不是为了提供图象重排而配置,时间标记信息可能是有用的。如果一个显示系统希望在一个开放GOP的起始特别处理B类图象,图象类型信息可能是有用的(见A.19.3.8)。
每一图象是由许多片构成的。
A.19.3.4片层
A.19.2.2.2讨论了H.261中所使用的块组。MPEG中的片起着类似的作用。然而,片结构不是由标准所确定的,由SLICE_START令牌携带的8位值比以MPEG通讯的“片垂直位置”小1。关于片层的说明,参见MPEG标准草案。
当SLICE_START到达时间解码器的输出时,这一信息作用是多余的,因为空间解码器和时间解码器已经使用了该信息以保证每一幅图象在正确的位置包含了正确数目的块。因此,仅通过从图象开始之后数已被输出的块的数量,就应该可以计算将时间解码器输出的数据块置于何处。
关于使用MPEG图象重排的效果的讨论,参见A.19.3.7。
A.19.3.5宏块层
每一宏块包括6个块。它们以光栅顺序出现在时间解码器的输出端(如MPEG说明书草案所指出的)。
A.19.3.6块层
每一宏块包括6个DATA令牌。每一个含6个令牌的组中,DATA令牌的序列是由MPEG说明书草案所定义的(这与H.261宏块结构相同)。对一单个彩色分量,每一数据令牌应当在8x8的象素区域包括恰好64个数据字节。彩色分量由DATA令牌中的一个2位数携带(见A.3.5.1)。然而,MPEG中的彩色分量序列已被定义。
每一组DATA令牌之前都有大量令牌,这些令牌对关于运动向量、量化比例因子等的信息进行通讯。显示图象不需要这些令牌,因此它们被忽略。
A.19.3.7 MPEG图象重排的效果
如A.18.3.5中所述,时间解码器可以被配置以提供MPEG图象重排(MPEG_reordering=1)。P和I类图象的输出被延迟,直到时间解码器开始解码数据流中的下一P/I图象。在时间解码器的输出端,来自旧P/I图象的DATA令牌代替新解码的P/I图象的DATA令牌。
在重排P/I图象时,当图象被写入芯片外图象缓冲器时,图象PICTURE_START,TEMPORAL_REFERENCE和PICTURE_TYPE令牌被暂时存贮于芯片上。当图象被读出以显示时,这些存贮的令牌被恢复。相应地,重排的P/I图象具有正确的PICTURE_START,TEMPORAL_REFERENCE和PICTURE_TYPE值。
在图象层下面的所有其它令牌不被重排。当重排后的P/I图象被读出以显示时,它拾取刚被重排的图象的低级别非DATA令牌。因而,这些子图象层的令牌应当被忽略。
A.19.3.8随机存取和编辑序列
空间解码器提供设备以帮助对于编辑后的MPEG视频数据和经随机存取以后形成的视频数据进行正确的视频解码。
A.19.3.8.1开放GOP(Open Gops)
一图象组(GOP)可以以B类图象开始,此B图象是由前一个GOP中的P类图象预测得来的,这称为“Open GOP”。图107对其进行了说明。图17和18是第二个GOP开始的B图象。如果GOP是“开放”的,那么编码器可能已经使用来自P图象16和I图象19的预测对这两幅图象进行了编码。作为选择,编码器也可以限制于只使用来自I图象19的预测。在这种情况下,第二个GOP是一个“关闭GOP”。
如果一个解码器在第一个GOP就开始对视频解码, 当它遇到第二个GOP时将不会有任何问题,即使GOP是开放的。因为它已经解码了P图象16。然而,如果解码器进行了一次随机存取并且在第二个GOP开始解码,它将不能解码B17和B18,如果这两个图象是依靠P16的(也就是说,如果GOP是开放的)。
如果本发明的空间解码器在一次复位后遇到的第一个GOP是开放GOP,或者它接收到一个FLUSH令牌,它将假定已经发生了一个对开放GOP的随机存取。在这种情况下,Huffman解码器将以一般方式为B图象使用数据。然而,它将输出用(0,0)运动向量在I图象外预测的B图象。结果将是,图象B17和B18(上例中的)将与I19相同。
这种特性保证了MPEG VBV规则的工作。同时,它保证了B图象存在于输出中,且在输出流中处于其它数据通道所期望的位置。例如,MPEG系统层提供了使音频数据与视频数据相联系的显示时间信息。视频显示时间标记指在一个GOP中第一幅被显示的图象,即时间基准为0的图象。在上面的例子中,在对第二个GOP进行随机存取后的第一幅显示图象是B17。
BROKEN_CLOSED令牌携带MPEG closed_gop位。因此,在时间解码器的输出端可以判断出,输出的B图象是真的或者空间解码器已经引入的“替代品”。在某些应用中,当这些“替代”图象出现时可能希望采取某些特殊测量。
A.19.3.8.2被编辑的视频
如果一个应用对一MPEG视频序列进行编辑,它可能会打断两个GOP之间的联系。如果GOP在编辑之后是一个开放GOP,它将不可能正确解码位于GOP起始处的B图象。在编辑之后,编辑MPEG数据的应用可以设置GOP中的broken_link以指示解码器它将不能解码这些B图象。
如果空间解码器遇到一个具有一已被打断的连结的GOP,Huff-man解码器将以一般方式为B图象解码数据。然而,它将输出用(0,0)运动向量在I图象之外预测的B图象。结果将是。图象B17和B18(在上例中)将与I19相同。
BROKEN_CLOSED令牌携带MPEG broken_link位。因此,在时间解码器的输出端就有可能判断输出的B图象是真的还是由空间解码器引入的“替代物”。当出现“替代”图象时,某些应用可能希望采取某些特殊测量。
A.20迟写DRAM接口(Late Write DRAM Interface)
接口可以以两种方法配置:
·接口的详细定时可以被配置适应多种不同的DRAM类型。
·DRAM接口的“宽度”可以被配置以提供优越的价格/性能比。
表A.20.1 DRAM接口信号
信号名 |
输入/输出 |
说明 |
DRAM_data[31:0] |
入/出 |
32位宽的DRAM数据总线。可选的此总线能配置成16位或8位宽。 |
DRAM_addr[10:0] |
出 |
22位宽DRAM接口地址是在11位宽总线上的分时多路。 |
RAS |
出 |
DRAM行地址选通信号。 |
CAS[3:0] |
出 |
DRAM列地址选通信号,接口的数据总线的每个字节提供一个信号。所有CAS信号同时被驱动。 |
WE |
出 |
DRAM写使能信号。 |
OE |
出 |
DRAM输出使能信号。 |
DRAM_enable |
入 |
当输入信号为低时,使接口上所有输出信号为高阻抗,使DRAM接口停止活动。 |
表A.20.2 DRAM接口配置寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
modify_DRAM_timing |
1bitrw |
0 |
此功能允许寄存器可访问DRAM接口定时配置寄存器。当此寄存器保持零值时,不应该修改。对此寄存器写1,就请求访问修改这配置寄存器。零已写到此寄存器后,DRAM接口将开始使用图象配置寄存器中的新值。 |
page_start_length |
5bitrw |
0 |
以tick为单位指定存取起始的长度,此最小值能使用的是4(表示4个ticks)。0选最大长度32ticks。 |
read_cycle_length |
4bitrw |
0 |
以ticks指定快页读周期的长度,可用的最小值是4(即4个tick)。0选16ticks的最大长度。 |
write_cycle_length |
4bitrw |
0 |
以ticks指定快页后写周期长度,可用的最小值是4(表示4个tick)0选16ticks的最大值。 |
refresh_cycle_length |
4bitrw |
0 |
以ticks指定刷新周期的长度,其可用的最小值是4(表示4个ticks),0选16ticks的最大值。 |
RAS_falling |
4bitrw |
0 |
指定在存取起动之后,RAS下降指定此ticks数可用的最小值是4(表示4个ticks),0选16ticks的最大长度。 |
表A.20.2 DRAM接口配置寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
CAS_faliing |
4bitrw |
8 |
在起动读周期,写周期之后,或者CAS下降存取起动后指定此tick数。可用的最小值是1(表示1个tick),0选择16ticks的最大长度。 |
DRAM_data_width |
2bitrw |
0 |
指定用在DRAM接口数据总线DRAM_data[31:0]上的位数。见A.20.4。 |
row_address_bits |
2bitrw |
0 |
指定用在DRAM接口地址总线上的行地址部分的位数。见A.20.5。 |
DRAM_enable |
1bitrw |
1 |
对此寄存器写值0,强使DRAM接口进入高阻状态。如果DRAM_enable信号是低或零已写到此寄存器中,则0将从此寄存器中读出。 |
refresh_interval |
8bitrw |
0 |
这值指定16个解码时钟周期为周期单位的刷新同期间间隔。值的范围可配置在1......255内。值0在复位后自动装载,并强使DRAM接口继续执行刷新周期直到一有效刷新间隔被配置成每次复位后,refresh_interval应该配置一次。 |
no_refresh |
1bitrw |
0 |
对此寄存器写值1,防止任何刷新周期的执行。 |
表A.20.2 DRAM接口配置寄存器(续)
寄存器名 |
大小/方向 |
复位状态 |
说明 |
CAS_strength |
3bitrw |
6 |
这些3位寄存器设置DRAM接口信号的输出驱动强度。允许接口配置各种不同负载。见A.20.8。 |
RAS_strength |
addr_strength |
DRAM_data_strength |
OEWE_strength |
A.20.1接口定时(小标记)
在本发明中,DRAM接口定时来自一个时钟,此时钟以四倍于设备的输入时钟率的速度运行(decoder_clock)。这个时钟由一个芯片上PLL产生。
为了简便起见,这个高速时钟的周期被称为小标记(tick)。
A.20.2接口操作
接口使用DRAM快速页面模式。三种不同类型的存取可被支持:
·读
·写
·刷新
每一读或写存取传送一串在一单一DRAM页面地址的1到64字节之间的脉冲。在一个单一存取中,读和写的传送不相混合。对于一个新的DRAM页面,每次连续存取都被以一次随机存取对待。
A.20.3存取结构
每一存取由两部分构成:
·存取开始
·数据传送
每一次存取是以一个存取起始开始,其后跟随一个或多个数据传送周期。存取起始和数据传送周期中的任何一个都有读、写和刷新。
在一次存取的最后一个数据传送的结尾,接口进入其缺省状态并保持此状态,直到一个新的存取准备开始。如果当上一次存取结束时新的存取已做好开始的准备,那么新的存取将立即开始。
A.20.3.1存取起动(Access start)
存取起动为读或写传送提供页面地址,并建立某些起始信号条件。有三种不同的存取起动:
·读起动
·写起动
·刷新起动
在每种情况下,
RAS和行地址时序都由RAS_falling和page_start_length寄存器控制。
OE和DRAM_data[31:0]的状态将从上一数据传送的结束一直保持到
RAS变成低电平。三种不同的存取起始类型的差异仅在于当RAS处于低电平时它们是如何驱动
OE和DRAM_data[31:0]的。参见图109。
表A.20.3 访问起动参数
号 |
特性 |
最小值 |
最大值 |
单位 |
注释 |
38 |
由寄存器RAS_falling设置的RAS预充 |
4 |
16 |
tick | |
39 |
由寄存器page_start_length设置的访问起动持续时间 |
4 |
32 | |
40 |
由寄存器CAS_falling设置的CAS预充时间 |
1 |
16 |
a |
41 |
由寄存器read_cycle_Length设置的快页读周期长度 |
4 |
16 | |
42 |
由寄存器write_cycle_Length设置的快页写周期长度 |
4 |
16 | |
43 |
在
CAS以后
WE下降一个tick | | | |
44 |
由寄存器refresh_cycle设置刷新周期长度 |
4 |
16 | |
a、此值必须小于RAS_falling以确保
CAS在
RAS前刷新发生。
A.20.3.2数据传送
有三种不同类型的数据传送周期:
·快速页面读周期
·快速页面后写周期
·刷新周期
一个刷新起始后面仅有一个刷新周期。一个读(或写)起始后面可以跟随一个或多个快速页面读(或写)周期。
在读周期
CAS的开始,
RAS被驱动为高电平,且新的列地址被驱动。
一个后写周期被使用。
WE比
CAS迟一个标签被驱动为低电平。输出数据比地址迟一个小标记(Tick)被驱动。
由于在
RAS刷新周期前的一个
CAS被刷新周期起始所初始化,在刷新周期内不存在接口信号有效。刷新周期的目的在于达到DRAM所需的最小
RAS低电平周期。
A.20.3.3接口缺省状态
在一次存取的结尾,接口信号进入一缺省状态:
·
RAS,
CAS和
WE高电平
·数据和OE保持其原来状态
·addr保持稳定
A.20.4数据总线宽度
两位寄存器DRAM_data_width使得DRAM接口数据路径的宽度能被配置。这使得DRAM的价格在其以小图象格式工作时最低。
表A2 0.4 设置DRAM_data_width
DRAM_data_width | |
0a |
对DRAM_data(31:24)8位宽数据总线 |
1 |
对DRAM_data(31:16)16位宽数据总线 |
2 |
对DRAM_data(31:0)32位宽数据总线 |
a、在复位后的缺省值
b、不使用的信号保持高阻抗
A.20.5地址位
一个24位的地址在芯片上被产生。这个地址被如何用于形成行和列地址取决于数据总线的宽度和为行地址选择的位数。某些配置不允许使用所有的内部地址位(并因此产生“隐藏位”)。
行地址从地址的中间部分抽出。这使DRAM被自然刷新的速率最大。
A.20.5.1低位列地址位(Low order column address bits)
列地址低4至6位被用于为多达64字节的快速页面模式传送提供地址。控制传送所需的地址位数取决于数据总线的宽度(见A.20.4)。
A.20.5.2行地址位
从24位内部地址的中间部分取出的、用于提供行地址的位的数目由寄存器row_address_bits配置。
表A.20.5 设置row_address_bits
row_address_bits |
行地址宽 |
0 |
9位 |
1 |
10位 |
2 |
11位 |
所使用的行地址的宽度将依赖于所使用的DRAM类型,以及行地址的MSB是否被在芯片外解码以存取DRAM的多个体。
注意:行地址是从内部地址的中间抽出的。如果行地址的某些位被解码以选择DRAM体,那么这些“体选择位”的所有可能值必须选择一个DRAM体。否则,地址空间将出现空洞。
表A.20.6 对row_address_bits的取值选择
row_address_bits |
行地址位 |
体选择 |
DRAM大小 |
0 |
DRAM_addr[8:0] | |
255k |
1 |
DRAM_addr[8:0] |
DRAM_addr[9] |
256k |
DRAM_addr[9:0] | |
512k |
DRAM_addr[9:0] | |
1024k |
2 |
DRAM_addr[8:0] |
DRAM_addr[10:9] |
256k |
DRAM_addr[9:0] |
DRAM_addr[10] |
512k |
DRAM_addr[9:0] |
DRAM_addr[10] |
1024k |
DRAM_addr[10:0] | |
2043k |
DRAM_addr[10:0] | | 4095k |
A.20.6 DRAM接口使能
有两种办法可以使DRAM接口上的所有信号变为高阻抗。DRAM_enable寄存器和DRAM_enable信号。寄存器和信号两者对于DRAM接口都必须是逻辑为1才能运行。如果任意一个为低电平,那么接口就成为高阻抗,且通过接口进行的数据传送被中止。
提供令DRAM接口采取高阻抗的能力是为了使其它部件在空间解码器(或时间解码器)不被使用时能测试或使用由空间解码器(或时间解码器)控制的DRAM。在正常运行中,并不希望其它部件来共享存贮器。
A.20.7刷新
DRAM接口将在由寄存器refresh_interval决定的间歇期内用CAS自动刷新DRAM,除非由于写入寄存器no_refesh而使其不能这样做。
refresh_interval内的值指明了在一个具有16个decoder_clock周期的阶段中,刷新周期之间的间隔。可以配置从1到255的值。在复位之后,0值被自动装载,迫使DRAM接口持续地执行刷新周期(一旦可以执行),直到一个合法的刷新间隔被配置。建议在每次复位后只对refresh_interval配置一次。
A.20.8信号强度
DRAM接口的输出驱动强度可由用户配置,配置时使用3位寄存器CAS_strength,RAS_strength,addr_strength,DRAM_data_strength,OEWE_strength。这个3位值的最高有效位的值选择快速或慢速边界率。两个有效性较低的位对不同负载电容的输出进行配置。
在复位之后的缺省强度为6,它配置输出,如果负载是12pF的话,GND和VDD之间的驱动信号大约为10ns。
表A.20.7 输出强度设置
强度值 |
驱动特性 |
0 |
负载为6pf时接近4ns/v |
1 |
负载为12pf时接近4ns/v |
2 |
负载为24pf时接近4ns/v |
3 |
负载为48pf时接近4ns/v |
4 |
负载为6pf时大约2ns/v |
5 |
负载为12pf时大约2ns/v |
6a |
负载为24pf时大约2ns/v |
7 |
负载为48pf时大约2ns/v |
a、复位后缺省值
当一个输出按其驱动的负载被大致配置,它将符合表A.20.11至A.20.12中指出的AC电特性。在配置恰当时,每一输出都与其负载大致匹配,因而在信号转换后将出现最少的过冲。
A.20.9复位之后
复位之后,DRAM接口配置寄存器将都复位到它们的缺省值。这些缺省配置中最有意义的是:
·DRAM接口被使不能且被允许变成高阻抗
·刷新间隔新配置为特殊值0,它意味着在接口被重新使能后持续执行刷新周期。
·DRAM接口被设置成为其最慢配置。
大多数DRAM在可以进行一般操作之前需要在电源被首次施加之后有一个100μs到500μs之间的“暂停”,其后是许多刷新周期。
在复位之后,DRAM接口立即处于静止状态,直到DRAM_enable寄存器和DRAM_enable信号被设置。当这些被设置之后,DRAM接口将执行刷新周期(约每400ns一次,视所使用的时钟频率而定),直到DRAM接口被配置。
用户应当负责保证DRAM在通电之后的“暂停”以及在使能DRAM接口之后有足够的时间,以保证在数据传送之前有所需数目的刷新周期出现。
当确认复位后,DRAM接口不能刷新DRAM。然而,解码器芯片所需的复位时间足够短,因此应该可以在DRAM的内容消失之前复位它们,然后重新使能DRAM接口。这在调试(debugging)过程中可能是需要的。
表A.20.8 最大额定值
符号 |
参数 |
最小值 |
最大值 |
单位 |
VDD |
相对地的供电电压 |
-0.5 |
6.5 |
V |
VIN |
任何引脚输入电压 |
GND-0.5 |
VDD+0.5 |
V |
TA |
工作温度 |
-40 |
+85 |
℃ |
TS |
存贮温度 |
-55 |
+150 |
℃ |
表A.20.9 DC工作条件
符号 |
参数 |
最小值 |
最大值 |
单位 |
VDD |
相对地的电源电压 |
4.75 |
5.25 |
电压 |
GND |
地 |
0 |
0 |
电压 |
VIH |
输入逻辑1电压 |
2.0 |
VDD+0.5 |
电压 |
VIL |
输入逻辑0电压 |
GND-0.5 |
0.8 |
电压 |
TA |
工作温度 |
0 |
70 |
℃a温度 |
a、带有TBA线状英尺/分钟的横向气流
表A.20.10 DC电特性
符号 |
参数 |
最小值 最大值 |
单位 |
VOL |
输出逻辑“0”电压 |
0.4 |
Va |
VOH |
输出逻辑“1”电压 |
2.8 |
V |
lO |
输出电流 |
±100 |
μAb |
lOZ |
输出截止漏电流 |
±20 |
μA |
lLZ |
输入漏电流 |
±10 |
μA |
lDO |
RMS电源电流 |
500 |
mA |
CIN |
输入电容 |
5 |
pF |
COUT |
输出/IO电容 |
5 |
pF |
a、 AC参数用VOLmax=0.8V作为测量电平而被指定
b、这是接口的稳定状态驱动能力,瞬间电流可以大很多。
A.20.10.1 AC特性
表A.20.11 对选通的标称值的差
号 |
参数 |
最小时间 |
最大时间 |
单位 |
注释 |
45 |
周期时间,例tPC |
-2 |
-2 |
ns | |
46 |
周期时间,例tRC |
-2 |
+2 |
ns | |
47 |
高脉冲如tRP,tCP,tCPN |
-5 |
+2 |
ns | |
48 |
低脉冲如tRAS,tCAS,tCAC,tWP,tRASP,tRASC |
-11 |
+2 |
ns | |
49 |
周期时间,如tACP/tCPA |
-8 |
+2 |
ns | |
a.信号的驱动强度必须被配置以适应它的负载。
表A.20.12 两个选通之间标称值的差
号 |
参数 |
最小时间 |
最大时间 |
单位 |
注释 |
50 |
选通到选通间的延时,如tRCD,tCSR |
-3 |
+3 |
ns | |
51 |
低电平保持时间,如tRSH,tCSH,tRWL,tCWL,tRAC,tOAC/OE,tCHR |
-13 |
+3 |
ns | |
52 |
选通到选通的预充如tCRP,tRCS,tRCHtRRH,tRPC |
-9 |
+3 |
ns | |
在DRAM中任意两个CAS信号间CAS预充 脉冲例如tCP或RAS上升与与CAS下降之间的预充,如tRPC |
-5 |
+2 |
ns | |
53 |
在禁止前的预充例如tRHCP/CPRH |
-12 |
+3 |
ns | |
a、2个信号的驱动强度须被配置以适应它们的负载。
B.1起始码检测器(Start Code Detector)
B.1.1概述
如前在图11中所示,起始码检测器(SCD)是空间解码器中的第一个块。它的主要用途是在输入数据流中检测MPEG,JPEG和H.261的起始码并用恰当的令牌替换它们。它也允许用户通过微处理器接口访问输入数据流,并完成预格式化和“整理”(tidying up)令牌数据流。记住,起始码检测器对未加工的字节数据或已汇编成令牌格式的数据两者都可以接受。
MPEG,H.261和JPEG的典型的起始码分别为24、16、和8位宽度。起始码检测器对输入数据按字节读取,无论这些数据是从微处理器接口(upi)来或从令牌/字节端口来的,并通过三个移位寄存器使输入数据移位。第一个寄存器是8位并行输入串行输出。第二个寄存器可编程长度为16或24位,在这里起始码被检测。第三个寄存器宽度为15位,用来把数据重新格式化成15位的令牌。还有两个“标记”移位寄存器(SR)与第二和第三移位寄存器并行运行。这些寄存器包含标记以指明数据寄存器中的有关位是否良好。到来的字节不是数据令牌的一部分,起始码检测器不能识别它们。这些字节被允许绕过移位寄存器,而当所有三个移位寄存器被清除(出空)时被输出,这些内容成功地被输出。被识别的非数据令牌用来配置起始码检测器,跳过陷阱,或设置标识。它们也绕过移位寄存器,并被不改变地输出。
B.1.2主要的电路块
起始码检测器的硬件包括10个状态机(State machines)。
B.1.2.1输入电路(scdipc.sch.iplm.M)
输入电路有三种操作方式:令牌、字节和微处理器接口。这些方式允许数据以下面的的任一种形式输入:作为一个未加工的字节流(但仍用两线接口),作为令牌流或由用户通过微处理器接口输入。在所有情况下,输入电路在合适的地方产生数据令牌头,所以它总会输出正确的数据令牌。转换到微处理器接口方式或从微处理器方式转换到其它方式是与系统时钟同步的。微处理器接口可以被强制等待,直到数据流中的一个安全点到达后才获得访问。字节方式引脚决定输入电路是在令牌方式还是在字节方式。此外,在三种方式的任一方式下,都可以做到在开始时通知系统正要对哪一种标准译码。(因此可产生一个CODING_STANDARD令牌)。
B.1.2.2令牌解码器(scdipnew.sch,scdipnem.M)
此块解译到来的令牌并向其它块发出命令。
表B.1.1 所识别的输入令牌
输入令牌 |
发出的命令 |
注释 |
空 |
等待 |
空被除去 |
数据 |
正常 |
把下一字节装入第一个移位寄存器 |
编码_标准 |
绕过 |
刷清移位寄存器,进行填充,输出和转换到旁路方式。对CODING_STANDARD寄存器加载 |
刷清 |
绕过 |
用填充刷清移位寄存器,输出并转换到旁路方式 |
其它(不能识别的令牌) |
绕过 |
用填充刷清移位寄存器,输出并转换到旁路方式 |
注:在移位寄存器被刷清后,编码标准的改变将通过两线接口传送到所有块。这样保证了从一个数据流到另一个数据流的改变发生在整个起始码检测器中某个正确点上。此原则适用于整个说明,所以编码标准的改变可在新流之前流过整个芯片。
B.1.2.3 JPEG(scdjpeg.sch scdjpegm.M)
JPEG中的起始码(标志)是很不同的,以致于JPEG有一个完全属于它自己的状态机。在本项发明中,此状态机处理JPEG标志的检测,长度计算/校核,和清除数据等全部工作。 被检测到的JPEG标志被标记为起始码(带有v_not_t-见后面的文本),而从scdipnew来的命令被废弃(overridden)并被迫旁路。最好用代码来描述其作用过程。
switch(state)
{
case(LOOKING):
if(input==0xff)
{
state=GETVALUE;/*Found a marker*/
remove;/*Marker gets remoyed*/
}
<dp n="d357"/>
state=LOOKING;
break;
case(GETVALUE);
if(input==0xff)
{
state=GETVALUE;/*Oyerlapping markers*/
remove;
}
else if(input==0x0-0)
{
state=LOOKING;/*Wasn’t a marker*/
insert(0xff);/*Put the 0xff back*/
}
else
{
command=BYPASS;/*override command*/
if(lc)/*Does the marker have a length count*/
state=GETLC0;
else
state=LOOKING;
break;
case(GETLC0):
loadlc0;/*Load the top length count byte*/
state=GETLC1;
remove;
break;
<dp n="d358"/>
case(GETLC1)
loadlc1;
remove;
state=DECLC;
break;
case(DECLC):
lcnt=lcnt-2
state=CHECKLC;
break;
case(CHECKLC):
if(lcnt==0)
state=LOOKING;/*No more to do*/
etse if(lcnt<0)
state=LOOKING;/*generate Illegal_Length_Error*/
else
state=COUNT;
break;
case(COUNT):
decrement length count until1
if(lc<=1)
state=LOOKING;
}
B.1.2.4输入移位器(scinshft.sch,scinshm.M)
本块的基本作用很简单。它从输入电路取数据的一个字节,把它装入移位寄存器,移位后输出。然而,它也服从输入解码器来的命令,并处理从其它方式到旁路方式或从旁路方式到其它方式的变换(刷清其它移位寄存器):在接受到一个旁路命令时,不把有关字节装入移位寄存器。而将“垃圾(rubbish)”(tag=1)移出,使其它移位寄存器中保留的任何数据被迫输出。然后此块等待“已刷清”信号,此信号指明此“垃圾”已出现在令牌重建器。输入字节于是直接传到令牌重建器。
B.1.2.5起始码检测器(scdetect.sch,scdetm.M)
此块包括两个移位寄存器,起始码检测逻辑和“有效内容”检测逻辑。两个移位寄存器的宽度可编程为16或24位。MPEG起始码要求全部24位,而H.261只要求16位。
在本发明中,第一个移位寄存器是为数据用的。第二个移位寄存器携带标志。这些标志表明数据移位寄存器中的各位是否有效-在移位寄存器中没有间隙和停止(从两线接口的意义上说)。但是当它们正被刷清时,它们包含的位可以是无效的(垃圾)。在检测到一个起始码时,标志移位寄存器的一些位被设置,以便使检测器移位寄存器的内容为无效。
只有在移位寄存器的所有内容都有效时才能检测到起始码。非字节排列好的起始码可被检测到并被作出标记。此外,在检测到一个起始码时,在重叠起始码已被校验以前,此起始码不能被确切地标识。为了实现这一功能,被检测到的起始码的“值”(跟随在起始码之后的一个字节)被移位,直接经过scinshift,scdetect,进入scoshift。由于它已经到达scoshift而不去检测另一起始码,重叠的起始码已被消除。这个起始码就被标识为有效起始码。
B.1.2.6输出移位器(scoshift.sch,scoshm.M)
输出移位器的基本作用是从scdetect取串行数据(及标记),把数据组合(pack)成15位字并输出。其它功能为:
B.1.2.6.1数据填充(Data padding)
输出由15位字所组成,但输入却可以是任意位数。所以为了刷清(flush),需要增加位数使最后的字达到15位。这些额外的位称作填充,它们必须被霍夫曼(Huffman)块识别并清除。填充被定义为:
在数据的最后一位以后,插入一个“零”,后面随着足够多的“1”,形成一个15位的字。
包含填充的数据字输出时带有一个低扩展位,表明它是数据令牌的结尾。
B.1.2.6.2“已刷清”(flushed)的产生
根据此项发明,产生“已刷清”信号的作用包括检测所有移位寄存器都被刷清的时刻,并对输入移位寄存器发信号。当输入移位器插入的“垃圾”达到输出移位器的终点,而输出移位寄存器已完成它的填充时,就产生一个“已刷清”信号。在输入移位器能安全进入旁路方式以前,此“已刷清”信号必须通过令牌重建器。
B.1.2.6.3有效起始码的标识
如果scdetect表明它已发现一起始码,填充被完成,当前数据被输出。起始码的值(下一字节)通过检测器被移位,以消除重叠起始码。如果此“值”达到输出移位器时,没有检测到其它起始码,则它不被重叠。此值将带着v_not_t(ValueNot.Token)标识输出,以表明它是一个起始码值。但是,如当输出移位器正等待该值时,检测到另一起始码(用scdetect检测到),则产生一重叠起始(overlapping_start_error)错误。在此情况下,第一个值被作废,系统随后等待第二个值。第二个值也可能被重叠。这样重复以上步骤,直到发现一个未重叠的起始码为止。
B.1.2.6.4起始码以后的整理工作
在已检测到并输出了一个好的起始码以后,当数据(不是垃圾)开始到达时,产生一新数据头。
B.1.2.7数据流重建器(sctokrec.sch,sctokrem.M)
数据流重建器有双线接口输入:一个为旁路的令牌从scinshift输入,另一个为组合数据和启始码从scoshift输入。只有当前令牌(从两个来源中的任一个)已被完成(低扩展位已到达)时,才允许在两个来源之间交换。
B.1.2.8起始值转换成起始号(scdromhw.sch,schrom.M)
把起始值变换为令牌的步骤分为两步。本块主要处理依赖编码标准的问题,它把520多个可能的码减少到16个与编码标准无关的索引号。
如前所述,起始值(包括JPEG的起始值)和所有其它数值的不同处在于标记(value_not_token)。如v_not_t是高,本块就根据CODING_STANDARD把4位或8位值变换为与标准无关的4位起始号,并对任何未被识别的起始码作出标识。
起始码号列出如下:
表B.1.2 起始码号(索引)
起始/标记码 |
索引 |
结果令牌 |
not_a_start_code |
0 | |
sequence_start_code |
1 |
SEOUENCE_START |
group_start_code |
2 |
GROUP_START |
picture_start_code |
3 |
PICTURE_START |
slice_start_code |
4 |
SLICE_START |
user_data_start_code |
5 |
USER_DATA |
extension_start_code |
6 |
EXTENSION_DATA |
sequence_end_code |
7 |
SEQUENCE_END |
JPEG标记 |
DHT |
8 |
DHT |
DQT |
9 |
DQT |
DNL |
10 |
DNL |
DRI |
11 |
DRI |
能被映射到MPEG/H.251令牌的JPEG标 |
SOS |
picture_start_code |
PICTURE_START |
SOI |
sequence_start_code |
SECUENCE_START |
表B.1.2 起始码号(索引)
Start/Marker Code |
Index(start_number) |
Resulting Token |
EOI |
sequence_end_code |
SEQUENCE_END |
SOF0 |
group_start_code |
GROUP_START |
产生扩展或用户数据的JPEG标记 |
JPG |
extension_start_code |
EXTENSION_DATA |
JPGn |
extension_start_code |
EXTENSION_DATA |
APPn |
user_data_start_code |
USER_DATA |
COM |
user_data_start_code |
USER_DATA |
注:所有未被识别的JPEG标记产生一个extn-start-code索引 |
B.1.2.9起始码号到令牌的转换(sconvert.sch,sconverm.M)
变换的第二步是把上述的起始码号(或索引)转换成令牌。在合适的地方本块也处理令牌扩展,废弃扩展,用户数据和检索方式。检索方式是在某一随机点进入数据流的一种方法。检索方式可被设置为下面八个值之一:
0:正常操作——查找下一起始码。
1/2:未在空间解码器上实现的系统的级检索。
3:检索序列或更高者
4:检索组或更高者
5:检索图象或更高者
6:检索片(slice)或更高者
7:检索下一起始码
在需要的起始码(或句法上(in the syntax)的更高者)被检测到以前,任何非零检索方式都使数据被废弃。
此部件也对图和片的起始令牌加上令牌扩展:
PICTURE_START用PICTURE_NUMBER作为扩展。PICTURE_NUMBER是图象的一个四位的计数值。
SLICE_START用SVP(片垂直位置)作为扩展。它是起始码的“值”减1(MPEG,H.261),或是起始码的“值”减OXDO(JPEG)。
B.1.2.10数据流的格式化(scinsert.sch,scinserx.M)
在本项发明中,数据流的格式化关与PICTURE_END,FLUSH,CODING_STANDARD,SEQUENCE_START令牌的有条件插入和STOP_AFTER_PICTURE事件的产生有关。它的功能最好用下面的软件加以简化和描述:
switch(input_data)
case(FLUSH)
1.if(in_picture)
output=PICTURE_END
2.output=FLUSH
3.if(in_picture & stop_after_picture)
sap_error=HIGH
in_picture=FALSE;
4.in_picture=FALSE;
break
case(SEQUENCE_START)
1.if(in_picture)
output=PICTURE_END
2.if(in_picture & stop_after_picture)
2a.output=FLUSH
2b.sap_error=HIGH
in_picture=FALSE
3.output=CODING_STANDARD
4.output=standard
5.output=SEQUENCE_START
6.in_picture=FALSE;
break
case(SEQUENCE_END)case(GROUP_START):
1.if(in_picture)
output=PICTURE_END
2.if(in_picture & stop_after_picture)
<dp n="d365"/>
2a.output=FLUSH
2b.sap_error=HIGH
in_picture=FALSE
3.output=SEQUENCE_END or GROUP_START
4.in_picture=FALSE;
break
case(PICTURE_END)
1.output=PICTURE_END
2.if(stop_after_picture)
2a.output=FLUSH
2b.sap_error=HIGH
3.in_picture=FALSE
break
case(PICTURE_START)
1.if(in_picture)
output=PICTURE_END
2.if(in_picture & stop_after_picture)
2a.output=FLUSH
2b.sap_error=HIGH
3.if(insert_sequence_start)
3a.output=CODING_STANDARD
3b.output=standard
3c.output=SEQUENCE_START
nsert_sequence_start=FALSE
4.output=PICTURE_START
in_picture=TRUE
bfeak
default:Just pass it through
B.2霍夫曼(Huffman)解码器和Parser
B.2.1引言
本节按照本项发明描述Huffman解码器和Parser电路。
图118是Huffman解码器和Parser的高级框图。为了清晰起见,许多信号和总线在此图上都被略去了,特别是在数据被向后馈送的几个地方(在图示的大循环之内)。实质上,本项发明的Huffman解码器和Parser由许多专用处理部件组成(沿图的底部示出)。这些部件被一可编程状态机所控制。
用“输入移位”块从已编码数据缓存器中接受数据。在这里,主要将遇到两类信息:已编码数据和起始码。已编码数据由数据令牌所携带的。起始码已被起始码检测器用它们各自的令牌所替换。也可能遇到其它令牌,但所有令牌(除数据令牌以外)都被同样对待。令牌(起始码)作为特殊情况对待,数据的绝大多数仍将被编码(在H.261,JPEG或MPEG中)。
在本项发明中,由数据令牌携带的所有数据被传送到Huffman解码器,它们是用串行方式(一位一位)地传送的。当然,此数据包括许多不是Huffman编码的字段,但它们是以固定长度编码的。然而,这个数据仍以串行方式送到Huffman解码器。如果是Huffman编码数据,则Huffman解码器只完成解码的第一步。在这一步中,真正的Huffman码被一索引号所代替。如果在要解码的特定码表中有N个不同的Huffman码,则这个“Huffman索引”在0到N-1的范围内。另外,Huffman解码器有一种“noop”,即“不操作”方式。此方式允许Huffman解码器对数据或令牌信息不作任何处理而传送到下一级去。
数据索引单元(Index to Data Unit)是线路中相对简单的一个块。它完成查找表操作。它从Huffman解码处理的第二级中得出它的名字。在这一级中,由Huffman解码器中得到的索引号用一简单的查找表变换成真正的已解码数据。数据索引单元与Huffman解码器合作,作为单一逻辑单元工作。
下一个块是ALU,它用来实现对已解码数据的其它变换。数据索引单元适宜作相对地任意映射,ALU可用在算法更合适的地方。ALU包含一个寄存器组。ALU能操作它来实现解码算法的各种部分。特别是保持矢量预测和DC预测的寄存器也包含在这块中。ALU基于一带操作数选择逻辑的简单加法器。它也包含符号扩展类型运算的专用电路。很可能提供移位操作,但这可能在串行方式下完成,不会有桶形移位器(barrel shifter)。
按照本项发明,令牌格式化器是视频Parser的最后部分。其任务是把已解码的数据最后地装配到令牌。这些令牌可被传送到解码器的其余部分。至此,解码器为这幅特定图象要用到的令牌全都有了。
Parser状态机宽度为18位,为了与双线接口一起工作而采用它。其任务是协调其它部件的操作。实质上,它是一个很简单的状态机,它产生一很宽的“微码”控制字。此控制字被传送到其它部件。图118表明指令字与数据一起从一个块传送到另一块。情况确实是这样。了解通过双线接口控制不同块之间的传输是很重要的。
在本项发明中,在视频Parser中每个块之间有一个双线接口。另外,Huffman解码器对串行数据,即输入移位器(inshifter)一次一位地输入数据,和控制令牌这两者都可工作。相应地,有两种操作方式。如通过数据令牌对Huffman解码器输入数据,则数据一次一位地通过移位器。再有,在输入移位器和Huffman解码器之间有两线接口。然而,其它令牌不是一次一位(串行)移位的,而是在令牌的头部移位。如输入一个数据令牌,则包含地址信息的头部被删除,在地址后面的数据被一次一位地移位。如输入不是一个数据令牌,则整个令牌,即头部和全体,立即全都送到Huffman解码器。
在本项发明中,了解视频Parser的两线接口的与众不同在于它有两根有效线。这一点是重要的。一根线是串行有效,另一根线是令牌有效。另外,两根线不能被同时确认。一根或另一根可以被认定,或者,如不存在有效数据,则虽有两根有效线,两者都不可能被认定。应该知道,在另一方向只有一根接受线。然而,这不是一个问题。Huffman解码器知道它需要串行数据还是令牌信息,这取决于当前语法下一步该做什么。因而,有效信号和接受信号被相应地设置。从Huffman解码器送一个接受信号Accept到输入移位器(inshifters)。如果有合适的数据或令牌存在,输入移位器就送出一个有效信号。
例如,一个典型的指令可以对一个Huffman码解码,在数据索引单元the Index to Data Unit中对它作变换,在ALU中修改其结果,然后此结果被形成一个令牌字。一个单一的微码指令字被产生。这个字包含了做这项工作的全部信息。命令直接送到Huffman解码器,后者请求从“输入移位器”部件传来的数据一位一位地传送,直到它把一个完整的符号解码完毕。控制令牌是并行输入的。一旦有输入时,已解码的索引值和原来的微码字一起被传送到数据索引单元(the Index to Data Unit)。注意,Huffman解码器将需要几个周期来完成这项操作。实际上,需要的周期数确实是由要被解码的数据决定的。数据索引单元将用一张表来映射这个值。这张表在微码指令字中被识别。此值又被传送到下一个部件,ALU。原来的微码字被一起传送过去。一旦ALU完成了适当的操作(周期数又可与数据有关),就把合适的数据和微码字一起传送到令牌格式化部分。微码字控制令牌字形成的方式。
ALU有许多状态线或称“条件码”,这些码送回到Parser状态机。这就允许该状态机执行条件转移指令。实际上,所有指令都是条件转移指令。可选择的条件之一是硬接线到“False(假)”。用选择这一条件的方法,可构成一“非转移”指令。
按照本项发明,令牌格式化器有两个输入:从ALU来的一个数据字段和/或从Parser状态机来的常数字段。另外,有一个指令,它告诉令牌格式化器从一个源应取多少位,然后从另一源取来总共凑足8位时所需的其它位。例如,HORIZONTAL_SIZE有一个8位字段,它是一个不变的地址,表明它是一个HORIZONTAL_SIZE令牌。在这一情况下,8位都从常数字段来,没有数据从ALU来。然而,如果是一个数据令牌,大概将有6位从常数字段来,而表明彩色分量的低两位则从ALU来。相应地,令牌格式化器取此信息并把它放入一令牌,以供系统的其它部分所用。注意,上例中来自每个源的位数只是为了说明的目的,一个对本行具有一般技能的人会理解到,任一源来的位数都是可变的。
ALU有一组(bank)计数器。计数器用来对整个图象的构造计数。图象的尺寸被编程送入与计数器有关的寄存器。“微程序设计员”把这些计数器看作寄存器组的一部分。若干条件码是从这个计数器组输出的。计数器组允许基于“图象开始”“宏块开始”等情况的条件转移。
注意,Parser状态机也称作“多路分路状态机“DemultiplexState Machine”。本文件中两个名词都用。
输入移位器
在本项发明中,输入移位器是线路中很简单的一块。它由两级流水线数据通路(“hfidp”)和控制用的Zcells(“hfi”)组成。
在第一级流水线,进行令牌解码。在这一级只有数据令牌可被识别。数据令牌中包含的数据一次一位地移入Huffman解码器。第二级流水线是移位寄存器。在数据令牌最末后的字中采用了特殊编码,所以可能通过已编码数据缓存器发送任意数目的位。下面是最后数据字的所有可能的模式。
表B.2.1 在最后数字位中的可能模型
E |
D |
C |
B |
A |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
No.of Bits |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
None |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
x | x | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 | |
3 |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
4 |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
5 |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
6 |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
7 |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
8 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
1 |
9 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
1 |
10 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
1 |
11 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
1 |
12 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
1 |
13 |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
x |
0 |
14 |
当在移位寄存器中,数据位一位一位向左移时,“0后跟随的都是1”的位模式是期待的(填充)。这表明在移位寄存器中剩余的各位是无效的。他们被废弃。注意,这一动作只发生在数据令牌的最后字。
如前所述,所有其它令牌是并行传入Huffman解码器的。他们仍旧被装入第二级流水线,但不发生位移。注意,数据头被废弃,完全不送到Huffman解码器。提供两条“有效”线(out_valid和serial_valid)。在给定时间只有一条线被认定,它表明在该时刻哪种类型的数据被提供。
B.2.2 Huffman解码器
Huffman解码器有许多操作方式。最显著的是它能对Huffman码解码,把它们变成Huffman索引号。另外,它能对其长度(以一些位表示)由指令字决定的固定长码解码。Huffman解码器也从输入移位(inshift)块接受令牌。
Huffman解码器包含一很小的状态机。它在对块级(block-level)信息解码时使用。这是因为Parser状态机作出决定所需要的时间太长。(因为它必须等数据流过数据索引单元(the Index toData Unit)和ALU以后,才能对该数据作出决定并发出一条新命令)。在使用本状态机时,Huffman解码器自己向数据索引单元和ALU发命令。Huffman解码器的状态机不能控制所有的微码指令位,所以它不能对其它部件发出全范围的命令。
B.2.2.1操作原理
本项发明的Huffman解码器在解Huffman码时,采用一种计算方法把到来的码解码成Huffman索引号。这个号在0到N-1之间(对一个有N个项(entries)的码表)。从输入移位器一位一位地接收位信号。
为了便于控制机构的操作,需要许多表。这些表规定对于一个码中每个可能的位数(1到16位),具有该长度的码有多少个。可以料到,这个信息用来规定一个普通的Huffman码在典型情况下是不够充分的。然而,在MPEG,H.261和JPEG中,选用的是Huffman码,以致单是这一信息就能够规定Huffman码表。对此只有一个不幸的例外:从H.261来的T系数表(T Coeefficient table)。此表也用在MPEG中。这就要求有一张附加的表,此表在别处被说明。(在H.261中有意引入这个例外,以避免起始码仿效)。
Huffman解码器中所用的一些表与在JPEG中传送的表精确地相同,了解这一点是很重要的。这就允许直接使用这些表。而如果是其它Huffman解码器设计,则将要求从传送的表生成内部表。这种转换就可能要求额外的存储器和额外的处理。因为在MPEG和H.261(它具有上述的例外)中的表可以用同样方式描述,一个多标准解码器变成可实行的了。
下面的一段“C”程序说明解码过程:
int total=0;
int s=0;
int bit=0;
unsigned long code=0;
int index=0;
while(index>=total)
{
if(bit>=max_bits)
fail(″huff_decode:ran off end of huff table\n″);
code=(code<<1)Inext_bito;
index=code-s+total;
total+=codes_per_bit[bit];
s=(s+codes_per_bit[bit])<<1;
bit++;
}
一般说,此过程被直接变换成硅片的实现,虽然还可利用这样的事实,即在需要某些中间数值之前,可以先以时钟相位将它们计算出来。
从源码段我们看到:
EQ1.totaln+1=totaln+cpbn
EQ2.′sn+1=2(′sn+cpbn)
EQ3.coden+1=2coden+bitn
EQ4.indexn+1=2coden+bitn+totaln-′sn
然而,在硬件中证明一个修改过的方程组更容易使用。在此方程组中变量“shifted”被用来代替变量“S”。在这一情况下:
EQ5.shiftedn+1=2shiftedn+cpbn
其结果是:
EQ6.:n=2shiftedn将它如此地代回方程4,可看出:
EQ7.indexn+1=2(coden-shiftedn)+totaln+bitn
除了计算连续的“索引”值以外,还必须知道计算何时完成。从“C”源码段,可看出,当:
EQ8.indexn+1<totaln+1时我们就完成了。
用公式7和公式1代入,可看出,当:
EQ9.2(coden-shiftedn)+bitn-cpbn<0时,我们就完成了。
在本发明的硬件实施过程中,方程7和方程9中的公共项(coden-shifted)比这些方程的其余部分先一相位计算,以给出最后结果和计算“已完成”的信息。
一点警告:在不同的“C”码片段中,特别在特性编译码(behavioral compiled code)Huffman解码器和在Sm4code方案(projects)中,“C”程序段几乎是直接被使用的,但变量“S”实际上被称作“shifted”。所以有两个不同的变量被称作“shifted”。一个是在“C”码中,而另一个是在硬件实现中。这两个变量相差一个因子2。
B.2.2.1.1数据位的取反(inverting)
对Huffman码正确解码还需要另外一点知识。这就是已编码数据的极性。原来H.261和JPEG采用相反的约定。它本身反映在这一事实中,H.261的起始码各位为0,而在JPEG中的标志字节各位为1。
为了对两种约定都能处理,当已编码数据被读入Huffman解码器时,必须把已编码数据的各位取反,以便对H.261风格的Huffman码解码。显而易见,用一个异或门就可完成。注意:只对Huffman码翻转,在对固定长码解码时数据是不反相的。
MPEG采用两种约定的混合。对从H.261来的方式,采用H.261的协定。对那些从JPEG来的(DC内部系数的解码),采用JPEG协定。
B.2.2.1.2变换系数表
使用H.261及MPEG中的变换系数表时,会有若干异常情况。首先,MPEG中的表是H.261表的一个超集(super-set)。在本发明的硬件实现中对这两种标准不分彼此;这意味着,含有来自表的扩展部的码(即MPEG码)的H.261码流将被“正确”地解码。当然,压缩标准的其它方面很可能受损。例如:这些扩展码会在H.261内引发起始码的仿真。
其次,变换系数表具有一种异常,该异常在码长为六位时出现,它意味着不能正常地用按位码(codes_per_bit)表来描述。这些六位码字有规则地被代用码字所代替。在编码器中,首先以正常方式编码获得正确结果。然后,对于所有六位或更长的码,用一次简单的查表操作将其前六位用另外的六位替代。根据本发明,在解码器中,就在第六位解出之前,解码过程中断,使用查表方法替换码字,然后继续解码。
在本情况下,只有十种可能出现的六位码,因而所需的查找表容量极小。对操作更为有利的是,经过操作之后,码的高两位不变。因此无必要使用真的查找表,由少量门搭成的电路即可完成适当的变换。做此工作的模块称作“hftcfrng”。这种类型码的替换在此可称为“环”,因为可能码集的每个码都用该集另一个码替代(不引入新码,也不消去旧码)。
此外,对块首第一个系数使用了独特的实现方法。既然如此,就不可能出现‘本块终止’的码,因此,对变换系数表进行了改进,使得最经常出现的符号可以使用这个在其它情况下被认为是本块终止的码。这就可以省去一位。结果表明,使用本发明的解码结构体系,容易适应上述改进。简言之,对于第一系数的第一位,如果“索引”(“index”)为零值,则认为解码“已经完成”。此外,对单独的一位解码之后,“索引”只有两个可能值,不是0就是1,只须测试一位即可。
B.2.2.1.3寄存器和加法器的位数
本发明的Huffman解码器可处理可能长达16位的Huffman码。然而,解码机只有8位宽度。这是可能做到的,因为已知的解出的Huffman索引的最大值是255。事实上,这只在扩展的JPEG中才出现;在当前应用中,最大极限比此稍低(但是大于128,因此7位仍嫌不足)。
结果表明,对于所有合法的Huffman码,不但“索引”的最终值,而且所有中间值也都在0至255的范围内。但是,对于非法码,即企图对一个不在当前码表内的码进行解码时(该码可能因数据出错所致),索引值就可能超出255。由于我们用的是八位机,有可能在译码终了时,因为告知出错的各较高有效位被丢弃,“索引”的终值并未超出255。因此在解码中不论何时如果指数值大于255(即:形成索引的加法器进位),就出现错误并放弃解码。
“码”的12位被保存下来。对于译Huffman码来说,这并无必要,8位寄存器本应已经够用。需要这些高位是为了可以读出多至12位的固定长度码。
B.2.2.1.4对于固定长度码的操作
就固定长度的码而言,“按位码”的值强制为零。这就是说,“total”和“shifted”在整个操作过程中保持为零,因而“index”与码相同。事实上,加法器等等只准为“index”产生一个8位的值。因此,在对固定长度码解码时,输出字的各个高位直接取自“码”寄存器。当解Huffman码时,这些高位被强制为零。
以明显的方式推测是否已从输入端读取足够的位数。比较器将所希望的位数与“位”计数器相比较。
B.2.2.2对系数数据的译码
根据本发明,Parser状态机一般只用于相当高级的解码。8乘8数据块以内的最低级译码,不用该状态机直接处理。Parser状态机以“对一个块进行解码”的形式向Huffman解码器发命令。在一个专用的状态机(实质上它在Huffman解码器之内)的控制下,Huffman解码器、数据索引单元(Index to Data Unit)和算述逻辑单元协调一致地工作。这种安排容许对以熵编码的系数数据进行性能极高的解码。在这种操作方式下,还有另外一些反馈路径在起作用。例如:在对VLC解码以获得SIZE(码宽)和RUN(运行)信息的JPEG的解码中,SIZE信息直接由数据索引单元的输出反馈至Huffman译码器,以告知Huffman解码器有多少FLC位要读。此外,还有若干加速器作补充。例如,用同一个例子,在数据索引单元这一级之前观察Huffman索引值,用这种方法抑制所有VLC值产生SIZE为零值。这就是说,只要SIZE值非零,Huffman解码器可以在获知SIZE的实际值之前就进行读取FLC的一位。也就是说,不浪费时钟周期,因为读FLC第一位与在数据索引单元内完成查找所需的单个时钟周期相重叠。
B.2.2.2.1 MPEG与H.261 AC系数数据
图127表示在MPEG及H.261中AC系数的解码方法。展示Huffman解码器操作详情的流程图见图119。
过程从读取VLC码开始。在事件的正常进程中,Huffman索引被直接映射成表示六位RUN和表示系数绝对数的值。然后读取一位FLC以给出系数的符号。ALU将该符号位与系数绝对值组合,得到系数的终值。
注意,此处的数据格式为符号-数值,这一操作不会有什么困难。RUN值被转送到六位辅助总线,而系数值(LEVEL)则送到正常的数据总线。
存在两种特殊情况且在由索引变为数据的操作之前先观察经过解码的索引值,这两种情况会入陷,它们是块终止(EOB)和ESC(Escape)编码数据。如果是EOB,出现此情况的事实传入数据索引单元及ALU单元,所以令牌格式化器(Token Formatter)可以正确地关闭开着的DATA令牌。
Escape编码数据较为复杂。RUN的首六位被读取,并直接传入数据索引单元并存入ALU单元。然后读取FLC的一位。这就是在MPEG及H.261中描述的8位Escape码的最高有效位,它给出电平(level)的符号。符号直接读入本装置,这是因为对于负值和正值,必须向ALU发出不同的命令,从而容许ALU将位流中二的补码值变换为符号数值。不论是正是负,接着读取FLC的余下七位。如果其值为零,就必须再读8位。
在本发明中,Huffman译码器的内部状态机负责产生既控制自己也控制数据索引单元、ALU及令牌格式化器的各种命令。如图124所示,Huffman解码器的指令来源于下列三者之一:Parser状态机,Huffman状态机,贮存在某寄存器中的一条指令而该指令此前从Parser状态机接收。简而言之,来自Parser状态机的原始指令(它使Huffman状态机接过控制并读取系数值)保留在寄存器内,即每次需要新VLC时就用到它。译码用的所有其余的指令都由Huffman状态机提供。
B.2.2.2.2 MPEG DC系数数据
这些数据的处理方法同JPEG DC系数数据。使用相同的(可装入)表,由控制的微处理器负责确保各表的内容正确。与MPEG标准的唯一真正差别在于各个予测器复位至零(如同在JPEG内),而为此进行的校正则在反向量化器中完成。
B.2.2.2.3 JPEG系数数据
图120是本发明对JPEG AC系数解码的硬件框图。由于DC系数的过程在本质上是JPEG过程的简化,本方块图对AC及DC系数均适用。对前述MPEG AC系数方块图的唯一真正补充是,“SSSS”字段被反馈回来而可能被当作Huffman解码器命令的部分,以规定要读取的FLC位数。命令的余部由Huffman状态机提供。
图121展示对AC和DC系数作Huffman解码的流程图。
首先来处理AC系数的解码过程。本过程从使用适当的表(有两张AC表)读取一个VLC值开始。在数据索引单元中,Huffman索引变换成RUN及SIZE值。在Huffman索引级(stage),有两个值被抑制(trapped),它们分别与EOB及ZRL对应。这是不读取FLC各位的唯一的两个值。如果解码索引不是该两值之一时,Huffman解码器立即读取FLC的一位,与此同时,它等待数据索引单元完成查表操作,以确定真正需要几位。如果是EOB,在Huffman解码器内的Huffman状态机不再作进一步的处理,而从Parser状态机读取另一条命令。
如果是ZRL,就不需要各个FCL位,但是块尚未结束。假若如此,Huffman译码器立即开始再对下一个VLC解码(使用如前的同一张表)。
在检测伴随ZRL及EOB而产生的索引值方面,有一个特殊的问题。这是由于(与H.261及MPEG不同)Huffman各表是可上级装入(down-loadable)的。对JPEG的两张AC表,各提供两个寄存器(一个给ZRL,一个给EOB)。当表上级装入时,两寄存器便装入。它们保持索引值与适当符号有关。
ALU必须将SIZE位FLC码变换成适当的符号—数值。当表上级装入时,符号数值便装入。它们保持索引值与适当符号有关。
ALU必须将SIZE位FLC码变换成适当的符号—数值。这可以这样来完成,首先将符号有错的值进行符号扩展。如果符号位被置位,则将其余各位求反(的补码)。
如果是一些DC系数,则在Huffman解码阶段的决策稍为容易,因为没有与ZRL字段相当的东西。使要读取的FLC各位为零的唯一符号是指示DC差值为零的那个符号。这又一次在Huffman索引阶段受到抑制(trapped),因为为每张(可上级装入的(downloadable))JPEG DC表提供了一只寄存器,以保持该索引。
本发明的ALU有任务保留最后的DC系数值的一份拷贝,用来形成最终的经过解码的DC系数(这通常叫预测)。需要四个预测值,为四个有效彩色分量各设一个。当DC差值已被解码时,ALU加上适当的预测值以形成解码后的值。这值又一次贮存起来,作为该彩色分量下一DC差的预测值。由于DC系数有正有负(因为有DC偏置),要求从二的补码变换到符号-数值。然后,该值输出,随同的RUN为零。事实上,完成这最后几个阶段工作的某几阶段,其指令并非由Huffman状态机提供。它们只是由Parser状态机执行的。
与AC系数情况相似,ALU必须由FLC的各SIZE位形成DC差。但是,在本情况下,需要一个二的补码值加到预测值上去。这可以形成如下:首先如前用错误的符号进行符号扩展。如结果为负,则必须加1以产生正确的值。当然,可以将进位位塞进加法器,用这样的方法在加预测值的同时把1加进去。
B.2.2.3出错处理
出错处理值得一提。所发现的错误来源实际上有以下四种:
·超出表的尾。
·希望是令牌,却是串行数据。
·希望是串行数据,却是令牌。
·一块中的系数过多。
第一种错误在两种场合下出现。如果位计数器到达16(合法值是0至15),则出错,因为最长的合法Huffman码是16位。如果索引的任一中间值超过255,则出现如B.2.2.1.3所述的错误。
第二种错误出现在当希望是令牌时,却遇到串行数据。第三种错误出现在相反的情况。
最后一种错误出现在一个块内有过多系数的情况下。这实际上是在数据索引单元内检测到的。
不论哪种情况出现,错误在Huffman错误寄存器内记下,Pars-er状态机被中断。处理错误并发出必要的修复命令,这是Parser状态机的责任。
为了确保正确的操作,在中断时刻,Hfffman状态机与Parser状态机结合。当Huffman解码器中断Parser状态机时,可能有一条新的命令正在Parser状态机的输出等待着被接受。Huffman解码器不会在它中断Parser状态机之后的两个完整周期内接受这条命令。这就容许Parser状态机除去曾在那里的命令(它不应在现在执行),而将它换成一条合适的命令。在这两个周期过去后,Huffman解码器恢复正常操作。如果那里有一条有效命令,就接受该命令。否则就什么也不做,直到Parser状态机提供一条有效命令。
不论出现何种错误,“Huffman错误”的事件位(event bit)被置位。如果屏蔽位(mask bit)被置位,则块将停止,控制的微处理器也将以正常方式被中断。
在某些场合下,看起来象是错误的东西,实际上却不是错误,这就带来了复杂情况。这种情况出现的最重要场合是在读取宏块的地址时。在MPEG、H.261和JPEG的句法中,在预期为宏块地址的地方出现令牌是合法的。如果这种情况合法地出现,Huffman错误寄存器被装入零(意为无错误),但是Parser状态机仍旧被中断。Parse状态机的码必须识别出这是“无错误”状态,并且按此作出响应。在这种情况下,则“Huffman错误”的事件位将不置位,块也不停止作处理。
必须对付几种情况。第一种,令牌立即出现,前面没有一些串行位。如果真如此,本来会出现“希望串行数据,却是令牌的错误”。但是,实际上出现刚才描述的“无错误”错误。
第二种,令牌之前有少数几个串行位。在此情况下,形成一决定。如果令牌之前的各位都是1(别忘了在H.261及MPEG内编码数据是反的,所以在编码数据文件中,这些位都是零),因此不出错。但是如果其中有零,它们就不是有效的装填位,于是已出错,并且确实是“希望串行数据,却是令牌”的错误。
第三种,令牌之前有许多位。在此情况下,进行相同的决定。如果所有16位都是1,它们被当作装填位,就出现一次“无错误”错误。如果其中有零,则出现“超出Huffman表范围”的错误。
另一种不希望出现令牌的场合是在JPEG中。当处理一些Huff-man表或量化器表时,在同一标记段(Marker segment)内可以出现任意数量的表。Huffman解码器不知道此数量。因此在完成每一张表后,它读取另一个4位FLC,认为这是新表的号码。但是如果新的标记段开始的话,会遭遇令牌而不是4位FCL。这一要求不可预见,因此加入了一个“无视错误(Ignore errors)”的命令位。
B.2.2.4 Huffman命令
这里是Parser状态机用以控制Huffman解码器部件的一些位及其定义。注意,数据索引单元的一些命令位也包含在本表内。从微程序编程员的观点看,Huffman解码器和数据索引单元象一个紧凑的逻辑部件那样工作。
表B.2.2 Huffman解码器命令
位 |
名称 |
功能 |
11 |
Ignore Errors(忽视错误) |
用于禁止在某些情况下发生的错误。 |
10 |
Download(下装) |
命名用于卸装的表,或是将数据卸入此表。 |
9 |
Alutab(ALU表) |
使用ALU寄存器来的信息去指定表号(或FLC的位数)。 |
8 |
Bypass(绕过) |
绕过Index to Data单元 |
7 |
Token(令牌) |
对令牌(而不是对FLC或VLC)译码。 |
6 |
First Coeff(首系数) |
选择首系数技巧,用于Tcoeff表及其它特殊方式。 |
5 |
Special(特别指令) |
如该位置位,Huffman状态机应接管控制。 |
4 |
VLC(非FLC) |
指定VLC或FLC。 |
表B.2.2 Huffman解码器命令(续)
位 |
名称 |
功能 |
3 |
Table[3] |
指定VLC要用的表 |
2 |
Table[2] |
或FLC要读取的位数 |
1 |
Table[1] | |
0 |
Table[0] | |
B.2.2.4.1读FLC
在本方式中Ignore Errors,Download,ALutab,Token,First Coeff,Special和VLC均为零,Bypass被置位,因为无索引到数据的变换存在。
在表[3:0]中的二进制数指出要读那几位。
数字0到12是合法的,值零确实读0位(如所希望的)且该指令是Huffman解码器NOP指令,值13、14和15意味不工作,当Huffum状态机表示用“SSSS”作为FLC的位数去读时,其值为15。
B.2.2.4.2读VLC
在本方式中,Ignore Errors,Download,Alutab,Token,First Coefficient和Special为零。VLC为1。Bypass通常是0,因此从索引到数据的变换存在。
在本方式中,Token,First Coefficient和Special均为零,VLC为1。
Table[3:0]中的二进制数指示要用表,如下
表B.2.3 Huffman表
Table[3:0] |
要用的VLC表 |
0000 |
TCoefficient(MPEG及H.261) |
0001 |
编码块样本 |
0010 |
宏块地址 |
0011 |
活动向量数据 |
0100 |
内M型 |
0101 |
预测的M型 |
0110 |
内插的M型 |
0111 |
H.261 M型 |
10x0 |
JPEG(MPEG)DC Table 0 |
10x1 |
JPEG(MPEG)DC Table 1 |
11x0 |
JPEG AC Table 0 |
11x1 |
JPEG AC Table 1 |
请注意,如果保持在RAM内表(即JPEG表),不使用位1,因此表的选择出现两次。如果构成的是非基线(non-baseline)JPEG译码器,就有四张DC表和四张AC表,就需要Table[1]。
如果Table[3]为零,则输入数据取反,例如,为了将各表正确地如H.261形式读出。如果Table[3:0]=0,则也进行适当的Ring(环)修正。
B.2.2.4.3 NOP指令
正如前述,读一个各位为零的FLC的动作被当作一个不操作(NoOperation)指令来使用。没有数据从输入端口读出(令牌也好,串行数据也好),Huffman解码器随同指令字输出数值为零的数据。
B.2.2.4.4 TCoefficient首系数
H.261和MPEG TCoefficient表有一个特殊的非Huffman码,它用作块内最头上的首系数。为了在块的始端解出TCoefficient,首系数位(First Coefficient bit)可以随同用表零(Table[0])得到的一条VLC指令被置位。首系数位的许多作用之一是使这个码被解出。
注意,在正常操作下,不常发出读TCoefficient VLC的“简单”命令。这是因为通常对特殊位(Special Bit)置位来把控制权交给Huffman解码器。
B.2.2.4.5读令牌字(Token Words)
为了读令牌字,令牌位(Token bit)必须置1。特殊位和首系数位必须为零。如果要Table[0]位正确工作,VLC位也必须置位。
在本方式中,Table[0]位及Table[1]位用来改变读令牌的特性如下:
位 |
意义 |
Table[0] |
丢弃串行数据的各装填位 |
Table[1] |
丢弃所有串行数据 |
如果Table[0]及Table[1]都是零,则在令牌之前出现串行数据被认为是错误,会记下出错标记。
如果Table[1]置位,则所有串行数据被丢弃,直到遇到令牌字。这些串行数据的出现不会产生错误。
如果Table[0]置位,则各装填位被丢弃。当然,必须知道各装填位的极性。这由Table[3]决定,和读VLC数据时完全相同。如果Table[3]是零,首先将输入数据取反,然后丢弃任何是“1”的位。如果Table[3]置1,输入数据并不取反,但丢弃各个“1”位。因为根据Table[3]位对数据取反这一动作取决于VLC位,此位必须置1。如果遇到的位不是装填位(即,在H.261及MPEG中的各个“1”位),报告错误。
注意在这些指令中,只读取一个单独的令牌字。不去理会扩展位(extension bit)的状态,测试该位并且据此动作是Demux的责任。本发明还提供读取多个字的一些指令-见特殊指令一节。
B.2.2.4.6 ALU寄存器指定表
如果“Alutab”位置位,在ALU的寄存器组内的各寄存器可以用来决定要使用的实际表号(table number)。在命令中提供的表号,连同VLC位,决定使用了哪些ALU寄存器。
表B.2.4 ALU寄存器的选择
VLC |
table[3:0] |
ALU表 |
0 |
X0XX |
fwd_r_size |
0 |
X1XX |
bwd_r_size |
1 |
X0XX |
dc_huff[compid] |
1 |
X1XX |
ac_huff[compid] |
如果是一些固定长度的码,就读出用于对各向量解码的位数。如果r_size是零,就产生一个NOP不操作指令。
如果是一些Huffman码,则所产生的表号令table[3]置1,因此,结果得出的号是指各JPEG表中的一个。
B.2.2.4.7特别指令
到此为止描述的指令(或操作方式)全部被认为是一些“简单”指令。对于每一个收到的命令,输入数据(串行数据或令牌数据)的适当数量被读取,结果数据被输出。如果没有查到错误,每个命令就恰好产生一个输出。
在本发明中,特别指令具有这样的特点:一个单一指令可以产生一个以上的输出字。为了实现这一功能,Huffman解码器的内部状态机取得控制,并会自己发出必需的一些指令,直到它判定Parser所请求的指令已经完成。
在所有特别指令中,序列的有待执行的第一真正指令(firstreal instruction)随着特殊位(Special bit)置1而发出。这意味着所有序列都必须有一条单值的首指令。这种方案的好处是可以获得序列的首条真正指令,而不必进行基于从Parser收到的命令而做的查找操作。
认可的特别指令有以下四种:
·TCoefficient
·JPEG DC
·JPEG AC
·Token
第一种指令读取H.261及MPEG的变换系数(Transform coeffic-ients)等等,直到读到本块终止的符号。如果本块是非内块(non_intra block),这条命令会读取整个块。在此情况下,“首系数”位(“First coefficient”bit)应当置位,以应用首系数技巧。如果本块是内块(intra block),则DC项应该已读取,所以“首系数”位应该为零。
如果在H.261内是内块,DC项用一条“简单”指令读出,以便读取8位FLC值。在MPEG内,如下说明“JPEG DC”特别指令被使用。
“JPEG DC”命令用来读取JPEG形式的DC项(包括由VLC指示的SSSS位FLC在内)。此命令也在MPEG内使用。首系数位必须置位,以便在数据索引单元内的计数器(计算系数的个数)被复位。
“JPEG AC”命令用来在读DC项之后读取块的余部,直到遭遇EOB,或是直到读出第64个系数。
“Token”命令用来读取完整的令牌。令牌字(token words)被读取,直到扩展位清零。这是一种处理一些未被认出的令牌的方便方法。
B.2.2.4.8上级装入表
在本发明,Huffman解码器的表都能用“上级装入”位(“Download”bit)进行上级装入。第一步是指示哪张表要上级装入。在上级装入位及首系数位都置位的情况下,发出一条读FLC的命令就算完成。因为当作NOP处理,所以实际上并未读取各位,但是表号被存入某个寄存器并用来识别顺序的上级装入中哪张表正在装入。
表B.2.5 JPEG表
table[3:0] |
被命名的表 |
10XX |
JPEG DC Codes per bit |
11XX |
JPEG AC Codes per bit |
00XX |
JPEG DC Index to Data |
01XX |
JPEG AC Index to Data |
如上表所示,或是AC表或是DC表能被装入,而table[3]则决定所装入的是按位码表(codes-per-bit table)还是数据索引表(Index to Data table)。
一旦表被指定,数据便上级装入其中。其方法是上级装入位置位(及首系数位置零)的情况下发出一条命令以读取所需的FLC数(总是8位数)。这就使经过解码的数据写入所指定的表内。根据地址计数器值在当前地址写入数据,然后地址计数器增值。在每当一张表被指定地址计数器复位至零。
当上级装入索引到数据各表时,监视着数据和地址。注意,地址是Huffman索引号,而装入该地址的是最终经过解码的符号。此信息用来自动装入寄存器,这些寄存器对感兴趣的符号保持了Huffman索引号。因此,在一张JPEG AC表中,当具有与ERL相应值的数值被识别时,当前地址就写入由表号指明的寄存器CED_H_KEY_ZRL_INDEX0或CED_H_KEY_ZRL_INDEX1。
由于经过解码的数据是在解码后一相位(phase)才写入按位码(codes-per-bit)表的,不可能在该位期间从表中读数据。因此在上级装入指令之后立即发出企图读VLC的指令将会失败。在任何实际应用中(即进行JPEG时),这样的序列没有理由应该出现。但是,有可能建立这么做的模拟试验。
B.2.2.5 Huffman状态机
根据本发明,Huffman状态机为Huffman解码器提供各种命令,在某些情况下这些命令是内部产生的。用内部状态机可能产生的所有命令也都可能用Demux提供给Huffman解码器。
状态机的基本结构如下。当某一命令发送至Huffman解码器,它也贮存在一系列辅助的锁存器内,所以可以在以后再使用。该命令也由Huffman解码器执行并由Huffman状态机分析。如果命令被认出是一已知的指令序列并且特殊位(SPECIAL bit)置位,则Huffman解码器状态机从Parser状态机接收对Huffman解码器的控制。
这里,给Huffman译码器的各种指令有三个来源:
1)Parser状态机-在特别指令结束后(如EOB已被解码之时),就作此选择,并且下一demux命令被接受。
2)Huffman状态机。Huffman状态机可以给自己提供某条任意的命令。
3)由Parser状态机发出的初始指令,以启动指令。
在情况(2),有可能表号由来自数据索引单元的反馈所提供,这就会更换在Huffman状态机ROM中的字段(field)。
在情况(1),某些场合下,各表号由ALU寄存器组得到的值提供(例如,如果是AC和DC表号和F-表号)。这些值贮存在辅助的命令贮存器内,所以当该命令在以后重新使用时,表号就是已经贮存的那一个。此表号不再从ALU复原,因为一般来说,各计数器为了指向下一块已经前进了。
由于对将要使用的下一条指令的选择取决于正在被解码的数据,必须在一个周期的后期作出决断。因此,大体结构是这样的:所有可能的指令都以并行方式准备好,并且复合组合,在周期的后期决定出实际指令。
注意在每种情况下,状态机的ROM除了决定在下一周期将由Huffman解码器使用的指令外,还决定将要依附当前数据的指令,因为该数据传到数据索引单元,然后加到ALU上。所有三种指令都完全相同地以并行方式作好准备,然后在周期的后期作出选择。
另外,指令的这一部分也有三种选择对应于下一Huffman解码器指令的三种选择:
1)适用于块结束的恒常(constant)指令。
2)Huffman状态机。Huffman状态机可能为数据索引单元提供某条任意指令。
3)由Parser已发出的初始指令,以启动指令。
B.2.2.5.1 EOB比较器
EOB比较器的输出实质上强制选择恒常指令,将它送给数据索引单元,它也会使下一Huffman指令是来自Parser的下一指令。比较器的确切功能由Huffman状态机ROM内的一些位来控制。
作为比较器的后盾,有四个寄存器,它们将EOB符号的索引保持在各AC和DC JPEG表中。如果是DC表,当然没有块结束符,但是有零-宽度(zero-size)符,它是由零DC差产生的。因为这同EOB符号完全一样地使要读取的FLC位数为零,所以对它们的处理全同。
除了保持在各寄存器内的四个索引值外,常数值1也可以使用。这是在H.261及MPEG中的EOB符号的索引。
B.2.2.5.2 ZRL比较器
在本发明中,这是更为通用的比较器。它用来选择Huffman状态机指令或是数据索引要用到的初始指令。
有四个值作ZRL比较器的后盾。其中两个在寄存器内,它们将ZRL码的索引保持在AC表中。另两个值是常数,一是数值零,另一是12(在MPEG及H.261内ESCAPE的索引)。
常数零用于出现FLC的情况。当表号小于8(和VLC)时,使用常数12。如果表号大于7(和VLC),则使用两寄存器之一,这由表号的低位决定。
状态机ROM中的一位提供给使能比较器,另一位用来起反相作用。
如果指令中的令牌位置位,则比较器的输出被忽视,而用扩展(extn)位来替代。这就容许运行到令牌结束为止。
B.2.2.5.3 Huffman状态机的ROM
Huffman状态机内的各指令字段如下:
nxtstate[4:0]
这是下一周期要使用的地址。它可以改动。
statect1
允许对下一状态地址作改动。如果为零,状态机地址不改变,否则地址的最低有效位被两个比较器之一的值所替代如下:
nxtstate[0] | |
0 |
EOB相符时替代最低有效位 |
1 |
ZRL相符时替代最低有效位 |
注意:在任何情况下,如果下一个Huffman指令被选为“重新运行原来的命令(re-run original command)”,状态将转到对命令适宜的位置0、1、2或3。
eobct[1:0]
它根据EOB比较器和扩展位去控制下一Huffman指令的选择,如下:
eobctl[1:0] | |
00 |
无结果-见Zrlct[1:0] |
01 |
如果EOB,则取新(Parser)命令 |
10 |
如果extn低,则取新(Parser)命令 |
11 |
无条件Demux指令 |
Zrlct[1:0]
它根据ZRL比较器去控制下一个Huffman指令的选择。如果满足条件,它就取状态机指令,否则它重新运行原来的指令。不论哪种情况发生,如某一eobctl*+条件采用一条demux指令,则此(eobctl*+)取如下的优先级:
Zrlct[1:0] | |
00 |
总不取SM(总是重新运行) |
01 |
总是取SM命令 |
10 |
如果ZRL相符,则SM |
11 |
如果ZRL不相符,则SM(状态机) |
smtab[3:0]
在本发明中,如果所选择的指令是状态机指令,则表号就是Huffman解码器将要使用的表号。但是,如果ZRL比较器相符(mat-ches),优先使用zrbtab[3:0]字段。
如果不要求视ZRL符合与否使用不同的表号,则smtab[3:0]和zrltab[3:0]会具有同值。但是,注意这可以在Lsim中引起一些奇怪的模拟问题。如果是MPEG,不存在明显的要求去装入那些指示ZRL的Huffman索引号的寄存器(一种JPEG唯一具有的结构-a JPEGonly construction)。但是,这些寄存器依然被选中,ZRL比较器的输出变成“未知”,而尽管在ZRL比较器可能为“未知”的所有情况中,smtab[3:0]和zrltab[3:0]两者都有相同的值(所以哪个被选中无关紧要),下一个状态依归属于“未知”。
zrltab[3:0]
如果选择的指令是状态机指令并且ZRL比较器相符,这就是Huffman解码器将要使用的表号。
smvlc
如果选择的指令是状态机指令,这就是Huffman解码器使用的各VLC位。
aluzrl[1:0]
此字段控制传往ALU的指令的选择。指令或者是来自Parser状态机的命令(它是在指令序列开始时贮存下来的),或者是来自状态机的命令:
aluzrl[1:0] | |
00 |
总是取保存的Parser状态机命令 |
01 |
总是取Huffmanm状态机命令 |
10 |
如不是EOB则取Huffman SM命令 |
11 |
如不是ZRL则取Huffman SM命令 |
alueoq
本线根据EOB比较器的情况控制传往ALU的指令的改动。它简单地将ALU的输出方式强制成“zinput”。这是一种随意选择;任何输出方式只要不是“什么也不是(none)”就足够了。这是为了确保将块结束命令字传到令牌格式化器块(Token Formatter block),在那里此命令字控制各数据令牌(DATA Tokens)的正确格式化:
alueob | |
0 |
不改动ALU outsrc字段 |
1 |
如果EOB相符,则强制“zinput”进入outsrc |
各种字段的其余部分是ALU指令字段。在ALU的说明中恰当地提供了有关的资料。
B.2.2.5.4 Huffman状态机的变型
在状态机的一种具体实施例中,数据索引单元需要“知道”何时一个escape码(escape-coded)的TCoefficient的RUN部分正在传往数据索引单元。虽然在控制ROM中使用某个合适的位可以做到这点,但是为了避免修改ROM,使用了一种替代方法。这就是,监视进入ROM的地址并查出地址值5。它就是在ROM中指定处理的RUN字段的合适位置。当然,显然ROM在编程时使用一些别的选定的地址值。此外,以前叙述过的在控制ROM中使用某一位的方法本来也可以利用。
B.2.2.6简图浏览
在本发明中,Huffman译码器称作“hd”。从逻辑上说,“hd”实际上包括数据索引单元(这是经过编译的代码生成的各种限制所要求的)。因此,“hd”包含以下主要部件:
表B.2.6 Huffman模块
模块名 |
说明 |
hddp |
Huffman解码器(算术)数据路径 |
hdstdp |
Huffman状态机数据路径 |
hfitod |
数据索引单元 |
通过对各个子系统区域(areas)的大体解释来完成对各Huffman模块的如下说明。这些子系统在图中作了更详细的展示。这些图对具有本行一般技能的人容易理解。
B.2.2.6.1“hd”的说明
双线(two-wire)接口控制用的逻辑通常包括由双线接口控制的三个端口:数据输入、数据输出和命令。此外,有两根从输入移位器来的“有效”线;令牌_有效(token_valid),它指示某令牌正出现在in_data[7:0]上,而串行_有效(serial_valid)它,指示数据正在串行传送。
所产生的信号中,最重要的是那些送往各锁存器的使能信号。而其中最重要的又是给各个ph1锁存器用的使能信号。大多数pho锁存不是使能的,只有其中两个有使能,它们是:与串行数据有关的eo和与令牌数据有关的eot。
在本发明中,与“完成”有关的信号(done,notdone及ph0派生的done0及notdone0)指示原来的Huffman的命令何时完成。
在Hufffman状态机命令被执行的情况下,组成整个状态机命令的每个原来的命令完成时,“done”被认定。notnew信号防止接受来自Parser状态机的新命令,直到整个Huffman状态机命令完成。
至于从数据索引单元收到的信息的控制,在JPEG系数解码期间,“size”字段的控制逻辑被反馈到Huffman译码器。实际上可以出现两种情况。如果宽度(size)正好是1,就以专用信号notfboneO进行反馈。否则,宽度由数据索引单元的输出(out_data[3:0])反馈,信号fbvalid1指示正发生这件事。信号muxsize出现,以控制将反馈数据多路组合进入命令寄存器(见sheet 10)。
此外还有正好64个系数已经解码的反馈。由于在JPEG内,在此情况下EOB不受编码,所以产生信号forceeob。事实上这有两种方法来完成,与上述的将宽度反馈的两种信号相类似。或是使用jpegeob(这是一种ph1信号),或是使用jpegeboO。注意,如果进行的是正常反馈(jpegebo),锁存器i-971只是作被反馈数据装入,直到接纳一条新的Parser状态机命令后才清零。只有在Huffman码被解码之后,信号forceeob才实际上产生出来。因此,固定长度码(即size的各位)不受影响,但是下一个Huffman编码信息被强制的块结束所替代。当宽度为1及使用jpegeboO时,只读取1位,因此i_1255和i_1256将信号延迟到正确时刻。注意在本情况下,不可能出现宽度为零,因为具有宽度零的符号只有EOB和ZRL。
对产生tcoeff_tabO(使用Tcoeff表的Huffman解码),mba-tabo(使用MBA表的Huffman解码)和nop(不操作)命令的解码是相当随机的。产生nop有好几个理由。其一是固定码码宽为零,其二是forceeob信号(因为即使有输出给信号EOB,也不该从输入移位器读数据),最后,表上级装入命名是其三。
notfrczero(由宽度零的FLC或由NOP产生)确保当使用NOP指令时结果为零。此外,invert指示何时串行数据应在Huffman解码之前取反(见B.2.2.1.1一节),ring指示何时应加上变换系数ring(见B.2.2.1.2节)。
解码的完成也与寻址code_Pr_bit ROM有关。code_per_bitROM由短数据路线(small dataPath)的一些ROM制成。对各信号(如csha和csla)复制,纯粹是为了获得足够的驱动,后者靠将各ROM一分为二来达到。地址可取自位计数器(bit[3:0])或取自微处理器接口地址(key_addr[3:0]),这取决于UPI访问那个被选中的部分。
附加的解码牵涉到一些寄存器的UPI读取,诸如为一些JPEG表保持Huffman索引值的寄存器(EOB,ZRL等)。还包括这些寄存器有关的三态驱动器控制及各按位码RAM的UPI读取。
还为某些重要的位号也提供算术的数据路径解码。first_bit的使用与Tcoeff首系数技巧有关,bit_five牵连到在Tcoeff表中应用ring(环)。注意forceeob的用法,它模拟EOB比较器与解码后的索引值相符合的动作。
至于扩展位,如果从输入移位器读出的是令牌,则连带的扩展位随令牌一起被读出。否则,扩展的最后值被保存下来。这就允许在读出令牌之后任何时候用微码程序测试扩展(extn)位。
当认定的是zerodat时,Huffman输出数据的高4位被强制为零。由于这些位只有在解固定长度码时才有有效值,在解码VLC或令牌时或因任何理由NOP执行指令时将它们置零。
当每个命令完成时,另外的电路检测到并产生“done(已完成)”信号。实质上,成为“done”的理由共分两类,它们是:正常原因和例外原因。各由两个三路的多路开关选择器之一处理。
下面多路开关选择器(i-1275)处理正常原因。如果是FLC的情况,就使用ndnflc信号。这是位计数器与表号相比较的比较器输出。如果是VLC的情况,就使用ndnvlc信号。这是算术数据路径(arith-metic datapath)的输出,它直接反映了公式9。如果是NOP指令或令牌的情况,只要求一个周期,因此,本系统无条件地“完成”。
在本发明中,上多路开关选择器(i-1274)处理例外情况。如果解码器在JPEG解码中正期待size的反馈(fbexpctdO)自size为1(notfboneo),则解码器已完成,因为只需要一位。如果解码器正在用Tcoeff表做首系数的第一位,则如果当前索引的位0为零,解码就算完成(见B.2.2.1.2节)。如果这些条件无一满足,则不存在已经的完成的例外理由。
NOR门(i-1293)最后解决“完成”的条件。由i_570产生的条件(即数据无效的条件)强制“完成”。这可能看来有点奇怪。它主要在刚复位之后使用,以强制机器在准备第一条命令时进入“完成”状态(“完成”将所有计数器、寄存器等复位)。注意,任何错误条件也都强行“完成”。
在检测各种错误时,需要用到notdonex信号。不能使用各正常的“完成”信号,这是因为在检测错误时,也强制在“完成”状态。使用“完成”可能会造成组合的(combinatorial)反馈回路。
错误检测及处理在能检测所有可能错误条件的电路中完成。这些条件在i_1190中‘或’在一起。在此情况下,i_1193、i_585、i_584组成三位的Huffman错误寄存器。请注意i_1253和i-1254,它们在没有“真正的”错误的各种情况下禁止错误(见B.2.2.3节)。
此外,i_580、i_579及其相联电路成为一部简单的状态机,它在检测到错误后控制第一条命令的接收。
如前所示,对各控制信号加以延时,以配合在数据索引单元及ALU中的一些流水线延迟。
Itod_bypass是传到数据索引单元的实际旁路信号。每当固定长度码被解码时,Huffman状态机处于控制地位,它强制旁路,此时Itod_bypass就被改动。
Aluinstr[32]是使ALU得以(将各条件码)反馈到Parser状态机的位。此外,当Huffman状态机控制在手时,重要的是各信号只被认定一次(而不是在每次原来命令之一完成时)。
Aluinstr[36]是允许ALU步进(step)块计数器的位(如果其它一些ALU指令位也指定增量的话)。这也只许被认定一次。
此外,这些位的要求只能适用于将数据输出到令牌格式化器的那些ALU指令。否则,各计数器可能在第一次输出到令牌格式化器之前就增量,造成某DATA令牌中不正确的“CC”值。
在本发明有图示的实施例中,如果ALU有输出给令牌格式化器,alunode[1]或alunode[0]就为低。
图118与图27类似,示出被称为“hdstdp”的Huffman状态机数据路径。还有一个UPI译码器,用于读取Huffman状态机ROM的输出。
为了处理由ALU寄存器单元指定(见B.2.4.6)表号的这种情况,提供了多路技术。
aluinstr[3:2]的改动用来将ALU outsrc指令字段强制为并非什么也不是(non_none)(见B.2.2.5.3节alueob的说明)。
至于为Huffman解码器块(X)而设的命令寄存器,命令的每一位都有用来选择命令各种可能来源的有关多路开关选择器。四个控制信号控制这一选择:
Selhold,它使寄存器保留其当前状态。
Selnew,它使一条来自Parser状态机的新命令被装入。它也使能各寄存器的装入,这些寄存器保留原来的Parser状态机命令以备后用。
Selold,它导致从上述各寄存器来的原来Parser状态机命令的装入。
/selsm,它导致来自Huffman状态机ROM的命令的装入。
如果是表号,则情况稍为复杂,因为表号也可能用数据索引单元的输出数据装入(selholdt及mux size)锁存器保持在Huffman状态机ROM中的当前地址。逻辑电路检测正在执行的命令是可能的四条中的哪一条。如果是一条新命令,则这些信号相混合以形成起始地址的低二位。
逻辑电路还检测何时状态机ROM的输出无意义(通常因为命令是一条“简单”命令)。信号notignorerom有效地禁止状态机的操作,尤其是禁止通往ALU的指令作任何改动。
产生fixstateO的电路控制本状态机有限的转移能力。
还提供解码以驱动信号到Huffman状态机的ROM。该ROM是数据路径形式的组合ROM。
escape_run的产生在B.2.2.5.4节中叙述。
对于那些保持诸如ZRL和EOB符号的索引号的寄存器,也为它们提供解码。这些寄存器可以由UPI或数据路径装入。在中央(es[4:0]及ZS[3:0]的解码为多路器生成选择信号,这些多路器选择哪个寄存器或常数值要和经过解码的Huffman索引相比较。
关于Huffman状态机用的控制逻辑。此处,来自Huffman状态机ROM的各“指令”位与各种不同条件混合起来,以决定下一步做什么及如何去改动为ALU设置的指令字。
在本发明中,信号notnew,notsm和notold因sheet 10上用于控制Huffman解码器命令寄存器的操作。很明显,它们是由状态机ROM(见B.2.2.5.3说明)中的一些控制位状态和Huffman索引比较器(neobmatch及nzrlmatch)一起被产生。
选择也是由通向ALU的指令来源作出。实际的多路传输是在Huffman状态机数据路径“hfstdp”中完成的。产生出四种控制信号。
在不曾遇到块结束的情况时,会产生aluseldmx(选用Parser状态机的指令)或aluselsm(选用Huffman状态机的指令)之一。
在不曾遇到块结束的情况下,会产生aluseleobd(选用Parser状态机的指令)或aluseleobs(选用Huffman状态机的指令)之一。此外ALU指令的“outsrc”字段被改变,以强制它成为“zinput”。
在上级装入表期间,一个寄存器保持已命名表的表号。为各按位码codes_per_bit RAM提供了解码。附加的解码能识别何时EOB及ZRL之类的符号被上级装入,因此各Huffman索引号寄存器可以自动装入。
至于位计数器,一个比较器能测得在读某FLC时何时已经读取正确的位数。
B.2.2.6.2“hddp”的说明
各比较器检测Huffman索引的确切值。各寄存器为能上级装入表保持这些值。多路器(meob[7:0]及mzr[7:0]选择所用的值,选通(gating)和一些异或门组成各比较器。
一些加法器和寄存器直接计算B.2.2.1节中说明的各公式。这里就不必再做更多说明。使用了一个异或门,以取反在B.2.2.1.1节中说明的数据(i_807)。
“码”寄存器的宽度为12位。多路结构实现了B.2.2.1.2节中说明的“环”形替换。
考虑到经过解码的串行数据(index[7:0])和令牌数据(ntokenO[7:0])之间的数据和多路传输的各种流水线延时,Huffman的索引值以ZRL和EOB符号决出。
Codes_Per_bit ROM和它们的多路复用用来确定使用哪张表。使用这种结构是因为表选择信息到得晚。然后访问所有的表并选中正确的表。
考虑到Codes_Per_bit RAM,(Codes_per_bit)ROM的最后多路复用,Codes_Per_bit RAM的输出在“hdepbram”块内进行。
B.2.2.6.3“hdstdp”的说明
在本发明中,“Hdstdp”共有两个模块。“hdstdel”参与将Parser状态机的各控制位延迟到适当的流水线阶段,例如当把这些位加到ALU和令牌格式化时。它只处理大约半个送往ALU的指令字,其余则由另一模块“hdstmod”处理。
“Hdstmod”包括了Huffman状态机ROM。该指令的某些位归Huffamn状态机控制逻辑使用。其余各位用于代替在“hdstdel”中不予处理的那部分ALU指令字(它来自Parser状态机)。
“Hdstmod”是显而易见的,无需解释—只有一些流水延时寄存器。
“Hdstdel”也很简单,它由一个ROM和一些改变ALU指令用的一些多路器操纵。电路的剩下部分是关于UPI对各Huffman状态机ROM输出的半数进行读访问。还为一些控制信号使用了缓冲器。
B.2.3令牌格式化器
根据本发明,Huffman解码器令牌格式化器位于Huffman块的末端。如其名称提示,它的功能是将来自Huffman解码器的数据格式化成合适的令牌结构。在微指令字命令字段的控制下,输入数据与微指令字内的数据多路复用。本块有两种操作方式:DATA_WORD及DATA_TOKEN。
B.2.3.1微指令字
表B.2.7 由7个字段组成的微指令字
字段名 |
位数 |
Token(令牌) |
0:7 |
Mask(掩码) |
8:11 |
块型(Bt) |
12:13 |
外部Extn(Ee) |
14 |
Demux Extn(De) |
15 |
块结束(Eb) |
16 |
命令(Cmd) |
17 |
17 16 15 14 12 8 0
Cmd | Eb | De | Ee | Bt | Mask | Token |
微指令字同数据字一样受同一accept的管理
B.2.3.2操作方式
表B.2.8 Bit位的分配
Cmd |
方式 |
0 |
Data_Word |
1 |
Data_Token |
B.2.3.2.1数据字
在本方式下,输入的最高八位反馈至输出。最低八是输入或是微指令字的令牌字段,或是两者的混合,这取决于屏蔽码字段。屏蔽码表示mix内的输入位数,即:
out_data[16:8]=in_data[16:8]
out_data[7:0]=(Token[7:0]&(ff<<mask))indata[7:0]
当屏蔽码设为0×8或更大时,输出数据将等于输入数据。本方式用来在一些non_DATA(非数据)令牌中输出各种字。屏蔽码置为0时,out_data[7:0]将是微指令字的令牌字段。本方式用于输出各种不包含数据的令牌头(Token headers)。当令牌头包含数据时,数据的位数由屏蔽码字段给出。
如果外部Extn(Ee)被置位,则out_extn=in_extn,否则out_extn=Deo
Bt及Eb均为“不必关心(don′t care)”。
B.2.3.2.2数据令牌
本方式用于对数据令牌进行格式化,它有两种功能,取决于信号first_coefficient。在复位时,first_coefficient置位。当第一个数据系数与由cmd置1的一个微指令字一起到来时,out_data[16:2]被置成0×1,且out_data[1:0]取微指令字内Bt字段的值。这就是数据令牌的头。当此字已被接收时,伴随过命令的系数被装入寄存器RL,并且,first_coefficient取Eb的值。当下一系数到来时,out_data[16:0]取上一贮存在RL内的系数。然后更新RL和first_coefficient。这就确保当遇到块结束并且Eb置位时,将first_coefficient置位,为下一数据令牌作好准备,即:
If(fi=st_coefficient)
{
out_data[16:2]=0x1
out_data[1:0]=Bt[1:0]
RL[16:0]=in_data[16:0]
}
else
{
out_data[16:0]=RL[16:0]
RL[16:0]=in_data[16:0]
}
out_extn=-Eb
B.2.3.3解释性讨论
根据本发明,大多数指令位由Parser状态机正常提供。但是,字段中的两个实际上由其它电路提供。前面提到的“Bt”字段直接与ALU块的输出相连。这一两位字段给出“CC”或“彩色分量(color component)”的当前值。因此,当某个数据令牌头建立时,最低两位从从ALU计数器取彩色分量的。其次,每当End_of_block(块结束)符被解码时,(或者,如果是JPEG,当假定为1时,因为块的最后系数是经过编码的)“Eb”位就在Huffman解码器内被确认。
in_extn信号在Huffman译码器内得到。只有当扩展位连同令牌字一起正常提供时,此信号才能对各令牌有意义。
B.2.4 Parser状态机
本发明的Parser状态机实际上是非常简单的一些电路。复杂的是微码ROM的编程,这在B.2.5节中讨论。
简而言之,本机由一个保持当前地址的寄存器组成。在微码ROM中查找此地址以产生微码字。在一个简单的增量器内该地址增量,增量后的地址是下一状态要用两个可能地址之一。另一地址是在微码ROM本身中的字段。因此每条指令都可能是转移指令,可转移到程序指定的位置。如果不发生转移,控制就到ROM的下一单元。
提供了一串16个条件码位。可选择这些条件的任一个(由微码ROM内的某字段选择)。此外,每个条件码位可以取反(又是在微码ROM中的一位)。得出的信号在增量后的地址或在微码ROM内的转移地址中选择一个。条件之一是硬接线的(hard_wired),以判断为“假”。如果选中该条件,就不会发生转移。另一方面,如果选中该条件然后加以取反,则总是发生跳转,即成为无条件转移。
表B.2.9 条件码位
位号 |
名称 |
说明 |
0 |
user[0] |
这四位都接至一个寄存器,该寄存器可由用户从微处理器接口处编程。它们允许“由用户定义”的条件码,这些条件码可以用很少开销进行测试。其中两个定义为控制非标准的“编码块模式(Coded blockPattern)”处理,用于实验的4块和8块宏块结构。 |
1 |
user[1] |
2 |
cbp_eignt |
3 |
cbp_spec:al |
4 |
he[0] |
这些位直接接到Huffman解码器的Huffman错误寄存器 |
5 |
he[1] |
6 |
he[2] |
表B.2.9 条件码位(续)
位号 |
名称 |
说明 |
7 |
Extn |
扩展位(用于各令牌) |
8 |
Blkdtn |
块模式移位器 |
9 |
MBstan |
在宏块起点 |
10 |
Picstart |
在图象起点 |
11 |
Restart |
在重新起动区间的起点 |
12 |
Chngdet |
“不自然”变化检测位 |
13 |
Zero |
ALU零条件 |
14 |
Sign |
ALU符号条件 |
15 |
False |
硬接线至False(假) |
B.2.4.1双线接口控制
根据本发明,双线接口控制在本部件中有点例外。在Parser状态机与Huffman译码器之间有一个双线接口。它用来控制命令的进行。在某一条给定的命令被接受之前,Parser状态机会一直等待。然后着手从ROM中读取下一条命令。此外,各条件码经由来自ALU的一根线被反馈回来。
在微码ROM中每条命令都有一位,允许指定它应当等待反馈。如果作此指定,则该指令已被Huffman解码器接受之后,不再出现新的命令,直到来自ALU的反馈线被确认。此线为fb_valid,它表示ALU当前正提供的各条件码在下述意义上是有效的:它们反映了与要求等待反馈命令有关的数据。
根据本发明,这个特性(feature)是要用来构成各种条件转移命令,根据解码(或处理)一段特别的数据的结果,它们决定要跳到的下一状态。没有这种设施,就不可能测试取决于流水线中数据的任何条件,这是因为双线控制意味着某一命令到达给定的处理块(在本情况即是ALU)是不确定的。
非并所有指令都传到Huffman解码器。某些指令可能不需要数据流水线就可执行。它们往往会是跳转指令。微码ROM的一位用来选择指令是否送给Huffman解码器。如果不送,就不要Huffman解码器接收这条指令,因此在这些情况下即使流水线阻塞,执行也能继续下去。
B.2.4.2事件处理
在Parser状态机中有两个事件位。一个叫Huffman事件,另一个叫Parser事件。
Parser事件是最简单的事件。被该事件正在监视的“条件”只是微码ROM中的一位。因此,一条指令将该位置位就可能造成Par-ser事件。下面是典型情况:这指令在rom_control寄存器内写入一个合适的常数,因而中断服务程序能够决定中断的原因。
在为Parser事件服务之后(如果屏蔽掉事件,则立即回去),控制再继续回到它离开的地方。如果引发事件的指令有一条转移令(其条件评定为真),则转移正常进行。因此用对转移编码的方法,就可能在服务之后跳到错误处理程序。
Huffman事件则稍为不同。正被监视的条件是三个Huffman错误位的“或”。事实上,对该条件的处理与Parser事件极为相似。但是,每当错误出现时,来自Huffman译码器的一条外加线huffintr-pt被认定。这就使控制跳到微码程序中的出错处理。
因此,当Huffman错误出现时,序列涉及产生中断和停止块。在服务之后,控制转到出错处理。不存在“调用”机制,它不象寻常的中断,在出错处理之后不可能回到出错前的微码中的地点。
有可能在不产生Huffman错误的情况下认定huffintrpt。这在B.2.2.3节讨论的“无错误”错误的情况下发生。假使如此,不发出中断(到微处理器接口),但是控制仍转到(微码中的)出错处理。因为在此情况下Huffman错误寄存器清零,所以微码出错处理器可以决定是要出错处理并作出相应的响应。
B.2.4.3特殊单元(locations)
在微码ROM中有几个特殊单元。ROM中的头四个单元是主程序的入口点。在复位时,控制转到这四个单元的一个。被转移的单元取决于在ALU寄存器内选出的编码标准,coding_std。因为此单元本身被真正的复位复位到零,控制转到零单元。但是也可能使用在CED_H_TRACE中的UPI寄存器位CED_H_TRACE_RST来单独复位Parser状态机。在此情况下coding_std寄存器并不复位,控制转到头四个单元中合适的那一个。
第二组四个单元(0X004至0X007)在发生Huffman中断时使用。典型情况是:在四单元的每一个之处放一条转移到实际的出错处理器的指令。单元也是根据编码标准的结果来选择的。
B.2.4.4跟踪
作为辅助诊断的手段,提供了跟踪机构。它允许微码进行单步运行。在CED_H_TRACE寄存器内的CED_H_TRACE_EVENT位和CED_H_TRACE_MASK位控制这种运行。顾名思义,它们的操作与一些正常的事件位非常近似。但是,因为有若干差异(尤其是从不产生UPI中断),不将它们与其它事件位归为一类。
当CED_H_TRACE_MASK置1时,跟踪机构接通。在从ROM中读出每条微码指令,但在送到Huffman译码器去之前,出现一次跟踪事件。在此情况下,CED_H_TRACE_EVENT为1。必须对它查询,因为不会产生中断。整个微码字可在CED_H_KEY_DMX_WORD_0至CED_H_KEY_DMX_WORD_9的寄存器内得到。如果需要,可以在此时刻改动指令。给CED_H_TRACE_EVENT写1就使指令执行并将CED_H_TRACE_EVENT清零。在此刻之后不久,当从ROM中读出下一要执行的微码字时,就出现一个新的跟踪事件。
B.2.5微码
微码的编程靠使用汇编器“hpp”这一种非常简单的工具,许多提取工作(abstraction)靠使用宏予处理器来完成。为此可使用标准的“C”予处理器“cpp”。
码的说明如下:
Ucode.u是主文件。首先,它包括定义各令牌的tokens.h。其次,regfile.h定义ALU的寄存器映象(map)。fields.u定义微码字中的种种字段,它给出一张下了定义的符号表,这些符号对应于字段中每一种可能的位模式。再其次,对码中用到的各标号进行定义。在做完这步之后,instr.u去定义大量用来定义基本指令的“cpp”宏。然后,errors.h定义用来定义各Parser事件的号码。再后,unword.u定义建立微码字中安放字段的顺序。
ucode.u的剩余部分是微码程序本身。
B.2.5.1指令
本节叙述在ucode.u中定义的各种指令。此处并不讨论所有指令,因为在许多情况下,它们只是同一主题下的微小变化(尤其是ALU指令)。
B.2.5.1.1 Huffman及数据索引指令
在本发明中,H_NOP指令由Huffman解码器使用。这是非操作指令。没有对数据解码,从这个意义上说,Huffman没有做什么事。本指令产生的数据总是零。因此,有关指令被送到ALU上去。
其次的一些指令是令牌类:H_TOKSRCH,H_TOKSKIP_PAD,H_TOKSKIP_JPAD,H_TOKPASS及H_TOKREAD。这些指令都从输入移位器读取一个或几个令牌,并将它们传到机器的其余部分。H_TOKREAD读取一个单一的令牌字。H_TOKPASS可用来读一个完整令牌,直到带有零扩展位的字并包括它在内。有关命令对每个令牌字都重复。H_TOKSRCH抛弃令牌前所有的串行数据,然后读一个令牌字。H_TOKSKIP_PAD跳过所有装填位(H.261及MPEG),然后读一个令牌字。H_TOKSKIP_JPAD对JPEG装填位做同样的事情。
H_FLC(NB)读一个“NB”位数的固定长度码。
H_VLC(TBL)用指出的表读一个vlc(表名以助记符传送,如H_VLC(tcoeff))。
H_FLC_IE(NB)与H_FLC相似,但是“无视错误(ignore errors)”位置位。
H_TEST_VLC(TBL)类似H_VLC,但是旁路位(bypass bit)置位,所以Huffman索引不改动地通过数据索引单元。
H_FWD_R及H_BWD_R读一个FLC,其位宽分别由ALU寄存器r_fwd_r_size及r_bwd_r_size指示。
H_DCJ读JPEG格式的各DC系数,表号来自ALU。
H_DCH读一个H.261 DC项。
H_TCOEFF及H_DCTCOEFF读取各变换系数。在H_DCTOCOEFF中,首系数位置位,用于非基块,而H_TCOEFF则用于DC项已被读出之后的基块。
H_NOMINATE(TBL)命名一张以后下装的表。
H_DNL(NB)读各NB位并将它们下装到已命名的表中。
B.2.5.1.2 ALU指令
不能详细解释所有的ALU指令,因为它们实在太多了。将讨论构成各助记符的基本方法,这应当使指令可读。此外,这些助记符对于本行业具有普通技能的人应当易于理解。
大多数ALU指令与数据从一处到他处的传送有关,因此使用通用的“装入(load)”指令。在助记符A_LDxy中,当然是y的内容装入x,即先列出目的,后列出源。
表B.2.10 用来指示可能的数据源和目的的一些字母
字母 |
意义 |
A |
A寄存器 |
R |
Run寄存器 |
I |
数据输入 |
O | 数据输出 |
F |
ALU寄存器组 |
C |
常数 |
Z |
常数零 |
作为例子,LDAI将数据装入A寄存器,此数据来自ALU输入端口。如果指定的是ALU寄存器组,则助记符要带地址,因此LDAF(RA)将寄存器组单元RA的内容装入A。
当数据由源传送到目的时,ALU能改变它。如果是这种情况,算术运算以源数据的一部分表示。因此助记符LDA_AADDF(RA)把A寄存器当前的内容,加上寄存器组中指定单元的内容装入A中。另一例子是LDA_ISGXR,它取输入数据,根据RUN寄存器指出的那一位进行符号扩展,并且将结果存入A寄存器。
在许多情况下,对同一结果指定一个以上的目的。再举例子,LDF_LFA_ASUBC(RA),它将A减去某一常数的结果既装入A寄存器也装入寄存器组。
另一些助记符表示一些特定的动作。如“CLRA”用于清A寄存器,“RMBC”用于使宏块计数器(macroblock counter)复位。这些助记符相当显而易见,在instr.u的注解中有它们的说明。
一种不按常规是使用后缀“_0”,它用来指示除了正常行为外,还将操作结果送到令牌格式器,因此LDFI_O(RA)贮存输入数据并将它送到令牌格式化器。要不,如果愿意,这本可以是LDF_LDO_I(RA)。
B.2.5.1.3令牌格式化器指令
T_NOP“不操作”指令。这是使用不当的名称,因为不可能建立一条不操作指令。但是每当因ALU无输出至令牌格式化器而指令不重要时,就用它。
T_TOK输出一个令牌字。
T_DAT输一个DATA令牌字(只同一些Huffman状态机指令一起使用)。
T_GENT8产生一个基于8位常数字段的令牌字。
T_GENT8E类似于T_GENT8,但是扩展位是1。
T_OPD(NB)-数据的NB位来自输出的最低NB位,其余位来自常数字段。
T_OPDE(NB)类似于T_OPD,但是扩展位为高。
T_OPD8-是T_OPD(8)的简写。
T_OPD8E-是T_OPDE(8)的简写。
B.2.5.1.4 Parser状态机指令
D_NOP不操作指令:地址照常增值,而Parser状态机则不做任何附加的事情。指令的余部送往数据流水线。不出现等待。
D_WAIT与D_NOP类似,但是等待反馈的到来。
简单转移指令组。如果条件满足,诸如D_JMP(ADDR)和D_JNX(ADDR)之类的助记符就产生转移。指令并不输出到Huffman解码器。
外部转移指令组。其助记符如D_XJMP(ADDR)和D_XJNX(ADDR)。它们与上面的简单计数器部分相似,但是指令输出到Huffman解码器。
转移和等待指令组。其助记符如D_WJNZ(ADDR)。这些指令被输出至Huffman解码器,在评估条件之前,Parser等待来自ALU的反馈。
下列各助记符用于一些条件本身。
表B.2.11 用于表示条件的助记符
助记符 |
意义 |
JMP | |
无条件跳转 |
JXT |
JNX |
如果extn=1(extn=0)则跳转 |
JHE0 |
JNHEO |
如果Huffman错误位0置位(清零)则跳转 |
JHE1 |
JNHE1 |
如果Huffman错误位1置位(清零)则跳转 |
JHE2 |
JNHE2 |
如果Huffman错误位2置位(清零)则跳转 |
JPTN | |
如果模式移位器最低有效位置位则跳转 |
JPICST |
JNPICST |
在图象起点(不在图象起点)跳转 |
JRSTST |
JNRSTST |
如果在(不在)重新启动区间的起点则跳转 |
|
JNCPBS |
如无特殊CPB编码则跳转 |
|
JNCPB8 |
如果不是8块(即如果是4块)的宏块则跳转 |
JMI |
JPL |
如为负(为正)则跳转 |
JZE |
JNZ |
如为零(非零)则跳转 |
表B.2.11 用于表示条件的助记符(续)
助记符 |
意义 |
JCHNG |
JNCHNG |
如果改变检测位置位(清零)则跳转 |
JMBST |
JNMBST |
如在(不在)宏块起点则跳转 |
D_EVENT导致产生一个事件。
D_DFLT用于建立一条缺省指令。它导致一个事件,然后转移到标号为“dflt”的单元。本指令决不应该执行,因为它们用来占满ROM使得转移到一不用单元而入陷。
D_ERROR导致一个事件,然后转移到标号“srch_dispatch”,以企图从错误中恢复过来。
B.3 Huffman解码器ALU
B.3.1引言
根据本发明,子部件Huffman解码器ALU为Huffman解码器部件提供常规的算术和逻辑功能。它能做各种加法和减法操作、各种类型的符号扩展操作和将输入数据格式转成run-sign-level三层(triples)。它还有一个灵活的结构,其准确的操作和形式由一个微指令字指定,该微指令字与输入数据同步到达ALU,即处于双线接口的控制之下。
除了36位指令和12位数据的输入端口外,ALU还有6位的run端口和8位的常数端口(后者实际上驻留在令牌总线上)。除微指令字之外,所有这些端口都经过ALU数据路径去驱动它们各自宽度的总线。在微指令字中有代表扩展位的单独一位,扩展位连17位的run-sign-level(out_data)一起输出。在ALU数据路径的两端各有一个双线接口。一组条件码随同它们自己的有效信号cc_valid一起输出。还有一个寄存器组,其它的Huffman解码器子部件通过ALU可以访问它,微机接口也可以访问它。
B.3.2.2基本结构
Huffman ALU的基本结构如图126所示。它包括以下部分:
输入块400
输出块401
条件码块402
“A”寄存器403,其源为多路
Run寄存器(6位)404,其源为多路输入
加法器/减法器405,其源为多路输入
符号扩展逻辑406,其源为多路输入
寄存器组407
这些块的每一个(输出块除外)将其输出驱动到一条贯穿数据路径的总线上,而这些总线反过来又当作块源的多路输入。例如,加法器有它自己的数据路径总线,该总线是A寄存器的若干的可能输入之一。与此类似,A寄存器有它自己的总线,该总线形成加法器的若干可能输入之一。在这方面只存在一个所有可能性的子集,第7节微指令字中详细说明。
在单一周期内可能执行一条以加法为基础的指令或是执行一条以符号扩展为基础的指令。此外还可允许在单周期内同时执行这两条指令,只要它们的操作严格并行。这就是说,不允许有先相加后扩展符号或是先扩展符号后相加的指令序列。在单周期内,寄存器组可以或者读出或者写入,但不能同时读和写。
输出数据有三个字段:
·run-6位
·sing-1位
·level-10位
如果数据有待直接通过ALU,输入数据寄存器的最低有效11位被锁存入sign和level字段。
有可能对ALU的有限个多周期操作进行编程。在这方面,所需的周期数由寄存器组所在单元的内容给出,寄存器组位置的地址则由微指令指定;当迭代计数器减至1时,同一操作重复进行。这一便利条件典型地用于实现左移:使用加法器将A寄存器内容自身相加,然后将结果存回到A寄存器内。
B.3.3加法器/减法器子块
这是一个12位宽的加法器,对其input2可以选择将正值置为负值,对进位计入(carry-in bit)可以选择置位或不置位。输出是一个12位的和,不利用它的进位输出(carry-out)。有七种操作方式:
·ADD:带进位加法,进位位置零:input1+input2
·ADC:带进位加法,进位位置1:input1+input2+1
·SBC:input2取反,进位位置零:input1-input2-1
·SUB:input2取反,进位位置1:input1-input2
·TCI:如果input2<0,使用SUB,否则使用ADD。
这一方式用于从二的补码值得出数量的大小,使用时将input1置为零。
·DCD(DC差):如果inpt2<0则进行ADC,否则进行ADD。
·VRA(向量残值加):如果input1<0则进行ADC,否则进行SBC。
B.3.4符号扩展子块
这是一个12位的单元,它根据size输入以不同方式对输入数据进行符号扩展。size是一个4位二进制数,其值为0至11(0对应于最低有效位,11对应于最高有效位)。输出是变动了的12位数据值,加上“符号”位。
在SG×MODE=NORMAL方式,所有在第size位以上(含第size位)的各位取第size位的值。所有以下各位保留不变。符号取第size位的值。例如:
data(数据)=1010 1010 1010
size=2
output(输出)0000 0000 0010,sign(符号)=0
在SG×MODE=1NVERSE方式,所有在第size位以上(含第size位)的各位取第size位的反值,而所有以下各位保留不变。符号取第size位的反值。例如:
data=1010 1010 1010
size=0
output=1111 1111 1111,sign=1
在SG×MODE=DIFMAG方式,如果第size位为零,则所有在第size位以下(含第size位)的各位取反,而所有以上各位保留不变。如果第size为1,所有各位保留不变。在两种情况,符号都取第size位的反值。本方式用于获得各AC差值的大小。例如:
data=0000 1010 1010
size=2
output=0000 1010 1101,sign=1
data=0000 1010 1010
size=1
output=0000 1010 1010,sign=0
在SG×MODE=DIFCOMP方式,所有在第size位以上(不含第size位)的各位取第size位的反值,而所有以下各位(含第size)保留不变。符号取第size位的反值。本方式用于获得各DC差值的二的补码值。例如:
data=1010 1010 1010
size=0
output=1111 1111 1110,sign=1
B.3.5条件码
Huffman块所使用的各条件码有两个字节(16位),其中某些位由ALU/寄存器组产生。这些条件码是:Sign(符号)条件码、Zero(零)条件码、Extension(扩展)条件码和变化检测位(Change Detectbit)。因为Parser对最后两种码的用法与其它几种不同,这最后两种不是真正的条件码。
Sign、Zero及Extension条件码在Parser发出一条更新指令时更新;对应于这些指令的每一条,条件码有效信号形成一个正脉冲。
Sign条件码只不过是符号扩展的sign输出的锁存,而如果A寄存器输入为零则Zero条件码置1。Extension条件码是锁存的输入扩展位,与OUTSRC无关。
条件码可以用来评定某些条件类型:
·结果等于常数-使用减法和Zero条件
·结果等于寄存器值-使用减法和Zero条件
·寄存器等于常数-使用减法和Zero条件
·寄存器位置位-使用Sign(符号)扩展和Sign条件
·结果位置位-使用Sign(符号)和Sign条件
注意当使用符号扩展和Sign条件码的组合时,只可能评定单个指定位而不是用惯常逻辑‘与’那样地评定多个位。
在本发明中变化检测位由与Zero条件码同样的逻辑产生,但是它没有伴随的有效信号。微指令中的一位指示出如果当前正在写入寄存器组的值与已存在的值不同(这意味着需要两个时钟周期,第一周期将REG-MODE置到READ,第二周期将REGMODE置到WRITE),就应该更新变化检测位。如果检测到一个变化值,就随后开始微处理器中断。变化检测位靠通常的使其有效的方法来复位,但此时REGMODE被置到READ。
硬接线的宏块计数器结构(寄存器组的一部分-见下面的说明)还产生如下的条件码:Mb_Start,Pattern_Code,Restart和Pic_Start。
B.3.6寄存器组(Register File)
寄存器组的地址变换表如下示。它使用了ALU数据路径和UPI共用七位的地址空间,有些地址是ALU不访问的,因为这些通常是硬接线的宏块结构内的计数器或在ALU自身内部的寄存器。后者有专用访问地址,但是它是UPI地址变换表的组成部分。有些多字节单元(表中用加大尺寸的“0”表示,有单个ALU地址,但是有多个UPI地址。类似地,有几类用分量计数(component count)CC(在表中用I11表示)索引的寄存器被ALU当作单地点对待。这就为初始化、重置(resetting)和宏块操作的微编程带来方便。
除了一些专用的(UPI只读的)ALU寄存器外,所有单元是读写两用的,所有计数器都由指令字中的一位复位至零。模式码(Patterncode)寄存器有右移能力,其最低有效位形成Pattern_Code条件位。所有在硬接线的宏块结构中的寄存器在表中用Macro的缩写“M”表示,那些兼作计数器(n位)用的寄存器附注为Cn。
在本发明中,某些单元的内容被硬接线至Huffman子系统编码(subsystem_coding)标准的其它部分,它们是:两个r-size地点,和到Huffman Decoder去的每张ac huff表和dc huff表的单个单元(2位字)。
用黑体表示的一些地址可被ALU和UPI存取,其它的只能由UPI存取。不是由ALU指引通过CC的一些寄存器类可以有一个被指令字指定的单一ALU地址,CC将选择要存取哪个物理单元。ALU地址可是本类寄存器任一个的地址,虽然惯常应该用第一个的地址。多字节单元的情况也如此,应该使用地址对(pair)中最低的那个,虽然实际上用两个地址均足满足。注意,单元2E和2F可以在最高级(top-level)地址转换表中被存取(用“T”表示),即不仅仅通过一些keyhole(锁孔,显示内情的)寄存器。这两处单元也被复位至零。
为了提高存取速度,寄存器组在物理上被分成四“组”(ban-ks),但这对寻址毫无影响。主表指出适用于MPEG的地址分配,随后两个有重复的部分表格分别给出用于JPEG及H.261的不同之处。
|
地址 |
地点 | | |
地址 |
地点 | | |
| | | | | | | | |
|
00 |
A register 1 | |
I |
3E |
c2 | | |
|
01 |
A register 0 | |
I |
3F |
c3 | | |
|
02 |
run | |
I.O |
40 |
dc pred_01 | | |
|
0 |
horiz pels 1 | |
I.O |
41 |
dc pred_00 | | |
|
11 |
horiz pels 0 | |
I.O |
42 |
dc pred_11 | | |
|
12 |
vert pels 1 | |
I.O |
43 |
dc pred_10 | | |
|
13 |
vert pels 0 | |
I.O |
44 |
dc prad_21 | | |
|
14 |
buff size 1 | |
I.O |
45 |
dc pred_20 | | |
|
15 |
buff size 0 | |
I.O |
46 |
dc pred_31 | | |
|
16 |
pel asp.ratio | |
I.O |
47 |
dc pred 30 | | |
|
17 |
bit rate 2 | |
O |
50 |
prev mhf 1 | | |
|
18 |
bit rate 1 | |
O |
51 |
prev mhf 0 | | |
|
19 |
bit rate 0 | |
O |
52 |
prev mvf 1 | | |
|
1A |
pic rate | |
O |
53 |
prev mvf 0 | | |
|
1B |
constrained | |
O |
54 |
prev mhb 1 | | |
|
1C |
picture type | |
O |
55 |
prev mnb 0 | | |
|
1D |
H261 picture type | |
O |
56 |
prev mvb 1 | | |
|
1E |
broken closed | |
O |
57 |
prav mvb 0 | | |
|
1F |
pred mode | |
M |
60 |
mb horiz cnt 1 |
C13 | |
|
20 |
vbv delay 1 | |
M |
61 |
mo horiz cnt 0 |
- | |
|
21 |
vbv delay 0 | |
M |
62 |
mb vert cnt 1 |
C13 | |
|
22 |
full pel fwd | |
M |
63 |
mb vert cnt 0 |
- | |
|
23 |
full pel bwd | |
M |
64 |
horiz mb 1 | | |
|
24 |
horiz mb copy | |
M |
65 |
horiz mb 0 | | |
|
25 |
pic number | |
M |
66 |
vert mb 1 | | |
|
26 |
max h | |
M |
67 |
vert mb 0 | | |
|
27 |
max v | |
M |
68 |
restart count 1 |
C16 | |
|
28 |
- | |
M |
69 |
restart count 0 |
- | |
|
29 |
- | |
M |
6A |
resiart gap 1 | | |
|
2A |
- | |
M |
6B |
restart gap 0 | | |
|
2B |
- | |
M |
6C |
horiz blk count |
C2 | |
|
2C |
lirst group | |
M |
6D |
vert blk count |
C2 | |
|
2D |
in picture | |
H.M |
6E |
comp id |
C2 | |
T.R |
2E |
rom control | |
M |
6F |
max comp id | | |
T.R |
2F |
rom revisicn | |
H.R |
70 |
coding sid | | |
I.H |
30 |
dc huff 0 | |
M.H |
71 |
partern code |
SRS | |
I |
31 |
dc huff 1 | |
H |
72 |
lwd r size | | |
I |
32 |
dc huff 2 | |
H |
73 |
bwd r size | | |
I |
33 |
dc huff 3 | | | | | | |
I.H |
34 |
ac huff 0 | | | | | | |
I |
35 |
ac huff 1 | | | | | | |
I |
36 |
ac huff 2 | |
M.I |
78 |
h0 | | |
表B.3.1 表1:Huffman寄存器组地址转移表
I |
37 |
ac huif3 |
|
M.I |
79 |
h1 |
|
|
I |
38 |
tq0 |
|
M.I |
7A |
h2 |
|
|
I |
39 |
tq1 |
|
M.I |
7B |
h3 |
|
|
I |
3A |
tq2 |
|
M.I |
7C |
v0 |
|
|
I |
3B |
tq3 |
|
M.I |
7D |
v1 |
|
|
I |
3C |
c0 |
|
M.I |
7E |
v2 |
|
|
I |
3D |
c1 |
|
M.I |
7F |
v3 |
|
|
表B.3.1表1:Huffman寄存器组地址转移表(续)JPEG不同点
|
10 |
horiz pels 1 | |
|
11 |
horiz pels 0 | |
|
12 |
vert pels 1 | |
|
13 |
vert pels 0 | |
|
14 |
buff size 1 | |
|
15 |
buff size 0 | |
|
16 |
pel asp ratio | |
|
17 |
bit rate 2 | |
|
18 |
bit rate 1 | |
|
19 |
bit rate 0 | |
|
1A |
pic rate | |
|
1B |
constrained | |
|
1C |
picture type | |
|
1D |
H261 picture type | |
|
1E |
broken closed | |
|
1F |
pred mode | |
|
20 |
vbv delay 1 | |
|
21 |
vbv delay 0 | |
|
22 |
pending frame ch | |
|
23 |
restart index | |
|
24 |
horiz mb copy | |
|
25 |
pic number | |
|
26 |
max h | |
|
27 |
max v | |
|
28 |
- | |
|
29 |
- | |
|
2A |
- | |
|
2B |
- | |
|
2C |
first scan | |
|
2D |
in picture | |
|
2E |
rom control | |
|
2F |
rom revision | |
表B.3.2 JPEG不同点
H.261不同点
|
10 |
horiz pels 1 | |
|
11 |
horiz pels 0 | |
|
12 |
vert pels 1 | |
|
13 |
vert pels 0 | |
|
14 |
buff size 1 | |
|
15 |
buff size 0 | |
|
16 |
pel asp.rado | |
|
17 |
bit rate 2 | |
|
18 |
bit tate 1 | |
|
19 |
bit rate 0 | |
|
1A |
pic rate | |
|
1B |
constrained | |
|
1C |
picture type | |
|
1D |
H261 picture type | |
|
1E |
broken closed | |
|
1F |
pred mode | |
|
20 |
vbv delay 1 | |
|
21 |
vbv delay 0 | |
|
22 |
full pel fwd | |
|
23 |
full pel bwd | |
|
24 |
horiz mb copy | |
|
25 |
pic number | |
|
26 |
max h | |
|
27 |
max v | |
|
28 |
- | |
|
29 |
- | |
|
2A |
- | |
|
2B |
in gob | |
|
2C |
first group | |
|
2D |
in picture | |
|
2E |
rom control | |
|
2F |
rom revision | |
表B.3.3 H.261不同点
|
2C |
first group |
|
|
2D |
in picture |
|
|
2E |
rom control |
|
|
2F |
rom revision |
|
B.3.7微指令字
根据本发明,ALU微指令字分割为几个字段,每一字段控制着上述结构的一个不同方面。指令字中使用的总位数是36(另加1位作扩展位输入),采用最少的跨字段编码,所以保持了硬件配置的最大灵活性。指令字分割的详述见后。缺省的字段值,即那些不改变ALU或寄存器组状态的值用斜体字样给出。
表B.3.4 表2:Huffman ALU微指令字段
字段 值 说明 位
OUTSRC RSA6 运行,符号,A寄存器as 6位 0000
(它指 ZZA 零,零,A寄存器 0001
定run)
sign, ZZA8 零,零,A寄存器最低有效(ls)8位 0010
level
output的 ZZADDU4 零,零,加法器输出最高有效(ms) 0011
4位
源) ZINPUT 零,输入数据 0100
RSSGX 运行,符号,符号扩展输出 0111
RSADD 运行,符号,加法器输出 1000
表B.3.4 表2:Huffman ALU微指令字段(续)
字段 值 说明 位
RZADD 运行,零,加法器输出 1001
RIADD 输入运行,零,加法器输出
ZSADD 零,符号,加法器输出 1010
ZZADD 零,零,加法器输出 1011
NONE 无有效输出-out valid置零 11XX
REGADDR 00-7F 用于ALU存取的寄存器组地址 7位
REGSRC ADD 将加法器输出驱动到寄存器组输入 0
之上
SGX 将符号扩展输出驱动到寄存器组输 1
入之上
REGMODE RFAD 从寄存器组读出 0
WRITE 写入寄存器组 1
CNGDET TEST 如果REGMODE为WRITE,则更新变化 0
检测
变化检测 HOLD 不更新变化检测位 1
CLEAR 如果REGMODE为READ则变化检测复位 0
RUNSRC RUNIN 将运行输入驱动到运行寄存器输入之 0
上
(运行源) ADD 将加法器输出驱动到运行寄存器输入 0
之上
表B.3.4 表2:Huffman ALU微指令字段(续)
字段 值 说明 位
RUNMODE LOAD 更新运行寄存器 0
HOLD 不更新运行寄存器 1
ASRC ADD 将加法器输出驱动到A寄存器输入之上 00
(A寄存 INPUT 将输入数据驱动到A寄存器输入之上 01
器源)
SGX 将符号扩展输出驱动到A寄存器输入之 10
上
REG 将寄存器组输出驱动到A寄存器输入之 11
上
AMODE LOAD 更新A寄存器 0
HOLD 不更新A寄存器 1
SGXMODE NORMAL 符号扩展取同值 00
(符号扩 INVERT 符号扩展取反值 01
展方式, DIFMAG 如果符号位为0则较低各位取反 10
见3.4节) DIFCOM 符号扩展,从下一高位起取反值 11
SIZESRC CONST 将常数输入驱动到符号扩展size输 00
入之上
(符号扩 A 将A寄存器驱动到符号扩展size输入 01
展 之上
表B.3.4 表2:Huffman ALU微指令字段(续)
字段 值 说明 位
SIZE输 REG 将寄存器组输出驱动到符号扩展size 10
入 输入之上
的源) RUN 将运行寄存器驱动到符号扩展size输 11
入之上
SGXSRC INPUT 将输入数据驱动到符号扩展size输入 0
之上
(sgx输入) A 将A寄存器驱动到符号扩展size输入之 1
上
ADDMODE ADD 输入1+输入2 000
(加法器 ADC 输入1+输入2+1 001
方式
见3.3节) SBC 输入1-输入2-1 010
SUB 输入1-输入2 011
TCI 如果输入2<0则SUB,否则ADD-2的补 100
码
DCD 如果输入2<0则ADC,否则ADD-DC差 101
VRA 如果输入1<0则ADC,否则SBC-向量 110
残值加
ADDSRC1 A 将A寄存器驱动到加法器输入1之上 00
(加法器 REG 将寄存器组输出驱动到加法器输入1 01
输入 之上
表B.3.4 表2:Huffman ALU微指令字段(续)
字段 值 说明 位
1的源- INPUT 将输入数据驱动到加法器输入1之上 10
不取反) ZERO 将零驱动到加法器输入1之上 11
ADDSRC2 CONST 将常数驱动到加法器输入2之上 00
(输入取 A 将A寄存器驱动到加法器输入2之上 01
反的源) INPUT 将输入数据驱动到加法器输入2之上 10
REG 将寄存器组输出驱动到加法器输入2之 11
上
CNDCMODE TEST 更新各条件码 0
(条件码) HOLD 不更新各条件码 1
CNTMODE NOCOUNT 各计数器不增值 ×00
(宏块结 BCINCR 块计数器及脉冲(ripple)增值 001
构计数
方式) CCINCR 分量计数强制增值 010
RESET 将宏块结构内所有计数器复位 011
DISABLE 禁止所有计数器 1××
INSTMODE MULTI 当前指令多次选代 0
SINGLE 仅为单周期指令 1
B.4缓存器管理器(Buffer Manager)
B.4.1引言
根据本发明,本文件说明缓存器管理器(bman)的用途、作用及其具体装置。
B.4.2概述
缓存器管理器为DRAM接口提供四个地址。这些地址是DRAM中的页地址。DRAM接口含有在DRAM内的两个FIFO、编码数据缓冲器及令牌数据缓冲器。因此,为这四个地址,每个缓存器各有一个读地址和一个写地址。
B.4.3接口
缓存器管理器只接到DRAM接口和微处理器。微处理器只是用来设置各“初始化寄存器”(见表B.4.4)。与DRAM接口的接口是四个18位地址,每个地址由请求/响应(REQuest/ACKnowledge)协定控制。(因为缓存器管理器不在数据路径之中,所以缓存器管理器没有双线接口。)
此外,缓存器管理器的操作不用(operates off)DRAM接口时钟发生器,但使用(on)DRAM接口扫描链(scan chain)。
B.4.4地址计算
每个缓存器的读地址和写地址由9个18位的寄存器产生:
初始化寄存器(按照微处理器读写)
·BASECB-编码数据基地址缓存器
·LENGTHCB-编码数据缓存器的最大容量(单位:页)
·BASETB-令牌数据基地址缓存器
·LENGTHTB-令牌数据缓存器的最大容量(单位:页)
·LIMIT-DRAM容量(单位:页)
动态寄存器(从微处理器只读)
·READCB-相对于BASECB的编码数据缓存器读指针
·NUMBERCB-相对于READCB的编码数据缓存器写指针
·READTB-相对于BASETB的令牌数据缓存器读指针
·NUMBERTB-相对于READTB的令牌数据缓存器写指针
地址计算公式:
readaddr(读地址)=(BASE+READ)mod LIMIT
writeaddr(读地址)=(((READ+NUMBER)mod LENGTH)+BASE)mod LIMIT
所用“mod LIMIT”项是因为缓存器可以围绕DRAM重叠(Wraparound DRAM)。
B.4.5块说明
在本发明中,如图127所示,缓存器管理器由三个接成环形的顶层(top level)模块组成,环的窥测器(snooper)监视着DRAM接口的连接情况。这些模块是bmprtize(优先化),bminstr(指令)和bmrecalc(重新计算),它们按此顺序安排在一个环内,还有bmsnoop(窥测器)安排在各地址输出端。模块Bmprtize处理REQ/ACK协议和各缓存器的FULL/EMPTY(满/空)标志,它还含有每个地址的状态,即“这是有效地址吗?”。根据这个信息,它规定bminstr应该重新计算哪个地址(假定有的话)。它还管理BUF_CSR(状态)微处理器寄存器,指示各FULL/EMPTY标志;并管理buf_access微处理器寄存器,以及控制微处理器对缓存器管理器各寄存器的写访问。
一经bmprtize告知计算地址,模块Bminstr就发出六条指令(每两个周期发一条)以控制bmrecalc去计算某个地址。
模块Bmrecalc在bminstr的指令下重新计算地址。此模块每两个周期运行一条指令,它包含所有的初始化寄存器和动态寄存器,还包括一个能做加法、减法和模数运算的简单ALU。当它完成地址计算或它检测到FULL/EMPTY状态时,就把这些状态告知bmprtize。
B.4.6块的具体实现
B.4.6.1 Bmprtize
在复位状态,buf_access微处理器寄存器被置为1以允许各初始化寄存器的设置。当buf_access读回1时,不启动地址的计算,因为没有有效的初始化寄存器这些计算就毫无意义。
一旦buf_access被去除确认(de_asserted)(对它写入零),bmprtize就着手使所有地址为有效(用重新计算这些地址),因为它的用途就是保持所有四个地址都有效。目前,缓冲器管理器正在“启动”(即所有地址还未算出),因此请求不被确认。一旦所有地址成为有效,启动阶段即告结束,所有请求被确认。从此之后,当某地址成为无效时(因为它已被用过和响应过),该地址就重新计算。
永远不会需要对各地址定优先级别,因为DRAM接口的能力是最快每17个周期使用一个地址,而缓存器管理器的能力是每12个周期重新计算一个地址。所以每次启动后总是只有一条地址无效。因此bmprtize将会重新计算任何不是当前计算的无效地址。
在本发明中,当buf_access被确认时,启动将会重新进入,因此,在微处理器各次访问期间,不会有地址提供给DRAM接口。
B.4.6.2 Bminstr
Bminstr模块含有一个模12周期的计数器(产生一条地址所用的周期数)。注意,偶数周期启动一条指令,而奇数周期结束一条指令。最高的3位连同这是读计算还是写计算一起被解码成bmreca-lc的如下指令:
用于读地址:
表B.4.1 读地址的计算
周期 操作 A总线 B总线 结果 结果符号的意义
0-1 ADD READ BASE
2-3 MOD 累加器 LIMIT 地址
4-5 ADD READ “1”
6-7 MOD Accum LENGTH READ
8-9 SUB NUMBER “1” NUMBER
10-11 MOD “0” Accum SET_EMPTY
(NUMBER>=C)
用于写地址的:
表B.4.2 用于写地址的计算
周期 操作 A总线 B总线 结果 结果符号的意义
0-1 ADD NUMBER READ
2-3 MOD Accum LIMIT
4-5 ADD Accum BASE
6-7 MOD Accum LIMIT Address
8-9 ADD NUMBER “1” NUMBER
10-11 MOD Accum LENGTH SET_FULL
(NUMBER>=
LEHGTH)
注:最后一次操作的结果总是保留在累加器内。
当没有需要重新计算的地址时,周期计数器空闲在零值,因此产生一条不写入任何寄存器的指令。这不产生什么影响。
B.4.6.3 Bmrecalc
模块Bmrecalc每两个时钟周期完成一次操作。在一个偶数计数器周期(start_alu_cyc)内,它将由bminstr来的指令(以及是哪个缓冲器,是输入还是输出)锁存进来,在一个奇数计数器周期(end_alu_cyc)内锁存操作结果。操作结果除了贮存在指令所指定的寄存器内之外,还总是贮存在名叫“Accum”的寄存器内。此外,在end_alu_cyc周期,bmrecalc告知bmprtize刚计算出来的地址的使用会使缓存器满还是空,以及何时地址及满/空已经成功地算出load_addr)。
满/空是利用操作结果的符号位来计算的。
模块操作并不是真正的模运算,A mod B是这样实现的:
(A>B?(A-B):A)
然而这只是在以下场合才出错:
A>(2B-1)
这永远不会出现。
B.4.6.4 Bmsnoop
模块Bmsnoop由四个18位的超级窥探器(snoopers)组成,它们监视着给DRAM接口提供的各个地址。窥探器必须是“超级的”(即可以在时钟运行时被访问),以允许对外部DRAM的芯片上测试。这些窥探器必须以REQ/ACK(请求/响应)方式工作,所以在器件使用上与别的窥探器不同。
在本接口使用REQ/ACK而不用双线协议,因为它发送信息(即响应)返回到发送方而不接收。所以,这就严格地监视了各FIF0指针。
B.4.7寄存器
为了获得微处理器对各初始化寄存器的写访问,应该对buf_access写入1,然后当buf_access读回1时才给予存取。反之,要放弃微处理器的写访问,应该给buf_access写入零。当buf_access读回零时才给予访问。注意,buf_access复位为1。
本发明的各动态寄存器和初始化寄存器可以在任何时候读取。但是为了确保各动态寄存器不致逐渐改变(are not changing)微处理器,就必须获得写访问。
只打算对各初始化寄存器写入一次。对它们重新写入可能导致各缓冲器操作不正确。但是可以予计on-the-fly时要增加缓冲器长度(length)并予计在适当时要让缓存器管理器使用新的长度。
从来不对各初始化寄存器内的值时行检查以确保其切合实际(如确保各缓存器不互相重迭)。这是用户的责任。
表B.4.3 缓存器管理器非锁孔寄存器
寄存器名 |
用法 |
地址 |
CED_EUF_ACCESS | xxxxxxxD | 0x24 |
CED_BUF_KEYHOLE_ADDR |
xxDDDDDD |
0x25 |
CED_BUF_KEYHOLE |
DDDDDDDD |
0x25 |
CED_BUF_CB_WR_SNP_2 |
xxxxxxCD |
0x54 |
CED_BUF_CB_WR_SNP_1 |
DDDDDDDD |
0x55 |
CED_BUF_CB_WR_SNP_0 |
DDDDDDDD |
0x56 |
CED_BUF_CB_RD_SNP_2 |
xxxxxxDD |
0x57 |
CED_BUF_CB_RD_SNP_1 |
DDDDDDDD |
0x58 |
CED_BUF_CB_RD_SNP_0 |
DDDDDDDD |
0x59 |
CED_BUF_TB_WR_SNP_2 |
xxxxxxDD |
0x5a |
CED_BUF_TB_WR_SNP_1 |
DDDDDDDD |
0x5b |
CED_BUF_TB_WR_SNP_0 |
DDDDDDDD |
0x5c |
CED_BUF_TB_RD_SNP_2 |
xxxxxxDD |
0x5d |
CED_BUF_TB_RD_SNP_1 |
DDDDDDDD |
0x5e |
CED_BUF_TB_RD_SNP_0 |
DDDDDDDD |
0x5f |
表中D表示寄存器位,X表示不是寄存器位。
表B.4.4 在缓存器管理器锁孔内的寄存器
锁孔寄存器名 |
用法 |
锁孔地址 |
CED_BUF_CB_BASE_3 |
xxxxxxxx |
0x00 |
CED_BUF_CB_BASE_2 |
xxxxxxDD |
0x01 |
CED_BUF_CB_BASE_1 |
DDDDDDDD |
0x02 |
CED_BUF_CB_BASE_0 |
DDDDDDDD |
0x03 |
CED_BUF_CB_LENGTH_3 |
xxxxxxxx |
0x04 |
CED_BUF_CB_LENGTH_2 |
xxxxxxDD |
0x05 |
CED_BUF_CB_LENGTH_1 |
DDDDDDDD |
0x06 |
CED_BUF_CB_LENGTH_0 |
DDDDDDDD |
0x07 |
CED_BUF_CB_READ_3 |
xxxxxxxx |
0x08 |
CED_BUF_CB_READ_2 |
xxxxxxDD |
0x09 |
CED_SUF_CB_READ_1 |
DDDDDDDD |
0x0a |
CED_BUF_CB_REAO_0 |
DDDDDDDD |
0x0b |
CED_SUF_CB_NUMBER_3 |
xxxxxxxx |
0x0c |
B.4.8校验
校验在Lsim中进行,用一些小型FIFO加到模拟的(dummy)DRAM接口上,使用C码作为顶层芯片模拟的一部分。
B.4.9测试
覆盖bman的测试是通过bmsnoop内的各窥探器(snoopers)、各动态寄存器(见B.4.4节)及使用扫描链来进行。该扫描链是DRAM接口扫描链的一部分。
B.5逆向模型器(Inverse Modeler)
B.5.1引言
本文件根据本发明说明逆向造型器(imodel)和令牌格式化器(hsppk)的用途、作用和具体实现。
锁孔寄存器名 |
用法 |
锁孔地址 |
CED_BUF_CB_NUMBER_2 |
xxxxxxDD |
0x0d |
CED_BUF_CB_NUMBER_1 |
DDDDDDDD |
0x0e |
CED_BUF_CB_NUMBER_0 |
DDDDDDDD |
0x0f |
CED_BUF_TB_BASE_3 |
xxxxxxxx |
0x10 |
CED_BUF_TB_BASE_2 |
xxxxxxDD |
0x11 |
CED_BUF_TB_BASE_1 |
DDDDDDDD |
0x12 |
CED_BUF_TB_BASE_0 |
DDDDDDDD |
0x13 |
CED_BUF_TB_LENGTH_3 |
xxxxxxxx |
0x14 |
CED_BUF_TB_LENGTH_2 |
xxxxxxDD |
0x15 |
CED_BUF_TB_LENGTH_1 |
DDDDDDDD |
0x16 |
CED_BUF_TB_LENGTH_0 |
DDDDDDDD |
0x17 |
CED_BUF_TB_READ_3 |
xxxxxxxx |
0x18 |
CED_BUF_TB_READ_2 |
xxxxxxDD |
0x19 |
CED_BUF_TB_READ_1 |
DDDDDDDD |
0x1a |
CED_BUF_TB_READ_0 |
DDDDDDDD |
0x1b |
CED_BUF_TB_NUMBER_3 |
xxxxxxxx |
0x1c |
CED_BUF_TB_NUMBER_2 |
xxxxxxDD |
0x1d |
CED_BUF_TB_NUMBER_1 |
DDDDDDDD |
0x1e |
CED_BUF_TB_NUMBER_0 |
DDDDDDDD |
0x1f |
CED_BUF_LIMIT_3 |
xxxxxxxx |
0x20 |
CED_BUF_LIMIT_2 |
xxxxxxDD |
0x21 |
CED_BUF_LIMIT_1 |
DDDDDDDD |
0x22 |
CED_BUF_LIMIT_0 |
DDDDDDDD |
0x23 |
CED_BUF_CSR |
xxxxDDDD |
0x24 |
表B.4.4 在缓存器管理器锁孔内的寄存器
注:hsppk在体制上是Huffman解码器的一部分,但在功能上却是逆向造型器的一部分。所以在本节中加以讨论比较好。
B.5.2概述
令牌缓冲器处于imodel和hsppk之间,它可以容纳大量数据,这些数据全都在片外(off_chip)的DRAM中。为了确保有效地使用该存贮器,数据必须是16位格式的。格式化器将来自Huffman解码器的数据“打包”(packs)成适合于令牌缓存器的这种格式。其后,逆向模型器将数据从令牌缓存器格式中“解包(unpacks)”出来。
然而,逆向模型器的主要功能是将各“run/level(运行/电平)码扩充出来,成为一个零数据的run,后继一个level。此外,逆向模型器确保各DATA令牌至少有64个系数,它还提供一个“门(gate)”用于停止不曾满足它们的启动准则的那些流(streams)。
B.5.3接口
B.5.3.1 Hsppk
在本发明中,Hsppk有Huffman解码器作为输入和令牌缓存器作为输出。这两个接口都是双线类型的,输入是一个17位令牌端口(Port),输出是16位“打包数据”,加上一个FLUSH信号。此外Hsppk的时钟来自Huffman时钟产生器,因此被连接到Huffman扫描链。
B.5.3.2 Imodel
Imodel有令牌缓存器启动输出门逻辑(start_up output gatelogio)(bsogl)作为输入和逆向量化器(Inverse Quantizer)作输出。来自令牌缓存器的输入是16位“打包的数据”,加上block_end(块结束)信号,从bsogl来的是一个wirestream_enable信号。输出是一个11位令牌端口。所有接口都受双线接口协议(protocol)控制。Imodel有它自己的时钟产生器和扫描链。
微处理器对Imodel和Hsppk这两个块只访问到它们输出处的各个窥探器。
B.5.4块说明
B.5.4.1 Hsppk
Hsppk从Huffman取入17位数据,而输出16位数据至令牌缓存器。这一过程是这样完成的:首先,将输入数据截断(truncating)或分割(splitting)成一些12位的字,其次将这些字打包成16位的格式。
B.5.4.1.1分割
Hsppk从Inverse Huffman接受17位数据。运用以下各种格式将此数据格式化成12位。
其中F=指定格式;E=扩展位;R=运行位;L=长度位(按照符号量值排列)或非数据令牌位;X=无须关心。
FLLLLLLLLLLLFormat 0
ELLLLLLLLLLLFormat 0a
FRRRRRR00000Format 1
正常的令牌只占据最低12位,其形式为:
ExxxxxxLLLLLLLLLLL
这被截断成格式0a。
但是数据令牌在每个字中有一个run和一个level,其形式为:
ERRRRRRLLLLLLLLLLL
这被分成以下格式:
ERRRRRRLLLLLLLLLLL->FRRRRRR00000Format 1
ELLLLLLLLLLLFormat 0a
或者,如果run为零,则使用格式0:
EOOOOOOLLLLLLLLLLL->FLLLLLLLLLLLFormat 0
可以看出在格式0中,扩展位不见了,假定它是1。因此,当扩展位为零时就不能用格式0。在此情况下,无条件地使用格式1。
B.5.4.1.2打包(packing)
在分割之后的所有数据字都是12位的宽度。每四个12位字被打包成三个16位字:
表B.5.1 打包方法
各输入字 |
各输出字 |
000000000000 |
0000000000001111 |
111111111111 |
1111111122222222 |
222222222222 |
2222333333333333 |
333333333333 | |
B.5.4.1.3缓冲器的冲洗(flushing)
本发明的DRAM接口在收集一块(32个16位“经过打包”的字)之后,再将它写入缓存器。这意味着如果块只是部分地齐全的话,数据可以在一个流(stream)的末尾被堵在DRAM接口内。因此需要一种冲洗技巧。据此,Hsppk发信号通知DRAM接口无条件地写它当前的部分齐全的块。
B.5.4.2.1 Imup(UnPcker,解包器)
Imup完成三个功能:
1)对数据解包,从它的16位格式变成12位字。
表B.5.2 解包的方法
输入字 |
输出字 |
0000000000001111 |
000000000000 |
1111111122222222 |
111111111111 |
2222333333333333 |
222222222222 |
|
333333333333 |
2)在令牌缓存器清除期间保持正确的数据。
当DRAM接口用无条件地写当前部分齐全的块的方法flush时,垃圾(rubbish)数据保留在块内。imup必须删除垃圾数据,即删除所有来自FLUSH令牌的数据,一直到块的末尾。
3)将数据保存在原地直到起动判据(statr_up Criteria)被满足
从本块输出数据的条件是:对每一个不同的流,收到来自缓冲器起动(Buffer Startup)的“有效”信号(stream_enable)。于是,12位数据被输出到hsppk。
B.5.4.2.2Imex(Expander扩充器)
在本发明中,Imex将所有的游程长度码(run length codes)扩充为一些数值是零的run,后继一个level。
B.5.4.2.3 Impad(PADder,装填器)
Impad确保所有的数据令牌体含有64(或更多的)字。它是在令牌的最后字中装填一些0来做到这点的。对数据令牌是不检查它在体内有64个以上的字的。
B.5.5块的实现
B.5.5.1 Hsppk
典型情况下,分割和打包在单一周期内完成。
B.5.5.1.1分割(splitting)
首先必须决定格式
IF(datatoken)
IF(last format==1)use format 0a;
ELSE IF(run==0)use format 0;
ELSE use format 1;
ELSE use format 0a;
其次必须决定格式位
format 0 formatbit=0;
format 0a format bit=extension bit;
format 1 format bit=1;
如果使用格式1,在下一周期不应该接受新的数据,因为码的level还有必须输出。
B.5.5.1.2打包
每四个有效数据输入打包过程循环一次。16位的字输出由保留的最后有效字和它的后继字组成。如果这种组成无效,则输出也无效。过程为:
表B.5.3 打包过程
|
保留字 |
后继字 |
组合字 |
有效周期0 |
XXXXXXXXXXXX |
000000000000 |
XXXXXXXXXXXXXXXX |
不要输出 |
有效周期1 |
000000000000 |
111111111111 |
0000000000001111 |
输出 |
有效周期2 |
111111111111 |
222222222222 |
1111111122222222 |
输出 |
有效周期3 |
222222222222 |
333333333333 |
2222333333333333 |
输出 |
表中x表示未定义的位。
在有效周期0期间,没有字输出,因为该字无效。
有效周期数用环形计数器维待。计数器的增量由分割器的有效数据和一个已接受的输出来控制。
当收到FLUSH令牌(或picture_end)且令牌本身准备好输出时,FLUSH信号也输出到DRAM接口以便将有效周期复位到零。如果FLUSH令牌在除周期3以外的任何时间来到,则FLUSH信号被延迟一周,以确保令牌本身的输出。
B.5.5.2 Imodel
B.5.5.2.1 Imup(UnPacker解包器)
与打包器情况相同,最后的有效输入被贮存,并与下一个输入结合,然后允许解包。
表B.5.4 解包的过程
|
后继字 |
保留字 |
解包后的字 | |
有效周期0 |
0000000000001111 |
xxxxxxxxxxxxxxxx |
000000000000 |
输入 |
有效周期1 |
1111111122222222 |
0000000000001111 |
111111111111 |
输入 |
有效周期2 |
2222333333333333 |
1111111122222222 |
222222222222 |
输入 |
有效周期3 |
2222333333333333 |
1111111122222222 |
333333333333 |
不要输入 |
这里x表示未经定义的位。
有效周期由一个环形计数器来维持。解包的数据包含令牌的数据,FLUSH和由FLUSH解码的PICTURE_END信号。此外,格式和扩展位也由解包数据解码出来。
formatbit_is_extn=(lastformat==1)11 databody
format=databody &&(formatbit &&
lastformatbit)
用于令牌解码并传送到imex。
当某一FLUSH(或picture_end)令牌被解包出来并输出至imex时,所有数据被删除(Valid被强制为低),直至从DRAM接口收到块结束信号。
B.5.5.2.2 Imex(扩展器)
根据本发明,imex是将run/level码扩充出来的四状态机。该状态机是:
·状态0:从run码装入rum计数。
·状态1:run减计数,输出各位零。
·状态2:输入数据和输出levels;缺省状态。
·状态3:非法状态。
B.5.5.2.3 Impad(填充器)
数据令牌头由imex告知Impad。下一步,impad对令牌体的系数数目进行计数。如果令牌在达到64个系数之前结束,则在令牌结束处插入数值为零的系数,使令牌有64个系数。例如,未扩展的数据头在其后有64个零系数插入。具有64个或更多系数的数据令牌不受impad的影响。
B.5.6寄存器
本发明的imodel和hsppk没有微处理器寄存器,但是它们的窥测器除外。
表B.5.5 Imodel和hsppk的寄存器
寄存器名 用法 地址
CED_H_SNP_2 VAxxxxxx 0X49
CED_H_SNP_1 DDDDDDDD 0X4a
CED_H_SNP_0 DDDDDDDD 0X4b
CED_IM_SNP_1 VAExxDDD 0X4a
CED_IM_SNP_0 DDDDDDDD 0X4d
这里V=有效位;A=接受位;E=扩展位;D=数据位。
B.5.7校验
选定的流通过Lsim模拟运行。
B.5.8测试
在输入是通过令牌缓存输出窥测器,在输出是通过imodel自身的窥测器来达到对imodel的测试。通过imodel自身的扫描链来达到逻辑。
hsspk的输出可以通过huffman输出窥测器来访问。逻辑可以通过huffman扫描链来观察。
B.6缓存起动(Butfer Start_up)
B.6.1引言
本节根据本发明说明缓存起动的方法和实现。
B.6.2概述
为保证图象流可以流畅和连续地显示,在解码能开始之前必须收集一定数量的数据。这称做起动条件。编码标准指定了一个VBV延迟,此延迟可以大致地转换成需要收集的数据量。″缓存起动″的用途就是确保在每一个流中的数据从令牌缓存器前进以容许解码之前,该流满足它的启动条件。流被一个名义上的(notional)门(输出门)保持在各缓存器中。这个门位于令牌缓存器的输出处(即在逆向模型器内),它只在流的启动条件已得到满足时才为流打开。
B.6.3接口
Bsontbit(Buffer Start_up bit counter,缓存启动位计数器)在数据通路内,用双线接口通信。它接到微处理器。它也用双线接口分接到bsogl(Buffer Start_up Output gate Logic,缓存启动输出门逻辑)去。Bsogl通过双线逻辑去控制imup(Inverse Modeler UnPacker,逆向模型器解包器),imup实现输出门。
B.6.4块结构
如图130所示,Bscnbit位于数据通路之内。该通路在起始码检测器和编码数据缓存器之间。Bscntbit这个单周期部件对离开本块的数据的有效字计数,并将这个数字与必须由微处理器装入的启动条件(或叫目标)相比较。一旦目标被达到,就通知bsogl。数据不受bscntbit的影响。
Bsogl位于bscntbit和(在逆向模型器内的)imup之间。在效果上,它是一个指示符(indicators)队列,用来指示各流已满足它们的目标。队列靠离开缓存器的流(即,在imup处的数据流中收到的FLUSH令牌)来向前移动,随后另一个“指示符”被imup接受。如果队列为空(即在缓存器中没有已满足启动目标的流),则在imup中,流被停止。
队列只有一定的深度,然而,可在bsogl内将队列断开,并允许微处理器监控队列,用这种方法,深度就可以无穷地扩充。这些队列机构分别称作内队列和外队列。
B.6.5功能块的实现
B.6.5.1 Bsbitcnt(缓存起动位计数器)
Bscntbit对所有输入到缓存起动的有效字计数。计数器(bsctr)是一个可编程16~24位宽度的计数器。此外,bsctr具有超前进位(carry look ahead)线路以给予足够快的速度。Bsctr的宽度用ced_bs_prescale来编程。方法是强制8至16位为高,这就使这些位总能传送一个进位。所以实际上没有使用它们。只有bsctr的最高8位用来与目标(ced_bs_target)作比较。
比较(ced_bs_count>=ced_bs_target)是由bscmp完成的。
目标是在流处于Huffman解码器中的时候从流中得来的,它又是用微处理器计算的。所以它只是在流开始之后的某个时候才被设置。在起动之前,target_valid被置为低。对ced_bs_target的写入使target_valid被置为高,并允许在bscmp中进行比较。当比较结果显示ced_bs_count>=ced_bs_target时,target_valid被置为低。目标已经满足。
当目标被满足时,计数被复位。注意,它并不是在流的末端复位的。此外,在目标被满足之后禁止计数,如果这是在流末之前的话。计数的饱和值是255。
当在bsbitcnt中检测到一次流的结束(即一次FLUSH)时,就产生abs_flush_event。如果流在目标满足之前结束,还产生另外一个事件(bs_flush_before_target_met_event)。当这些事件的任一个出现时,块被停住。这就允许用户去重新开始搜索下一个流的目标,或者,如果是bs_flush_before_target_met_event事件,则或者:
1)写入零目标,强使一次target_met
或者:
2)注意到目标在以前没有达到,允许下一个流前进,直到它和上一个流一起达到目标。这下一个流的目标可以/应该作相应的调整。
B.6.5.2 BSOGL(缓存起动输出门逻辑)
如前所述,Bsogl是一个用来指示流已经满足目标的指示符队列。队列类型用ced_bs_queue设置(内部队列为0,外部队列为1)。复位时选择内部队列。队列深度决定了满足条件的流的最大数。流可以在编码数据缓存器、Huffman或令牌缓存器内。当达到此数(即队列满)时,bsogl会强制数据通路停在bsbitcnt处。
使用内部队列不需要来自微处理器的动作。然而,如果有必要增加队列深度,则可以设置外部队列(方法是:ced_bs_access被置位,以获得对ced_bs_queue的访问,后者应被置位,target_met_event和stream_end_event被使能,然后访问被撤回)。
外部队列(由微处理器照管(maintain)的计数值)被插入内部队列。外部队列由两个事件target_met_event和stream_end_event和一个寄存器ced_bs_enable_nxt_stream来照管(maintain)。这两个事件可以简单地分别称作service_queue_input和service_queue_output。事实上,target_met_event是提供(supply)队列的内部队列上流端(up stream end)。类似地,ced_bs_enable_nxt_stream是吸收(consume)队列的内部队列下流端(down stream end)类似地,stream_end_event是对提供下流队列(down stream quence)的请求;stream_end_event使ced_bs_enable_nxt_stream复位。
对这两个事件的使用应当如下:
/*TARGET_MET_EVENT*/
j=micro_read(CED_BS_ENABLE_NXT_STM);
if(j==0)/*Is next stream enabled?*/
{/*no,enable it*/
micro_write(CED_BS_ENABLE_NXT_STM,1);
printf(*enable next stream(queue=0×%×)\n*,(context->queue));
}
else/*yes,increment the queue of *target_met* streams*/
{
queue++;
printf(*stream already enabled(queue=0x8x)\n*,(context-
>queue));
}
<dp n="d456"/>
/*STREAM_EVENT*/
if(queue>0)/*are there any *target_mets*left?*/
(/*yes,decrement the queue and enable another stream*/
queue--;
micro_write(CED_BS_ENABLE_NKT_STM,1);
printf(*enable next stream(queue=0x8x)\n*,(context->queue));
}
else
printf(*queue empty cannot enable next stream(queue=0x8x)\n*,
queue);
micro_write(CED_EVENT_1.1<<BS_STREAM_END_EVENT);/*clear event
*/
队列类型可以在任何时候由内部转为外部(用上述方法),但是只有当外队列空(根据上述的“queue=0”)时,才能将队列类型由外队列转成内队列。转换的方法是:ced_bs_access被置位,以获得对ced_bs_queue的访问,后者应被置位,target_met_event和stream_end_event被屏蔽,然后访问被撤回。
另一方面,不能对流起动条件的检查,对ced_bs_queue(外部)置位,将target_met_event和stream_end_event屏蔽掉,然后对ced_bs_enable_nxt_stream置位。这样,所有的流就将总是被使能。B.6.6微处理器寄存器
-B104-
寄存器名 |
用法 |
地址 |
CED_BS_ACCESS |
xxxxxxxD |
0x10 |
CED_BS_PRESCALE* |
xxxxFDD |
0x11 |
CED_BS_TARGET* |
DDDDDDDD |
0x12 |
CED_BS_COUNT* |
DDDDDDDD |
0x13 |
BS_FLUSH_EVENT |
rrrrrDrr |
0x02 |
BS_FLUSH_MASK |
rrrrrDrr |
0x03 |
BS_FLUSH_BEFORE_TARGET_MET_EVENT |
rrrrDrrr |
0x02 |
BS_FLUSH_BEFORE_TARGET_MET_MASK |
rrrrDrrr |
0x03 |
表B.6.1 BSCNTbit寄存器
寄存器名 |
用法 |
地址 |
TARGET_MET_EVENT |
rrrDrrrr |
0x02 |
TARGET_MET_MASK | rrrDrrrr | 0x03 |
STREAM_END_EVENT |
rrDrrrrr |
0x02 |
STREAM_END_MASK |
rrDrrrrr |
0x03 |
CED_BS_OUEUE* |
xxxxxxxD |
0x14 |
CED_BS_ENABLE_NXT_STM* |
xxxxxxxD |
0x15 |
表B.6.2 Bsogl寄存器
这里
·D是一个寄存器位
·x是一个不存在的寄存器位
·r是一个保留的寄存器位
·为了获得对这些寄存器的存取,ced_bs_access必须置成1并被查询直到它读回1,除非是在某个中断服务程序中。将ced_bs_access置成零来放弃存取。
B.7 DRAM接口
B.7.1概述
在本发明中,空间解码器、时间解码和视频格式化器各有一个特殊芯片的DRAM接口部件。在所有的三种装置中,DRAM接口的用途是通过地址发生器提供的块地址将数据从芯片传送到外部DRAM和从外部DRAM传送到芯片。
在典型情况下,DRAM接口用以工作的时钟既和地址发生器异步,也和数据通过的不同部件的时钟异步。然而,这种异步容易得到处理,因为各时钟都大致工作在相同频率上。
数据通常在DRAM接口和芯片其余部分之间以64字节的块为单位进行传送(唯一的例外是时间解码器中的预测数据)。传送靠使用一种叫作“交替缓存器”的装置。这在本质上是一对以双缓存结构形式工作的RAM,在DRAM接口填满(filling)或出空(emptying)一个RAM的同时,芯片另一部分则出空或填满另一个RAM。每个交替缓存器都挂在各自分别的总线上,该各别总线的地址由地址发生器产生。
每一种芯片都有四个交替缓存器,但这些缓存器的功能在每种芯片是不同的。在空间解码器中,一个交替缓存器用于将已编码数据传送到DRAM,另一个用于从DRAM读取已编码数据,第三个用于将已令牌化数据传送到DRAM,第四个用于从DRAM读取已令牌化数据。在时间解码器中,一个交替缓存器用于将基(Intra)或预测的(Predicted)图象数据写入DRAM,第二个用从DRAM读取基或预测的数据,另两个用于读取前向和后向预测数据。在视频格式化器中,一个交替缓存器用于将数据传送到DRAM,另三个用于从DRAM读取数据。亮度(Y)和红蓝色色差数据(分别是Cr和Cb)各用三个中的一个交替缓存器。
下节将根据本发明描述具有一个写交替缓存器和一个读交替缓存器的DRAM接口的工作,这基本上和空间解码器DRAM接口的工作情况相同。用图131“DRAM接口”作说明。
B.7.2一般性的DRAM接口
参阅图131,与地址发生器420的接口和与供求数据的各块的接口都是双线接口。地址发生器420或者可以产生地址作为接收控制令牌的结果,或者仅仅产生固定的地址序列。DRAM接口421以特殊方式处理与地址发生器有关的那些双线接口。它不是在准备接收地址的时候将接受线(accept line)保持为高,而等待地址发生器提供一个有效地址,处理这个地址,然后在一个时钟周期内将接受线置为高。因此,它是实现请求/响应(REQ/ACK)协议。
DRAM接口的一个独特的特性是它有能力与地址发生器通信,也能与那些完全独立供应或接受数据的部件通信。例如,地址发生器能够产生一个与写交替缓冲器内数据有关的地址,但是没有动作,直到写交替缓存器发出信号表示有一块数据已准备好写入外部DRAM422。然而,没有动作发生,直到地址发生器将地址提供到适当的总线上。此外,一旦写交替缓存器中的RAM之一已经装进数据,另一个RAM可能在数据输入被停止之前完全装满并被“交替”到DRAM接口一边(双线接口的accept信号置低)。
在了解本发明的DRAM接口的工作情况时,重要的是注意到在一个配置正确的系统中,DRAM接口在交替缓存器和外部DRAM之间传送数据的速度必须至少能和交替缓存器与芯片其余部分之间各平均数据速度的总和一样快。
每个DRAM接口包括一种决定下一次该为哪个交替缓存器服务的方法。一般说,这或是一种“循环(round robin)”,或是一种优先级别编码器。在“循环”方法中,被服务的交替缓存器是下一个可以得到的最近不曾轮到的那个交替缓存器。在优先编码器方式中,被服务的是那些交替缓存器,它们的优先级别比另一些更高。在上述两种情况下,都有附加的请求从刷新请求发生器(refresh requ-est generator)来,它比所有其它请求的优先级更高。刷新请求由刷新计数器产生,刷新计数器可通过微处理器接口给予编程。
B.7.2.1交替缓存器
图132表示一个写交替缓存器。工作情况如下:
1)有效数据出现在430输入端(数据输入)。当每个数据块被接受后,它被写入RAM1并且地址增值。
2)当RAM1满时,输入方(side)放弃控制并把一个信号送到读方,以指示RAM1现在已准备好被读出。该信号在两种异步时钟之间通过,所以通过三个同步用的触发器。
3)下一个来到输入方的数据项被写入仍旧空着的RAM2。
4)当循环方法或优先级编码器指出该轮到这个交替缓存器被读时,DRAM接口就读取RAM1的内容并将它们写入外部DRAM。然后一个信号被通过异步接口送回,如同(2),以指出RAM1现在又一次准备好被装入。
5)如果DRAM接口将RAM1出空并且在输入方将RAM2充满之前将它“交替”,则数据可以连续地被交替缓存器接受;否则当RAM2被充满后,交替缓存器会将它的接受信号置为低,直到RAM1已被“交替”回来可以被输入方使用。
6)此过程无限地重复下去。
读交替缓存器的工作过程类似,但输入数据总线和输出数据总线的位置相反。
B.7.2.2外部DRAM和交替缓存器的寻址
DRAM接口的设计是要使可获得的存贮器带宽为最大。因此它安排得使每个8×8的数据块存贮在DRAM的同页内。因而可以充分利用DRAM快速的页访问方式,在这些方式中给出一个行地址,然后许多列地址。此外还提供一种设施,允许接到外部RAM数据总线的宽度为8、16或32位,使所用的DRAM的多少可以和特定应用的尺寸和带宽要求相符。
在本例中(它确实地说明了在空间解码器上的DRAM接口是如何工作的),地址发生器给DRAM接口提供每个读和写交替缓存器的部件地址。该地址被用作DRAM的行地址。列地址的6位由DRAM接口自身提供,这些位也用作交替缓存器RAM的地址。接到各交替缓存器的数据数总线为32位宽,所以如果接到外部DRAM的总线宽度小于32位,则在下一字从某写交替缓存器读取或下一字写入某读交替缓存器(读和写是对外部DRAM的传送方向来说的)时,必须进行两或四次外部DRAM访问。
用时间解码器和视频格式化器时的情况更为复杂。它们分别在以后涉及。
B.7.3 DRAM接口时序
在本发明中,DRAM接口时序块使用时序链,以使各DRAM信号的边沿精确到四分之一系统时钟周期。使用了来自锁相环的两个互差四分之一周期的时钟。它们结合起来,形成名义上的两倍时钟(notional 2×clock)。然后,任何一个链用两个并行的移位寄存器组成,以“双倍时钟”的正相和反相工作。
首先,一个链用于页起动周期,另一个链用于读/写/刷清各周期。每一周期的长度可以通过微处理器接口来编程。有鉴于此,页起动链具有固定长度,而周期链长度则在一次页起动中以适宜为准作变动。
在复位状态,各链被清除,同时,有一个脉冲产生。此脉冲由DRAM接口来的状态信息指引,沿着各链传送。DRAM接口时钟就是用此脉冲产生的。每个DRAM接口时钟周期对应于DRAM的一个周期。所以,因为DRAM周期有不同的长度,DRAM接口的时钟速度就不是固定不变的。
此外,各定时链将从上述链来的脉冲与从DRAM接口来的信息相混合,以产生出各输出选通和使能(notcas,notras,notwe,not-oe)。
B.8逆向量化器(Inverse Quantizer)
B.8.1引言
这个文件根据本项发明描述逆向量化器(iq)的目的,作用和实现。
B.8.2概述
逆向量化器使用已量化的系数,量化加权和步长大小来重建各系数。所有这些使用的量都是在数据流内传送的。
B.8.3接口
iq在数据通路中位于逆向造型器和逆向DCT之间,它连接到微处理器。数据通路的连结是通过双线接口的。输入数据是10位宽,输出是11位宽。
B.8.4逆向量化的数学运算
B.8.4.1 H.261方程
对于用基(intra)方式编码的块:
对于所有其它方式编码的块:
B.8.4.2 JPEG方程
j=jpeg_table_indirection(c)
B.8.4.3MPEG方程
对于以基方式编码的块:
在基DC情况,计算huffman中的各预测值时要加1024,它们被复位为零。
对于所有其它已编码的块:
B.8.4.4 JPEG的变异方程
j=jpeg_table_indirection(c)
B.8.4.5所有其它令牌
除数据令牌外,所有令牌必须通过iq不被量化。
这里:
Floor(a)返回一个整数,所以
(a-1)<floor(a)≤a a≥0
a≤floor(a)<(a+1) a≤0
Q:是量化系数。
Ci是重建以后的系数
Wi,j是量化表矩阵中的值
i是沿Z字形的系数标号
j是量化表矩阵号(0<=j<=3)
B.8.4.6多种标准的综合
可以看出所有以上的标准和它们的变化(也包括须不被iq改变的控制数据)能被映射到单一的方程中:
逆向量化后处理功能:
·加1024
·将符号量值转换成2的补码表示
·往0方向把所有偶数舍入为最靠近的奇数。
·使结果饱和为+2407或-2048
对每种标准的变量的变化值k、x和Y及它们所用函数,示于表B.8.1。
表B.8.1 控制解码
标准 | | X加权 | Y比例尺 | K | 加1024 | 舍入偶 | 饱和结果 | 变换2的补码 |
H261 |
基DC |
8 |
8 |
0 |
No |
No |
Yes |
Yes |
基 |
16 |
iq_quant_scale |
1 |
No |
Yes |
Yes |
Yes |
其它 |
16 |
iq_quant_scale |
1 |
No |
Yes |
Yes |
Yes |
JPEG |
DC |
Wij |
8 |
0 |
Yes |
No |
Yes |
Yes |
其它 |
Wij |
8 |
0 |
No |
No |
Yes |
Yes |
MPEG |
基DC |
Wij |
8 |
0 |
Yes |
No |
Yes |
Yes |
基 |
Wij |
iq_quant_scale |
0 |
No |
No |
Yes |
Yes |
其它 |
Wij |
iq_quant_scale |
1 |
No |
Yes |
Yes |
Yes |
XXX |
DC |
Wij |
iq_quant_scale |
0 |
Yes |
No |
Yes |
Yes |
其它 |
Wij |
iq_quant_scale |
0 |
No |
No |
Yes |
Yes |
表B.8.1 控制解码(续)
标准 |
X加权 |
Y比例尺 |
K |
加1024 |
舍入偶 |
饱和结果 |
变换2的补码 |
其它令牌 |
1 |
8 |
0 |
No |
No |
No |
No |
B.8.5功能块的结构
从B.8.4.6和表B.8.1,可以看出一个多标准逆向量化器可使用单一的结构。它的运算方块图示于图133 “算术块”:
算术块的控制按功能可分为两部分:
·令牌解码装入状态寄存器或量化表。
·状态寄存器解码为控制信号。
令牌在igca中解码,iqca控制下个周期,即iqcb的寄存器存储单元。它也控制存取在igram中的四个量化表。算术部件,即两个乘法器和一些后处理功能在igarith内。iq的完整的方块图示于图134。
B.8.6功能块的实现
B.8.6.1 Iqca
在本发明中,iqca是一个状态机,用于把令牌解码成对igram和对在igcb中的寄存器的控制信号。状态机看作是每个令牌的状态机更合适,因为它被每个新令牌复位。例如:
对QUANT_SCALE(见B.8.7.4,“QUANT_SCALE”)和QUANT_TABLE(见B.8.7.6,“QUANT_TABLE”)的代码如下:
if(tokenheader==QUANT_SCALE)
{
sprincf(preport,*QUANT_SCALE*);
reg_addr=ADDR_IQ_QUANT_SCALE;
rnotw=WRITE;
enable=1;
}
if(tokenheader==QUANT_TABLE)/*QUANT_TABLE token*/
switch(substate)
{
case 0:/*quantisation table header*/
sprintf(preport,*QUANT_TABLE_%s_s0*,
(headerextn?*(full)*:*(ertpty)*));
nextsubstate=1;
insertnext=(headerextn?0:1);
reg_addr=ADDR_IQ_COMPONENT;
rnotw=WRITE;
enable=1;
break;
case1:/*quantisation table body*/
sprintf(preport,*QUANT_TABLE_%s_s1*,
(headerextn?*(full)* :*(empty)*));
nextsubstate=1;
insertnext=(heRderextn?0:(qtm_addr_53==0));
reg_addr=USE_QTM;
<dp n="d469"/>
rnotw=(headerextn?WRITE:READ);
enable=1;
break;
default:
sprintf(preport,*ERROR in iq quantisation table tokendecoder
(substate %x)\n*,
substate);
break;
}
}
这里子状态(substate)是在令牌内的一个状态,例如QUANT_SCALE只有一个子状态。然而,QUANT_TABLE有两个子状态,一个是头,第二个是令牌体。
状态机以PLA来实现。未被识别的令牌不引起字线(word line)升高,使PLA输出一些缺省(无害的)控制。
另外,iqca用体字(BodyWord)计数器供给地址给igraI,并把字插入流中,例如在一个未经扩展的QUANT_TABLE中(见B.8.7.4)。这是用在维持输出有效时,停止输入的办法得到的。在后继块中(iqub或iqarith)这些字能以正确的数据填入。
iqca是被两线接口控制的数据通路中的一个单周期。
B.8.6.2 iqcb
在本发明中,iqcb保存iq状态寄存器的值。在iqca的控制下它把这些值装入数据通路或从中卸下。
状态寄存器的值被解码(见表B.8.1)送到iqarith的控制线,去控制XY乘法器项和后量化(post quantization)功能。
数据通路的符号位在这里被分开并送到后量化功能。还有数据通道上的零值字也在这里被检测到。于是运算被忽略而零被多路传送到数据通路。这是遵守iq的“0进;0出”规定最容易的方法。
只有当寄存器iq_access已被置1并读回1时,状态寄存器才能从微处理器访问。在这种情况,iqcb已暂停数据通路,所以保证寄存器有一稳定值,在数据通路中没有数据被讹误。
Iqcb在数据通路中有一个单周期,数据通路由双线接口控制。
B.8.6.3 Iqram
Iqram必须支持四个量化表矩阵(QTM),每个有64*8位。所以它是一个256*8位的六晶体管RAM,每周期可读一次或写一次。此RAM装在双线接口逻辑内,接受它的控制和从iqca来的写数据。它读出数据到iqarith。类似地,iqram占据数据通路中同样的周期,如同iqcb。
RAM在iq_access读回1时,可从微处理器读和写。RAM被放在一个锁眼寄存器,iq_qtm_keyhole后面,用iq_qtm_keyhole_addr寻址。访问iq_qtm_keyhole将使它所指向的、保存在iq_qtm_keyhole_addr中的地址增加。同样,iq_qtm_keyhole_addr能被直接写。
B.8.6.4 iqarith
注意,iqarith是三功能流水线,分在三个周期上进行。其功能讨论如下(见图133)
B.8.6.4.1 XY乘法器
这是一个5(X)乘8(Y)位进位保存无符号乘法器,馈送到数据通路乘法器。乘数和被乘数用iqcb来的控制线选择。乘法运算在第一个周期,求解加法器(resolving adder)在第二个周期。
在乘法器的输入,从iqram来的数据能被多路传送到数据通路上去,以读出QUANT_TABLE到数据通路。
B.8.6.4.2(XY)*数据通路乘法器
这个13(XY)乘12(数据通路)位进位保存无符号乘法器分在块的三个周期上。三个部分积在第一个周期,7个在第二个周期,余下的两个在第三个周期。
因为所有从乘法器的输出少于2047(non_coefficient非系数)或饱和到+2407/-2048,最高的12位从来不需要求解。相应地,求解加法器只有两位宽。在高次序位的乘余部分,一个0检测足够作为一个饱和信号。
B.8.6.4.3量化后处理功能(Post quantization functions)量化后处理功能是:
·加1024
·把符号量值变为2的补码表示。
·向0方向把所有偶数舍为最近的奇数。
·将结果饱和+2047或-2048。
·将输出设置到零(见B.8.6.2)
最前三个功能在一个12位加法器上实现(在第二和第三周期上流水进行)。从这,可以看到每个功能要求什么,这些然后合并(combine)到单个加法器。
表B.8.2 量化后处理加法器功能
功能 |
if datapath>0 |
if datapath>0 |
转换成2的补码 |
什么也不做 |
取反加1 |
舍入所有偶数 |
减1 |
加1 |
加1024 |
加1024 |
加1024 |
正如一个具有一般本行技能的人将体会到的,重编这些功能的程序时必须小心,因为在合并时,它们是非常互相依赖的。
饱和值,0和0+1024在第三周期结束时被多路传送到数据通路。
B.8.7逆向量化器令牌
下面的说明规定了逆向量化器对它所响应的每个令牌tp的工作情况。在所有情况,令牌也被传送到逆向量化器的输出。在大多数情况,令牌不被逆向相量化器修改,只有下面所说的一些情况例外。所有未被识别的令牌不改变地传送到逆向量化器的输出。
B.8.7.1 SEQUENCE_START
这个令牌使寄存器iq_prediction mode[1:0]和iq_mpeg_indi-rection[1:0]复位为0。
B.8.7.2 CODING_STANDARD
这个令牌使iq_standard[1:0]装入基于解码的当前标准(MPEG、JPEG或H.261)的合适值。
B.8.7.3 PREDICTION_MODE
这个令牌加载iq_prediction_mode[1:0]。虽然PREDICTION_MODE携带多于两位,逆向量化器只需访问最低次序的两位。这些决定了块是或不是基编码的。
B.8.7.4 QUANT_SCALE
这个令牌加载iq_quant_scale[4:0]。
B.8.7.5数据
在本发明中,这个令牌携带真正的量化系数(quantized coe-fficients)。令牌头包含识别彩色分量的两位,这些被装入iq_comment[1:0]。下面的64个令牌字包含量化系数。这些被修改成逆向量化器处理的结果,被重建系数(reconstructed coefficients)代替。
如果令牌中不存在恰好64个扩展字,则逆向量化器的工作情况是不确定的。
在逆向量化器输入端的数据令牌携带量化系数。这些系数以符号量值格式表示为11位(10位加一符号位)。值“负0”应当不用,但可被正确地解释为0。
在逆向量化器输出外的数据令牌携带重建系数。这些系数以2的补码格式用12位表示(11位加一符号位)。在输出处的数据令牌所具有的令牌扩展字数与在逆向相量化器输入处所具有的数目是一样的。
B.8.7.6 QUANT_TABLE
这个令牌可用于装入一个新量化表或读出一个已存在的表。典型地说,在逆向量化器中,令牌被用来装入一个已从位流中解码的新表。读出一个已存在表的动作在编码器的前向量化器中是有用的,如果这个表要编码进入位流的话。
令牌头包含两位,以识别要用的表号。这些位放在iq_compon-ent[1:0]中。注意,这个寄存器现在包含一个“表号”,而不是一个彩色分量。
如果令牌头的扩展位是1,逆向量化器希望恰好有64个扩展令牌字。每一个被看作是一个量化表值,放在适当的表的连续位置,从位置0开始。每个扩展令牌字的第9位被忽略。令牌也不修改地以正常方式送到逆向量化器的输出。
如果令牌头的扩展位为0,则逆向量化器将读出适当的表的连续位置,从位置0开始。每个位置变成一个扩展令牌字(第9位为0)。这个操作结束时,令牌将包含恰好64个扩展令牌字。
对所有的扩展数字,除0和64以外对应于这令牌的逆向量化器的操作没有定义。
B.8.7.7 JPEG_TABLE_SELECT
这个令牌用来装入或卸下由彩色分量转换成表号去/从iq_ipeg_indirection。这些转换用于JPEG和其它标准中。
令牌头(Token Head)包含两位,用来识别当前感兴趣的彩色分量。这些位放在iq_component[1:0]中。
如果令牌头的扩展位是1,令牌应包含一个扩展字,其最低两位被写入iq_ipeg_indirection[2*iq_Component[1:0]+1:2*iq_Component[1:0]]单元。刚读出的值变成一令牌扩展字(高7位将是零)。在此操作结束时,令牌将恰好包含一个令牌扩展字。
表B.8.3 JPEG_TABLE_SELECT的作用
头中的彩色分量 |
iq_ipeq_indirector存取的位 |
0 |
[1:0] |
1 |
[3:2] |
2 |
[5:4] |
3 |
[7:6] |
B.8.7.8 MPEG_TABLE_SELECT
当通过MPEG标准进行处理时,这个令牌用来确定用缺省表还是用户定义的量化表。令牌头包含两位。头的位0决定如果要写的话哪一位写入iq_mpeg_indirection。位1写到那个单元。
因为iq_mpeg_indirection[1:0]寄存器被SEQUENCE_START令牌清零,只有在用户定义的量化表已被发送到位流中时,才必需用这个令牌。
B.8.8微处理器寄存器
B.8.8.1 iq_access
要使得微处理器对任一个iq寄存器的访问,iq_access 必须置1,并对它查询直到它读回1为止(见B.8.6.2)。如做不到这点,将使正在被读的寄存器仍被数据通路所控制,所以,是不稳定的。关于igram,访问被封闭,读回0。
写0到iq_access,就将控制撤回到数据通路。
B.8.8.2 Iq_Coding_Standard[1:0]
这个寄存器保存编码标准,那是用逆向量化器实现的标准。
表B.8.4 编码标准值
iq_coding_standard |
编码标准 |
0 |
H.261 |
1 |
JPEG |
2 |
MPEG |
3 |
XXX |
这个寄存由CODING_STANDARD令牌加载。
虽然这是一个两位寄存器,但是,现在在内存映象中却占用了8位,将来可实现多于以上标准的处理。
B.8.8.3 Iq_mpeg_indirection[1:0]
在MPEG解码操作期间,这个两位寄存器用来维持一个量化表要使用的记录。
Iq_mpeg_indirectin[0]控制为基编码块用的表。如果它为0,则用量化表0,要求包含缺省量化表。如果它是1,则用量化表2,要求包含为基编码块用的用户定义的量化表。
这个寄存器被MPEG_TABLE_SELECT令牌加载,用SEQUENCE_START令牌将它复位到0。
B.8.8.4 Iq_ipeg_indirection[7:0]
这个8位寄存器,为在JPEG扫描中发生的四种可能彩色分量的每一个分量,决定用四个量化表中的哪一个。
·位[1:0]保存分量0要用的表号。
·位[3:2]保存分量1要用的表号。
·位[5:4]保存分量2要用的表号。
·位[7:6]保存分量3要用的表号。
这个寄存器受JPEG_TABLE_SELECT令牌的影响。
B.8.8.5 iq_quant_scale[4:0]
这个寄存器保存量化比例因子的当前值。这个寄存器用QUANT_SCALE令牌加载。
B.8.8.6 iq_component[1:0]
这个寄存器通常保存一个值,该值被转换成量化表矩阵号(Quantization Table Matrix number)。它被一些令牌加载。
数据令牌头使本寄存器用被处理的块的彩色分量加载。这个信息只用于在JPEG和JPEG的一些变量中以决定QTM号通过访问iq_ipeg_indireetion[7:0]来做这件事。在其它标准,iq_Component[1:0]被忽略。
JPEG_TABLE_SELECT令牌使本寄存器装入一个彩色分量。它然后被用作一个指向iq_ipeg_indirection[7:0]的指针。ig_ipeg_indirection[7:0]用令牌体访问。
QUANT_SCALE令牌使本寄存器装入QTM号。这张表于是或者从令牌装入(如用的是令的扩展形式),或者从表中读出以形成一个合适的扩展令牌。
B.8.8.7 iq_prediction_mode[1:0]
这个两位寄存器保存后续的块要用的预测方式。逆向量化器对这个信息的唯一利用是决定是否要用基编码(intra codings)。如果寄存器的两位都是0,则各后续块是基编码的。
这个寄存器用PREDICTION_MODE令牌加载,用SEQUENCE_START令牌寄存器复位到0。
在JPEG和JPEG变化方式中Iq_prediction_mode[1:0]不影响操作。
B.8.8.8 Iq_ipeg_indirection[7:0]
Iq_ipeg_indirection被用作一个查找表。此表把彩色分量转换成QTM号。相应地,iq_Component用作iq_ipeg_indirection的指针,如表B.8.3所示。
如用令牌的扩展形式,这个寄存器单元用JPEG_TABLE_SELECT令牌直接写入。
如用令牌的非扩展形式,这个寄存器单元用JPEG_TABLE_SELECT令牌直接读取。
B.8.8.9 Iq_quant_table[3:0][63:0][7:0]]
有四个量化表,每个有64个单元。每个单元是一个8位值。在任何单元都不应该用数值0。
这些寄存器是当作在B.8.6.3“Igram”中描述的一个RAM来实现的。
这些表可以用QUANT_TABLE令牌加载。
注意,在这些表中的数据按Zig-Zag扫描次序存贮。许多文件把量化表的值表示为数的8×8方阵。通常DC项是在左上角,随水平频率从左向右增加,随垂直频率从上往下增加。这些表必须沿Zig_Zag扫描路径读,因为量化表的数是按顺序“i”放入的。
B.8.9微处理器寄存器映象
表B.8.5 存储器映象
寄存器 |
单元位置 |
方向 |
复位状态 |
iq_access |
0x30 |
R/W |
0 |
iq_coding_standard[1:0] |
0x31 |
R/W |
0 |
iq_quant_scale[4:0] |
0x32 |
R/W |
? |
iq_component[1:0] |
0x33 |
R/W |
? |
iq_prediction_mode[1:0] |
0x34 |
R/W |
0 |
iq_jpeg_indirection[7:0] |
0x35 |
R/W |
? |
iq_mpeg_indirection[1:0] |
0x36 |
R/W |
0 |
iq_qtm_keyhole_addr[7:0] |
0x38 |
R/W |
0 |
iq_qtm_keyhole[7:0] |
0x39 |
R/W |
? |
B.8.10测试
要达到对逆向量化器的测试,在输入是通过逆向模型器的输出窥测器,在输出则是通过逆向量化器自己的窥测器。逻辑用逆向量化器自己的扫描来达到。
如果ramtest信号被认定,可以获得对igram的的存取,而不去访问iq_access。
B.9 IDCT
B.9.1引言
对反向离散余弦变换(IDCT)块的这段叙述的目的,是为了提供IDCT的工程信息来源。它包括以下信息:
·IDCT的目的和主要特性
·它是如何设计和校验的
·结构
这段叙述的意图是对一个具有本行一般技能的人提供充分信息以促进或帮助下面的任务。
·体会到IDCT是一个“硅宏功能处理器”
·IDCT集成到另一设备
·为IDCT硅片开发测试程序
·IDCT的修改、重设计或维护。
·开发未来DCT部件。
B.9.2概述
一个离散余弦变换/Zig-Zag(DCT/ZZ)实现对像素块的变换。在那里每个块代表一个8个象素高乘8个象素宽的屏幕区域。变换的目的是把这个象素块在按频率分选的频域中表示。因为眼睛对图象中的直流分量敏感,但对高频分量敏感度就就差得多,频率数据允许每个分量的大小按照眼睛的灵敏度分别减小。降低幅度的处理称为量化。量化处理减少了图象包含的信息,即量化处理是有损耗的。有损耗的处理用消除某些信息的方法达到总的数据压缩。频率数据被分类,所以高频全都连续地出现。高频绝大部分可能被量化为零。这些连续的零意味着用游程长度编码方法对量化数据进行编码产生更多的数据压缩,虽然游程长度编码通常不是有损耗的处理。
IDCT块(它实际上包含一个反向Zig_Zag随机存储器(或称IZZ)和一个IDCT),把已分类的频率域数据转换为空间数据。这种反向分类处理是IZZ的功能。
图象解压缩系统用整数指示象素。ICD7块件是系统的一部分。这意味着IDCT部件必需取和产生整数值。然而,因为IDCT功能不是以整数为基础的,内部数的表示用小数部分来保持内部的精确度。用全浮点计算更适宜,但这里叙述的具体实现(implementation)用定点计算。用定点计算有某些精度损失,但这一实现的精度超过H.261和IEEE所指定的精度。
B.9.3设计目的
按照本项发明,设计主要目的是要设计一个功能正确的IDCT块,此块用的硅片面积最小。设计也要求在指定的操作条件下,时钟速度为30MHz。此设计也考虑到对未来的适应性。未来需要更高的时钟速率。凡是可能的地方,设计的结构都允许这样做。
B.9.4 IDCT接口描述
IDCT块有以下接口:
·一个12位宽度的令牌数据输入端口
·一个9位宽度的令牌数据输出端口
·一个微处理器接口端口
·一个系统服务输入端口
·一个测试接口
·重新同步信号
两个令牌数据端口都是以前说过的标准双线接口类型。所说的宽度是指数据表现的位数,不是端口的全部线数。另外,与输入令牌数据端口有关的有时钟和复位信号。复位信号用来与前面部件的输出重新同步。与输出令牌数据端口有关的还有两个重新同步时钟,它们为随后的部件所用。
微处理器接口是标准的,地址用四位表示。还有三个在外部已解码的选择输入,它们用来为各事件、各内部寄存器和各测试寄存器选择地址空间。这个机构为把IDCT地址空间变换为不同的芯牌中的不同位置提供灵活性。还有一个单个事件输出,idctevent,和两个I/O信号,n_derrd和n_serrd。它们是事件三态数据线,用于外接到IDCT和到微处理器非数据总线的适当位。
系统服务端口包含标准时钟和复位输入信号,还有二相越权时钟(override clocks)和有关的时钟越权方式选择输入。
测试接口JTAG包含时钟和复位信号,扫描路径数据(scan_pathdata)和控制信号以及RAM测试(ramtest)和芯片测试(chiptest)输入讯号。
在正常工作时,微处理器端口是无效的。因为IDCT不要求任何微处理器访问来得到它的指定功能。类似的,只有在要求测试或校验时测试接口才有效。
B.9.5离散余弦变换的数学基础
在视频带宽压缩中,输入数据表示图象的一块矩形区域,所以所用变换必须是二维的。两维变换难以高效率地计算。但两维DCT有可被分开的性质。分开的变换可对每一维单独计算而与其它维无关。本实现用一个一维IDCT算法。此算法特别为转换到硬件上而设计,对软件模型不合适。此一维算法逐次的应用以得到一二维的结果。
对一个N乘N的象素块,两维DCT的数学定义如下:
公式10正向DCT
公式11反向DCT
此处
j,k=0,1,...,N-1
以上定义数学上等效于两个N乘N矩阵相乘,连续两次,在两次相乘之间,做一次矩阵转置。一维DCT数学上等效于两个N×N矩阵相乘。数学上两维的情况是:
Y=[XC]TC
此外,C是余弦项组成的矩阵。
所以DCT有时用矩阵处理来描述。矩阵描述对变换的数学上的简化比较方便。但必须强调,这仅使符号表示法容易些。注意2/N项影响DC级常数C(j)和C(k),称为归一化因子。
B.9.6 IDCT变换算法
如随后的更详细的说明所说,用来计算真正的IDCT的算法应是一种“快速”算法。所用的算法加以优化,以得到有效的硬件结构和实现装置。算法的主要特点在于利用了
比例,以减少一次乘法,以及一种算法的变换。这种算法设计使上半部分和下半部分之间更加对称。这种对称产生的结果是使许多代价最高的计算元件得到有效地重新利用。
在说明此算法的图中(图136),上半部和下半部之间的对称在图的中部是明显的。最后一列的加法器和减法器也有对称性,用相对小的代价可以把加法器和减法器合并(4加法器/减法器明显小于图示的4个加法器+4个减法器)。
注意,单维变换的所有输出按
比例增大。意味着最后的二维答案按比例2增大。在最后的饱和舍入级,用移位的方法可以很容易地加以校正。
曾经将所示算法用双精度浮点C编码,计算结果与参考的IDCT(用直接的矩阵乘法)比较。然后,进一步用C编制出算法的精确到位级的整数形式(bit_accurate integer version)(不包括定时信息)。它可以用来校验算法的性能和精度,就象把它在硅片上具体实现一样。在H.261标准中规定了变换的各种允许误差。这种方法曾经用来操练(exercise)精确到位级的模型和测量交付使用的精度(delivered accuracy)。
图137表明了总的IDCT结构,在某种意义上说明了上面部分和下面部分之间的公共性,也显示一些点,在这些点上,中间结果需要存储。此线路是时间多路复用的(time multiplexed),允许上面部分和下面部分分开计算。
B.9.7 IDCT变换结构
如前所述,IDCT算法被优化以实现高效率的结构。所形成的结构的关键特性如下:
·代价高的计算操作被有效地重复使用
·少量的乘法器。这些乘法器全部是常数系数,而不是为了通用目的(减少乘法器的规模和排除个别系数存储的需要)
·少量的锁存器,不多于使结构流水线化的需要
·操作被安排得使每级流水线只要求一次单一的求解操作
·可安排按自然顺序产生结果
·没有复杂的纵横交叉的转换或大量的多路复用(这两者在最后实现时都是代价很大的)
·利用了求解的结果以便除去两次进位保存操作(一次加法,一次减法)
·结构允许每级采用4个时钟周期,即消除对很快(大)的计算操作的要求
·结构将支持比当前30MHZ象素-时钟操作快得多的操作。这只需简单地把求解操作从小/慢的脉动进位,改变为更大/更快的先行进位形式。这些求解操作占用了每级需要时间的最大部分,所以只加快这些操作的速度,对总的操作速度有巨大的影响。而这样做对变换的总规模只有比较小的增加。加大流水线的深度可进一步加快速度。
·变换数据流(transform data_flow)的控制很简单和效率高。
一维变换微结构的图(图141)说明算法是如何变换到一小组硬件资源的,然后如何进入流水线以使必要的性能约束条件得到满足。将一个“控制移位寄存器”与数据流流水线相配合,用这样的方法得到对这一结构的控制。这个控制设计简单,在硅片布局上效率高。
在图141上已命名的控制信号(latch,Sel_byp等)是各种使能信号,用来控制各锁存器,从而控制信号流。到锁存器的时钟信号未示出。
变换结构满足所要求的精度标准,而同时使变换的尺寸为最小,在这方面,若干实现的细节是很有意义的。所用的技术通常归为两个主要类别。
·在每个中间状态,用个别控制定点位置的方法来使固定字宽的数保持最大动态范围。
·为了用有选择的计算操作来达到精度(而不是简单地增加整个变换的字宽来增加精度),利用了精度要求的统计定义。
设计一个变换的简单方法包括用一足够大的固定字宽,执行简单的定点运算以得到精度。不幸的是,这个方法造成过大的字宽,所以也造了更大的变换。在本项发明中采用的方法,允许定点位置在整个变换过程中变化,变化以这样的方式进行,使对任何特定的中间值能最大地利用可得到的动态范围,从而得到可能的最大精度。
因为允许的结果是统计说明的,可对任何中间值截断操作有选择地调节,以便改进总精度。所选择的调节是LSB(低有效位)计算的一些简单操作。这种处理代价小或无代价。这种技术的另一种方法是增加包含明显价值的字宽。调节可有效地在给定方向对最后结果“加权”,如果发现这是在前的,则这些结果照顾相反的方向。用调节结果的小数部分的方法可有效地使这些结果的总平均值变动(shifting)。
B.9.8 IDCT方框图描述
IDCT的方框图表明所有与令牌流处理有关的块。这张图,图138,没有表示时钟、测试和微处理器访问及事件机构的细节。用来提供测试访问的窥测机构在图中没有表示。
B.9.8.1数据错误校验器
第一个块是数据错误校验器和校正器,被称作“decheck”。它拾取和产生一个12位宽的令牌流,分析这个流和校验数据令牌。所有其它令牌被忽略而直接通过。对一些扩展数不等于64的数据令牌做校验。可能的错误被称为“不足的(deficient)”(<64扩展),即idct_too_few_event,和“多余的(supernumerary)(>64扩展),即idct_too_many_event。用标准事件机构对这些错误发出信号。但此块也企图用处理令牌流的方法来使简单错误恢复。在出现不足错误时,数据令牌被一些“0”值扩展所填充(停止接收输入和执行插入),以补足正确的64扩展。出现多余错误时,对第64的扩展强迫置“0”,并从令牌流中去掉所有额外的扩展。
B.9.8.2反向Zig_Zag
在图138中,空间解码器的下一个块是反向Zig_Zag随机存储器441,izz,它也是获取和产生一12位宽的令牌流。与所有其它块一样,流被分析,但只有数据令牌被识别。所有其它令牌不改变地通过。数据令牌也通过,但扩展的次序被改变。这个块依靠的是正确的数据令牌(即只有64个扩展)。如情况不是这样,则操作未加规定。按照标准反向Zig_Zag模式进行重新排序,在缺省情况下,进行重新排序还是为了在IDCT输出提供水平扫描数据。改变排序方法提供垂直扫描输出也是可能的。除了标准IZZ排序以外,这个块对每个8字的行完成一额外的重排。这是为IDCT一维变换块的特定要求而做的。其结果行输出的次序是(1、3、5、7、0、2、4、6)而不是(0、1、2、3、4、5、6、7)。
B.9.8.3输入格式器
在图138中的下一个块是输入格式器442,“ip_fmt”,它对IDCT变换的第一维输入数据进行格式化。这个块的输入是12位宽的令牌流,输出是22位宽的令牌流。数据令牌被左移,把整数部分移到IDCT变换标准22位宽字的正确有效位置(correct significance),小数部分被置零。这意味着在此处有10个小数位。所有其它令牌不移位,多余的未用的位被简单地置零。
B.9.8.4.1维变换-第一维
如图138所示,下一个块是第一个单维IDCT变换块443,“oned”。这个块输入和输出22位宽的令牌流。与通常一样,流被分析,把数据令牌识别出来。其它令牌不改变地通过。数据令牌通过一个流水线化的数据通路,在那里完成一次单维8×8反向离散余弦变换。在第一维输出,数据字中有7位小数。所有其它令牌通过一个只有移位寄存器的数据通路运行。此通路只是为了与数据变换所需的等待时间相协调。这些令牌在输出前又被组合成令牌流。
B.9.8.5转置随机存储器
转置随机存储器444 “fram”,与反相Zig-Zag随机存储器441对令牌流的处理方法在许多方面是类似的。除了被处理的令牌宽度(22位)和执行重排序列不同以外,在其它方面,它们以同样方式工作。实际上它们共享它们的大部分控制逻辑。各行也要另外重排序。这是IDCT下一维的需要,也是列变行的基本的变换。
B.9.8.6一维变换-第二维
如图所示下一个块是单维IDCT变换的另一个场合。在每一方面它都和第一维的情况一样。这一维的输出有4位小数。
B.9.8.7舍入和饱和
舍入和饱和块446在图138,“ras”取22位宽令牌流。流包含22位定点格式的数据扩展。块输出是9位宽令牌流,在这里数据扩展已被舍入(向正无穷大方向)成整数,而且饱和成为9位2的补码表示形式。所有其它令牌已被直接通过。
B.9.9块的硬件描述
对所有处理令牌流的块有一个标准的概念性(notional)的结构,如图139所示。这把两线接口锁存器从执行对令牌流处理部分分开。这个结构的变化可包括另外的内部块(例如一个随机存储器核心(RAMcore))。图中所示的某些块,在图解中的结构不很明显(虽然它确实仍存在)。这是由于需要把所有数据通路“逻辑组合在一起,而把它同所有标准的存储单元逻辑(standard cell logic)分开的缘故。在很简单的块中,例如“ras”,可把锁定的out_acce-pt直接放到输入双线锁存器而不进行逻辑处理。
B.9.9.2“Decheck”-数据错误校验/恢复
正如方块图概述一节所指出的,令牌流中的第一个块440执行数据校验和改正。被检测到的错误用标准事件机构处理。这意味着事件可被屏蔽掉。这个块根据事件屏蔽状态或者可以在错误被检测到时继续其恢复步骤,或者被停止。IDCT应该永远看不到不正确的数据令牌。所以块企图做的恢复工作只是一个相当简单的企图,它包含可能是一个严重问题的内容。
这个块的流水线深度为两级,完全用zcells实现。输入双线接口锁存器是“前面(front)”型的。意思是说当这个块(在IDCT的前部)和它的前一个电源的供给方式是分开的,则所有输入到达晶体管门时允许安全操作。这个块的工作是分析令牌流,让非数据令牌直接通过。当发现一个数据令牌时,对在令牌头之后发现的扩展数开始计数。如果当计数不等于63而扩展位被发现是“0”,则产生一个错误信号(它送往事件逻辑)。根据那个事件的屏蔽位的状态,“decheck”或者被停止(即不再接收输入或产生输出)或者开始错误恢复。恢复机构对“不足的”错误用计数器控制,给令牌流插入正确的扩展数(被插入的值总是“0”)。显然,在插入进行时,不接收输入。当发现在第64扩展上的扩展位不是“0”时,就产生一个“多余的(super numerary)”错误。用强使第64扩展位为“0”的方法完成数据令牌。再用继续接收数据而使其输出无效的办法,把所有带有扩展位被置“1”的后续字都从令牌流中删掉。
注意:这两个错误信号不是持久的(除非这个块被停止),这就是说错误信号只在从错误被检测到开始、直到恢复完成为止的这段时间内保持有效。这段时间最小是一个完整周期,如果有一个无穷的多余数据令牌则它会永远保持下去。
B.9.9.3“Izz”和“tram”-重排序随机存储器
“izz”441(反向Zig-Zag随机存储器)和“tram”444(转置随机存储器)在这里一起考虑。因二者实现同样功能的变化,他们的相似处多于差异。这两个块都获取令牌流,并对数据令牌的各个扩展重排序,而使所有其它令牌不改变地通过。所处理的扩展宽度和重排序的序列是不同的,但每个随机存储器的控制逻辑的大部分是一样的,而且实际上也是被组成一个“公共控制”块。这个块在每个随机存储器的图中有说明。宽度的差异对这个控制部分没有影响。所以只需为每个带有RAM核心的随机存储器用不同的“序列地址发生器”,和有适当宽度的两线接口部件。
每个RAM的总特性主要是FIFO(先进先出)的特性。在令牌级这是绝对正确的,但对数据令牌的扩展字的输出次序作了特殊修改。FIFO的深度为128级。为了满足能承受30MHz通过系统的要求,这是必要的,因为在数据令牌输出的开始被检测到后,FIFO的输出就停止(held up)。这是因为所用的重排序序列的特性,要求在重排序输出可以开始以前,在FIFO中采集到一个64位扩展的完整的块。更精确地说,对反向Zig_Zag和转置序列要求的最小数目是不同的,在两种情况下都略小于64。然而,控制一个长度不是2的幂的FIFO是很复杂的。这意味着对RAM核心少量节省会导致所要求的控制逻辑更加复杂而得不偿失。
RAM核心装置的设计允许在30MHz的单一周期内完成一次读和一次写(对同一地址或各别的地址)。这意味着RAM以内部60MHZ周期时间在有效地工作。
用在0→63范围内产生读地址特殊序列(“序列地址的产生”)的方法完成重排序操作,但重排序不是按照自然次序进行的。需要的序列被指定用标准Zig_Zag序列(对于8水平或垂直扫描)或用正常矩阵转置所需的序列。因为IDCT变换一维块的要求,这些标准序列此后进一步被重排序。重排序是按每行以奇/偶格式(即(1、3、5、7、0、2、4、6)而不(0、1、2、3、4、5、6、7))输出的要求进行的。
转置地址序列的产生在算法上是很简单的。直接的(straight)转置序列的产生只要求分别产生行和列的地址。两者都用计数器实现。行重排序的要求只不过意味着地址是用一简单的特定状态机而不是自然计数器产生的。
反相Zig-Zag序列的产生在算法上不那么简单。因为这一事实,一个小的ROM被用来保存全部64个6位地址值。这个ROM用行和列计数器来寻址。这些计数器可被交换,以便在水平和垂直扫描方式之间改变。用一个ROM构成的发生器可很快设计出来。它还有一个好处,就是:要实现正向Zig-Zag(ROM重编程)或在未来增加其它可能的序列都不需花很大的代价。
B.9.9.4“oned”-单维IDCT变换
这个块有一个深度为20级的流水线,此流水线在受阻塞(sta-lled)时是坚固(rigid)的。这种坚固性大大简化了设计而且不会不适当地影响总的动态特性。这是因为流水线深度不是那么大,而且两个一维变换器都位于RAM之后,RAM提供一定量的缓冲作用。
此部件按照标准结构,但对数据令牌扩展(它们是要被处理的)和所有其它项,内部有独立的路径。所有其它项是指那些应不改变地通过的项。注意:图解是用一种特殊方式画出的。第一,因为要求把所有数据通路逻辑组合在一起,第二,因为要求允许产生自动编译码(这说明了在顶层的控制逻辑)。
令牌象通常那样被分析,然后数据扩展和其它值在同多路开关选择器重组合以前分别按规定路线通过两个不同的并行路径。而多路传输器在输出两线接口锁存部件的前面。并行路径是需要的,因为数值通过变换数据通路传送不可能不被改变。用一个简单移位寄存器来处理令牌流的其余部分,使变换数据通路的等待时间得到匹配。
“oned”的控制部分需要分析令牌流和控制令牌的分割和重组合。其另一个主要部分是控制变换数据通路。控制这一数据通路的主要机构是一个控制移位寄存器。它匹配数据通路流水线,并被分接,为数据通路流水线的每一级提供必要的控制信号。
“ oned”块有这样一个要求,就是:它只能在数据扩展完整行,扩展的完整行即8组上开始操作,它不能在各行的中间处理不合法数据(“间隙”),虽然事实上,“izz”和“tram”的工作已确保输出是完整的数据块。这个数据块是一个有64个有效扩展值的不间断的序列。
B.9.9.4.1变换数据通路
变换数据通路的微结构,“t_dp”,前面已示于图141。注意,某些细节(例如,时钟,移位等等)没有表示。然而,这张图说明数据通路如何在流水线的任一级上同时对四个值操作。数据通路的基本子结构,即三个主要部分也能被看出(例如,公共块前,公共块,公共块后),所需的计算资源和锁存资源也同样能看到。命名的控制信号是对流水线锁存器(和加/减选择器)的使能信号。它们是按控制移位寄存器状态的译码顺序排列的。注意,每一流水线级实际上是四个时钟周期长度。
在变换数据通道内有许多锁存器级。它们用来采集输入,在流水线中存储中间结果和使连续输出。某些锁存器是多路输入型的,即它们可以有条件地被一个以上的来源加载。所有的锁存器是使能型的,即有独立的时钟和使能输入。这意味着容易用正确时序产生使能信号,而不必考虑对不齐(skew)的问题。相比之下,若采用生成的时钟方案则要考虑对不齐问题的发生。
要求的主要计算元件如下:
·一些固定系数乘法器(进位保存输出)
·进位保存加法器
·进位保存减法器
·求解加法器
·求解加法器/减法器
所有的计算以2的补码表示法完成。这既可以是正常(已求解)形式,也可以是进位保存形式(即两个数,它们的和表示真正的值)在存入以前所有数都已求解出来,而且每级流水线只做一次求解操作,因为这是最费时间的操作。这里所做的求解操作全部用简单的脉动。这意味着求解器相当小,但比较慢。因为求解在每级的总时间中占支配地位,使用快速求解运算单元,显然就有机会加速整个变换。
B.9.9.5“Ras”-舍入和饱和
在本项发明中,“ras”块的任务是从第二维“oned”的输出获取22位定点数,把这些数变成要求的正确舍入和饱和的9位带符号整数结果。此块也完成方案中固有的必须的被4除(2/N项)和再被2除,以补偿两维的每一维进行预先的按√2比例放大。这个被8除表明定点位置被看作比预期的要向左移动3位。即把结果看作15位整数表示法和7位小数(而不是4位小数)。实现的舍入方式是“往正无穷大方向舍入(round to positive infinity)”,即对正好是0.5的小数加1。这样做主要因为这是可实现的最简单的舍入方式。在舍入(整数部分的条件增加)完成后,结果被检查看这个9位带符号结果是否要求饱和到这一范围的最大或最小值。这项工作用对增量进位出与原整数值的高位一起检查的方法来完成。
和通常一样,令牌流被分析,而舍入和饱和操作只用于数据令牌扩展值。这个块有一个两级深度的流水线,完全用zcells实现。
B.9.9.6“Idctsels”-IDCT寄存器选择解码器
这个部件是一个简单的解码器,它对4个微处理器接口地址线和“sel_test”输入解码,成为各别部件(窥测器和RAMs)测试访问的选择线。这个部件只包含zcells组合逻辑。已解码的选择(selects)示于表B.9.1。
表B.9.1 IDCT测试地址空间
地址(16进制) |
位号 |
寄存器名 |
0x0 |
7..1 |
不用 |
0 |
TRAM锁眼地址 |
0x1 |
7..0 |
0x2 |
7..0 |
TRAM锁眼数据 |
0x3 |
7..0 |
TRAM锁眼数据a |
0x4 |
7..0 |
IZZ锁眼地址 |
0x5 |
7..0 |
IZZ锁眼数据 |
表B.9.1 IDCT测试地址空间(续)
地址(16进制) |
位号 |
寄存器名 |
0x6 |
7..3 |
不用 |
2 |
ipfsnoop测试选择信号 |
1 |
ipfsnoop有效 |
0 |
ipfsnoop接受 |
0x7 |
7..5 |
不用 |
5..0 |
ipfsnoop位[21:16] |
0x8 |
7..0 |
ipfsnoop位[15:8] |
0x9 |
7..0 |
ipfsnoop位[7:0] |
0xA |
7..3 |
不用 |
2 |
d2snoop测试选择 |
1 |
d2snoop有效 |
0 |
d2snoop接受 |
0xB |
7..6 |
不用 |
5..0 |
d2snoop位[21:16] |
0xC |
7..0 |
d2snoop位[15:8] |
0xD |
7..0 |
d2snoop位[7:0] |
表B.9.1 IDCT测试地址空间(续)
地址(16进制) |
位号 |
寄存器名 |
0xE |
7 |
outsnoop测试选择 |
6 |
outsnoop有效 |
5 |
outsnoop接受 |
4..2 |
不用 |
0xE |
1..0 |
outnoop数据[9:8] |
0xF |
7..0 |
outnoop数据[7:0] |
a.重复的地址
B.9.9.7“Idctregs”-IDCT控制寄存器和事件
本发明的这个块包含标准事件逻辑块处理数据不足错误和多余错误的实例(instances),还有一个单独的内存映射位“vscan”,它用来改变“izz”重排序,使IDCT输出为垂直扫描方式。此位被复位为“0”值,即缺省方式是水平扫描输出。两个可能的事件被‘或’在一起形成一个idctevent信号,这个信号可用作中断信号。寄存器和事件的地址及位的位置见B.9.10节。
B.9.9.8时钟发生器
在IDCT中用了两个“标准”类型(“clkgen”)时钟发生器。因此可有两个独立的扫描路径。时钟发生器叫作“idctcga”和“idctcgb”。功能上的唯一差别是“idctcgb”不需要产生“not-rstl”信号。在两个时钟发生器中,每个时钟和复位输出的缓冲装置的总量,各自适合每个时钟和复位所驱动的真实负载。匹配的负载是从最终布局的门和印制线(track)的电容量实际测得的。
当完成了IDCT顶层块排列和布线(Place and Route)时,我们利用交互式全局布线特点的能力来增加时钟分布树的第一部分导线的宽度,供负其余重的时钟(Pho-b和Phi-b)用,因为在这些线上将流过更大电流。
B.9.9.9 JTAG控制块
因为IDCT有两个独立的扫描链和两个时钟发生器,所以有两个标准JTAG控制块“jspctle”的实例。这些控制部件在测试端口和两个扫描路径之间形成接口。
B.9.10事件和控制寄存器
IDCT能产生两个事件,有一个单独的控制位。这两个事件是idct_too_few_event和idct_too_many_event。如果不正确的数据令牌被检测到,在IDCT前面的“decheck”部件就产生这些事件。单独的控制位是“vscan”,要求IDCT输出垂直扫描时,就把它置1。所以这一位控制了“izz”块。整个事件逻辑和存储器变换控制位都放在“idctregs”块中。
从IDCT角度看,这些寄存器放在以下的位置。三态i/o线n_derrd和n_serrd用来在合适的时候读写这些单元。
表B.9.2 IDCT控制寄存器地址空间
地址(十六进制) |
位号 |
寄存器名字 |
0x0 |
7..1 |
不用 |
0 |
vscan |
表B.9.3 IDCT事件地址空间
地址(十六进制) |
位名字 |
寄存器名字 |
0x0 |
n_derrd |
idct_too_few_event |
n_serrd |
idct_too_many_event |
0x1 |
n_derrd |
idct_too_few_mask |
n_serrd |
idct_too_many_mask |
B.9.11方法问题
B.9.11.1逻辑设计方法
按照本发明,在设计所有IDCT块中,企图用统一的简单的逻辑设计对策。这一对策意味着可能用快而简单的方式做出“安全”设计。对控制逻辑的大部分,当时只采用了主-从关系的简单方案。异步置位/复位输入只连接到正确的系统复位。虽然,似乎常有可能提出巧妙的非标准线路配置来更有效地完成同样功能,但这个方案有以下优点。
·概念简单
·容易设计
·操作速度很明显(与锁存器→逻辑→锁存器>逻辑型设计比较)和合适于自动分析
·无波形上的毛刺(glitches)问题(与SR锁存器比较)
·初始化只用系统复位,
·允许扫描路径正确工作
·允许自动编译的C-码的产生
有许多地方采用了透明的d-型锁存器,这些在下面列出。
B.9.11.1.1两线接口锁存器
输入和输出双线接口的标准块结构采用锁存器。在输出两线锁存器和后继的输入两线锁存器之间不存在逻辑。
B.9.11.1.2 ROM接口
由于ROM线路的时序要求,在ROM输出处的IZZ序列产生器中用了锁存器。
B.9.11.1.3变换数据通路和控制移位寄存器
每个流水线存储级有可能用全主-从器件来实现,但出于所要求的存储量的原因,用锁存器可以大大节省。不过,这个方案要求用户考虑几个因素。
·控制移位寄存器用作使能,现在必须产生两种相位(phases)的控制信号(即在这个移位寄存器中需用锁存器)
·采用锁存器,时序分析比较复杂
·“t-postc”将不再自动产生经过编译的码,因一个锁存器输出到在同一相位的另一锁存器(因为使能的定时,对线路来说这不是一个问题)
然而,由于用锁存器节省的面积,使本项发明值得接受这些因素。
B.9.11.1.4微处理器接口
由于这个接口的性质,对事件和寄存器块“idctregs”中RAM核心的锁眼逻辑中的锁存器(和重同步器)有某种要求。
B.9.11.1.5 JTAG测试控制
这些标准块采用锁存器。
B.9.11.2线路设计中的问题
除了在库单元设计中所做的工作以外,在IDCT中不需要任何晶体管级线路设计。库单元(library cells)用于IDCT设计(标准单元,数据通路库,RAM,ROM等等)。对转换数据通道中的某些已知的最短路径做一些线路模拟(使用Hspice),就那些对接近允许的最大长度的路径来说,Hspice也被用来验证最短路径分析(CPA)工具的结果。
注意,在正常工作时,IDCT是完全静态的(即,我们能无限期地停止系统时钟),但在可扫描(scanable)锁存器中有动态节点,在测试时钟被停止(或很慢)时它们会消失。由于某些节点的不可恢复性,它们显示一个Vt降落(例如多路输出),所以IDCT在静态时可能不是“微功率”(micro-power)的。
B.9.11.3布局方法
本项发明布局实现的总方法当时是用BPR(某种手动干预)布置一完全的IDCT。IDCT由许多zcells和少量宏块组成。这些宏块有些用手编辑布局(例如,RAM,ROM,时钟发生器,数据通路);如果是“oned”块,则使用BPR把更多的zcells和数据通路构成。
数据通路用kdplib单元构成。另外,kdplib单元的局部规定的布局变动被定义和采用在对改善尺寸有好处的地方。在每个oned块所用的数据通路中,“oned_d”是设计中最大的单个元件,当时作了很大的努力来对这个数据通路的尺寸(高度)进行优化。
变换数据通路“t_dp”的组织是颇为关键的,因为数据通路内的元件的精确排序将影响内部连接的处理方式。减少“overs”(不连接到子块的垂直线)的数目是很重要的。这发生在最拥挤的点,因为有一个最大允许值(理想情况是8,10也是可能的,然而很不方便)。数据通路在逻辑上分为三个主要子部分,数据通路布局也是这样做的。在每个子部分,实际有四个并行数据流(这些流在不同的地点被合并),所以在每个子部分内有许多组织数据流(因而,所有元件的位置)的方法。在每个子部分中,对块的排序,还有逻辑总线的分配物理总线的间距(pitches),在布局开始以前都是小心作出的,以便可能得到一个能正确连接的布局。
B.9.12检验
IDCT在许多层进行检验,从顶层的算法检验到最后的布局检验。
变换结构的初始工作是用C做的。全精度和精确到位整数模型两者都被开发了。各种测试是在精确到位的模型上做的,以便保证与H.261精度规定一致,以及在变换结构之内测量各种计算的动态范围。
在许多情况下,用写一个子块的M性能描述(M behavioraldescription)的方法进行设计(例如,对数据通路和RAM的控制)。在进到那个部件的图解描述的设计以前,这样的一些M性能描述在Lsim中被模拟。在某些情况下(例如,RAM,时钟发生器)性能描述仍用于顶层模拟。
进行逻辑模拟的对策是对每个东西的简图模拟,只要该东西在那一层次的模拟可以满足要求。低层的库单元(即zcells和kdplib)主要用它们的性能描述来模拟,因这样可得到更小更快的模拟。另外,性能库单元提供定时校验特性,它能使某些线路配置问题突出。作为可靠性检验,某些模拟使用库单元的晶体管描述来完成。所有的逻辑模拟在零延迟状态下进行,所以目的是要检验功能特性。实时性能的检验用其它技术进行。
Lsim开关层模拟(用RC_定时方式)是作为定时特性的部分检验做的,但也提供了对某些别的潜在的晶体管级的问题的检验(例如,对毛刺敏感的线路)。
检验时序问题的主要检验技术是CPA工具的使用,对“datechk”的“路径”选件。这被用来识别比较长的信号路径(某些已经知道)。Hspice用来在某些临界情况下验证CPA分析。
大部分Lsim模拟是用标准的源→部件→漏(sink)方法学进行的,因为IDCT特性的大部分是用通过设备的令牌流来演练的。另外一些模拟也是必要的。用这些模拟来测试通过微处理器接口所访问的特性(配置,事件和测试逻辑)以及那些通过JTAG/扫描所访问的测试特性。
编译码的模拟可由一个对整个IDCT有本行一般技能的人很容易地完成。再一次使用标准的源→块→漏的方法,和用于Lsim检验的许多同样的令牌流。
B.9.13测试和测试支持
本节研究提供测试的一些技巧,并分析每个块如何测试。
为测试访问提供的三种技巧(mechanisms)如下:
·微处理器对RAM的访问
·微处理器对窥测部件的访问
·访问控制和数据通路逻辑的扫描路径
在IDCT中有两个“窥测器”部件和一个“特级窥测器”部件。图140示出窥测器部件的位置和其它的微处理器测试访问。
为了测试各个主部件与令牌流有关的特性的目的,用上述部件和两个RAM块,可以把每个主块孤立起来。用微处理器访问,可以控制令牌输入到任一个块,然后观察该孤立部件的令牌端口输出。另外,有两个独立的扫描路径,它们通过每块的各控制部分的(几乎)所有的触发器和锁存器,对于“oned”变换数据路径流水线。它们也通过某些数据通路锁存器。两个扫描路径用“a”和“b”表示,前者从“decheck”块运行到“ip_fmt”部件而后者从第一个“oned”块到“ras”块。
用正常地访问适当的内存映射单元的方法去访问窥测器是可能的。对RAM也同样可行(用认为合适的“ramtest”输入)。扫描路径正常地通过JTAG端口接受访问。
现在来讨论每个部件与涉及到的各种测试问题。
B.9.13.1“Decheck”
这个块有标准结构(见图139),在这里,输入和输出双线接口用的两个锁存器围绕着一个处理块。与通常一样,对两线锁存器不提供扫描,因为它们被使能时只简单地传送数据,没有逻辑的深度要测试。在这块中,“控制”部分包含一级由zcells组成的流水线,这些zcells都在扫描路径“a”上。控制部分的逻辑比较简单,最复杂的路径大概是数据扩展计数的产生。在那里用一个6位增量器。
B.9.13.2“IZZ”
这个块是标准结构的一种变形,包含一个加到两线接口锁存器的RAM块部件和控制部分。控制部分用zcells实现,地址序列产生用一个小ROM。所有的zcells在扫描路径“a”上,通过zcell锁存器来访问ROM的地址和数据。还有更多的逻辑,例如,数的产生,加上增量或减量的能力。另外,有一个7位全加器用于读地址的生成。RAM可由微处理器接口经过锁眼寄存器访问。见表B.9.1。
B.9.13.3“lp-fmt”
这个块也是标准格式的。控制逻辑用某些相当简单的zcell逻辑实现(全部在扫描路径“a”上)。但数据的锁存和移位/多路传送是在没有直接存取的数据通路中完成的,因为这里的逻辑很浅显和简单。
B.9.13.4“oned”
这个块也是采用标准结构。它分为随机逻辑和数据通路两部分。zcell逻辑比较简单,所有的zcells都在扫描路径“a”上。变换流水线数据通路的控制信号是从一个长移位寄存器得到的。这个移位寄存器包含zcell锁存器。锁存器在扫描路径上。另外,因为在流水线的某些级之间有可观的逻辑深度(例如乘法器和加法器),所以某些流水线锁存器被放在扫描路径上。非数据令牌沿一个移位寄存器传送,移位寄存器作为一个数据通路来实现,对任何级都没有测试访问。
B.9.13.5 Tram
这个块与“izz”块很相似。然而在这种情况下,地址序列的地址产生中不用ROM。这是用算法来完成的。所有的zcell控制状态都在数据通路“b”上。
B.9.13.6 Rras
这块采用标准结构,而且完全由zcells实现。最复杂的逻辑功能是用于舍入的8位增量器。所有其它逻辑相当简单。所有状态在扫描路径“b”上。
B.9.13.7其它顶层块
在IDCT的顶层有几个其它块。窥测器显然是测试访问逻辑的一部分,各JTAG控制块也是它的一部分。还有两个时钟产生器,它们没有任何特殊测试访问(虽然它们支持各种测试特性)。“idcts-els”块是Zcell逻辑组合成的,用于对微处理器地址解码。而“idctregs”块包含微处理器可访问事件和与IDCT有关的控制位。
B.10引言
B.10.1时间解码器概述
按照本项发明,时间解码器的内部结构示于图142。
芯牌的块之间的全部数据流(以及块内的很大一部分数据流)用两线接口控制。(详见技术参考和详细章节)。图B.10.1中的每个箭头表示一个两线接口。输入的令牌流通过输入接口,此接口把从相位锁定环路(Ph0/Ph1)得到的内部时钟与从外部系统时钟来的数据同步。令牌流通过一个顶层岔口分成两路,一路进入地址发生器,另一路到一个256字FIFO。来自前面的I或P帧的数据,从DRAM中取出时,FIFO对数据起缓冲作用。与此同时,前几个I或P帧的数据从DRAM中取出,它们在预测加法器(Prediction Adder)中被加到从空间解码器(Spatial Decoder)来的输入错误数(incoming err-or data)上之前,先在推算滤波器中进行处理(P和B帧)。在MPEG解码间,I和P帧的帧重排序数据也必须取出,以使输出帧的次序正确。重排序数据在读指针(Read Rudder)块中被插入到流中。
地址发生器为前向和后向预测、重排序、读和写回等产生独立的地址。被写回的数据在写指针块中从流中分出。最后,数据在输出接口块中与外部时钟重新同步。
时间解码器中所有主要块连接到内部微处理器接口(UPI)总线。这是从在微处理器接口部件中的外部微处理器接口(MPI)总线得到的。这个部件在对与它有关的芯片中有各部件的地址解码。事件逻辑也与微处理器接口有关。
时间解码器的其它逻辑主要与测试有关。首先,IEE 1149.1(JTAG)接口460不仅对内部各扫描路径提供接口,也对JTAG边界扫描特性提供接口。其次是各两线接口级。它们允许通过微处理器接口对数据流作插入式访问。而在测试方式下它们包括在流水线结构内的各关键处(strategic points)。
B.11时钟、测试和有关问题
B.11.1时钟方式(regimes)
在考虑芯片内各功能块以前,对芯片内的时钟方式及其相互关系有个了解是有帮助的。
在正常工作时,芯片的大部分块与来自锁相环路(PLL)块的信号pllsysclk同步运行。DRAM接口是一个例外,它的定时取决于对iftime子块同步的需要。iftime子块产生DRAM控制信号(notwe,notoe,notcas,notras)。这个块的核心是用两相非重叠时钟clk0和clk1定时的。它们是从90°相位差的两相时钟得到的,而这两个时钟是由PLL cki0,cki1和ckq0,ckq1独立供给的。
因为clk0,clk1 DRAM接口时钟与与芯片其余部分的时钟是异步的,在DRAM接口和芯片其它部分之间的接口处可能有暂稳状态(metastable behavior)。已采取办法(尽实际可能)消除这种可能性。同步发生在两个区域:在地址发生器的输出接口(addrgen/predread/psgsync,addrgen/ip_wrtz/sync18和addrgen/ip_rd2/sync18)和在一些部件中。这些部件控制了在DRAM接口(见DRAM接口的有关章节)中的交替缓冲器(swing-buffer RAMs)的“交替”。在每种情况,用三个串联的暂稳硬(metastable-hard)触发器完成同步过程。应该注意到这意味着clk0/clk1用在地址发生器的输出阶段。
除了这些完全异步的时钟方式以外,有许多单独的时钟发生器。它们从pllsysclk产生两相不重叠时钟(Ph0,Ph1)。地址发生器,预测滤波器和DRAM接口,各自有它们自己的时钟发生器。芯片的其余部分用一个公共时钟发生器来运行。其理由有两方面。第一,减少各个时钟发生器上的容性负载,从而允许用更小的时钟驱动器,以及减少时钟走线宽度。第二,每个扫描路径用一个时钟发生器控制,所以增加时钟发生器的数目就允许用更短的扫描路径。
所传送的时钟方式边界的信号必须被重新同步,因为从不同时钟发生器得到的不重叠时钟之间的少许对不齐(minor skews)可能意味着在各接口处发生重叠(underlab)。建立在每个“窥测器”块(见B.11.4节)内部的电路确保不会发生这种情况。窥测器块已被放在所有时钟方式之间的边界上。但在地址发生器的前面是一个例外,在那里重新同步是在令牌解码部件内完成的。
B.11.2时钟的控制
每个标准时钟发生器产生许多不同的时钟,它们允许在正常方式和扫描-测试(scan-test)方式工作。在扫描-测试方式下,时钟的控制在别处已详细描述。但值得注意的是一个时钟发生器产生的若干时钟(tph0,tph1,tckm,tcks)通常在图解中没有被连结到图中任何基本的符号(primitive symbols)。这是因为扫描路径是由一个后处理器自动产生的。这个后处理器正确地连接这些时钟。从功能的观点看,后处理器已经连接与图示不同的时钟这一事实可以忽视;效应(behavior)是一样的。
在正常工作时,可以有许多不同的方法得到主时钟。表B.11.1表明如何根据pllselect引脚和override引脚的状态选择各种方式。
表B.11.1时钟控制方式
pllselect |
override |
方 式 |
0 |
0 |
pllsysclk被直接连到外部的sysclk,将PLL旁路;DRAM接口时钟(cki0,cki1,ckq0,ckq1)从引线ti和起直接被控制。 |
0 |
1 |
Override方式-ph0和ph1时钟从tph0ish和tp1ish引线直接被控制。DRAM接口时钟(cki0,cki1,ckq0,ckq1)从ti和tq引线直接被控制。 |
1 |
0 |
正常工作pllsysclk是PLL产生的时钟;DRAM接口时钟用PLL产生。 |
1 |
1 |
外部电阻连接到ti和tq代替内部电阻(只查错)。 |
B.11.3两线接口
两线接口的总功能在技术参考中详细描述。然而,两线接口用于时间解码器内部所有部件到部件的通讯。大部分块包含若干流水线级,所有这些流水线级本身又都是两线接口级。所以为了能阐明许多线路图,理解双线接口的内部实现是很重要的。一般,这些内部流水线级的构造如图143所示。
图143表明一个锁存器-逻辑-锁存器的表示法,因为这是通常使用的结构。然而当许多级放在一起时,认为是锁存器-锁存器-逻辑的“级”同样是有效的(对许多工程师来讲这是一个更熟悉的模型)。锁存器-逻辑-锁存器结构的使用允许所有内部块通讯是锁存器至锁存器,无论在发或收的块中都没有任何插入逻辑。
再看图143,通过去掉逻辑块就能构成一个简单的两线接口FIFO级。这时数据和有效信号在锁存器之间直接连接,被锁存的in_valid信号直接连到在in_accept锁存器输入上的或非门,如同out_valid信号和out_accept信号被门控制的情况一样。当相应的接收信号为高时,数据和有效信号就传播。以这种方式,把in_valid和out_accept_reg相或,若in_valid为低,out_accept_reg为低数据将被接收。每当停止(接收信号低)发生时,间隙(带有效位低的数据)将从流水线中除去。
如图143所示,把逻辑块插入后,in_accep和out_valid也同数据或块的状态有关。在所示的配置中,主从设置中所保持的块中的任何状态是标准的,主设备用Ph1使能,从设备用Ph0使能。
B.11.4窥测器块
窥测器块,通过微处理器接口,在芯片的不同点上访问数据流。有两类窥测器块。通常的窥测器块只在测试方式能被访问,在那里时钟可以被直接控制。“超级窥测器”在时钟运行时可以被访问。它包含的线路使从微处理器总线来的异步数据与内部芯片时钟同步。表B.11.2列出在临时解码器内的所有窥测器的位置和类型。
表B.11.2 在时间解码器中的窥测器
位 置 |
类 型 |
addrgen/vec_pipe/snoopz31 |
窥测器 |
addrgen/cnt_pipe/endsnp |
窥测器 |
addrtgen/cnt_pipe/endsnp |
窥测器 |
addrgen/predread/snoopz44 |
窥测器 |
addrgen/ip-wrt2/superz10 |
超级窥测器 |
addrgen/ip_rd2/superz10 |
超级窥测器 |
dramx/dramif/itsnoops/snoopz15(fsnp) |
窥测器 |
dramx/dramif/ifsnoops/snoopz15(bsnp) |
窥测器 |
dramx/dramif/ifsnoops/superz9 |
超级窥测器 |
wrudder/superz9 |
超级窥测器 |
pflts/fwdflt/dimbuff/snoopk13 |
窥测器 |
pflts/bwdflt.dimbuff/snoopk13 |
窥测器 |
pflts/snoopz9 |
窥测器 |
两种窥测器的使用细节包含在测试一节中。JTAG接口的工作的细节包含在JTAG文件中。
B.12功能块
B.12.1顶层岔口(Top Fork)
按照本发明,顶层岔口有两个用途。第一,它将数据流分岔成两个分开的流:一个到地址发生器,另一个到FIFO。第二,它提供起动和停止芯片的手段,使芯片能被配置。
器件岔口部分的样子十分简单。同一数据既加到地址发生器上,也加到FIFO上。在接受信号被送回上一级之前,此数据就必须已被地址发生器和FIFO接受到。因此,岔口两分支的有效信号都取决于另一分支的接受信号。如果芯片在已停止状态,加到两分支的有效信号都被保持为低。
在in_accept保持为低时,芯片起动,直到配置位被置高。这保证了在用户已配置芯片之前,没有数据被接受。如果用户需要在任何其他时间配置芯片,则他必须设置配置位和等待,直到芯片完成当前的流。停止步骤如下:
1)如果配置位已被置位,在顶层岔口检测到个FLUSH令牌后,不再接收更多的数据。
2)FLUSH令牌到达读指针时,芯片已结束流处理。这使信号seq_done变高。
3)当seq_done变高时,设置一事件位,这个位可用微处理器读。事件信号可被事件块屏蔽。
B.12.2地址发生器
在本发明中,地址发生器(addrgen)负责对一帧内的块计数,以及负责为DRAM数据传送产生正确的地址序列。地址发生器的输入是从令牌输入端口(通过顶层岔口)来的令牌流。它的输出到DRAM接口,包含地址和其它信息。这些信息被一个请求/确认协议控制。
地址发生器的主要部分是:
·令牌解码
·块计数和DRAM块地址的产生
·运动矢量数据转换为地址偏移量
·为预测传送向地址发生器请求
·重排序读址发生器
·写地址发生器
B.12.2.1令牌解码(tokdec)
在令牌解码器中,与编码标准、帧和块信息以及与运动矢量有关的令牌被解码。从流中提取的信息存入一组寄存器。通过upi也可以访问这些寄存器。检测到数据令牌头就向后继的各块发信号使能块计数和地址产生。运行JPEG时什么都不发生。
被解码的令牌列表如下:
·CODING_STANDARD
·DATA
·DEFINE_MAX_SAMPLING
·DEFINE_SAMPLING
·HORIZONTAL_MBS
·MVD_BACKWARDS
·MVD_FORWARDS
·PICTURE_START
·PICTURE_TYPE
·PREDICTION_MODE
这个块也组合从各请求发生器来的信息去控制帧指针的转换(toggling),和停止输入流。在输入处出现一个新帧时(以pictu-re_start令牌的形式出现),流被停止,但与前一帧有关的写回或重排序读尚未完成。
B.12.2.2宏块计数器(mblkcntr)
本发明的宏块计数器包含四个基本计数器,它们指向帧中宏块的水平位置和垂直位置以及宏块中块的水平和垂直位置。在时间开始时和每一次PICTURE_START出现时,所有计数器复位到零。在数据令牌头到达时,根据令牌头中的彩色分量号和帧的结构,这些计数器增值和复位。这个帧结构在令牌解码器中用取样寄存器来描述。
对一给定彩色分量,计数进行如下。每来一个同样分量的新数据令牌,水平块计数增加,直到它达到宏块的宽度为止,然后被复位。这个复位使垂直块计数增加,直到它达到宏块的高度,于是它复位。当这发生时,就期待下一个彩色分量。因此,宏块中的每个分量按此工序重复进行-宏块的水平和垂直尺寸可能因每个分量而不同。如果,对任一分量,接收到的块数比预期的要少,计数仍将不出错地继续进行到下一分量。
当数据令牌的彩色分量比预期值少,水平宏块计数增加。(注意,对于一个给定的彩色分量,如出现多于预期值的块数时,也会发生这种情况。因为那时各计数器会期待一个更高的分量指数(index)。当计数达到宏块中图象宽度时,水平计数复位。这个复位使垂直宏块计数增加。
在H.261 CIF格式中,有进一步的对宏块计数的能力。在这种情况,在宏块和图象之间有一个称作块组(group of blocks)的额外的层次。这种块组是11个宏块宽,三个宏块深,一幅图象总是两组宽。令牌解码器从PICTURE_TYPE令牌提取CIF位。把这传到宏块计数器,指令它对块组计数。每个分量块数太多或太少的情况会引起上述同样反应。
B.12.2.3块计算(blkcalc)
块计算把宏块和宏块内的块的坐标转换成图象中块的位置的坐标,即它打破了层次。当然,这必须把不同彩色分量的采样比考虑在内。
B.12.2.4基块地址(bsblkadr)
从blkcalc来的信息与彩色分量位移量一起用来计算在线性DRAM地址空间内的块地址。实质上,对于一个给定的彩色分量讲,线性块地址是向下方向的块数(number of blocks dowm)乘以图象宽度加上长度方向的块数(number of blocks long)。这被加到彩色分量偏移量去形成基块地址。
B.12.2.5矢量位移(vec_pipe)
令牌解码器给予的运动矢量位移信息采用水平和垂直象素偏移坐标的形式。即对前向和向后矢量中的每一个有一个(x,y)。(x,y)给出从正在形成的块到另一个所被预测的块之间的位移。位移是以半个象素为单位表示的。注意,这些坐标可以是正的或负的。它们首先按照每个彩色分量和采样定标(scaled),然后被用来形成块和新象素偏移量的坐标。
在图145中,有阴影的区域表示正被形成的块。虚线轮廓表示正被预测的块。大箭头表示块偏移量-到DRAM块的水平和垂直矢量。该DRAM块包含预测块的原点-在这一情况是(1,4)。小箭头表示新象素偏移量-在那个DRAM块内的预测块原点的位置。因为DRAM块是8×8字节,象素偏移量指望是(7,2)。
乘法器阵列Vmarrla然后把块矢量偏移量转换为一个线性矢量偏移量。象素信息作为一个(x,y)座标(pix_info)被送到预测请求发生器。
B.12.2.6预测请求
帧指针、基块地址和矢量偏移量加在一起形成块地址。这个块是要从DRAM(Inblkad3)中取址的。如果象素偏移量为0,只产生一个请求。如果在x维或y维有一个偏移量,则产生两个请求-原来的块地址和立即向右或立即向下两者之中的一个地址。在x和y维都有偏移量,则产生四个请求。
芯片时钟方式和DRAM接口时钟方式之间的同步发生在第一次加法(Inblkad3)和状态机之间。该状态机产生合适的请求。所以状态机(psgstate)用DRAM接口时钟计时,它的扫描元件构成DRAM接口扫描链的一部分。
B.12.2.7重排序读请求和写请求
因为这里不涉及象素偏移量,用基块地址和有关的帧指针相加的办法形成每个地址。重排序读使用同一帧存贮器。预测和数据则被写回到另一个帧存贮器。每个块包括一个短的FIFO,用来存地址,因为读和写数据的传送很可能落后于在相应地址上的预测数据的传送。(这是因沿着芯片数据流,读/写数据比预测数据对流有更多的影响)。每个块也包含芯片时钟和DRAM接口时钟之间的同步。
B.12.2.8偏移量
DRAM配置有两个帧存,每一个最多包含三个彩色分量。在每帧内的帧存指针和彩色分量偏移量必须通过upi编程。
B.12.2.9窥测器
在本发明中,窥测器被放的位置如下:
·在blkcalc和bsblkadr之间-这个接口包括水平和垂直块座标、适当的彩色分量位移量和以块为单位的图象宽度(所对的那个分量)。
·在bsblkadr后面-基块地址。
·在vec_pipe后面-线性块偏移量,块内的象素偏移量及预测方式的信息,彩色分量和H.261操作。
·在Inblkad3后面-物理块地址,如“预测请求”中所述。
超级窥测器放在重排序读和写请求发生器中,在测试外部DRAM时使用。一切细节请看DRAM接口节。
B.12.2.10扫描
addrgen块有它自己的扫描链,它的定时用部件自己的时钟发生器(adclkgen)控制。注意,在部件的后端的请求发生器归属DRAM接口时钟范围。
B.12.3**预测滤波器
按照本发明,预测滤波器的总结构示于图146。前向和后向滤波器是全同的,它们对MPEG前向和后向预测块滤波。只有前向滤波器用在H.261方式(后向滤波器的h261_on输入永远应为低,因为H.261流不包含后向预测)。整个预测滤波器块由一些两线接口级的流水线组成。
B.12.3.1预测滤波器
每个预测滤波器的工作完全与另一个无关,有效数据一出现在它的输入,它就立即处理数据。从图147可看出一个预测滤波器包括四个独立的块,其中两个是相同的。最好为MPEG和H.261操作独立地描述这些块的工作。H.261更复杂一些,首先描述它。
B.12.3.1.1 H.261操作
所用的一维滤波方程如下:
Fi=xi (其它)
这个公式被x预测滤波器用于8×8块的每一行,被y推算滤波器用于每一列。实现它的机理示于图148。这基本上是pfltldd图的再现。滤波器由三个两线接口流水线级组成。对一行的第一个和最后一个象素,寄存器A和C被复位,数据不改变地通过寄存器B、D和F(B和D的内容被加到0)。B×2×mux的控制置位,所以寄存器B的输出左移一位。这个移位除一个位以外,这一位在任何事件中总是被移位。所以,所有值被4乘(更多关于这方面的说明见后)。所有其它象素xi+1装入寄存器C,xi装入寄存器B,xi-1装入寄存器A。从图148可看出,H.261滤波方程于是被实现。因为垂直滤波是三个水平组为一单位来完成的,(见下面关于维缓存器的注解)不需要不同地处理一行的第一和最后的象素。在一行内,控制和象素的计数用与每个1-D滤波器有关的控制逻辑完成。应当注意,结果还没有被4除。在预测滤波器加法器(B.12.4.2)的输入处完成被16除(右移4位)。这是在水平和垂直滤波都完成以后实现的。所以计算精度没有损失。寄存器DA、DD和DF把控制信号下送到流水线。这包括h261_on和last_byte。
在预测滤波器中的其它块中,格式化器的功能仅仅是保证数据以正确次序送到x-滤波器。由上可见,这仅需一个三级移位寄存器,第一级连到寄存器C的输入,第二级连到寄存器B而第三级到寄存器A。
在x和y滤波器之间,维缓存器缓冲数据,使得以三个垂直象素为一组地送到y-滤波器。然而,这些三象素的组仍旧水平地处理,所以在预测滤波器内没有转置发生。参看图149,从维缓存器输出象素的次序,在表B.12.1中说明。
表B.12.1 H.261维缓冲器序列
时钟 |
输入象素 |
输出象素 |
时钟 |
输入象素 |
输出象素 |
1 | 0 | 55(a) | 17 | 16 | 7 |
2 |
1 |
56 |
18 |
17 |
F(0.8.15)(5) |
3 | 2 | 57 | 19 | 18 | F(1.9.17) |
4 |
3 |
58 |
20 |
19 |
F(2.10.18) |
5 |
4 |
59 |
21 |
20 |
F(3.11.19) |
6 |
5 |
60 |
22 |
21 |
F(4.12.20) |
7 |
6 |
61 |
23 |
22 |
F(5.13.21) |
8 | 7 | 62 | 24 | 23 | F(5.14.22) |
9 |
8 |
63 |
25 |
24 |
F(7.15.23) |
10 |
9 |
0 |
26 |
25 |
F(8.16.24) |
11 |
10 |
1 |
27 |
26 |
F(9.17.25) |
12 |
11 |
2 |
28 |
27 |
F(10.18.26) |
13 |
12 |
3 |
29 |
28 |
F(11.19.27) |
14 |
13 |
4 |
30 |
29 |
F(12.20.29) |
15 |
14 |
5 |
31 |
30 |
F(12.20.28) |
16 |
15 |
6 |
32 |
31 |
F(14.22.30) |
a、前一块象素的最小行(least row of pixels from previousblock),如果没有前一块(或如果在块之间有长间隙)则是无效数据。
b、F(x)表示H.261滤波方程中的函数。
B.12.3.1.2 MPEG操作
在MPEG工作时,预测滤波器完成一个简单的半象素(half pel)内插法:
Fi=xi(0≤i≤7,integer pel)
除非h261_on输入为低,这是缺省的滤波操作。如果信号dim进入1-D滤波器为低,则整数象素(integer pel)内插法被执行。相应地,如果h261-on为低和xdim及ydim为低,所有象素不经滤波直接通过。这是一个明显的要求,即当dim信号进入1-D滤波器为高时,行(或列)将为8个象素宽(或高)。这被概括在表B.12.2中。参考图148,“1-D预测滤波器”。1-D滤波器对MPEG中间象素的操作与对H.261一行中第一和最后象素的操作是一样的。对于MPEG半象素操作,寄存器A是永远复位的,寄存器C的输出左移1位(在任何情况下寄存器B的输出总是左移一位)。所以,在两个时钟以后,寄存器F包含(2B+2C),四倍于需要的结果,但这在预测滤波器加法器的输入处已予注意,在那里数已流过x和y滤波器两者,被右移4位。
表B.12.21-D滤波器操作
h261-on |
xdim |
ydim |
功 能 |
0 |
0 |
0 |
Fi=Xi |
0 |
0 |
1 |
MPEG 8×9块 |
0 |
1 |
0 |
MPEG 9×8块 |
0 |
1 |
1 |
MPEG 9×9块 |
1 |
0 |
0 |
H.261低通滤波器 |
1 |
0 |
1 |
不合法 |
1 |
1 |
0 |
不合法 |
1 |
1 |
1 |
不合法 |
在MPEG中格式化器和维缓存器的功能也比较简单。格式化器必须先收集两个有效象素,在这以的才把它们送到x-滤波器作半象素内插;维缓存器只需缓冲一行。值得注意的是,在数据已通过x-滤波器以后,一行总是只能有8个象素,这是因为滤波操作把9个象素的行变换为8象素的行。“失去的”象素在数据流中用间隙代替。当完成半象素内插法以后,X-滤波器在每行终端(在每8个象素之后)插入一个间隙;y-滤波器在块的末尾插入8个间隙。这是重要的,因为块末尾的8或9个间隙的组与出于FIFO流中的数据令牌头以及数据令牌之间的其它令牌相一致。这使芯片的最坏情况的流通量减到最小。这种情况发生在9×9块被滤波时。
B.12.3.2预测滤波器加法器
在MPEG工作时,推算可以用一幅较早的图,一幅较迟的图或两者的平均来形成。用较早的一帧形成的预测称为前向预测,用较迟的一帧形成的叫后向预测。预测滤波器加法器(pfadd)的功能是决定用哪一个已滤波的预测值(前向,后向或两者),并决定通过(pass through)前向或后向已滤波的预测还是通过两者的平均。(向正无穷大舍入)。
预测方式只能在块之间改变,即在启动(power-up)时或在fwd_1st_byte和/或bwd_1st_byte信号有效以后,表明是当前预测块的最后字节。如果当前块是一个前向预测,则只检验fwd_1st_byte。如果它是一个后向预测,则只检验bwd_1st_byte。如果它是一个双向预测,则fwd_1st_byte和bwd_1st_byte两者都要检验。
信号fwd-on和bwd-on决定用哪一个预测值。在任何时候,这些信号可能两个都有效或两个都无效。启动时,或当块的输入处没有有效(valid)数据而出现一个间隙时,块进入两个信号都无效的状态。
用两个准则为下一个块决定预测方式:信号fwd_ima_twin和bwd_ima_twin,它们表明是前向块还是后向块构成双向预测对的一部分,和总线fwd_p_num[1:0]和bwd_p_num[1:0]。这些总线包含数字,这些数字为每一个预测块或新预测块对(pair)增加1。这些块是必要的,因为,例如,如有两个前向预测块,后面跟着一个双向预测块,DRAM接口能够在前面足够远处取到双向预测块的后向块,使得在第二个前向预测块之前,这个后向块达到预测滤波器加法器的输入。类似地,其它后向和前向预测序列能在预测滤波器加法器的输入处从序列中取出。因此,下面预测方式如下被决定:
1)如果有效前向数据存在,且fwd_ima_twin为高,则块就停止,直到随着bwd_ina-twin的置1,有效后向数据到达。然后通过每对预测值取平均的那些块。
2)如果有效后向数据存在,且bwd_ima_twin为高,则块停止,直到随着fwd-ima-twin的置1,有效前向数据到达,然后象上面一样处理。如果前向和后向数据一起是有效的,则不停止。
3)如有效前向数据存在,但fwd_ima_twin未置1,则检查fwd_p_num。如这等于从上一次预测出来的数加1(存贮在pred_num中)则被测方式设置为前向。
4)如有效反向数据存在,但bwd_ima_twin未置1,则检查bwd_p_num。如这等于从上一次预测出来的数加1(存贮在pred_num中),则预测方式设置为后向。
注意,使用了从流水线退回一级来的“early-valid”信号,这是为了使预测滤波器加法器方式能在从新块来的第一个数据到达以前设置。这确保没有停止被引入流水线。
ima_twin和pred_num信号没有和已滤波的数据一起通过前向和反向预测滤波器流水线。这是因为:
1)这些信号只在fwd-1st-byte和/或bwd-1st-byte是有效时才被检验。这在每个预测滤波器中差不多节省了25个三位的流水线级。
2)在整个块中,信号保持有效,所以,当fwd_1st_byte和/或bwd_1st_byte到达预测滤波器加法器时,信号是有效的。
3)信号在数据到达以前一个时钟周期被检验。
B.12.4预测加法器和FIFO
预测加法器(padder)用把预测滤波器的数据加上误差数据(error data)的方法形成所预测的帧(predicted frame)。为了补偿从输入经过地址发生器,DRAM接口和预测滤波器引起的处延迟,误差数据在到达Padder以前,经过一个256字的FIFO(sfifo)。
CODING_STANDARD,PREDICTION_MODE和数据令牌被解码,以确定什么时候预测块被形成。在数据令牌中,8位预测数据加9位2的补码误差数据。其结果被限制在0到255范围内并送到下一个块。注意,这个数据限制也适用于所有内部编码数据,包括在JPEG中。
本发明的预测加法器也包含一个机构。它用来检测从FIFO来的数据与从预测滤波器来的数据之间的不匹配。理论上,从滤波器来的数据量应与从包含预测的FIFO来的数据令牌数完全对应。在严重故障的事件中,padder会企图补偿。
从FIFO和滤波器来的数据块的尾,分别用in-extn和fl-last输入来标识。当滤波器数据的结束在数据令牌流的结束以前被检测到时,令牌的剩余部分继续不变输出。另一方面,如果滤波器块比数据令牌长,则输入被停止,直到所有多余的滤波器数据已被接受遗弃为止。
在FIFO或预测加法器中都没有窥测器。因为能把芯片配置成使数据从令牌输入端口直接送到这些块,以及把它们的输出直接送到令牌输出端口。
B.12.5写指针和读指针
B.12.5.1写指针(wrudder)
写指针把所有来自预测加法器的令牌传送到读指针。它也传送MPEG中I或P图象的所有数据块,及H.261中的所有数据块到DRAM接口,使得这些数据块可以在地址发生器的控制下被写进外部帧存贮器。所有的主要功能包含在一个双线接口级内,虽然写回数据在到DRAM接口的途中经过一个窥测器。
写指针对以下令牌解码:
表B.12.3 由写指针解码的令牌
令牌名 |
写指针的功能 |
CODING_STANDARD |
对JPEG流禁止写回 |
PICTURE_TYPE |
只在I和P帧写回,B帧不写回 |
DATA |
只有数据令牌中的数据被写回 |
在数据令牌头被检测到以后,所有数据字节输出到DRAM接口。用in_extn变低表示数据令牌结束已被检测到。这使一个注满(flu-sh)信号送到DRAM接口的交替缓冲器。在正常工作情况下,这无论如何会与交替缓冲器交替的时刻相一致,但如数据令牌不包含64个字节数据,这提供一个恢复手段(虽然随后的很少几幅输出图象是可能不正确的)。
B.12.5.2读指针(rrudder)
本项发明的读指针有三个功能,其中两个主要功能关系到在MPEG中图象序列的重排序:
1)将从外部帧存贮器已读回的数据,在正确位置插入令牌流。
2)在I和P图象中对图象头信息重排序。
3)用检测FLUSH令牌的方法,检测令牌流的结束(见B.12.1节,“顶层岔口”)。
读指针的结构示于图150。整个部件是根据标准两线接口技术组成。在输入接口锁存器中的令牌被解码,这些解码决定了部件的工作:
表B.12.4 由读指针解码的令牌
令牌名 |
读指针功能 |
FLUSH |
信号到顶层岔口 |
CODING_STANDARD |
如解码标准不是MPEG,禁止重排序 |
SEQUENCE_START |
对重排序列的第一个图象读回的数据是无效的 |
PICTURE_START |
用信号通知当前输出FIFO必须交换(I或P图象)图象头令牌中的第一个 |
PICTURE_END |
图象层以上的所有令牌允许通过 |
TEMPORTAL_REFERENCE |
第二个图象头令牌 |
PICTURE_TYPE |
第三个图象头令牌 |
DATA |
当重排序时,数据令牌的内容被换以重排序数据 |
重排序功能由微处理器接口而定,但如编码标准不是MPEG则被禁止,不管寄存器的状态如何。同一个MPI寄存器控制地址发生器是否产生一重排序地址。所以,重排序是从这个块输出的。为了了解读指针如何工作,分别考虑输入和输出逻辑。记住,令牌的序列如下面所示:
·CODING_STANDARD
·SEQUENCE_START
·PICTURE_START
·TEMPORAL_REFERENCE
·PICTURE_TYPE
·Picture containing DATA Tokens and other tokens
·PICTURE_END
·...
·PICTURE_START
B.12.5.2.1输入控制逻辑
启动一开始,所有令牌进入FIFO1(称作当前输入FIFO)直到遇到I或P图象的第一个PICTURE_TYPE令牌为止。然后FIFO2变成当前输入FIFO,所有的输入指向它,直到下一个I或P图象的PICTURE_TYPE被遇到为止,而FIFO1又变成当前输入FIFO。在I和P图象中,PICTURE_TYPE和PICTURE_END之间的所有令牌被抛弃,数据令牌除外。这是为了防止运动矢量等在已重排序的流中与错误图象联系在一起,错误图象在那里本来没有意义。
一个三位码随着令牌流放入FIFO,以表明某些令牌头的存在。这省去了必须在各FIFO输出完成令牌解码。
B.12.5.2.2输出控制逻辑
启动开始,从FIFO1接收令牌(称作当前输出FIFO)直到遇到一个图象起始码为止。在这以后,FIFO2变成当前输出FIFO。返回去参看B.12.5.2.1节,可以看出,在这一级,三个图象头令牌,PICTURE_START,TEMPORAL_REFERENCE和PICTURE_START保留在FIFO1。在I或P帧每次遇到一个图象起始码时,当前输出FIFO被交换。相应地,三个图象头令牌被存储,直到下一个I或P帧为止。那时,他们将变成与正确地重排序数据有关。B图象没有重排序,因此没有任何令牌被抛弃而通过。在第一幅图中,所有令牌,包括PICTURE_END,被抛弃。
在I和P图象期间,令牌流中数据令牌包含的数据被从DRAM接口来的重排序数据所代替。在第一幅图期间,“经过重排序”的数据仍旧存在在重排序数据输入,因为地址发生器仍旧请求DRAM接口去取它。这被看作无意义的信息而被抛弃。
B.13 DRAM接口
B.13.1概述
在本发明中,空间解码器,时间解码器和视频格式化器,每个包含一个本特殊芯片的DRAM接口部件。在全部三个装置中,DRAM接口的功能是从芯片到外部DRAM和从外部DRAM到芯片传送数据。数据传送是通过地址发生器提供的块地址进行的。
DRAM接口典型地用时钟工作。这个时钟和地址发生器及通过数据各个块的时钟间是异步的,然而这个异步是容易处理的,因为这些时钟工作在差不多相同的频率。
数据通常在DRAM接口和芯片的其余部分之间以64字节的块传送(唯一的例外是时间解码器中的预测数据)。传送的发生通过一个称为“交替缓存器”的装置。这实质上是一对以双缓冲结构形式运行的一对RAM。用DRAM接口填充或出空一个RAM时,芯片的另外部分出空或填充另一个RAM。一个携带从地址发生器来的地址的独立总线与每一交替缓冲器相连。
每一芯片有四个交替缓存器,但在每种情况,这些交替缓存器的功能是不同的。在空间解码器中,一个交替缓冲器用于传送编码数据到DRAM,另一个从DRAM读取编码数据,第三个传送令牌化数据到DRAM,而第四个从DRAM读取令牌化数据。在时间解码器中,一个交替缓冲器用来写基的或预测的图象数据到DRAM,第二个从DRAM读取基数据或预测数据,另外两个读前向和后向预测数据。在视频格式化器中,一个交替缓冲器用来向DRAM传送数据,另外三个用来从DRAM读数据,即,读亮度(Luminance)(Y),红、蓝色差数据(分别为Cr和Cb)每个中的一个。
DRAM的一般特性的工作在空间解码器文件中描述。下节描述时间解码器特有的特性。
B.13.2时间解码器DRAM接口
如在B.13.1节中所述,时间解码器有四个交替缓存器:两个用来读和写已解码的基的和已预测的(I和P)图象数据。这些缓存器的工作如前述。另外两个用来取预测数据。
通常,预测数据由x,y形式的运动矢量来表明正被处理块的位置偏移。所以被取出的数据块一般不对应于它以前被编码(和写入DRAM)的数据的块边界。这在图151和图25中说明。在这里阴影区域表示正在形成的块。虚线轮廓表示正被预测的块。地址发生器把用运动矢量表明的地址转换为一个块偏移量(整块数)如大箭头所示,和一个象素偏移量,如小箭头所示。
在地址发生器中,帧指针、基块地址和矢量偏移量加起来形成要从DRAM中取的块的地址。若象素偏移量为0,只产生一个请求。如在x或y维两者之一中有一个偏移量,则产生两个请求-原来的块地址和立即向右或立即向下两者中的一个地址。x和y两者都有一个偏移量时,则产生四个请求。对要取的每个块,地址产生器计算起始和停止地址参数并把这些参数送到DRAM接口。这些起始和停止地址的使用最好用例子说明,概述如下:
考虑一个象素偏移量(1,1),如图152图26中阴影区域所示。地址发生器造成四个请求,在图中标号为A到D。要解决的问题是如何很快地提供所要求的行地址序列。解决的方法是用“启动/停止”技术。描述如下:
考虑图152中的A块。必须从位置(1,1)开始读,以位置(7,7)结束。假定现在正在一次读一个字节(即一个8位DRAM接口)。坐标对的x值形成地址的三个最低有效位,y值形成三个最高有效位。x和y的起始值都是1,给出地址9。数据从这地址读起,x值增加。这个过程被重复直到x值达到它的停止值为止。在此刻,y值增1,x起始值被重装入,给出地址17。因为数据的每个字节被读取,x的值又增加,直到达到它的停止值。这个过程重复进行直到x和y的值都已达到它们的停止值。因此,地址序列9、10、11、12、13、14、15、17、......、23、25、......、31、33、......、......、57、......、63被产生。
类似地,B块起始和停止坐标是(1,0)和(7,0),C块是:(0,1)和(0,7),D块是:(0,0)和(0,0)。
下一问题是这个数据应往何处写。显然,先看A块,从地址9读取的数据应写到地址0,0地址在交替缓存器中。从地址10读取的数据应写到交替缓存器中地址15,等等。类似地,从B块的地址8读的数据应写到交替缓存器的地址15,从地址16读出的数据应写入交替缓存器地址15。这种操作最后有很简单的实现,概述如下。
考虑块A。在读开始时交替缓存器地址寄存器装入停止值的反数(inverse),y的取反停止值形成三个最高有效位(MBS),x的取反停止值形成三个最低有效位。在这一情况,当DRAM接口正在读外部DRAM中的地址9时,交替缓存器的地址是0。然后,当外部DRAM地址寄存器增加时交替缓存器的地址寄存器也增加。如表B.13.1所示:
表B.13.1预测寻址的说明
外部DRAM访问 |
交替缓存器地址 |
外部DRAM地址(二进制) |
交替缓存器地址(二进制) |
9=y-start,x-start |
0=y-stop,x-stop |
001001 |
000000 |
10 |
1 |
111110 |
000001 |
11 |
2 |
001011 |
000010 |
15 |
6 |
001111 |
000110 |
17=y-1,x-start |
8=y+1x-stop |
010001 |
001000 |
18 |
9 |
010010 |
001001 |
到此为止的讨论集中在8位DRAM接口。对于16位或32位接口,必须做少量修改。第一,象素偏移矢量必须被“限制”(clipped),使它指向16或32位边缘。在我们一直使用的例中,对A块,开始DRAM读将指向地址0,在地址0到3中的数据将被读。下面,不要的数据必须被抛弃。把所有数据写入交替缓存器并加上偏移量进行读取,就可做到这点。(现在交替缓存器的物理量比在8位时所必需的要大些)。当做MPEG半象素内插法时,在x和/或y方向必须从DRAM接口读9个字节。在此情况,地址发生器提供合适的起始和停止地址,DRAM接口中某些另外的逻辑被用到。但是DRAM接口的工作方式没有根本的改变。
关于时间解码器的DRAM接口,最后一点要指出的是,对预测滤波器必须提供另外的信息,以指示对数据需要作哪种处理。这包括以下方面:
·一个“最后字节”信号,指明一次传送的最后字节(64,72或81字节)
·一个H.261标识
·一个双向预测标识
·用两位指明块的尺寸(在x和y方向是8或9个字)
·两位数表明各块的次序
最后字节标识可以在数据从交替缓存器读出时产生。其它信号从地址发生器得到,并通过DRAM接口输送,以使它们和正确的数据块相联系。这是因为数据是用预测滤波器部件从交替缓存器读出的。
B.14 UPI文件
B.14.1前言
本文件意图使读者对本发明的微处理器接口的工作有一个了解。UP接口同空间解码器和时间解码器接口,基本上是一样的,唯一差别是地址线的数目。
这里描述的逻辑纯是微处理器内部逻辑。有关的电路图是:
UPI
UPI101
UPI102
DINLOGIC
DINCELL
UPIN
TDET
NONOVRLP
WRTGEN
READGEN
VREFCKT
电路UPI,UPI101,UPI102的不同处在于UPI101有7位地址输入,其第8位总接地,而UPI和UPI102有8位地址输入,
输入/输出信号
这里描述的信号是一张对UPI模块的所有输入和输出的列表(输入、输出是相对于UPI来定义的)。表中详细说明了这些信号的源或目的地:
NOTRSTINPUT Glolal芯片复位,低电平有效,从暂存(Pad)输入驱动器来。
E1InputEnable信号1,低电平有效,从暂存(Pad)输入驱动器(Schmitt)来。
E2InputEnable信号2,低电平有效,从暂存(Pad)输入驱动器(Schmitt)来。
RNOTWInputRead不写信号从暂存(Pad)输入驱动器(Schmiff)来。
ADDRIN[7:0]Input地址总线信号,从暂存(Pad)输入驱动器(Schmitt)来。
NOTDIN[7:0]Input1输入数据总线,从双向微处理器数据引脚(TTLin)的输入暂存(Pad)驱动器来。
INT_RNOTWoutput内部读不写信号,到被微处理机接口访问的内部线路(见存储器图)。
INT_ADDR[7:0]OutPut内部地址总线,到被微处理器接口访问的所有线路(见存储器图)。
INTDBUS[7:0]Input/output内部数据总线,到被微处理器接口访问的所有线路(见存储器图),以及微处理器数据输出焊盘。内部数据总线传送的数据,与芯片引脚上的数据相反(inverse)。
READ_STROutputAn是一个内部定时信号, 它指明在设备存储器图中的一个单元的一次读取。
WRITE_STROutputAn是一个内部信号,它指明内部存储器图中的一个单元的一次写入。
TRISTATEDPADOutputAn是一个内部信号,连到微处理器数据输出焊盘,它指明它们应该是三态。
总注释:
UPI原理图包含6个较小的模块:NONOVRLP,UPIN,DINLOGIC,VREFCKT,READGN,WRTGEN。应当注意,从信号总表上,除了微处理器总线定时信号以外,没有与微处理器接口有关的时钟信号。总线时序信号对所有其它在芯片上的时序信号是异步的。所以,除了那些可被外部控制所强迫的时序以外,微处理器操作与设备的其它部分之间没有定时关系。例如,当在测试系统上访问微处理器接口的同时,停止外部的系统时钟。
UPI内没有时钟的另一含义是某些内部时序是自己安排的。就是说,某些信号对UPI部件的延迟是内部控制的。
UPI的总功能是从外部世界取地址数据、使能和读/写信号,并把这些信号格式化,使它们能正确地驱动内部电路。定义对存储器图访问的内部信号是INT_RNOTW_INT_ADDR[...],INTDBUS[...]和READ_STR和WRITE_STR。对一个读周期和一写周期,这些信号的时序关系在下面表示。应当注意,虽然数据表定义和下面的图通常表示芯片的一个使能周期,电路操作是这样的:使能信号可保持低,地址可以循环去做连续的读操作或写操作。由于有地址转变线路,这个功能是可能的。
此外,INT_RNOTW,READ_STR,WRITE_STR这些信号的存在确实反映出某些冗余。它允许内部电路用下列二者之一:用一个独立的READ_STR和WRITE_STR(忽略INT_RNOTW),或是用INT_RNOTW和一个独立的选通信号(选通信号由READ_STR和WRITE_STR相‘或’得到)。
在一个读周期内,内部数据总线预先充电到高,它也有上拉电阻,所以对于各扩展周期,当内部数据总线不被驱动时,它将缺省为0XFF状态。因为内部数据总线与引脚上的数据是反相的,当它们被使能时这在外部的引脚上转化为0X00。这意味着,如果任何外部周期访问一个寄存器或寄存器的一位(该寄存器是存储器图中无信号区),则输出数据是确定的,而且是低。
线路细节:
UPIN-
这个电路是总的变化检测部件。它包含一个子电路,称为TDET。TDET是单个位变化检测电路。对每个地址位和rnotw信号,以及每个使能信号,UPIN都有一个TDET模块。UPIN也包含某些组合逻辑,把变化检测线路的各个输出用门组合到一起。这个门逻辑产生的信号如下:
TRAN-表明在输入信号上的一次转变(transition)。
UPD-DONE-表明一些转变已完成,一个周期可被执行。
CHIP_EN表明该芯片已被选中。
TDET-
这是单个位的变化检测线路。它包含2个锁存器和2个异或门。第一个锁存器用信号SAMPLE计时,第二个用信号UPDATE定时。这两个非重叠信号是从模块NONOVRLP来的。一般操作是这样的,一个输入转变引起一次CHANGE,依次引起SAMPLE。当SAMPLE为高时,所有输入变化被接受。当输入变化停止时,则CHANGE变低,并且SAMPLE变低,这引起UPDATE变高。于是传送数据到输出锁存器和表明UPD_DONE。
NONOVRP-
这个线路基本上是一个非重叠时钟发生器,它将TRAN输入,并产生SAMPEL及UPDATE。在UPDATE输出上,外部门控制阻止UPDATE变高,直到一个写脉冲已经完成为止。
DINLOGIC-
这个模块包含数据输入电路DINCELL的8种情况和驱动TRISTAT-EPAD信号的某些门。这表明输出数据端口只在以下情况才驱动,Enable1为低,ENable2为低,RnotW为高和内部read_str为高。
DINCELL-
这个线路包括数据输入锁存器和一个驱动内部数据总线的三态驱动器。当信号DATAHOLD为高,以及Enable1和Enable2两者都是低时,从输入焊盘来的数据被锁存。每当内部信号INT-RNOTW为低时,三态驱动器驱动内部数据总线。内部数据总线对晶体管预充电,总线上拉元件(pullup)也包含在这个模块中。
WRTGEN-
这个模块产生WRITE_STR,和锁存信号DATAHOLD,后者是为数据锁存器用的。写选通是一个自定时信号,然而,自定时间的延迟是在VREFCKT中确定的。定时线路RESETWRITE的输出被用来终止WRITE_STR信号。应当注意,写寄存器的实际写脉冲只在一个访问周期结束以后产生。这是因为输入到芯片的数据只在周期的后沿被采样。因此,只在一个正常访问周期已结束后数据才有效。
READGEN-
这个线路,如它的名字暗示的,产生READ_STR信号。它也产生PRECH信号,此信号用来预充电内部数据总线。PRECH信号也是一个自定时信号,它的周期决定于VREFCKT,也取块于内部数据总线上的电压。READ_STR不是自定时的,但从预充电周期结束开始,一直延续到本周期结束为止。预充电线路用倒相器,它们的转换特性被偏置,使得它们在倒相前需要一个差不多是电源的75%的电压。这个电路保证,在READ_STR开始以前,内部总线被正确地预充电。为了防止在内部总线已经预充电的情况下PRECH脉冲趋向零宽度,定时线路通过信号RESETREAD保证一个最小的宽度。
VREFKCT-
VREFCKT是控制接口自定时的唯一线路。两种延迟,1/WRITE_STR的宽度和2/PRECH的宽度,都被通过一只P晶体管的电流控制。用信号VREF控制这个P晶体管,这个电压用一个25kΩ扩散电阻来设定。
C1概述
C.1.1前言
根据本发明的图象格式器的结构示于图155,这里有分别用于写和读的二个地址发生器,管理二个地址发生器并提供帧频转换的缓冲器管理器,一个数据处理流水线,包括垂直和水平二者的过采样器(upsamplers),彩色空间转换器及伽马校正,还有一调整处理流水线输出的最终控制块。
C.1.2缓冲器管理器
输入图象格式器的令牌被缓冲到先进先出(FIFO)存贮器中。然后,传送到缓冲器管理器,此部件检测新图象的到达并判断存贮每个图象元缓冲器的可用性。若有可用的缓冲器,它就被分配给到达图象,而它的指针就传到写地址发生器,若发现无可用的缓冲器,进来的图象将延迟直到有一缓冲器变为可用。所有令牌被送到写地址发生器。
每当读地址发生器从显示系统接收到VSYNC信号,根据新的显示缓冲器指针对缓冲器管理器形成一请求。若有一缓冲器含有完整的图象数据且认为那个图象已为显示作好准备,那么缓冲器的指针将送到显示地址发生器,否则,缓冲器管理器就送出被显示的最后缓冲器的指针。在开始工作时,零作为指针被传送,直到第一缓冲器满。
若图象号码(每个图象输入时计算)大于或等于给定编码帧频显示(呈现号码)时所希望的图象号码,一图象就准备好显示了。所希望的号码可通过图象时钟脉冲的计数值而确定,图象时钟或者通过时钟分频器在本地产生或外部形成,这种技术允许帧频转换(如2~3下拉)。
外部的DRAM被用作缓冲器,这种缓冲器在数量上可以是2个或3个,若要实现帧频转换就需要3个缓冲器。
C.1.3写地址发生器
写地址发生器从缓冲器管理器接收令牌并检测每个新数据令牌的到达。当每个数据令牌到达时,地址发生器为DRAM接口计算一新的地址存贮到达的图块,原始数据然后传到DRAM接口,在接口里数据被写入到交替缓冲器。注意DRAM地址为图块地址,而在DRAM中图象按栅格块组织。然而,输入的图象数据实际上以宏块序列组织,所以地址生成算法对宏块内较低的块的行必须考虑行宽(以块数计)偏移。
通过缓冲器管理器提供的到达缓冲器指针被用作所存贮整个图象的地址偏移,而且,每个分量在所指定缓冲区内单独区域中被存贮,所以在计算中亦使用分量偏移。
C.1.4读地址发生器
读地址发生器(dispaddr)并不接受或生成令牌,它仅生成地址,响应VSYNC,它可以根据field_info,read_start,Sync_mode及lsb_invert从缓冲器管理器请求缓冲器指针,当接收到一个指针,它就形成3个地址集,每个对应一个分量,以便按光栅顺序读出当前图象。允许不同设置为:隔行/逐行显示和/或数据,垂直不采样,及场同步(对隔行显示)。在较低级别上,读地址发生器把基地址转换成顺序块地址,且为三个分量中的每个的字节计数是同DRAM的页结构兼容的,提供给DRAM接口的地址是随块起动和块结束计数的页和行地址。
C.1.5输出流水线
来自DRAM接口的数据馈给输出流水线,三个分量数据流首先垂直插值,然后水平插值,插值后,三个分量具有相同比例(4∶4∶4)而且传送到彩色空间转换器和彩色查找表/伽马校正,输出接口可以在此时保留数据流直到HSYSC到达而显示。然后,输出控制器控制3个分量到一个、二个或三个8位总线,路数随需要而定。
C.1.6定时方式
基本上有二种定时方式与图象格式器相联系,第一种是系统时钟,这时钟为芯片前端(地址发生器及缓冲器管理器,加上DRAM接口的前端)提供定时,第二种是象素时钟,这时钟为后端提供所有定时(DRAM接口输出及全部输出流水线)。
上述两种时钟均驱动一些芯片上的时钟发生器。FIFO、缓冲器管理器及读地址发生器用同一时钟(Dφ)工作,写地址发生器用同上相似的但独立时钟Wφ。数据用内部的DRAM接口时钟(outφ)被同步进入DRAM接口内,Dφ、Wφ和outφ均由SYSCLK生成。
读和写地址通过DRAM接口自己的时钟在DRAM接口内被计时。
数据在bifRφ时从DRAM接口上读出,并被传送到称为“bushy_ne”的输出流水线部分(它的物理位置在东北)。由NE中表示的时钟操作,从伽马RAMS向前的流水线部分用独立的但同样的时钟Rφ计时。bifRφ、NEφ和Rφ均取自象素时钟pixin。
为了测试,各块之间所有主要接口附有窥测器或超级窥测器。这取决于定时方式及所需访问类型。用于彼此分开但又有相同定时方式的块边界有重定时锁存与之相联系。
C.2缓存器管理
按照本发明的缓存器管理块的作用是提供一个地址发生器,该地址发生器用指针标识2个或3个外部缓冲器,它们用于图象数据的读和写。这些指针的分配受3个主要因素影响。每个因素表示在工作中一个定时方式的作用。这些因素指图象数据到达图象格式器输入端的速度(编码数据率),数据显示的速度(显示数据率)以及编码的视频序列的帧频(呈现速率(presentation rate))。
C.2.2功能概述
一个3缓存器系统允许呈现速率和显示速率不同(如2~3下拉),所以在帧频受系统定时限制时,当需要获得可能最好帧序列时,可以采用重复帧或跳帧。在译码中呈现某些困难的图象亦可以按照类似方法解决。所以,当图象解码花费时间比能得到的显示时间更长时,在忙于其它事情的同时,前面的帧将被重复。在双缓冲器系统中,3个定时方式需锁住—正是这第3缓冲器因为占有空隙(takingup slack)从而提供了灵活性。
缓冲器管理器通过保持同每个外部缓冲器相关联的某些状态信息而工作。这些信息包括指示缓冲器是否在使用的各种标记,数据是否满,显示是否准备好,图象序列中的图象号是否在当前存贮的缓冲器中。呈现号亦被记录。每当接收到一个图象时钟脉冲,这号就增加,并表示图象号是根据编码序列的帧频来显示目前所希望的图象号。
在输入端,每次检测到PICTURE_START令牌时,就分配一到达缓冲器(进入的数据将被写入的一个缓冲器)。然后,这缓冲器标记成在使用。在PICTURE_END时,到达缓冲器被解除分配(置为零)并根据图象号和呈现号之间关系,缓冲器被标记为满(FULL)或准备好(READY)。
每次VSYNC,经双线接口显示地址发生器请求一新显示缓冲器。若有缓冲器标记准备好,那么经缓冲器管理器分配此缓冲器被分配去显示。若没有READY(准备好)缓冲器,前面显示的缓冲器将重复去显示。
每当呈现号的变化被检测出,根据READY_ness对包含完整图象的每个缓冲器进行测试。这种测试是通过检查图象号码和呈现号码之间关系进行的。缓冲器被依次考虑。当缓冲器的任何一个被认为准备好(READY),就自动取消前面标记READY的任何缓冲器的READY_ness。前面的缓冲器就标志成空(EMPTY)。这是有作用的,因为根据分配方案,后面的图象号存储在缓冲器内,这在以后考虑。
若在输入流中跳过图象被指示出,在H.261中的TEMPORAL_REFERENCE令牌使缓冲器内的图象号被修改。尽管这个特点如我们所期望,而当前并不包括。同样,在MPEG中的TEMPORAL_REFERENCE令牌亦无作用。
FLUSH令牌使输入停止,直到每个缓冲器空或用做显示的缓冲器已被分配。然后,呈现号码和图象号码复位,并开始一个新的序列。
C.2.3结构
C.2.3.1接口
C.2.3.1.1到bm_front的接口
所有数据从FIFO,bm_front输入到缓冲器管理器。通过双线接口产生传输,数据宽是8位加一个扩展位。到达缓冲器管理器的所有数据保证是完整令牌。如果在数据流上端有明显间隙发生,就需要继续处理呈现号码和显示缓冲区的请求。
C.2.3.1.2到waddrgen(写地址发生器)的接口
令牌(8位数据,1位扩充位)经双线接口被传送到写地址发生器。到达缓冲器的指针亦传到相同接口上,以使在PICTURE_START令牌到达写地址发生器的同时为地址生成可以得到正确的指针。
C.2.3.1.3到dispaddr的接口
到读地址发生器的接口包括2个独立双线接口,它们分别被看作是起“请求”和“回答”信号的作用,单线是不够的,因为在2端都是基于双线的状态机构。
一般,同dispaddr接口有关的事件次序如下。首先,dis_paddr通过认定的drq_valid,响应从显示设备来的VSYNC,发出一请求输入到缓冲器管理器。其次,当缓冲器管理器在它的状态机上得到某一合适点时,接收请求并分配一个用于显示的缓冲器。然后,disp_Valid线被认定,缓冲器指针被传送并典型地立即被dispaddr所接收。而且,有一个同最后双线接口(rst_fld)有关的附加线,它指示同当前指针有关的场号必须复位,而不管前面场号。
C.2.3.1.4微处理器接口
缓冲器管理器块使用微处理器地址空间的4位以及8位数据总线和读写选通。有2个选择信号,一个表示用户可存取单元,另一个表示在正常工作条件下不需要存取的测试单元。
C.2.3.1.5事件
缓冲器管理器能产生两个不同事件:指针找到和延迟到达。第一个事件当图象到达且它的PICTURE_START扩充字节(图象指针)同设置时写到BU_BM_TARGET_IX寄存器的值匹配时被确认。第二个事件发生在当显示缓冲器被分配且它的图象号码小于当前呈现号码时,即在系统流水线中该由缓冲器管理器进行的处理,没有设法跟上显示需求。
C.2.3.1.6图象时钟
在本发明中图象时钟是作为呈现号计数器的时钟信号,它或者从芯片上生成,或者取自外部源(标准显示系统)。缓冲器管理器接收这二个信号并根据Pclk_ext(缓冲器管理器的控制寄存器中一位)的值选择其中之一个。这个信号可作为暂存picutpad的使能信号。所以,如果图象格式器正在生成它自己的图象时钟,这个信号亦可作为芯片的输出信号。
C.2.3.2主要的功能块
下面部分说明组成缓冲器管理器原理图(bmLogic)的各个硬件功能块。
C.2.3.2.1输入/输出块(bm input)
这个模块包括与缓冲器管理器的四个双线接口有关的所有硬件(输入和输出数据,drq_valid/接收和disp_valid/接收)。输入数据寄存器同某些与之相连的解码硬件的令牌被显示。输入到bm_tokdee上的信号vheader,确保令牌解码器的输出仅认为在头标点有效(即不在令牌的中间)。rtinmd块作为输出数据寄存器,与在流水线中下一块的双份(duplicate)输入数据寄存器相邻。这是出于考虑不同时钟发生器引起定时差异。信号“go”和“ngo”是基于数据有效接收和非停止相与(AND),并用于别处的状态机中,以表示是否事情在输入或输出端“堵塞(bunged up)”。
这个模块的显示指针部分包括双线接口以及关于数据的等效“go”信号,rst_fld位亦出现在这里,如果设置,这个信号一直保持高电平直到一周期disp_valid出现高电平。然后,它被复位。此外,在FLUSH令牌已使外部缓冲器的全部,经显示缓冲器标记它为空(EMPTY)或在使用(IN_USE)之后,rst_fld被复位,在此同一时刻图象号码和呈现号码被复位。
有少量附加电路,它们和输入数据寄存器相联系,此寄存器出现在另一个更高的层次上。这电路产生一个信号,它表示输入数据寄存器包括一个等于写到BU_BM_TARGIX的值,并且这电路也用来产生事件。
C.2.3.2.2指针块(bm index)
指针块主要由表示各种关键缓冲器指针的2位寄存器组成。它们是arr_buf,在这个缓冲器中写入达到图象的数据,disp_buf,从这个缓冲器读出图象数据以显示它,还有rdy_buf,它包括最新图象的缓冲器的指针,若缓冲器被dispaddr请求,此图象被显示。还有一个包含buf_ix的寄存器,它用作指向缓冲器的通用指针。这个寄存器得到一增量(“D”输入到多路器),通过缓冲器循环地测试它们的状态,也就是说当状态需要改变时,可以得到arr_buf,disp_buf或者rdy_buf中的一个值。所以这些寄存器(Ph0型式)可以从微处理器作为测试地址空间的一部分被访问。old_ix仅仅是buf_ix的再定时方案,它被用以表示使能缓冲器的状态和在bm_stus块中象号寄存器。buf_ix和old_ix二者都被解码成3个信号(每个持有值1到3)这些信号从这些块输出。其它输出指示是否buf_ix具有同arr_buf或disp_buf的相同值,是否rdy_buf和disp_buf二者均有值零。零对于缓冲器不是基准值。它仅表示当前没有分配达到/显示/准备好的缓冲器。
Arr_buf和disp_buf可以通过各自的双线接口输出接收寄存器被使能。
在bmLogic层的附加电路用来判断是否当前缓冲器指针(buf_ix)等于在使用中所定义的最大指针,其值是在设置时写到控制寄存器的。控制寄存器值为“1”表示三缓冲系统,值为“0”表示二缓冲器系统。
C.2.3.2.3缓冲器状态
缓冲器状态中主要部分是每个缓冲器的状态和图象号寄存器。3组中每一组是主从方式安排,从寄存器是3寄存器组,主寄存器是单寄存器,此寄存器的输出指向从寄存器的一个(通过old_ix使用寄存器使能)。一个到主寄存器的可能的输入是在从寄存器输出之间多路分配得到的(在bmLogic级由buf_ix索引)。缓冲器状态在bmLogic级被译码。为使用状态机逻辑可取显示于表C.2.1的任何值或循环它前面的值。图象号码可取前面值或把前面值增加1(或1加δ,如果是H.261正常和希望时间基准是不同的)。这值由出现在块中8位加法器提供。首先输入到这个加法器的是this_Pnum,当前所写数据的图象号。
表C.2.1 缓冲器状态值
缓冲器状态 |
值 |
空 |
00 |
满 |
01 |
准备好 |
10 |
在使用 |
11 |
这需要单独地存贮(在它的自己主从寄存器中安排)以使3个缓冲器图象号寄存器的任何一个很容易地根据当前(或以前)的图象号而不是根据它们自己以前的图象号(这个号几乎经常过时的)更新。this_Pnum复位为-1以使当第一个图象到达时,它与从加法器的输出相加,因此,输入到第一缓冲器图象号寄存器的是零。
在当前的版本中值得注意的是,因为缺乏提供δ值的时间基准块,δ连结成零。
C.2.3.2.4呈现号码
8位呈现号寄存器同呈现标记相结合,用在状态机中表示呈现号在它上一级被检验后已改变,这是需要的,因为图象时钟实质上是异步且在任何状态期间有效,不限于那些涉及到呈现号状态。在这块中余下的电路是关于检测已经出现的图象时钟脉冲,并“记忆”这些事实。用这种方法呈现号可以在它应当变更时被更新。图156显示事件的表示序列。在re_timed图象时钟上升沿后,信号incr_prn周期成有效,并持续到一状态的到来,在此状态期间呈现号被修改。这可由信号en_Prnum表示。关于只允许呈现号在某些状态期间修改的原因,是因为它被用户驱动大量逻辑,包括标准单元,不非常块的8位加法器,这些加法器提供信号rdyst。因此,它必须在相继的状态不使用此结果的状态期间改变。
C.2.3.2.5时间基准
根据本发明的时间基准块已从目前图象格式器实施例中省略,但为完整起见,对其工作作说明。
这块的作用是计算δ,即在H.261数据流中的令牌中接收的时间基准值同希望的时间基准(1加前面值)之间差。在H.261中允许省略一些帧。时间基准令牌在所有非H.261数据流中被忽略。计算值被用在状态块中为缓冲器计算图象号,从bmLogic中省略这个块其影响是在任何序列中图象号永远是连续的,即使在H.261的流指示某些帧应当跳过。
本块的主要部分(在原理图bm_tref中可见)是用作tr,exptr和delta的寄存器。在本发明中,tr复位为0,并在适当时从输入数据寄存器装载。类似的,exptr复位为-1,并在时间基准状态顺序期间增加1或δ,另外,delta复位为0,并装入另2个寄存器间的差值。这3个寄存器均在FLUSH令牌后复位。这块内加法器是用来计算delta和exptr的,即用信号delta_calc控制分别作减和加操作。
C.2.3.2.6控制寄存器(bm uregs)
作为缓冲器寄存器的控制寄存器驻存在bm_uregs块中。它们是存取位寄存器,设置寄存器(定义外部缓冲器的最大号及内部/外部图象时钟)及目标索引寄存器。存取位根据希望的同步。信号stopd_0,stopl_1和nstopd_1起源于存取位和2个事件停止位的或。对全部bmLogic的UPi地址解码是通过块bm_udec完成,它取UPi的数据总线的低4位,和图象格式器的顶层地址解码的2个选择信号。
C.2.3.2.7控制状态机
状态机逻辑开始用它自己块bm_state。因码的形成原因,它现在整理并归属到bmLogic原理图的第二张。
这逻辑的主要部分是相同的。它包括解码,为控制其它bmLog-ic块的逻辑信号的生成及新状态编码,包括用于通过状态机来选择路径的标记from_ps和from_fl。各独立块为Dm_stns和Dm_index产生mux控制信号。
在状态机硬件中的信号已给出简化字母名以便打字和查阅。它们均列在表C.2.2中。同时还有表示它们的逻辑表达式,它们亦作为注释出现在bmLogic的特性M说明中(bmLogic.M)。
表C.2.2用于状态机的信号名
信号名 |
逻辑表达式 |
A |
ST_PRES1.presflg.(bstate==FULL).rdytst.(rdy==0).(ix==max) |
B |
ST_PRES1.presflg.(bstate==FULL).rdytst.(rdy==0).(ix!=max) |
C |
ST_PRES1.presflg.(bstate==FULL).rdytst.(rdy!=0) |
D |
ST_PRES1.presflg.!((bstate==FULL).rdytst).(ix==max) |
E |
ST_PRES1.presflg.!((bstate==FULL).rdytst).(ix!=max) |
F |
ST_PRES1.presflg |
G |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp!=0) |
PP |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp!=0).fromps |
CQ |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp!=0).fromfl |
RR |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp!=0).!(fromps-fromfl) |
H |
ST_DRQ.drq_valid.disp_acc.(rdy!=0).(disp!=0) |
I |
ST_DRQ.drq_valid.disp_acc.(rdy!=0).(disp==0) |
J |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp==0).fromps |
NN |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp==0).fromfl |
OO |
ST_DRQ.drq_valid.disp_acc.(rdy==0).(disp==0).!(fromps-fromfl) |
K |
ST_DRQ.!(drq_valid.disp_acc).fromps |
LL |
ST_DRQ.!(drq_valid.disp_acc).fromfl |
MM |
ST_DRQ.!(drq_valid.disp_acc).!(fromps+fromfl) |
L |
ST_TOKEN.ivr.oar.(idr==TEMPORAL_REFERENCE) |
SS |
ST_TOKEN.ivr.oar.(idr==TEMPORAL_REFERENCE).H251 |
TT |
ST_TOKEN.ivr.oar.(idr==TEMPORAL_REFERENCE).!H251 |
M |
ST_TOKEN.ivr.oar.(idr==FLUSH) |
N |
ST_TOKEN.ivr.oar.(idr==PICTURE_START) |
O |
ST_TOKEN.ivr.oar.(idr==PICTURE_END) |
P |
ST_TOKEN.ivr.oar.(idr==<OTHER_TOKEN>) |
JJ |
ST_TOKEN.ivr.oar.(idr==<OTHER_TOKEN>).in_extn |
KK |
ST_TOKEN.ivr.oar.(idr==<OTHER_TOKEN>).!in_extn |
Q |
ST_TOKEN.!(ivr.oar) |
表C.2.2 用于状态机的信号名(续)
信号名 |
逻辑表达式 |
S | ST_PICTURE_END.(ix==arr).!rdytstoar |
T |
ST_PICTURE_END.(ix==arr).rdytst.(rdy==0).oar |
U |
ST_PICTURE_END.(ix==arr).rdytst.(rdy!=0).oar |
W |
ST_PICTURE_END.!oar |
RorVV |
ST_PICTURE_END.!((ix==arr).oar) |
V |
ST_TEMP_REFO.ivr.oar |
W |
ST_TEMP_REFO.!(ivr.oar) |
X |
ST_OUTPUT_TAIL.ivr.oar |
FF |
ST_OUTPUT_TAIL.ivr.oar.!in_extn |
Y |
ST_OUTPUT_TAIL.!(ivr.oar) |
GG |
ST_OUTPUT_TAIL!(ivr.oar).in_extn |
DD |
ST_FLUSH.(ix==max).((bstate==VAC)+((bstate==USE).(ix==disp)) |
Z |
ST_FLUSH.(ix!=max).((bstate==VAC)+((bstate==USE).(ix==disp)) |
DDorEE |
!((bstate==VAC)+((bstate==USE).(ix==disp))+(ix==max) |
AA |
ST_ALLOC.(bstate==VAC).oar |
BB |
ST_ALLOC.(bstate!=VAC).(ix==max) |
CC |
ST_ALLOC.(bstate.!=VAC).(ix!=max) |
UU |
ST_ALLOC.!oar |
C.2.3.2.8 δ监控操作(bminfo)
在本发明中包括模块bminfo,以使缓冲器状态信息,指针值及呈现号码在模拟期间能被观察到。它被写到M中,并且每当它的输入之一改变时产生输出。
C.2.3.3寄存器地址变换。
缓冲器管理器的地址空间分成2个区域,用户可存取区和测试区。因此,有2个独立使能线从顶层解码得到。表C.2.3显示用户可存取寄存器,表C.2.4显示测试空间内容。
表C.2.3 用户可访问寄存器
寄存器名 存取 位 复位状态 功 能 |
BU_BM_ACCESS 0x10 [0] 1 缓冲器管理器访问位 |
BU_BM_CTLO 0x11 [0] 1 Max buf lsb:1→3buffers.0→2[1] 1 外部图象时钟选择 |
BU_BM_TARGET_IX 0x12 [3:0] 0x0 图象的到达检测 |
BU_BM_PRES_NUM 0x13 [7:0] 0x00 呈现号 |
BU_BM_THIS_PNUM 0x14 [7:0] 0xFF 当前图象号码 |
BU_BM_PIC_NUM0 0x15 [7:0] none 缓冲器1内图象号 |
BU_BM_PIC_NUM1 0x16 [7:0] none 缓冲器2内图象号 |
BU_BM_PIC_NUM2 0x17 [7:0] none 缓冲器3内图象号 |
BU_BM_TEMP_REF 0x18 [4:0] 0x00 来自流的时间基准 |
表C.2.4 测试寄存器
寄存器名 |
存取 |
位 |
复位状态 |
功 能 |
BU_BM_PRES_FLAG |
0x80 |
[0] |
1 |
显示标记 |
BU_BM_EXP_TR |
0x81 |
[4:0] |
0xFF |
期望的时间基准 |
BU_BM_TR_DELTA |
0x82 |
[4:0] |
0x00 |
增量 |
BU_BM_ARR_IX |
0x83 |
[1:0] |
0x0 |
到达缓冲器变址 |
BU_BM_DSP_IX |
0x84 |
[1:0] |
0x0 |
显示缓冲器变址 |
BU_BM_ROY_IX |
0x85 |
[1:0] |
0x0 |
准备缓冲器变址 |
BU_BM_BSTATE3 |
0x86 |
[1:0] |
0x0 |
缓冲器3状态 |
BU_BM_BSTATE2 |
0x87 |
[1:0] |
0x0 |
缓冲器2状态 |
BU_BM_BSTATE1 |
0x88 |
[1:0] |
0x0 |
缓冲器1状态 |
BU_BM_INDEX |
0x89 |
[1:0] |
0x0 |
当前缓冲器变址 |
BU_BM_STATE |
0x8A |
[4:0] |
0x00 |
缓冲器管理器状态 |
BU_BM_FROMPS |
0x8B |
[0] |
0x0 |
从PICTURE_START来的标志 |
BU_BM_FROMFL |
0x8C |
[0] |
0x0 |
从FLUSH_TOKEN来的标志 |
C.2.4状态机的工作
在缓冲器管理器的状态机中有19个状态,详见表C.2.5。其相互作用示于图157并在特性说明bmLogic.M中描述。
表C.2.5缓冲器状态
状态 |
值 |
PRES0 |
0xC0 |
PRES1 |
0x10 |
ERROR |
0x1F |
TEMP_REF0 |
0x04 |
TEMP_REF1 |
0x05 |
TEMP_REF2 |
0x06 |
TEMP_REF3 |
0x07 |
ALLOC |
0x03 |
NEW_EXP_TR |
0x0D |
SET_ARR_IX |
0x0E |
NEW_PIC_NUM |
0x0F |
FLUSH |
0x01 |
DRQ |
0x0B |
TOKEN |
0x0C |
OUTPUT_TAIL |
0x08 |
VACATE_RDY |
0x17 |
USE_RDY |
0x0A |
VACATE_DISP |
0x09 |
PICTURE_END |
0x02 |
C.2.4.1复位状态
复位状态是PRES0,伴随标记设置为零,这样以使主循环初始化。
C.2.4.2主循环
状态机的循环路包括的状态示于图153(在主图152中加深线),状态PRES0和PRES1是涉及经信号Presflg检测图象时钟。对所涉及的测试允许2个周期,由于它们均取决于rdyst的值及在C.2.3.2.4所说明加法器输出信号。若呈现标记被检测出,所有缓冲器被认为可能“准备好”,否则状态机进到状态DRQ。围绕PRES0~PRES1循环的每个周期测试一个不同的缓冲器,检查满和准备好状态。若这些条件满足,前面准备好的缓冲器(若有一个存在)被清除,分配新准备好的缓冲器并更新其状态。这个过程被重复直到所有缓冲器被检测(指针==Max buf)然后状态继续。当下面的任何一个为真时缓冲器被认为为显示准备好了
(Pic_num>Pres_num)&&((pic_num·Pres_num)>=128)
或(Pic_num<Pres_num)&&((Pres_num·pic_num)<=128)
或(Pic_num==pres_num。
状态DRQ检查显示缓冲器请求(drg_Valid_reg && disp_acc_reg)。若无请求,状态推进通常是到状态令牌—将在下面说明,否则,显示缓冲器指针给出如下,若没有准备好的缓冲器,前面的指针再给出。若无前面显示缓冲器,给出空白指针(零)。若缓冲器作的显示准备,它的指针被给出且它的状态就被更新。若需要的话前面显示缓冲器被清除,状态机像以往一样推进。
状态令牌是为完成主循环的典型选择。若有效输入和输出不出故障,令牌作为关键值而被试验(在后面部分说明),否则控制返回到状态PRES0。
当某些条件满足时,控制仅脱离主循环。这些在下面部分说明。
C.2.4.3分配准备好缓冲器指针
若在PRES0~PRES1循环期间,有一缓冲器被判断为准备好,因为在任何时候只能有一个缓冲器被指明成准备好,任何以前准备好的缓冲器需要退位。状态VACATE=RDY通过设置它的状态为VACANT而清除原来准备好的缓冲器,并复位缓冲器指针为1,以使当控制返回到PRES0状态时,所有缓冲器将作准备好检测。这样做的原因是当前的指针指出的是前面准备好的缓冲器(为清除它的目的)并且没有记录我们想要的新准备缓冲器指针。因此需要重新测试所有缓冲器。
C.2.4.4分配显示缓冲器指针
显示缓冲指针的分配或者直接从状态DRQ(状态USE_RDY)产生或经状态VACATE_DISP产生,此VACATE_DISP清除旧显示缓冲器的状态。选择显示缓冲器是以标记IN_USE,rdy_buf的值设置成零而指针复位为1以返回到状态DRQ。而且,disp_buf给出所需指针而双线接口线(disp_valid,drg_acc)相应地被控制。控制返回到状态DRQ仅因为在状态USE_RDY时不需要,在状态TOKEN,FLUSE和ALLOC之间做出确定。
C.2.4.5当接收到PICTURE_END时的操作
当接收到PICTURE_END令牌时,控制从状态TOKEN传送到状态PICTURE_END。若指针没有指向当前到达缓冲器,则设置指向它以使它的状态能被更新。假定out_acc_reg和en_full二者均为真,状态可按如下说明被更新,否则控制维持在状态PICTURE_END直到它们两者为真。en_full信号由写地址发生器提供,它表示交替缓冲器已交替。即最好一块已成功写入,因此,这是安全更新缓冲器的状态。
刚完成的缓冲器为判断准备好而测试,并根据测试结果给出状态FULL或READY。若它是准备好,rdy_buf给出它的指针值,set_la_ev信号(迟达到事件)设置为高(表示希望的显示在时间上已超过解码)。arr_buf的新值现在变为零,而且,若前面准备好的缓冲器需要状态清除,则指针设置为指向那里,控制移到状态VACAT_RDY。否则,指针复位为1,控制返回到主循环的开始。
C.2.4.6当接收到PICTURE_START时的操作(达到缓冲器的分配)
当PICTURE_START令牌在状态TOKEN期间达到,标记from_ps被设置,使基本状态机改变循环以使访问状态ALLOC代替状态TOKEN。状态ALLOC涉及到分配一到达缓冲器(到达图象数据能对它写入)并经缓冲器循环直到找到一个其状态是VACANT。若out_acc_reg是高电平,仅分配一个缓冲器,从而它在数据双线接口上输出。相应地,周期的循环将继续直到这些情况确定。一旦找到合适的达到缓冲器,指针分配到arr_buf,它的状态被标记为IN_VSE。指针被设置为1,标记from_ps被复位,并且状态被进一步设置到到NEW_EXP_TR。在图象的指针上形成检查(包含在紧跟后面的PICTURE_START后面的字中)以判断是否它是与targ_ix相同(在装配时指定的目标指针),如果相同set_if+_ev(寻找事件指针)设置为高。
3个状态NEW_EXP_TR,SET_ARR_IX和NEW_PIC_NUM设置了新的希望的时间基准和进入数据的图象号。这居中的状态仅设置指针为arr_buf以使正确图象号寄存器被更新(值得注意this_pnum亦被更新)。然后控制进行到状态OUTPUT_TAIL并输出数据(呈现出适宜的双线接口信号)直到遇到一低的扩展。此时主循环重新启动,这意味着全部数据块(64项)输出,其中对呈现标记或显示请求不测试。
C.2.4.7当接收到FLUSH时的操作
在数据流中FLUSH令牌表示序列信息(呈现号,图象号,rst_fld)将被复位。这仅发生在当所有领先于FLUSH的数据已正确地处理,因此,需要接收一FLUSH去监视所有缓冲器的状态直到确认所有帧已转去显示,即所有缓冲器除一个外都具有状态EMPTY,另一个为IN_USE(作显示缓冲器)。此时,一个“新序列”能安全地使用。
当FLUSH令牌在状态TOKEN内检查出。标记from_fl被置位,使基本状态机的循环改变,以使状态FLUSH代替状态TOKEN而被访问。状态FLUSH依次检验每个缓冲器的状态,等待它成为VACANT或IN_USE作为显示。状态机简单地周期循环直到条件为真,然后增值它的索引并重复处理直到全部缓冲器被访问。当最后缓冲器满足这条件时,呈现号、图象号和所有时间基准寄存器呈现出它们的复位值rst_fid被置1。标记form_fl复位,正常主循环操作重新开始。
C.2.4.8当接收到TEMPORAL_REFERENCE时的操作
当遇到TEMPORAL_REFERENCE令牌时,对H.261位形成检查,若已置位,访问4个状态TEMP_REF0到TEMP_REF3。执行如下操作:
TEMP_REF0:temp_ref=in_data_reg;
TEMP_REF1:delta=temp_ref_exp_tr;index=arr_buf;
TEMP_REF2:exp_tr=delta+exp_tr;
TEMP_REF3:pic_num[i]=tnis_pnum+delta;in dex=1。
C.2.4.9其它令牌和结尾
状态TOKEN除了在上面所述外所有情况下传送控制给状态OUTPUT_TALL,在此维持控制,直到遇到令牌的最后一个字(in_extn_reg为低),然后重新进入主循环。
C.2.5应用注意事项
C.2.5.1状态机停止缓冲器管理器输入
这种需要重复地对图象时钟的异步定时事件请求作异步检查,并显示缓冲器。这些检查中停止缓冲器管理器输入的要求意味着当连续提供数据到缓冲器管理器的输入端时,通过缓冲器管理器的数据率将受到限制。一个典型的状态系列可以是PRES0、PRES1、DRQ、TOKEN、OUTPUT_TALL,除了OUTPUT_TALL之外的每一个都持续一个周期。这意味着对每个64数据项的块将有3个周期的开销。其间输入被停止(在状态PRSE0、PRSE1和DRQ期间)。因此,使写速率减慢了3/64,或者说5%。当状态机的辅助分支在最坏条件下执行时,这个数有时可增加到13个周期的开销。应当注意,如此大开销仅适用每帧一次的情况。
C.2.5.2在访问期间中呈现号码的特征
C.2.3.2.4所示的方案所说明的bm_pres的特殊实施例意味着呈现号在VPI访问期间空转(free_runs)。如同得到访问时那样,放弃访问时也需要呈现号相同,那么这可通过在得到访问后读呈现号及在正放弃访问前写回呈现号来实现。应注意,这是异步的,所以它可以根据需要重复存取多次,以进一步确保效率。
C.2.5.3 H.261时间基准号
模块bm_tref(没有显示)应当包括在bmLogic中,H.261时间基准值可通过直接从bmtref到bm_stus模块输入δ而被正确处理。如果帧总是按顺序的,δ的输入能被保持为零。
C.3写地址的产生
C.3.1前言
根据本发明的写地址发生硬件的功能是为数据产生块地址以写回到缓冲器中。这考虑到缓冲器基地址,在流中表示的分量,宏块中的垂直和水平采样,图象尺寸及编码标准。数据以宏块形式达到但必须存贮,所以可容易地检索行以便显示。
C.3.2功能概况
每当一个新块到达数据流时以数据令牌表示,写地址发生器需要产生一个新的块地址,并不需立即产生地址,因为实际需要地址之前DRAM接口可以存贮多达64个数据字(在交替缓冲器中)。这意味着各种地址成分可加到连续周期中的运行总数中,因此,不需要硬件乘法器。宏块计数器功能受存储关键的终端值及在寄存器文件中游程计数值的影响。在每个块地址计算后对这些操作数比较及条件更新。
考虑到显示在图161中图象格式,希望地址序列可取自标准数据流和类似H.261形式的数据流,这如下显示。值得注意,这格式并不真实符合H.261说明书,因为这些片不足够宽(3个宏块而不是11个)而为了方便在此用了同样的“半个图象宽度”,且假设了序列是“H.261类型”。数据到达整个宏块如例子所示的4∶2∶0,每个成份被存储到指定缓冲器中它自己的区域内。
标准地址系列:000,001,00C,00D,100,200;
002,003,00E,00F,101,201;
004,005,010,011,102,202;
006,007,012,013,103,203;
008,00g,014,015,104,105;
00A,00B,016,017,105,205;
018,019,024,025,106,107;
01A,01B,026........
........
080,081,08C,08D,122,222;
082,083,08E,08F,123,223;
H261型序列
000,001,00C,00D,100,200;
002,003,00E,00F,101,201;
004,005,010,011,102,202;
018,019,024,025,106,107;
01A,01B,026,027,107,207;
01C,01D,028,029,108,208;
030,031,03C,03D,10C,20C,
032,033,03E,03F,10D,20D;
034,035,040,041,10E,20E;
006,007,012,013,103,203;
008,009,014,015,104,105;
00A,00B,018,017,105,205;
01E,01F,02A,02B,109,209;
020,021,02C,02D,10A,20A;
022,023,02E,02F,10B,20B;
036,037,042,043,10F,20F;
038,039,044,045,110,210;
03A,03B,046,047,111,211;
048,049,054,055,112,212;
04A,048,056..........
........
06A,06B,076,077,11D,21D;
07E,07F,08A,088,121,221;
080,081,08C,08D,122,222;
082,083,08E,08F,123;223;
C.3.3结构
C.3.3.1接口
C.3.3.1.1到缓冲器管理器的接口
缓冲器管理器将数据和缓冲器索引直接输出到写地址发生器,这是在双线接口的控制下实现的。在某些方法中,考虑把写地址发生器块作为缓冲器管理器的扩充,因为两者非常紧密相连,而它们由两个独立(但相似的)时钟发生器工作。
C.3.3.1.2到dramif的接口
写地址发生器为DRAM接口提供数据和地址。两者均有自己双线接口,且dramif以不同的时钟规范中使用它们中的每种。特别地,地址在Dramit中用时钟计时同写地址发发生器时钟无关,因此在输出同步。
C.3.3.1.3微处理器接口
写地址发生器使用3位微处理器地址空间加上8位数据总线和读写选通。有一单个选择位用于寄存器存取。
C.3.3.1.4事件
写地址发生器可形成5个不同事件。二个对应于出现在数据流(hmbs和Vmbs)中的图象尺寸信息,3个对应于DEFINE_SAMPLING令牌(每个分量一个事件)。
C.3.3.2基本结构
写地址发生器的结构示于waddrgen.sch中,它包括一数据通道,某些控制逻辑和窥测器及其同步化。
C.3.3.2.1数据通道(bwadpath)
在本文件的C.5节中说明了数据通路类型,包括18位加法器/减法器及寄存器文件(见C.3.3.4)并为在控制逻辑使用产生零标记(根据加法器输出)。
C.3.3.2.2控制逻辑
本发明的控制逻辑用于产生所有寄存器文件装载的硬件驱动信号。加法器控制信号,双线接口信号组成亦包括可写控制寄存器。
C.3.3.2.3探测器及其同步化
在数据和地址端口均有高级探测器。探测器在数据通道内被来自Zcells的高级探测器控制。地址在写地址发生器时钟和dramif的“clk”方式之间同步。Syncifs用在Zcell中,作为双线接口信号,简化同步器为地址用于数据道路中。
C.3.3.3控制逻辑和状态机
C.3.3.3.1输入/输出块(wa inout)
这部分包括输入和2个输出双线接口,还有输入数据用(对令牌解码)锁存器及到达缓冲器索引(为4种方法解码)。
C.3.3.3.2二周期的控制块(wa fc)
标记fc(第一周期)保持在此并指示状态机是否在一个二周期运行的中间(即包括加的操作)。
C.3.3.3.3分量计数(wa comp)
对每个分量中数据块需要独立地址,这块根据输入流中接收到的数据头类型考虑保持当前分量。
C.3.3.3.4模块0~3的控制(wa_nod 3)
当为H.261数据流产生地址序列时,需要沿屏幕(见C.3.2)用对半法数出宏块的3行。这受到保持模块0~3计数器的影响,且每次访问一新宏块行时它就增加。
C.3.3.3.5控制寄存器(wa uregs)
模块wa_uregs包括设定寄存器和编码标准寄存器,后者从数据流装载,设定寄存器用3位:QCIF(lsb)及在数据流中希望的最大分量(位1和位2)。存取位亦驻留在这块中(象通常那样被同步),已停止位取自上层的下一级(waLogic),它是存取位和事件停止位的‘或’。微处理器地址解码由块wa_uded完成,这个块取读和写选通,选择线以及地址总线的校低两位。
C.3.3.3.6控制状态机(wa state)
在这一块中的逻辑被分成几个明显区域。状态解码,新状态编码,中间逻辑信号的求解,数据通路控制信号(驱动a,驱动b,装载,加法器控制和选择信号),多路开关控制,双线接口控制和5个事件信号。
C.3.3.3.7事件产生
由于在输入端得到某些令牌结果产生5个事件位。重要的是,在每种情况下,全部令牌在产生任何事件以前被接收,因为事件服务子程序根据接收的新值执行计算。由于这个原因,每一位在输入到事件硬件之前对整个周期延迟。
C.3.3.4寄存器地址变换
在写地址发生器部件中有两个寄存器集,它们是位于标准单元部分的顶层设置类型寄存器及键孔数据通路寄存器。这些寄存器分别列在表C.3.1和C.3.2。
表C.3.1顶层寄存器
寄存器名 | 地址 位 | 复位状态 | 功 能 |
BU_WADDR_COD_STD |
0x4 2 |
0 |
来自数据流中编码标准 |
BU_WADDR_ACCESS |
0x5 1 |
0 |
访问位 |
BU_WADDR_CTL1 |
0x6 3 |
0 |
最大分量[2:1]及QCIF[0] |
BU_WA_ADDR_SNP2 |
0xB0 8 | |
写地址发生器上的窥测器地址C/p |
BU_WA_ADDR_SNP1 |
0xB1 8 |
BU_WA_ADDR_SNP0 |
0xB2 8 |
BU_WA_DATA_SNP1 |
0xB4 8 | |
写地址数据输出上的窥测器WA |
BU_WA_DATA_SNP0 |
0xB5 8 |
表C.3.2 图象格式化器地址发生器键孔
键孔寄存器名 |
键孔地址 |
位 |
注释 |
BU_WADDR_BUFFER0_BASE_MSB |
0x85 |
2 | 必须装载 |
BU_WADDR_BUFFER0_BASE_MID |
0x86 |
8 |
BU_WADDR_BUFFER0_BASE_LSB |
0x87 |
8 |
BU_WADDR_BUFFER1_BASE_MSB |
0x89 |
2 | 必须装载 |
BU_WADDR_BUFFER1_BASE_MID |
0x8a |
8 |
BU_WADDR_BUFFER1_BASE_LSB |
Dx8b |
8 |
BU_WADDR_BUFFER2_BASE_MSB |
0x8d |
2 | 必须装载 |
BU_WADDR_BUFFER2_BASE_MID |
0x8e |
8 |
BU_WADDR_BUFFER2_BASE_LSB |
0x8f |
8 |
BU_WADDR_COMP0_HMBADDR_MSB |
0x91 |
2 |
仅测试 |
BU_WADDR_COMP0_HMBADDR_MID |
0x92 |
8 |
BU_WADDR_COMP0_HMBADDR_LSB |
0x93 |
8 |
BU_WADDR_COMP1_HMBADDR_MSB |
0x95 |
2 |
仅测试 |
BU_WADDR_COMP1_HMBADDR_MID |
0x96 |
8 |
BU_WADDR_COMP1_HMBADDR_LSB |
0x97 |
8 |
BU_WADDR_COMP2_HMBADDR_MSB |
0x99 |
2 |
仅测试 |
BU_WADDR_COMP2_HMBADDR_MID |
0x9a |
8 |
BU_WADDR_COMP2_HMBADDR_LSB |
0x9b |
8 |
BU_WADDR_COMP0_VMBADDR_MSB |
0x9d |
2 |
仅测试 |
BU_WADDR_COMP0_VMBADDR_MID |
0x9e |
8 |
BU_WADDR_COMP0_VMBADDR_LSB |
0x9f |
3 |
BU_WADDR_COMP1_VMBADDR_MSB |
0xa1 |
2 |
仅测试 |
BU_WADDR_COMP1_VMBADDR_MID |
0xa2 |
8 |
BU_WADDR_COMP1_VMBADDR_LSB |
0xa3 |
8 |
BU_WADDR_COMP2_VMBADDR_MSB |
0xa5 |
2 |
仅测试 |
BU_WADDR_COMP2_VMBADDR_MID |
0xa6 |
8 |
BU_WADDR_COMP2_VMBADDR_LSB |
0xa7 |
8 |
BU_WADDR_VBADDR_MSB |
0xa9 |
2 |
仅测试 |
BU_WADDR_VBADDR_MID |
0xaa |
8 |
BU_WADDR_VBADDR_LSB |
0xab |
8 |
表C.3.2 图象格式化器地址发生器键孔(续)
键孔寄存器名 |
键孔地址 |
位 |
注释 |
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_MSB |
0xad |
2 | 必须装载 |
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_MID |
0xae |
8 |
BU WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_LSB |
0xaf |
8 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_MSB |
0xb1 |
2 | 必须装载 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_MID |
0xb2 |
8 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_LSB |
0xb3 |
8 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_MSB |
0xb5 |
2 | 必须装载 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_MID |
0xb6 |
8 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_LSB |
0xb7 |
8 |
BU_WADDR_HB_MSB |
0xb9 |
2 |
仅测试 |
BU_WADDR_HB_MID |
0xba |
8 |
BU_WADDR_HB_LSB |
0xbb |
8 |
BU_WADDR_COMP0_OFFSET_MSB |
0xbd |
2 | 必须装载 |
BU_WADDR_COMP0_OFFSET_MID |
0xbe |
8 |
BU_WADDR_COMP0_OFFSET_LSB |
0xbf |
8 |
BU_WADDR_COMP1_OFFSET_MSB |
0xc1 |
2 | 必须装载 |
BU_WADDR_COMP1_OFFSET_MID |
0xc2 |
3 |
BU_WADDR_COMP1_OFFSET_LSB |
0xc3 |
8 |
BU_WADDR_COMP2_OFFSET_MSB |
0xc5 |
2 |
必须装载 |
BU_WADDR_COMP2_OFFSET_MID |
0xc6 |
8 |
BU_WADDR_COMP2_OFFSET_LSB |
0xc7 |
8 |
BU_WADDR_SCRATCH_MSB |
0xc9 |
2 |
仅测试 |
BU_WADDR_SCRATCH_MID |
0xca |
8 |
BU_WADDR_SCRATCH_LSB |
0xcb |
8 |
BU_WADDR_MBS_WIDE_MSB |
0xcd |
2 | 必须装载 |
BU_WADDR_MBS_WIDE_MID |
0xce |
8 |
BU_WADDR_MBS_WIDE_LSB |
0xcf |
8 |
BU_WADDR_MBS_HIGH_MSB |
0xd1 |
2 | 必须装载 |
BU_WADDR_MBS_HIGH_MID |
0xd2 |
8 |
BU_WADDR_MBS_HIGH_LSB |
0xd3 |
3 |
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_WADDR_COMP0_LAST_MB_ROW_MSB |
0x105 |
2 | 必须装载 |
BU_WADDR_COMP0_LAST_MB_ROW_MID |
0x106 |
8 |
BU_WADDR_COMP0_LAST_MB_ROW_LSB |
0x107 |
8 |
BU_WADDR_COMP1_LAST_MB_ROW_MSB |
0x109 |
2 |
必须装载 |
BU_WADDR_COMP1_LAST_MB_ROW_MID |
0x10a |
8 |
BU_WADDR_COMP1_LAST_MB_ROW_LSB |
0x10b |
8 |
BU_WADDR_COMP2_LAST_MB_ROW_MSB |
0x10d |
2 | 必须装载 |
BU WADDR_COMP2_LAST_MB_ROW_MID |
0x10e |
8 |
BU_WADDR_COMP2_LAST_MB_ROW_LSB |
0x10f |
8 |
BU_WADDR_COMP0_HBS_MSB |
0x111 |
2 | 必须装载 |
BU_WADDR_COMP0_HBS_MID |
0x112 |
8 |
BU_WADDR_COMP0_HBS_LSB |
0x113 |
8 |
BU_WADDR_COMP1_HBS_MSB |
0x115 |
2 | 必须装载 |
BU_WADDR_COMP1_HBS_MID |
0x116 |
8 |
BU_WADDR_COMP1_HBS_LSB |
0x117 |
8 |
BU_WADDR_COMP2_HBS_MSB |
0x119 |
2 | 必须装载 |
BU_WADDR_COMP2_HBS_MID |
0x11a |
8 |
BU_WADDR_COMP2_HBS_LSB |
0x11b |
8 |
BU_WADDR_COMP0_MAXHB |
0x11f |
2 | 必须装载 |
BU_WADDR_COMP1_MAXHB |
0x123 |
2 |
BU_WADDR_COMP2_MAXHB |
0x127 |
2 |
BU_WADDR_COMP0_MAXVB |
0x12b |
2 | 必须装载 |
BU_WADDR_COMP1_MAXVB |
0x12f |
2 |
BU_WADDR_COMP2_MAXVB |
0x133 |
2 |
表C.3.2 图象格式化器地址发生器键孔(续)
这键孔孔寄存器主要分成二类,一类必须随同图象尺寸参数在任何地址计算之前装载,另一类包括对全部各式各样(水平和垂直)块和宏块计数的运行。图象尺寸参数可响应于写地址发生器形成的任何中断装入,也就是当任何图象尺寸或采样令牌出现在数据流时装入,或,若图象尺寸在接收数据流之前已知道,它们正好在复位之后写入。例如在C.13节中给予了范例设置,图象尺寸参数寄存器在下节定义。
C.3.4对写地址发生器编程
下面的数据通路寄存器在进行地址计算之前须包含正确的图象尺寸信息,它们在图162中说明。
1、WADDR_HALF_WIDTH_IN_BLOCKS:它以块定义了进入图象的半宽。
2、WADDR_MBS_WIDE:它以宏块定义了进入图象的宽度。
3、WADDR_MBS_HIGH:它以宏块定义了进入图象的高度。
4、WADDR_LAST_MB_IN_ROW:它定义了在一单一满宽度的宏块行中,最后一个宏块的左上角的块号。从最左宏块的左上角从零开始块编号,沿着帧随每块而增加,随后也随着宏块行中下一行的块而增加。
5、WADDR_LAST_MB_IN_HALF_ROW:这类似于前面的条目,它定义了在一半宽宏块行中最后一个宏块内的左上角块的块号。
6、WADDR_LAST_ROW_INMB:它定义了在宏块行中最后一行块中的最左边块的块号。
7、WADDR_BLOCKS_PER_MB_ROW:它定义了包括在一单一,全宽度宏块行中的总块数。
8、WADDR_LAST_MB_ROW:它定义了在图象中最后宏块中最左的宏块左上块的地址。
9、WADDR_HBS:它以块定义了进入图象的宽度。
10、WADDR_MAXHB:它定义了在单个宏块中一个块行中最右边块的块号。
11、WADDR_MAXVB:它以块定义了单一宏块的高度-1。
另外,定义DRAM组织的寄存器必须被编程,它们是3个缓冲器基寄存器的n分量偏移寄存器。这里的n是数据流中所希望分量数(它可以在数据流中定义,最小为1,最大为3)。
注意许多参数规定块号或块地址。这是因为希望最终地址为一个块地址,且计算是基于累积的算法。
图162说明布局结构,产生下面寄存器值:
1)WADDR_HALF_WIDTH_IN_BLOCKS=0x16
2)WADDR_MBS_WIDE=0x16
3)WADDR_MBS_HIGH=0x12
4)WADDR_LAST_MB_IN_ROW=0x2A
5)WADDR_LAST_MB_IN_HALF_ROW=0x14
6)WADDR_LAST_ROW_IN_MB=0x2C
7)WADDR_BLOCKS_PER_MB_ROW=0x58
8)WADDR_LAST_MB_ROW=0x5D8
9)WADDR_HBS=0x2C
10)WADDR_MAXVB=1
11)WADDR_MAXHB=1
C.3.5状态机的操作
在缓冲器管理器的状态机中有19种状态,详述于表C.3.3。其相互联系示于图164并亦在特性说明bmlogic.M中作说明。
表C.3.3写地址发生器状态
状态 |
值 |
IDLE |
0x00 |
DATA |
0x10 |
CODING_STANDARD |
0x0C |
HORZ_MBS0 |
0x07 |
HORZ_MBS1 |
0x06 |
VERT_MBS0 |
0x0B |
VERT_MBS1 |
0x0A |
OUTPUT_TAIL |
0xC8 |
HB |
0x11 |
MB0 |
0x10 |
MB1 |
0x12 |
MB2 |
0x1E |
MB3 |
0x13 |
MB4 |
0x0E |
MB5 |
0x14 |
MB6 |
0x15 |
MB4A |
0x18 |
MB4B |
0x09 |
MB4C |
0x17 |
MB4D |
0x15 |
ADDR1 |
0x19 |
ADDR2 |
0x1A |
ADDR3 |
0x1B |
ADDR4 |
0x1C |
ADDR5 |
0x03 |
HSAMP |
0x05 |
VSAMP |
0x04 |
PIC_ST1 |
0x01 |
PIC_ST2 |
0x01 |
PIC_ST3 |
0x02 |
C.3.5.1地址的计算
写地址发生器状态机的主要部分沿图164的左下边说明。当接收到数据令牌时,状态机从状态IDLE移到状态ADDR1。然后到状态ADDR5,18位块地址与双线接口控制从状态ADDR5被输出。由状态ADDR1直到ADDR5执行的计算是:
BU_WADDR_SCRATCH=BU_BUFFERn_BASE
+BU_COMPm_OFFSET;
BU_WADDR_SCRATCH=BU_WADDR_SCRATCH
+BU_WADDR_VMBADDR;
BU_WADDR_SCRATCH=BU_WADDR-SCRATCH
+BU_WADDR_HMBADDR;
BU_WADDR_SCRATCH=BU+WADDR_SCRATCH
+BU_WADDR_VBADDR;
out_addr=BU_WADDR_SCRATCH+BU_WADDR_HB;
所用寄存器如下定义:
1、BU_WADDR_VMBADDR:宏块行的最左宏块的块地址(左顶部块),在宏块中包括地址正在被计算的块。
2、BU_WADDR_HMBADDR:宏块列的顶部宏块的块地址(左顶部块),在宏块中包括地址正在被计算的块。
3、BU_WADDR_VBADDR:在宏块行内,块行中最左边块的块地址,在这些块中包括它的地址正在被计算的块。
4、BU_WADDR_HB:在宏块中的地址正在被计算的块的水平块号。
5、BU_WADDR_SCRATCH:用来暂时存储中间结果的暂时寄存器。
考虑图163,例如采取地址0x62的块的计算,下面的计算次序将发生:
SCRATCH=BUFFERn_BASE+COMPm_OFFSET;(assume 0)
SCRATCH=0+0x5D8;
SCRATCH=0x5D8+0x28;
SCRATCH=0x600+0x2C;
块地址=0x62C+1=0x62D;
各种寄存器的内容在图中被说明。
C.3.5.2新屏幕位置参数的计算
当地址已输出,状态机为了更新如上所述各种屏幕位置参数连续执行计算。状态HB及MBO直到MB6进行计算,在某些点传送控制给状态DATA,数据令牌的提示从此状态被输出。
这些状态成对进行,第一对计算当前计数和它的最终值之间的差,然后产生零标记。第二对复位寄存器或加固定(根据由屏幕尺寸而得来的设置寄存器中的值)偏置。在每种情况中,若计算已达到它最终值(即置位零标记),控制继续往下到状态“MB”序列,否则,认为所有顺序计算正确(准备为下一地址计算)且控制转到状态DATA。
注意所有涉及加法与减法的状态化费二个周期完成(允许用标准的脉动进位加法器),这受标记fc(第一周期)的使用的影响,此标记使加法器状态在1和0之间改变。
所有地址计算和屏幕位置计算状态假定适合双线接口情况时允许数据输出。
C.3.5.2.1对标准(MPEG型)序列的计算
工作顺序如下(其中零标记根据加法器输出):
状态HB和MBO:
scratch=hb-maxhb;
if(z)
hb=0;
else
(
hb=hb+1
new_state=DATA;
)
states MB1 and MB2:
scratch=vb_addr-last_row_in_mb;
if(z)
vb_addr=0;
else
(
vb_addr=vb_addr+width_in_blocks;
new_state=DATA;
)
states MB3 and MB4:
scratch=hmb_addr-last_mb_in_row;
if(z)
hmb_addr=0;
else
(
hmb_addr=hmb_addr+maxhb;
new_state=DATA;
)
states MB5 and MB6:
scratch=vmb_addr-last_mb_row;
if(!z)
vmb_addr=vmb_addr+blocks_per_mb_row;
(在PICTURE_START令牌被检测之后复位Vmb_addr,而不是当图象的结束从计算推出时)
C.3.5.2.2对H.261序列的计算
对H.261计算的序列同状态MB4标准序列不同:
状态HB和MBO:-如上
状态MB1和MB2:-如上
状态MB3和MB4:
scratch=hmb_addr-last_mb_in_row;
if(z&(mod3==2))/*end of slice on right of screen*/
(
hmb_addr-0;
new_state-MB5;
)
else if (z)/*end of row on right of screen*/
(
hmb_addr=half_width_in_blocks;
new_state=MB4A;
)
else
(
scratch=hmb_addr-last_mb_in_half_row;
new-state=MB4B;
}
<dp n="d577"/>
state MB4A:
vmb_addr=vmb_addr+blocks_per_mb_row;
new_state=DATA;
state(MB4)and MB4B:
(scratch=hmb_addr-last_mb_in_half_row;)
if(z&(mod3==2))/*end of slice on left of screen*/
(
hmb_addr=hmb_addr+maxhb;
new_state=MB4C;
)
else if(z)/*end of row on left of screen*/
(
hmb_addr=0;
new_state=MB4A;
)
else
(
hmb_addr=hmb_addr+maxhb;
new_state=DATA;
)
states MB4C and MB4D:
vmb_addr=vmb_addr-blocks_per_mb_row;
vmb_addr=vmb_addr-blocks_per_mb_row;
new_state=DATA:
states MB5 and MB6:-as above
C.3.5.3根据PICTURE_START令牌的操作
当接收到令牌PICTURE_START时,控制传到状态PIC_ST1,在那里Vb_addr寄存器(BU_WADDR_VBADDR)复位成零。状态PIC_ST2及PIC_ST3的每个被访问,每个分量一次,分别复位hmb_addr和Vmb_addr。然后控制经状态OUTPUT_TAIL返回到IDLE。
C.3.5.4根据DEFINE_SAMPLING令牌操作
当接收到令牌DEFINE_SAMPLING时,分量寄存器用输入数据的有效性最差的2位装载。此外经状态HSAMP和VSAMP,maxhb和maxvb寄存器对分量装载。而且,适当的定义采样事件位被触发(经一个周期延迟以允许写入全部令牌)。
C.3.5.5 HORIZONTAL_MBS和VERTICAL_MBS的操作
当每个HORIZONTAL_MBS和VERTICAL_MBS到达时,包含在令牌中的14位值,在两个周期中写入到相应的寄存器中。相关事件位被触发,延迟了一个周期。
C.3.5.6其它令牌
CODING_STANDARD令牌被检测并把输入数据写到顶层BU_WADDR_COD_STD寄存器,这数据被解码,nh261标记(不是H.261)被硬件化到缓冲器管理块。所有其它令牌使控制移到状态OUTPUT_TAIL,在那里接收数据直到令牌结束。应注意,它实际上不输出任何数据。
C.4读地址发生器
C.4.1概述
本发明的读地址发生器由4个状态机/数据通路块组成,第一个“dline”产生行地址并把这些地址分配给其它3个(每个分量一个)相同的页/块地址发生器,“dramctls”。所有块通过双线接口连结,操作方式包括所有隔行/逐行相结合,第一场上面/下面结合及在上面/下面/上下面帧起动相结合。表C.3.4显示了dispaddr控制寄存器的名字,地址和复位状态,而C.13节给出了两种地址发生器编程例子。
C.4.2行地址发生器(dline)
这块计算每个分量的行启动地址。表C.3.4显示了在dline中18位的数据通路寄存器。
注意,DISP_register_name同ADDR_register_name,DISD_name寄存器之间差别仅在于dispaddr中,意味着寄存器针对于将被读出DRAM的显示区域。ADDR_name意味着寄存器描述某些有关外部缓冲器结构的事情。
操作
dline的基本操作是:(忽略了所有方式重复等)
if(vsync_start)/*first active cycle of vsync*/
(
comp=0
DISP_VB_CNT_COMP[comp]=0;
LINE[comp]=BUFFER_BASE[comp]+0 ;
LINE[comp]=LINE[comp]+DISP_COMP_OFFSET[comp];
while(VB_CNT_COMP[comp]<DISP_VBS_COMP[comp]
(
while(line_count[comp]<8)
(
(
while(comp<3)
(
-OUTPUT LINE[comp]to dramctl[comp]
line[comp]=LINE[comp]+ADDR_HBS_COMP[comp];
comp=comp+1;
)
line_count[comp]=line_count[comp]+1;
)
VB_CNT_COMP[comp]=VB_CNT_COMP[comp]+1;
line_count[comp]==0;
)
)
表C.3.4 Dispaddr数据通路寄存器
寄存器名 |
总线 |
键孔地址 |
说明 |
注释 |
BUFFER_BASE0 | A | 0x00,01,02,03 | 每个缓冲器的起始块地址 | 这些寄存器在操作开始之前由UPI装载 |
BUFFER_BASE1 |
A |
0x04,05,06,07 |
BUFFER_BASE2 |
A |
0x08,09,0a,0b |
DISP_COMP_OFFSET0 |
B |
0x24,25,26,27, |
从缓冲器基地址到读开始的地址偏移量 |
DISP_COMP_OFFSET1 |
B |
0x28,29,2a,2b |
DISP_COMP_OFFSET2 |
B |
0x2c,2d,2e,2f |
DISP_VBS_COMP0 |
B |
0x30,31,32,33 |
所读垂直块号 |
DISP_VBS_COMP1 |
B |
0x34,35,36,37 |
DISP_VBS_COMP2 |
B |
0x38,39,3a,3b |
ADDR_HBS_COMP0 |
B |
0x3C,3d,3e,3f |
在数据中水平块号 |
表C.3.4 Dispaddr数据通路寄存器(续)
寄存器名 |
总线 |
Keyholeaddress |
说明 |
注释 |
ADDR_HBS_COMP1 |
B |
0x40,41,42,43 | | |
ADDR_HBS_COMP2 |
B |
0x44,45,46,47 |
LINE0 |
A |
0x0C,0d,0e,0f |
当前行地址 |
这寄存器是是通过dispddr作时间定位注意:所有寄存器来自微处理器接口R/W |
LINE1 |
A |
0x10,11,12,13 |
LINE2 |
A |
0x14,15,16,17 |
DISP_VB_CNT_COMP0 |
A |
0x18,19,1a,1b |
待读的垂直块的数 |
DISP_VB_CNT_COMP1 |
A |
0x1c,1d,1e,1f |
DISP_VB_CNT_COMP2 |
A |
0x20,21,22,23 |
C.4.3 Dline控制寄存器
上面操作由dispaddr控制寄存器修改。这些寄存器如下显示在表C.4.3中。
表C.4.3控制寄存器
寄存器名 |
地址 |
位 |
复位状态 |
功 能 |
LINES_IN_LAST_ROW0 |
0x08 |
[2:0] |
0x07 |
这3个寄存器确定读出块的最后行的行数(8以外) |
LINES_IN_LAST_ROW1 |
0x09 |
[2:0] |
0x07 |
LINES_IN_LAST_ROW2 |
0x0a |
[2:0] |
0x07 |
DISPADDR_ACCESS |
0x0b |
[0] |
0x00 |
对dispaddr存取位 |
DISPADDR_CTLO见下面这些控制位的详细说明 |
0x0c |
[1:0] |
0x0 |
SYNC_MDDE |
[2] | 0x0 | READ_START |
[3] |
0x1 |
INTERLACED/PROG |
[4] |
0x0 |
LSB_INVERT |
[7:5] |
0x0 |
LINE_RPT |
DISPADDR_CTL1 |
0x0d |
[0] |
0x1 |
COMPOHOLD |
Dispaddr控制寄存器
C.4.3.1 LINES_IN_LAST_ROW[分量]
这3个寄存器为每个分量确定所读最后块行的行数,因此,读窗口的高度可以是任意行数。这是一后备特征,因为窗口的顶、左和右边沿在块边界上,且输出控制器能剪裁(丢弃)超过的行。
C.4.3.2 DISPADDR_ACCESS
这是为整个dispaddr的访问位,在这个位置上写“1”时,dispaddr与时钟同步停止。从访问位读回值将保持为“0”直到dispaddr已安全停止。达到这个状态后,对所有dispaddr寄存器执行异步upi访问是安全的。需注意upi实际上被数据通路寄存器锁定,直到访问位为“1”。为了在不中断当前显示或数据通路操作的情况下完成对dispaddr的访问,仅在下面情况下访问释放访问。
停止:仅在数据通路已完成它当前二个同期操作(如果它做过一个),来自输出控制器的“安全信号”是高电平时允许访问。这信号代表在屏幕上位于显示窗口的区域,在输出控制器内被编程(非dispaddr)。注意:因此在试图对dispaddr获得访问之前,需要对输出控制器编程。
启动存取仅在“safe”为高或在vsync期间被释数。这确保显示不会在太接近有效窗口处起动。
这方案使控制软件能够请求访问,询问直到显示,结束修改dispaddr及释放访问。若软件太慢,直到vsync后才释放存取位,dispaddr将直到下个安全周期才启动。边界颜色将在这“lost(被丢弃)”图象期间显示(不是垃圾)。
C.4.3.3 DISPADDR_CTL0[7:0]
当读下面说明时,了解隔行数据和隔行显示之间差别是重要的。
隔行数据有二种形式。顶层寄存器支持场-图象(每个缓冲器包括一个场)和帧图象(每个缓冲器包括一完全帧-隔行或不隔行)。
DISPADDR_CTL0[7:0]包括如下控制位:
SYNC_MODE[1:0]
用隔行显示,涉及顶部和底部场的VSYNCS被field_info管脚区分。关于这点,field_info=HIGH意味顶场。这二个控制位确定哪个Vsyncs dispaddr将从缓冲器管理器请求一新的显示缓冲器。因此,使缓冲器中场(若数据是隔行的)与显示器中的场同步。
0:在顶场的新显示缓冲器
1:底场
2:两场
3:两场
在启动时,dispaddr在每一vsync向缓冲器管理器请求一缓冲器。dispaddr将接收一个零(无显示)缓冲器直到缓冲器准备好。当它最后得到一有效缓冲器指针时,dispaddr并不知道它在显示器的什么地方。因此,需要使显示启动与正确的vsync同步。
READ_START
在隔行显示启动时,这位确定显示将实际从哪个vsync开始。而在接收到显示缓冲器指针后,dispaddr可“sitout”当前vsync,为了对齐显示器场同缓冲器中场。
INTERLACED/PROGRESSIVE
0:逐行
1:隔行
在逐行方式中,读出缓冲器显示区域的所有行。而在隔行方式中,仅读间隔行,读起始第一行还是第二行由field_info确定,注意对于(隔行)场图象,系统希望从每个缓冲器读所有行,所以这位的设定将是逐行的。field_info和第一/第二行起始间的映象可以通过lsb_invert反相(这个命名是因历史原因)。
LSB_INVERT
当被设置时,这位反相由行计数器看到field_info信号。因此,读可以在一帧的正确行上启动并对显示器调整。不管编码器采用的惯例,显示器或顶层寄存器。
LINE_RPT[2:0]
当设置时,每位使相应分量的行读二次(位0影响分量0等),这形成垂直过采样(upsampling)的第一部分。它用于把QFIF转换成601所需的8次色度过采样(upsampling)。
COMP0HOLD
这位用来对分量0所读的行数与分量1和2所读行数的比例编程(同显示相反)。
0:行数相同,即在缓冲器中的4∶4∶4数据
1:2倍于分量0行数,即4∶2∶0
页块地址发生器(dramctls)
当传递一行地址时,这些块产生一系列页/行地址和块,以被按行读。通常,假设8块为最小页宽度,而输出包括一个页地址,一个3位的行数,一个3位块启动及一个3位块停止地址(行号由dline计算并不加修改地通过dramctls)。因此,为了从左边第3块开始在读出来自页0xaa的5行的48个象素(沿任意行的任意点),传到DRAM接口的地址将是:
Page=0xaa
Line=5
Block start=2
Block stop=7
这3个装置的每个具有5个数据通路寄存器。这些示于表C.3.4中。每个dramctl基本特性是:
Block start=2
Block stop=7
while(true)
(
CNT_LEFT=0;
GET_A_NEW_LINE_ADDRESS from dline;
BLOCK_ADDR=input_block_addr+0;
PAGE_ADDR=input_page_addr+0;
CNT_LEFT=DISP_HBS+0;
while(CNT_LEFT>BLOCKS_LEFT)
(
BLOCKS_LEFT=8-BLOCK_ADDR;
-->output PAGE_ADDR,start=BLOCK_ADDR,stop=7.
PAGE_ADDR=PAGE_ADDR+1;
BLOCK_ADDR=0;
CNT_LEFT=CNT_LEFT-BLOCKS_LEFT;
)
/*Last Page of line*/
CNT_LEFT=CNT_LEFT+BLOCK_ADDR;
CNF_LEFT=CNT_LEFT-1;
-->output PAGE_ADDR,start=BLOCK_ADDR,stop=CNT_LEFT
)
表C.3.5 Dramctl(0,2,&2)数据通路寄存器
寄存器名 |
总线 |
键孔地址 |
说明 |
注释 |
DISP_COMP0_HBS |
A |
0x48,49,4a,4b |
要读的水平块数c.f.ADDR-HBS |
操作开始前必须装载寄存器 |
DISP_COMP1_HBS |
A |
0x4c,4d,4e,4f |
DISP_COMP2_HBS |
A |
0x50,51,52,53 |
CNT_left0 |
A |
0x54,55,56,57, |
待读的剩余块数 |
这些寄存器通过dispa-ddr,用时间定位注:全部寄存器R/W来自upi |
CNT_left1 |
A |
0x58,59,5a,5b |
CNT_left2 |
A |
0x5c,5d5e,5f |
PAGE_ADDR0 |
A |
0x60,61,62,63 |
当前页的地址 |
PAGE_ADDR1 |
A |
0x64,65,66,67 |
PAGE_ADDR2 |
A |
0x68,69,6a,6b |
BLOCK_ADDR0 |
B |
0x6c,6d,6e,6f |
当前块地址 |
表C.3.5 Dramctl(0,2,&2)数据通路寄存器(续)
寄存器名 |
总线 |
键孔地址 |
说明 |
注释 |
BLOCK_ADDR1 |
B |
0x70,71,72,73 | | |
BLOCK_ADDR2 |
B |
0x74,75,76,77 |
BLOCK_left0 |
B |
0x78,79,7a,7b |
当前页中剩余块 |
BLOCK_left1 |
B |
0x7c,7d,7e,7f |
BLOCK_left2 |
B |
0x80,81,82,83 |
编程
下面15个dispaddr寄存器必须在操作开始之前被编程。
BUFFER_BASE0,1,2
DISP_COMP_OFFSET0,1,2
DISP_VBS_COMP0,1,2
ADDR_HBS_COMP0,1,2
DISP_COMP0,1,2_HBS
使用dispaddr控制寄存器的复位状态将给出非同步行重复的4:2n隔行显示,并在顶场开始(field_info=HIGH)。图159“包括SIF(22×18宏块)图象的缓冲器0”显示了一个对SIF图象的典型的缓冲器设置。(C.13节更详细地涉及本例)。注意,在这个例子中,DISP_HBS_COMPn等于ADDR_HBS_COMPn。类似地,垂直寄存器DISP_VBS_COMPn和相当的写地址发生器寄存器相等,即所读的区域是全部缓冲区。
用读地址发生器形成窗口。
可以编程地址分配以使它能仅读缓冲器的一部分(窗口)。窗口的大小通过寄存器DISP_HBS,DISP-VBS,COMPONENT_OFFSET及LINES_IN_LAST_ROW对每个分量编程。图160“具有显示窗口的SIF分量0”。显示了这是如何做到的。(仅对分量0)。
在本例子中,寄存器将设置为:
BUFFER_BASEO=OxOO
DISP_COMP_OFFSETO=Ox2D
DISP_VBS_COMPO=Ox22
ADDR_HBS_COMPO=Ox2C
DISP_HBS_COMO=Ox2A
注意:
·窗口仅可以在块边界开始和结束。
在本例中我们使LINES_IN_LAST_ROW等于7(意味全部8)。
·本例除了4∶4∶4数据外是不切实际的。为了对应,对其它2个成份的窗口边缘不能在块边界上。
·若接收的数据不是4∶4∶4,彩色空间转换器将不用,这意味着这些读窗口方法同非采样器(up samplers)一起必须被编程以完成它。
C.5地址生成数据通路
在dispaddr和waddrgen中使用的数据通路在结构和宽度上(18位)是相同的,仅是寄存器的数量、某些屏蔽及返回到状态机的标记有所不同。图165显示了一部分的电路(the circuit of oneslice)“数据通路的部分(Slice of Datapath)”。寄存器被独立赋值,去驱动A或B总线,且在控制器中,它们的使用(分配)被最优化。所有寄存器可以从C总线装载。然而,不是所有“装载”信号都被驱动。涉及加法器的所有操作包含二个周期,以允许加法器具有普通脉动进位。图166,“数据通路的二个周期操作”显示了被装回“A”总线寄存器的二个寄存器的二个周期和的时序。在数据通路中各种标记被“Ph0”化,以便产生C码。同样原因,数据通路方案的结构稍有例外,所有寄存器(在A和B总线上)都在一单一块中,这块省去了在单元中的组合通路,因此可使C码能较好地生成。为对数据通路获得upi访问,必须设置访问位,因为若无此访因为若此访问位upi将被锁除。upi访问不同于读和写:
·写:当访问位被设置时,全部装载信号无作用。3字节编址写选通的一个驱动寄存器之一的适当字节,upi数据总线垂直向下经过数据通路(被复制,2-8-8位),18位寄存器就像写3个独立字节那样被写。
·读:这使用A和B总线完成。再一次,访问位必须被置位。已编址寄存器被驱动到A或B总线上,且upi字节从相关总线上选取一个字节,并驱使它到upi总线上。
因为双周期数据通路操作需要A和B总线保持它们的值(且upi访问中断这些),访问必须仅在任何数据通路操作开始之前通过控制状态机给定。
在二个地址发生器中的所有数据通路寄存器通过一9位宽的锁眼在顶层地址被编址,0x28(msb)和0x29(lsb)对键孔,而0x2A对数据。此键孔地址在表C.11.2给出。
注意:
1)所有在地址发生器(dispaddr和waddrgen)中的地址寄存器都包括块地址,象素地址从不使用, 而包括行地址的寄存器只有3个LINES_IN_LAST_ROW寄存器。
2)某些寄存器在地址发生器间被复制,例如,BUFFER_BASEO出现在为dispaddr和waddrgen的地址空间。这些是二个独立的寄存器,它们均需要被装载,这能够显示窗口(仅读显示存储器的一部分),并易于显示3分量视频之外的格式。
C.6 DRAM接口
C.6.1概述
在本发明中,空间解码器、时间解码器和视频格式器均包含用特殊芯片的DRAM接口块。在所有这3种设备中,DRAM接口的作用是通过由地址发生器提供的块地址把数据从芯片传送到外部DRAM和从外部DRAM到芯片。
典型地说,DRAM接口由时钟操作,此时钟与二个地址发生器都是异步的,与数据传送的各种块时钟也异步,然而,这种异步是容易管理的,因为时钟大致在同一频率工作。
数据通常在DRAM接口和64字节块中的芯片的其余部分之间传送(在时间译码器中预测数据是唯一例外)。传送的产生依靠称为“交替缓冲器”的装置。这实质上是一对在双缓冲器配置中工作的RAMS,且DRAM接口使一个RAM填满或空,而这时芯片的另一部分使另一个RAM为空或填满。从地址发生器携带一个地址的独立总线同每个交替缓冲器相联系。
每个芯片有4个交替缓冲器,但这些交替缓冲器的功能在每种情况下是不同的。在空间译码器中,一个交替缓冲器被用来向DRAM传送编码数据,另一个从DRAM读编码数据,第3个向DRAM传送令牌化的数据,第4个是从DRAM读令牌化数据。在时间译码中,一个交替缓冲器被用来给DRAM写内部或预测图象数据,第二个从DRAM中读内部或预测图象数据,其它二个是在读前一个和后一个预测数据。在视频格式器中,一个交替缓冲器用来向DRAM传送数据,其它3个是用来从DRAM中读数据,对每个亮度(Y),红色差数据和蓝色差数据(分别为Cr和Cb)用一个交替缓冲器。
一般的DRAM接口的工作在空间译码器文件中说明。下面部分根据本发明对DRAM接口的特点加以说明,特别对视频格式器的特点给予说明。
C.6.2视频格式器DRAM接口
在视频格式器中,数据以块写到外部DRAM中,但以光栅次序读出。对写而言,同已经说明的空间译码器完全相同,而关于读稍复杂些。
在视频格式器外部DRAM中的数据被组织好,以使至少8个数据块被安排进一页。这8个块是8个连续的水平块。当栅格化时,需从这8个连续块的每一个中读出8个字节,并写到交替缓冲器中(即,8个块的每个中的同一行)。
考虑顶行(假设一个字节宽度接口),x地址(3个LSBS)被设置为零,同样Y地址(3MSBS)也被设置为零。然后,每当开始8字节的每个被读出时x地址就增加。此时,地址的顶部(位6及above_Lsb=bito)被增加,且x地址(3LSBS)置位为零。这个过程被重复,直到64字节读完。对于通向外部DRAM的具有16或32位宽的接口,x地址只是增加2或4,而不是1。
地址发生器能发出信号通知DRAM接口少于64字节应被读出(这在光栅行的开始和结束时可能需要),尽管通常读出8的倍数。这通过使用启动和停止值得到。启动值被用于地址的顶部(位6及6位以上),而停止值同这个启动值比较,并产生一个指示何时应停止读的信号。
C.7垂直过采样
C.7.1前言
在其输入端对一种彩色分量的象素进行光栅扫描后,根据本发明的垂直过采样器能提供一个2倍高度的输出扫描。方式选择允许用多种方式形成输出象素值。
C.7.2端口
输入双线接口:
·in_valid
·in_accept
·in_data[7:0]
·in_lastpel
·in_lastline
输出双线接口:
·out_valid
·out_accept
·out_data[9:0]
·out_last
mode[2:0]
nupdata[7:0],upaddr,upsel[3:0],uprstr,upwstr
ramtest
tdin,tdout,tpho,tckm,tcks
ph0,ph1,notrsto
C.7.3方式
通过输入总线mode[2:0]选择方式
方式寄存器中值1和7是不用的
上述方式中的每一种中,输出象素用10位的值而不是用字节表示。在这块中不发生舍入和截断。为使用相同范围,在需要的地方,数值被向左移。
C.7.3.1方式0:Fifo
这个块仅仅作为Fifo一个存贮器。输出与输出象素数完全相同。这值向左移2。
C.7.3.2方式2:重复
输入扫描中的每行被重复以产生一个2倍高度的输出扫描。象素值被再次向左移2。
A->ABACBDBCCDD
C.7.3.3方式4:下面(Lower)
每个输入行产生2个输出行,在这“Lower”方式中,这两行中的第二行(在显示中下面的一行)同输入行相同。这一对的第一行是当前入行和前面输入行的平均。如果是第一个输入行,没有前面的行可以使用,输入行被重复。
当色度采样与降低的亮度采样是在同一位置时,应选择这种模式。
A->ABAC(A+B)/2DB(B+C)/2C(C+D)/2D
C.7.3.4方式5:上边(upper)
类似于“下面(Lower)方式”,但在这种情况下输入行形成输出对上面的行,而下面的行是相邻输入行的平均。最后的输出行是最后输入行的重复。
当色度采样同upper亮度采样在同一位置时,应选择这种模式。
A->AB(A+B)/2CBD(B+C)/2C(C+D)/2DD
C.7.3.5方式6:中心(central)
这种“Central”方式相应于色度采样位于亮度采样间的中间的情况。为了使输出色度象素与亮度象素在同一位置。使用了权重平均以形成输出行。
A->AB(3A+B)/4C(A+3B)/4D(3B+C)/4(B+3C)/4(3C+D)/4(C+3D)/4D
C.7.4它如何工作
有二种行存贮,想像它们被指定为“a”和“b”。在“FIFO”和“重复”方式中,仅使用行存贮“a”。每个存贮器可容纳多达512象素的行(垂直上采样应该在水平上采样前完成),在“FIFO”方式中,行的长度不受限制。
输入信号in_Lastpel和in_LastLine用来表示输入行的结束和图象的结束。In_Lastpel在每行的最后象素出现时应为高电平。In_LastLine的变高应该同图象的最后一行的最后象素的出现相一致。
输出信号out_Last在每个输出行的最后象素出现时为高电平。
在“重复”方式中,每行被写入存贮器“a”。然后这行被读出2次。当它第二次被读出时,下一行可开始被写入。
在“下面”,“上面”和“中心”方式,行被轮流写入存贮器“a”或“b”。图象的第一行总是被写入存储器“a”。2个小状态机,每一存贮器一个记住每个存贮内容是什么,以及哪个输出行正被形成。从这些状态产生了到行存贮器RAM去的读和写要求,以及确定何时下一行可叠写于当前数据之上的信号。
当写in-Lastpel为高电平时,寄存器(Lastaddr)存贮写地址,从而为输出行的形成提供了行的长度。
C.7.5 UPI
这块包括2个512×8位的RAM阵列,它们可通过微处理机接口用典型方法被访问。不存在具有微处理器访问的寄存器。
C.8水平过采样器
C.8.1概述
在本发明中,顶层寄存器包括3个相同的每个彩色分量一个的水平过采样器。这3个都独立控制,因此,在此只需说明一个。从用户观点看,唯一的不同是每个水平过采样器被变换到存储器映象表中一个不同的地址集。
水平过采样执行联合复制和滤波操作。一共有4种工作方式:
表C.7.1 水平过采样方式
方式 |
功 能 |
0 |
直通(不处理),复位状态 |
1 |
非过采用,用3-tap FIR滤波器 |
2 |
x2过采样和滤波 |
3 |
x4过采样和滤波 |
C.8.2水平过采样器的使用
每个水平过采样器的地址变换图由25个单元组成,对应于12个13位系数寄存器和一个2位的方式寄存器。写到方式寄存器的数决定了工作方式,如在表C.7.1中说明的。根据方式可使用某些或全部系数寄存器。相应的FIR滤波器在下面说明。
根据工作方式,输入Xn在1个、2个或4个时钟周期内保持恒定。对每种方式被编程的实际系数如下:
表C.7.2方式1的系数
系数 |
全部时钟周期 |
k0 |
c00 |
k1 |
c10 |
k2 |
c20 |
表C.7.3方式2的系数
系数 |
全部时钟周期 |
第二时钟周期 |
k0 |
c00 |
c01 |
k1 |
c10 |
c11 |
k2 |
c20 |
c21 |
表C.7.4方式3的系数
系数 |
第1时钟周期 |
第2时钟周期 |
第3时钟周期 |
第4时钟周期 |
k0 |
c00 |
c01 |
c02 |
c03 |
k1 |
c10 |
c11 |
c12 |
c13 |
k2 |
c20 |
c21 |
c22 |
c23 |
在某一特定模式中不被使用的系数,在以那种模式工作是不需编程。
为了得到均匀滤波,每行的第一个和最后一个象素在滤波前被重复。例如,经过2次过采样后,每行的第一个和最后一个象素重复4次而不是2次。因为在滤波器中剩余的数据在每行末被丢弃,输出的象素仍然总确切地为输入数据流中数的一倍、二倍或四倍。
根据系数的值,输出采样或者同输入采样一起放置或从输入采样移走。下面是在某些采样方式中系数的某些举例值。“-”表示系数值是“无关紧要的”。全部值为十六进制的。
表C.7.5采样系数
系数 |
x2过采样,输出象素同输入象素一致 |
x2过采样,输出象素在输入象素之间 |
x4过采样,输出象素在输入象之间 |
c00 |
0000 |
01BD |
00E9 |
c01 | 0000 | 010B | 00B6 |
c02 |
- |
- |
012A |
c03 |
- |
- |
0102 |
c10 |
0800 |
0538 |
0661 |
c11 |
0400 |
0538 |
0661 |
c12 |
- |
- |
0446 |
c13 |
- |
- |
029F |
c20 |
0000 |
010B |
00B6 |
c21 |
0400 |
01BD |
00E9 |
c22 |
- |
- |
0290 |
c23 |
- |
- |
045F |
C.8.3水平过采样的说明
水平过采样的数据通路在图168中说明。
对X4过采样情况,其工作概况如下。此外,X2过采样和X1滤波(方式2和1)简并为这种情况旁路(方式0)整个滤波器,数据从输入锁存器经最后的多路分配器直通到输出锁存器如下说明。
1)当有效数据被锁存在输入锁存器(“L”)中,它保持4个时钟周期。
2)每个系数寄存器(表示成“COEFF”)用一个时钟周期被顺序多路进入乘法器,同时4个流水线寄存器(表示成“PIPE”)的2个装置被计时。因此,对输入数据Xn,第一管道用值c00.Xn,c01.Xn,c02.Xn,c03.Xn填入。
3)类似地,第二个乘法器将用它的系数依次乘Xn,第3个乘法器用它的全部系数依次乘。
可以看到输出将以表C.7.6所示的形式。
表C.7.6对方式3的输出序列
时钟周期 |
输出 |
0 |
c20.xn+c10.xn-1+c00.xn-2 |
1 |
c21.xn+c11.xn-1+c01.xn-2 |
2 |
c22.xn+c12.xn-1+c02.xn-2 |
3 |
c23.xn+c13.xn-1+c03.xn-2 |
从输出的角度来看,每个时钟周期形成一单独象素。由于每个输出象素是决定12个输入象素的权重值(虽然仅有3个不同值),这可以看作在x4过采样的输入象素上执行了12个抽头滤波。(12 tap filter)。
对X2过采样,除输入数据仅保持2时钟周期外,其工作实质相同。此外,仅二个系数被使用,且“PIPE”块通过所说明的多路开关选择器被缩短了。对X1滤波器,输入仅保持一个时钟周期。如希望的那样,用了一个系数和一个“PIPE”级。
我们现在讨论有关本发明实现的某些特征的一些注译。
1)数据通路宽度和系数宽度(13位2的补码)可被选择。从而,当彩色空间转换器被设计时可使用同样的乘法器。这些宽度对于水平过采样器的目的来说绰绰有余。
2)将系数复合到乘法器上的多路开关选择器与UPI读回数据共享。这导致图的结构有些复杂(主要因为C码形成困难),但实际电路较小。
3)就像在彩色空间转换器那样,进位保留乘法器被使用,其结果仅在最终求解。
对全部水平过采样器的控制可以看作一个单一的双线接口级,这接口在它输出端可以形成2倍或4倍于它输入端的数据量。通过UPI编程的这个方式确定可编程移位寄存器(bob)的长度。所选择的方式每1时钟周期、每2个时钟周期或每4个时钟周期产生一输出脉冲。这反过来控制主状态机,该主状态机的状态亦通过in_valid,out_accept(对双线接口)及信号“in_Last”确定。这个信号从垂直过采样器传递,并对每行的最后一个象素为高电平。这使得每行的开始和最后象素重复二次(twice_over),且行间的流水线被清除(clearning down)。(在一行完成之后,流水线包括部分被处理的冗余数据)。
C.9彩色空间转换器
C.9.1概述
在本发明中彩色空间转换器(CSC)对进入的9位数据执行3×3矩阵乘法,然后作加法:
这里X0-2是输入数据,Y0-2是输出数据而Cnm是系数。对矩阵系数特意使用了不太传统的名称,因为这些名字对应于图中的信号名称。
CSC能够在大量不同彩色空间中实现转换,即使顶层寄存器中只使用这些转换的有限集合。设计彩色空间转换如下:
ER,EG,EB→Y,CR,CB
R,G,B→Y,CR,CB
Y,CR,CB→ER,EG,EB
Y,CR,CB→R,G,B
这里R,G和B在(0......511)范围中,所有其它量是在(32......470)范围中。因为到顶层寄存器CSC的输入是Y,CR,CB,只有这些等式的第3和第4个是相关的。
在CSC设计中,系数的精度可以选择,以使对9位数据,所有输出值在由全浮点算法的模拟产生的,值的正负一位的范围内。(这是可得到的最佳精度)。这对CX0~CX3给出13位2的补码系数,及对CX4给出14位2的补码系数。对所有设计转换的系数用十进制和十六进制如下给出:
表C.8.1 各种转换系数
|
ER->Y |
R->Y |
Y->ER |
Y->R |
Cceff |
Dec |
Hex |
Dec |
Hex |
Dec |
Hex |
Dec |
Hex |
c01 |
0.299 |
0132 |
0.256 | |
1.0 |
04C0 |
1.159 |
04AD |
c02 |
0.587 |
0259 |
0.502 | |
1.402 |
059C |
1.539 |
05EE |
c03 |
0.114 |
0075 |
0.098 | |
0.0 |
00C0 |
0.0 |
00C0 |
c04 |
0.0 |
0000 |
16 | |
-179.456 |
F4C8 |
-223.473 |
F1B3 |
c11 |
0.5 |
0200 |
0.428 | |
1.0 |
0400 |
1.159 |
04AD |
c12 |
-0.419 |
FE53 |
-0.358 | |
-0.714 |
FD25 |
-0.335 |
FCA9 |
c13 |
-0.081 |
FFAD |
-0.070 | |
-0.344 |
FEA0 |
-0.452 |
FEE4 |
c14 |
128.0 |
0800 |
128 | |
135.5 |
0878 |
139.7 |
0EBA |
c21 |
-0.159 |
FF53 |
-0.144 | |
1.0 |
0400 |
1.159 |
04AD |
c22 |
-0.331 |
FEAD |
-0.283 | |
0.0 |
0000 |
0.0 |
00C0 |
c23 |
0.5 |
0200 |
0.427 | |
1.772 |
0717 |
2.071 |
0349 |
c24 |
123 |
0800 |
128 | |
-226.816 |
F1D2 |
-233.34 |
EE42 |
所有这些数可从基本方程计算:
Y=0.299ER+0.587EG+0.0114EB
以及下面的色差方程:
CR=ER-Y
CB=EB-Y
R,G和B中的方程是考虑了这些量的全部标度范围后得出的。
C.9.2彩色空间转换器的使用
在复位时,C01,C12和C23置位为1,其它所有系数置位为0。因此,Y0=X0,Y1=X1,Y2=X2且所有数据保持不变地通过。为了选择彩色空间转换,只要简单地将适当系数(例如从表C.8.1)写入到地址变换表中特殊单元中。
参考图,X0......2对应于in_data0......2而Y0......2对应于out_data0......2。用户应记住,输入到CSC的数据必须采样成4∶4∶4。若不这样,不仅彩色空间变换无意义,而且芯片将锁住。
值得注意的是,每个输出可从系数输入的任何允许的组合加(或减)一常数而被形成。因此,对任何给定的彩色空间转换,输出的次序可通过交换转换矩阵中的行(即系数写入的地址)而改变。
CSC可以确保为表C.8.1中所有转换工作。若用其它转换,用户必须记住下面几点:
1)如果在计算中任何中间结果要求大于10位的精度(包括符号位),硬件将不工作。
2)CSC的输出被饱和为0到511。也就是,任何小于0的数用0代替,而任何大于511的数用511代替。饱和逻辑的实现是假设结果仅稍微大于511或稍微小于0。如果CSC被错误编程,那么公共征兆将是输出在所有(或大部分)时间都出现饱和。
C.9.3 CSC的说明
CSC的结构在图169中说明,由于空间限制,那里仅显示了3个分量中的2个。在图中,“寄存器”即“R”指主从寄存器,“锁存器”或“L”指一透明锁存器。
所有系数被装入图中没有明显表示的读写UPI寄存器。为了解其工作,参考最左边分量(它产生输出out_data0)考虑如下次序:
1)数据达到输入端X0-2(in_data0-2)。这代表在输入彩色空间中的一个单一象素。这被锁存。
2)X0被乘以C01并锁存到第一个流水线寄存器。X1和X2继续移动一寄存器。
3)X1被乘以C02,被加到X1·C01中去,并锁存到下一个流水线寄存器。X2继续移动一寄存器内。
4)X被乘以C03并和(3)的结果相加,形成(X1·C01+X2·C02+X3·C03)。这个结果锁存到下一个流水线寄存器中。
5)(4)的结果同C04相加。因为数据通过乘法器以进位保留形式保持,这加法器亦用来求解来自乘法器链的数据。其结果锁存到下级流水线寄存器中。
6)最后的操作是饱和数据。部分结果被从求解加法器传递到饱和块以实现这一步。
可以看到,正如这部分开始时在矩阵方程中所指的那样结果是Y0。同样地,用同样方法形成Y1和Y2。
使用了3个乘法器,系数作为被乘数,数据作为系数。这可得到有效的方案,且部分结果沿数据通路向下,相同输入数据通过3个平行且相同的数据通路,每个输出对应一个。
为了实现在C.9.2节中所说的复位状态,3个分量的每个必须用不同方法复位。为了避免有3个置位方案(Schematics)及3种稍微不同的线路图(Layout),对在顶层强制成高或低电平的UPI寄存器输入。
CSC几乎没有与其相关的控制。尽管如此,每个流水线级是一双线接口级,所以有一个有效的可接收锁存器链以及与它们相关的控制(in_accept=out_accept_r+Lin_Valid-r)。因此,CSC是一个5级深的双线接口,当停止时能保留10个数据层。
CSC的输出包括重新同步锁存器,因为输出流水线中的下一个功能不考虑一个不同时钟发生器。
C.10输出控制器
C.10.1前言
根据本发明的输出控制器具有下面功能:
·它以3种方式之一的方式提供数据
·24比特4∶4∶4
·16比特4∶2∶2
·8比特4∶2∶2
·它调正数据到视频显示窗口,此窗口通过vsync和hsync脉冲和可编程时间寄存器定义的。
·如果需要,它围绕视频窗口加边框。
C.10.2端口
输入双线接口:
·in_Valid
·in_accept
·in_data[23:0]
输出双线接口:
·out_Valid
·out_accept
·out_data[23:0]
·out_active
·out_window
·out_comp[1:0]
in_vsync,in_hsync
nupdata[7:0],upaddr[4:0],upsel,rstr,wstr,tdin,
tdout,tph0,tckm,tcks,chiptest,Ph0,Ph1,notrst0,notrst1。
C.10.3输出方式
输出的格式通过写工作方式寄存器而选择
C.10.3.1方式0
这方式是24位4∶4∶4 RGB或YCrCB。输入数据直接通到输出。
C.10.3.2方式1和2
这些方式提供4∶2∶2 YCrCb,假设in_data[23:16]是Y,in_data[15:8]是Cr,及in_data[7:0]是Cb。
C.10.3.2.1方式1
在16位YCrCb中,Y呈现在out_data[15:8]上。Cr和Cb多路复合到out_data[7:0]上的时间,Cb在前。out_data[23:16]不被使用。
C.10.3.2.2方式2
在8位YCrCb中,Y、Cr和Cb是按照Cb、Y、Cr、Y的次序多路复合到out_data[7:0]上的时间。out_data[23:8]不被使用。
C.10.3.3输出时序
在视频显示窗口中,下列寄存器用来放数据。
·Vdelay-在视频或边框的第一行之前,跟在vsync脉冲之后的hsync脉冲的数量。
·hdelay-在hsync和视频或边框的第一个象素之间时钟周期数目。
·height-视频窗口的高度,以行数为单位。
·width-视频窗口的宽度,以象素数为单位。
·north,south-分别为视频窗口以上和以下的边框高度,以行数为单位。
·west,east-分别为到视频窗口左边和右边的边界宽度,以象素为单位。
最小vdelay为零。第一个hsync是第一个有效行。可被编程入hdelay的最小值是2。然而应注意,从in_hsync到第一个有效输出象素的实际延迟是hdelay+1个周期。
边的任何边沿可具有值零。通过写寄存器border-r,border-g和border-b选择边框颜色。通过写寄存器bank-r,bank-g和bank-b选择边框外区域的颜色。注意,在输出方式1和2中执行的多路复合也将影响边框和空白分量。也就是,在这些寄存器中值对应于in_data[23:16],in_data[15:8]及in_data[7:0]。
C.10.4输出标记
·out_activo指示输出数据是有效窗口的一部分,即视频数据或边框。
·out_window表示输出数据是视频窗口的一部分。
·out_comp[1:0]表示彩色分量存在于输出方式1和2中的out_data[7:0]上。在方式1中,0=Cb,1=Cr。在方式2中,0=Y,1=Cr,2=Cb。
C.10.5双线方式
本发明中,通过对双线寄存器写1来选择双线方式。它不是在复位之后被选中的。在双线方式中,输出时序寄存器和sync信号均被忽略,而通过块的数据流由out_accept控制。注意,在正常工作中,out_accept应保持在高电平。
C.10.6窥测器
有一个超级窥测器置于块的输出端,这块包括对输出标记的访问。
C.10.7如何工作
2个相同的减计数器记录着显示器中的当前位置。“Vcount”对hsyncs减计数,并从适当的时序寄存器对Vsync加载或在它最终计数时加载。“Hcount”对每个象素减计数,并对hsync加载或在它最终计数时加载。注意,在输出方式2中,一个象素相当二个时钟周期。
C.11时钟分频器
C.11.1概述
在本发明中的顶层寄存器包括二个相同的时钟分频器,一个产生PICTURE_CLK,另一个产生AUDIO_CLK。时钟分频器是相同且被独立控制。因此,在此只需说明一个。从用户观点看,两个时钟分频器的唯一不同是除数寄存器被映射到存储器映象地址中的不同位置。
时钟分频器的作用是提供一个被分为4X SYSCIK的时钟频率,且对均等占空比(mark-space)没有要求。
除数需要在0到16,000,000的范围内,因此它可用24位来表示。且限制最小除数为16。这是因为通过使用二分之一除数,时钟分频器将接近一个相同占空比(在一个SYSCLK周期内)由于可得到的最大时钟频率是SYSCLK,可得到的最大分频频率为SYSCLK/2。而且,因为在级联中使用了4个计数器,除数/2必须从不小于8,否则输出分频时钟被驱动到正电源。
C.11.2时钟分频器的使用
每个时钟分频器的地址变换由4个单元组成,它们对应3个8位除数寄存器和1个1位访问寄存器。时钟分频器刚加电时是无效的,当通过对其除数寄存器的访问而有效。
除数寄存器可根据表C.10.1中地址变换以任意次序写入。时钟分频器通过在它的访问位检测出同步化的0到1的转换而被激活。开始检测出一转换时,时钟分频器将离开复位状态,并产生一分频时钟。后面的转换(假定除数也已改变)仅使时钟分频器锁定到一新频率而″on-the-fly″。一旦被激活,除将芯片复位外,无法停止时钟分频器。
表C.10.1时钟分频器寄存器
地址 |
寄存器 |
00b |
存取位 |
01b |
除数最高位(MSB) |
10b |
除数 |
11b |
除数最低位(LSB) |
除数值可用范围从14到16,77,216。
C.11.3时钟分频器的说明
时钟分频器可用4个22位计数器实现。这些计数器联成级连,以使当一个计数器进位时,它将依次激活下一个计数器。一个计数器在进位前,计数器以1/4除数值分频。因此,每个计数器将依次接收它,以形成分频时钟频率的脉冲。
进位以后,计数器将以除数/8再装入,并被分频产生大致相同的占空比的分频时钟。由于每个计数器被前级计数器激活时,它从除数寄存器再装入。分频时钟频率可以on_thd_fly而被改变。这些改变只需简单地改变除数内容而实现。
每个计数器用它自己独立的时钟发生器计时,以便精确地控制计数器之间时钟对齐,并使每个计数器由不同的时钟装置计时。
一个状态机控制除数/4和除数/8值的形成。同时亦将正确的源时钟从锁相环(PLL)多路复合到时钟发生器去。根据除数的值,计数器被不同时钟计时。这是因为不同的除数值所形成的分频时钟其边沿随PLL提供的不同时钟组合而定。
C.11.4测试时钟分频器
时钟分频器可通过用CHIPTEST为高加电到芯片上而测试。这样的效果是强使时钟分频器内的所有时钟逻辑用SYSCIK计时,与之相对时钟由PLL产生。
时钟分频器已经以全扫描设计,因此,下一步可以用标准的JTAG存取测试,只要芯片已如上加电。
若设备在以正常工作运行时,CHIPTEST保持在高电平,则时钟分频器的功能不能保证。
C.12地址变换
C.12.1顶层地址变换
注释:
1)对顶层地址变换的寄存器,如表C.11.1中所设置的,是在设计期间所用的名字。这些名字不需要出现在数据表中。
2)由于这是完全的地址变换,此处所列的许多单元包括仅为测试使用的单元。
表C.11.1 顶层寄存器A顶层地址变换
寄存器名 |
地址 |
位 |
注释 |
BU_EVENT |
0x0 |
8 |
写1复位 |
BU_MASK |
0x1 |
8 |
R/W |
BU_EN_INTERRUPTS |
0x2 |
1 |
R/W |
BU_WADDR_COD_STD |
0x4 |
2 |
R/W |
BU_WADDR_ACCESS |
0x5 |
1 |
R/W访问 |
BU_WADDR_CTL1 |
0x6 |
3 |
R/W |
BU_DISPADDR_LINES_IN_LAST_ROW0 |
0x8 |
3 |
R/W |
BU_DISPADDR_LINES_IN_LAST_ROW1 |
0x9 |
3 |
R/W |
BU_DISPADDR_LINES_IN_LAST_ROW2 |
0xa |
3 |
R/W |
BU_DISPADDR_ACCESS |
0xb |
1 |
R/W访问 |
BU_DISPADDR_CTL0 |
0xc |
8 |
R/W |
BU_DISPADDR_CTL1 |
0xd |
1 |
R/W |
BU_BM_ACCESS |
0x10 |
1 |
R/W-access |
BU_BM_CTL0 |
0x11 |
2 |
R/W |
BU_BM_TARGET_IX |
0x12 |
4 |
R/W |
BU_BM_PRES_NUM |
0x13 |
8 |
R/W异步 |
BU_BM_THIS_PNUM |
0x14 |
8 |
R/W |
BU_BM_PIC_NUM0 |
0x15 |
8 |
R/W |
BU_BM_PIC_NUM1 |
0x16 |
8 |
R/W |
BU_BM_PIC_NUM2 |
0x17 |
8 |
R/W |
BU_BM_TEMP_REF |
0x18 |
5 |
RO |
寄存器名 |
地址 |
位 |
注释 |
BU_ADDRGEN_KEYHOLE_ADDR_MSB |
0x28 |
1 |
R/W地址发生器窥测器见表C.11.2内容 |
BU_ADDRGEN_KEYHOLE_ADDR_LSB |
0x29 |
8 |
BU_ADDRGEN_KEYMOLE_DATA |
0x2a |
8 |
BU_IT_PAGE_START |
0x30 |
5 |
R/W |
BU_IT_READ_CYCLE |
0x31 |
4 |
R/W |
BU_IT_WRITE_CYCLE |
0x32 |
4 |
R/W |
BU_IT_REFRESH_CYCLE |
0x33 |
4 |
R/W |
BU_IT_RAS_FALUNG |
0x34 |
4 |
R/W |
BU_IT_CAS_FALUNG |
0x35 |
4 |
R/W |
BU_IT_CONFIG |
0x36 |
1 |
R/W |
BU_OC_ACCESS |
0x40 |
1 |
R/W访问 |
BU_OC_MODE |
0x41 |
2 |
R/W |
BU_OC_ZWIRE |
0x42 |
1 |
R/W |
BU_OC_BORDER_R |
0x49 |
8 |
R/W |
BU_OC_BORDER_G |
0x4a |
8 |
R/W |
BU_OC_BORDER_B |
0x4b |
8 |
R/W |
BU_OC_BLANK_R |
0x4d |
8 |
R/W |
BU_OC_BLANK_G |
0x4e |
8 |
R/W |
BU_OC_BLANK_B |
0x4f |
8 |
R/W |
BU_OC_HDELAY_1 |
0x50 |
3 |
R/W |
BU_OC_HDELAY_0 |
0x51 |
8 |
R/W |
BU_OC_WEST_1 |
0x52 |
3 |
R/W |
BU_OC_WEST_0 |
0x53 |
8 |
R/W |
BU_OC_EAST_1 |
0x54 |
3 |
R/W |
BU_OC_EAST_0 |
0x55 |
8 |
R/W |
BU_OC_WIDTH_1 |
0x56 |
3 |
R/W |
BU_OC_WIDTH_0 |
0x57 |
8 |
R/W |
BU_OC_VDELAY_1 |
0x58 |
3 |
R/W |
BU_OC_VDELAY_0 |
0x59 |
8 |
R/W |
BU_OC_NORTH_1 |
0x5a |
3 |
R/W |
BU_OC_NORTH_0 |
0x5b |
8 |
R/W |
BU_OC_SOUTH_1 |
0x5c |
3 |
R/W |
BU_OC_SOUTH_0 |
0x5d |
8 |
R/W |
BU_OC_HEIGHT_1 |
0x5e |
3 |
R/W |
BU_OC_HEIGHT_0 |
0x5f |
8 |
R/W |
表C.11.1顶层寄存器A顶层地址变换(续)
寄存器名 |
地址 |
位 |
注释 |
BU_IF_CONFIGURE |
0x60 |
5 |
R/W |
BU_UV_MODE |
0x61 |
6 |
R/W-xnnnxnnn |
BU_COEEF_KEYADDR |
0x62 |
7 |
R/W-See tatle C.113for conterls |
BU_COEFF_KEYDATA |
0x63 |
a |
BU_GA_ACCESS |
0x68 |
1 |
R/W |
BU_GA_BYPASS |
0x69 |
1 |
R/W |
BU_GA_RAM0_ADDR |
0x6a |
8 |
R/W |
BU_GA_RAM0_DATA |
0x6b |
8 |
R/W |
BU_GA_RAM1_ADDR |
0x6c |
8 |
R/W |
BU_GA_RAM1_DATA |
0x5d |
8 |
R/W |
BU_GA_RAM2_ADDR |
0x6e |
8 |
R/W |
BU_GA_RAM2_DATA |
0x5f |
8 |
R/W |
BU_DIVA_3 |
0x70 |
1 |
R/W |
BU_DIVA_2 |
0x71 |
8 |
R/W |
BU_DIVA_1 |
0x72 |
8 |
R/W |
BU_DIVA_0 |
0x73 |
8 |
R/W |
BU_DIVP_3 |
0x74 |
1 |
R/W |
BU_DIVP_2 |
0x75 |
8 |
R/W |
BU_DIVP_1 |
0x76 |
8 |
R/W |
BU_DIVP_0 |
0x77 |
8 |
R/W |
BU_PAD_CONFIG_1 |
0x78 |
7 |
R/W |
BU_PAD_CONFIG_0 |
0x79 |
8 |
R/W |
BU_PLL_RESISTORS |
0x7a |
8 |
R/W |
BU_REF_INTERVAL |
0x7b |
8 |
R/W |
BU_REVISION |
0xff |
8 |
RO-revision |
下面寄存器在测试空间它们不同于出现在数据表中 |
BU_BM_PRES_FLAG |
0x80 |
1 |
R/W |
BU_BM_EXP_TR |
0x81 |
-- |
These registers aremissing on revA |
BU_BM_TR_DELTA |
0x82 |
-- |
BU_BM_ARR_IX |
0x83 |
2 |
R/W |
BU_BM_DSP_IX |
0x84 |
2 |
R/W |
BU_BM_RDY_IX |
0x85 |
2 |
R/W |
BU_BM_BSTATE3 |
0x86 |
2 |
R/W |
EU_EM_BSTATE2 |
0x87 |
2 |
R/W |
表C.11.1顶层寄存器A顶层地址变换(续)
寄存器名 |
地址 |
位 |
注释 |
BU_BM_BSTATE1 |
0x88 |
2 |
R/W |
BU_BM_INDEX |
0x89 |
2 |
R/W |
BU_BM_STATE |
0x8a |
1 |
R/W |
BU_BM_FROMPS |
0x8b |
1 |
R/W |
BU_BM_FROMFL |
0x8c |
1 |
R//W |
BU_DA_COMP0_SNP3 |
0x90 |
3 |
R/W在显示地址发生器地址输出上的窥测器 |
BU_DA_COMP0_SNP2 |
0x91 |
3 |
BU_DA_COMP0_SNP1 |
0x92 |
3 |
BU_DA_COMP0_SNP0 |
0x93 |
8 |
BU_DA_COMP1_SNP3 |
0x94 |
3 |
BU_DA_COMP1_SNP2 |
0x95 |
8 |
BU_DA_COMP1_SNP1 |
0x96 |
8 |
BU_DA_COMP1_SNP0 |
0x97 |
8 |
BU_DA_COMP2_SNP3 |
0x98 |
8 |
BU_DA_COMP2_SNP2 |
0x99 |
8 |
BU_DA_COMP2_SNP1 |
0x9a |
8 |
BU_DA_COMP2_SNP0 |
0x9b |
8 |
BU_UV_BAM1A_ADDR_1 |
0xa0 |
8 |
R/W对垂直过采样RAM upi的测试访问 |
BU_UV_RAM1A_ADDR_0 |
0xa1 |
8 |
BU_UV_RAM1A_DATA |
0xa2 |
8 |
BU_UV_RAM1B_ADDR_1 |
0xa4 |
3 |
BU_UV_RAM1B_ADDR_0 |
0xa5 |
8 |
BU_UV_RAM1B_DATA |
0xa6 |
|
BU_UV_RAM2A_ADDR_1 |
0xa8 |
3 |
BU_UV_RAM2A_ADDR_0 |
0xa9 |
8 |
BU_UV_RAM2A_DATA |
0xaa |
8 |
BU_UV_RAM2B_ADDR_1 |
0xac |
8 |
BU_UV_RAM2B_ADDR_0 |
0xad |
8 |
BU_UV_RAM2B_DATA |
0xae |
8 |
BU_WA_ADDR_SNP2 |
0xb0 |
8 |
R/W在写地址发生器地址输出处理上的窥测器 |
BU_WA_ADDR_SNP1 |
0xb1 |
3 |
BU_WA_ADDR_SNP0 |
0xb2 |
3 |
BU_WA_DATA_SNP1 |
0xb4 |
3 |
R/W WA数据输出上窥测器 |
BU_WA_DATA_SNP0 |
0xb5 |
3 |
表C.11.1 顶层寄存器A顶层地址变换(续)
表C.11.1 顶层寄存器A顶层地址变换(续)
寄存器名 |
地址 |
位 |
注释 |
BU_IF_SNP0_1 |
0xb8 |
8 |
R/W,在dramif数据输出上的3个窥测器 |
BU_IF_SNP0_0 |
0xb9 |
8 |
BU_IF_SNP1_1 |
0xba |
8 |
BU_IF_SNP1_0 |
0xbb |
8 |
BU_IF_SNP2_1 |
0xbc |
8 |
BU_IF_SNP2_0 |
0xbd |
8 |
BU_IFRAM_ADDR_1 |
0xc0 |
1 |
R/W若是RAM UPI访问它 |
BU_IFRAM_ADDR_0 |
0xc1 |
8 |
BU_IFRAM_DATA |
0xc2 |
8 |
BU_OC_SNP_3 |
0xc4 |
8 |
R/W芯片输出上的窥测器 |
BU_OC_SNP_2 |
0xc5 |
8 |
BU_OC_SNP_1 |
0xc6 |
8 |
BU_OC_SNP_0 |
0xc7 |
8 |
BU_YAPLL_CONFIG |
0xc8 |
8 |
R/W |
BU_BM_FRONT_BYPASS |
0xca |
1 |
R/W |
表C.11.2 Top-Level寄存器A地址发生器键孔
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_DISPADDR_BUFFER0_BASE_MSB |
0x01 |
2 |
8位寄存器必须装载 |
BU_DISPADDR_BUFFER0_BASE_MID |
0x02 |
3 |
BU_DISPADDR_BUFFER0_BASE_LSB |
0x03 |
3 |
BU_DISPADDR_BUFFER1_BASE_MSB |
0x05 |
2 | 必须装载 |
BU_DISPADDR_BUFFER1_BASE_MID |
0x06 |
3 |
BU_DISPADDR_BUFFER1_BASE_LSB |
0x07 |
8 |
BU_DISPADDR_BUFFER2_BASE_MSB |
0x09 |
2 | 必须装载 |
BU_DISPADDR_BUFFER2_BASE_MID |
0x0a |
8 |
BU_DISPACOR_BUFFER2_BASE_LSB |
0x0b |
3 |
BU_DLDPATH_LINE0_MSB |
0x0d |
2 | 仅用于测试 |
BU_DLDPATH_LINE0_MID |
0x0e |
3 |
BU_DLDPATH_LINE0_LSB |
0x0f |
3 |
BU_DLDPATH_LINE1_MSB |
0x11 |
2 | 仅用于测试 |
BU_DLDPATH_LINE1_MID |
0x12 |
3 |
BU_DLDPATH_LINE1_LSB |
0x13 |
3 |
BU_DLDPATH_LNIE2_MSB |
0x15 |
2 | 仅用于测试 |
BU_DLDPATH_LINE2_MID |
0x16 |
3 |
BU_DLDPATH_LINE2_LSB |
0x17 |
3 |
BU_DLDPATH_VBCNT0_MSB |
0x19 |
2 | 仅用于测试 |
BU_DLDPATH_VBCNT0_MID |
0x1a |
3 |
BU_DLDPATH_VBCNT0_LSB |
0x1b |
3 |
BU_DLDPATH_VBCNT1_MSB |
0x1d |
2 | 仅用于测试 |
BU_DLDPATH_VBCNT1_MID |
0x1e |
3 |
BU_DLDPATH_VBCNT1_LSB |
0x1f |
3 |
BU_DLDPATH_VBCNT2_MSB |
0x21 |
2 | 仅用于测试 |
BU_DLDPATH_VBCNT2_MID |
0x22 |
3 |
BU_DLDPATH_VBCNT2_LSB |
0x23 |
3 |
表C.11.2 Top-Level寄存器A地址发生器键孔(续)
键孔寄存器名 |
键孔地址 |
位 |
注释 |
BU_DISPADDR_COMP0_OFFSET_MSB |
0x25 |
2 | 必须装载 |
BU_DISPADDR_COMP0_OFFSET_MID |
0x26 |
3 |
BU_DIDPADDR_COMP0_OFFSET_LSB |
0x27 |
8 |
BU_DISPADDR_COMP1_OFFSET_MSB |
0x29 |
2 |
必须装载 |
BU_DISPADDR_COMP1_OFFSET_MIO |
0x2a |
8 |
BU_DISPADDB_COMP1_OFFSET_LSB |
0x2b |
8 |
BU_DISPADDR_COMP2_OFFSET_MSB |
0x2d |
2 | 必须装载 |
BU_DISPADDR_COMP2_OFFSET_MID |
0x2e |
8 |
BU_DISPADDR_COMP2_OFFSET_LSB |
0x2f |
8 |
BU_DISPADDR_COMP0_VBS_MSB |
0x31 |
2 |
必须装载 |
BU_DISPADDR_COMP0_VBS_MID |
0x32 |
8 |
BU_DISPADDR_COMP0_VBS_LSB |
0x33 |
8 |
BU_DISPADDR_COMP1_VBS_MSB |
0x35 |
2 | 必须装载 |
BI_DISPADDR_COMP1_VBS_MID |
0x36 |
8 |
BU_DISPADDR_COMP1_VBS_LSB |
0x37 |
8 |
BU_DISPADDR_COMP2_VBS_MSB |
0x39 |
2 | 必须装载 |
BU_DISPADDR_COMP2_VBS_MID |
0x3a |
8 |
BU_DISPADDR_COMP2_VSB_LSB |
0x3b |
8 |
BU_ADDR_COMP0_HBS_MSB |
0x3d |
2 | 必须装载 |
BU_ADDR_COMP0_HBS_MID |
0x3e |
8 |
BU_ADDR_COMP0_HBS_LSB |
0x3f |
8 |
BU_ADDR_COMP1_HBS_MSB |
0x41 |
2 | 必须装载 |
BU_ADDR_COMP1_HBS_MID |
0x42 |
8 |
BU_ADDR_COMP1_HBS_LSB |
0x43 |
8 |
BU_ADDR_COMP2_HBS_MSB |
0x45 |
2 | 必须装载 |
BU_ADDR_COMP2_HBS_MID |
0x46 |
8 |
BU_ADDR_COMP2_HBS_LSB |
0x47 |
3 |
BU_DISPADDR_COMP0_HBS_MSB |
0x49 |
2 | 必须装载 |
BU_DISPADDR_COMP0_HBS_MID |
0x4a |
8 |
BU_DISPADDR_COMP0_HBS_LSB |
0x4b |
8 |
BU_DISPADDR_COMP1_HBS_MSB |
0x4d |
2 | 必须装载 |
BU_DISPADDR_COMP1_HBS_MID |
0x4e |
3 |
BU_DISPADDR_COMP1_HBS_LSB |
0x41 |
8 |
表C.11.2 Top-Level寄存器A地址发生器键孔(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_DISPADDR_COMP2_HES_MSB |
0x51 |
2 | 必须装载 |
BU_DISPADDR_COMP2_HBS_MID |
0x52 |
3 |
BU_DISPADDR_COMP2_HBS_LSB |
0x53 |
3 |
BU_DISPADDR_CNT_left0_MSB |
0x55 |
2 |
仅用于测试 |
BU_DISPADDR_CNT_left0_MID |
0x55 |
3 |
BU_DISPADDR_CNT_left0_LSB |
0x57 |
3 |
BU_DISPADDR_CNT_left1_MSB |
0x59 |
2 | 仅用于测试 |
BU_DISPADDR_CNT_left1_MID |
0x5a |
8 |
BU_DISPADDR_CNT_left1_LSB |
0x5b |
8 |
BU_DISPADDP_CNT_left2_MSB |
0x5d |
2 | 仅用于测试 |
BU_DISPADDR_CNT_left2_MID |
0x5e |
3 |
BU_DISPADDR_CNT_left2_LSB |
0x5f |
8 |
BU_DISPADDR_PAGE_ADDR0_MSB |
0x61 |
2 |
仅用于测试 |
BU_DISPADDR_PAGE_ADDR0_MID |
0x62 |
8 |
BU_DISPADDR_PAGE_ADDR0_LSB |
0x53 |
8 |
BU_DISPADDR_PAGE_ADDR1_MSB |
0x55 |
2 | 仅用于测试 |
BU_DISPADDR_PAGE_ADDR1_MID |
0x66 |
3 |
BU_DISPADDR_PAGE_ADDR1_LSB |
0x67 |
8 |
BU_DISPADDR_PAGE_ADDR2_MSB |
0x69 |
2 | 仅用于测试 |
BU_DISPADDR_PAGE_ADDR2_MID |
0x6a |
8 |
BU_DISPADDR_PAGE_ADDR2_LSB |
0x5b |
8 |
BU_DISPADDR_BLOCK_ADDR0_MSB |
0x6d |
2 | 仅用于测试 |
BU_DISPADDR_BLOCK_ADDR0_MID |
0x5e |
3 |
BU_DISPADDR_BLOCK_ADDR0_LSB |
0x6f |
3 |
BU_DISPADDR_BLOCK_ADDR1_MSB |
0x71 |
2 | 仅用于测试 |
BU_DISPADDR_BLOCK_ADDR1_MID |
0x72 |
8 |
BU_DISPADDR_BLOCK_ADDR1_LSB |
0x73 |
8 |
BU_DISPADDR_BLOCK_ADDR2_MSB |
0x75 |
2 | 仅用于测试 |
BU_DISPADDR_BLOCK_ADDR2_MID |
0x76 |
3 |
BU_DISPADDR_BLOCK_ADDP2_LSB |
0x77 |
8 |
BU_DISPADDR_BLOCKS_left0_MSB |
0x79 |
2 | 仅用于测试 |
BU_DISPADDR_BLOCKS_left0_MID |
0x7a |
8 |
BU_DISPADDR_BLOCKS_left0_LSB |
0x7b |
3 |
表C.11.2 Top-Level寄存器A地址发生器键孔(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_DISPADDR_BLOCKS_left1_MSB |
0x7d |
2 |
仅用于测试 |
BU_DISPADDR_BLOCKS_left1_MID |
0x7e |
8 |
BU_DISPADDR_BLOCKS_left1_LSB |
0x71 |
3 |
BU_DISPADDR_BLOCKS_left2_MSB |
0x81 |
2 | 仅用于测试 |
BU_DISPADDR_BLOCKS_left2_MID |
0x82 |
3 |
BU_DISPADDR_BLOCKS_left2_LSB |
0x83 |
3 |
BU_WADDR_BUFFER0_BASE_MSB |
0x85 |
2 | 必须装载 |
BU_WADDR_BUFFER0_BASE_MID |
0x86 |
8 |
BU_WADDR_BUFFER0_BASE_LSB |
0x87 |
3 |
BU_WADDR_BUFFER1_BASE_MSB |
0x89 |
2 | 必须装载 |
BU_WADDP_BUFFER1_BASE_MID |
0x8a |
8 |
BU_WADDR_BUFFER1_BASE_LSE |
0x8b |
8 |
BU_WADDR_BUFFER2_BASE_MSB |
0x8d |
2 | 必须装载 |
BU_WADDR_BUFFER2_BASE_MID |
0x8e |
8 |
BU_WADDR_BUFFER2_BASE_LSB |
0x8f |
8 |
BU_WADDR_COMP0_HMBADDR_MSB |
0x91 |
2 | 仅用于测试 |
EU_WADDR_COMP0_HMBADDR_MID |
0x92 |
8 |
BU_WADDR_COMP0_HMBADDR_LSB |
0x93 |
8 |
BU_WADDR_COMP1_HMBADDR_MSB |
0x95 |
2 | 仅用于测试 |
BU_WADDR_COMP1_HMBADDR_MID |
0x96 |
8 |
BU_WADDR_COMP1_HMBADDR_LSB |
0x97 |
3 |
BU_WADDR_COMP2_HMBADDR_MSB |
0x99 |
2 | 仅用于测试 |
BU_WADDR_COMP2_HMBADDR_MID |
0x9a |
3 |
BU_WADDR_COMP2_HMBADDR_LSB |
0x9b |
3 |
BU_WADDR_COMP0_VMBADDR_MSB |
0x9d |
2 | 仅用于测试 |
BU_WADDR_COMP0_VMBADDR_MID |
0x9e |
3 |
BU_WADDR_COMP0_VMBADDR_LSB |
0x9f |
8 |
BU_WADDR_COMP1_VMBADDR_MSB |
0xa1 |
2 | 仅用于测试 |
BU_WADDR_COMP1_VMBADDR_MID |
0xa2 |
8 |
BU_WADDR_COMP1_VMBADDR_LSB |
0xa3 |
3 |
BU_WADDR_COMP2_VMBADDR_MSB |
0xa5 |
2 | 仅用于测试 |
BU_WADDR_COMP2_VMBADDR_MID |
0xa6 |
8 |
BU_WADDR_COMP2_VMBADDR_LSB |
0xa7 |
3 |
表C.11.2 Top-Level寄存器A地址发生器键孔(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_WADDR_VBADDR_MSB |
0xa9 |
2 |
仅用于测试 |
BU_WADDR_VBADDR_MID |
0xaa |
8 |
BU_WADDR_VBADDR_LSB |
0xab |
3 |
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_MSB |
0xad |
2 |
必须装载 |
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_MID |
0xae |
3 |
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS_LSB |
0xaf |
8 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_MSB |
0xb1 |
2 | 必须装载 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_MID |
0xb2 |
8 |
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS_LSB |
0xb3 |
8 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_MSB |
0xb5 |
2 |
必须装载 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_MID |
0xb6 |
3 |
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS_LSB |
0xb7 |
8 |
BU_WADDR_HB_MSB |
0xb9 |
2 |
仅用于测试 |
BU_WADDR_HB_MID |
0xba |
8 |
BU_WADDR_HB_LSB |
0xbb |
8 |
BU_WADDR_COMP0_OFFSET_MSB |
0xbd |
2 |
必须装载 |
BU_WADDR_COMP0_OFFSET_MID |
0xbe |
8 |
BU_WADDR_COMP0_OFFSET_LSB |
0xbf |
3 |
BU_WADDR_COMP1_OFFSET_MSB |
0xc1 |
2 |
必须装载 |
BU_WADDR_COMP1_OFFSET_MID |
0xc2 |
8 |
BU_WADDR_COMP1_OFFSET_LSB |
0xc3 |
3 |
BU_WADDR_CDMP2_OFFSET_MSB |
0xc5 |
2 |
必须装载 |
BU_WADDR_COMP2_OFFSET_MID |
0xc6 |
3 |
BU_WADDR_COMP2_OFFSET_LSB |
0xc7 |
8 |
BU_WADDR_SCRATCH_MSB |
0xc9 |
2 |
仅用于测试 |
BU_WADDR_SCRATCH_MID |
0xca |
8 |
BU_WADDR_SCRATCH_LSB |
0xcb |
8 |
BU_WADDR_MBS_WIDE_MSB |
0xcd |
2 |
必须装载 |
BU_WADDR_MBS_WIDE_MID |
0xce |
3 |
BU_WADDR_MBS_WIDE_LSB |
0xc1 |
8 |
BU_WADDR_MBS_HIGH_MSB |
0xd1 |
2 |
必须装载 |
BU_WADDR_MBS_HIGH_MID |
0xd2 |
8 |
BU_WADDR_MBS_HIGH_LSB |
0xd3 |
3 |
表C.11.2 Top-Level寄存器A地址发生器键孔(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_WADDR_COMP0_LAST_MB_IN_ROW_MSB |
0xd5 |
2 | 必须装载 |
BU_WADDR_COMP0_LAST_MB_IN_ROW_MID |
0xd6 |
a |
BU_WADDR_COMP0_LAST_MB_IN_ROW_LSB |
0xd7 |
8 |
BU_WADDR_COMP1_LAST_MB_IN_ROW_MSB |
0xd9 |
2 | 必须装载 |
BU_WADDR_COMP1_LAST_MB_IN_ROW_MID |
0xda |
8 |
BU_WADDR_COMP1_LAST_MB_IN_ROW_LSB |
0xdb |
8 |
BU_WADDR_COMP2_LAST_MB_IN_ROW_MSB |
0xdd |
2 | 必须装载 |
BU_WADDR_COMP2_LAST_MB_IN_ROW_MID |
0xde |
8 |
BU_WADDR_COMP2_LAST_MB_IN_ROW_LSB |
0xdf |
8 |
BU_WADDR_COMP0_LAST_MB_IN_HALF_ROW_MSB |
0xe1 |
2 | 必须装载 |
BU_WADDR_COMP0_LAST_MB_IN_HALF_ROW_MID |
0xe2 |
8 |
BU_WADDR_COMP0_LAST_MB_IN_HALF_ROW_LSB |
0xe3 |
8 |
BU_WADDR_COMP1_LAST_MB_IN_HALF_ROW_MSB |
0xe5 |
2 |
必须装载 |
BU_WADDR_COMP1_LAST_MB_IN_HALF_ROW_MID |
0xe6 |
8 |
BU_WADDR_COMP1_LAST_MB_IN_HALF_ROW_LSB |
0xe7 |
8 |
BU_WADDR_COMP2_LAST_MB_IN_HALF_ROW_MSB |
0xe9 |
2 |
必须装载 |
BU_WADDR_COMP2_LAST_MB_IN_HALF_ROW_MID |
0xea |
8 |
BU_WADDR_COMP2_LAST_MB_IN_HALF_ROW_LSB |
0xeb |
8 |
BU_WADDR_COMP0_LAST_ROW_IN_MB_MSB |
0xed |
2 | 必须装载 |
BU_WADDR_COMP0_LAST_ROW_IN_MB_MID |
0xee |
8 |
BU_WADDR_COMP0_LAST_ROW_IN_MB_LSB |
0xef |
8 |
BU_WADDR_COMP1_LAST_ROW_IN_MB_MSB |
0xf1 |
2 |
必须装载 |
BU_WADDR_COMP1_LAST_ROW_IN_MB_MID |
0xf2 |
8 |
BU_WADDR_COMP1_LAST_ROW_IN_MB_LSB |
0xf3 |
8 |
BU_WADDR_COMP2_LAST_ROW_IN_MB_MSB |
0xf5 |
2 |
必须装载 |
BU_WADDR_COMP2_LAST_ROW_IN_MB_MID |
0xf6 |
8 |
BU_WADDR_COMP2_LAST_ROW_IN_MB_LSB |
0xf7 |
8 |
BU_WADDR_COMP0_BLOCKS_PER_MB_ROW_MSB |
0xf9 |
2 |
必须装载 |
BU_WADDR_COMP0_BLOCKS_PER_MB_ROW_MID |
0xfa |
8 |
BU_WADDR_COMP0_BLOCKS_PER_MB_ROW_LSB |
0xfb |
8 |
BU_WADDR_COMP1_BLOCKS_PER_MB_ROW_MSB |
0xfd |
2 |
必须装载 |
BU_WADDR_COMP1_BLOCKS_PER_MB_ROW_MID |
0xfe |
8 |
BU_WADDR_COMP1_BLOCKS_PER_MB_ROW_LSB |
0xff |
8 |
表C.11.2 Top-Level寄存器地址发生器键孔(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_WADDR_COMP2_BLOCKS_PER_MB_ROW_MSB |
0x101 |
2 |
必须装载 |
BU_WADDR_COMP2_BLOCKS_PER_MB_ROW_MID |
0x102 |
8 |
BU_WADDR_COMP2_BLCCKS_PER_MB_ROW_LSB |
0x103 |
8 |
BU_WADDR_COMP0_LAST_MB_ROW_MSB |
0x105 |
2 |
必须装载 |
BU_WADDR_COMP0_LAST_MB_ROW_MID |
0x106 |
8 |
BU_WADDR_COMP0_LAST_MB_ROW_LSB |
0x107 |
8 |
BU_WADDR_COMP1_LAST_MB_ROW_MSB |
0x109 |
2 |
必须装载 |
BU_WADDR_COMP1_LAST_MB_ROW_MID |
0x10a |
8 |
BU_WADDR_COMP1_LAST_MB_ROW_LSB |
0x10b |
8 |
BU_WADDR_COMP2_LAST_MB_ROW_MSB |
0x10d |
2 |
必须装载 |
BU_WADDR_COMP2_LAST_MB_ROW_MID |
0x10e |
8 |
BU_WADDR_COMP2_LAST_MB_ROW_LSB |
0x10f |
8 |
BU_WADDR_COMP0_HBS_MSB |
0x111 |
2 |
必须装载 |
BU_WADDR_COMP0_HBS_MID |
0x112 |
8 |
BU_WADDR_COMP0_HBS_LSB |
0x113 |
8 |
BU_WADDR_COMP1_HBS_MSB |
0x115 |
2 |
必须装载 |
BU_WADDR_COMP1_HBS_MID |
0x116 |
8 |
BU_WADDR_COMP1_HBS_LSB |
0x117 |
8 |
BU_WADDR_COMP2_HBS_MSB |
0x119 |
2 |
必须装载 |
BU_WADDR_COMP2_HBS_MID |
0x11a |
8 |
BU_WADDR_COMP2_HBS_LSB |
0x11b |
8 |
BU_WADDR_COMP0_MAXHB |
0x111 |
2 |
必须装载 |
BU_WADDR_COMP1_MAXHB |
0x123 |
2 |
BU_WADDR_COMP2_MAXHB |
0x127 |
2 |
BU_WADDR_COMP0_MAXVB |
0x125 |
2 |
必须装载 |
BU_WADDR_COMP1_MAXVB |
0x121 |
2 |
BU_WADDR_COMP2_MAXVB |
0x133 |
2 |
表C.11.3.水平过采样及C空间键孔地址变换表
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_UH0_A00_1 |
0x0 |
5 |
R/W-Coeff 0.0 |
BU_UH0_A00_0 |
0x1 |
8 |
BU_UH0_A01_1 |
0x2 |
5 |
R/W-Coeff 0.1 |
BU_UH0_A01_0 |
0x3 |
8 |
BU_UH0_A02_1 |
0x4 |
5 |
R/W-Coeff 0.2 |
BU_UH0_A02_0 |
0x5 |
8 |
BU_UH0_A03_1 |
0x6 |
5 |
R/W-Coeff 0.0 |
BU_UH0_A03_0 |
0x7 |
8 |
BU_UH0_A10_1 |
0x8 |
5 |
R/W-Coeff 1.0 |
BU_UH0_A10_0 |
0x9 |
8 |
BU_UH0_A11_1 |
0xa |
5 |
R/W-Coeff 1.1 |
BU_UH0_A11_0 |
0xb |
8 |
BU_UH0_A12_1 |
0xc |
5 |
R/W-Coeff 1.2 |
BU_UH0_A12_0 |
0xd |
8 |
BU_UH0_A13_1 |
0xe |
5 |
R/W-Coeff 1.3 |
BU_UH0_A13_0 |
0xf |
8 |
BU_UH0_A20_1 |
0x10 |
5 |
R/W-Coeff 2.0 |
BU_UH0_A20_0 |
0x11 |
8 |
BU_UH0_A21_1 |
0x12 |
5 |
R/W-Coeff 2.1 |
BU_UH0_A21_0 |
0x13 |
8 |
BU_UH0_A22_1 |
0x14 |
5 |
R/W-Coeff 2.2 |
BU_UH0_A22_0 |
0x15 |
8 |
BU_UH0_A23_1 |
0x16 |
5 |
R/W-Coeff 2.3 |
BU_UH0_A23_0 |
0x17 |
8 |
BU_UH0_MODE | 0x18 | 2 | R/W |
BU_UH1_A00_1 |
0x20 |
5 |
R/W-Coeff 0.0 |
BU_UH1_A00_0 |
0x21 |
8 |
BU_UH1_A01_1 |
0x22 |
5 |
R/W-Coeff 0.1 |
BU_UH1_A01_0 |
0x23 |
8 |
BU_UH1_A02_1 |
0x24 |
5 |
R/W-Coeff 0.2 |
BU_UH1_A02_0 |
0x25 |
8 |
BU_UH1_A03_1 |
0x26 |
5 |
R/W-Coeff 0.0 |
BU_UH1_A03_0 |
0x27 |
8 |
表C.11.3.水平过采样及C空间键孔地址变换表(续)
键孔寄存器名 |
键孔地址 | 位 | 注释 |
BU_UH1_A10_1 |
0x28 |
5 |
R/W-Coeff 1.0 |
BU_UH1_A10_0 |
0x29 |
8 |
BU_UH1_A11_1 |
0x2a |
5 |
R/W-Coeff 1.1 |
BU_UH1_A11_0 |
0x2b |
8 |
BU_UH1_A12_1 |
0x2c |
5 |
R/W-Coeff 1.2 |
BU_UH1_A12_0 |
0x2d |
8 |
BU_UH1_A13_1 |
0x2e |
5 |
R/W-Coeff 1.3 |
BU_UH1_A13_0 |
0x2f |
8 |
BU_UH1_A20_1 |
0x30 |
5 |
R/W-Coeff 2.0 |
BU_UH1_A20_0 |
0x31 |
8 |
BU_UH1_A21_1 |
0x32 |
5 |
R/W-Coeff2.1 |
BU_UH1_A21_0 |
0x33 |
8 |
BU_UH1_A22_1 |
0x34 |
5 |
R/W-Coeff 2.2 |
BU_UH1_A22_0 |
0x35 |
8 |
BU_UH1_A23_1 |
0x36 |
5 |
R/W-Coefff 2.3 |
BU_UH1_A23_0 |
0x37 |
8 |
BU_UH1_MODE |
0x38 |
2 |
R/W |
BU_UH2_A00_1 |
0x40 |
5 |
R/W-Coeff 0.0 |
BU_UH2_A00_0 |
0x41 |
8 |
BU_UH2_A01_1 |
0x42 |
5 |
R/W-Coeff 0.1 |
BU_UH2 A01_0 |
0x43 |
8 |
BU_UH2_A02_1 |
0x44 |
5 |
R/W-Coeff 0.2 |
BU_UH2_A02_0 |
0x45 |
8 |
BU_UH2_A03_1 |
0x46 |
5 |
R/W-Coeff 0.0 |
BU_UH2_A03_0 |
0x47 |
8 |
BU_UH2_A10_1 |
0x48 |
5 |
R/W-Coeff 1.0 |
BU_UH2_A10_0 |
0x49 |
8 |
BU_UH2_A11_1 |
0x4a |
5 |
R/W-Coeff 1.1 |
BU_UH2_A11_0 |
0x4b |
8 |
BU_UH2_A12_1 |
0x4c |
5 |
R/W-Coeff 1.2 |
BU_UH2_A12_0 |
0x4d |
8 |
BU_UH2_A13_1 |
0x4e |
5 |
R/W-Coeff 1.3 |
BU_UH2_A13_0 |
0x4f |
8 |
表C.11.3.水平过采样及C空间键孔地址变换表(续)
键孔寄存器名 |
键孔地址 |
位 |
注释 |
BU_UH2_A20_1 |
0x50 |
5 |
R/W-Coeff 2.0 |
BU_UH2_A20_0 |
0x51 |
8 |
BU_UH2-A21_1 |
0x52 |
5 |
R/W-Coeff 2.1 |
BU_UH2_A21_0 |
0x53 |
8 |
BU_UH2_A22_1 |
0x54 |
5 |
R/W-Coeff 2.2 |
BU_UH2_A22_0 |
0x55 |
8 |
BU_UH2 A23_1 |
0x56 |
5 |
R/W-Coeff 2.3 |
BU_UH2_A23_0 |
0x57 |
8 |
BU_UH2_MODE |
0x58 |
2 |
R/W |
BU_CS_A00_1 |
0x60 |
5 |
R/W |
BU_CS_A00_0 |
0x61 |
8 |
BU_CS_A10_1 |
0x62 |
5 |
R/W |
BU_CS_A10_0 |
0x63 |
8 |
BU_CS_A20_1 |
0x64 |
5 |
R/W |
BU_CS_A20_0 |
0x65 |
8 |
BU_CS_B0_1 | 0x66 | 6 | R/W |
BU_CS B0_0 |
0x67 |
8 |
BU_CS_A01_1 |
0x68 |
5 |
R/W |
BU_CS_A01_0 |
0x69 |
8 |
BU CS_A11_1 |
0x6a |
5 |
R/W |
BU_CS_A11_0 |
0x6b |
8 |
BU_CS_A21_1 |
0x6c |
5 |
R/W |
BU_CS_A21_0 |
0x6d |
8 |
BU_CS_B1_1 |
0x6e |
6 |
R/W |
BU_CS_B1_0 |
0x6f |
8 |
BU_CS_A02_1 |
0x70 |
5 |
R/W |
BU_CS_A02_0 |
0x71 |
8 |
BU_CS_A12_1 |
0x72 |
5 |
R/W |
BU_CS_A12_0 |
0x73 |
8 |
BU_CS_A22_1 |
0x74 |
5 |
R/W |
BU_CS_A22 0 |
0x75 |
8 |
BU_CS_B2_1 |
0x76 |
6 |
R/W |
BU_CS_B2_0 |
0x77 |
8 |
表C.11.3.水平过采样及C空间键孔地址变换表(续)
键孔寄存器名 |
键孔地址 |
位 |
注释 |
BU_UH2_A20_1 |
0x50 |
5 |
R/W-Coeff 2.0 |
BU_UH2_A20_0 |
0x51 |
8 |
BU_UH2_A21_1 |
0x52 |
5 |
R/W-Coeff 2.1 |
BU_UH2_A21_0 |
0x53 |
8 |
BU_UH2_A22_1 |
0x54 |
5 |
R/W-Coeff 2.2 |
BU_UH2_A22_0 |
0x55 |
8 |
BU_UH2_A23_1 |
0x56 |
5 |
R/W-Coeff 2.3 |
BU_UH2_A23_0 |
0x57 |
8 |
BU_UH2_MODE |
0x58 |
2 |
R/W |
BU_CS_A00_1 |
0x60 |
5 |
R/W |
BU_CS_A00_0 |
0x61 |
8 |
BU_CS_A10_1 |
0x52 |
5 |
R/W |
BU_CS_A10_0 |
0x63 |
8 |
BU_CS_A20_1 |
0x64 |
5 |
R/W |
BU_CS_A20_0 |
0x65 |
8 |
BU_CS_B0_1 |
0x66 |
6 |
R/W |
BU_CS_B0_0 |
0x67 |
8 |
BU_CS_A01_1 |
0x68 |
5 |
R/W |
BU_CS_A01_0 |
0x69 |
8 |
表C.11.3.水平过采样及C空间键孔地址变换表(续)
BU_CS_A11_1 |
0x6a |
5 |
R/W |
BU_CS_A11_0 |
0x6b |
8 |
BU_CS_A21_1 |
0x6c |
5 |
R/W |
BU_CS_A21_0 |
0x6d |
8 |
BU_CS_B1_1 |
0x6e |
6 |
R/W |
BU_CS_B1_0 |
0x61 |
8 |
BU_CS_A02_1 |
0x70 |
5 |
R/W |
BU_CS_A02_0 |
0x71 |
8 |
BU_CS_A12_1 |
0x72 |
5 |
R/W |
BU_CS_A12_0 |
0x73 |
8 |
BU_CS_A22_1 |
0x74 |
5 |
R/W |
BU_CS_A22_0 |
0x75 |
8 |
BU_CS_B2_1 |
0x76 |
6 |
R/W |
BU_CS_B2_0 |
0x77 |
8 |
C.13图象尺寸参数
C.13.1前言
下面格式的编码碎片详细说明的对应来自写地址发生器的图象尺寸中断所需的处理要求。注意,图象尺寸参数可通过发送HORIZ-ONTAL_MBS,VERTICAL_MBS和DEFINE-SAMPLING(对每个分量)令牌的组合而改变“on-the-fly”,结果产生写地址发生器中断。这些令牌可以以任何次序到达,而且通常,任意一个都需要对图象尺寸参数重新计算。然而在设置时间,在执行任何计算之前检测所有事件的到达将更加有效。
在设置时,给图象尺寸参数寄存器写入特定值是可能的,因此可以不依赖对应于令牌的中断处理。因为这个原因,也给出了对SIF图象的适当的寄存器值。
C.13.2图象尺寸参数的中断处理
存在5种图象尺寸事件,每个事件的初始响应如下给出:
if(hmbs_event)
load(mbs_wide);
else if(vmbs_event)
load(mbs_high):
else if(def_samp0_event)
(
load(maxhb(0));
load(maxvb(0));
)
else if(def_samp1_event)
(
load(maxhb(1));
load(maxvb(1));
)
else if(def_samp2_event)
(
load(maxhb(2));
load(maxvb(2));
)
此外,为保持一致的图象尺寸参数,需要下面的计算:
if(hmbs_event||vmbs_event||
def_samp0_event||def_samp1_event||def_samp2_event)
(
for(i=0:i<max_component;i++)
(
hbs(i)=addr_hbs(i)=(maxhb(i)+1)·mbs_wide;
half_width_in_blocks(i)=((maxhb(i)+1)·mbs_wide)/2:
last_mb_in_row(i)=hbs(i)-(maxhb(i)+1):
last_mb_in_half_row(i)=half_width_in_blocks(i)-
(maxhb(i)+1):
last_row_in_mb(i)=hbs(i)·maxvb(i);
blocks_per_mb_row(i)=last_row_in_mb(i)+hbs(i):
last_mb_row(i)=blocks_per_mb_row(i)·(mbs_high-1):
尽管,并不严格要求根据图象尺寸中断去修改dispaddr寄存器的值(例如显示窗口尺寸)。根据具体应用的要求,可能希望这样做。
C.13.3对SIF图象的寄存器值
在对SIF进行如上中断处理以后,包括在所有图象尺寸寄存器中的值,对4∶2∶0流将如下所示:
C.1 3.3.1初始值
BU_WADDR_MBS_WIDE=0x16
BU_WADDR_MBS_HIGH=0x12
BU_WADDR_COMP0_MAXHB=0x01
BU_WADDR_COMP1_MAXHB=0x00
BU_WADDR_COMP2_MAXHB=0x00
BU_WADDR_COMP0_MAXVB=0x01
BU_WADDR_COMP1_MAXVB=0x00
BU_WADDR_COMP2_MAXVB=0x00
C.13.3.2第二次值-计算以后
BU_WADDR_COMP0_HBS=0x2C
BU_WADDR_COMP1_HBS=0x16
BU_WADDR_COMP2_HBS=0x16
BU_ADDR_COMP0_HBS=0x2C
BU_ADDR_COMP1_HBS=0x16
BU_ADDR_COMP2_HBS=0x16
BU_WADDR_COMP0_HALF_WIDTH_IN_BLOCKS=0x16
BU_WADDR_COMP1_HALF_WIDTH_IN_BLOCKS=0x0B
BU_WADDR_COMP2_HALF_WIDTH_IN_BLOCKS=0x0B
BU_WADDR_COMP0_LAST_MB_IN_ROW=0x2A
BU_WADDR_COMP1_LAST_MB_IN_ROW=0x15
BU_WADDR_COMP2_LAST_MB_IN_ROW=0x15
BU_WADDR_COMP0_LAST_MB_IN_HALF_ROW=0x14
BU_WADDR_COMP1_LAST_MB_IN_HALF_ROW=0x0A
BU_WADDR_COMP2_LAST_MB_IN_HALF_ROW=0x0A
BU_WADDR_COMP0_LAST_ROW_IN_MB=0x2C
BU_WADDR_COMP1_LAST_ROW_IN_MB=0x0
BU_WADDR_COMP2_LAST_ROW_IN_MB=0x0
BU_WADDR_COMP0_BLOCKS_PER_MB_ROW=0x58
BU_WADDR_COMP1_ELOCKS_PER_MB_ROW=0x16
BU_WADDR_COMP2_BLOCKS_PER_MB_ROW=0x16
BU_WADDR_COMP0_LAST_MB_ROW=0x5D8
BU_WADDR_COMP1_LAST_MB_ROW=0x176
BU_WADDR_COMP2_LAST_MB_ROW=0x176
注意,如果这些值明确地在设置时被写入,那么必须考虑大部分单元的多字节特性。
注意附加图,这些图对那些具有本领域一物般技术的人作了解释,它们包括这种应用,以进一步理解本发明对外界的详细结构和操作的功效。
上面说明的本发明的流水线系统满足一长期存在的需求,以改进系统。本发明所涉及的改进的流水线系统有一个输入,一个输出及输入和输出之间很多处理级。这很多的处理级由双线接口把内部连结起来,沿流水线传输令牌,而控制和/或数据令牌以通用适应单元的形式,在流水线中与所有处理级相接口,在流水线中与选定的级相交互,以完成在处理级中控制数据和/或联合控制-数据功能,所以,在流水线中的处理级,在配置和处理中被提供高度的灵活性。根据本发明,处理级可以根据至少识别的一个令牌而能被配置。处理级的一个可以是起始码检测器,这个检测器接收输入并产生和/或转换令牌。
本发明亦可以包括PICTURE_START码令牌形式的令牌,以表示图象的开始将跟随在后面的数据令牌后,一个PICTURE-END令牌表示一个独立图象的结束,一个FLUSH令牌用来清除缓冲器并复位系统,而CODING_STANDARD令牌用来决定系统环境,选择很多图象压缩/解压缩标准中的一个进行处理。本发明也涉及一个改进的流水线系统以解码视频数据,并且具有一Huffman解码器,一个指向数据索引(ITOD)级,一个算术逻辑单元(ALU)和一个直接跟在系统后面的数据缓冲装置,从而对各种数据尺寸的视频图象的时间扩展可被控制。根据本发明还有一处理级接收输入数据流,这级包括为识别指定位流模型的装置,从而,处理级便于随机存取和错误恢复。本发明也包括一个装置,以实现图象停止以后的操作,以得到对图象数据解码的清尾,以指示图象的结束,并清除流水线。
改进的流水线系统亦包括一个固定大小,固定宽度的缓冲器,及一种装置,它填充缓冲器并通过缓冲器传送任意位的数。本发明亦涉及一包括游程长度编码的数据流,及一个逆向模式化器装置。该装置根据令牌使数据流有效,这令牌用来扩展游程级编码成零数据的游程跟随一个级,因而,每个令牌用指定值数来表示。本发明亦包括一个逆向模式化级,一个反向离散余弦变换级及一个处理级,这处理级位于逆向模式化级和逆向离散余弦变换级中间,对处理数据令牌表起作用。
此外,本发明涉及一个改进的流水线系统,该系统有一个Huffman解码器,它根据H.261,JPEG或MPEG标准所规定的Huffman编码,解码按此编码的数据字。这数据字包括一标识符,它标识Huffman码标准,在这个标准下数据字被编码。装置用来接收Huff-man编码数据字,装置用来读出标识符,以确定那种标准来控制所接收数据字的Huffman码。如果需要,根据读出的标识符,标识Huff-man码数据字是,如H.261 Huffman码或MPEG Huffman码。装置可以连接到Huffman码数据字接收装置上操作,以产生一个索引号,这个索引号同每个JPEG Huffman码数据字有关,而这个数据字来自Huffman码数据字接收装置。这个装置用来操作一查找表,表中包括一个Huffman码表,这个表具有用在JPEG标准下的格式,以传送JPEG Huffman表信息,包括一个接收索引号的输入,这索引号来自索引号产生装置,还包括一个输出,它是对应于索引号的解码数据字。
改进的系统包括一个多标准视频解压缩装置,该装置有很多级,这些级被排列成如流水线处理机的双线接口内部相连。控制令牌和数据令牌通过单个的双线接口,以令牌格式传送控制数据。一令牌解码电路放置在某些级内,以识别某些令牌是与该级有关的作为控制令牌,并沿流水线传递不认识的控制令牌。重新配置的处理电路是位于选中级内,并对一个识别的控制令牌作出响应,以重新配置这样的级去处理一个辨认出的数据令牌。为了实施这个系统,很多种独特的支持子系统电路和处理技术已经公开。
从上面可明显地了解到,尽管图示和解释的是本发明的特定形式,还可以作出各种修改而不脱离本发明的精神和范围。因此,本发明的保护范围应以所提出的权利要求为准。