基于DSP的實(shí)時(shí)數據無(wú)損壓縮實(shí)現方案
數據壓縮技術(shù)能減少傳輸所用的時(shí)間和存儲空間,在有限的信道容量?jì)葌鬏敻嗟挠杏眯畔?,有助于降低功率和帶寬要求,改善通信效率。反之,如果不進(jìn)行數據壓縮,則無(wú)論傳輸或存儲都很難實(shí)用化[1]。
本文引用地址:http://dyxdggzs.com/article/257508.htm1 硬件及實(shí)現原理
結合本設計的實(shí)際情況,由于壓縮算法比較復雜,計算量大,在壓縮數據時(shí)必須采用浮點(diǎn)型運算。另一方面,由于處理精度要求高,所以需要選擇浮點(diǎn)型DSP?;谏鲜隹紤],選用TI公司的一款性?xún)r(jià)比非常高的浮點(diǎn)芯片TMS320C6713。其主頻225MHz,每周期執行8條32bit指令,最高定點(diǎn)運算能力為 1800MIPS,浮點(diǎn)運算能力為1350MFLOPS,32位指令集,而且內部自帶256KB的RAM,4KB程序緩沖器和4KB的數據緩沖器,可以通過(guò)外部存儲器接口EMIF(External Memory Inter Faces)擴展SDRAM和Flash[2]。在本設計中,對原始數據按照每2 048B為一組進(jìn)行壓縮。壓縮的最小單位是2 048B,且壓縮率不固定,對于某組特定數據壓縮后可能比原來(lái)的數據還要大。壓縮前后的數據都需要放到DSP的RAM中進(jìn)行處理,其256KB的RAM不能滿(mǎn)足本設計存儲要求,需要通過(guò)EMIF擴展存儲空間。SDRAM選用Micron公司的MT48LC2M32B2。其數據總線(xiàn)為32位,存儲空間為 64Mbit。工作電壓為3.3V,內部流水線(xiàn)結構保證了芯片的高速運行。SDRAM可以與EMIF無(wú)縫接口。EMIF的CE0連入片選引腳CS,將 SDRAM映射到CE0地址空間(0x80000000-0x80800000)。Flash是系統在斷電后用來(lái)保存程序和初始化數據的存儲器,系統上電時(shí),由引導程序將DSP的應用程序從該存儲器引導到系統的高速存儲器RAM中。本設計用AMD公司生產(chǎn)的1M×8bit/512K×16bit AM29LV800-70 Flash存儲器,其數據寬度為8位、16位可選,采用3.3V供電,訪(fǎng)問(wèn)時(shí)間僅70ns。EMIF的CE1連入片選引腳CE,將Flash映射到CE1 地址空間地址范圍為0x90000000~0x90100000,尋址空間為1MB[3]。
通常在高速數據采集系統中,數據處理速度及數據傳輸速度與前端A/D轉換器的采集速度不一致。為了協(xié)調它們之間工作,可以加入數據存儲器或者數據緩存器(FIFO)進(jìn)行數據緩沖,使得前端數據采集和后級數據處理能夠協(xié)調工作。在本設計中,前端的采樣速度為27Kb/s;且數據流是連續的。DSP的主頻為 225MHz,經(jīng)過(guò)鎖向環(huán)分頻后其讀取數據的速度為38Mb/s左右。DSP若一直等待讀數據,會(huì )大大降低其數據的處理能力。DSP讀入數據后,馬上對數據進(jìn)行壓縮,壓縮后把相應的數據寫(xiě)到輸出FIFO。同理,發(fā)送模塊的處理速度為18Kb/s。DSP寫(xiě)輸出FIFO的速度也在38Mb/s左右。顯然,前端與DSP及DSP與發(fā)送模塊的處理速度不是一個(gè)數量級。所以在前端與DSP之間,DSP與發(fā)送模塊間分別加了兩個(gè)FIFO。本設計中FIFO1、 FIFO2均選用IDT72V19160,其存儲空間為128KB,16位并行數據總線(xiàn),可達到100MHz的操作時(shí)鐘。原理框圖如圖1所示。
前端通過(guò)16位數據總線(xiàn)將數據寫(xiě)入到輸入FIFO1中。在程序中通過(guò)控制其半滿(mǎn)(HF)信號,即當數據超過(guò)32KB時(shí)(32768+1), HF信號低電平有效,就會(huì )觸發(fā)一次中斷通知可編程邏輯和DSP,DSP進(jìn)入中斷后把2KB的數據從輸入FIFO1中讀入到SBUF所指向的SDRAM空間中,在進(jìn)行高速壓縮以后,被壓縮的數據放到DBUF中。SBUF的數據要與DBUF的數據進(jìn)行比較,若DBUF中存儲數據的容量小于SBUF中的存儲數據的容量,就把DBUF中相應的數據寫(xiě)到DSP的軟FIFO中,否則,就把SBUF中相應的數據寫(xiě)到DSP的軟FIFO中。最終,DSP把壓縮后的數據通過(guò)其軟FIFO寫(xiě)入到輸出FIFO2中,等待發(fā)送模塊把數據讀走。
在上述過(guò)程中,如果DSP沒(méi)有等待到中斷信號,則返回繼續等待,直到檢測到中斷信號,才讀取FIFO1中的數據。在DSP對SBUF中的數據幀壓縮的同時(shí),前端以固定的采樣率對模擬信號進(jìn)行采樣,并寫(xiě)入到輸入FIFO1中。同時(shí)DSP把壓縮后的數據按每次小于2KB左右的速度寫(xiě)入到輸出FIFO2。當輸出FIFO2半滿(mǎn),發(fā)送模塊控制器會(huì )把其HF信號通過(guò)GPIO口指向DSP。本設計中用GP10實(shí)現相應的操作。DSP的GPIO口可以設為輸入引腳,在中斷向量表中定義后,其本身可以當作中斷使用。這樣DSP可以把采集到的實(shí)時(shí)數據源源不斷地寫(xiě)入到FIFO2。整個(gè)信號處理模塊的不同子模塊都處于并行工作狀態(tài),較好地實(shí)現了數據的實(shí)時(shí)壓縮,提高了壓縮效率。
設備上電DSP復位后,由其內部固化的自引導程序(BOOT)將存于Flash存儲器的程序和數據搬移至內部 RAM中,然后DSP即可以開(kāi)始讀取壓縮算法的應用程序,繼續運行。DSP的工作流程圖如圖2所示。上電以后,首先初始化DSP的CSL函數庫,然后初始化PLL、GPIO及關(guān)中斷寄存器,等待中斷信號的來(lái)臨。
評論