基于字典壓縮算法的數字波形壓縮方法、裝置和設備
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.一種基于字典壓縮算法的數字波形壓縮方法,其特征在于,所述方法包括:解析原始待壓縮數字波形的結構,得到輔助信息以及所述原始待壓縮數字波形的每一跳變塊中的時間戳、多個信號id和多個信號值;分別根據每一跳變塊中的時間戳、多個信號id和多個信號值,得到所述原始待壓縮數字波形對應的時間戳表、id表和信號值表;所述時間戳表中的時間戳對應于所述id表中的一組信號id;所述id表中的信號id與所述信號值表中的信號值一一對應;當所述原始待壓縮數字波形存在多個時鐘域時,采用預先設置的多時鐘域分割算法對每一所述時間戳按照對應的時鐘周期進行劃分,得到多個時鐘域;根據所述輔助信息和每一時鐘域對應的時間戳表、id表和信號值表,對所述原始待壓縮數字波形進行重組,得到重組后的待壓縮數字波形;采用字典壓縮算法壓縮所述重組后的待壓縮數字波形。2.根據權利要求1所述的方法,其特征在于,所述分別根據每一跳變塊中的時間戳、多個信號id和多個信號值,得到所述原始待壓縮數字波形對應的時間戳表、id表和信號值表包括:根據每一跳變塊中的時間戳,得到時間戳表;所述時間戳表包括按從小到大的順序逐行存放的時間戳;根據每一跳變塊中的多個信號id,得到id表;所述id表包括按所述原始待壓縮數字波形中的信號id順序存放的信號id;所述信號id按照所屬的跳變塊分組存放,每組信號id之間用空行隔開;根據每一跳變塊中的多個信號值,得到信號值表;所述信號值表包括按所述原始待壓縮數字波形中的信號值順序存放的信號值。3.根據權利要求2所述的方法,其特征在于,所述方法還包括:將所述信號值表中的每一信號值按信號值對應的信號id分類,得到以id為鍵值的值鏈表。4.根據權利要求2所述的方法,其特征在于,所述方法還包括:將所述時間戳表中第一個時間戳表示為絕對時間,排在所述絕對時間后的時間戳表示為時間增量;所述時間增量的字符長度小于所述絕對時間的字符長度。5.根據權利要求1所述的方法,其特征在于,所述多時鐘域分割算法包括:獲取所述時間戳對應的時間戳集合;將所述時間戳集合中的時間戳兩兩作差,得到候選時鐘周期;將每一所述候選時鐘周期分別與多個時間戳進行匹配,得到多個時鐘周期;根據所述時鐘周期對每一所述時間戳進行劃分,得到多個時鐘域。6.根據權利要求5所述的方法,其特征在于,所述將每一所述候選時鐘周期分別與多個時間戳進行匹配,得到多個時鐘周期包括:將每一所述候選時鐘周期分別與多個時間戳相加,若相加后得到的和在所述時間戳集合中,則所述候選時鐘周期與對應的時間戳匹配成功;根據匹配次數最多的多個所述候選時鐘周期,得到多個時鐘周期。7.根據權利要求5所述的方法,其特征在于,所述多時鐘域分割算法還包括:將不屬于所述多個時鐘域的時間戳劃分到雜項時鐘域。
8.根據權利要求1所述的方法,其特征在于,所述字典壓縮算法包括lzma2。9.一種基于字典壓縮算法的數字波形壓縮裝置,其特征在于,所述裝置包括:波形解析模塊,用于解析原始待壓縮數字波形的結構,得到輔助信息以及所述原始待壓縮數字波形的每一跳變塊中的時間戳、多個信號id和多個信號值;數據分離模塊,用于分別根據每一跳變塊中的時間戳、多個信號id和多個信號值,得到所述原始待壓縮數字波形對應的時間戳表、id表和信號值表;所述時間戳表中的時間戳對應于所述id表中的一組信號id;所述id表中的信號id與所述信號值表中的信號值一一對應;多時鐘域分割模塊,用于當所述原始待壓縮數字波形存在多個時鐘域時,采用預先設置的多時鐘域分割算法對每一所述時間戳按照對應的時鐘周期進行劃分,得到多個時鐘域;重組模塊,用于根據所述輔助信息和每一時鐘域對應的時間戳表、id表和信號值表,對所述原始待壓縮數字波形進行重組,得到重組后的待壓縮數字波形;字典壓縮模塊,用于采用字典壓縮算法壓縮所述重組后的待壓縮數字波形。10.一種計算機設備,包括存儲器和處理器,所述存儲器存儲有計算機程序,其特征在于,所述處理器執行所述計算機程序時實現權利要求1至8中任一項所述方法的步驟。
技術總結
本申請涉及一種基于字典壓縮算法的數字波形壓縮方法、裝置和設備。所述方法包括:解析原始待壓縮數字波形的結構,得到輔助信息和所述原始待壓縮數字波形的每一跳變塊中的時間戳、多個信號id和多個信號值;根據待壓縮數字波形的時間戳對待壓縮數字波形進行分割處理,得到多個時鐘域以及每一時鐘域對應的時鐘周期;分別根據待壓縮數字波形的每一跳變塊中的時間戳、信號id和信號值,得到屬于每一時鐘域的時間戳表、id表和信號值表;根據輔助信息和多個時鐘域,得到重組后的待壓縮數字波形;采用字典壓縮算法壓縮重組后的待壓縮數字波形。采用本方法能夠在更短的壓縮、解壓縮耗時下提高數字波形壓縮的壓縮率,并保持波形精度。并保持波形精度。并保持波形精度。
