CN112968706B - 数据压缩方法、fpga芯片及fpga在线升级方法 - Google Patents
数据压缩方法、fpga芯片及fpga在线升级方法 Download PDFInfo
- Publication number
- CN112968706B CN112968706B CN202110127173.XA CN202110127173A CN112968706B CN 112968706 B CN112968706 B CN 112968706B CN 202110127173 A CN202110127173 A CN 202110127173A CN 112968706 B CN112968706 B CN 112968706B
- Authority
- CN
- China
- Prior art keywords
- data
- character
- dynamic key
- compressed
- length
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供了一种数据压缩方法、FPGA芯片及FPGA在线升级方法中,通过构建动态键值对实现压缩过程;当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。通过预期压缩率估算,有选择地重置所述动态键值对,兼顾了数据的压缩率和所述动态键值对的复用率,解决现有技术中在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个FPGA芯片升级耗时过长的问题。
Description
技术领域
本发明涉及数据处理领域,特别涉及一种数据压缩方法、FPGA芯片及FPGA 在线升级方法。
背景技术
在大型的复杂设备仪器,如通讯设备和医疗仪器设备中,很多板卡使用到FPGA(Field Programmable Gate Array现场可编程门阵列)芯片。为了保证设备可以更新后续功能,或是修复之前版本的问题,通常设备FPGA芯片都会使用在线升级功能。一方面,大型FPGA芯片本身资源量大,升级文件也非常大;另一方面,由于在线升级功能不常用到,有些板卡在设计接口时基于正常功能和成本考虑,采用了低速接口。这些导致了从上位机传输在线升级文件到板卡,这个过程可能耗费大量时间,升级效率低。过长的升级时间给在线升级过程带来了更大的风险,以及给现场服务人员带来了很大的不便。FPGA芯片原厂提供的软件,在转换升级文件时通常只进行了初步的压缩,压缩率不高仍然有重复信息。
由于FPGA的升级文件格式为Intel(英特尔公司)或者Xilinx(赛灵思公司)的内部定义格式,不能随意改动,因此只能采用无损压缩的方法。发明人通过研究发现,经典的无损压缩算法有基于统计模式的算法,如香农编码、霍夫曼编码、算术编码等;基于字典模式的算法,如LZ系列算法(Ziv和Lempel提出的一系列算法);还有一些其它的算法,如游程编码、JPEG-LS(一种对连续色调图像的无损或者近无损的压缩标准)算法、JPEG2000(基于小波变换的图像压缩标准)的DEM(Digital Elevation Model数字高程模型)算法、BWT(Burrows- Wheeler Transform Burrows-Wheeler变换,可称作块排序压缩,以发明人名字命名)算法等。综合考虑设计复杂度和压缩效率,字典模式的算法较统计模式的算法更适合用于FPGA升级文件的压缩。字典模式中的LZW(Lempel-Ziv-Welch 一种串表压缩算法,以发明人名字命名)是LZ78算法衍生的,具有不需要先验知识,不需要额外传递字典信息,占用内存小,压缩解压计算方便的优点。但是 LZW算法也存在一定的限制,主要是字典大小限制了所能储存的字符串个数,当字典写满后,后续数据压缩率明显下降。
针对LZW算法提出的优化有很多,总结大致可以分为三类:
第一类是插入字典清除命令以更新字典,使得对于大文件的后续部分或长数据流能够保持一定的压缩率。这种方法保证了字典的更新以适应新的数据,但是也会导致字典更新过于频繁,已编字典利用率不高的问题。特别地,由于处理非特定对象的数据时,数据的内在相关性较弱或者内在相关性并不能提前预知,而FPGA芯片的升级文件中的数据,内在的相关性较高。因此,不能简单地将处理非特定对象的数据的方案用于FPGA芯片。
第二类是通过对文件的整体预统计,得出高频词从而预先对字典进行优化编写。这类方法可以提高压缩率,但是需要预先统计整个文件增加先验知识,这种结构在硬件实现上也难以利用多级流水线优化,编解码时间会更长。
第三类是多种压缩算法的结合,充分发挥各个算法针对不同类型文件压缩的长处,把信息熵压缩到极致。这类方法用到了至少2种算法结合,压缩和解压过程相对比较复杂,用硬件实现耗费的资源也大幅增加。
总之,现有技术中,在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个FPGA芯片升级耗时过长。对此,发明人针对性地设计了符合FPGA芯片升级时的数据压缩方法。
发明内容
本发明提供了一种数据压缩方法、FPGA芯片及FPGA在线升级方法,以解决现有技术中在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个FPGA芯片升级耗时过长的问题。
为了解决上述技术问题,根据本发明的第一个方面,提供了一种数据压缩方法,所述数据压缩方法包括:
依次读取待压缩数据,并基于读取的内容逐步构建动态键值对,每个所述动态键值对包括存在对应关系的动态键名字符和动态键值字符串;
将所述待压缩数据中与所述动态键值字符串相匹配的字符串中的至少一部分替换为对应的所述动态键名字符以实现压缩过程;
当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。
可选的,所述预期压缩率的估算方法包括,统计所述动态字典数据作用于尚未读取的窗口长度的连续字符串时的未被压缩的字符数量。
可选的,在读取所述待压缩数据之前,所述数据压缩方法还包括,构建静态键值对,每个所述静态键值对包括存在对应关系的静态键名字符和静态键值字符串;在读取所述待压缩数据之后,所述数据压缩方法还包括,所述数据压缩方法包括,将所述待压缩数据中与所述静态键值字符串相匹配的字符串中的至少一部分替换为对应的所述静态键名字符以实现压缩过程。
可选的,所述待压缩数据由第一长度的字符组成,所述压缩数据由第二长度的字符组成,所述动态键名字符为所述第二长度的字符,所述动态键值字符串由至少两个所述第一长度的字符组成。
可选的,使用辅助容器对所述动态键值对进行存储,所述辅助容器的每个元素包括一个前匹配字符和一个后跟进字符,所述前匹配字符的长度为所述第一长度或者所述第二长度,所述后跟进字符的长度为所述第一长度,所述辅助字典的键名为所述第二长度的字符;
已知所述动态键名字符时,通过以下步骤得到对应的所述动态键值字符串:
以该所述动态键名字符作为所述辅助容器的索引号,得到相对应的元素,将得到的元素的所述前匹配字符位于所述后跟进字符之前拼接成基础字符串;
替换步骤,包括:将所述基础字符串中长度为所述第二长度的待替换字符作为新的所述辅助容器的索引号,用得到的相对应的元素替换所述待替换字符,替换时,所述前匹配字符位于所述后跟进字符之前;
重复所述替换步骤,直至所述基础字符串中仅包含所述第一长度的字符,将此时的所述基础字符串作为所述动态键值字符串输出。
可选的,所述辅助容器包括至少一个数组。
可选的,所述辅助容器中的元素索引号由该元素通过哈希散列法计算得到。
可选的,所述哈希散列法解决冲突的办法为线性探测法,所述线性探测法中使用的偏移量由元素的内容计算得到。
为了解决上述技术问题,根据本发明的第二个方面,提供了一种FPGA芯片,所述FPGA芯片包括解压缩单元,用于对接收到的利用上述的数据压缩方法压缩后的数据进行解码,所述解压缩单元通过构建与所述动态键值对相同内容的解码键值对并以所述解码键值对为依据进行解码,并在读取到压缩后的数据中包含的标志此处发生过所述动态键值对清空操作的特殊字符时,所述解压缩单元清空当前的所述解码键值对。
为了解决上述技术问题,根据本发明的第三个方面,提供了一种FPGA在线升级方法,所述FPGA在线升级方法包括:
使用上述的数据压缩方法对所述在线升级文件进行数据压缩;
将压缩后得到的数据传输给FPGA芯片;
所述FPGA芯片对接收到的数据进行解码,得到压缩前的所述在线升级文件,并根据所述在线升级文件进行升级。
与现有技术相比,本发明提供的一种数据压缩方法、FPGA芯片及FPGA在线升级方法中,通过构建动态键值对实现压缩过程;当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。通过预期压缩率估算,有选择地重置所述动态键值对,兼顾了数据的压缩率和所述动态键值对的复用率,解决现有技术中在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个FPGA芯片升级耗时过长的问题。
附图说明
本领域的普通技术人员将会理解,提供的附图用于更好地理解本发明,而不对本发明的范围构成任何限定。其中:
图1是本发明一实施例的数据压缩方法的流程示意图;
图2是本发明又一实施例的数据压缩方法的流程示意图;
图3是本发明实施例三的FPGA芯片的解压缩单元的结构示意图。
附图中,1-解压缩单元;2-12bit数据缓存模块;3-解压缩模块;4-8bit数据缓存模块;5-辅助字典缓存模块;6-字符串缓存模块。
具体实施方式
为使本发明的目的、优点和特征更加清楚,以下结合附图和具体实施例对本发明作进一步详细说明。需说明的是,附图均采用非常简化的形式且未按比例绘制,仅用以方便、明晰地辅助说明本发明实施例的目的。此外,附图所展示的结构往往是实际结构的一部分。特别的,各附图需要展示的侧重点不同,有时会采用不同的比例。
如在本发明中所使用的,单数形式“一”、“一个”以及“该”包括复数对象,术语“或”通常是以包括“和/或”的含义而进行使用的,术语“若干”通常是以包括“至少一个”的含义而进行使用的,术语“至少两个”通常是以包括“两个或两个以上”的含义而进行使用的,此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”、“第三”的特征可以明示或者隐含地包括一个或者至少两个该特征,术语“近端”通常是靠近操作者的一端,术语“远端”通常是靠近患者的一端,“一端”与“另一端”以及“近端”与“远端”通常是指相对应的两部分,其不仅包括端点,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。此外,如在本发明中所使用的,一元件设置于另一元件,通常仅表示两元件之间存在连接、耦合、配合或传动关系,且两元件之间可以是直接的或通过中间元件间接的连接、耦合、配合或传动,而不能理解为指示或暗示两元件之间的空间位置关系,即一元件可以在另一元件的内部、外部、上方、下方或一侧等任意方位,除非内容另外明确指出外。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
本发明的核心思想在于提供一种数据压缩方法、FPGA芯片及FPGA在线升级方法,以解决现有技术中在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个FPGA芯片升级耗时过长的问题。
以下参考附图进行描述。
【实施例一】
请参考图1,图1是本发明一实施例的数据压缩方法的流程示意图。本实施例所提供的数据压缩方法用于压缩FPGA芯片的在线升级文件,而所述FPGA 芯片在工作时具有如下两个特点:允许的传输数据的最大速度较低,因此需要考虑传输文件的压缩率;计算资源也较少,若解压缩需要的计算资源较多,则会增加解压缩流程的时间,从而增加了总的升级时间,因此也要考虑解压缩时计算的复杂程度。
发明人综合考虑了所述FPGA芯片的上述两个特点,设计了所述数据压缩方法,包括:
S110依次读取待压缩数据,并基于读取的内容逐步构建动态键值对,每个所述动态键值对包括存在对应关系的动态键名字符和动态键值字符串;
S120将所述待压缩数据中与所述动态键值字符串相匹配的字符串中的至少一部分替换为对应的所述动态键名字符以实现压缩过程;
S130当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。
也就是说,当所述动态键值对占用较多的存储空间时,并非直接清空动态键值对,而是需要通过一个额外的逻辑判断,当判断需要清空时,才对所述动态键值对进行清空。由于本算法用于压缩FPGA芯片的所述在线升级文件,而所述在线文件的各部分数据之间存在较强的相关性,因此可以考虑延长所述动态键值对的生命周期,以在复用已有的所述动态键值对的内容和清空现有所述动态键值对占用的存储空间以更好地压缩后续内容之间取得一个较好的综合效果。需理解,处理非特定对象数据的方案,无法与“根据预期压缩率有选择地清空所述动态键值对”的特征相结合。首先,由于未压缩的数据是未知的,因而无法通过类似于先遍历再判断的方式准确地估算所述预期压缩率;其次,由于非特定对象数据之间不存在相关性,因而也无法通过采样的方式来估算所述预期压缩率。因此,无法设计类似的判断依据来决定是否需要清空当前的字典。而压缩FPGA 芯片的在线升级文件时,可以采用上述的方案。第一,FPGA在线升级文件的全文是已知的,当需要进行所述预期压缩率的估算时,至少可以通过遍历全文的方式来获得精确的所述预期压缩率;第二,FPGA在线升级文件因为处理的是FPGA 的相关业务,因此前后文之间存在一定的相关性,例如相同的变量名或者相似的流程等等,所以,可以通过采样的方式来估算所述预期压缩率,提高判断速度。
步骤S130中提及的第一阈值,可以是对所述动态键值对的预设存储空间的100%,也可以是其他的比例,例如,95%,当所述动态键值对将要占满所有的预设存储空间之前,就触发判断逻辑,以使在判断过程中还能继续通过创建新的动态键值对进行压缩。在本实施例中,所述第一阈值为所述动态字典的全部的预设存储空间。
进一步地,所述预期压缩率的估算方法包括,统计所述动态字典数据作用于尚未读取的窗口长度的连续字符串时的未被压缩的字符数量。由于前文中已经提到可以通过采样的方式来估算所述预期压缩率,因此选择了统计所述动态字典数据作用于尚未读取的窗口长度的连续字符串时的未被压缩的字符数量来估算所述预期压缩率。例如,所述窗口长度为10,而未压缩的字符数量为4时,所述预期压缩率可以估算为60%。当所述窗口长度和所述第二阈值固定时,可以计算得到一个未压缩的字符数量上限。也可以利用所述未压缩的字符数量上限和统计得到的未压缩的字符数量进行比较,快速得到是否需要清空当前所述动态键值对的结果。所述窗口长度和所述未压缩的字符数量上限可以根据实际需要进行调整,以达到较优的效果。
需理解,以相邻两个字符作为起始字符的窗口长度的连续字符串的相关数据,有绝大部分是重合的,因此较优的统计方案是,每次统计完后,保留统计结果,在下一次统计开始时,将上一次统计结果中的第一个字符的数据删除,并加入待统计的新的一个字符的数据。上述优选方案的细节,可以参考本说明书实施例二的内容进行理解。
较优地,所述S130步骤运行时,由于已经正在读取尚未读取的字符,因此此时也可以同时继续运行步骤S110和步骤S120,只不过在S110中,根据存储空间的实际情况,可以选择继续创建新的所述动态键值对或者不再创建新的所述动态键值对。如此配置,可以降低同一个字符的读取次数,使得待压缩数据中的每一个字符只需要被读取一次。
在某些情况下,待压缩的所述在线升级文件总是存在一些先验信息,例如固定的文件头格式,或者固定的数据包包头格式等,通过提前统计的方法,可以预知一部分待压缩信息。这种情况下可以额外地构造所述静态键值对。利用先验信息对所述静态键值对进行初始化,在编码过程中使用所述静态键值对提高压缩率。
请参考图2,图2是本发明又一实施例的数据压缩方法的流程示意图。在一较优的实施例中,在读取所述待压缩数据之前,所述数据压缩方法还包括,构建静态键值对,每个所述静态键值对包括存在对应关系的静态键名字符和静态键值字符串;在读取所述待压缩数据之后,所述数据压缩方法还包括,所述数据压缩方法包括,将所述待压缩数据中与所述静态键值字符串相匹配的字符串中的至少一部分替换为对应的所述静态键名字符以实现压缩过程。也就是说,所述数据压缩方法包括:
S100构建静态键值对,每个所述静态键值对包括存在对应关系的静态键名字符和静态键值字符串;
S110依次读取待压缩数据,并基于读取的内容逐步构建动态键值对,每个所述动态键值对包括存在对应关系的动态键名字符和动态键值字符串;
S120将所述待压缩数据中与所述动态键值字符串相匹配的字符串中的至少一部分替换为对应的所述动态键名字符以实现压缩过程;
S121将所述待压缩数据中与所述静态键值字符串相匹配的字符串中的至少一部分替换为对应的所述静态键名字符以实现压缩过程;
S130当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。
需理解,在其他的一些实施例中,步骤S120和S121的顺序可以调换,或者并行工作。
采用这种结合的方式,可以进一步提高压缩的效果,节省更多的空间和带宽。需理解,在这样的方案下,与该方案配合工作的所述FPGA芯片中,也需要提前存入所述静态键值对的内容。如何构造所述静态键值对的具体内容,可以根据统计学领域的公知常识进行理论计算推理,也可以通过尝试-迭代的实验方法进行逐步优化,从而得到较优的所述静态键值对的内容,本说明书不对上述过程进行具体的描述。
在本实施例中,所述待压缩数据由第一长度的字符组成,所述压缩数据由第二长度的字符组成,所述动态键名字符为所述第二长度的字符,所述动态键值字符串由至少两个所述第一长度的字符组成。如此配置,有利于相关数据的整体处理和存储。
在一实施例运行过程中的某一时刻,所述动态键值对的内容如表1所示。
表1动态键值对内容
动态键名字符 | 动态键值字符串 |
1 | ab |
2 | abc |
3 | ef |
4 | abcd |
需理解,在表1中,所述动态键名字符为阿拉伯数字而所述动态键值字符串为英文字母所组成的字符串,这仅是为了便于理解进行的举例,并不代表所述动态键名字符只能为阿拉伯数字而所述动态键值字符串只能为英文字母所组成的字符串。
对于FPGA芯片来说,在解码时,能够利用的存储空间也是有限的,因此需要合理规划所述字典在FPGA芯片中的存储方式。表1所示的动态键值对内容,在直接存储时,占用的空间较多,例如,可能需要为每个所述动态键值字符串创建4个字符的存储空间,但这样对于有些所述动态键值字符串来讲,4个字符就又太多了。另外所述动态键值字符串还可能存在超过4个字符的可能,为每个所述动态键值字符串分配4个字符的存储空间可能还无法满足所有的可能性。因此,存在如下的较优的实施方案:
使用辅助容器对所述动态键值对进行存储,所述辅助容器的每个元素包括一个前匹配字符和一个后跟进字符,所述前匹配字符的长度为所述第一长度或者所述第二长度,所述后跟进字符的长度为所述第一长度,所述辅助字典的键名为所述第二长度的字符;
已知所述动态键名字符时,通过以下步骤得到对应的所述动态键值字符串:
以该所述动态键名字符作为所述辅助容器的索引号,得到相对应的元素,将得到的元素的所述前匹配字符位于所述后跟进字符之前拼接成基础字符串;
替换步骤,包括:将所述基础字符串中长度为所述第二长度的待替换字符作为新的所述辅助容器的索引号,用得到的相对应的元素替换所述待替换字符,替换时,所述前匹配字符位于所述后跟进字符之前;
重复所述替换步骤,直至所述基础字符串中仅包含所述第一长度的字符,将此时的所述基础字符串作为所述动态键值字符串输出。
以表1所示出的动态键值对内容为例,其内部实现的辅助容器内容如表2 所示
表2辅助容器内容
当所述动态键名字符为1时,所述辅助容器内部查找到的前匹配字符为a,后跟进字符为b,因此输出的字符串为ab,而当所述动态键名字符为4时,所述基础字符串的变化情况为:4→2d→1cd→abcd,最终输出为abcd,与表1所希望的输出内容相同。所述辅助容器的具体实现方式,可以进行任意的选择,例如所述辅助容器的元素为结构体,所述结构体包括所述前匹配字符和所述后跟进字符,又例如也可以是用两个相对独立的容器,第一个容器用来存放所述前匹配字符,第二个容器用来存放所述后跟进字符,并将索引号相同的第一个容器的元素和第二个容器的元素视为一个元素。所述辅助容器也可以进行扩展,存放实现其他逻辑所需要的必要信息。为了提高查找速度,以及压缩存储空间,所述辅助容器包括至少一个数组,以数组的方式进行数据存储。
这样配置的辅助容器,对FPGA芯片实现解压缩算法是较优的,因为每个辅助容器的索引号可以直接使用相关存储器的物理地址,所述前匹配字符为所述第一长度或者所述第二长度,可以为其分配所述第二长度的存储空间,所述后跟进字符为所述第一长度,因此可以为所述辅助容器的每个元素分配固定的空间(该空间的比特长度为所述第二长度+所述第一长度),存储空间占用效率高,有利于为所述FPGA芯片在解码时节约存储空间。
已知所述动态键值字符串时,通过以下步骤得到对应的所述动态键名字符:
以该所述动态键值字符串作为待查找字符串;
若待查找字符串的长度大于二,运行查找步骤,包括:用所述待查找字符串的第一个字符与所述辅助容器中的每个元素的所述前匹配字符做比较,同时使用待查找字符串的第二个字符与所述辅助容器中的同一个元素的所述后跟进字符做比较,当找到两者均匹配的元素时,使用该元素的索引号替换所述待查找字符串的前两个字符;
重复所述查找步骤,直至待查找字符串的长度变成二;
若所述待查找字符串的长度为二,用所述待查找字符串的第一个字符与所述辅助容器中的每个元素的所述前匹配字符做比较,同时使用待查找字符串的第二个字符与所述辅助容器中的同一个元素的所述后跟进字符做比较,当找到两者均匹配的元素时,将该元素的索引号作为对应的所述动态键名字符输出。
仍然以表2中的辅助容器为例,当所述动态键值字符串为abc时,查找过程如下,先通过ab查找到索引号1,用1替换ab得到1c,再利用1c查找到索引号2,因此所述动态键值字符串abc对应的所述动态键名字符为2,结果与表1 的内容相符。
在上述过程中,检索过程可以选择遍历法,但是遍历的方法运行时间较长,较优地,所述辅助容器中的元素索引号由该元素通过哈希散列法计算得到。如此配置,可以加快检索辅助容器的速度,减少了字符匹配次数。
较优地,所述哈希散列法解决冲突的办法为线性探测法,所述哈希散列法解决冲突的办法为线性探测法,所述线性探测法中使用的偏移量由元素的内容计算得到。采用所述线性探测法可以进一步地有效利用所述FPGA芯片的存储空间。
当需要创建一个新的动态键值对时,一般而言,需要相应地向所述辅助容器写入相关的一个或者多个元素。创建新的动态键值对的方法包括:
将所述动态键值字符串作为待写入字符串;
若所述待写入字符串的长度大于二,运行写入步骤,包括:用所述待写入字符串的第一个字符与所述辅助容器中的每个元素的所述前匹配字符做比较,同时使用待查找字符串的第二个字符与所述辅助容器中的同一个元素的所述后跟进字符做比较,当找到两者均匹配的元素时,使用该元素的索引号替换所述待写入字符串的前两个字符;当未找到两者均匹配的元素时,写入一个新的元素,该元素的所述前匹配字符为所述待写入字符串的第一个字符,该元素的所述后跟进字符为所述待写入字符串的第二个字符,将新的元素的索引号(索引号由所述哈希散列法计算得到)替换所述待写入字符串的前两个字符;
重复所述写入步骤,直至所述待写入字符串的长度变成二;
若所述待写入字符串的长度为二,用所述待写入字符串的第一个字符与所述辅助容器中的每个元素的所述前匹配字符做比较,同时使用待查找字符串的第二个字符与所述辅助容器中的同一个元素的所述后跟进字符做比较,当找到两者均匹配的元素时,结束;当未找到两者均匹配的元素时,写入一个新的元素,该元素的所述前匹配字符为所述待写入字符串的第一个字符,该元素的所述后跟进字符为所述待写入字符串的第二个字符,该元素的索引号作为新的所述动态键值对的所述键值字符。
仍然以表2所述的辅助容器为例,若要写入的新的动态键值对为{5,abcde},则最终向所述辅助容器写入{5,{4,e}}
上述写入方法在运行过程中,可能需要向所述辅助容器多次写入数据。所述数据压缩算法可以通过设置其他的逻辑限制,在创建一个新的动态键值对时,确保只需要写入一个相关的元素。例如,新的所述动态键值字符串的前(N-1)个字符必须已经存在于已有的所述动态键值对中,其中N为新的所述动态键值字符串的长度。
需理解,本实施例中,并未对所述静态键值对的存储方式,以及相应的查找和写入方式进行限定,并领域技术人员可以根据公知常识进行任意地配置,较优地,可以选择和所述动态键值对相同的方案,以节约存储空间,提高查找效率。
【实施例二】
在本实施例中,示出了一种具体的数据压缩方法。所述数据压缩方法的压缩对象是8bit编码的字符格式(即所述第一长度为8bit)。
初始化编码定义:压缩后的数据采用12bit编码的字符格式(即所述第二长度为12bit),定义0-255为8bit数据(也就是说,当压缩后的数据中出现编码为 0-255的12bit的字符时,可以将其直接转化为8bit的相同取值的字符),256- 4093为所述动态键值字符(也就是说,当压缩后的数据中出现编码为256-4093 的12bit的字符时,需要将其替换为对应的所述动态键值对才能输出8bit的字符),4094为清空所述动态键值对的标志,4095为文件结束标志;
初始化所述辅助容器的存储空间:由于引入哈希散列法快速检索,将数组的大小TABLE_SIZE设定为5021,开辟三个数组,分别为int型的所述动态键值字符table_value[TABLE_SIZE]、unsigned int型的前匹配字符 table_prefix[TABLE_SIZE]以及unsignedchar型的后跟进字符 table_append[TABLE_SIZE],并对table_value的所有值赋值为-1;(table_value[TABLE_SIZE]、table_prefix[TABLE_SIZE]以及 table_append[TABLE_SIZE]三者构成的整体可以与所述辅助容器相对应)
初始化变量:待编字典号为next_value为256,滑动监控长度计数器 cnt_samplewindow和未压缩字符计数器cnt_uncompressed为0;设定 SAMPLE_WINDOW(SAMPLE_WINDOW与所述窗口长度相对应)以及 UNCOMPRESSED_LIMIT(UNCOMPRESSED_LIMIT与所述未压缩的字符数量上限相对应)。
初始化链式队列LinkQueue,初始第一个节点Node并使队列的头front和尾rear都指向该节点;LinkQueue用来实现重置判断逻辑中的以所述起始字符为起点的窗口长度的连续字符串的相关统计判断。
当数据压缩方法运行时,包括如下步骤:
S301读入源文件第一个字符,存入变量prefix,跳转至S302;
S302读入下一个字符,存入变量append,跳转至S303;
S303判断当前的{predix,append}组合是否已经存在于所述动态字典中,具体逻辑如下:
S3031计算哈希参数index=(append<<4)^prefix,其中<<代表左移操作, ^代表按位异或操作;
S3032计算哈希偏移offset,如果index==0,则offset=1,否则offset=TABLE_SIZE-index;
S3033判断table_value[index]是否为-1,如果-1则代表该位置没有被用过,即当前的{predix,append}组合尚未存在,跳转至S304;如果table_value[index]不为-1,则比较{table_prefix[index],table_append[index]}是否与当前的{predix, append}相同,若相同,则代表已经存在,跳转至S306;若不相同则跳转至步骤S3034。
S3034更新index值,更新方法为index=mod(index-offset,TABLE_SIZE), mod(x,y)函数表示x关于y取余,结果为一个介于0~(y-1)之间的整数,然后跳转至S3033;
S304判断待编字典号next_value是否大于最大字典号4093,若大于则说明当前字典已经用尽,调用重置判断逻辑,并跳转至S302;否则,跳转至S305;
S305令table_prefix[index]=prefix;table_append[index]=append; table_value[index]=next_value;next_value++;在压缩后的文件中输出prefix;令prefix=append,跳转至S302;
S306令prefix=index,跳转至S302;
所述重置判断逻辑包括如下步骤:
S401当{predix,append}查字典返回结果是在字典中可以找到时,如果滑动监控长度计数器cnt_samplewindow小于等于设定的监视窗口长度 SAMPLE_WINDOW,则向队列LinkQueue中写入一个1,同时 cnt_samplewindow+1;如果滑动监控长度计数器cnt_samplewindow大于设定的监视窗口长度SAMPLE_WINDOW,代表队列LinkQueue已经写满,此时先从队列中读出一个元素,然后再写入1;如果读出的元素是-1,则未压缩字符计数器cnt_uncompressed–1;
S402当{predix,append}查字典返回结果是在字典中没有找到时,如果滑动监控长度计数器cnt_samplewindow小于等于设定的监视窗口长度 SAMPLE_WINDOW,则向队列中写入一个-1,同时cnt_samplewindow+1, cnt_uncompressed+1;如果滑动监控长度计数器cnt_samplewindow大于设定的监视窗口长度SAMPLE_WINDOW,代表队列已经写满,此时先从队列中读出一个元素,然后再写入-1;如果读出的元素是1,则未压缩字符计数器 cnt_uncompressed+1;
S403判断滑动监控长度计数器cnt_samplewindow大于SAMPLE_WINDOW 以及未压缩字符计数器cnt_uncompressed大于设置的未压缩字符数上限 UNCOMPRESSED_LIMIT是否同时满足,若否,则跳转至S401,若是,则清空之前的所述动态键值对,步骤如下:
S4031将当前append字符输出到压缩文件中,紧接着输出字典重构标志 NEW_TABLE(4094);
S4032恢复待编字典号next_value为初值256,滑动监控长度计数器 cnt_samplewindow和未压缩字符计数器cnt_uncompressed为0;
S4033将table_value[]中所有元素赋值为-1;
S4034初始化链式队列LinkQueue,初始第一个节点Node并使队列的头front 和尾rear都指向该节点。
需理解,当S401~S403运行时,S301~S306也在同步运行,从而保证待压缩数据中的每一个字符只需要被读取一次。
将本实施例中的数据压缩方法对不同型号的FPGA在线升级文件进行压缩测试,与经典的LZW算法的压缩率的进行比较,得到结果如下。
对Xilinx Kintex-7系列升级bin文件进行压缩,原bin文件大小9440KB,直接用LZW压缩后文件大小为5039KB,压缩率为46.6%,采用本实施例中的数据压缩方法压缩后文件大小降低到4667KB,压缩率提高为50.6%。
对Intel A10系列升级rpd文件进行压缩,原rpd文件大小为16000KB,直接用LZW压缩后文件大小为8781KB,压缩率为45.1%,采用本实施例中的数据压缩方法压缩后文件大小降低到6210KB,压缩率提高为61.2%。
在实际使用过程中,根据文件的内容的随机性可以调整所述窗口长度和所述未压缩的字符数量上限这两个参数,以达到最佳的压缩率,但最终的压缩率取决于源文件字符的随机性和重复性。在设置参数时,需要考虑目标压缩率和编码器对未压缩字符的8b/12b编码导致的膨胀,例如如果目标压缩率在50%以下则应设置允许未压缩字符数占采样窗口字符数的1/3以下。调整压缩过程的参数不影响解码逻辑。如果本身源文件随机性很强,无法实现较低的压缩率时,则应设置较大的允许未压缩字符数比例,避免过于频繁的重构字典带来的压缩效率低下。
【实施例三】
本实施例提供了一种FPGA芯片。所述FPGA芯片能够与实施例二中的数据压缩方法配合使用,所述FPGA芯片包括解压缩单元,用于对接收到的利用实施例二中的数据压缩方法压缩后的数据进行解码,所述解压缩单元通过构建与所述动态键值对相同内容的解码键值对并以所述解码键值对为依据进行解码,并在读取到压缩后的数据中包含的标志此处发生过所述动态键值对清空操作的特殊字符时,所述解压缩单元清空当前的所述解码键值对。请参考图3,图3是本发明实施例三的FPGA芯片的解压缩单元的结构示意图。
所述FPGA芯片包括解压缩单元1,所述解压缩单元1包括12bit数据缓存模块2、解压缩模块3、8bit数据缓存模块4、辅助容器缓存模块5以及字符串缓存模块6。所述12bit数据缓存模块2用于接收外部传入的压缩后的12bit的数据并进行缓存;所述解压缩模块3用于从所述12bit数据缓存模块2中读取数据并进行解压缩;所述8bit数据缓存模块4用于暂存解压缩完的数据并将其输出给所述FPGA芯片的其他单元;所述解压缩单元在构建所述解码键值对,也采用了类似于实施例二所述的辅助容器的存储逻辑,在此,将解码时使用的辅助容器称为解码辅助容器。所述辅助容器缓存模块5使用20个bit的存储空间作为一个存储片,用于存储12bit长度的前匹配字符和8bit长度的后跟进字符,也就是说所述解码辅助容器的一个元素被存储于一个所述存储片中,这样可以最大化利用FPGA有限的存储空间,在本实施例中,共分配了4096个所述存储片用于存储所述解码辅助容器的内容。所述字符串缓存模块6用于暂存解压缩过程中的结果。12bit数据缓存模块2、8bit数据缓存模块4、辅助字典缓存模块5,字符串缓存模块6的存储器具体形式可以根据升级时的时间上的需求以及成本的控制两方面综合考虑进行选择,例如,选择随机存取存储器、静态随机存储器等等。
所述解压缩单元1工作流程如下:
S501复位初始化,first_char指示标志位设置为1,old_code,new_code设置为0,next_value设置为256。
S502收到文件开始信号后,开始解压缩,从12bit数据缓存模块2中读出第一个12bit数据直接输出并作为old_code。
S503读取12bit数据缓存模块2中的数据作为new_code。
S504如果解码辅助容器没有写满,则把{old_code,new_code}加入解码辅助容器,next_value加1。
S505数据经过解压缩模块3解码,得到结果存在字符串缓存模块6中,并返回字符串长度;
需要注意的是,当收到的new_code等于next_value时需要特殊出来,把之前解码出字符串的最后一个字符放到新字符串的第一个字符,并对old_code进行解码,解码结果放到存在字符串缓存模块6的地址偏移加1开始,以保证解码正常。
S506更新变量参数,令old_code等于new_code,然后回到S503。
特殊处理一:当收到字典重构标志NEW_TABLE时,复位next_value为256,之后从12bit数据缓存模块2中连续读入两个数据作为old_code和new_code, old_code直接输出,new_code参与解码。
特殊处理二:上层模块收到解码结束标志和字符串长度后,从字符串缓存模块6读出数据输出。
本实施例还提供了一种FPGA在线升级方法,所述FPGA在线升级方法包括:使用实施例二中的数据压缩方法对所述在线升级文件进行数据压缩;将压缩后得到的数据传输给上述的FPGA芯片;所述FPGA芯片对接收到的数据进行解码,得到压缩前的所述在线升级文件,并根据所述在线升级文件进行升级。所述FPGA芯片的其他模块和以及在线升级时的工作逻辑,本领域技术人员可以根据公知常识进行合理的配置,在此不做详细的描述。
综上,在实施例一、实施例二以及实施例三提供的数据压缩方法、FPGA芯片及FPGA在线升级方法中,通过构建动态键值对实现压缩过程;当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。通过预期压缩率估算,有选择地重置所述动态键值对,兼顾了数据的压缩率和所述动态键值对的复用率,解决现有技术中在FPGA芯片升级时需要传输的升级文件的压缩率不高,并进一步导致了传输时间过长以及整个 FPGA芯片升级耗时过长的问题。
上述描述仅是对本发明较佳实施例的描述,并非对本发明范围的任何限定,本发明领域的普通技术人员根据上述揭示内容做的任何变更、修饰,均属于本发明技术方案的保护范围。
Claims (10)
1.一种数据压缩方法,其特征在于,所述数据压缩方法包括:
依次读取待压缩数据,并基于读取的内容逐步构建动态键值对,每个所述动态键值对包括存在对应关系的动态键名字符和动态键值字符串;
将所述待压缩数据中与所述动态键值字符串相匹配的字符串中的至少一部分替换为对应的所述动态键名字符以实现压缩过程;
当所述动态键值对占用的存储空间达到第一阈值时,估算所述动态键值对作用于尚未读取的全部待压缩数据时的预期压缩率,若所述预期压缩率低于第二阈值,清空当前所述动态键值对。
2.根据权利要求1所述的数据压缩方法,其特征在于,所述预期压缩率的估算方法包括,统计所述动态键值对作用于尚未读取的窗口长度的连续字符串时的未被压缩的字符数量。
3.根据权利要求1所述的数据压缩方法,其特征在于,在读取所述待压缩数据之前,所述数据压缩方法还包括,构建静态键值对,每个所述静态键值对包括存在对应关系的静态键名字符和静态键值字符串;
在读取所述待压缩数据之后,所述数据压缩方法还包括,所述数据压缩方法包括,将所述待压缩数据中与所述静态键值字符串相匹配的字符串中的至少一部分替换为对应的所述静态键名字符以实现压缩过程。
4.根据权利要求1所述的数据压缩方法,其特征在于,所述待压缩数据由第一长度的字符组成,所述压缩数据由第二长度的字符组成,所述动态键名字符为所述第二长度的字符,所述动态键值字符串由至少两个所述第一长度的字符组成。
5.根据权利要求4所述的数据压缩方法,其特征在于,使用辅助容器对所述动态键值对进行存储,所述辅助容器的每个元素包括一个前匹配字符和一个后跟进字符,所述前匹配字符的长度为所述第一长度或者所述第二长度,所述后跟进字符的长度为所述第一长度,所述辅助容器的索引号为所述第二长度的字符。
6.根据权利要求5所述的数据压缩方法,其特征在于,所述辅助容器包括至少一个数组。
7.根据权利要求5所述的数据压缩方法,其特征在于,所述辅助容器中的元素索引号由该元素通过哈希散列法计算得到。
8.根据权利要求7所述的数据压缩方法,其特征在于,所述哈希散列法解决冲突的办法为线性探测法,所述线性探测法中使用的偏移量由元素的内容计算得到。
9.一种FPGA芯片,其特征在于,所述FPGA芯片包括解压缩单元,用于对接收到的利用如权利要求1~8中任一项所述的数据压缩方法压缩后的数据进行解码,所述解压缩单元通过构建与所述动态键值对相同内容的解码键值对并以所述解码键值对为依据进行解码,并在读取到压缩后的数据中包含的标志此处发生过所述动态键值对清空操作的特殊字符时,所述解压缩单元清空当前的所述解码键值对。
10.一种FPGA在线升级方法,其特征在于,所述FPGA在线升级方法包括:
使用如权利要求1~8中任一项所述的数据压缩方法对在线升级文件进行数据压缩;
将压缩后得到的数据传输给FPGA芯片;
所述FPGA芯片对接收到的数据进行解码,得到压缩前的所述在线升级文件,并根据所述在线升级文件进行升级。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127173.XA CN112968706B (zh) | 2021-01-29 | 2021-01-29 | 数据压缩方法、fpga芯片及fpga在线升级方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127173.XA CN112968706B (zh) | 2021-01-29 | 2021-01-29 | 数据压缩方法、fpga芯片及fpga在线升级方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112968706A CN112968706A (zh) | 2021-06-15 |
CN112968706B true CN112968706B (zh) | 2023-02-24 |
Family
ID=76272133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110127173.XA Active CN112968706B (zh) | 2021-01-29 | 2021-01-29 | 数据压缩方法、fpga芯片及fpga在线升级方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112968706B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114036097B (zh) * | 2021-10-09 | 2024-03-01 | 中国航空工业集团公司洛阳电光设备研究所 | 一种提升光电产品维护性的国产fpga逻辑在线升级方法 |
CN115099193A (zh) * | 2022-08-22 | 2022-09-23 | 北京永洪商智科技有限公司 | 一种分布式数据压缩存储方法及系统 |
CN115988569B (zh) * | 2023-03-21 | 2023-06-30 | 浙江省疾病预防控制中心 | 一种蓝牙设备数据快速传输方法 |
CN117081602B (zh) * | 2023-10-13 | 2024-01-26 | 青岛场外市场清算中心有限公司 | 基于区块链的资金结算数据优化处理方法 |
CN118193442B (zh) * | 2024-05-17 | 2024-07-23 | 北京燧原智能科技有限公司 | 一种数据处理方法、装置、电子设备和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8566376B2 (en) * | 2010-07-30 | 2013-10-22 | Chevron U.S.A. Inc. | System and method for data compression using a field programmable gate array |
CN106407285B (zh) * | 2016-08-26 | 2019-11-29 | 西安空间无线电技术研究所 | 一种基于rle和lzw的优化比特文件压缩与解压缩方法 |
CN108023597B (zh) * | 2016-10-28 | 2021-03-05 | 沈阳高精数控智能技术股份有限公司 | 一种数控系统可靠性数据压缩方法 |
CN110166221B (zh) * | 2019-03-05 | 2022-02-22 | 西安电子科技大学 | 一种密文数据压缩存储结构rcpe及数据动态读写方法 |
CN111030702A (zh) * | 2019-12-27 | 2020-04-17 | 哈尔滨理工大学 | 一种文本压缩方法 |
-
2021
- 2021-01-29 CN CN202110127173.XA patent/CN112968706B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN112968706A (zh) | 2021-06-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112968706B (zh) | 数据压缩方法、fpga芯片及fpga在线升级方法 | |
US11044495B1 (en) | Systems and methods for variable length codeword based data encoding and decoding using dynamic memory allocation | |
US10979071B2 (en) | Systems and methods for variable length codeword based, hybrid data encoding and decoding using dynamic memory allocation | |
US5001478A (en) | Method of encoding compressed data | |
US9054729B2 (en) | System and method of compression and decompression | |
EP0438955B1 (en) | Data compression method | |
US7764202B2 (en) | Lossless data compression with separated index values and literal values in output stream | |
US7688233B2 (en) | Compression for deflate algorithm | |
US20070279261A1 (en) | Method and apparatus for lossless run-length data encoding | |
US20090060047A1 (en) | Data compression using an arbitrary-sized dictionary | |
CN108702160B (zh) | 用于压缩和解压缩数据的方法、设备和系统 | |
US7605721B2 (en) | Adaptive entropy coding compression output formats | |
US20220005229A1 (en) | Point cloud attribute encoding method and device, and point cloud attribute decoding method and devcie | |
US7656320B2 (en) | Difference coding adaptive context model using counting | |
CN115882866A (zh) | 一种基于数据差值特征的数据压缩方法 | |
US7864085B2 (en) | Data compression method and apparatus | |
CN117119120B (zh) | 基于多台无人驾驶矿车的协同控制方法 | |
US5010344A (en) | Method of decoding compressed data | |
US5184126A (en) | Method of decompressing compressed data | |
CN115913246A (zh) | 基于自适应瞬时熵的无损数据压缩算法 | |
CN115567058A (zh) | 一种结合预测与编码的时序数据有损压缩方法 | |
US5880688A (en) | Arithmetic coding context model that adapts to the amount of data | |
US7750826B2 (en) | Data structure management for lossless data compression | |
US7612692B2 (en) | Bidirectional context model for adaptive compression | |
CN109698704B (zh) | 比对型基因测序数据解压方法、系统及计算机可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |