发明内容
本发明提供一种更加高效的可编程逻辑器件的配置数据流的压缩、解压缩处理方法及系统。
为解决上述技术问题,本发明采用以下技术方案:
一种可编程逻辑器件的配置数据流的压缩处理方法,包括:
获取所述配置数据流中待压缩处理的数据帧;
对所述待压缩处理的数据帧内部的数据单元进行压缩处理。
所述数据单元包括一个或多个比特值,或者所述数据单元包括一个或多个字段值。
对所述待压缩处理的数据帧内部的数据单元进行压缩处理后得到参考值和命令单元。
对所述待压缩处理的数据帧内部的数据单元进行压缩处理后得到参考值和命令单元的过程具体为:
将由统计得出的帧内部连续且相同的数据单元的数目与一预设值比较,判断所述连续且相同的数据单元的数目是否大于或等于所述预设值;
如果是,对所述连续且相同的多个数据单元进行处理后得到的命令单元包括用于表示压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息;
如果否,对所述连续且相同的多个数据单元或1个数据单元进行处理后得到的命令单元包括用于表示非压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息。
所述预设值为大于或等于3的整数。
还包括:
对所述配置数据流中的帧单元进行压缩处理。
一种可编程逻辑器件的配置数据流的解压缩处理方法,包括:
获取所述配置数据流中待解压缩处理的数据帧;
对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理。
对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理的过程具体为:
获取所述待解压缩处理的数据帧内部的命令单元和参考值;
根据所述命令单元和参考值对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理。
根据所述命令单元和参考值对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理的过程具体为:
获取所述命令单元中的命令类型信息;
如果所述命令单元中的命令类型信息为压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息,将所述参考值复制到帧内的相应地址上;
如果所述命令单元中的命令类型信息为非压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息,将所述参考值复制到帧内的相应地址上。
还包括:
对所述配置数据流中的帧单元进行解压缩处理。
一种可编程逻辑器件的配置数据流的压缩处理系统,包括待压缩处理数据获取模块和第一压缩处理模块,其中,
所述待压缩处理数据获取模块用于获取所述配置数据流中待压缩处理的数据帧;
所述第一压缩处理模块用于对所述待压缩处理的数据帧内部的数据单元进行压缩处理。
所述第一压缩处理模块用于对所述待压缩处理的数据帧内部的数据单元进行压缩处理后得到参考值和命令单元。
所述第一压缩处理模块具体用于:将由统计得出的帧内部连续且相同的数据单元的数目与一预设值比较,判断所述连续且相同的数据单元的数目是否大于或等于所述预设值;如果是,则对所述连续且相同的多个数据单元进行处理后得到的命令单元包括用于表示压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息;如果否,对所述连续且相同的多个数据单元或1个数据单元进行处理得到的命令单元包括用于表示非压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息。
还包括第二压缩处理模块,所述第二压缩处理模块用于对所述配置数据流中的帧单元进行压缩处理。
一种可编程逻辑器件的配置数据流的解压缩处理系统,包括待解压缩处理数据获取模块和第一解压缩模块,其中:
所述待解压缩处理数据获取模块用于获取所述配置数据流中待解压缩处理的数据帧;
所述第一解压缩模块用于对所述待解压缩数据帧内部的数据单元进行解压缩处理。
所述第一解压缩模块具体用于获取所述待解压缩处理的数据帧内部的命令单元和参考值;根据所述命令单元和参考值对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理。
所述第一解压缩模块具体用于获取所述命令单元中的命令类型信息;如果所述命令单元中的命令类型信息为压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息,将所述参考值复制到帧内的相应地址上;如果所述命令单元中的命令类型信息为非压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息,将所述参考值复制到帧内的相应地址上。
还包括第二解压缩模块,所述第二解压缩模块用于对所述配置数据流中的帧单元进行解压缩处理。
本发明提供一种可编程逻辑器件的配置数据流的压缩、解压缩处理方法及系统,压缩方法中包括对待压缩处理的数据帧内部的数据单元进行压缩处理,通过对帧内部的数据单元进行压缩,提高压缩效率,本发明还可以通过设置预设值,针对数据帧或帧内部数据单元的特点,选择最佳的压缩比,因此,还具有很强的灵活性。
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明。
一种可编程逻辑器件的配置数据流的压缩处理方法,包括:
获取所述配置数据流中待压缩处理的数据帧;
对所述待压缩处理的数据帧内部的数据单元进行压缩处理。
图3为本发明实施例一种可编程逻辑器件的配置数据流压缩处理方法的流程图,请参考图3,本实施例以FPGA配置数据流的压缩方法为例:
S31、利用设计文件产生数据流;
S32、判断是否可以进行帧外部基于帧单元的压缩处理,若是,则执行步骤S33,否则执行步骤S34;
S33、对数据流进行帧外部基于帧单元的压缩处理,帧外部帧单元的压缩结束后,执行S34;
S34、对数据流进行帧内部基于帧内部数据单元的压缩处理;
S35、将压缩结果存储到压缩数据流存储器中。
本实施例优选的是先进行帧外部压缩,再进行帧内部压缩,本发明还适用于先进行帧内部压缩,再进行帧外部压缩的方法。
其中步骤S34对数据流进行帧内部压缩的具体过程包括:
将由统计得出的帧内部连续且相同的数据单元的数目与一预设值比较,判断该连续且相同的数据单元的数目是否大于或等于所述预设值;如果是,则判断结果为满足压缩条件,对满足压缩条件的连续且相同的多个数据单元进行压缩处理。
根据数据流中的数据类型不同,数据单元可以是比特值或字段值或其他,其压缩和解压缩方法相类似。本发明不局限于以一个比特值或一个字段值为数据单元进行压缩,还可以以多个比特值或多个字段值为一个数据单元进行压缩,预设值为大于或等于3的整数。
图4为本发明实施例一种可编程逻辑器件的配置数据流压缩处理方法中帧内部压缩方法的流程图,请参考图4,本实施例中一个数据单元为帧内的一个字段值:
S341、将数据流加载到缓冲器A中,优选的,缓冲器A的大小比一帧的配置数据长度多出一位,用作标志位,优选的标志位为缓冲器A的第一位;
S342、判断数据流是否进行过帧外部基于帧单元的压缩处理,本实施例可以通过帧外部基于帧单元的压缩处理后,帧所附带的帧压缩命令或者其他标志来判断,若是,则执行S343,否则执行S344;
S343、在步骤S341中缓冲器A所预留的标志位,即缓冲器A的第一位上写进“1”标志,执行S345;
S344、在步骤S341中缓冲器A所预留的标志位,即缓冲器A的第一位上写进“0”标志,执行S345;
S345、将缓冲器A中的数据流复制到同样大小的缓冲器B中,复制完之后缓冲器A继续接收新的数据流,缓冲器B除了第一位之外,其他的都是经过编址的,其中基本的编址单元是一个字段,即32位为一个编址单位,比如:缓冲器B大小为106×32位(bits),有106个字段,对每个字段进行编址,地址是1-106,用二进制表示是00000001-01101010,用十六进制表示是00-6A;
S346、以一个字段值为一个数据单位,处理的顺序按照缓冲器B的地址由低到高来进行,依次处理每一个字段,统计连续且相同的该字段值的数目,将其与一预设值比较,判断连续且相同的该字段值的数目是否大于或等于该预设值,如果是,则执行S347,否则,执行S348;
S347、对数目大于或等于该预设值的连续且相同多个字段值进行处理后得到以下形式:命令单元+参考值。其中命令单元包括用于表示压缩类型的命令类型信息、用于表示所述连续且相同的多个字段值位于帧内部的地址信息和用于表示所述连续且相同的多个字段值的数目信息,执行S349;
图5为本发明实施例对数目大于或等于该预设值的连续且相同的多个数据单元进行处理后得到的命令单元的结构示意图,请参考图5,本实施例的命令单元为命令字段,这个命令字段的宽度可以是32bit,其中第一部分内容用于表示压缩类型的命令类型信息,可以用1个二进制位“0”来标识,表示该命令类型的为压缩类型,第二部分内容用于表示所述连续且相同的多个字段值位于帧内部的地址信息,地址信息指一帧数据内每个字段所在的顺序或者编号,也可以是这些被压缩的连续且相同的多个字段值中的第一个字段值的地址信息,由于这些字段是连续的,因此知道第一个字段的地址信息之后,可以推算其他字段的地址信息;第三部分内容用于表示所述连续且相同的多个字段值的数目信息。
S348、对数目小于该预设值的连续且相同多个字段值或1个字段值进行处理后得到以下形式:命令单元+参考值,命令单元包括用于表示非压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息,执行S349;
图6为本发明实施例对数目小于该预设值的连续且相同的多个或1个数据单元进行处理后得到的命令单元的结构示意图,请参考图6,本实施例的命令单元为命令字段,这个命令字的宽度可以是32bit,其结构、格式和含义类似于上述对数目大于或等于预设值的连续且相同的多个数据单元进行压缩处理后得到的命令单元,其中第一部分内容用于表示非压缩类型,最高位,即第31位用1个二进制位“1”来标识,表示该命令类型为非压缩类型,第二部分内容用于表示数目小于该预设值的连续且相同的多个字段值或1个字段值位于帧内部的地址信息,地址信息指一帧数据内每个字段所在的顺序或者编号,也可以是这些字段中第一个字段的地址信息,由于这些字段是连续的,因此,知道第一个字段的地址信息之后,可以推算其他字段的地址信息;第三部分内容用于表示所述连续且相同的多个字段值或1个字段值的数目信息。
图7为本发明实施例一种可编程逻辑器件的配置数据流压缩处理方法中帧内部压缩数据的示意图,请参考图7,假设一帧数据的长度m=106,根据命令字段的定义,其地址编码从0000到0069,指向相应的字段,而每个字段的内容也被数据填满了,这里的地址和字段值都是用十六进制表示,字段值的省略部分表示相同的若干个字段值,而地址的省略部分表示递增的若干个地址值,第0个字段值为:0000_0000;第1个字段值到第15个字段值相同,为1111_1111;第16个字段值到第20字段值分别为:2222_2222,3333_3333,4444_4444,4444_4444,5555_5555;第21个字段值到第102个字段值相同,为6666_6666;第103个字段值到105个字段值分别为:7777_7777,6666_6666,6666_6666,假设预设值为10,假设本实施例对数目大于或等于预设值的连续且相同的多个字段值进行压缩处理后得到的命令单元为CMD1,对数目小于预设值的连续且相同的多个或1个字段值进行处理得到的命令单元为CMD2,则处理过程为:由于第0个字段值的数目为1,所以将其处理为CMD2,0000_0000,即命令单元和参考值,参考值为该字段值本身,第1个字段值到第15个字段值连续且相同,连续且相同的字段值的数目为15,大于预设值,所以将其压缩为:CMD1,1111_1111,即命令单元和参考值,参考值为该字段值本身,同理,剩下的字段值分别处理为:CMD2,2222_2222,3333_3333,4444_4444,4444_4444,5555_5555;CMD1,6666_6666;CMD2,7777_7777,6666_6666,6666_6666。
具体化CMD1和CMD2,就可以得到:8000_0001,0000_0000,0002_000E,1111_1111,8010_0005,2222_2222,3333_3333,4444_4444,4444_4444,5555_5555,0015_0056,6666_6666,8067_0003,7777_7777,6666_6666,6666_6666。
在这个实施例中,可以将一帧的106个字段压缩成16个字段,提高了数据压缩的效率。
数目小于预设值的多个连续且相同的数据单元,即当连续且相同的数据单元的数目为大于或等于2的整数,且该数目小于预设值,这种情况其命令单元包括用于表示非压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息,其中,用于表示所述连续且相同的多个数据单元位于帧内部的地址信息包括各个数据单元位于帧内部的地址信息,或者是这些相同数据单元中的第一个数据单元位于帧内部的地址信息,用于表示所述连续且相同的多个数据单元的数目信息为这些相同数据单元的数目,如图7中的第18个字段值和第19字段值:4444_4444,4444_4444;数目小于预设值的1个数据单元,即连续且相同的数据单元的数目为1,且该数目小于预设值,这种情况其命令单元包括用于表示非压缩类型的命令类型信息、用于表示该数据单元位于帧内部的地址信息和用于表示该数据单元的数目信息,其中该数据单元的数目信息为1,如图7中的第16个字段2222_2222,第17字段3333_3333。
S349、将步骤S347和S348的处理结果放到缓冲器C中,直到缓冲器B的数据完全被处理,再将缓冲器C的内容输出。
本实施例通过命令单元中的命令类型信息,即用于表示压缩类型的命令类型信息和用于表示非压缩类型的命令类型信息,在解压缩时可以通过识别命令单元中的命令类型信息,方便地区分经过帧内部压缩和未经过帧内部压缩的数据,优先的,在解压缩时利用现有的技术,只需增加两根译码线,就可以区分经过帧内部压缩和未经过帧内部压缩的数据。
本实施例还包括一种数据解压缩处理方法,图8为本发明实施例一种可编程逻辑器件的配置数据流解压缩处理方法的流程图,请参考图8:
S81、获取待解压缩处理的数据流,放入缓冲器D中;
S82、对数据帧进行解析,判断是否经过帧内部数据单元的压缩处理,若是,则执行S83,否则执行步骤S84;
S83、对帧内部的数据单元进行解压缩处理,结束帧内部解压缩处理之后,执行S84;
S84、将经过帧内部解压缩处理和未经过帧内部解压缩处理的数据帧放入缓冲器D中,并检测缓冲器D中第一位的值是否为“1”,若是则执行S85,否则执行S86;
S85、进行帧外部基于帧单元的解压缩处理,执行S87;
S86、不进行帧外部基于帧单元的解压缩处理,执行S87;
S87、将步骤S85和S86得到的数据流下载到FPGA中;
本实施例优选的是先进行帧内部解压缩,再进行帧外部解压缩,本发明还适用于先进行帧外部解压缩,再进行帧内部解压缩的方法。
图9为本发明实施例一种可编程逻辑器件的配置数据流解压缩处理方法中帧内部解压缩数据的示意图,请参考图9,比如接收到的经过帧内部压缩的一帧数据如下:
8000_0001,0000_0000,0002_000E,1111_1111,8010_0005,2222_2222,3333_3333,4444_4444,4444_4444,5555_5555,0015_0056,6666_6666,8067_0003,7777_7777,6666_6666,6666_6666。
其中8000_0001、8010_0005和8067_0003为CMD2,0002_000E和0015_0056为CMD1。
当接收到8000_0001时,就通知解压电路直接将0000_0000放到缓冲器D相应的地址上,接收到0002_000E时,就通知解压电路接下来要对连续的多个相同字段进行解压缩操作,紧接着根据0002_000E中用于表示该多个相同字段位于帧内部的地址信息和用于表示该多个相同字段的数目信息,将相应数目的1111_1111复制到帧内的相应地址上,接下来的解压缩操作依次类推,得到一帧数据:第0个字段值为0000_0000;第1个字段值到第15个字段值数据相同,为1111_1111;第16个字段值到第20个字段值分别为:2222_2222,3333_3333,4444_4444,4444_4444,5555_5555;第21个字段值到第102个字段值相同,为6666_6666;第103个字段值到第105个字段值分别为7777_7777,6666_6666,6666_6666。
目前业界典型的一种FPGA配置数据流文件压缩方法是Xilinx公司XC2V40器件采用的帧外部基于帧单元的压缩处理方法,本实施例采用ISE10.1开发工具,用Verilog HDL作为设计的输入文件,通过ISE10.1生成标准配置流文件,将生成的标准配置流文件用ISE10.1自带的帧外部基于帧单元的压缩算法进行压缩,获得压缩后的第一压缩数据流文件;另外将ISE10.1生成的XC2V40配置数据流文件在采用ISE10.1自带的帧外部基于帧单元的压缩算法进行压缩的基础上,再采用本发明帧内部数据单元的压缩方法进行压缩,获得压缩后的第二压缩数据流文件,由上述两种压缩方法获得的压缩数据流文件的文件大小如表1所示:
表1
分别计算采用上述两种压缩方法所得到的压缩数据流文件的压缩比如表2所示,压缩比指的是:用压缩后的文件大小除以原文件的大小所得结果的百分比。
表2
其中压缩比提高幅度指的是:将第一压缩数据流文件的大小减去第二压缩数据流文件的大小,再将所得到的结果除以第一压缩数据流文件的大小,所得到的百分比。
由表2对比数据可见,本发明将传统的帧外部基于帧单元的压缩方法和帧内部的压缩方法相结合所获得的压缩比,比单独使用基于帧单元的压缩方法所获得的压缩比,平均提高了42.81%。因此,本发明提出的压缩方法可以大幅度的提高FPGA配置流文件的压缩性能。
本实施例还包括一种数据压缩处理系统,图10为本发明实施例一种可编程逻辑器件的配置数据流压缩处理系统的模块图,请参考图10:
一种数据压缩处理系统包括待压缩处理数据获取模块101和第一压缩处理模块102,待压缩处理数据获取模块101用于获取配置数据流中待压缩处理的数据帧,第一压缩处理模块102用于对所述待压缩处理的数据帧内部的数据单元进行压缩处理。
进一步,第一压缩处理模块102用于对所述待压缩处理的数据帧内部的数据单元进行压缩处理后得到参考值和命令单元。
进一步,第一压缩处理模块102具体用于将由统计得出的帧内部连续且相同的数据单元的数目与一预设值比较,判断所述连续且相同的数据单元的数目是否大于或等于所述预设值;如果是,则对所述连续且相同的多个数据单元进行处理后得到的命令单元包括用于表示压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息;如果否,对所述连续且相同的多个数据单元或1个数据单元进行处理得到的命令单元包括用于表示非压缩类型的命令类型信息、用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息。
图11为本发明另一实施例一种可编程逻辑器件的配置数据流压缩处理系统的模块图,请参考图11,还包括第二压缩处理模块103,第二压缩处理模块103用于用于对所述配置数据流中的帧单元进行压缩处理。
图12本发明实施例一种可编程逻辑器件的配置数据流解压缩处理系统的模块图,请参考图12:
一种数据解压缩处理系统,包括待解压缩处理数据获取模块121和第一解压缩模块122,待解压缩处理数据获取模块121用于获取配置数据流中待解压缩处理的数据帧,第一解压缩模块122用于对所述待解压缩数据帧内部的数据单元进行解压缩处理。
进一步,第一解压缩模块122具体用于获取所述待解压缩处理的数据帧内部的命令单元和参考值;根据所述命令单元和参考值对所述待解压缩处理的数据帧内部的数据单元进行解压缩处理。
进一步,第一解压缩模块122具体用于获取所述命令单元中的命令类型信息;如果所述命令单元中的命令类型信息为压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元的数目信息,将所述参考值复制到帧内的相应地址上;如果所述命令单元中的命令类型信息为非压缩类型,则根据所述命令单元中用于表示所述连续且相同的多个数据单元或1个数据单元位于帧内部的地址信息和用于表示所述连续且相同的多个数据单元或1个数据单元的数目信息,将所述参考值复制到帧内的相应地址上。
图13本发明另一实施例一种可编程逻辑器件的配置数据流解压缩处理系统的模块图,请参考图3,还包括第二解压缩模块123,第二解压缩模块123用于对所述配置数据流中的帧单元进行解压缩处理。
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。