目前,存在着许多这样的系统,其中多个代理程序需要共享公共资源,而且在某个特定时刻只允许一个代理程序访问共享资源。比如,多个处理器共享一个公共存储器的数据处理装置就是这样的一个系统。在本文献中,术语“代理程序”既用来指一个程序模块,又可以指一个通过程序模块执行的进程(理解为一个给定的程序模块可以执行多个的进程)。
各代理程序采用不同的方案来管理共享资源的访问。某些系统采用时隙(time-slotted)访问方案,在该方案中,每个代理程序在预定的时刻、预定的时间段内访问共享资源,并且以预定的次序重复地执行上述共享资源的访问。其他系统采用如下方案:即该方案中,代理程序可以在需要访问的时候发出访问请求,而如果同一时刻出现多个请求的话,可以通过仲裁器(arbitor)来决定某个访问请求是否通过。仲裁器通过执行仲裁方案来管理不同的访问请求,仲裁方案经制定能够确保每个代理程序都可以在其所需的足够时间段访问共享资源。通常,这就是指每个代理程序所需的“带宽”。
WO98/12645阐述了一种用于如下系统的总线仲裁方法和设备,该系统中,集成在微处理芯片上的多个装置(中央处理器(CPU),数据和指令缓存器,图形处理器等)通过共享总线访问芯片外的公共存储器(同步DRAM)。在该系统中,对需要总线访问的不同代理程序进行带宽的权重分配,仲裁器执行可保证每个装置都能接收到所需要的带宽分配的仲裁方案。
图1显示了一个模块的典型运行环境,该模块采用了时隙访问方案;在该例子中,模块是一个处理器PROC,而共享资源是存储器MEM。模块PROC可以通过接口INT访问存储器MEM。图1中仅仅显示了一个模块PROC,但是应该理解为:通常可以在单个芯片IC1中集成多个这样的模块。而且,如图所示,尽管存储器接口是在芯片上的,应该这样理解:本发明也适用于存储器接口放在芯片外的情况。接口INT允许模块PROC依照存储器访问方案访问存储器MEM,根据该访问方案,为模块PROC预留了预定的时间段以向存储器MEM传送或者从存储器MEM接收数据。
接口INT是可配置的,也就是说,模块的特定时间段的分配是可以改变的。控制器CONT向接口INT提供控制数据,为芯片上的各个模块指定访问存储器MEM的时隙。控制器CONT也向模块PROC提供控制数据,以便向其传达应该从存储器MEM中读取或向存储器写入数据的预定时间段(经由接口INT内部的缓冲器)。由于处理模块的访问时间段的分配,相对来说很少发生变化,因而只有在需要改变配置的时候,才把这些控制数据发送给接口和处理模块。
通常,芯片中的每个处理模块不断重复执行相同的处理功能,只不过处理的都是新的数据而已。比如,在图1中的IC1是MPEG解码器的核心的情况下,通过一组处理模块,在组成一帧图像信号的连续宏模块中重复执行某些预设功能。IC1内部的控制器CONT向处理模块和接口输出同步信号(在该例子中,信号指桢启动信号和宏模块启动信号),作为决定何时出现不同的预定时间段的参考。控制器也向接口输出地址数据,该地址数据标志了有关宏模块或在特定的时间段由给定的模块处理的像素线数据存放在存储器MEM中的位置。这些地址数据,通常以首地址和一系列连续加以访问的地址加以定义。在某些情况下,由模块发出的给定请求是否能够访问地址数据,取决于另一个模块(可以是相同物理装置的另一个进程)的某些计算结果。在这种情况下,控制器从执行计算的模块中接收与结果相关的数据,随后产生地址数据。
如果接口INT读/写数据的速度和模块PROC的速度不一致,那么可以在接口INT和模块PROC之间接入一个模块PROC专用的缓冲器BUF,用以存贮从存储器MEM中读取的、将交给这一模块处理的数据。在该情况中,令模块PROC在预定的时间区间从缓冲器读取或写入数据。这种情况中,在读取操作过程中,如果模块PROC没有从缓冲器中接收到标志数据存在于当前缓冲器的应答信号,那么该模块的操作就被延迟,直到随后的询问被应答为止。
在图1的时隙存储器访问方案中,把模块PROC设计成可通过向存储器接口发出请求(或者,某些情况下,向缓冲器发出请求),在所设期间的预定的时间段内接收或输出数据。
图2显示了一个典型的系统,该系统包括一个可对多个代理程序的不同请求进行仲裁的仲裁器。在该例子中,代理程序再次为共享公共存储器MEM的处理模块PROC,图2中仅仅显示了芯片IC2中的一个代理程序。在该情况中,接口INT与仲裁器ARB相结合,把一种仲裁方案用于决定在特定的瞬间,多个有效访问请求中哪个请求获得通过。仲裁方案可以是一个循环方案(round-robin),也可以是根据分配给不同模块的优先级(可能是可变的优先级)的方案或可为任何其他已知的仲裁方案。将获得通过的访问请求传送给存储器接口MIF,存储器接口处理对存储器MEM的物理访问,并且处理MEM和PROC之间数据路由。
在该系统中,从给定模块发出请求到仲裁器响应这一请求后授予访问权的这段时间间隔的长短,预先是未知的。因此,在每个模块和接口之间,为该模块提供一个缓冲器BUF。这些中间缓冲器可以采用单一的静态存储器(SRAM),静态存储器具有专属于不同模块的单独部分。
在图2的仲裁存储器访问方案中,模块在不同的时间和不同的周期发出访问请求,模块可以在不同周期的、不规则的间隔点,接收与/或输出数据。
在某些情况下,人们也希望可以在单系统中采用适用于不同资源访问方案的模块。比如,在MPEG编解码器环境中,可以出现编码器和解码器芯片(集成电路)分别独立设计的情况,解码芯片可以采用仲裁器对解码器中不同进程发出的请求进行选择,而编码器则采用时隙访问管理方案来确保其进程获取对主存储器的请求访问。尽管允许编码器芯片和解码器芯片采用独立的存储器,但是,显然这将增加编解码器的成本和复杂性。较佳的做法是为这两种芯片提供一个公共存储器,因而必须使用单一方案来管理这一公共存储器的访问。
为了减低成本,更倾向于尽可能使不同的集成电路保持不变的结构。先期经验反对使用时隙存储器访问方案,因为,在适用于请求仲裁方案的模块的访问请求发出的时刻和周期内,数据来不及准备。
请求仲裁存储器访问方案具有如下优点:即它在不同的、需要访问存储器的模块之间提供了足够的带宽分配。然而,对于依照时隙方案设计的模块,在采用请求仲裁方案时存在一个问题,这是因为它很难保证在周期性的模块PROC的编程时间间隔,数据为可读。
更具体地说,在模块PROC等待从公共存储器读取或向公共的存写入数据的期间,需要提供较高的访问带宽。在某些情况下,存储器可能根据不允许如此高的带宽访问(总线性能不适当)。然而,即便在允许高带宽访问的情况中,如果当模块PROC提出请求的时刻,另一个模块正在访问存储器,那么也不可以中断这一访问。解决该问题的一个办法是改变仲裁方案的设计,以向来自PROC的请求授予较高的优先级。然而,该办法不能完全避免模块PROC在读取访问中数据下溢的危险。
下文中将就MPEG编解码器对本发明进行说明,MPEG编解码器由采用时隙存储器访问方案的编码器和采用对存储器访问请求进行仲裁的仲裁器的解码器组成。然而,应当理解为本发明可以应用在较大范围的其他的环境中。编码器相应于图1中普通类型的集成电路,而解码器相应于图2中所说明的一个普通类型的集成电路。此处假设编码器和解码器集成电路的起初设计目的并不是把它们用于公共系统。如果要把这些集成电路集成到公共系统中,那么必须对元件集成电路的结构做某些改动,但是,本发明中,集成电路结构所需改变的程度降到了最低限度。
在对编解码器的结构和操作展开说明之前,有必要对编码器和解码器集成电路的初始设计和配置的特点进行解释。
在本发明的示例中,解码器集成电路的初始设计包括多个进程,这些进程发出请求以便通过存储器接口访问SDRAM,而请求发出的时间以及持续的时间,事先是不知道的。这些进程包括显示(DISPLAY)、屏幕显示(On Screen Display)、画中画(Picture in Picture)、INTERP,运动补偿(Motion Compensation)、视频先入先出写(VideoFIFO Wrire)、视频先入先出读(Video FIFO Read)、音频先入先出写(Audio FIFO Write)、音频先入先出读(Audio FIFO Read)、音频重复写(Audio Write Back Write)以及音频重复读(Audio WriteBack Read)。
显示(DISPLAY)进程涉及解码图像的显示。屏幕显示(OSD)进程涉及叠放在所显示的解码图像上的图形数据的显示。画中画(PIP)进程涉及作为背景的静态图像的显示,或显示经解码和处理的图像。INTERP进程涉及MPEG解码的最后一部分,提供载入SDRAM的解码图像以便显示或当作参考图像使用它们,或两者兼之。运动补偿(MC)进程涉及运动补偿,是MPEG视频解码中的一步。视频先入先出写(VFW)、视频先入先出读(VFR)、音频先入先出写(AFW)、音频先入先出读(AFR)进程涉及经编码的视频和音频数据的写和读,这些视频和音频数据由解密电路/译码电路从MPEG数据流中提取。音频重复写(AWRBW)和音频重复读(AWRBR)进程涉及来自音频处理器的中间结果的写和读。这些进程在本申请人的较早的欧洲专利第00203007中有说明。这些进程的细节在运动图象专家组所定义的不同标准中有详细说明,本文中不再作进一步的说明,因为所有这些细节对于理解本发明来说并非必不可少。
解码器集成电路的存储器接口包括一个请求包装器(wrapper),其功能是将解码器的进程请求以与MMI相兼容的方式发送给MMI。存储器接口也包括一个充当内部缓冲器BUF的SRAM,该SRAM用来保存属于经由MMI处于主存储器和解码器进程之间的请求的数据,直到该请求在仲裁中获得通过为止。动态存储器分成几个缓冲器(先入先出),这些缓冲器从外部SDRAM中接收各自进程的数据。解码器DMA接口中还提供一个元件(未在图中加以显示),该元件把每个请求与相对应的数据关联起来,从而确保数据与中间缓冲器中的FIFO之间正确的路由选择。该元件管理SRAM中的每个进程的FIFO的指针和数据流。
编码器集成电路中包括一个可配置的、以时隙方式运行的存储器访问接口。CPU充当集成电路的控制器,并且向存储器接口下载一个含有编码器中不同进程之间的存储器带宽分配的表。这些进程包括:由宏模块处理器(MBPcurrent)处理的当前宏模块,基本音频流输入(AESin),基本视频流输入(VESin),基本音频流输出(AESout),基本视频流输出(VESout),多路转换指令输入(Munxcom_in),多路转换指令输出(Munxcom_out),宏模块处理器候选(MBPcand,具体地说为MBPcand1-MBPcand5),宏模块处理器优胜者色彩(MBPwincolor),宏模块处理器写回(MBP WR BK),以及视频前端(VFE)。再次说明,本文中不对这些进程的细节做详细说明,因为对于理解本发明来说,这些细节并非不可少。
下载的表与编码器中的不同进程所发出的各种请求的起始时间相对应。以下的表1中给出了上述表的一个例子。应当理解的是,表1中列出的各种进程并非一定要涉及相同的宏模块(换句话说,MBPcand数据涉及当前正在被处理的宏模块,此处指MBK+1,MBP_Wincolor数据涉及四个宏模块前面的宏模块(也就是MBK-3))。而且,通常情况下,1ES_in,VES_out,AES_in,AES_out,Mux_Com_in,Mux_Com_out和VFE进程,并不处理有关宏模块的数据,而是处理有关其他元件的数据,比如像素线。
表1
进程 |
读/写 |
请求号 |
脉冲串/请求号 |
请求开始周期 |
MBP_current(MBk+1) |
R |
1 |
6 |
0 |
MBP_cand(MBk+1) |
R |
5 |
13 |
15,33,51,69,87 |
MBP_wincol(MBk-1) |
R |
1 |
6 |
103 |
VES_in |
R |
3 |
1 |
120,132,136 |
AES_in |
R |
3 |
1 |
147,151,155 |
Mux_com_in |
R |
1 |
1 |
130 |
VFE_out |
W |
22 |
1 |
7,9,11,13,29,31,47,49,65,67,83,85,101,110,122,124,126,128,134,145,149,153 |
AES_out |
W |
1 |
1 |
112 |
VES_out |
W |
3 |
1 |
114,116,118 |
MBP_WR_BK(MBk-3) |
W |
1 |
6 |
138 |
Mux_com_out |
W |
1 |
1 |
157 |
表1中的进程的起始时间,以图标的方式标在图3a)中,参照各个请求开始的周期号,图3a)中采用不同高度的柱体来更好地区分不同进程产生的请求。此外,图3a)中采用了实线和虚线柱体来区别相同类型的输入和输出信息。
主编码器和解码器进程,列在下面的表2中,表中还列出了编码器和解码器集成电路单独操作时(也就是说,未把它们关联于编解码器中),所使用的带宽的指标。
表2
译码器进程 |
带宽(M字节/秒) |
Encoder processes |
带宽(M字节/秒) |
DISPLAY |
21.85 |
MBP current |
15.36 |
OSD |
13 |
AESin |
7.68 |
PIP |
10.25 |
VESin |
7.68 |
INTERP |
15.5 |
AESout |
2.56 |
MC |
45 |
VESout |
7.68 |
VFW |
2.5 |
Muxcom_in |
2.56 |
VFR |
2 |
Muxcom_out |
2.56 |
AFW |
1.15 |
MBP cand |
166.4 |
AFR |
1.15 |
MBPwincolor |
15.36 |
AWRBW |
1.15 |
MBP WR BK |
15.36 |
AWRBR |
1.15 |
VFE |
36 |
合计 |
114.7 |
合计 |
279.2 |
当编码器和解码器集成电路集成在一个公共系统中,而且该系统中存储器的访问由请求仲裁来处理,则具有高优先级的编码器访问请求,不会被延迟,即确保在给定时刻必须为给定进程提供数据。然而,仍然有必要为解码器进程保证所必须的带宽。
图4显示了依照本发明的一个优选实施方案的编解码器的主要元件。该实施方案中集成有上文中已说明的编码器和解码器集成电路。除了编码器和解码器芯片外,编解码器还包括一个SDRAM类型的存储器,一个系统CPU和总线控制器(BCU),相关的外设接口总线(PI_bus)用来控制整个系统,主存储器接口(MMI)包括一个仲裁器P_ARB,仲裁器可以对编码器、解码器进程和系统CPU发出的请求进行仲裁。MMI接口也包括一个SDRAM控制器,用来处理对SDRAM的物理访问。系统CPU、BCU以及相关总线构成了所谓的“系统域”(信号域)。
系统CPU用来驱动编码器和解码器,以及运行应用程序。系统CPU周期性地访问动态存储器,动态存储器的频率基于系统的时钟频率,并取决于所采用的动态存储器的类型。来自系统域的CPU的存储器访问请求,其延迟较短(也就是说,在发出请求和请求获得通过之间只允许很短的延迟)。从而,系统CPU的请求必须分配最高优先级,更具体地说,它应该优先于所有信号域(signal domain)请求。在本发明的优选实施方案中,信号域进程仲裁器P_ARB可以中断代表信号域中的进程所发出的对动态存储器的访问,转而支持来自系统域CPU的访问请求。当系统CPU的请求得到应答以后,再转向信号域中的进程请求,允许其从中断点继续访问。
编码器和解码器芯片的直接存储器访问(DMA)接口,与信号域仲裁器P_ARB相连。DMA接口和信号域接口(MMI)之间的数据交换,采用16个存储器字串(在该例子中,每个存储器字为32比特)。相比之下,不同编码器读写进程和编码器DMA接口之间的数据交换每个请求涉及8个存储器字串。
例如,访问请求涉及编码或解码DMA接口和信号域仲裁器P_ARB之间以及编码器或解码器DMA接口和发出请求的编码器/解码器进程之间的请求和应答信号的交换。更具体地说,编码器DMA接口的先行请求发生器把先行读请求(ant-read-req)发送给P_ARB并回收应答信息(ant-read-ack)。编码器DMA中的写请求缓冲器把写请求(wr-req)发送给P_ARB并从P_ARB中回收应答信息。解码器DMA接口把读和写的类型请求(req)发送给P_ARB,并回收应答信息(ack)。也可以采用任何便利的请求/应答协议,信号域中的不同元件对儿可以采用不同的协议。
信号域仲裁器P_ARB,在仲裁算法的选择上非常灵活,这是因为它包含多个状态机,可以把这些状态机配置成不同的优先级。如上文所说,最高优先级分配给系统域CPU所发出的请求。对每个状态机进行配置以执行固定的优先级方案。对这一方案这样地加以设计:各个状态机能够以特定的次序通过状态,对每个状态中具有最高优先级请求的进程加以设置,以保证为每个进程分配足够的带宽。
参见图4会发现,由于解码器是集成在编解码器中的,解码器集成电路的结构并没有发生变化。然而,解码器进程发出的请求,交给了位于MMI中的仲裁器(P_ARB)来处理,而不是由放置在图2中的芯片内的接口中的仲裁器来处理。
对于编码器集成电路,内核结构(控制器CPU和处理器)几乎不发生任何变化,但是需要对DMA接口的结构进行修改,从而使该集成电路能够集成到采用基于请求仲裁存储器访问方案的系统中。更具体地说,编码器DMA接口中具有一个先行请求发生器ARG,该先行请求发生器可以在解码器模块需要获取相关数据的时刻之前产生读取请求,并发送给进程仲裁器P_ARB,从而可以从动态存储器中读取所需要的数据,并将其存放在内部缓冲器BUF中,同时也向编码器DMA接口提供数据。
为了能够产生先行请求,先行请求发生器必须获取有关不同编码器进程发出读请求的时间信息以及有关待读取数据在动态存储器中的地址信息。在宏模块处理操作开始之前,编码器内核控制器将上述其配置表(如表1中所给的例子)下载到ARG中,从而通知ARG有关不同编码器内核进程的读请求发出的时间。该配置表是可编程的并且包括有关每个进程的请求数目的数据、每个请求从动态存储器中的读取数据的字串数以及每个请求的起始周期数,如表1所示。
然而,不同的读请求对应的地址数据成为可读的时刻是不同的。某些编码器读请求所需的地址数据成为可读的时间非常晚,以至几乎不能对其作出预测。然而,不同宏模块处理器操作发出的读请求,是可以预测的。
图3b针对图1中所给出的例子显示了有关宏模块处理的不同类型的编码器读请求的可预测时间可以发现,对于有关宏模块MBPk的MBP候选4和5有关的读请求(读取)所需要的地址数据,只有在涉及先前的宏模块MBPk-1的计算完成之后,才成为可读,这一步产生于MBP_can4和MBP_can5发出读取请求(1个MAD时间相当于18个编码器系统时钟周期)之前3个平均间隔时间(3 mean Average Distance3_MAD)。对于MBP候选1,2和3的读取,相应的间隔分别为3,4和5_MAD时间,而对于与MBP_wincol,AES/VES_out和VFE_out相关的读请求,相应的间隔分别为1,9和9个MAD时间。某些偶然情况下,并非所有编码器进程读请求都是可预测的。
在本发明的这一实施方案中,内核控制器产生多个同步信号,包括Framerdy信号,MBP启动信号和Mem启动信号。Framerdy信号是同步脉冲,发送给ARG和编码器里的模块,该信号通知每帧图像信号处理的起始点。MBPStart是同步脉冲,发送给ARG和编码器集成电路里的宏模块处理模块,该信号通知桢范围内的宏模块处理的起始点。Memstart是同步脉冲,在MBPStart脉冲之前3_MAD时间发生,并发送给ARG,以便引发ARG产生先行请求。ARG在相关进程发出相应的读请求的相同的相对时间段产生先行请求,但是在进程发出其请求时刻之前3_MAD时间产生。由信号域仲裁器,P_ARB所实现的仲裁方案可以保证:在相关进程需要读取数据的之前,这一提前量足以确保把数据放入中间缓冲器中。
在本实施方案中,ARG根据从编码器集成电路的内核控制器中下载的配置表产生预先访问请求,这与内核控制器采用时隙访问为某一环境(environment)产生先行请求是相同的。然而,本发明并不局限于这种情况。发送给ARG、并作为产生预先访问请求的依据的查寻表可以是不同的。比如,对于不同的进程,由于各自的地址数据对于这些不同的访问成为可读的时间周期各不相同,预先访问请求和对相同进程的相应请求的发出之间的间隔,是可以不同的。而且,由于地址数据可以远远提前成为可读状态,所以ARG甚至可以在查寻表的0周期时刻提出预先访问请求。
编码器内核控制器也为ARG和编码器模块的不同请求提供逻辑地址数据。这一逻辑地址数据标志了图像中宏模块(或模块)所在的位置。这些逻辑地址数据通过ARG内部的转换电路转换成物理地址数据,ARG根据存储在同样位于ARG内部的寄存器中的参数、通过计算,产生物理地址数据,ARG所产生的物理地址指出开始地址、访问类型和存储器中待读取的数据的字串数(假如待读取的数据在动态存储器中是不连续的话,比如,在如下情况下:当动态存储器以像素线的形式组织时,通常这些数据可能以x和y坐标的形式表示)。ARG能够从逻辑地址和进程类型中产生所需要的物理地址数据。可以根据从内核控制器接收的逻辑地址信号的时间先天地获知进程类型。包含在配置表(比如表1)中的信息用来减少有关待读取的字串数的数据。
上述论述中,假设编码器和解码器DMA接口都能产生一个单一的请求和一个单一的相关地址,以便访问动态存储器中的两个字串数据(这两个字串通常对应于连续字串数据)。然而,事实上,依赖用于把动态存储器中的数据与不同编码器和解码器进程关联起来的存储器映射是不可能的。比如,有关解码器数据的存储器映射可能是这样的:把一对将经由一个单一请求加以访问的字串保存在动态存储器的相同的行地址但不同的存储体中。在这种情况下,每个请求用一个单一地址就足可以引发对动态存储器中两个字串的写入或读取。然而,有关编码器数据的存储器映射可能不允许两个保存在不同存储体中的连续的字串使用相同的行地址。
上述问题可以采取以下方法加以解决:
●可以改变动态存储器中的编码器数据的存储器映射(然而,如果已经针对编码器进程对存储器映射进行了优化,那么这一步是不可取的),
●可以在发送给动态存储器接口的地址中包含一个偏移量。然后首地址可以判定放置在第一存储体中的数据的位置,偏移量将被添加到首地址中以标志放置在第二存储体中数据的位置,或
●为了能用一个具有两个相关地址的单一请求表示一对请求,可以在两个连续的编码器请求和它们各自的地址之间作一个关联。这种方法需要采用由进程仲裁器中的主状态机实现的仲裁方案,以便把分配给编码器进程的每个状态换成两个连续的状态,每个字串请求各一个。
对于编码器的写操作,把由进程在预定时间段产生的每个写请求输入到编码
器DMA接口中的写请求缓冲器中,并在编码器DMA接口的数据缓冲器中载入有关数据。发出这一写请求的进程无需进一步的操作。然后编码器DMA接口向P_ARB输送一个写请求。当写处理获得由P_ARB执行的仲裁的许可之后,便向编码器DMA接口发送一个应答信号(wr_ack),并把数据缓冲器中的数据通过MMI接口传输到动态存储器中。
如上文所述,ARG产生的先行请求引发对动态存储器中数据的读取,并其载入编码器MDA接口的中间缓冲器中。通常,把中间缓冲器动态存储器组织成一系列FIFO,每个进程具有一个读FIFO和一个写FIFO。在ARG把一个先行请求(或者写请求缓冲器发送一个写请求)发送给进程仲裁器时,向相应于有关进程和访问类型的FIFO发送一个信号,通知其准备接收数据。根据表1中所给出的时间,当到达编码器进程向中间缓冲器发送一个读请求的时刻时,这一发送将采用原先在时隙系统中实现编码器所采用的供存储器接口使用的地址。该地址不供用在编码器DMA接口中的中间缓冲器使用。因此,该缓冲器包括一个地址解码器,地址解码器可以把旧编码器集成电路接口的地址和用在正处于处理的进程的中间缓冲器中的实际地址相互转换。所需要的地址转换比较简单,这里假定所涉及的进程可以从请求时间中获知。然后就可以清空适当的FIFO。
编码器DMA接口中的中间读/写数据缓冲器的FIFO是多维的,从而确保不会发生数据溢出。先行请求的产生时刻以及仲裁方案的设计,可以确保数据不发生溢出。
下面将结合图5和6对P_ARB执行的仲裁算法进行说明。从图5中可以发现,进程仲裁器包括多个分级排列的状态机。为每个状态机定义一系列状态,为每个状态设定一个具有最高优先级的单一的请求。可以把主状态机中的某些状态视为“自由状态”,因为在状态机处于“自由”状态时刻,不存在最高优先级类型的请求。在这种情况下,状态机的输出中显示没有任何请求已获得通过。不同的请求在各自的状态机中互相竞争,然后,较低等级的状态机中获胜的请求再与分级结构中与其相邻的最高等级的状态机中的请求进行竞争。
更具体地说,进程仲裁器包括一个第一优先级主状态机(图5中标为“main state machine”),以及一个在主状态机中的获胜请求和其他的不同请求之间进行固定优先级选择的单元。从图5中可以发现,进程仲裁器中获胜的请求并不能保证得以通过;在动态存储器接口中执行的仲裁方案中,它必须与来自系统CPU的请求作进一步的竞争。在动态存储器接口中执行的仲裁方案将最高优先级分配给系统CPU的请求。
早先的仿真促进了有关包含信号域进程仲裁器P_ARB的状态机的某些规则的发展。特别是,从第一优先级状态机去掉所有非周期性和和时间限制性进程(比如,VES_out,AES_out)认为是可取的。这使得第一优先级状态机中的周期性进程多个自由状态可以更好地共享带宽。然后,这些自由状态可供那些在较低优先级的状态机中获胜的请求使用。另外,还决定从第一优先级状态机中去掉一个时间限制性进程(MBP_Wincolor)。仿真表明当MBP_Wincolor在第一优先级状态机中竞争时,该请求类型的共享时间的效率不够高。当该请求类型用作第二优先级状态机的输入,并且利用第一优先级状态机中的自由状态时,会获得较好结果。
从而,主状态机处理最高优先级和周期性的编码器和解码器进程,以及大多数其时间特性必须加以控制的进程。在本例子中,主状态机处理的请求类型是涉及宏模块处理(即MBP_current,MBP_Cand1-5,MBP_WR_BK)、编码器视频前端进程、以及解码器中的以下周期性进程的编码器请求:DISPLAY、OSD、PIP、VFW、VFR、AFWO、AFW1、AFR和AWRW。
图6a显示了54个状态的次序,这些状态由图5中的主状态机重复遍历。这一主状态机完全遍历一组状态所花的时间大约为3MAD,取决于存储器的频率(本例子中是133MHz)。在108MHz下,为了处理一个宏模块主状态机必须转大约三圈(周期),显了处理一个图像像素线需要花大概9各周期。图6a中带有标有星号的状态相应于这样的一些状态:其中根据由图6b中的相关的状态机所定义地次序,一组请求中的一个请求周期性地具有最高优先级。换句话说,图5中的主状态机采用三个互联的状态机来实现。
在设计图5中的主状态机执行的状态的次序的时候,必须考虑下几个方面:
●对于周期性(解码器)进程,状态机必须是循环的,
●在特定的时刻,编码器进程必须能够及时获取编码器数据,以及
●不同编码器和解码器进程所需要的带宽必须得到保证。
更具体地说,在决定为一个具体的进程分配多少个状态时,需要进行以下计算(参照下文中的表3):
1.对于主进程来说,该进程所需要的带宽与全部进程所需要的带宽之间的比例经过计算(见表3的第4列)表明需要对编码器进程提供81%的时间段,而该进程解码器进程则只需要提供18%的时间段;
2.MBP候选的编码器读取占了大概一半的时间段,因此一半的状态(此处是27个)分配给了候选读取;
3.分配给其它进程的状态的理论个数可以从带宽比率中计算出来,得到转换率:53.39%→27状态数(见表3的第5列);以及
4.实际分配给每个进程的主状态机状态的实际数目可以通过兜圈来计算,以确保满足编码器进程所需的每个宏模块的时间段数和解码器进程的带宽。(见表3中的最后一列)。
表3
进程 |
时间段 |
宏模块的时间段/行 |
进程时间/全部进程时间段% |
状态的个数(理论) |
所赋的状态个数 |
DISPLAY |
24 |
384 |
7.01 |
3.54 |
4 |
OSD |
14 |
224 |
4.09 |
2.07 |
2 |
PIP |
12 |
192 |
3.50 |
1.77 |
2 |
VFW |
3 |
48 |
0.88 |
0.44 |
1 |
VFR |
3 |
48 |
0.88 |
0.44 | |
AFW |
2 |
32 |
0.58 |
0.30 |
1 |
AFR |
2 |
32 |
0.58 |
0.30 | |
AWRBW |
2 |
32 |
0.58 |
0.30 | |
AWRBR |
2 |
32 |
0.58 |
0.30 | |
针对解码器合计 |
64(针对行) |
1024 |
18.69 |
9.45 |
10.00 |
MBPcurrent |
6 |
270 |
4.93 |
2.49 |
4 |
MBPCand |
65 |
2925 |
53.39 |
27.00 |
27 |
MBP WR BK |
6 |
270 |
4.93 |
2.49 |
3 |
VFE |
22 |
990 |
18.07 |
9.14 |
10 |
针对解码器合计 |
99(针对MB) |
4455 |
81.31 |
41.12 |
44.00 |
针对编解码器合计 |
163 |
5479 |
100.00 |
50.58 |
54.00 |
对于一个给定的状态,向哪个请求分配最高优先级,影响不同解码器进程所需要的带宽的获取。例如,规则分布的状态对于DISPLAY进程和解码视频前端处理,在通过主状态机周期中,这些请求类型被分配最高等级的优先级。这使得周期性访问成为可能,并减少了缓冲器的容量。不同编码器进程所需要的数据,通过分配给这些进程的主状态机的状态数量来保证。例如,由于主状态机的一半状态分配给了MBP候选读取,在任何时刻执行请求,所需要的候选数据可在主状态机周期的末端得到保证。
早期的仿真还表明:对于要求较低带宽的进程,最好使用单一状态的状态机,也就是说,考虑从单一进程类型发出请求的状态机,并且,如果这些请求是在给定的时刻发出的话,就自动“获胜”。这些单一状态的状态机的“获胜”进程,根据时间限制地分配给一个分级结构。这可以更有效地使用第一优先级状态机中的自由状态。如图5中所示,采用这样的单一状态的状态机来处理来自编码器的MBP_Wincolor,VES_in,AES_in,VES_out,AES_out,MUXcom_out和MUXcom_in请求以及来自解码器的MC和INTERP请求。在某些偶发情况下,向MC和INTERP进程分配不同的优先级,这是因为它们不在同一流水线阶段上。而且,VES_out,AES_out MUXcom_out分配的优先级要比VES_in,AES_in和MUXcom_in的优先级要低,这是因为后三个进程对应的是读取编码器中的多路函数在某个特定时刻所需要的数据。
为了评估本发明采用的方法的可行性,采用图4中所示的编解码器结构进行仿真,而SDRAM工作在133MHz的频率之下,并以32位字串传输数据。另外还假设系统CPU每50个周期(133MHz下)进行一次访问。系统CPU的每次访问涉及一个4存储字节的字串。这就为CPU供了42.56MB/s的带宽。(某些情况下,该带宽为本例子所支持的CPU的极限带宽。对CPU按每40周期作一次访问进行测试表明:视频前端缓冲器所容纳的数据量增加到每100周期6个32位字,该数据被视为非常大的)。
读或连接一个统计模块,以监控图4中圈在X里面的信号。统计模块对读或写请求的发出与相应的应答信号得以接收时之间的时间间隔(等待时间)进行监控。同时,对编码器DMA接口所需要的数据缓冲器的容量进行估算。这些估算考虑以下几个方面:
●对于读进程:从SDRAM接口到编码器DMA接口的输入字串以及编码器DMA接口和相关编码器读进程之间的输出字串,而
●对于写进程:从相关的编码器写进程到编码器DMA接口的输入字串以及从编码器DMA接口到SDRAM接口的输出字串。
每个进程产生两个文件:
1.第一个文件,含有先行请求及其应答之间的每个宏模块的所测的最大等待时间,以及每个宏模块计算的最大缓冲器容量,和
2.第二个文件,含有每个宏模块的最大缓冲器容量以及每个宏模块处理结束时的缓冲器容量。
通过对两个文件的数据进行绘图,可以给出有关每个缓冲器存满和清空速度的图表。下面的表4给出了有关编码器DMA缓冲器所需要的最大容量以及不同进程发出的双字串请求的数目的结果。
表4
编码器进程 | 最大缓冲器空量(按32位存储器字) |
每宏模块周期双字串请求的个数 |
MBP_current |
104 |
6 |
AES_in |
96 |
3 |
VES_in |
96 |
3 |
AES_out |
16 |
1 |
VES_out |
48 |
3 |
MUXcom_in |
32 |
1 |
MUXcom_out |
16 |
1 |
MBP_Cand |
392 |
65 |
MBP_Wincolor |
96 |
6 |
MBP_WL_BK |
96 |
6 |
VFE |
64 |
20-24 |
合计 |
1056 |
95-99 |
解码器中的缓冲器的容量可以很小(一个或两个字串宽度),这是因为解码器不基于时隙特性,仅仅在需要的时候请求数据。
仿真显示编码器和解码器进程所需要的带宽如下面的表5中所示。依照本发明的优选实施方案的上述的仲裁算法保证了对于各个进程的这一带宽。
表5
编码器进程 |
带宽(平均,M字节/秒) |
解码器进程 |
带宽(平均,M字节/秒) |
MBP_current |
15.55 |
DISPLAY |
19.07 |
AES_in |
7.78 |
OSD |
9.71 |
VES_in |
7.78 |
PIP |
(taken into accountwith DISPLAY |
AES_out |
2.60 |
INTERP |
8.19 |
VES_out |
7.78 |
MC |
28.93 |
MUXcom_in |
2.60 |
VFW |
1.98 |
MUXcom_out |
2.60 |
VFR |
2.18 |
MBP_Cand |
166.4 |
AFW0 |
0.92 |
MBP_Wincolor |
15.55 |
AFW1 |
0.92 |
MBP_WR_BK |
15.55 |
AWRRBW |
2.46 |
VFE |
57.02 |
AR |
4.87 |
合计 |
251.45 |
合计 |
79.23 |
上述说明忽略了某些额外进程的存储器访问请求,例如可以在解码器中执行的数字视频(DV,用在录像机中)、万能数据流管理(versatile streams management(VSM))外设、第二CPU进程等等。然而,仿真结果显示本发明的技术能够使适用于时隙存储器访问的模块集成到一个涉及请求仲裁的系统中。如果整个系统的带宽需求是实质性的(如在包括额外解码器进程的情况下),那么本发明仍然能够通过采用编码器内核实现可中断字串(减少了编码器进程所占用的带宽)来保证这些带宽需求。上述功能的实现要求改变与不同编码器请求有关的物理编址参数(第一字的地址,读取的字数,等等)。
上文中的附图及其描述说明了本发明,而非限制本发明。显然,存在许多落入本发明所附的权利要求范围内的可选方案。尤其是,尽管就包含针对不同存储器访问方案设计的编码器和解码器集成电路的数编解码器对本发明进行了描述,但本发明通常可以应用在集成有可用于公共资源访问的时隙和请求仲裁方案的模块的系统中。
权利要求中的任何参考符号都不应当视为对权利要求的限制。