本发明处理器编码技术领域,特别是涉及一种立即数压缩编码方法和系统。
背景技术:
处理器能直接识别和执行处理器指令,完成一项人为规定的操作。处理器所能识别和执行的处理器指令的集合称为处理器指令集,处理器指令集能对立即数进行编码,处理器指令集丰富程度及功能强弱决定该处理器性能的高低。
处理器指令集根据指令编码长度的可变性分成定长指令集和变长指令集两种类型。相对定长指令集,变长指令集在提升代码密度上有其优势,在嵌入式应用上,优秀的代码密度不仅能节省ram(random-accessmemory,随机存取存储器)而且能大大减小芯片面积,从而节省了成本。常见的变长指令集对立即数的编码采用正负均等的形式,但在某些应用场合,立即数的应用线性趋向不一样,即正立即数的使用数量与负立即数的使用数量并不一致。此时,变长指令集对立即数的编码采用正负均等的形式会降低代码密度。
技术实现要素:
基于此,有必要针对变长指令集对立即数的编码采用正负均等的形式会降低代码密度的问题,提供一种立即数压缩编码方法和系统。
一种立即数压缩编码方法,包括以下步骤:
根据立即数的数量确定索引段位数,根据目标编码位数和所述索引段位数确定数据段位数;
根据所述数据段位数以及待压缩的立即数在数轴上的分布确定数据段的编码方式;
根据立即数的数量对索引段进行编码,根据所述数据段的编码方式对数据段进行编码,根据编码后的索引段和编码后的数据段对立即数进行压缩编码。
一种立即数压缩编码系统,包括:
位数分配模块,用于根据立即数的数量确定索引段位数,根据目标编码位数和所述索引段位数确定数据段位数;
编码模块,用于根据所述数据段位数以及待压缩的立即数在数轴上的分布确定数据段的编码方式;
压缩模块,用于根据立即数的数量对索引段进行编码,根据所述数据段的编码方式对数据段进行编码,根据编码后的索引段和编码后的数据段对立即数进行压缩编码。
上述立即数压缩编码方法和系统,变长指令集对立即数的编码根据待压缩的立即数在数轴上的分布确定,根据编码后的索引段和编码后的数据段对立即数进行压缩编码,使得所压缩的立即数的分布趋向于实际的应用,有效地压缩了代码密度,减少了需要执行的指令数,提高了处理器的执行效力。
附图说明
图1为本发明一个实施例的步骤示意图;
图2为本发明一个实施例压缩立即数的格式;
图3为本发明一个实施例中正负编码均等的立即数编码方式;
图4为本发明一个实施例中正数多于负数的立即数编码方式;
图5为本发明一个实施例中负数多于正数的立即数编码方式;
图6为本发明一个实施例中正数离散型的立即数编码方式;
图7为本发明一个实施例中负数离散型的立即数编码方式;
图8为本发明一个实施例中正负离散型的立即数编码方式;
图9为本发明一个实施例中压缩立即数的编码示意图;
图10为本发明一个实施例中对压缩后的立即数进行指令集扩展的代码示意图;
图11为本发明一个实施例中立即数压缩编码方法的详细操作流程示意图;
图12为本发明一个实施例中正数离散型编码方式编码示意图;
图13为本发明一个实施例中正数多于负数的离散型编码方式编码示意图。
具体实施方式
下面结合附图和实施例对本发明的蓝牙对箱的音频同步播放方法、系统作详细描述。
如图1所示,本发明一个实施例的立即数压缩编码方法,包括以下步骤:
s101:根据立即数的数量确定索引段位数,根据目标编码位数和所述索引段位数确定数据段位数;如图2所示,本发明的压缩立即数的编码包括两个部分:mbit索引段编码和nbit数据段编码,其中m和n为正整数,bit为一个二进制位。立即数为立即寻址方式指令中给出的数,压缩后的立即数编码包括索引段编码和数据段编码,通过索引段编码可以索引到压缩过的数据段编码,可以通过硬件对数据段编码进行解码得到原立即数,即压缩前的立即数,并送到处理器执行阶段使用。目标编码位数和索引段的编码位数确定下来后,就可以通过用目标编码位数减去索引段的编码位数,得到数据段的编码位数。
s101:根据所述数据段位数以及待压缩的立即数在数轴上的分布确定数据段的编码方式;对数据段的编码方式,可以采用多种方式进行编码,不再局限于如图3所示的对立即数的编码采用正负均等的形式,根据实际应用和研究发现,对于不同应用场合,立即数的应用线性趋向不一样。例如在某种应用领域中,立即数的应用线性趋向如图4所示的属于正数型趋向,即正数的使用多于负数,且正立即数和负立即数都是连续分布的,此时对应的编码方式为正数编码多于负数编码的方式,也可以是如图5所示的属于负数型趋向,即负数的使用多于正数,且正立即数和负立即数都是连续分布的,此时对应的编码方式为负数编码多于正数编码的方式,也可以如图6所示,立即数分布为正数离散型分布,此时对应的立即数的编码为正数离散型编码的方式,也可以如图7所示,立即数分布为负数离散型分布,此时对应的立即数的编码为负数离散型编码的方式,也可以如图8所示,立即数分布为正负数离散型分布,此时对应的立即数的编码为正负数离散型编码的方式,除此之外也可以采用正态分布型编码的方式,正弦函数分布型编码的方式,余弦函数分布型编码的方式。同时也不局限于本发明所列出的这几种形式,可根据不同应用场合选择合适的编码方法。
s101:根据立即数的数量对索引段进行编码,根据所述数据段的编码方式对数据段进行编码,根据编码后的索引段和编码后的数据段对立即数进行压缩编码。如图9所示,为本发明的压缩立即数的编码示意图,图示中纵轴第一列为索引号,横轴第二行开始为32bit立即数解码数据,abcdefg代表编码数据,其中所有的立即数都是有符号数,用第一行中31所属的那一列对应的二进制编码代表正负符号,为0时,代表的是正号,对应的立即数为正立即数,为1时,代表的是负号,对应的立即数为负立即数。采用4bit的索引段编码和8bit的数据段编码,采用正负数编码方式,覆盖0附近的正负数还有4个byte都一样的32bit立即数(图9中最后一行),该方式在数据初始化和指针调整上起到一定的压缩作用。
上述实施例可以通过压缩立即数的方式来压缩代码密度,对立即数的编码根据待压缩的立即数在数轴上的分布确定,根据编码后的索引段和编码后的数据段对立即数进行压缩编码,使得所压缩的立即数的分布趋向于实际的应用,有效地压缩了代码密度,进而提高了处理器的执行效力,压缩方式可以根据实际立即数的应用趋势进行调整,不局限于上述方式,实际测试上使用该技术最多可以有效地将代码压缩到原先的80%-90%。
如图10所示,本发明的一个实施例中的立即数压缩编码方法中,还包括以下步骤:
定义压缩立即数的常用指令,根据所述常用指令对压缩后的立即数进行处理器指令集扩展,根据扩展后的处理器指令集对立即数进行压缩编码,提升代码密度。
在上述实施例中,将该压缩立即数扩展到常用指令进行指令集扩展,增加指令集丰富程度,使得在更多的情况下使用到压缩立即数,优化编译结果,进而提升程序的代码密度。指令扩展不局限于图10所举例子。
在实际应用中,以变长指令集16bit+32bit+48bit结构为例,实际研究发现在不使用压缩立即数编码时,对一个通用寄存器赋一个16bit以上的立即数,一般都要两条32bit指令或一条48bit指令才能完成(不同指令集情况可能不同)。假如能在一条32bit的指令内表达某些常见的特定的立即数,那么将能在这种情况下将代码压缩1/2或1/3。
通过上述实施例,提升指令集的丰富程度,有效地压缩了代码密度,减少了需要执行的指令数,有效地提高处理器的执行效力。
具体的,本发明的一个实施例中的立即数压缩编码方法,还包括以下步骤:
对扩展后的指令集进行编码,根据扩展后的指令集编码进行寄存器转换级电路设计,将所述指令集存储于所述寄存器转换级电路。
如图11所示,为包括上述实施例的立即数压缩编码方法的详细操作流程示意图,其中rtl(registertransferlevel)指的是寄存器转换级电路,可以用硬件描述语言简便地设计出该压缩立即数的功能,如实例代码1所示,再传递给处理器使用。优秀的代码密度能节省ram和rom(readonlymemory,只读存储器),进而能大大节省芯片面积和成本。
实例代码1
wire[11:0]ximm;
wire[31:0]ximm_dec;
mux25#(32)ximm_dec(
clk,
ximm_dec,
{{(32-12){1’b0}},1’b1,ximm[6:0],4’h0},ximm_dec[11:7]==5’d0,
{{(32-13){1’b0}},1’b1,ximm[6:0],5’h0},ximm_dec[11:7]==5’d1,
{{(32-14){1’b0}},1’b1,ximm[6:0],6’h0},ximm_dec[11:7]==5’d2,
{{(32-15){1’b0}},1’b1,ximm[6:0],7’h0},ximm_dec[11:7]==5’d3,
{{(32-17){1’b0}},1’b1,ximm[6:0],9’h0},ximm_dec[11:7]==5’d4,
{{(32-18){1’b0}},1’b1,ximm[6:0],10’h0},ximm_dec[11:7]==5’d5,
{{(32-19){1’b0}},1’b1,ximm[6:0],11’h0},ximm_dec[11:7]==5’d6,
{{(32-20){1’b0}},1’b1,ximm[6:0],12’h0},ximm_dec[11:7]==5’d7,
{{(32-21){1’b0}},1’b1,ximm[6:0],13’h0},ximm_dec[11:7]==5’d8,
{{(32-22){1’b0}},1’b1,ximm[6:0],14’h0},ximm_dec[11:7]==5’d9,
{{(32-23){1’b0}},1’b1,ximm[6:0],15’h0},ximm_dec[11:7]==5’d10,
{{(32-25){1’b0}},1’b1,ximm[6:0],17’h0},ximm_dec[11:7]==5’d11,
{{(32-26){1’b0}},1’b1,ximm[6:0],18’h0},ximm_dec[11:7]==5’d12,
{{(32-27){1’b0}},1’b1,ximm[6:0],19’h0},ximm_dec[11:7]==5’d13,
{{(32-28){1’b0}},1’b1,ximm[6:0],20’h0},ximm_dec[11:7]==5’d14,
{{(32-29){1’b0}},1’b1,ximm[6:0],21’h0},ximm_dec[11:7]==5’d15,
{{(32-30){1’b0}},1’b1,ximm[6:0],22’h0},ximm_dec[11:7]==5’d16,
{{(32-31){1’b0}},1’b1,ximm[6:0],23’h0},ximm_dec[11:7]==5’d17,
{24’h0,ximm[7:0]},ximm_dec[11:8]==4’b1001,
{16’h0,ximm[7:0],8’h0},ximm_dec[11:8]==4’b1010,
{8’h0,ximm[7:0],16’h0},ximm_dec[11:8]==4’b1011,
{ximm[7:0],24’h0},ximm_dec[11:8]==4’b1100,
{8’h0,ximm[7:0],8’h0,ximm[7:0]},ximm_dec[11:8]==4’b1101,
{ximm[7:0],8’h0,ximm[7:0],8’h0},ximm_dec[11:8]==4’b1110,
{4{ximm[7:0]}}
);
如图12所示,本发明一个实施例的立即数压缩编码方法中,根据所述数据段位数以及立即数的分布确定数据段的编码方式,具体包括以下步骤:
获取待压缩立即数在数轴上的分布,根据所述分布分别获取正立即数的数量和负立即数的数量;
当负立即数的数量小于预设的第一数量阈值,正立即数的数量大于预设的第二数量阈值,且正立即数在数轴上离散分布时,根据所述索引段位数从所述正立即数中选取一定数量的目标正立即数,并根据所述数据段位数对所述目标正立即数进行编码。
在上述实施例的图12中,纵轴为索引号,横轴第二行开始为32bit立即数解码数据,abcdefg代表编码数据,其中所有的立即数都是有符号数,用第一行中31所属的那一列对应的二进制编码代表正负符号,为0时,代表的是正号,对应的立即数为正立即数,为1时,代表的是负号,对应的立即数为负立即数,此实施例中,正立即数的数量远大于负立即数的数量,相对正立即数的数量,负立即数的数量可以忽略不计,此处只对正立即数进行压缩编码。该编码索引段编码与数据段编码复合使用,采用5bit索引段编码和7bit的数据段编码,4bit索引段编码和8bit的数据段编码,两种格式混合使用,采用正数离散型编码方式,覆盖离散正数还有进行字节编码扩展,支持特殊类型的字节赋值32bit立即数(图12中,纵轴18~31对应的立即数),由于小的正数在常规的指令集编码已经被覆盖到,为了增加覆盖程度,减少编码重叠,该12bit编码不覆盖小的正数。
上述实施例分别对索引段与数据段进行了编码,并结合索引段与数据段混合编码的方式来压缩立即数,使得在有限的目标编码位数内进行尽可能多的立即数压缩编码,提升指令集的丰富程度,有效地压缩了代码密度,减少了需要执行的指令数,有效地提高处理器的执行效力。
另外,本发明另一个实施例的立即数压缩编码方法中,根据所述数据段位数以及立即数的分布确定数据段的编码方式,具体包括以下步骤:
获取待压缩立即数在数轴上的分布,根据所述分布分别获取正立即数的数量和负立即数的数量;
当正立即数的数量小于所述第一数量阈值,负立即数的数量大于所述第二数量阈值,且负立即数在数轴上离散分布时,根据所述索引段位数从所述负立即数中选取一定数量的目标负立即数,并根据所述数据段位数对所述目标负立即数进行编码。
上述实施例与图12对应的实施例相类似,此处不再赘述。
进一步地,如图13所示,本发明的一个实施例的立即数压缩编码方法中,根据所述数据段位数以及立即数的分布确定数据段的编码方式,具体包括以下步骤:
获取待压缩立即数在数轴上的分布,根据所述分布分别获取正立即数的数量和负立即数的数量;
当正立即数和负立即数的数量都大于所述第一阈值,正立即数量多于负立即数数量,正立即数的数量与负立即数的数量之差超过第三阈值,且正立即数以及负立即数在数轴上离散分布时,根据索引段的位数从所述正立即数中选取第一数量的目标正立即数,并根据索引段的位数从所述负立即数中选取第二数量的目标负立即数;其中所述第一数量的值大于所述第二数量的值。
根据数据段的位数分别对所述目标正立即数和目标负立即数进行编码。
在上述实施例的图13中,纵轴为索引号,横轴第二行开始为32bit立即数解码数据,abcdefg代表编码数据,其中所有的立即数都是有符号数,用第一行中31所属的那一列对应的二进制编码代表正负符号,为0时,代表的是正号,对应的立即数为正立即数,为1时,代表的是负号,对应的立即数为负立即数。该编码索引位数据编码位复合使用,5bit索引段编码和7bit的数据段编码,4bit索引段编码和8bit的数据段编码,两种格式混合使用,采用正数多于负数的离散编码方式,还有进行字节编码扩展,支持特殊类型的字节(图13中,纵轴18~31对应的立即数)赋值32bit立即数。
上述实施例分别对索引段与数据段进行了编码,并结合索引段与数据段混合编码的方式来压缩立即数,使得在有限的目标编码位数内进行尽可能多的立即数压缩编码,提升指令集的丰富程度,有效地压缩了代码密度,减少了需要执行的指令数,有效地提高处理器的执行效力。
更进一步地,本发明的另一个实施例的立即数压缩编码方法中,根据所述数据段位数以及立即数的分布确定数据段的编码方式,具体包括以下步骤:
获取待压缩立即数在数轴上的分布,根据所述分布分别获取正立即数的数量和负立即数的数量;
当正立即数和负立即数的数量都不为零,正立即数量少于负立即数数量,负立即数的数量减去正立即数的数量的值超过一定阈值,且正立即数以及负立即数在数轴上离散分布时,根据索引段的位数从所述正立即数中选取第三数量的目标正立即数,并根据索引段的位数从所述负立即数中选取第四数量的目标负立即数;其中所述第四数量的值大于所述第三数量的值。
根据数据段的位数分别对所述目标正立即数和目标负立即数进行编码。
上述实施例与本发明的图13对应的实施例相类似,此处不再赘述。
其中,本发明一个实施例的立即数压缩编码系统中,包括:
位数分配模块,用于根据立即数的数量确定索引段位数,根据目标编码位数和所述索引段位数确定数据段位数;
编码模块,用于根据所述数据段位数以及待压缩的立即数在数轴上的分布确定数据段的编码方式;
压缩模块,用于根据立即数的数量对索引段进行编码,根据所述数据段的编码方式对数据段进行编码,根据编码后的索引段和编码后的数据段对立即数进行压缩编码。
上述实施例与本发明的立即数压缩编码方法对应的实施例相类似,此处不再赘述。
具体的,本发明一个实施例的立即数压缩编码系统,还包括:
扩展模块,用于定义压缩立即数的常用指令,根据所述常用指令对压缩后的立即数进行处理器指令集扩展,根据扩展后的处理器指令集对立即数进行压缩编码,提升代码密度。
上述实施例与本发明的立即数压缩编码方法中对应的实施例相类似,此处不再赘述。
其中,本发明另一个实施例的立即数压缩编码系统中,还包括:
设计模块,用于对扩展后的指令集进行编码,根据扩展后指令集编码进行寄存器转换级电路设计。
上述实施例与本发明的立即数压缩编码方法中对应的实施例相类似,此处不再赘述。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。