基于字典压缩算法的数字波形压缩方法、装置和设备

文档序号:32981158发布日期:2023-01-17 22:04阅读:19来源:国知局
基于字典压缩算法的数字波形压缩方法、装置和设备

1.本技术涉及数据处理技术领域,特别是涉及一种基于字典压缩算法的数字波形压缩方法、装置和设备。


背景技术:

2.集成电路逻辑仿真的对象是由门和功能块等元件组成的逻辑电路,逻辑仿真是对硬件描述语言所定义的数字电路行为的预测与检验,其基本原理是使用计算机软件模拟一个激励信号,然后观察所设计电路的响应行为并判断是否满足预期的功能。逻辑仿真采用的是事件驱动的仿真方法,仿真结果波形仅当事件发生的某些时刻才产生变化。
3.逻辑仿真是数字集成电路设计中最重要的步骤之一,其得到的数字波形是功能和时序验证与优化、功耗以及功耗分析的基础。随着电路规模不断变大,逻辑仿真生成的数字波形数量不断增多,这导致需要大量的存储空间存储波形。对于集成电路逻辑仿真过程,仿真时间节点的数量达到数十亿规模,而一个时间点上可能包含了数十万规模的数字信号值变化。针对集成电路逻辑仿真生成的大规模数字波形文件,需要设计一个高效且无精度损失的数字波形压缩存储格式和相应算法以减少波形数据的存储以及传播开销。
4.数字波形的压缩要求无损,一些通用的无损压缩方法,如gzip和bzip2压缩算法,也可用于减少波形数据的大小,但是这些算法没有考虑数字波形数据的数据特性以及前后波形信号变化的相关性,因此不能实现较高的压缩率。文献1:谢雨洋,李凌劼,喻文健,面向集成电路逻辑仿真的高效数字波形压缩方法[j],计算机辅助设计与图形学学报,2021,33(11):9进一步通过动态字典减小了内存使用,改进了数据结构并引入了二次压缩方法,从而达到更高的压缩率,还有学者提出了一种专用于数字波形的压缩技术,通过构建字典压缩信号id,通过值预测压缩值数据,其不足是其字典的内存开销过大,还有学者研究了模拟波形和测试波形的压缩,但这些技术并不能应用于数字波形的压缩。


技术实现要素:

[0005]
基于此,有必要针对上述技术问题,提供一种基于字典压缩算法的数字波形压缩方法、装置、计算机设备和存储介质。
[0006]
一种基于字典压缩算法的数字波形压缩方法,所述方法包括:解析原始待压缩数字波形的结构,得到辅助信息以及所述原始待压缩数字波形的每一跳变块中的时间戳、多个信号id和多个信号值;分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到所述原始待压缩数字波形对应的时间戳表、id表和信号值表;所述时间戳表中的时间戳对应于所述id表中的一组信号id;所述id表中的信号id与所述信号值表中的信号值一一对应;当所述原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一所述时间戳按照对应的时钟周期进行划分,得到多个时钟域;根据所述辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对所述原始
待压缩数字波形进行重组,得到重组后的待压缩数字波形;采用字典压缩算法压缩所述重组后的待压缩数字波形。
[0007]
在其中一个实施例中,还包括:根据每一跳变块中的时间戳,得到时间戳表;所述时间戳表包括按从小到大的顺序逐行存放的时间戳;根据每一跳变块中的多个信号id,得到id表;所述id表包括按所述原始待压缩数字波形中的信号id顺序存放的信号id;所述信号id按照所属的跳变块分组存放,每组信号id之间用空行隔开;根据每一跳变块中的多个信号值,得到信号值表;所述信号值表包括按所述原始待压缩数字波形中的信号值顺序存放的信号值。
[0008]
在其中一个实施例中,还包括:将所述信号值表中的每一信号值按信号值对应的信号id分类,得到以id为键值的值链表。
[0009]
在其中一个实施例中,还包括:将所述时间戳表中第一个时间戳表示为绝对时间,排在所述绝对时间后的时间戳表示为时间增量;所述时间增量的字符长度小于所述绝对时间的字符长度。
[0010]
在其中一个实施例中,还包括:获取所述时间戳对应的时间戳集合;将所述时间戳集合中的时间戳两两作差,得到候选时钟周期;将每一所述候选时钟周期分别与多个时间戳进行匹配,得到多个时钟周期;根据所述时钟周期对每一所述时间戳进行划分,得到多个时钟域。
[0011]
在其中一个实施例中,还包括:将每一所述候选时钟周期分别与多个时间戳相加,若相加后得到的和在所述时间戳集合中,则所述候选时钟周期与对应的时间戳匹配成功;根据匹配次数最多的多个所述候选时钟周期,得到多个时钟周期。
[0012]
在其中一个实施例中,还包括:将不属于所述多个时钟域的时间戳划分到杂项时钟域。
[0013]
在其中一个实施例中,还包括:所述字典压缩算法包括lzma2。
[0014]
一种基于字典压缩算法的数字波形压缩装置,所述装置包括:波形解析模块,用于解析原始待压缩数字波形的结构,得到辅助信息以及所述原始待压缩数字波形的每一跳变块中的时间戳、多个信号id和多个信号值;数据分离模块,用于分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到所述原始待压缩数字波形对应的时间戳表、id表和信号值表;所述时间戳表中的时间戳对应于所述id表中的一组信号id;所述id表中的信号id与所述信号值表中的信号值一一对应;多时钟域分割模块,用于当所述原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一所述时间戳按照对应的时钟周期进行划分,得到多个时钟域;重组模块,用于根据所述辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对所述原始待压缩数字波形进行重组,得到重组后的待压缩数字波形;字典压缩模块,用于采用字典压缩算法压缩所述重组后的待压缩数字波形。
[0015]
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:解析原始待压缩数字波形的结构,得到辅助信息以及所述原始待压缩数字波形的
每一跳变块中的时间戳、多个信号id和多个信号值;分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到所述原始待压缩数字波形对应的时间戳表、id表和信号值表;所述时间戳表中的时间戳对应于所述id表中的一组信号id;所述id表中的信号id与所述信号值表中的信号值一一对应;当所述原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一所述时间戳按照对应的时钟周期进行划分,得到多个时钟域;根据所述辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对所述原始待压缩数字波形进行重组,得到重组后的待压缩数字波形;采用字典压缩算法压缩所述重组后的待压缩数字波形。
[0016]
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:解析原始待压缩数字波形的结构,得到辅助信息以及所述原始待压缩数字波形的每一跳变块中的时间戳、多个信号id和多个信号值;分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到所述原始待压缩数字波形对应的时间戳表、id表和信号值表;所述时间戳表中的时间戳对应于所述id表中的一组信号id;所述id表中的信号id与所述信号值表中的信号值一一对应;当所述原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一所述时间戳按照对应的时钟周期进行划分,得到多个时钟域;根据所述辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对所述原始待压缩数字波形进行重组,得到重组后的待压缩数字波形;采用字典压缩算法压缩所述重组后的待压缩数字波形。
[0017]
上述基于字典压缩算法的数字波形压缩方法、装置和设备,通过对原始待压缩数字波形的每一跳变块中的时间戳、信号id和信号值进行重组,得到时间戳表、id表和信号值表,使得同类的字符更加集中,更容易实现字典匹配,采用预先设置的多时钟域分割算法对每一时间戳按照对应的时钟周期进行划分,得到原始待压缩数字波形的多个时钟域,能够克服存在多个时钟域时,时间增量和信号id变得混乱难以压缩的问题,根据辅助信息和每一时钟域对应的时间戳表、id表和信号值表,得到重组后的待压缩数字波形,采用字典压缩算法压缩重组后的待压缩数字波形。本发明实施例,能够在更短的压缩、解压缩耗时下提高数字波形压缩的压缩率,并且能够保持波形精度。
附图说明
[0018]
图1为一个实施例中基于字典压缩算法的数字波形压缩方法的流程示意图;图2为一个实施例中lzma2的基于滑动窗口的动态字典匹配方法的流程示意图;图3为一个实施例中现有压缩算法的压缩效果对比示意图;图4为另一个实施例中四类数据分离的流程示意图;图5为一个实施例中信号值按id分类的流程示意图;图6为另一个实施例中本发明方法与其他数字波形压缩算法的对比示意图;图7为一个实施例中基于字典压缩算法的数字波形压缩装置的结构框图;图8为一个实施例中计算机设备的内部结构图。
具体实施方式
[0019]
为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
[0020]
本发明方法首次将lzma2(lempel-ziv-markov chain-algorithm 2)字典压缩方法应用于数字波形vcd(value changedump)文件的压缩,根据vcd文件的文件特点,提出了包括:数据分离、信号值按id分类、时间增量的表示三种数据重组方法,并对存在多时钟域的vcd波形提出了时钟域分割重组技术。针对实际的数字波形能够获得最高3000倍左右的压缩率,明显高于传统的压缩技术。该方法具有很好的多线程能力,压缩速度快,并能完美保持原vcd精度。
[0021]
在一个实施例中,如图1所示,提供了一种基于字典压缩算法的数字波形压缩方法,包括以下步骤:步骤102,解析原始待压缩数字波形的结构,得到辅助信息以及原始待压缩数字波形的每一跳变块中的时间戳、多个信号id和多个信号值。
[0022]
本发明实施例中待压缩数字波形的格式为vcd文件格式,vcd文件格式是ieee1364标准规定的数字波形格式,在工业界有着广泛应用,vcd是一种可读的ascii文件,vcd可分为头信息(head),信号id定义(iddef)和跳变向量 (vector of transition block,vtrb)三部分,其中头信息和信号id定义可以合并称为辅助信息(auxiliary information,auxi),即:vcd={auxi,vtrb},辅助信息auxi的内容一般较少,跳变向量vtrb是vcd文件的主要部分,将vtrb再细分为一系列的跳变块(transition block,trb),即:,跳变块中第一行是时间戳(time,t),之后的每一行都是一个信号跳变(transition,tr),每一个跳变中包含跳变值(value,v)和信号id两部分,即:,。
[0023]
步骤104,分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到原始待压缩数字波形对应的时间戳表、id表和信号值表。
[0024]
时间戳表中的时间戳对应于id表中的一组信号id,id表中的信号id与信号值表中的信号值一一对应。
[0025]
步骤106,当原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一时间戳按照对应的时钟周期进行划分,得到多个时钟域。
[0026]
电路中有多个时钟域是常见的现象,在vcd中存在多个时钟域时,时间增量和信号id变得混乱难以压缩,然而vcd文件本身并没有明确指出哪些信号属于同一个时钟域,以及各时钟域的时钟周期是多少,需要自行从vcd文件中分析推断。推测的方法有三种:第一,从头信息中查找clk及其类似的信号名;第二,查找多次同时跳变的信号id大概率属于同一个时钟域;第三,呈等差数列分布的时间戳及其id可认为属于同一时钟域。其中,前两种方法
可靠性低,依赖于设计和激励,并且容易造成trb中的id被切分到不同时钟域,无法恢复id顺序。因此以第三种方法进行时钟域分割,并设计多时钟域分割算法。
[0027]
步骤108,根据辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对原始待压缩数字波形进行重组,得到重组后的待压缩数字波形。
[0028]
vcd文件中,时间戳、信号id和信号值交替出现,不利于字典匹配,需要根据vcd波形的特点进一步增强。增强包括两个方面,一方面是通过重组呈现更多的字典匹配,另一方面是通过重组增加字典匹配长度len并缩短字典匹配距离dis。
[0029]
步骤110,采用字典压缩算法压缩重组后的待压缩数字波形。
[0030]
字典压缩算法包括lzma2,vcd波形往往存在特定的跳变模式,表现为重复或相似的字符片段,因此非常适合采用字典方式压缩。lzma2是基于滑动窗口的动态字典压缩算法和区间编码算法,图2所示为lzma2的基于滑动窗口的动态字典匹配方法的流程示意图,其中构造了搜索缓存(search buffer)和先行缓存( look-ahead buffer)两个数据结构,在搜索缓存中寻找与前向缓存中匹配最长的字符串,输出三元组(dis,len,lit)。其中,dis表示先行缓存与搜索缓存中匹配数据首字节之间的距离,len表示最大的匹配长度,lit表示匹配字串的下一个字符,其中,搜索缓存组织为hash表的形式以加快匹配速度。
[0031]
图3所示的现有压缩算法的压缩效果对比示意图,给出了lzma2字典算法对于vcd压缩的效果,并与其他两种广泛使用的通用无损压缩技术gzip和bzip2,以及文献1中的vcd专用无损压缩技术进行了对比。可见lzma2对于vcd有较好的压缩效果,压缩率远远高于gzip和bzip2两种算法,lzma2与vcd专用无损压缩技术相当,在test1和test5中lzma2算法甚至好于vcd专用无损压缩技术,在test2、test3、test4中不如专用vcd算法。
[0032]
上述基于字典压缩算法的数字波形压缩方法中,通过对原始待压缩数字波形的每一跳变块中的时间戳、信号id和信号值进行重组,得到时间戳表、id表和信号值表,重组使得同类的字符更加集中,更容易实现字典匹配,采用预先设置的多时钟域分割算法对每一时间戳按照对应的时钟周期进行划分,得到原始待压缩数字波形的多个时钟域,能够克服存在多个时钟域时,时间增量和信号id变得混乱难以压缩的问题,根据辅助信息和每一时钟域对应的时间戳表、id表和信号值表,得到重组后的待压缩数字波形,采用字典压缩算法压缩重组后的待压缩数字波形。本发明实施例,能够在更短的压缩、解压缩耗时下提高数字波形压缩的压缩率,并且能够保持波形精度。
[0033]
虽然lzma2算法对vcd压缩有明显的优势,但是vcd文件中,时间戳、信号id和信号值交替出现,不利于字典匹配,需要根据vcd波形的特点进一步增强。
[0034]
在一个实施例中,分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到原始待压缩数字波形对应的时间戳表、id表和信号值表包括:根据每一跳变块中的时间戳,得到时间戳表;时间戳表包括按从小到大的顺序逐行存放的时间戳;根据每一跳变块中的多个信号id,得到id表;id表包括按原始待压缩数字波形中的信号id顺序存放的信号id;信号id按照所属的跳变块分组存放,每组信号id之间用空行隔开;根据每一跳变块中的多个信号值,得到信号值表;信号值表包括按原始待压缩数字波形中的信号值顺序存放的信号值。
[0035]
在本实施例中,将vcd的数据分类可以实现更好的字典压缩,vcd文件内容可分为辅助信息、时间戳、信号id、信号值四类,其中辅助信息可保持不变,主要对vtrb结构进行重
组变形,具体方法如下:s1,将分布在不同trb中的时间戳抽取出来,建立一个时间戳表tabtime集中保存,tabtime中所有时间戳按从小到大的顺序逐行存放;s2,将分布在不同trb中的信号id抽取出来,建立一个id表tabidb来集中保存。所有id按在原始待压缩数字波形中出现的顺序存放,每一个trb结束时增加一个空行用于隔离;s3,将分布在不同trb中的信号值抽取出来,建立一个信号值表tabvalue集中保存,所有信号值按在原始待压缩数字波形中出现的顺序逐行存放。
[0036]
解压时,一方面,tabtime中的每一个时间戳和tabidb中空行隔离的id组是一一对应的,可以通过它们在tabtime和tabidb内的顺序配对恢复,另一方面,信号值和id是一一对应的,解压时可以通过它们在tabidb和tabvalue中的顺序配对恢复。tabidb中保留了原始待压缩数字波形中信号的所有信息,因此能够保留glitch信息、保持id相对顺序。通过以上重组使得同类的字符更加集中,更容易实现字典匹配。例如,tabtime中仅有0-9的数字字符,tabvalue中绝大部分都是0、1字符。
[0037]
在一个实施例中,方法还包括:将信号值表中的每一信号值按信号值对应的信号id分类,得到以id为键值的值链表。在本实施例中,在信号值表tabvalue中,可以通过按各个值所属id分类,进一步增强字典匹配。具体如图5所示,tabvalue组织为一个以id为键值的hash链表,压缩时,每从vcd读到一个id,就在hash链表中查找该id是否已经存在,如果不存在则增加该id为新元素,并分配一个新的值链表,如果id已存在,则找到该id所属的值链表,并在其末尾添加一个新值,电路中同一个id的值几乎总是0
→1→0→
1的反复跳变,通过以上重组,所属同一个id的值链表中就会出现大量相同的01字符,更加容易形成长的字典匹配,从而实现极高的压缩率。即使是总线型(bus)和实数型(real)在进行这样的重组以后,由于相似数据聚集,压缩率也会有明显提升。虽然这种重组对值的顺序进行了打乱,但信号值和信号id的一一对应关系仍然保持,解压时仍可以通过tabidb中id的顺序完全恢复原始待压缩数字波形。
[0038]
在一个实施例中,方法还包括:将时间戳表中第一个时间戳表示为绝对时间,排在绝对时间后的时间戳表示为时间增量;时间增量的字符长度小于绝对时间的字符长度。在本实施例中,同步数字电路在时钟驱动下以固定周期性变化,因此可以在tabtime表中对时间进一步变形,第一个时间以绝对时间表示,其后面的所有时间都以时间增量dt表示,变形后时间增量的字符长度要小于绝对时间。时间增量中有大量相同时钟周期增量值,将能获得更多的字典匹配。
[0039]
在一个实施例中,多时钟域分割算法包括:获取时间戳对应的时间戳集合;将时间戳集合中的时间戳两两作差,得到候选时钟周期;将每一候选时钟周期分别与多个时间戳进行匹配,得到多个时钟周期;根据时钟周期对每一时间戳进行划分,得到多个时钟域;将每一候选时钟周期分别与多个时间戳进行匹配,得到多个时钟周期包括:将每一候选时钟周期分别与多个时间戳相加,若相加后得到的和在时间戳集合中,则候选时钟周期与对应的时间戳匹配成功;根据匹配次数最多的多个候选时钟周期,得到多个时钟周期;多时钟域分割算法还包括:将不属于多个时钟域的时间戳划分到杂项时钟域。
[0040]
在本实施例中,多时钟域分割算法的流程包括:
(1)、选择原始待压缩数字波形的时间戳集合中的前n个时间戳,计算两两之间的时间差,将得到的n!个δt值作为可能的时间周期作为候选时间周期;(2)、再选择m个时间戳(m大于n),将n!个δt与m个时间戳一一相加,如果得到的和仍在时间戳集合中,则认为该δt匹配了一次;(3)、统计匹配次数最多的p个δt作为时钟周期;(4)、将原始待压缩数字波形的中所有符合p个时钟周期的时间戳划分构成p个时钟域,不属于这p个时钟域的其他时间戳划分到一个另外的杂项时钟域。
[0041]
解压缩时,涉及多个时钟域的跳变合并时,简单轮询各个时钟域的trb,选时间戳最小的一个写入解压vcd即可。
[0042]
重组后的vcd格式表述如下:整个vcd由辅助信息auxi和多个时钟域(clock domain,cd)组成,,其中每个时钟都由tabtime、tabidb和tabvalue三个表组成,tabtime表的第一个元素是绝对时间,后面的元素均为时间增量,,tabidb表中包括出现的id及其隔离空行,,tabvalue表是以id为键的值链表,将原始待压缩数字波形重组为,然后进行 lzma2的压缩即完成增强压缩算法。
[0043]
在另一个实施例中,本发明方法可以进行多线程并行处理,具有良好的多线程特性,能够实现压缩加速。多线程并行可以在多个级别上开展,首先,经分割的多个时钟域可以多线程独自进行重组;其次,时间增量的表示、信号值按信号id分类可以多线程各自独立进行;再次,tabtime,tabidb,tabvalue也可以多线程独自进行lzma2压缩;最后lzma2算法本身也支持多线程。因此,本发明几乎可以在服务器内核数和硬盘读写速度允许的条件下无限加速。
[0044]
在一个具体实施例中,针对以上提出的压缩技术进行了详细的评估。提出的方法使用 c++实现,所有实验均运行于一个装有intel xeon e5-2630 cpu(2.4 ghz)的 linux 服务器上,操作系统是 centos7.4。作为对比的lzma2算法来自于https://tukaani.org/xz,文献1方法用c++实现,fsdb(fast signal database)方法来自于http://gtkwave.sourceforge.net/,注意到fsdb方法有多种不同的参数配置,在实验中给出两种设置进行对比,其中,fsdb1是不保证压缩后的id顺序、不保留glitch的配置;fsdb2是保证压缩后的id顺序、保留同时glitch,同时还进行二次压缩的配置。测试样本来自国防科技大学在飞腾微处理器研制中的实际产生的仿真波形。一共有5个实际波形数据,这些波形数据均按照vcd文件的格式输出,文件大小从几百兆字节到几十g字节不等。
[0045]
本发明方法与其他数字波形压缩算法的对比示意图如图6 所示,本发明方法的压缩vcd文件最大分别可以达到 3275倍的压缩率。相比lzma2压缩有3~29倍的提高,这说明
vcd重组方法对于压缩有明显增强,另外,在所有测试样本上的压缩率都比文献1方法好,这是因为lzma的动态字典管理机制要优于文献1中的机制,并且vcd重组的压缩增强作用明显。与fsdb1相比,本发明方法的压缩率在波形4上稍低于fsdb1,这是因为不维持顺序和glitch更容易压缩,即便如此在其他4个测试样本上本发明方法的压缩率也明显高于fdsb1。与fsdb2相比,本发明方法的压缩率全面更加优秀。从实验结果可知,本发明方法无论相比学术界的文献1还是工业界的fsdb方法能够更有效地进行压缩。
[0046]
表1给出了分项的压缩率分析,即对辅助信息、时间戳信息、信号id信息、信号值的压缩率进行分析。其中,时间戳取得了最高的压缩率,平均达到3236倍,这是因为本发明方法充分利用了时间戳的周期性特征;信号id和信号值分别取得了1941和1872倍的平均压缩率,这是由于通过数据分离最大化了字典编码效率;辅助信息仅取得了平均14.4倍的压缩率,但辅助信息的总数据量较小,对最终文件的尺寸影响较小。
[0047]
表1 四类数据分项压缩率单线程、4线程和12线程压缩时间和解压时间的对比结果分别如表2、表3所示。其中,压缩比有稍许的下降,这是因为各个线程都有生成各自的字典表,在单线程压缩和解压时,本发明方法与文献1相当,可见本发明方法加入的数据重组操作的时间开销小,对比4线程和12线程的压缩解压时间,可以见得压缩时间和解压时间呈线性减小,其下降速度明显快于文献1方法。对比fsdb可知,fsdb在单线程压缩方面速度非常有优势,但仍慢于本发明方法采用多线程并行的实施例。fsdb的明显不足是其解压速度慢于压缩速度。而本发明方法和文献1的解压过程均快于压缩过程,对于波形5这样的大波形,本发明方法多线程并行实施例的解压时间仅为fsdb的1/8。
[0048]
表2 压缩时间对比结果(单位:s)
表3解压时间对比结果(单位:s)从vcd的精确性保持方面考查,包括两个方面:第一,解压后trb中信号之间的相互顺序是否能保持;第二,解压后trb中的glitch是否能保持。首先信息不能缺少,其次,信号顺序不能改变,即使在同一个时间点上跳变的信号,否则有可能影响后续流程分析结果。精度对比结果如表4所示:表4 精度对比结果本发明方法和文献1方法都能够完美还原原来的vcd文件。对于fsdb1,在还原vcd后有多处id顺序变换的情况,并且有glitch丢失的情况出现。对于fsdb2,没有id顺序变换的情况出现,但仍有glitch丢失的情况。
[0049]
应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本发明方法中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替
地执行。
[0050]
在一个实施例中,如图7所示,提供了一种基于字典压缩算法的数字波形压缩装置,包括:波形解析模块702、数据分离模块704、多时钟域分割模块706、重组模块708和字典压缩模块710,其中:波形解析模块702,用于解析原始待压缩数字波形的结构,得到辅助信息以及原始待压缩数字波形的每一跳变块中的时间戳、多个信号id和多个信号值;数据分离模块704,用于分别根据每一跳变块中的时间戳、多个信号id和多个信号值,得到原始待压缩数字波形对应的时间戳表、id表和信号值表;时间戳表中的时间戳对应于id表中的一组信号id;id表中的信号id与信号值表中的信号值一一对应;多时钟域分割模块706,用于当原始待压缩数字波形存在多个时钟域时,采用预先设置的多时钟域分割算法对每一时间戳按照对应的时钟周期进行划分,得到多个时钟域;重组模块708,用于根据辅助信息和每一时钟域对应的时间戳表、id表和信号值表,对原始待压缩数字波形进行重组,得到重组后的待压缩数字波形;字典压缩模块710,用于采用字典压缩算法压缩重组后的待压缩数字波形。
[0051]
在其中一个实施例中,数据分离模块704还用于根据每一跳变块中的时间戳,得到时间戳表;时间戳表包括按从小到大的顺序逐行存放的时间戳;根据每一跳变块中的多个信号id,得到id表;id表包括按原始待压缩数字波形中的信号id顺序存放的信号id;信号id按照所属的跳变块分组存放,每组信号id之间用空行隔开;根据每一跳变块中的多个信号值,得到信号值表;信号值表包括按原始待压缩数字波形中的信号值顺序存放的信号值。
[0052]
在其中一个实施例中,数据分离模块704还用于将信号值表中的每一信号值按信号值对应的信号id分类,得到以id为键值的值链表。
[0053]
在其中一个实施例中,数据分离模块704还用于将时间戳表中第一个时间戳表示为绝对时间,排在绝对时间后的时间戳表示为时间增量;时间增量的字符长度小于绝对时间的字符长度。
[0054]
在其中一个实施例中,多时钟域分割模块706还用于获取时间戳对应的时间戳集合;将时间戳集合中的时间戳两两作差,得到候选时钟周期;将每一候选时钟周期分别与多个时间戳进行匹配,得到多个时钟周期;根据时钟周期对每一时间戳进行划分,得到多个时钟域。
[0055]
在其中一个实施例中,多时钟域分割模块706还用于将每一候选时钟周期分别与多个时间戳相加,若相加后得到的和在时间戳集合中,则候选时钟周期与对应的时间戳匹配成功;根据匹配次数最多的多个候选时钟周期,得到多个时钟周期。
[0056]
在其中一个实施例中,多时钟域分割模块706还用于将不属于多个时钟域的时间戳划分到杂项时钟域。
[0057]
在其中一个实施例中,还用于字典压缩算法包括lzma2。
[0058]
关于基于字典压缩算法的数字波形压缩装置的具体限定可以参见上文中对于基于字典压缩算法的数字波形压缩方法的限定,在此不再赘述。上述基于字典压缩算法的数字波形压缩装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0059]
在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种基于字典压缩算法的数字波形压缩方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0060]
本领域技术人员可以理解,图8中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0061]
在一个实施例中,提供了一种计算机设备,包括存储器和处理器,该存储器存储有计算机程序,该处理器执行计算机程序时实现上述实施例中方法的步骤。
[0062]
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例中方法的步骤。
[0063]
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink) dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。
[0064]
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0065]
以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术专利的保护范围应以所附权利要求为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1