基于CPLD+DSP的實(shí)時(shí)數字圖像穩定系統
SAA7110的初始化通過(guò)I2C總線(xiàn)對其內部控制寄存器進(jìn)行相應設置而實(shí)現,該系統將DSP上的McBSP(多通道緩沖串口)的兩個(gè)引腳與SCL和SDA相連,將McBSP的引腳配置成通用I/O口,這樣就能通過(guò)編寫(xiě)DSP程序,在上電時(shí)通過(guò)DSP的多通道緩沖串口配置SAA7110。
3.2 數據位拼接
由于SAA7110和BT121都是8 bit精度器件,而雙口RAM的每邊都是36 bit精度的存儲器,但雙口RAM的4個(gè)BANK通道,每個(gè)BANK各9 bit,共36 bit數據,可通過(guò)BEO~BE3信號選通,因此只有將SAA7110和BT121的8 bit數據進(jìn)行拼接后才能送到雙口RAM。由于雙口RAM的每個(gè)BANK都是9 bit,SAA7110和BT121的8 bit數據總線(xiàn)接在每個(gè)BANK的低8 bit,忽略最高位第9位,直接地,形成8 bit的數據精度,完成不同數據精度位器件間的握手。
3.3 數據輸出
處理完的圖像數據,經(jīng)D/A轉換器BT121進(jìn)行數模轉換后,送到顯示器,這個(gè)過(guò)程必須在嚴格的同步時(shí)鐘控制下進(jìn)行。SAA7110給出的同步信號包括水平同步、垂直同步、奇偶場(chǎng)和采樣時(shí)鐘,而B(niǎo)T121的同步信號只有空白信號(BLANK)、合成信號(SYNC)和轉換時(shí)鐘。當BLANK信號為1時(shí),BT121才進(jìn)行D/A轉換,SYNC信號為1時(shí)才打開(kāi)D/A通道。所以,2個(gè)器件間的同步信號不能直接握手,必須經(jīng)過(guò)一定的邏輯轉換。S-AA7110的同步信號引腳接到CPLD,由CPLD經(jīng)過(guò)一定的邏輯運算后,送出符合BT121同步要求的信號。
4 系統工作方法和優(yōu)化配置
4.1 系統工作方式
系統上電后,DSP從Flash讀入1 K大小的程序數據,該引導程序繼續將其他主程序調入SDRAM中,在以后的運行過(guò)程中,DSP自動(dòng)將運行所需程序從SDRAM裝入片內存儲器。同時(shí)89C5l單片機對SAA7110進(jìn)行初始化。當DSP準備就緒后,通知CPLD開(kāi)始控制向輸入端雙端口RAM寫(xiě)入由S-AA7110采集的視頻圖像數據。輸入緩存的存儲空間分為奇、偶場(chǎng)空間,寫(xiě)滿(mǎn)一場(chǎng)后向DSP發(fā)送中斷信號,DSP收到該中斷信號后以EDMA方式將數據讀入SDRAM等待處理。在DSP讀走和處理該部分數據時(shí),CPLD繼續控制向輸入緩存的另一部分空間寫(xiě)入下一場(chǎng)采樣數據。當DSP處理完上一場(chǎng)數據后,等待下一場(chǎng)視頻數據的寫(xiě)滿(mǎn)信號。采用雙端口RAM作為系統的輸入輸出緩存,有效地避免了讀寫(xiě)訪(fǎng)問(wèn)沖突和系統總線(xiàn)的沖突,極大提高了系統的執行效率。
4.2 配置L2 Cache和Memory的比例
由于片內RAM與CPU工作在同一時(shí)鐘頻率,比片外RAM性能高得多。C64的兩級緩存機構工作特點(diǎn)為:片內分為兩級存儲結構(L1和L2),L1不能設置為映射寄存器。L1又分為L(cháng)1P和L1D,L1D指的是第1級的數據緩沖,為128 K字節的兩路成組相連結構緩存。L2是第2級片內緩存,大小為l 024 K(可同時(shí)存儲程序和數據)。L1P和L1D都可以對L2進(jìn)行存取,當L1D或L1P中沒(méi)有運行所需要的數據時(shí)(即產(chǎn)生cache miss時(shí)),首先向L2發(fā)出申請,當L2中也發(fā)生cache miss時(shí),將申請轉發(fā)給EDMA。申請的轉發(fā)將嚴重影響系統運行效率。所以根據算法數據流特性配置好兩極緩存的大小,預先將待處理的數據讀入,降低cache miss的次數以提高系統實(shí)時(shí)性。
以塊匹配運動(dòng)估計為例,匹配塊32×32 pixel=1 K字節,加上旋轉角度范圍:±7°,步長(cháng)為O.2°,共產(chǎn)生70個(gè)旋轉1 K的小圖像;搜索窗為96×96 pixel=9 K字節,共10 K字節,所有待進(jìn)行運動(dòng)估計的圖像數據為80 K,完全可以讀入L2Cache。這些數據可以用ODMA將數據全部讀入片內L2。而這些數據是從一幀完整的圖像中“扣出”的,所以搬移方式采用2D-1D的方式,QDMA支持這種高效的數據傳輸能方法。
4.3 基于EDMA加快數據傳輸
當使用雙緩沖結構的時(shí)候,EDMA是另一種去除多余CPU開(kāi)銷(xiāo)的重要機制。利用EDMA,可實(shí)現片內存儲器(L2SRAM)、片內外設,以及外部空間之間的數據轉移。合理利用EDMA,還可以提高程序性能,由于圖像處理中的數據對象通常以8 bit為一單位,利用DMA的數據交織功能把來(lái)自圖像不同區域的4個(gè)數據并接為一個(gè)32位數據,大幅度地提高效率。
系統采用“乒乓”結構的數據交換,所以奇場(chǎng)和偶場(chǎng)的起始信號觸發(fā)EDMA通道中斷,雖然傳送數據的源地址相同,但目的地址卻不同。而C64的EDMA控制器提供了一種稱(chēng)為連接(linking)的傳輸機制,可以將不同的傳輸參數組連接起來(lái),組成一個(gè)傳輸鏈,為同一通道服務(wù)。在鏈中,一個(gè)傳輸結束后,自動(dòng)裝載下一次傳輸所需要的事件參數。根據這個(gè)特點(diǎn),為每個(gè)EDMA通道配置兩組參數,用連接的方式完成“乒
乓”結構的數據讀寫(xiě)。
5 算法程序優(yōu)化
由于圖像處理的數據量大,數據處理相關(guān)性高,并且具有嚴格的幀、場(chǎng)時(shí)間限制,因此如何針對圖像處理的特點(diǎn)對DSP進(jìn)行優(yōu)化編程,充分發(fā)揮其性能就成為提高整個(gè)系統性能的關(guān)鍵。主要在下面方面的優(yōu)化方法提高C代碼的性能:
1)使用內聯(lián)函數 C6000編譯器提供的內聯(lián)函數(intrinsic functions)。內聯(lián)函數是直接映射為內聯(lián)的C6000指令的特殊函數,可以快速優(yōu)化C代碼。
2)使用字訪(fǎng)問(wèn)短型數據 C6000的內聯(lián)函數中的某些指令,如_add2()是對存儲在32位寄存器的高16位和低16位字段進(jìn)行操作。當對一連串短型數據進(jìn)行操作時(shí),可使用字(整型)一次訪(fǎng)問(wèn)2個(gè)短型數據,減少對內存的訪(fǎng)問(wèn)次數。
3)人工干預軟件流水 流水是用來(lái)安排循環(huán)指令,并使這個(gè)循環(huán)的多次疊代并行執行的一種技術(shù),通過(guò)線(xiàn)性匯編指令,并行處理數據處理指令。
通過(guò)以上3種方法優(yōu)化,程序執行效率提高70%以上,表1中列出各種算法速度做50次運算的平均值。本文引用地址:http://dyxdggzs.com/article/191588.htm
實(shí)際上,在程序優(yōu)化方面,還有很多的工作可作。另外,本實(shí)驗室前期開(kāi)發(fā)的基于TMS320C6711型DSP的圖像開(kāi)發(fā)板,工作頻率在200 MHz,優(yōu)化后對256×256大小的圖像進(jìn)行10~13幀/s的圖像穩定,尚不能達到實(shí)時(shí)。而基于TMS320C6416的處理板,不優(yōu)化就能達到18~22幀/s的處理速度,經(jīng)過(guò)簡(jiǎn)單優(yōu)化后,如提前進(jìn)行圖像塊旋轉并讀入片內,展開(kāi)循環(huán),就能達到30幀/s的實(shí)時(shí)處理?,F已移植的算法包括:基于快速搜索的塊匹配法、灰度級分層法、邊緣匹配法,各種算法都完全能夠進(jìn)行實(shí)時(shí)運行。
6 結論
該系統通過(guò)選用CPLD+DSP,既能保證系統的執行速度,也能保證可靠的邏輯控制。該系統實(shí)現一個(gè)比較完整的圖像采集、傳輸、處理和送顯的硬件實(shí)驗系統,由CPLD對系統的運行邏輯進(jìn)行控制,通過(guò)對編寫(xiě)在DSP上運行的圖像處理程序進(jìn)行優(yōu)化后,能夠實(shí)現大小為512×512像素圖像的實(shí)時(shí)穩定。該穩像系統作為一個(gè)獨立的圖像處理系統,可完成多方面的圖像處理功能,也為其他基于DSP的圖像處理平臺的設計提供了參考。
評論