(第一实施形态)
在开始说明I/O处理器之前,说明AV译码器具有怎样的内部结构,此结构中涉及本发明的I/O处理器完成怎样的分配任务。图2A表示AV译码器的内部结构。
AV译码器由进行核心处理的译码器核心单元和进行多个异步事件任务的I/O单元组成。
译码器核心单元包含Setup单元104、VLD单元105、IQ/IDCT单元106、和运动补偿单元107;I/O单元设置有数据流输入单元101、缓冲存贮器102、位流FIF0 103、图形输出单元108、声音输出单元109、I/O处理器113、缓冲存贮器控制器110、RAM控制器111、FIF0控制器112、和主I/O单元115。作为母线的设置有缓冲存贮器母线121、SDRAM母线122、位流母线123、和IOP控制器母线124,作为扩展存贮器连接到SDRAM300。
下面参照图2B简单说明MPEG数据流的译码处理的概要。本实施形态中,MPEG数据流由动画数据流、音频数据流、和副图象数据流组成。其中动画数据流为经压缩的动画图象数据,在译码处理中由将成为差分计算的基准的图象(以下称为“参照图象”)和计算出的差分被编码的图象相加来恢复成动画图象。
图2B中,MPEG数据流中动画数据流的数据结构是分层次的。第一层为MPEG数据流层,第二层为一秒长的动画层。第三层为一帧的层,第四层为一位片层。第五层为宏块层。
参照以点线C1所示第一层与第二层的对应关系可看到,MPEG(动画图象编码专家组)中一秒长的动画以NTSC方式中的30帧图象(PAL方式中为25帧的图象)构成。而各帧的图象也可看到具有I图形(图中的10)、P图形(图中的P3)、B图形(图中的B1、B2)三种型式。
这里,作为I图形的为经压缩的图象数据,包含一帧大小的亮度成分和色差成分。P图形(予测图形)或B图形(双向予测图形)为被称作为差分图象的数据。这里作为P图形的是由与位于过去方向上的帧的差分构成的差分图象,作为B图形的是由与位于过去方向和未来方向上的帧的差分构成的差分图象。
B图形和P图形以怎样的单位作成,如参照以点线表示的第二层与第三层的对应关系可看到,在NTSC方式中这些图象以30个所谓位片的数据构成,而在PAL方式中以36个所谓位片的数据构成。
如参照点线C3所示的第三层与第四层的对应关系可知道,各位片以45个宏块构成。作为宏块的是由横16象素×纵16象素的亮度成分、色差成分构成的。如参照点线C4所示第四层与第五层的对应关系可了解包含有,由横16×纵16的亮度成分构成的亮度块,由横8×纵8的蓝色差成分构成的蓝色差块(cb块),和由横8×纵8的红色差成分构成的红色差块(Cr块)。基础宏块成为AV译码器中的图象译码的单位。
宏块以下作为表示AV译码器的构成部件间怎样对宏块中所含的亮度块、色差块进行处理的定时图。
对宏块虽然可作某种形式的译码,而对宏块的译码将压缩动画图象数据作可变长译码(Variable Length code Decoding:下将为VLD)就能得到6个空间频率成分数据,标题信息,运动向量。
然后对6个空间频率成分数据进行逆离散余弦变换处理(DCT)分离成为位于低频带的空间频率成分和位于高频带的空间频率成分,去除高频带,而对位于低频带的空间频率成分进行量化处理。
被编码的宏块在作逆量化和逆离散余弦变换处理之后,由基于运动向量的运动补偿作图象显示。所谓运动向量是指示与前后帧的图象相比较具有最高相关性的场所的信息。也就是说,运动向量以块为单位表现图象内的人物象和建筑物象在帧的前后如何动作。
所谓运动补偿是指将差分前后应显示的参照图象与相关差分作步调协调(混合)能成为一个完成的显示用图象。
以上的MPEG标准的动画图象的编码/译码技术中本说明书特别引用的内容即如上述。有关更详细的技术内容请参看ァスキ-公司出版的“要点图解式最新MPEG教科书”等的公开文献。
图2B中的定时图引用于该说明译码器核心单元中的Setup单元104、VLD单元105、IQ/IPCT单元106、和运动补偿单元107进行处理采用怎样的定时。上面完成了对MPEG数据流的译码处理的概要说明,下面开始说明AV译码器的结构组成。
数据流输入单元101在由记录媒体和通信媒体取出MPEG数据流后即将MPEG数据流取进AV译码器内部,按照I/O处理器113的控制输出到缓冲存贮器母线121。
缓冲存贮器102根据缓冲存贮器控制器110的控制保存数据流输入单元101取入的MPEG数据流。而在缓冲存贮器控制器110发出输出MPEG数据流的命令后,即将至此时所存贮的MPEG数据流输出到SDRAM母线122。
位流FIF0 103在MPEG数据流中所含的基本数据流被输出到SDRAM母线122后即根据FIF0控制器112的控制取入所输出的基本数据流。位流FIF0103以先入先出方式保存取入的基本数据流。根据FIF0控制器112的控制将这样保存的基本数据流输出到位流母线123。
Setup单元104等待由位流FIF0 103中保存的MPEG数据流中提取基本数据流,并等待该基本数据流成为动画数据流或音频数据流、依靠由VLD单元105进行译码将其标题单元扩展。标题被扩展后即对之进行图2B中所示的分析处理e1。基本数据为动画数据流时进行运动向量提取e2。然后在进行逆量化、逆离散余弦变换、运动补偿等之间进行声音数据流的译码处理e3。
VLD单元105,在位流FIF0 103中存贮的基本数据流为动画数据流、构成它的宏块被输出到位流母线123时即对宏块中所包含的4个亮度块Y0、Y1、Y2、Y3和2个色差块Cb、Cr进行可变码长译码t21、t22、t23、t24、t25、t26。
IQ/IDCT单元106对经过可变长译码的4个亮度块和2个色差块进行逆量化和逆离散余弦变换。
运动补偿单元107在由IQ/IDCT单元106作逆量化和逆离散余弦变换后即将对应于经过这些处理的亮度块和色差块的参照图象(Y0,Y1)、(Y2、Y3)、(Cb,Cr)由连接在AV译码器外部的SDRAM300读出,将亮度块和色差块与参照图象混合。然后以对该混合结果作半周插补来进行运动补偿。此后由控制RAM控制器111将被输出至SDRAM母线122的音频数据流写入SDRAM300。
图象输出单元108将由运动补偿单元107进行与参照图象混合和半周插补的一帧图象变换成视频信号并输出给外部连接的电视接收机等的显示装置。
声音输出单元109将经由Setup单元104译码的音频数据流变换成音频信号并输出给外部连接的扬声器装置。
缓冲存贮器控制器(图中的BM控制器)110由在I/O处理器113外围的输入单元101、图象输出单元108、声音输出单元109之间进行访问仲裁的缓冲存贮器接口、缓冲存贮器102、和具有数据流输入单元101、图象输出单元108、声音输出单元109之间的DMA传送功能的DMA控制器组成。
RAM控制器111由可能对SDRAM300作成组(猝发)读、成组写的SDRAM接口、和具有SDRAM300-缓冲存贮器102间及运动补偿单元107-缓冲存贮器102之间的DMA传送功能的DMA控制器组成。
FIF0控制器112具有双向端口RAM,控制该RAM的读写的控制器,和管理表示位流FIF0 103中的访问地址的指针的指针管理功能。
I/O处理器113由将AV译码器中的6个异步事件任务分配到6个时隙来使异步事件任务以时分多路方式执行。分配给各异步任务的时隙,在I/O处理器内部的全部结构部件均以为作同步控制用的时钟信号的周期数表现时,其长度假定为原则上4个周期。
主I/O任务为关于与主计算机的通信和对应于与操作者的对话的二维图形的描绘的任务。具体的说是包括通过主I/O单元115与主计算机的通信处理,和对应于操作者的操作描绘二维图形输出到图象输出单元108的处理。
清除任务是关于输入到缓冲存贮器102的MPEG数据流的清除处理,和由MPEG数据流进行动画数据流、音频数据流、副图象数据流这样的基本数据流的提取的提取处理。
清除任务执行时,I/O处理器113使由外部输入到数据流输入单元101的MPEG数据流被输出到缓冲存贮器母线(图中为BM母线)121。由对缓冲存贮器控制器110加以控制来将被输出到缓冲存贮器母线121的MPEG数据流写入缓冲存贮器102。此后,I/O处理器113由控制缓冲存贮器控制器110将MPEG数据流输出到缓冲存贮器母线121,由MPEG数据流提取基本数据流。由控制缓冲存贮器控制器110将所提取的基本数据流写入缓冲存贮器102。结果就成为在缓冲存贮器102中存贮作为基本数据流的位流、音频数据流、副图象数据流的状态。
音频数据流传送控制任务是由关于音频数据流的所有传送控制组成的任务。
根据音频数据流传送控制任务,I/O控制器113由控制缓冲存贮器控制器110将缓冲存贮器102中作为基本数据流存贮的音频数据流输出到SDRAM母线122。此后,由控制SDRAM控制器111被输出到SDRAM母线122的音频数据流写入SDRAM300。在Setup单元104开始对位流FIF0 103中存贮的音频数据流的译码后监视该译码处理的进展情况,在音频数据流的剩余量一成为规定值以下,即控制RAM控制器111读出SDRAM300中存贮的音频数据流输出到SDRAM母线122。控制FIF0控制器112将这样输出的音频数据流写入到位流FIF0 103。
由这样的向位流FIF0 103写入来进行对应于音频数据流译码的进度的音频数据流的补充。
译码完成时,I/O处理器113即由控制FIF0控制器112将译码完的音频数据流输出到SDRAM母线122。控制缓冲存贮器控制器110,将输出到SDRAM母线122上的音频数据流写入缓冲存贮器102。
动画数据流传送控制任务为由关于动画数据流的所有传送控制组成的任务。
I/O处理器113由控制缓冲存贮器控制器110将缓冲存贮器102中存贮的动画数据流输出到SDRAM母线122,由控制RAM控制器111将被输出到SDRAM母线122的动画数据流写入SDRAM300。VLD单元105、IQ/IDCT单元106、运动补偿单元107-开始对位流FIF0 103中存贮的动画数据流进行译码,即监视动画数据流译码的进展程度,在应译码的剩余量成为规定值以下时,控制RAM控制器111读出SDRAM300中存贮的动画数据,由FIF0控制器112写入位流FIF0 103。由这样的位流FIF0 103的写入来进行按照译码处理的进度的动画数据流的补充。
图象输出任务为由关于视频输出的输出控制组成的任务。
在执行原始异步事件任务时,I/O处理器113由控制RAM控制器111将VLD单元105、IQ/IDCT单元106、运动补偿单元107所作处理完成时SDRAM300中存贮的动画数据输出到SDRAM母线122,控制缓冲存贮器控制器110将被输出到SDRAM母线122的动画数据流写入缓冲存贮器102。控制缓冲存贮器控制器110,将写入SDRAM 300的动画数据流输出到SDRAM母线122,在图象输出单元108变换成视频信号。将与此同时展开副图象数据流得到的副图象和二维图形相混合输出到图象输出单元108。
Setup I/O任务由Setup单元104与I/O处理器113进行通信时应执行的处理组成。
由在有关指令成为用于读写主计算机设置的寄存器的指令时控制I/O处理器113作该读写的处理,和在有关指令成为VLD单元105、IQ/IDCT单元106的初始化指令时将VLD单元105、IQ/IDCT单元106加以复位的处理组成。
以上的异步事件任务各个的处理负担均很轻,请求作间隔地起动。特别是,图形输出任务请求水平消隐期间每50μsec起动一次,声音输出任务请求每90μsec起动一次。
现参照附图说明I/O处理器的第一实施例。如上述那样,I/O处理器对要执行各自的异步事件任务的事件是否成立进行监视,事件成立的异步事件任务较优先执行。谈到本实施形态中优先执行的过程,由于说明复杂所以要到第三实施形态中再对此优先执行加以说明。在第一实施形态中对I/O处理器的基本构成、即对时分多路化地执行AV译码器中的6个异步事件任务的构成进行说明。
图3表示I/O处理器的内部结构,如图中所示,I/O处理器由指令存贮器100、指令读出电路10、指令译码控制单元11、寄存器组12、运算执行单元14、和任务管理单元15构成。
指令存贮器100存贮构成上述6个原始异步事件任务的指令。图7A表示指令存贮器100存贮指令序列的方式。图中各指令上被加以0-0、0-1、0-2这样的标识符。此标识符中上位的数表示有关指令属于原始的异步事件任务中的哪一个,下位的数表示在所属的异步事件任务中该指令位列第n。在后面的说明中,指令存贮器100中各指令的配置地址用此识别符来表示。
指令存贮器100内存贮的指令被规定为所有操作均可容纳于一指令字长内这样的指令格式。此实施例中,指令字长规定为16位,图7B~图7D中表示该指令格式。
图7B表示将寄存器指定为操作数的算术运算指令的指令格式。在此指令格式中,2~4bit中可指定应指定给第一操作数的寄存器序号,5~7bit中可指定应指定到第二操作数的寄存器序号。8~10bit中可指定应指定给运算结果的存贮地点的寄存器序号,由11至15bit的5个位中被指定操作内容。下方的表表明可能指定有关操作内容的5个位中的上位2bit与下位3bit的组合,和以其组合表达的操作内容。例如,上位2bit为“00”、下位3bit为“000”时,其组合表明为加法运算操作,在上位2bit为“01”、下位3bit为“000”时,其组合表明为减法运算。在上位2bit为“00”、下位3bit为“001”时,其组合表明为左移运算(图中的<<就是指向左位移的运算),在上位2bit为“01”、下位3bit为“001”时,其组合表明为右移运算(图中的>>是指向右位移运算)。
图7C表示以寄存器指定读出目的地地址、写入目的地地址的存贮器装入指令/存贮器存贮指令的指令格式。此指令格式可在2~4bit中指定应指定给第一操作数的寄存器序号,可在5~7bit中指定应指定给读出起源的寄存器序号或应指定给运算结果的存贮目的地的寄存器序号。10bit至12bit的3位中被指定操作内容,而在13bit至15bit的3位中被指定3位长的立即值。
下部的表表示在由3个位指定的操作内容中上位1bit与下位2bit的组合,和以其组合表达的操作内容。
例如在上位1bit为“1”、下位2bit为“10”时,指定将以读出起源操作处src_REG所指定的寄存值存贮进利用第一操作数Src1与3位的立即值im:3的组合(src1+im:3)所指定的存贮器中的存贮指令。
在上位1bit为“0”、下位2bit为“10”时,指定借助其组合采用第一操作数src1与3位的立即值的组合(stc1+im:3)的寻址方式由存贮器读出值,存贮进存贮目的dst_REG中所指定的寄存器中存贮的装载指令。
图7D表示能指定8位、11位的立即值的比较指令/运算指令/转移指令的指令格式。在此指令格式中立即值为8位时,5至7bit中可指定相当于存贮第一操作数和运算结果的寄存器,而利用8至15bit存贮立即值。在立即值为11位时,利用5至15bit存贮立即值。利用2至5bit的4位如下部的表那样指定操作内容。
下部的表表示相关4位中,上位2bit与下面2bit的组合和以其组合表达的操作内容。例如在上位2bit为“10”、下位2bit为“10”时,其组合指定将由第一操作指定的寄存器的值与第二操作数的8位的立即值相比较的比较指令。
在上位2bit为“10”、下位2bit为“10”时,其组合指定操作数与8位的立即值相乘的乘法指定。在上位2bit为“11”、下位2bit为“11”时,其组合指定将11位的立即值作为转移目的地址的绝对地址指定型的转移指令。
在以上说明中,因为操作内容以一指令字长的16位来表达,在读出指令存贮器内不管怎样的操作内容的命令时,和译码/执行任何的指令时,这些读出、译码、执行均能一样地在一周期内完成。亦即,规定为到指令的读出、译码、执行的完成为止的时间在指令之间不会产生偏离那样的指令格式。特别是在图7D中将立即值的大小作为8位和11位,此规定的意图清楚显现。亦即,如将所指定的立即值增长,指令字长有可能会扩展到24位、32位,为防止这种扩展,使指令字长能容纳于16位之内,所以将立即数长保持为8位、11位。执行一个指令,如以表示需要多少周期数的单位(称之为CPI,即每一次指令的周期)来表达,则此I/O处理器的CPI即纯粹为“1”,而“读出指令n次”、“指令译码、执行n次”则以周期数表达。
指令读出电路10将指令存贮器100内的读出目的地址输出到指令存贮器100。
指令译码控制单元11(图中为译码器11)对指令存贮器100输出的指令译码,根据其译码结果控制指令读出电路10和运算执行单元14。
寄存器组12具有各自均为24个的32位长的通用寄存器(GR)和16位长的通用寄存器。之所以这样作成具有24个寄存器是为了将32位长的寄存器和16位长的寄存器各4个地分配给6个异步事件任务。这样依靠在每个异步事件任务中分配8个寄存器,就无必要在任务转换时疏散、恢复寄存器的值。
运算执行单元14设置有ALU、乘法器、滚动移位器,根据指令译码控制单元11的控制利用寄存器组12中通用寄存器的存贮值进行运算。在由异步事件任务向另外的任务转换时,运算执行单元14利用与之对应的4个32位长的通用寄存器、4个16位长的通用寄存器,对转换后的任务中所含的指令执行运算。
任务管理单元15监视指令译码控制单元11中的指令执行,如经过了分配给各任务的时隙的时间长,即将应分配下一时隙的任务的标识符输出到指令读出电路10。
下面参照图4A说明指令读出电路10以怎样的内部构成来进行读出目的地址的更新。图4A中表示指令读出电路10的内部结构。
如图4A所示,指令读出电路10由IF1+1保存单元20、增量电路21、IF2保存单元22、DECPC保存单元23、任务各别PC存贮单元24、选择器25和选择器26组成,构成为实现在译码步骤之前进行二级的读出步骤的流水线处理。此二级的读出步骤中的各个读出目的地址叫做第一读取目的地址1F1和第二读出目的地址IF2。
在图4A中,IF1一般为选择器26输出的地址,IF2为IF2保存单元22保存的地址。图8为表示指令读出电路10内进行的流水线处理的定时图。后面在谈到有关指令读出电路10的结构部件时,均要引用此定时图。
IF1+1保存单元20为被用于保存计数值的计数值寄存器的部件,在由任务各别PC存贮单元24输出某一个读出目的地址时,即将该地址作为计数初始值保存,在由增量电路21进行该计数值增量后,即将增量后的地址作为最新计数值保存。
此时,如输出由增量电路21新近增量的地址时,IF1+1保存单元20即通过信号线④将到目前所保存的地址输出到选择器25同时也输出给选择器26。
增量电路21按时钟信号将由选择器26输出的IF1加以增量。经增量的地址由IF1+1保存单元20加以保存。由选择器26输出的IF1因为是到目前由IF1+1保存单元20所保存的值,因此依靠由增量电路21所作增量,IF1+1保存单元保存的计数值每一时钟均被增量。
在图8的定时图中,作为读出目的地址输出的指令0-0的读出目的地地址被增量电路21增量(参看图中的inc1、inc2、inc3)。这样,IF1+1保存单元20保存的读出目的地地址被作为指令0-1的地址、指令0-2的地址、和指令0-3的地址进行更新。
IF2保存单元22与时钟信号同步地将前次由IF1+1保存单元20输出的地址作为应读出指令的第二读出目的地地址加以保存。由图8的定时图可知,作为第二读出目的地地址而输出指令0-0的地址、指令0-1的地址、指令0-2的地址、和指令0-3的地址。可看到这些地址要比第一读出目的地址延迟一个周期。在由IF1+1保存单元20输出新的地址后,IF2保存单元22即将迄至目前保存的地址输出到DECPC保存单元23,还通过信号线①输出给选择器25。输出后保存由IF1+1保存单元20输出的该新的地址。
DECPC保存单元23保存前次IF2保存单元22输出的地址。此地址与成为指令译码控制单元11的译码控制的对象的指令地址相一致。在新的地址由IF2保存单元22输出时,即保存该新地址进行译码对象的地址的更新。
DECPC保存单元23保存的地址为IF2保存单元22迄至目前保存的地址,IF2保存单元22保存的地址为IF1+1保存单元22迄至目前保持的地址,所以与IF+1保存单元20保存的地址比较,DECPC保存单元23所保存的地址迟二个指令,而与IF2保存单元22保存的地址比较,DECPC保存单元23中保存的地址迟一个指令。
任务各别PC存贮单元24为其内部具有保存每一任务的读出目的地址的区域的存贮器电路或每一任务中设置的地址寄存器。内部区域或各个的地址寄存器中,在各个地存贮的读出目的地址中被付加有作为地址的3位长的任务标识符。并将任务(0)的读出目的地址称为IPC0,将任务(1)读出目的地址称为IPC1。对后面的任务(2)、任务(3)、任务(4)、任务(5)也同样。
任务各别PC存贮单元24中的这些读出目的地址的读写操作在由任务管理单元15输出要转换任务的指示(任务转换信号chg_task_ex的高电平值)时进行。此任务转换信号chg_task_ex为高电平值时,由任务管理单元15输出与任务转换信号chg_task_ex同时执行完毕的任务的3个位长的标识符(写入地址选择信号taskid(wr_adr))和下一应执行任务的3个位长的标识符(读出地址选择信号nxttaskid(rd_adr)),而任务各别PC存贮单元24则根据这些信号进行内部区域的读写。亦即,任务各别存贮单元24将写入地址选择信号taskid(wr_adr)解释成为任务各别PC存贮单元24内的地址,将由选择器25输出的读出目的地址存贮到由其指示的内部区域。在图8的定时图中任务转换信号chg_task_ex上升定时时刻a1、b1进行读出目的地址的写入a2、b2。
在进行写入a2的时期,IF2保存单元22保存指令0-3的地址,IF1+1保存单元20通过信号线④将此指令0-3的地址上加“1”的地址0-4输出给选择器25。在这样输出后地址0-4即被存进任务各别DC存贮单元24。由此,如果下一时隙再次轮到任务各别PC存贮单元24内的任务(0),任务(0)的读出即按地址0-4进行。
在进行写入b2时期,IF2保存单元22保存指令1-3的地址,IF1+1保存单元20通过信号线④将此指令1-3的地址上加“1”的地址1-4输出给选择器25。这样输出后被作增量的地址1-4即被存进任务各别PC存贮单元24。由此,如果下一时隙再次轮到任务各别PC存贮单元24中的任务(1),任务(1)的读出即按地址1-4进行。
而当读出地址选择信号nxttaskid(rd_adr)被任务管理单元15提供时,任务各别PC存贮单元24将其标识符解释作为任务各别PC存贮单元24内的地址,由被其指示的内部区域取出异步事件任务的读出目的地址输出给选择器26。
在图8的定时图中,作为读出地址选择信号nxttaskid由任务管理单元15提供标识符(1),chgtaskex上升时(参看参照符号a3),任务各别PC存贮单元24将由其标识符指示的任务(1)解释作为任务各别PC存贮单元24内的地址,取出其中存贮的读出目的地址(1-0)输出给选择器26(参看参照符号a4)。
指令2-0的地址被作为读出目的地址IF1输出的定时时刻,作为读出地址选择信号nxttaskid由任务管理单元15提供标识符(2),在chgtaskex上升时(参看参照符号a5),任务各别PC存贮单元24作为由其标识符指示的任务(2)的读出目的地址取出读出目的地址(2-0)输出到选择器26(参看参照符号a6)。
如上所述,在读出目的地址被输出时,任务(0)的指令仅执行4个指令,随其后任务(5)仅被执行4个指令。后而,任务(2)、任务(3)、任务(4)、任务(5)的指令序列各自每个执行4个指令。
作为5输入1输出的选择器25选择①、②、③、④的信号线上传送的地址中的某一个输出到任务各别PC存贮单元24。选择这些①~④中的哪一个如图4B中所示的输出逻辑表中所示那样,根据指令译码控制单元11按指令的译码结果输出的Selpc信号进行。这里④的信号线为IF1+1保存单元20的输出,在由任务管理单元15将任务转换信号chg_tash转换为高电平时选择器25即优择它。
②、③的信号线分别连接指令译码控制单元11和运算执行单元14。②在利用指定绝对地址的转移指令的译码时将转移指令的立即值作为转移目的地址由指令译码控制单元取得时加以选择。③在利用指定间接参照的转移指令的译码时将由运算执行单元14计算得的地址作为转移地址应用时加以选择。
选择器26为2输入1输出的选择器,在任务转换信号chg_task为低电平期间选择经增量电路21增量后的地址作为IF1输出到增量电路21和IF2保存单元22。在任务转换信号chg_task为高电平期间将任务各别PC存贮单元24中存贮的下一应执行的任务的地址输出给增量电路21和IF2保存单元22。
利用如以上构成的指令读出电路,在任务转换时,迄至目前执行的任务的读出目的地址由选择器25存入任务各别PC存贮单元24,另外,存放在任务各部PC存贮单元24中的下一任务的地址则由选择器26作为IF1输出。上述的读出目的地址的转换在一周期内进行,在此读出目的地址的转换中无需I/O进行多余的处理。也无需象插入信号的通报时进行的转移那样将先前读出的地址无效化。从而,由指令读出电路10作的读出目的地址的保留、恢复的进行不会产生额外开销。
现在参照图5中所示任务管理单元15的内部构成来说明任务管理单元15以怎样的内部结构确定随后应执行的异步事件任务。
图5表示任务管理单元15的内部结构。如图5所示,任务管理单元15由时隙管理器61和调度器62组成,时隙管理器61由触发器51、计数器52、和比较器54构成,调度器62由任务ID保存单元71、任务ID保存单元72、任务循环管理单元73、和优先编码器74构成。
触发器51保存表示下一被执行指令为第n号的整数值(将其称为计数值I)。
计数器52为初始值设定为“1”、上限值被设定为“4”的计数器,与时钟信号同步地对触发器51中保存的计数值进行1、2、3、4、1、2、3、4这样的计数。
比较器54将计数器52计数的值与整数值“4”进行比较,如果计数器52的计数值与整数“4”相一致,即使任务转换信号chg_task_ex成为高电平值输出给选择器26和任务各别PC存贮单元24。
这样,依靠每当计数器52计数到“4”时使任务转换信号chg_task_ex成为高电平,就4周期一次地进行由选择器26对任务各别PC存贮单元24的选择。此时,任务各别PC存贮单元24将应分配下一时隙的任务的读出目的地址输出到选择器26,所以由任务各别PC存贮单元24的读出目的地址的输出,即成为每4周期执行一次地进行。
任务ID保存单元71保存由计数器52进行指令执行的计数的任务的标识符(将其称之为任务标识符taskid)。图6A中表示任务标识符的示例。如图6A所示,任务标识符采用3位,指明指令存贮器100中存贮的6个任务中的哪一个。在指令执行被进行4次计数后,在调度器62中由优先编码器74输出应分配下一时隙的任务的任务标识符taskid,此时,任务ID保存单元71将迄至目前保存的任务标识符taskid输出到任务循环管理单元73,保存新输出的任务识别符taskid。
任务循环管理单元73监视任务ID保存单元71中任务标识符怎样被更新,利用6位长的寄存器管理在6个任务中进行的时隙分配。而在计数器52在计数到4个指令的执行时,由任务ID保存单元71输出任务标识符taskid,任务循环管理单元73将表明分配完时隙的任务的数值(将此值称为循环值taskn)输出到优先编码器74。图6B表示循环值的示例。在此循环值taskn中,如果第一位为“1”即表明时隙被分配到任务(1),如第一位为“0”则表明任务(1)不是这样。任务管理寄存器13的第二位如为“1”,即表明时隙被分配到任务(2),而如第二位为“0”则表明任务(2)不是这样。
如任务(0)、任务(1)中时隙分配完毕,任务循环管理单元73输出“000011”到优先编码器74。而如任务(0)、任务(1)、任务(2)中时隙分配完毕,任务循环管理单元73则输出“000111”到优先编码器74,如果任务(0)、任务(1)、任务(2)、任务(3)上时隙分配完毕,任务循环管理单元73输出“001111”给优先编码器74。
而在向任务(0)~任务(5)的时隙分配轮流一回后,将“111111”输出给优先编码器74之后将6位长的寄存器复位成“000000”。
优先编码器74接收任务循环管理单元73输出的循环值taskn,检测接收到的任务循环管理单元73的循环值taskn中第n位发生由“1”向“0”的翻转。在由此检测到发生向“0”翻转的位时,即将分配到此发生翻转的位的任务的任务标识符taskid输出到任务ID保存单元71。所输出的任务标识符被作为地址选择信号nxttaskid(rd_adr)输出到任务各别PC存贮单元24。
例如当由任务循环管理单元73作为循环值taskn输出“000011”时,优先编码器74检测此循环值taskn中向由下位开始的第二位上的“0”翻转的发生(应注意是将最下位计数作为0位)。此第二位在图6B中因为是被分配给任务(2)的位,所以优先编码器74将任务(2)的任务标识符taskid输出给任务ID保存单元71。
例如在由任务循环管理单元73作为循环值taskn输出“000111”时,优先编码器74检测到此循环值taskn中由下位开始的第三位上发生向“0”的翻转。此第三位在图6B中是被分配到任务(3)的位,所以优先编码器74将任务(3)的任务标识符taskid输出给任务ID保存单元71。因为循环值taskn表明已完成时隙分配的任务,所以此循环值taskn中翻转为“0”的位就意味着下面应分配时隙的哪一个任务。在将翻转为“0”的位变换为任务标识符taskid后即在任务ID保存单元71中存贮下一应分配时隙的任务。
任务ID保存单元72在优先编码器74输出新的任务标识符taskid后即将紧前面所输出的任务标识符taskid作为写入地址选择信号taskid(Wr_adr)加以保存,输出给任务各别PC存贮单元24。
由以上这样构成的第一实施形态的I/O处理器怎样分配时隙如图9中所示。图9表示由按时间顺序排列分配给任务(0)至任务(5)的任务上的时隙所形成的帧的单位。
任务(0)~任务(5)上各自分配有4个周期的时隙,从而形成为24个周期的帧。按这样的帧,图7中所示的指令序列均匀地被各四个指令地加以执行。
现参照图44说明第一实施形态的I/O处理器中计算操作时钟数的情况。图44为表示在以第一实施形态中的时隙分配执行图形输出任务、声音输出任务时处理动画数据流、音频数据流的定时图,这里假定为保证图形输出任务、音频输出任务的实时性,为将动画数据流变换成视频信号的图形输出任务要在基于显示的水平同步信号周期的50μsec中处理一行内的图象,为将音频数据流变换成声音信号的声音输出任务要在90μsec的周期中处理规定的声音数据流。
这时,首先第一导出上述周期中“这种程度数量的指令最少要执行”的最低理解数。
这里,在译码一行的视频数据中,要最小了解图形输出任务中的448指令执行,在译码一个周期的声音数据中,要最少了解声音输出任务中的808个指令执行。本实施形态中CPI=1,指令数与周期数等效,所以按最低理解数图形输出任务、声音输出任务应分配的周期数被确定为448(=4×112)周期、808(=4×202)周期。
任务(0)~任务(5)分别以每次四个周期地执行。这里,因为不同由指令输出电路10内的选择器25、26作的程序计数器的转换而产生额外开销,所以任务(0)至任务(5)轮回一周所需时间实际上就是24个周期。
指令周期数为4,任务总数为6,所以全部任务以24个周期每次4个指令地执行。
为止,一周期所需的时间S1、S2就要满足下式:
50μsec>6×4×112×S1nsec
90μsec>6×4×202×S2nsec
S1<50μsec/6×4×112=18.6nsec
S2<90μsec/6×4×202=18.56nsec。
由1÷S2nsec计算确定操作时钟数时即得到:54MHZ=1÷18.56nsec。由以上计算就能单义地导出完成图形输出任务、声音输出任务的处理的最适当的操作时钟数。
如上所述按照本实施形态,就能按照规定的周期中要执行的指令的最低理解数、执行周期、任务总数单义地导出操作时钟数的最适当的下限值。由于操作时钟的最适当下限值的求取,即使未更高地确定操作时钟信号也能保持声音输出任务、图形输出任务的实时性,即使在操作时钟低速的打印被搭载于家用设备上时也能恰当地对MPEG数据流进行译码。
借助设置时分多路化地执行多个异步事件任务的I/O处理器,由在插入时可以不进行异步事件处理,所以Setup单元104、VLD单元105、IQ/IDCT单元106可能专门作逆量化、逆离散余弦变换、运动补偿的处理。而I/O处理器在不会产生因用来保存、恢复程序计数值的额外开销时高速执行任务转换,所以即使不将操作时钟作成高速的也能满足MPEG数据流的再生中所要求的实时性。
本实施例中对各任务的时隙一律作成4个周期,但也可按照各任务的处理内容各自设定为不同的值。
在对任务各别地作成周期数可变的情况下将图5所示的时隙管理器作成为图45中所示。此图中,选择器200连接到作为任务(0)至任务(5)的固有周期数的“任务(0)的周期数”至“任务(5)的周期数”,按照调度器62输出的nxttaskid将对应的周期数选择一个输出到比较器54。在图19A中下一应分配时隙的任务为任务(0),选择器200将“任务(0)的周期数”输出给比较器54。采用这样的构成就能将对应于任务(0)至任务(5)的各自的处理负荷的最适当的周期数分配到各个任务。也可以将这样的最适当周期数存进存贮器或寄存器,日后对之改写。
本实施形态中虽然是将应执行的任务压缩进异步事件任务来说明的,但对其他的任务亦可。
(第二实施形态)
第一实施例中虽然是将分配到各任务的时隙的指令数一律作为四个周期,而第二实施形态中则是将1时隙分配多少个周期作成为各任务能独自地变更的。而时隙的分配由Wait_Until_Next指令完成。作为Wait_Until_Next指令是使时隙中的指令在中途中断,以便将位于Wait_Until_Next指令的下一序号处的一连串的指令序列予先送到下一时隙的内容的指令。而作为Wait_Until_Next指令的译码时的读出目的地地址的存贮,此时图4中所示的5输入1输出的选择器25通过①的信号线选择IF1+1保存单元20的输出,存贮进任务PC存贮单元24。
图10A为将Wait_Until_Next指令(图中的WUN指令)作为指令0-1其内部具有的异步事件任务示例,图11为表示图10A的异步事件任务的执行状态的定时图。在Wait_Until_Next指令如图10A中所示作为指令0-1并作为异步事件任务的第一个指令被加以存贮时,在此指令0-1被保存在DECPC保存单元23中并由指令译码控制单元11译码后,选择器25即通过①的信号线将指令0-2的读出目的地址存贮进任务各别PC存贮单元24(图11的①也同样)。此后,指令译码控制单元11使指令0-2、0-3无效(图11中的“NOP”)。
这里,指令0-2是将I/O处理器的本地存贮器内的地址meml的值读出到寄存器组12中的寄存器r0的指令,指令0-3是将I/O处理器的本地存贮器内的地址buf1的值读出到寄存器r1的指令。指令0-4是将寄存器r0的值与寄存器r1的值相乘,将其结果存入寄存器r2的指令,指令0-5是将寄存器r2的值存到I/O处理器的本地存贮器内的地址meml的指令。
以上四个指令,根据读出目的地址、写入目的地址同时为I/O处理器的本地存贮器而指令0-0为Wait_Until_Next指令可理解,将I/O处理器的本地存贮器作为读出目的地址一写入目的地址的指令纳入一个时隙。
图10B表示Wait_Until_Next_Slot指令的指令格式示例。图10B中,此指令具有图7B中所示的寄存器指定型的算术运算指令的指令格式。由指定此格式的11bit至13bit为“010”,使I/O处理器执行Wait_Until_Next_Slot指令。
现参照图12说明如以上构成的第二实施形态的I/O处理器的时隙分配。
任务(1)~任务(5)中被分配四个周期的时隙。但在任务(0)中由于存在有Wait_Until_Next指令,被分配给任务(0)的时隙为到达Wait_Until_Next指令被配置的位置为止,被分配到任务(0)的时隙为2个周期。
在任务(0)~任务(5)轮流一周后形成的下一帧中,任务(1)与其他任务同样分配四周期的时隙。
按照上述此实施形态,能将以同一存贮作为访问目的存贮器访问指令集中在一个时隙中执行。
(第三实施形态)
在第一实施形态中,由于是与应起动异步事件任务的事件是否成立无关地公开地对6个异步事件任务分配时隙,不必须起动的异步事件任务与有此必要起动的异步事件任务实际上是同时地随意的不平等的。第三实施形态对异步事件任务进行应起动异步事件任务的事件是否成立的检验,对应起动的事件来成立的任务进行使得削减周期分配数的控制。
图13中表示第三实施形态中的I/O处理器的内部结构。图13中,在I/O处理器设置指令存贮器100、指令读出电路10这方面与第一实施形态没有不同。第三实施形态中新颖之处在于,指令译码控制单元11和运算执行单元14各自被替换为指令译码控制单元81和运算执行单元84。还另外加有7个状态监视寄存器,在任务管理单元15的内部还设置有任务管理寄存器13。
7个状态监视寄存器CR1~CR7分别为5位长的寄存器,在AV译码器内部与位于I/O处理器的周边的构成部件即图形输出单元108、缓冲存贮器控制器110、RAM控制器111、FIF0控制器112等的构成部件相连接,I/O处理器的周边部分的5个事件的成立与否被反映在各个bit上(因为与图形输出单元108、缓冲存贮器控制器110、RAM控制器111、FIF0控制器112的连接很复杂,所以其图示省略)。
作为举例现参照图17说明状态监视寄存器CR1、CR2和CR3。图17表示状态监视寄存器CR1、CR2和CR3的位结构。
状态监视寄存器CR1的第0bot通常被设定为“0”,仅在缓冲存贮器母线121中进行规定次数的向缓冲存贮器102传送数据时才被设定为“1”。
状态监视寄存器CR1的第1bit通常被设定为“0”,仅在检测到缓冲存贮器母线121中输出的MPEG数据流的起始码时才被设定为“1”。
状态监视寄存器CR1的第2bit通常被设定为“0”,仅在确认缓冲存贮器母线121上输出的MPEG数据流中存在有1字节以上的有效数据时才被设定为“1”。
状态监视寄存器CR1的第3bit通常被设定为“0”,仅在缓冲存贮器102中存在缓冲有效位3个字节以上时被设定为“1”。此bit被用于分析任务、音频数据流传送控制任务、动画数据流控制任务之间的通信。
状态监视寄存器CR2的第0bit通常被设定为“0”,如果缓冲存贮器102上发生要支援向SDRAM300传送的请求即被设定为“1”。此bit用于分析任务、音频数据流传送控制任务、动画数据流传送控制任务之间的通信。
状态监视寄存器CR2的第1bit通常被设定为“0”,仅在DMA转送结束时被设定为“1”。
状态监视寄存器CR2的第2bit通常被设定为“0”,仅在出现对位流FIF0103的传送请求时才被设定为“1”。
状态监视寄存器CR2的第3bit通常被设定为“0”,如果FIF0控制器112内部的控制寄存器被更新,则设定为“1”。
状态监视寄存器CP3的第0bit通常被设定为“0”,如缓冲存贮器102成为DMA-READY状态则被设定为“1”。
状态监视寄存器CR3的第1bit通常被设定为“0”,如向SDRAM300的DMA传送结束则被设定为“1”。
状态监视寄存器CR3的第2bit通常被设定为“0”,在外部连接的显示装置的水平回扫线信号的下降沿被设定为“1”。
状态监视寄存器CP3的第3bit,通常被设定为“0”,在外部连接的显示装置中的视频信号到达消隐期间即被设定为“1”。
状态监视寄存器CR3的第bit通常被设定为“0”,仅在发生对图形输出任务的处理请求时才被设定为“1”。
上述这样的3个状态监视寄存器表明AV译码器内的各缓存器和控制器的控制状态。其他的状态监视寄存器也相同,利用7个状态监视寄存器I/O处理器能监视各异步事件任务作为其自身的起动要素的各种事件是否成立。
运算执行单元84为具有与运算执行单元14同样的功能的结构。与运算执行单元14比较,第一新颖处在于,由指令译码控制单元81接收被加给称为CR1~CR7的各状态监视寄存器的序号和立即值,进行为将被指定的状态监视寄存器的保存值与接收到的立即值作比较的减法运算。按照此减法运算结果,使零标记、进位标记成为ON/OFF来对指令译码控制单元81通报状态监视寄存器的保持值与立即值为一致、不一致、大小。
上述通报中,指令译码控制单元81能输出内容为使当前执行中的运算无效的信号,一旦接收到此信号,运算执行单元84即中断向通用寄存器存贮值。
指定译码控制单元81作成具有与指令译码控制单元11相同功能的结构,但与指令译码控制单元11不同的是,指令译码控制单元81由指令存贮器100读出能形成事件等待循环的指令,在对之进行译码时将加给称做CR1~CR7的各状态监视寄存器的序号和立即值输出到运算执行单元84。构成事件等待循环的指令是下面(例1)所含的内容。在对运算执行单元84输出状态监视寄存器的指定和立即值之后,运算执行单元84利用零标记、进位标记向指令译码控制单元81通报保存值与立即值的一致、不一致、大小,指令译码控制单元81即参照这些,如果被通报保存值与立即值不一致,即输出表明事件不成立的信号给任务管理寄存器13,输出使此下一指令的执行结果无效的信号到运算执行单元84将使得不予先前进到读出目的地址值通知指令读出电路10。如被通知保存值与立即值不一致,即输出表示事件成立的信号到任务管理寄存器13。
(例1)
指令
判定事件ⅰ的成立的真假,如事件ⅰ
成立为假,不予先进到读出目的地址。
此指令的助记符在(例2)中表明。
(例2)
cmp_and_Wait cr_statei,立即值
(例2)中第一操作数中记述了cr_statei(i=0,1,2,3…7),意味着可指示I/O处理器中的7个状态监视寄存器中的任一个。
将此第一操作数中指定的状态监视寄存器与第二操作数中指定的立即值加以组合,能确认35个事件中任意一个是否成立。上述指令在后面的说明中称之为Cmp_And_Wait指令。上述的事件等待循环按照在此Cmp_And_Wait指令的第一操作数、第二操作数中对指定事件的成立与否判断为n次和否定发生,自不必说。
图14A表示第三实施例中加以变更的指令读出电路10的结构。图14A中在指令读出电路10设置IF1+1保存单元20、增量电路21、IF2保存单元22、DECPC保存单元23、任务各别PC存贮单元24、选择器25、选择器26,这与第一实施例无差异。指令读出电路10中的新颖之处是,被连接到DECPC保存单元23的输出级的触发器27。
触发器27在Cmp_And_Wait指令指定的事件不成立时设定,按指令译码控制单元81能输出译码中的指令的读出目的地址到选择器25以保存DFCPC保存单元23的值。如果指令译码控制单元11给出要返回程序计数值的指示,触发器27通过⑤的信号线将其保存的值输出到选择器25,选择器25把触发器27的保存值存贮进任务各别PC存贮单元24,将任务各别PC存贮单元24的输入起源转换到⑤的信号线。第三实施形态中的指令读出电路的输出逻辑表如图14B所示。
图19A为针对Cam_And_Wait指令译码时的帧中的I/O处理器的结构部件的定时图,说明此定时图中的触发器27所承担的任务。
图19A中,在触发器27将作为保存值的相当于Cam_And_Wait指令的地址的指令0-0的地址如参照符号a7所示输出时,指令0-0的地址即被作为IPC0存贮进任务各别PC存贮单元24。由此,任务各别PC存贮单元24中即存贮有作为IPCO的Cmp_And_Wait指令的地址。
本实施形态中的任务管理单元15的内部结构示于图15。
图15所示的任务管理寄存器13是被分配为分别管理陷入事件等待循环(后面称为Wait状态)的任务的bit的寄存器。任务管理寄存器13在由指令译码控制单元81通知表明事件不成立的信号时,即参照任务ID保存单元72保存的任务标识符taskid将对应于其任务标识符taskid的bit转换为“1”。相反,在被通知表明事件成立的信号时,则参照任务ID保存单元72保存的任务标识符taskid,将对应于其任务标识符taskid的bit转换为“0”。
图16表示任务管理寄存器13中的wait状态任务的管理用bit的构成。此图中,如第0bit为“1”,即表明任务(0)为Wait状态,如第0bit为“0”则表明任务(0)不是这样。
此图中,如第1bit为“1”,表明任务(1)为Wait状态,第1bit如为“0”则表明任务(1)不是这样。任务管理寄存器13的第2bit如为“1”,表明任务(2)为Wait状态,如第2bit为“0”则表明任务(2)不是这样。借助由任务管理寄存器13对事件等待循环的管理,就能分别管理多个任务中同时发生多个的事件等待循环。
在图19A的定时图中,在指令0-0被译码为Cmp_And_Wait指令时,即认为是判定事件不成立。此时,指令译码控制单元81如参照符号a8中所示通知任务(0)为事件成立等待状态的内容。为此,任务管理寄存器13如参照符号a9所示将对应于任务(0)的任务标识符的bit设定为“1”。
下面参照定时图说明“事件成立等待时”、“事件成立时”、“事件成立时以后”中如伺设定分配给任务管理寄存器13的各个bit。
图19B表明事件成立等待时、图19C表明事件成立时、图19D表明事件成立以后时的定时图。
任务(0)中的Cmp_And_Wait指令认为等待成立的事件在图19C中成立。此时,指令译码控制单元81如参照符号d1所示通知事件成立的内容。这样,任务管理寄存器13即如参照符号d2所示将对应于任务(0)的任务标识符的bit设定为“0”。
参看图15说明第三实施形态中的时隙管理器61的内部结构。时隙管理器61中在设置触发器51、计数器52、比较器54这方面与第一实施例无差异。图15中的新颖点在于ID变换器53和选择器55。
ID变换器53,在任务ID保存单元72中被输出到应分配以下一时隙的任务的标识符时,即判定在任务管理寄存器13中被设定为Wait状态的任务与应分配以下一时隙的任务标识符taskid是否一致,如果一致即输出高电平值到选择器55,如不一致则输出低电平值到选择器55。
选择器55按照ID变换器53输出的信号的高电平值、低电平值加以选择将“2”或“4”的数值输出给比较器54。图19A中应分配以下一时隙的任务为任务(0),由于参照符号a10中选择器55被输出给低电平值,所以如参照符号a12选择器55输出“4”到比较器54。但在图19A的参照符号a9中有关任务(0)的bit被设定为“1”,如图19B的参照符号g1中所示选择器55中被输出为高电平值时,选择器55即如参照符号g2所示输出“2”到比较器54。
在图19C的参照符号d2中,有关任务(0)的bit被设定为“0”,如图19D参照符号g5所示选择器55被输出以高电平值时,选择器55即按参照符号g6所示输出“4”到比较器54。
依靠选择器55选择输出数值“2”或“4”到比较器54,将2周期的时隙、4周期的时隙中的某一个分配到各个任务。在选择器55输出“2”时,由于使其第二个指令无效,结果就被分配以一个周期的时隙。
沿定时图的时间轴,说明图19A至图19D的定时图中所示的指令译码控制电路10的结构要素和任务管理单元15的结构要素的操作。
在初始状态,任务管理寄存器13的bit假定全部为零。这样,在图19A中开始由任务(0)读出指令时,由于有关任务(0)的bit在任务管理寄存器13中被设定为“0”,所以如参照符号a12所示选择器55将“4”作为计数器的上限值输出。因为计数器的上限值被设定为“4”,所以是认为以4个周期执行任务(0),但由于指令0-0为Cmp_And_Wait指令,所以如参照符号a7所示在任务各别PC存贮单元24中写入指令0-0的读出目的地址。与此同时,参照符号a8、a9所示在执行Cmp_And_Wait指令时将任务管理寄存器13的第0bit设定为“1”。这样的设定使任务(0)成为事件成立等待。在这样设定bit后,任务(1)、任务(2)、任务(3)、任务(4)、任务(5)的执行完成时即移动到下一帧。
在事件成立等待状态中任务管理寄存器13的bit仅任务(0)为“1”,其他的bit均认为是零。这样,在图19B中如开始由任务(0)读出指令,有关任务(0)的bit在任务管理寄存器13中被设定为“1”,所以如参照符号82所示选择器55输出作为计数器的上限值的“2”。由于计数器的上限值被设定为“2”,要对任务“0”执行2个周期,但由于指令0-0为Cmp_And_Wait指令,任务各别PC存贮单元24中写入指令0-0的读出目的地址。这样写入后,任务(1)至任务(5)的执行完成即要转移到下一帧。
在下一帧中认为事件成立。如在图19C中开始由任务(0)读出指令,有关任务(0)的bit在任务管理寄存器13中被设定为“1”,所以如参照符号g4所示选择器55输出作为计数器的上限值的“2”。因计数器的上限值被设定为“2”,所以要对任务(0)执行2个周期。
在作为指令0-0的Cmp_And_Wait指令执行时,因确认事件成立,如参照符号d1、d2所示Cmp_And_Wait指令执行时任务管理寄存器13的第0bit设定为“0”。由这种设定将任务(0)由事件成立等待中解放。这样在bit设定后,任务(1)至任务(5)执行完毕就要转移到下一帧。
在图19D所示的事件成立以后的帧中,有关任务(0)的bit在任务管理寄存器13中被设定为“0”,所以如参照符号g6所示选择器55输出作为计数器上限值的“4”。因计数器的上限值被设定为“4”,对任务(0)执行4个周期。
下面参照图18A~18D说明如上述构成的第三实施形态I/0处理器进行的时隙分配。
图18A中任务(0)、任务(3)、任务(4)、任务(5)任一个均为存贮器传送控制任务,假定其第一个指令为Cmb_And_Wait指令。这里在图18B的状态中,如假定这些Cmp_And_Wait指令排队中的事件为未成立事件,任务(0)、任务(3)~任务(5)中分配2个周期的时隙,第二指令被无效化,则任务(1)、任务(2)中被分配4个周期的时隙。
图18C中任务(0)~任务(5)轮流到哪一个,认为仅有任务(0)的Cmp_And_Wait指令等待的事件成立。这样在该事件成立的帧中,任务(3)~任务(5)中仍然被分配2个周斯的时隙,第二指令被无效化,而任务(0)因事件成立故第二指令被执行。
图18D中在事件j0成立以后的帧中,任务(0)被分配以与任务(1)、任务(2)同样的4个周期的时隙。
图18E表示Cmp_And_Wait指令的指令格式示例。图18E中,利用5bit至7bit的3个位可指定7个状态监视寄存器中的任何一个,利用11bit至15bit可存放5位长的立即值。利用此格式的9bit和10bit可指定操作数的内容。由将此二位为“10”,I/O处理器执行Cmp_And_Wait指令的操作。而由指定此二位为“00”,I/O处理器执行7个状态监视寄存器中的一个的值与5位的立即值的比较指令的操作。
采用上述实施例,依靠在等待可能访问存贮器的状态的存贮器传送控制任务上分配较短时间长的时隙,而能提高其他任务的进度。
(第四实施例)
第四实施例是关于在显示的水平消隐期间、垂直消隐期间对图形输出任务分配更多的时隙的技术。
进行增加时隙的I/O处理器,以在第一实施形态中的任务管理单元15的构成上加以图2D~图21所示的变更来实现。
第四实施形态中的I/O处理器设置有指令存贮器100、指令读出电路10、指令译码控制单元81、运算执行单元84、任务管理单元15,这与第三实施形态无差异。第四实施形态中的新颖之处是在任务管理寄存器13监视紧急状态迁移许可信号iexecmode这一点上。
图20表示第四实施形态中的任务管理单元15的内部结构。
图20中的任务管理寄存器13中的3个位,利用任务管理寄存器13内的3个位来指定须要紧急处理的任务的标识符。该3个位中,在6个任务中的哪一个任务作紧急处理,按照上述紧急状态迁移许可信号iexeemode为怎样内容的信号作适当的改变。本实施例中,紧急状态迁移许可信号iexecmode相当于水平消隐期间、垂直消隐期间等,将图形输出任务的标识符指定到任务管理寄存器13中的3个位。
将哪一任务作为需要作紧急处理的任务登记进任务管理寄存器13,由任务管理寄存器13参照哪一任务中所含的emergecy(紧急)指令来确定。在指令译码控制器81对下一应执行指令进行译码时,如其译码结果为emergecy指令,任务管理寄存器13即将含有该指令的任务作为需要紧急处理的任务保存其标识符。
图21中表示第四实施形态中的调度器62的内部结构。图21中调度器62设置有任务ID保存单元72,这与第一实施形态无异。图21中的新颖处在于任务循环管理单元73和优先编码单元74分别为任务循环管理单元75和优先编码单元80所置换。还在于另外加有变换器76、紧急任务屏蔽单元77和任务ID保存单元83。
任务循环管理单元75与任务循环管理单元73不同处是任务循环管理单元73监视任务ID保存单元71中任务标识符被如何更新,利用6位长的寄存器来管理6个任务中的时隙分配的完成,而与之相对地,任务循环管理单元75在区分为通常期间内的任务管理和紧急期间内的通常任务的管理的前题下进行对完成时隙分配的任务的管理。例如,在任务管理寄存器13中以交错方式执行任务(1)时,就成为6个任务中的5个任务进行任务(0)、任务(2)、任务(3)、任务(4)、任务(5)这样的巡回。
如上述对5个任务进行巡回时,表明执行完毕的任务的循环值就有必要在任务管理寄存器13中以被管理的紧急任务删除的数值来表达。这样,任务循环管理单元75为管理紧急任务删除的循环值,与循环值taskn不同地将紧急任务删除的循环值taskne输出给紧急任务屏蔽单元77。顺便说一下,taskne的“ne”是来自“Not”和“Emergency”的头字母。
变换器76将任务管理寄存器13中被管理中的紧急任务的标识符变换成6位的循环值emgcytask。
紧急任务屏蔽单元77设置有由变换器76变换的循环值emgcytask与任务循环管理单元75输出的循环值taskne的6位长的逻辑和的“或”电路78。
这里,在“或”电路78中取逻辑和就是表明要计算出含有循环值taskne和表示紧急任务的循环值两者的6位长的循环值。例如,循环值taskne是表示时隙被分配到任务(0)、任务(2)、任务(3)的“001101”,循环值emgcytask是表示紧急任务为任务(1)的“000010”时,“或”电路78的输出就成为表示时隙被分配到任务(0)、任务(1)、任务(2)、任务(3)的“001111”。
优先编码器80除优先编码器74的功能外,还接收任务循环管理单元75输出的循环值taskne(循环值maskne),检测所接收的任务循环管理单元73的循环值taskne(循环值maskne)中第n bit发生由“1”向“0”的翻转。在检测到向“0”翻转的bit时,即将分配到产生此翻转的bit的任务的任务标识符taskid分别各个地存贮进任务保存单元83。
例如,当作为紧急任务的循环值与循环值taskne的逻辑和的循环值maskne“000111”被由紧急任务屏蔽单元77输出时,优先编码器80检测此循环值maskne中由下位开始的第3bit中的向“0”产生的翻转。此第3bit为图6B中被分配到任务(3)的bit,所以优先编码器80将任务(3)的任务标识符taskid输出给选择器82。
cstate存贮单元85存贮表明I/O处理器为通常状态还是紧急状态的标记cstate。图23为cstate存贮单元85存贮的标记的状态迁移图。此图中,由通常状态向紧急状态的迁移在紧急状态迁移许可信号iexecmode为高电平,且任务转换信号chg_task也为高电平值时进行。相反,由紧急状态向通常状态的迁移则在任务转换信号chg_task也为高电平值时进行。图24为表示紧急状态迁移许可信号iexecmode、任务转换信号chg_task、cstate间的定时的定时图。
在iexecmode信号上升为高电平的定时a30如参照符号a31所示任务转换信号chg_task为高电平值。这样,cstate即如参照符号a32所示为高电平迁移到紧急状态。在任务转换信号chg_task如参照符号a33所示再次为高电平时,cstate即如参照符号a34所示为低电平值返回到通常状态。这样,由紧急状态向通常状态的迁移、由通常状态向紧急状态的迁移重复进行。
选择器82,在所输入的紧急状态迁移许可信号iexecmode为高电平、且cstate如参照符号a32所示为高电平时(cstate的逆直值cstate!如参照符号a35所示为低电平时),选择任务管理寄存器13中所存贮的任务标识符taskid输出到任务ID保存单元72。在其他情况下,选择由作为优先编码器80的输出的循环值maskne变换的任务标识符taskidne输出给任务ID保存单元72。图22表示选择器82中的taskide的真值表。
这样,选择器82按照紧急状态迁移许可信号iexecmode的高电平/低电平期间将由循环值maskne变换的任务标识符taskidne与紧急任务的标识符转换输出,就意味着按照紧急状态迁移许可信号iexecmode的高电平/低电平期间,将紧急任务删除的某一任务与紧急任务转换地存贮进任务ID保存单元72。
例如,如假定任务(1)为紧急任务,选择器82就作为紧急任务删除的任务标识符按任务(0)、任务(2)、任务(3)、任务(4)、任务(5)输出任务标识符。
在通常状态中,如图25A中所示,因为由选择器82输出紧急任务删除的某一任务,所以就按任务(0)、任务(2)、任务(3)、任务(4)、任务(5),分配给任务(1)的时隙为0周期。
在紧急状态中,如图25B所示,因为由选择器82选择输出紧急任务删除的某一任务和紧急任务,所以就象任务(0)、任务(1)、任务(2)、任务(1)、任务(3)、任务(1)、任务(4)、任务(1)、任务(5)、任务(1)这样,任务(1)以二次中一次的比率被分配时隙。在由选择器82输出紧急状态中的任务标识符时,任务执行巡回到任务(1)为每二次中一次概率换算即为1/2。
这样的1/2的概率为通常执行概率的3倍所以是很高的概率,从而使紧急任务能以非常高的速度执行。
按照上述这一实施形态,能在水平消隐期间、垂直消隐期间仅优先地执行图形输出任务。
在此期间如将动画数据变换成视频信号,就能在显示器的显示期间之前恰当地处理此视频信号。
而且在第四实施形态的结构中,因为优先执行紧急任务,虽然产生了紧急任务之外的任务的执行频率降低这样的弊端,但也可以设置予防这一点的防止机构。作为其防止机构的是在任务管理寄存器中存贮为“必须维持最低足够限度的执行速度”的特权任务(称做例外任务)的标识符,对此例外任务,将除执行回指令的任务转换条件之外的内容的信号每次输出给时隙管理器61。
时隙管理器61内的比较器54在接收到此内容的信号时延迟规定时间输出转换信号。这里的规定时间的时间长度为因紧急任务优先而造成的取回任务的滞后程度的时间长。依靠这样的推迟规定时间的任务转换信号的输出,而能作超过4指令地进行例外任务的处理、取回伴随紧急任务插入的处理的延迟。
本实施形态虽然是对与外部输入的特定信号同步地高速化执行特定任务的描述,但也可以由特定指令确定高速执行的任务。状态监视寄存器CR2的第3bit通常被设定为“0”,在外部连接的显示装置中的视频信号为回扫期间即被设定为“1”,所以将状态监视寄存器CR2和立即值指定为操作数,在图形输出任务上配置判定它们一致、不一致内容的CMP指令,仅在对此指令的运算的执行结果为真时才高速执行图形输出任务,这样也能达到目的。还可以用指令的操作数来指定需要作紧急处理的任务。
虽然是由紧急任务删除的循环值taskne指定应以通常状态执行的任务,但也可以通常状态执行紧急任务。
(第五实施形态)
第五实施形态为利用任务相互间的结合以便能提高任务的巡回效率的实施形态。
这里任务相互的结合是指在特定时期到来之前时隙分配无用地结束的任务自行前进到进入休眠状态,而由其他任务解除休眠状态。而后被委以解除工作的任务即等待应解除其休息状态的时期的到来,若到达即解除此特定任务的休眠状态。
任务的休眠在多个任务中既有同时多个发生的情况,也有全都不发生的情况。要能个别地管理陷入休眠状态的任务,在第五实施例中在任务管理寄存器13中分配用于管理输入到休眠(Sleep状态)的任务的bit。
图26为第五实施形态中的任务管理单元15的构成,图27是表明任务管理寄存器13的bit结构和这些各个bit作怎样的标记功能的说明图。图中任务管理器存器13的第0bit如为“0”,表示将任务(0)作为Sleep状态处理,如第0bit为“1”则表示任务(0)不是这样。
任务管理寄存器13的第1bit如为“0”表示任务(1)作为Sleep状态处理,如第1bit为“1”,则任务(1)不这样。任务管理寄存器13的第2bit如为“0”;表示任务(2)作为Sleep状态处理,如第2bit为“1”则任务(2)不这样。依靠任务对这些bit的转换,或者使自己成为休眠状态,或者解除其他任务的休眠状态。
任务管理寄存器13的位操作由下面的(例3)、(例4)中表示助记符的指令进行。
(例3)
Sleep_task
(例4)
Wake_task task(k)
(例3)中“Sleep_task指令”为使自身成为Sleep状态的指令。(例4)中“Wake_task指令”能由第1操作数指定6个任务中任一个的标识符。依靠将这样的二种指令配置到各任务中来交互地进行各任务的休眠状态的转移和将其解除。而在Sleep_task指令中也可作成由第一操作数指定其他的任务。
图28表示第四实施状态中的调度器62的内部构成。图28中调度器62设置有任务ID保存单元71、任务保存单元72、任务循环管理单元73、优先编码器74,这与第一实施形态无异。此图中的新颖处在于由反相器94和“或”电路95组成的任务跳越管理电路93。
任务跳越管理电路93由在任务管理寄存器13中将被分配的6个位翻转为Sleep状态的反相器94,和取被翻转的6个位与由任务循环管理单元73输出的循环值Laskn的逻辑和的“或”电路95组成。这里,在任务(0)、任务(1)、任务(2)执行完成时由任务循环管理单元73输出“000111”的循环值Taskn,并假定任务管理寄存器13中将任务(3)设定为Sleep状态。这时,任务管理寄存器13的Sleep bit为“110111”,由反相器94输出其翻转值“001000”。由反相器94得到的翻转值“001000”与循环值taskn“000111”的逻辑和为“001111”。在将此逻辑和输出到优先编码器74时,检测到第4bit由“1”向“0”进行的翻转,而将任务(4)的标识符输出给任务ID保存单元71和任务ID保存单元72。在任务(4)的标识符被输出后,即以任务(0)、任务(1)、任务(2)、任务(4)的顺序来加以执行。
图29A为将Sleep指令作为指令1-1、2-1、3-1其内部具有的异步事件任务示例,图30为表明图29A的异步事件任务怎样执行的定时图。在Sleep指令如图30中所示作为指令1-1并被作异步事件任务的第一个指令加以存贮时,此指令1-1被存放在DECPC保存单元23中,当由指令译码单元11译码时,选择器25通过①信号线将指令1-2的读出目的地址存进任务各别PC存贮单元。此后指令详码单元11将指令1-2、1-3无效化(图11中的“NOP”)。
图29B表示Sleep指令和Wake指令的指令格式的示例。图29B中,此指令具有图7B中所示寄存器指定型的算术运算指令的指令格式。依靠将此格式的11bit至13bit指定为“010”,I/O处理器即执行Sleep指令的操作。而由将本格式的11bit至13bit指定为“011”,I/O处理器即执行Wake指令的操作。
现参照图31A~31D说明采用如上述构成的第五实施形态的I/O处理器进行的时隙分配。
假定任务(1)为分析任务,任务(3)为主I/O任务,任务(1)、(2)、(3)的第一个指令均为Sleep指令。任务(0)、(4)、(5)上被分配以4个周期的时隙,但图31A中的任务(1)、(2)、(3)因为作为第一个指令存贮的是Sleep指令所以被分配以2个周期的时隙。
Sleep指令执行后,在下一帧中如图31B所示,被分配到任务(1)、(2)、(3)的时隙为0周期。
任务(0)为起动期间传送控制较长位流的任务,在任务(0)中假定第一个是存贮针对任务(3)的Wake指令。这样,如图31C中所示,在下一帧中由译码此Wake指令而在任务(3)中分配以4个周期的时隙。
在任务(0)中假定第14个存贮的是针对任务(1)的Wake指令。这样,如图31D中所示,由在下一帧中译码此Wake指令而在任务(1)上分配以4个周期的时隙。
按照上述的此实施形态,分析任务、主I/O任务等应起动的期间被限定的任务自行进入休眠状态,将休眠任务的解除委托给起动期间较长的传送控制任务,这样就能提高任务巡回的效率。
(第六实施形态)
第六实施形态是有关与第三实施形态中的wait状态、第四实施形态中的紧急任务控制、第五实施形态中的休眠任务控制共存的技术。
图32是将wait状态、emgcy状态、sleep状态的管理汇总到任务管理寄存器13的各bit上。时隙管理器61和调度器62参照这样汇总在任务管理寄存器13上的Wait状态、emgcy状态、Sleep状态来进行下一任务的确定和任务的下一时隙上分配指令数的增减。
图33为能使紧急任务控制和Sleep状态控制共存而构成的调度器62的结构图。图33中,调度器62由任务ID保存单元72、任务循环管理单元75、变换器76、紧急任务屏蔽单元77、优先编码器80、选择器82、任务ID保存单元83构成,这与第四、第五实施形态无不同。此图中,新加有取任务循环管理单元75的输出与由反相器94翻转循环值taskne的循环值的逻辑和的“或”电路96,将其结果输出给优先编码器80。
优先编码器80将“或”电路96输出的循环值变换成任务标识符,输出到任务ID保存单元72和任务ID保存单元83。
按照上面的实施形态,依靠使得第四实施形态中的紧急任务控制和第五实施形态中的Sleep状态任务控制共存,能实现富有更灵活的任务调度器。
下面参照流程表说明第一~第五实施形态中所示的I/D处理器的整个控制。
图34为表示第一实施形态中I/O处理器的整个控制的流程图。图中,“变数k”为用于指示指令存贮器100中所存贮的6个异步事件任务的变数,对应于任务ID保存单元71和任务ID保存单元72保存的任务标识符taskid。“变数ⅰ”为用于指示各自的任务中包含的指令执行对该指令在相关时隙中第n个被执行的变数,对应于由计数器52所计数的计数值。“变数adr”为表示任务各别PC存贮单元24中存贮的各个任务的读出目的地址的变数。
图39表示由图34的流程图确定的时隙间的迁移图。图39中,纵方向向下为时间轴,以包含4个长方形的粗边线围绕的四角形为时隙。由图34的流程图中的变数k个别地指明。粗边线内的一个各四角形表示执行一个指令的周期,这些指令由变数ⅰ指明。步骤S1,上述任务ID保存单元71输出零的任务标识符taskid。由此变数k被清零,转移到步骤S2。步骤S2,由对计数器52作初始化来将变数ⅰ初始化为1。步骤S3中,任务ID保存单元72将读出地址选择信号nxttaskid(rd_adr)输出到任务各别PC存贮单元24,由此将任务(k)的读出目的地址由任务各别PC存贮单元读出。步骤S4中,利用任务(k)的读出目的地址由指令存贮器100取出指令。在步骤S5中,指令译码控制单元11对所取出的指令进行译码。
步骤S6,比较器54进行变数ⅰ与上限4的比较。此时因ⅰ=1故转移到步骤S7。步骤S7,在计数器52中进行变数ⅰ增量,是使增量电路21进行读出目的地址增量的步骤,此增量意味着由任务k中的指令的执行向其他指令的执行转换。此时因ⅰ=2,进行由时隙中指令的执行向第二执令的执行转换。
变数ⅰ在步骤S7被增量转移到步骤S4。因变数ⅰ增量的ⅰ=2,读出目的地址也以一指令进行,在步骤S4中指令读出电路10读出指令存贮器100中以读出目的地址(adr+1)所指示的指令,在步骤Sr指令译码控制单元11对之译码、执行。
重复进行上述步骤S4~S7使变数ⅰ逐次增量,顺序读出指令存贮器100中adr+0、adr+1、adr+2、adr+3的区域中存放的指令。
重复进行上面步骤S4、S5直至步骤S6为Yes。上述过程中在变数为1、2、3之内反复进行步骤S4、S5、S6、S7的过程,变数ⅰ为4开始由步骤S6向S8进行转移,就意味着对任务(0)的指令重复执行4次(图39中位于最上层的4个四角形的排列为任务(0)的第一时隙中的4次指令执行的图解)。附带说一下,步骤S8~S10的过程为进行任务到任务的转换,所以步骤S6中的“变数ⅰ=4”的判定就意味着将指令的4次重复执行作为任务转换的条件。
步骤S6中进行变数ⅰ与上限值的判定后,在步骤S8由增量电路21将变量ⅰ增量,在步骤S9将任务(k)的读出目的地址(adr+i-1)作为读出目的地址(adr)存放进任务各别PC存贮单元28之后转移到步骤S10。在步骤10中在任务循环管理单元73和优先编码器74中确定下一应执行的任务。此时,由任务循环管理单元73输出“000000”的循环值taskn,由优先编码器74输出“001”的任务标识符taskid。“001”的任务标识符taskid,即k=1,进行由任务(0)向任务(1)的转换。任务转换后转移到步骤S2,进行变数ⅰ的初始化重新开始重复步骤S3~S7。
与前次相同,在步骤S4中由指令存贮器100中的相关读出目的地址中取出任务(1)所含的一指令,在步骤S5中译码、执行被取出的指令。
步骤S6再次进行变数ⅰ与上限4的比较。此时因ⅰ=1故转移到步骤S7。变数ⅰ在步骤S7被增量转移到步骤S4。由于变数ⅰ增量成为ⅰ=2,在步骤S4中进行对以读出目的地址(adr+1)所指示的指令存贮器100内的区域的访问,读出指令存贮器100中以读出目的地址(adr+1)所指示区域中存放的指令,在步骤S5中对之进行译码、执行。
由以上重复进行步骤S4~S7的一连串工序,使变数ⅰ逐次增量而顺序地读出指令存贮器100中adr+0、adr+1、adr+2、adr+3的区域中所存放的指令。
反复进行上述步骤S4、S5的执行直至在步骤S6为Yes。当步骤S6为Yes时,即进行由步骤S6向步骤S8的转移。在上述过程中,变数Ⅰ为1、2、3中重复步骤S4、S5、S6、S7的过程,变数ⅰ为4即开始由步骤S6向S8的转移(由到上述为止的操作,即为图39中进行的任务(1)中的4个指令(针对任务(1)的4个指令)。在步骤S8中对变数k作增量,在步骤S9将任务(k)的读出目的地址(adr+i-1)作为读出目的地址(adr)存贮后转移到步骤S10。在步骤S10任务循环管理单元73和优先编码器74中再次进行变数k的确定,在确定变数k为k=2时进行由任务(1)的(2)的转换。任务转换后转移到步骤S2,变数ⅰ被初始化再开始由步骤S3至S7的重复。
由以上的重复操作,图39中任务(1)、(2)、(3)、(4)、(5)各以4个执令执行,各任务被顺序消费。
第二实施形态中的I/O处理器的整个控制按图35的流程图中所示过程进行,图35的流程图是以由步骤S1~S10组成的图34的流程图作为基础作成的。这里,图35中的新颖点在于将步骤S12插入到步骤S4与S5之间。
步骤S12判断步骤S4由指令存贮器100读出的指令是否是Wait_Until_Next指令。如是Wait_Until_Next指令,转移到步骤S8将变数ⅰ增量,在步骤S9中将任务(k)的读出目的地址(adr+i-1)作为读出目的地址(adr)存贮。
这里应注意,步骤S12中不管变数ⅰ的值如何,在Wait_Until_Next指令被执行时刻均转移到步骤S8存贮读出目的地址。这样由于步骤S8不管变数ⅰ的值如何均在步骤S12的译码后被执行,所以由任务到任务的转换均不要等待4次指令而被进行。
图40表示第二实施形态中的时隙间的迁移图。
图40中的顺序与图39相同纵方向向下为时间轴,以含有4个长方形的粗边线围绕的四角形构成时隙。粗边线中的一个各四角形表示执行一个指令的周期。这些四角形中被写入“o”的表示Wat_Until_Next指令。而任务(0)在各时隙中执行指令存贮器100中的哪一个指令由四角形右侧的作为“PC”、“PC+1”、“PC+2”、“PC+3”的程度计数值和按程序计数值的相对值表述(本图以任务(0)的第一时隙的第一指令读出的程序计数值为基准)。
图36中由进行步骤S1~S4的过程读出任务(0)的第一时隙的第一指令。在步骤S12进行所读出指令的译码结果的判断,由于任务(0)的第一时隙的第一指令非Wait_Until_Next指令而转移到步骤S5。由向步骤S5的转移执行任务(0)的第一时隙的第一指令而前进一指令。
由再次进行步骤S1~S4的过程读出任务(0)的第一时隙的第二指令。在步骤S12进行对所读出指令的译码结果的判断,任务(0)的第一时隙的第二指令为Wait_Until_Next指令而进行向步骤S8的转移。由步骤S8变数ⅰ被增1成为“3”,在步骤S9将读出目的地址(adr+2)作为任务(0)的读出目的地址存贮进任务各别PC存贮单元110。
存贮后,在步骤S10变数k被增量,转移到步骤S2。由此步骤S10中变数k的增量,任务(0)向任务(1)转换,等待执行第一时隙的第三、第四指令。
任务(1)的第一时隙的执行由执行4个指令来进行,同样进行任务(2)、(3)、(4)、(5)的执行而进行直到任务(5)的第一时隙的第四指令。在步骤S10中确定变数k,在步骤S2中变数ⅰ被初始化为“1”,步骤S3中由任务各别PC存贮单元读出任务(0)的读出目的地址。这里,应注意的是,在执行任务(0)的第一时隙的第二指令(Wait_Until_Next指令)时,PC+2(“PC”表示第一指令的程序计数值)被作为任务(0)的读出目的地址存放在任务各别PC存贮单元110中。这样因任务各别PC存贮单元110中存贮的是“PC+2”,所以由PC+2开始执行任务(1)的第二时隙。
图36为第三实施形态中I/O处理器的流程图。本图中,与图34、35相同处理内容的步骤被加以与图34、35相同的参照符号其说明省略。图中的“变数Total”被用于根据任务管理寄存器13的内容表示选择器55输出的数值指定指令执行数的上限。变数Tolal在其初始化状态中被初始化为时隙中的指令总数的“4”,但也被更新为“2”。
图41表示由第三实施形态流程图得到的时隙间的迁移图。在下面说明中,图41中任务(0)的第一时隙的第一指令、第二指令执行完毕,由此而要读出第三指令。
步骤S93将上述变数k清零,变数Tolal设定为4。步骤S2将上述变数ⅰ清零。步骤S3中由任务各别PC存贮单元110读出被清零的变数k的读出目的地址、即任务(0)的读出目的地址。在步骤S4中,在指令存贮器100中将读出的任务的读出目的地址作为绝对地址、以变数ⅰ作为偏移值的地址取出指令。
在步骤81中判断所取出的指令是否为Cmp_And_Wait指令。步骤S82中,指令译码控制单元81、运算执行单元84参照Cmp_And_Wait指令的第一操作数中描述的状态监视寄存器j的指定和第二操作数中描述的立即值,来判断Cmp_And_Wait指令提示的事件的成立真假。在状态监视寄存器j的保存值与立即值不相一致而判定为事件不成立时,转移到步骤83,将任务k设定为Wait状态转移到步骤S84。在步骤84中不进行程序计数而是在触发器27和选择器25将读出目的地址设定为Cmp_And_Wait指令的地址转移到步骤S87。
步骤S87为与图35的流程图的步骤S6同样进行上限检验的步骤。步骤S6中“变数ⅰ=4”的判定以4次重复执行指令作为任务转换的条件。与此相对地步骤S87中的“变数ⅰ=变数Tolal”的判定则以重复执行指令的次数与变数Tolal相等作为任务转换的条件。由于这里的变数Tolal未更新,所以“变数ⅰ=变数Tolal”实质上就成为“变数ⅰ=4”的判定。Cmp_And_Wait指令在任务(0)的第一时隙中被包含在第三指令中,另一方面由于变数ⅰ=2,所以进行由步骤S87向步骤S7的转移。在步骤S7中变数ⅰ被增量,即由步骤S4中的读出指令,将Cmp_And_Wait指令的下一顺序的指令读出到指令译码控制单元81。一经读出,步骤81即为No而在步骤S85,指令译码控制单元11在紧前面的指令中被判定为状态不成立时判断读出目的地址是否已被设定为Cmp_And_Wait指令的地址(有未发生了PC复原)。
这里,所谓地址(adr+i)中存放的指令的紧前面的指令相当于Cmp_And_Wait指令,在此Cmp_And_Wait指令译码时发生PC复原。因此步骤S85为Yes转移到步骤S86。在步骤S86中指令译码控制单元11废弃读出的地址(adr+i)的指令,进行使通用寄存器的存贮值无效内容的通知,如图40的任务序列中任务(0)的第一时隙的第四指令所示,使地址(adr+i)所存放的指令无效化转移到步骤S87。变数ⅰ的值因为是4所以在步骤S87中如作“变数ⅰ=变数Total”的判定即为Yes,转移到步骤S88。
步骤S87的判定为Yes意味着一时隙的指令的执行的完成,在步骤S88中则判断有未发生该时隙中PC的复原。之所以进行这样的判断是因为在发生PC复原时任务各别PC存贮单元110中必须存贮其复原目的地。
任务(0)时第四指令被废弃,第三指令中发生PC复原,在步骤S89中于触发器27和选择器25中作为读出目的地址存放复原目的地PC值,转移到步骤S10。在步骤S10中任务循环管理单元73和优先编码器74确定下一任务后将变数k增量转移到步骤S90。
步骤S90~S92,依靠判断由被增量的变数k所指示的任务、即下一应执行的任务是否为Wait状态,来保持这一要在下一时隙中转换指令数的重要意义一致。如按顺序说明,在步骤S90中,ID变换器53参照相当于任务管理寄存器13中的任务(k)的bit,判断任务(k)是否Wait状态。如果是,选择器55即在步骤S91中将变数Total设定为4,如不是则将变数Tolal设定为2。
任务(1)因为不是Wait状态,在步骤S91中将变数Total设定为4转移到步骤S2。这里任务(1)中如认为不含有Cmp_Wait指令,即在步骤S5中的指令重复执行四次进行向下一任务的转换(以上的过程因与第一实施形态中所记录的相同不再作重复说明)。
对不含有Cmp_And_Wait指令的任务(2)、(3)、(4)也顺序执行四个指令依次作任务转换。有关任务(5)的四指令执行完毕转移到步骤S10,在步骤S10对变数k清零,转移到步骤S90。在步骤S90,在任务管理寄存器13中判断被分配到任务k的bitk是“1”还是“0”。此判断意味着弄清楚任务是否为Wait状态。这里,变数k=0,任务(0)刚才被设定为Wait状态,所以在步骤S91设定变数Total为2。在此应注意,变数Total保持与分配到时隙的指令数的意义相一致。在步骤S91将其由“4”更新为“2”,则意味着映象到时隙的指令数由“4”削减到“2”。因此,在任务(0)的第二时隙,变数ⅰ被增量仅为1、2间,亦即步骤S81~S85、步骤S5的处理仅重复2次。此时,作为任务(0)的读出目的地址被存贮在任务各别PC存贮单元110中,是Cmp_And_Wait指令的读出目的地址。由读出目的地址的地址读出Cmp_And_Wait指令时即与第一时隙同样在步骤S82中进行事件成立与否的判定。此时如认为事件不成立而结束时,即进行与第一时隙同样的处理,将读出目的地址恢复为Cmp_And_Wait指令,而结束第二时隙。对不含有Cmp_And_Wait指令的任务(1)、(2)、(3)、(4)也顺序执行四个指令依次作任务转换,在关于任务(5)的四个指令执行结束时开始任务(0)的第三时隙。
这里,I/O处理器中的事件发生变化,任务(0)的Cmp_And_Wait指令中所指定的事件成立。因此,任务(0)的第三时隙中,在步骤S82由指令译码控制单元81判定事件成立,转移到步骤S80,解除任务管理寄存器13中任务k的Wait状态。这样,Wait状态一被解除,即进行由步骤S80向S87的转移,在步骤S87进行变数ⅰ与变数Total的比较,在步骤S7将变数ⅰ增量,在步骤S4由读出目的地址(adr+1)读出指令。步骤S81中判定所读出的指令是否为Cmp_And_Wait,而由于不是Cmp_And_Wait指令故向步骤S85转移。步骤S85中,判定有未发生因紧前面的指令中状态被判断为不成立而恢复PC。由于Cmp_And_Wait指令所指定的事件成立,步骤为S85,No,Cmp_And_Wait指令的下一顺序的指令经过等待二次的事件成立在步骤S85中执行。在步骤S5中下一顺序的指令执行后进行由步骤S5向S87的转移,进行变数ⅰ与变数Total的大小的比较。但在第二时隙中因变数Total被设定为2,任务(0)的第三时隙仅在二次执行完即结束。在向步骤S87转移后,在步骤S88中,判定发生PC复原的发生的真假,此时为No,在步骤S89中将任务(k)的读出目的地址(adr+i-1)作为读出目的地址(adr)存贮,转移到步骤S10。这样,在任务(0)的第三时隙完成时,对不含Cmp_And_Wait指令的任务(1)、(2)、(3)、(4)也顺序执行四个指令依次转换任务。关于任务(5)的四个指令的执行完成时将变数k清零,转移到步骤S90。
在步骤S90,参照相当于任务管理寄存器13中的任务(k)的bit判定任务(k)是否为Wait状态。此时,因为任务(0)的Wait状态已被解除,在步骤S92中将变数Total设定为4,转移到步骤S2。这样因为变数Total已复原为4,任务(0)以后的时隙即按照通常每四个指令地进行。
图37为表示第四实施形态中I/O处理器的整个控制的流程图。图37的流程图中步骤S1~S9的过程与图35的流程同样。
图37中的新颖处在于被加以30号范围的参照符号的步骤S30、S31、S32。步骤S30判定紧急状态迁移许可信号是否为低电平值,如成为高电平值即转移到步骤S31,在步骤S31中确定紧急任务为下面应执行的任务。
相反,如紧急状态迁移许可信号为低电平值,则转移到步骤S32,根据循环值Taskne使优先编码器80由通常的任务中确定下面应执行的任务。
图42表示第四实施例中时隙间的迁移图。本图在通常状态开始,步骤S31的处理被跳越,图41的任务(0)的第一时隙、任务(2)的第一时隙、任务(3)的第一时隙、任务(4)的第一时隙、任务(5)的第一时隙顺序进行。
Taskne的执行轮流一次,如认为发生紧急状态迁移许可信号的高电平期间,即在步骤S2~S9中执行一个任务后,进行由步骤S30向S31的转移。转移后,根据Cstate存贮单元85中所示的Cstate的高、低电平值执行紧急任务。
图38为第五实施形态中多任务过程的流程图。此图与第一实施形态中的多任务过程的流程图不同处在于,步骤S4与S6之间插入有步骤S41~S44、S46、S47。
步骤S41判定由指令存贮器100读出的指令是否为Sleep指令。如是Sleep指令,转移到步骤S42。在步骤S42,任务管理寄存器13将对应于任务(k)的bit翻转为0。然后,在步骤S43将变数ⅰ增量1,在步骤S44将任务(k)的读出目的地址(adr+i-1)作为读出目的地址(adr)存贮后转移到步骤S45。转移后在步骤S45中,反相器94和“或”电路95在管理寄存器13中生成指定Sleep状态的bit删除的循环值,将其输出到优先编码器74,确定下一应执行的任务(k)。这里应注意:如早先所述,“变数k”为用于指示指令存贮器100中所存贮的6个任务的各自一个的变数,该决定就意味着任务到任务的转换。
这里,步骤S45与步骤S10的不同处在于,与步骤S10在变数ⅰ为4的时刻执行相反,步骤S45是不管变数ⅰ值为何,而在Sleep指令被译码时执行。这样因为在不管变数ⅰ的值而在Sleep指令译码后执行步骤S45,任务到任务的转换就成为不等待四次的指令而被进行。
步骤S46中,判定由读出目的地址(adr+1)读出的指令是否为对于任务管理寄存器内的某一bit的Wake指令。如果不是,在步骤S5中译码读出的指令。如果是,在步骤S47中操作相关Wake指令中所指定的jbit,以此来解除任务j的Sleep状态,转移到步骤S6。
图43表示第五实施形态中时隙间的迁移图。图中任务(1)的第一时隙上加有印记的表示任务(1)的第一时隙的第二指令为Sleep_task指令。在Sleep_task指令执行时与第二实施形态中Cmp_And_Wait指令执行时同样,第二指令的译码中执行步骤S41~S44在任务(1)被设定为Sleep状态后进行任务转换,而第三指令和第四指令实际上被废弃。
顺序地进行第一实施形态中所述的任务之间的转换,按任务(2)、(3)、(4)、(5)作任务的巡回,转移到步骤S45。在步骤S45中,优先编码器74按照Sleep状态中的任务的bit被屏蔽的循环值确定下次应执行的任务。这里,在任务管理寄存器13中,分配给任务(1)的bit在任务(1)第一时隙的第二指令中被设定为Sleep状态。因此任务(1)的执行被跳越,继续执行任务(2)的第二时隙。
顺序进行同样的任务间的转换,按任务(2)、(3)、(4)、(5)进行巡回,转移到步骤S45。
在此巡回中,任务(5)的第二时隙的第三指令为指定任务(1)的Sleep状态解除的Wake_Task指令,看作是由指令存贮器100中读出的。当Wake_task指令被由指令存贮器100中读出后,步骤S46的判定为Yes,转移到步骤S47。在步骤S47中由使得任务管理寄存器13的分配给任务(1)的bit为OFF,来解除任务(1)的Sleep状态。解除之后,其余指令也同样执行,结束第二时隙内的处理。
任务(5)结束后,认为被向任务(0)转换的任务。执行任务(0)的第三时隙转移到步骤S45。在步骤S45中判断任务管理寄存器13中被分配到任务(1)的bit是否为ON。任务(5)的第二时隙中,任务(1)的分配bit被设定为ON,如前所述,进行由步骤S45向步骤S2、S3的转移,再开始执行任务(1)。