《電子技術應用》
您所在的位置:首頁 > MEMS|傳感技術 > 設計應用 > 基于Nios II的多功能數碼相框
基于Nios II的多功能數碼相框
來源:電子技術應用2012年第3期
張 玲,高 湛,林英撐,何 偉
重慶大學 通信工程學院,重慶400044
摘要: 介紹了基于Nios II 的多功能數碼相框的實現。系統(tǒng)基于Nios II處理器,設計用戶自定義模塊,構建了靈活性高、可重配置的SoPC系統(tǒng)。設計自定義模塊控制LCM顯示;采用流水線方式設計JPEG解碼自定義模塊以提高解碼效率;根據SD協議設計SD卡控制器擴展SD卡。實現了FAT16文件系統(tǒng),便于對SD卡進行文件管理及多平臺上的數據交換,并使用μC/OS-II操作系統(tǒng)簡化軟件設計復雜度、提高系統(tǒng)穩(wěn)定性。最終實現可播放音頻并能顯示、縮放、旋轉圖像且?guī)в袌D像切換特效的多功能數碼相框。
中圖分類號: TP335.3
文獻標識碼: A
文章編號: 0258-7998(2012)03-0016-04
The digital photo frame based on Nios II
Zhang Ling,Gao Zhan,Lin Yingcheng,He Wei
College of Communication Engineering, Chongqing University, Chongqing 400044,China
Abstract: The multifunction digital photo frame introduced in this paper is based on the technique of Nios II. The system, based on Nios II CPU,the SoPC system with reconfigurability and high flexibility has been customized by taking advantages of the soft-core features of Nios II CPU and custom modules. Custom modules have been designed for display controlling, JPEG decoder with pipeline have been designed for higher decoding efficiency, and the SD card controller based on SD protocol has been designed for supporting SD cards. FAT16 file system has been achieved for file managing and convenience to change data with other platforms. μC/OS-II operating system has been embedded for simplifying system software design and improving stability of the system. A multifunction digital photo frame with function of audio playing, and displaying, zooming, rotating and switching effects of photos has been achieved.
Key words : Nios II CPU;SoPC;JPEG decoding;operating system;file system;custom module

    數碼相框作為一種數碼消費品和裝飾品的結合物,在市場上受到越來越多的關注。目前的數碼相框方案多采用MCU為核心的架構,相框功能固定,不便于產品升級。針對以上問題,本文設計了基于Nios II的多功能數碼相框,該相冊主要包含以下功能:支持包括BMP、JPEG在內的多種常見文件格式的圖像顯示;圖像旋轉、縮放、瀏覽切換等特效;支持圖片瀏覽時背景音樂播放;可通過帶FAT文件系統(tǒng)的SD卡進行圖像數據更新,同時還具有時間顯示等擴展功能。系統(tǒng)中將需要耗費大量時間的復雜操作(如圖像解碼、圖像的各種特效功能以及SD卡控制)用掛載在Avalon總線上的自定義模塊實現??s短了處理時間,提高了系統(tǒng)響應速度。系統(tǒng)采用基于Nios II處理器的SoPC技術,使得該數碼相框具有靈活性高、可重配置、便于升級等優(yōu)點[1]。

1 總體設計
    本系統(tǒng)采用經濟型的Cyclone II FPGA芯片作為核心,基于Nios II軟核處理器,采用軟硬件結合的方式設計實現。系統(tǒng)的硬件總體框圖如圖1所示。

    SD卡作為文件存儲介質,用于存放音頻與圖像文件,編寫SD卡控制器對SD卡進行讀寫控制;采用LCM顯示屏作為數碼相框的顯示界面,SRAM作為LCM的顯示緩存,存儲圖像數據供LCM刷新,并由LCM_SRAM IP核控制圖像的顯示;SDRAM為Nios II軟核程序運行空間;EPCS對FPGA進行配置;Flash用來存儲軟件代碼和數據。
2 功能模塊設計
    根據數碼相框所要實現的功能,設計了如下模塊:
2.1 LCM_SRAM IP核設計
    該模塊主要功能是圖像數據存儲、LCM參數配置以及圖像的縮放、旋轉、切換效果控制等。以硬件方式實現圖像切換效果,提高實時性的同時降低對CPU的依賴。
2.1.1 切換特效實現
    設計中通過控制LCM讀取SRAM的地址實現不同的圖像切換效果,如上方切入、下方切入、百葉窗、菱形等八種方式循環(huán)出現。切換時,LCM上同時存在新舊兩幅圖像的數據,因此,緩存中需要存儲這兩幅圖像的數據。以百葉窗效果為例,每行以16個像素作為間隔,將LCM的每一行分割成20個條形區(qū)域。如圖2所示,第i行被分割后,第一個區(qū)域的像素點為n1~n16,最后一個區(qū)域為m1~m16。每個條形區(qū)域中,新圖像的數據逐漸向右覆蓋舊圖像數據,從而形成百葉窗效果。具體實現過程為:在第一次刷新時,每行的各個條形區(qū)域的第一個像素點(n1,…,m1)讀取新圖像的數據,各區(qū)域其他像素點(n2~n16,…,m2~m16)仍然讀取舊圖像的數據;第二次刷新時,每行各個條形區(qū)域的前兩個像素點(n1、n2,…,m1、m2)讀取新圖像數據,其他像素點(n3~n16,…,m3~m16)仍讀取舊圖像的數據。屏幕刷新16次則可實現百葉窗切換效果。圖2中每個圓點代表顯示屏的一個像素點。

2.1.2 縮放算法實現
    為實現圖像縮放功能,該模塊實現了如圖3所示的雙線性插值縮放算法。該算法利用了需要處理的原始圖像像素點周圍的4個像素點的相關性,通過雙線性算法計算實現圖像縮放[2]。設計中使用SRAM作為顯示緩存,無嚴格的實時性要求,因此忽略了行場同步信號,簡化了模塊設計。

    緩存1模塊是待縮放圖像數據的緩存,存放來自SRAM中解碼后的RGB565數據。插值系數生成模塊的使能信號來自旋轉模塊或者按鍵輸入,由選擇器進行判斷,按鍵按下時,按照設定的行列縮放因子計算行列插值系數;若使能信號來自旋轉模塊,則根據原始圖像的分辨率計算出旋轉過后的分辨率,并按照屏幕尺寸確定完整顯示該圖像能達到的最大分辨率,以此計算行列縮放因子。獲取相鄰像素模塊用來控制緩存1模塊的讀地址,從SRAM中讀取相鄰4個像素值。插值運算單元根據相鄰4個像素的值及插值系數進行雙線性插值運算,并將數據輸出至緩存2,緩存2在SRAM空閑時將數據寫入SRAM中。
2.2 SD Card Controller IP核設計
    SD卡是一種基于半導體快閃記憶器的存儲設備,其數據傳送和物理規(guī)范由MMC發(fā)展而來。系統(tǒng)中將SD卡控制器設計成一個SPI模式的IP核,通過軟件驅動實現SD卡的基本讀寫操作,即不需要復雜的硬件電路又能得到比軟件模擬SPI的控制方式更快的讀寫速度。SD卡控制器結構圖如圖4所示。

2.2.1 功能模塊劃分
    主控模塊的端口與Avalon總線連接,用于緩存SD卡命令,并存儲扇區(qū)地址、待發(fā)送的數據到雙口RAM以及從中讀取數據等。初始化模塊完成對SD卡的初始化操作。命令生成模塊完成SD卡命令、參數、命令校驗值的發(fā)送和命令回執(zhí)的讀取以及數據的收發(fā)。串并、并串轉換模塊的主要作用是實現串并或者并串轉換[3]。
    使用Quartus II自帶的邏輯分析儀(SignalTap II工具)對SD卡控制管腳的信號量進行實時捕獲,驗證了設計的正確性[4]。
2.2.2 驅動設計
    SD卡控制器的驅動共設計了4個接口函數,分別完成初始化、讀扇區(qū)、寫扇區(qū)和執(zhí)行SD命令的功能。驅動程序在初始化SD卡時得到卡類型標志,之后驅動程序根據卡類型對地址參數進行處理(若是SD1.1協議則地址左移9位,否則不變),以兼容SD1.1和SD2.0協議。讀數據函數核心代碼如下:
    if(sd_type == 1) addr=addr << 9; /*判斷地址偏移*/
    IOWR(SD_CARD_BASE, 517, CMD17); /*寫命令*/
    IOWR(SD_CARD_BASE, 518, addr); /*寫地址*/
    IOWR(SD_CARD_BASE, 519, 0); /*開始運行*/
    ret=IORD(SD_CARD_BASE, 519); /*讀命令回執(zhí)*/
    &hellip;
    for(i=0; i<512; i++)data[i]=IORD(SD_CARD_BASE, i);
/*讀回數據*/
    &hellip;
2.3 JPEG DECODER IP核設計
    JPEG(Joint Photographic Expert Group)是第一個適用于連續(xù)色調、多灰度、彩色或黑白靜止圖像的國際標準。為提高JPEG圖像的解碼效率,實現良好的解碼效果,本設計采用流水線結構設計JPEG解碼IP核。解碼模塊結構如圖5所示。

 

 

    輸入緩沖模塊從傳輸碼流中接收圖像數據,冗余處理后將數據輸出給頭文件解析模塊;頭文件解析完畢后,將數據輸出給熵解碼模塊;熵解碼模塊完成整個圖像數據的熵解碼處理,包括哈夫曼解碼、行程解碼和差分解碼,最終得到量化參數;反量化和反Z掃描模塊對熵解碼后的圖像數據進行反量化和排序;IDCT模塊采用經典的行列分解方法將頻域表示的數據流轉換成時域表示的數據流,將數據恢復到傳輸前的形式。色彩空間轉換模塊完成數據的內插和色彩空間轉換[5]。
    使用Modelsim對該IP核進行了仿真驗證,輸入一幅320&times;240的JPEG圖像原始數據。將解碼出的數據與軟件解碼出的數據進行比較,證明了JPEG解碼器解碼正確。
3 軟件設計
    利用SD卡控制器驅動的接口函數,在其讀寫的基礎上應用FAT16文件系統(tǒng),實現SD卡文件操作(如獲取目錄/文件信息、讀文件、刪除文件、創(chuàng)建文件、追加文件等)以便于與PC機及其他多媒體設備進行數據交換。設計中使用實時多任務嵌入式操作系統(tǒng)?滋C/OS-II,以降低系統(tǒng)軟件設計的復雜度和提高系統(tǒng)的穩(wěn)定性[6],并設計多個任務,實現SD卡初始化、文件讀取、數據流控制。
3.1 FAT16文件系統(tǒng)實現
3.1.1 讀文件

    文件系統(tǒng)中文件數據的存放是以簇為單位的,而SD卡的基本讀寫單位是扇區(qū),所以需要根據簇號計算相應的扇區(qū)號,由文件系統(tǒng)結構可得一般的計算公式為:
    起始扇區(qū)號=隱藏扇區(qū)數+保留扇區(qū)數+2&times;FAT表占用扇區(qū)數+FDT表占用扇區(qū)數+(起始簇號-2)&times;每簇扇區(qū)數
    從SD卡的數據扇區(qū)中讀取指定文件的核心代碼為:
    clunum = ffdt.fst_clu; /*獲取下一個簇號*/
    do{
    secnum = get_sta_sec(clunum);    /*由起始簇號獲得
起始扇區(qū)*/
    clunum = fat[clunum]; /*獲取下一個簇號*/
    for(i=0; i<gbpb.sec_per_chus; i++)    /*從SD卡中
讀取一簇數據*/
    {ret = sd_read(rsv, secnum+(UINT32)i);
    &hellip;
    for(j=0; j<512; j++)fdata[count++] = rsv[j];}
    }while(clunum != 0xFFFF);
3.1.2 長文件名支持
    具有長文件名的一個文件或目錄實際對應著多個目錄登記項(FDT),由幾個長文件名和一個別名組成。作為別名的短文件名以傳統(tǒng)的8.3文件名格式存儲在一個FDT中,其余的幾個長文件名則存儲在屬性標志為0x0FH的FDT中。每個這種登記項中可以存儲13個字符,當讀取文件或目錄時,操作系統(tǒng)會將它們重組成可以包含小寫字母的長文件名[7]。實現思路為:獲取文件及目錄信息時,記錄屬性為0x0F的登記項中的內容直到出現屬性為0x01或0x02的登記項,然后從之前記錄的登記項內容中得出真正的文件或目錄名。支持長文件名的FDT結構定義如下:
    struct _longname_fdt_{
    UINT8   name[2048]; /*文件名*/
    UINT16  nlen; /*文件名的實際長度*/
    UINT8   attr; /*屬性*/
    UINT8   rsvd_data[10]; /*保留數據*/
    UINT16  wrt_time; /*最后更新時間*/
    UINT16  wrt_date; /*最后更新日期*/
    UINT16  fst_clu; /*第一簇*/
    UINT32  file_size; /*文件大小*/};
    typedef struct _fdt_ FDT;
3.2 &mu;C/OS-II任務劃分
    在Nios II IDE集成開發(fā)環(huán)境中整合了?滋C/OS-II操作系統(tǒng),集成該操作系統(tǒng)后,根據系統(tǒng)的功能和軟硬件功能模塊設計多個任務,各個任務間通過信號量、全局變量等方式進行通信[8]。任務調度示意圖如圖6所示。

    TaskStart任務:優(yōu)先級為0,初始化硬件設計和全局變量;創(chuàng)建其他任務,創(chuàng)建完成之后自我刪除,不參與任務調度。
    TaskRdMusic:優(yōu)先級為2,從SD卡的音頻文件夾中讀取音頻數據,完成一次操作后,跳轉到TaskPlayMusic。
    TaskPlayMusic:優(yōu)先級為3,將讀取的音頻數據送至音頻解碼芯片的緩沖區(qū)內,以播放音樂。與TaskRdMusic之間通過信號量1切換。
    TaskRdPhoto:優(yōu)先級為1,從SD卡的圖像文件夾中讀取一個圖像文件數據。
    TaskFileHead:優(yōu)先級為2,圖像數據讀取完成后,分析文件頭,以確定圖像文件格式,根據其格式將圖像數據送至對應解碼器。
    TaskDisplay:優(yōu)先級為2,向LCM_SRAM IP核發(fā)出顯示命令,使SRAM中解碼后的圖像數據顯示到LCM上。
    系統(tǒng)上電后,首先對各個硬件模塊及軟件中的數據結構進行初始化。如果初始化失?。ㄈ鏢D卡沒插入、不帶有FAT16文件系統(tǒng)等),系統(tǒng)將再次進行初始化嘗試;如果初始化成功,則系統(tǒng)按照圖7進行任務調度。
    系統(tǒng)的軟硬件設計好以后,將硬件配置文件下載到FPGA,再運行軟件程序可查看實際顯示效果。
    圖7中,上方是分辨率為800&times;400的JPEG源圖像;圖7(a)為LCM上顯示的效果圖,該圖經過縮小以適應屏幕的分辨率,此時的分辨率為320&times;160,居中顯示,背景為黑色;圖7(b)為按照屏幕尺寸縮放效果,此時分辨率為320&times;240;圖7(c)為順時針90&deg;旋轉后的顯示效果,此時圖像分辨率為120&times;240。

    該多功能數碼相框系統(tǒng)以Nios II軟核處理器為核心,其優(yōu)點是有很高的靈活性、硬件可裁剪、產品開發(fā)周期短、便于升級。在SD卡上使用FAT16文件系統(tǒng),便于對音頻、圖像文件進行分類管理,并使多功能數碼相框與PC機、數碼相機等設備進行數據交換時更加方便。利用Nios II軟核特性移植?滋C/OS-II操作系統(tǒng),完成了各個功能模塊的任務調度,提高了系統(tǒng)穩(wěn)定性,簡化了系統(tǒng)軟件的設計。該數碼相框不僅可以用于產品原型開發(fā)、直接銷售,而且還可以進行定制,滿足定制個性化禮品的市場需求,為多功能數碼相框開辟更加廣闊的市場。
參考文獻
[1] 徐洋,黃智宇,李彥,等.基于Verilog HDL的FPGA設計與工程應用[M].北京:人民郵電出版社,2009.
[2] 孫紅進.FPGA實現的視頻圖像縮放顯示[J].液晶與顯示,2010,25(1):130-133.
[3] 何偉,余征華,張玲,等.基于SoPC的SD卡控制器IP核的設計[J].電子技術應用.2011,37(3):137-140.
[4] 陽習書,謝永樂.嵌入式邏輯分析儀在SoPC系統(tǒng)調試中的應用[J].現代科學儀器,2010(5):61-63.
[5] 祝海鳳.JPEG編解碼的FPGA仿真研究[D].哈爾濱:哈爾濱工程大學,2009.
[6] 李山山,李耀鏘,劉敬晗,等.?滋C/OS-II內核在基于FPGA的CPU上的移植[J].實驗技術與管理,2010,27(4):87-90.
[7] 鄧劍,楊曉非,廖俊卿.FAT文件系統(tǒng)原理及實現[J].計算機與數字工程,2005,33(9):105-108.
[8] 華亮,楊世錫.基于?滋C/OS-II的嵌入式系統(tǒng)應用平臺的構建[J].計算機工程,2004,30(15):184-186.

此內容為AET網站原創(chuàng),未經授權禁止轉載。