基于NiosⅡ軟核的嵌入式多路視頻點(diǎn)播系統
VOD(視頻點(diǎn)播)技術(shù)為人們提供了一種交互式的信息獲取方式,并隨著(zhù)技術(shù)的完善不斷擴展著(zhù)其應用范圍和影響力。傳統的VOD系統主要是以服務(wù)器作為視頻的信息源,通過(guò)局域網(wǎng)進(jìn)行點(diǎn)播,適合服務(wù)于住宅小區或公營(yíng)機構。而對于缺乏網(wǎng)絡(luò )支持、移動(dòng)性較強的環(huán)境,如公共交通工具,傳統的VOD系統顯然難以實(shí)現。
本文針對特定的用戶(hù)環(huán)境,提出采用Altera的SOPC(片上可編程系統)解決方案,利用NiosⅡ軟核處理器和FPGA(現場(chǎng)可編程門(mén)陣列)配置靈活、IP資源豐富、硬件設計和軟件編程方便的特點(diǎn),通過(guò)擴展IDE(集成開(kāi)發(fā)環(huán)境)接口,以硬盤(pán)作為存儲媒介,實(shí)現多路VOD系統的設計方案。該系統體積小、成本相對低廉,體現了嵌入式電子產(chǎn)品的優(yōu)勢。與傳統的VOD系統相比,使用范圍更具針對性,裝配更靈活,升級擴展更方便,具有很廣闊的前景。
1 系統功能劃分
該系統從功能上可劃分為系統控制核心、多路視頻數據讀取單元、視頻解碼模塊和用戶(hù)點(diǎn)播終端4個(gè)部分。
1.1 系統控制核心
系統以NiosⅡ軟核為控制核心,主要負責硬盤(pán)初始化、提取視頻節目簇鏈、生成節目列表、人機交互控制等工作。上電后,NiosⅡ控制器先初始化硬盤(pán)的傳輸模式和讀寫(xiě)狀態(tài),然后讀取主引導記錄,尋址到基本分區的操作系統引導記錄區,計算保留扇區和FAT(文件分配表)大小,分別得到FAT和根目錄的入口。對目錄樹(shù)上的文件進(jìn)行分析后,提取出視頻文件的文件名、文件首簇,根據首簇指針再次查找FAT,追溯出文件的簇鏈,最后燒寫(xiě)到Flash存儲器中。完成以上工作后,初始化中斷,對用戶(hù)端進(jìn)行輪詢(xún),等待用戶(hù)請求,分析用戶(hù)指令包,作出相應響應。
1.2 多路視頻數據讀取
為實(shí)現海量視頻數據的存取,該系統需外擴展硬盤(pán)作為存儲介質(zhì)。通過(guò)用戶(hù)自定義的硬盤(pán)DMA(直接存儲器存取)控制模塊實(shí)現對硬盤(pán)數據的讀寫(xiě),功能包括為上層程序提供控制硬盤(pán)和多路數據輸出的接口,產(chǎn)生硬盤(pán)DMA操作狀態(tài)機信號。數據從硬盤(pán)讀出后,以乒乓操作的方式交替存儲在兩片SRAM中,內存中的數據按照對應的輸出端口并行排列。同時(shí),根據用戶(hù)終端提出的點(diǎn)播需求,數據往點(diǎn)播端口扇出。
1.3 視頻解碼
本系統采用外擴展的視頻解碼板作為硬解碼模塊。解碼芯片是LSI LOGIC公司CL680視頻CDMPEG 1音頻/視頻解碼器。該芯片以CL480/484架構為基礎,用于MPEG-1音頻/視頻解碼,整合數字NTSC/PAL編碼功能和加強KTV功能。
1.4 用戶(hù)點(diǎn)播終端
為解決多用戶(hù)終端遠距離通信的問(wèn)題,系統采用RS-485收發(fā)器作為主機與用戶(hù)點(diǎn)播終端的連接橋梁。RS-485收發(fā)器采用平衡發(fā)送和差分接收,具有抑制共模干擾的能力,加上接收器的高靈敏度,能檢測低達200 mV的電壓,極大地提高信號傳播的可靠性。
主機與終端間的通信方式采用類(lèi)似令牌總線(xiàn)的通信協(xié)議。主機不斷發(fā)出查詢(xún)包,收到查詢(xún)包的客戶(hù)端被賦予發(fā)送控制命令的權限,客戶(hù)端可選擇發(fā)送命令或直接丟棄查詢(xún)包,這樣就避免了多個(gè)客戶(hù)端同時(shí)向總線(xiàn)發(fā)送數據、導致通信失敗的情況。
系統采用MB90092視頻字符疊加模塊,在用戶(hù)終端屏幕中疊加功能菜單,建立友好的用戶(hù)操作界面,用戶(hù)可通過(guò)控制面板進(jìn)行點(diǎn)播操作。
2 系統設計
2.1 系統硬件結構
系統硬件結構如圖1所示。
![]() |
為實(shí)現對硬盤(pán)的控制及兩片內存的乒乓控制,系統使用了定制的DMA控制模塊,通過(guò)SOPC Builder軟件,以用戶(hù)邏輯形式掛到Avalon總線(xiàn)上。
2.1.1 DMA控制模塊
DMA控制模塊框圖如圖2所示。
![]() |
DMA控制模塊主要功能是控制硬盤(pán)進(jìn)行多路視頻數據的并發(fā)傳輸。為保證視頻質(zhì)量,需考慮到數據讀寫(xiě)速度的提高。本系統采用按照ATA/ATAPI-6協(xié)議編寫(xiě)的DMA模塊,控制置硬盤(pán)以Ultra-DMA方式傳輸數據,可實(shí)現最大傳輸速率為66 Mbit/s,滿(mǎn)足多路MPEG-1視頻碼流的并發(fā)傳輸。除了解決傳輸速率問(wèn)題,該系統涉及到同時(shí)處理多路數據的讀寫(xiě),因此引入相應的功能子模塊,以乒乓操作的方式控制兩片SRAM的讀寫(xiě),并對多路數據的存儲分區進(jìn)行地址管理。
模塊的主要子模塊有DMA控制器、DMA狀態(tài)機、switch和SRAM控制器。
DMA控制器作為Avalon總線(xiàn)與硬盤(pán)的接口,主要功能是接收上層程序的控制命令,再對硬盤(pán)的控制寄存器進(jìn)行讀寫(xiě),在NiosⅡ程序的控制下將硬盤(pán)的傳送模式設置為Ultra-DMA模式進(jìn)行數據傳輸。
DMA狀態(tài)機模塊是根據T13小組發(fā)布ATA(ATA/ATAPI-6)文檔為設計標準,用Verilog HDL(硬件描述語(yǔ)言)實(shí)現的有限狀態(tài)機。在控制終端的設置下傳輸方式轉為Ultra-DMA模式后,硬盤(pán)向控制器發(fā)出DMA請求,此時(shí)DMA狀態(tài)機啟動(dòng)。主機端向硬盤(pán)發(fā)送響應信號,握于成功,解除DMA STOP狀態(tài),同時(shí)使IDE_HDMARDY有效表示主控端已準備好。接著(zhù),數據流從硬盤(pán)流出,并發(fā)出一雙沿鎖存信號,SRAM控制器在該信號控制下將數據鎖存入內存。直到DMA請求結束,STOP信號生效,DMA傳輸結束。整個(gè)過(guò)程遵守ATAPI-6協(xié)議,使用Verilog HDL描述出硬盤(pán)DMA傳輸過(guò)程的時(shí)序。
Switch和SRAM控制器模塊主要負責在DMA傳輸過(guò)程中在兩片SRAM間調度數據,從而實(shí)現數據的乒乓存取。Switch模塊用于完成兩塊RAM之間的切換及數據的分區存儲。它工作于兩個(gè)狀態(tài):以Flag為標志位,Flag為0時(shí)做寫(xiě)RAMl的操作;Flag為1時(shí)做寫(xiě)RAM2的操作。在DMA方式下,一次DMA讀取硬盤(pán)一個(gè)扇區剛好寫(xiě)滿(mǎn)一片RAM,Switch模塊掛起數據寫(xiě)入,等待中斷。當另一片RAM中的數據被全部讀出后中斷發(fā)生,此時(shí)Switch模塊交換兩片內存的讀寫(xiě)端口地址。
2.1.2 RAM分區讀寫(xiě)
由于系統要提供多路視頻的播放,因此,在進(jìn)行DMA傳輸的過(guò)程中需實(shí)現各路視頻數據的分區讀寫(xiě)。在寫(xiě)內存時(shí),采用雙時(shí)鐘控制機制。若要實(shí)現32路VOD系統,將一片512 k的RAM分為32個(gè)單元,每個(gè)單元長(cháng)度為16 k,定義RAM的地址為:wraddress2=wraddressl+wraddress
wraddressl為每個(gè)內存分區的基地址,它的取值分別是0 k,16 k,32 k,48 k,…,496 k,另外是一個(gè)偏移地址wraddress。內存分區方式如圖3所示。
定義時(shí)鐘C0為寫(xiě)內存分區時(shí)鐘,C1為寫(xiě)內存偏移時(shí)鐘,C0的頻率為寫(xiě)C1的32倍。當偏移地址為某一值時(shí),權值地址的取值會(huì )從0 k~496 k遍歷一次,即每一內存單元讀寫(xiě)周期,寫(xiě)入每個(gè)分區的一個(gè)單元。
![]() |
同樣,對內存中的數據也要分區讀出并送往相應端口。該模塊使用一種內存地址的計數方法:將地址線(xiàn)的長(cháng)度設置為10位,再將低5位的地址和高5位的地址互換,目的是從高5位開(kāi)始計數,計數滿(mǎn)了進(jìn)位到低5位。高5位表示分區地址,低5位為分區的偏移地址,地址從第6位開(kāi)始累加,剛好遍歷32個(gè)分區,完成高5位的依次累加后,進(jìn)位到低5位的分區偏移地址,表示開(kāi)始讀下一輪分區的第2個(gè)內存單元。如此類(lèi)推。根據計算出的地址可實(shí)現對各分區的數據依次讀取。地址算法示意圖如圖4所示。
![]() |
2.1.3 移位輸出模塊
該模塊主要實(shí)現的功能是:在分路時(shí)鐘的控制下,將從內存中讀出的多路數據移位輸出。該模塊定義了一組長(cháng)度為16位的移位寄存器。數據I/O讀寫(xiě)的時(shí)間和速度由video_clock確定,video_clock的頻率是12.5 MHz,負責控制SRAM_R控制器,移位輸出模塊和視頻解碼板的同步。模塊中還設置了一個(gè)累加計數器div3,工作頻率與video_clock相同。當SRAM_R控制器依次將各路視頻文件讀人一個(gè)寄存器后,每一個(gè)時(shí)鐘下降沿到來(lái)時(shí)移出1位,直至全部移出。若加大時(shí)鐘頻率和緩沖內存空間,可以增加移位寄存器的數目,從而增加視頻輸出端口的數量,實(shí)現系統點(diǎn)播路數的增加。
2.2 系統軟件工作流程
系統程序劃分為主機程序和點(diǎn)播終端兩大部分。主機程序主要實(shí)現3個(gè)功能:管理硬盤(pán),提取簇鏈;播放節目,點(diǎn)播控制;響應請求,串口中斷。管理硬盤(pán)的方式主要是通過(guò)自定義的DMA控制模塊對硬盤(pán)的控制寄存器進(jìn)行操作,驅動(dòng)硬盤(pán)后訪(fǎng)問(wèn)FAT32文件系統下的相應扇區,追朔簇鏈,將簇鏈提取出來(lái)寫(xiě)入到Flash ROM中,為播放做準備。點(diǎn)播端程序則主要負責生成指令包。本系統軟件工作流程如圖5所示。
![]() |
本系統要處理多路視頻數據,并且視頻信號數據量大,在點(diǎn)播過(guò)程中系統必須集中大部分處理器時(shí)間來(lái)處理各路視頻信號,而視頻文件的文件名和簇鏈結構必須通過(guò)相對低速的PIO操作來(lái)獲得。為了解決簇鏈讀取速度的瓶頸,本文設計了適合本系統應用的數據結構來(lái)優(yōu)化對數據的管理,加快讀取速度。定義的數據結構有:
![]() |
客戶(hù)端的狀態(tài)和播放進(jìn)度也由專(zhuān)門(mén)的結構體來(lái)記錄和管理。定義的數據結構有:
![]() |
3 結束語(yǔ)
SOPC=NiosⅡ軟核+FPGA這個(gè)創(chuàng )新的概念為嵌入式設計帶來(lái)的極大的便利和靈活性。利用強大的SOPC開(kāi)發(fā)平臺和豐富的IP資源,可大量縮短系統設計周期,而且系統的改進(jìn)也變得十分方便。本文提出的通過(guò)把用戶(hù)自定義的硬盤(pán)讀寫(xiě)模塊整合到SOPC平臺上,與NiosⅡ無(wú)縫接合,成功實(shí)現了多路視頻數據的并發(fā)點(diǎn)播。
評論