韧体执行装置与执行方法、韧体配置器与配置方法
技术领域
本发明是有关于韧体的使用技术,尤其是有关于韧体的压缩和解压缩方法与装置,特别是有关韧体执行装置与执行方法、韧体配置器与配置方法。
背景技术
图1a是一已知的韧体执行架构。在典型使用韧体的嵌入式系统装置中,韧体通常是以压缩的形式储存在只读存储器104中。在制造过程中,厂商可能会使用一压缩器102来量产只读存储器104。最常被使用的压缩算法,例如LZ77和LZ78,又被称为字典式算法(dictionary base algorithms),可将具有重复性的字符串转换成简短的索引值,以节省占用的储存空间。因此对于字符串重复率越高的数据,便能得到越高的压缩率。在实际运作中,如图1a所示,解压缩器106可以实时的将韧体从只读存储器104中解压缩到存储器108中,使处理器110可以直接存取存储器108并执行其中的指令。
图1b是一指令架构图。韧体的结构就是一串连续的指令序列。每一指令可以是16或32位,其中若干位值代表指令代码,而某些位值则代表相对地址值。指令代码由处理器110解读,以进行对应的工作。而相对地址值可以用来指出一笔数据或另一笔指令相对于目前指令的相对地址。
图1c是指令分布于存储器中的状况。只读存储器104中储存的压缩韧体数据,被解压缩后储存于存储器108中,形成了该存储器分布。其中,一指令Ins1包含一相对地址值L1指向一指令Ins3。一Ins2也包含一相对地址值L2指向该指令Ins3。虽然指向同一个指令Ins3,但是相对地址值L1和相对地址值L2的值却不相同。该存储器分布中可能潜藏着大量的这种情形。为了实时解压缩并实时执行韧体指令,只读存储器104的容量和解压缩器106的效能都是很关键的资源。因此一种提升韧体实时执行效能的机制是有必要的。
发明内容
为解决上述现有技术中指出的缺陷,本发明提出一种韧体执行装置与执行方法以及韧体配置器与配置方法。
本发明的上述目的是通过如下技术方案来实现的:
一种韧体(firmware)执行装置,包括:一第一存储器,储存一压缩韧体数据;一解压缩器,耦接该第一存储器,将该压缩韧体数据解压缩为一第一指令串流,包含至少一绝对地址指令;一后置过滤器,耦接该解压缩器,使该第一指令串流转换为一第二指令串流,其中,该绝对地址指令被转换为一相对地址指令;一第二存储器,耦接该后置过滤器,储存该第二指令串流;一处理器,耦接该第二存储器,读取该第二指令串流并执行其中的指令。
在该后置过滤器中,一缓冲器收集一个或多个绝对地址指令,并从中重组出一地址字段,指向一绝对地址;一类型判断器耦接该缓冲器,判断该绝对地址指令的类型;一程序计数器产生地址索引,对应每一绝对地址指令;多个解码器耦接该缓冲器和该程序计数器,分别负责将不同类型的绝对地址指令,依据该程序计数器提供的地址索引,转换为对应的相对地址指令;一复用器耦接该缓冲器、该类型判断器和该多个解码器,根据该类型判断器的判断结果,选择该多个解码器其中之一的转换结果,当成该相对地址指令而输出。
该解压缩器是使用字典式解压缩算法对该压缩韧体数据进行解压缩。
当该类型判断器侦测出该绝对地址指令的类型后,对应该类型的一解码器将该地址字段中的绝对地址值,改写为一相对地址值。该相对地址值为该绝对地址值减去当时的地址索引值。
一种韧体配置器,耦接一只读存储器装置以置入一压缩韧体数据。包括:一前置过滤器,将一包含至少一相对地址指令的原始韧体数据转换为一转码韧体数据,该原始韧体数据中的相对地址指令,被转换为该转码韧体数据中的绝对地址指令;一压缩器耦接该前置过滤器,利用一字典式压缩算法,将该转码韧体数据压缩,产生一压缩韧体数据。该只读存储器装置耦接该压缩器,用以储存该压缩韧体数据。
在该前置过滤器中,一缓冲器收集一个或多个相对地址指令,并从中重组出一地址字段,指向一相对地址;一类型判断器耦接该缓冲器,判断该相对地址指令的类型;一程序计数器产生地址索引,对应每一相对地址指令;多个编码器耦接该缓冲器和该程序计数器,分别负责将不同类型的相对地址指令,依据该程序计数器提供的地址索引,转换为对应的绝对地址指令;一复用器耦接该缓冲器、该类型判断器和该多个编码器,根据该类型判断器的判断结果,选择该多个编码器其中之一的转换结果,当成该绝对地址指令而输出。
当该类型判断器侦测出该相对地址指令的类型后,对应该类型的一编码器将该地址字段中的相对地址值,改写为一绝对地址值;其中该绝对地址值为该相对地址值加上当时的地址索引值。
本发明另提供上述韧体执行装置和韧体配置器所实作的韧体执行方法和韧体配置方法。
一种韧体执行方法,包含下列步骤:提供一压缩韧体数据;将所述压缩韧体数据解压缩为一第一指令串流,包含至少一绝对地址指令;执行一过滤步骤,将所述第一指令串流转换为一第二指令串流,其中所述绝对地址指令被转换为一相对地址指令;读取所述第二指令串流并执行其中的指令。
其中,所述过滤步骤包含:收集一个或多个绝对地址指令,并从中重组出一地址字段,指向一绝对地址;产生地址索引,对应每一绝对地址指令;以及将所述多个绝对地址指令,依据程序计数器提供的地址索引,转换为对应的相对地址指令。
另外,所述过滤步骤进一步包含,将所述地址字段中的绝对地址值,改写为一相对地址值;其中该相对地址值为所述绝对地址值减去当时的地址索引值。
一种韧体配置方法,用以置入一压缩韧体数据于一只读存储器装置,包含下列步骤:对一包含至少一相对地址指令的原始韧体数据进行前置过滤,产生一转码韧体数据,其中该原始韧体数据中的相对地址指令被转换为绝对地址指令;以及使用一字典式压缩算法,将所述转码韧体数据压缩成所述压缩韧体数据。
其中,所述前置过滤步骤包含:收集一个或多个相对地址指令,并从中重组出一地址字段,指向一相对地址;产生地址索引,对应每一相对地址指令;以及将所述多个相对地址指令,依据程序计数器提供的地址索引,转换为对应的绝对地址指令。
另外,所述前置过滤步骤进一步包含,将所述地址字段中的相对地址值,改写为一绝对地址值;其中该绝对地址值为所述相对地址值加上当时的地址索引值。
本发明的有益效果是:可以提升韧体实时执行效能。
为让本发明的上述和其它目的、特征和优点能更明显易懂,下文特举出较佳实施例,并配合所附图式,作详细说明如下。
附图说明
图1a为一已知的韧体执行架构;
图1b为一指令架构图;
图1c为指令分布于存储器中的状况;
图2为韧体数据配置器210和韧体数据执行装置220的实施例;
图3a为图2中前置过滤器202的实施例;
图3b为绝对地址的计算实施例;
图4a为图2中后置过滤器204的实施例;
图4b为相对地址的计算实施例;以及
图5为本发明韧体配置方法和韧体执行方法的流程图。
主要组件符号说明:
102~压缩器; 104~只读存储器;
106~解压缩器; 108~存储器;
110~处理器; 202~前置过滤器;
204~后置过滤器; 210~韧体数据配置器;
220~韧体数据执行装置; 302~缓冲器;
304~类型判断器; 306a,306b~编码器;
308~程序计数器; 402~缓冲器;
404~类型判断器; 406a,406b~解码器;
408~程序计数器; 410~复用器。
具体实施方式
图2为韧体数据配置器210和韧体数据执行装置220的实施例。
该韧体数据配置器210提供一压缩韧体数据,而该韧体数据执行装置220将该压缩韧体数据解压缩并执行其中的指令。由于只读存储器104中的韧体数据是以字典式算法压缩,如果增加字符串的重复率可以提高压缩率。该韧体数据配置器210中包含一前置过滤器202和一压缩器102。该前置过滤器202将原始韧体数据转换为一转码韧体数据,该原始韧体数据包含如图1b所示的多个相对地址指令(至少一个),其中包含相对地址值指向如图1c所示的指令Ins3。该前置过滤器202将相对地址指令转换为绝对地址指令,使其中的指令Ins3的相对地址值改写为指令Ins3的绝对地址值。藉此,该转码韧体数据是一种最佳化的版本,比原始韧体数据提高了字符串的重复率。该压缩器102接着将该转码韧体数据压缩,并传送至只读存储器104储存起来。当韧体数据执行装置220开始运作之后,解压缩器106便开始从只读存储器104中读取压缩后的转码韧体数据并将之解压缩。其中,该解压缩器是使用字典式解压缩算法对该压缩韧体数据进行解压缩。接着一后置过滤器204对该转码韧体数据进行解码动作,使该转码韧体数据回复成原始的状态,而后存放于存储器108中。
图3a为图2中前置过滤器202的实施例。该原始韧体数据被传送至一缓冲器302。该原始韧体数据中包含许多具有相对地址值的指令,用以参照至其它地址的数据或指令。一个相对地址值可能是以一个指令来表示,也可能是以两个指令来表示。而缓冲器302具有足够的空间,收集一个或多个相对地址指令,重组出一地址字段,指向一相对地址值。一类型判断器304耦接该缓冲器302,用以判断该多个相对地址指令的类型。一程序计数器308同步地随着相对地址指令的输入累加一数字,又称为地址索引。该前置过滤器202中另包含多个编码器(306a,306b,......),各耦接至该缓冲器302和该程序计数器308,负责根据地址索引将不同类型的相对地址指令转换至绝对地址指令。当所述类型判断器侦测出所述相对地址指令的类型后,对应该类型的一编码器将所述地址字段中的相对地址值,改写为一绝对地址值;其中该绝对地址值为所述相对地址值加上当时的地址索引值。当一相对地址指令被暂存在该缓冲器302中,对应的编码器将随着类型判断器304的判断而激活,执行转换工作。
图3b为绝对地址的计算实施例。举例来说,如果一相对地址指令的地址索引是0xC084,且其中的相对地址值是0xCA,则编码器依照下列公式计算绝对地址:
0xC084+0x4+(0xCA<<2)=0xC3B0 (1)
0xC3B0>>2=0x30EC (2)
符号“<<”和“>>”代表一种在处理器中平移位的动作。所求得的绝对地址值0x30EC接着写回原指令,取代原来的相对地址值。因为原始指令和转码后的指令的位数不变,所以只有0xCA被改写成0xEC。
在另一例子中,相对地址是由位于0xCC0C的两个连续的指令来表示。其中的地址值0x7AC和0x100根据下式重组,而产生完整的相对地址值:
[0x7AC<<12+0x100<1] (3)
为了将相对地址转换为绝对地址,该程序计数器的地址索引值0xCC0C被加上去:
[0x7AC<<12+0x100<1]+(0xCC0C+0x4)=0x7B8E10 (4)
0x7B8E10>>1=0x3DC708=(0x7B8<<11)+0x708 (5)
相对地址值0x7AC和0x100,接着被由第(5)式得到的0x7B8和0x708取代,产生两个具有绝对地址值的转码后指令。
一复用器310耦接至缓冲器302,类型判断器304和编码器,用以选择最后的输出值。在原始韧体数据中不属于地址相关的指令,则直接通过该复用器310输出。而其它与地址相关的指令,则通过类型判断器304判断类型,并由对应的编码器转码后,再由复用器310输出。最后输出的结果被送去进行压缩程序。
图4a为图2中后置过滤器204的实施例。后置过滤器204进行的步骤恰好与前置过滤器202相反。在解压缩器106将该转码韧体数据从只读存储器104中读出来解压缩后,该后置过滤器204将其中的绝对地址指令转换为原始可执行的格式。在后置过滤器204中,一缓冲器402具有足够的空间,收集一个或多个绝对地址指令,重组出一地址字段,指向一绝对地址值。一类型判断器404耦接该缓冲器402,用以判断该多个绝对地址指令的类型。一程序计数器408同步地随着绝对地址指令的输入累加一数字,又称为地址索引。该后置过滤器204中另包含多个解码器(406a,406b,......),各耦接至该缓冲器402和该程序计数器408,负责根据地址索引将不同类型的绝对地址指令转换至相对地址指令。当所述类型判断器侦测出所述绝对地址指令的类型后,对应该类型的一解码器将所述地址字段中的绝对地址值,改写为一相对地址值;其中该相对地址值为所述绝对地址值减去当时的地址索引值。当一绝对地址指令被暂存在该缓冲器402中,对应的解码器将随着类型判断器404的判断而激活,执行转换工作。最后复用器410选择对应解码器的输出作为相对地址指令。
图4b为相对地址的计算实施例。举例来说,如果一绝对地址指令的地址索引是0xC084,且其中的绝对地址值是0xEC,则解码器依照下列公式计算相对地址:
(0xEC<<2)-(0xC084+0x4)=0xFFFF4328 (6)
0xFFFF4328>>2=0x3FFD0CA (7)
于是其中的0xCA覆写了原来的0xEC,形成相对地址指令。
在另一个例子中,0x7B8和0x708共同代表了绝对地址的值:
[0x7B8<<12+0x708<1] (8)
为了求出相对地址,程序计数器的地址索引0xCC0C被减除:
[0x7B8<<12+0x708<1]-(0xCC0C+0x4)=0x7AC200 (9)
0x7AC200>>1=0x3D6100=(0x7AC<<11)+0x100 (10)
藉此,相对地址值0x7AC和0x100取代了0x7B8和0x708,形成两个连续的相对地址指令。
图5为本发明韧体配置方法和韧体执行方法的流程图。在步骤502中,进行一前置过滤步骤,将原始韧体数据转换为一转码韧体数据。其中的相对地址指令被转换成绝对地址指令。在步骤504中,将该转码韧体数据压缩并储存在只读存储器104中。为了增进韧体数据执行装置220的效能,压缩算法可以采用LZ77或LZ78等字典式算法。步骤502和504是通过韧体数据配置器210,在厂商制造过程中执行。步骤512,当该韧体数据执行装置220启用时,解压缩器106将压缩韧体数据解压缩。步骤514,后置过滤器204接着将解压缩后的转码韧体数据解码,产生原始的相对地址指令。在步骤516中,将后置过滤器204的输出存放在存储器108中。步骤518,处理器110读取存储器108中的指令并执行。该韧体数据执行装置220可以是计算机,光驱或嵌入式系统。相对地址指令通常又称为程序计数器相关指令,遵循着例如ARM姆指编码等规格。
以上所述仅为说明本发明,而非用以限制其保护范围,任何根据本发明的精神所做的变化与修饰,都应包含于本发明的保护范围之内。