《電子技術應用》
您所在的位置:首頁 > MEMS|傳感技術 > 設計應用 > 基于Nios II的多功能數碼相框
基于Nios II的多功能數碼相框
來源:電子技術應用2012年第3期
張 玲,高 湛,林英撐,何 偉
重慶大學 通信工程學院,重慶400044
摘要: 介紹了基于Nios II 的多功能數碼相框的實現。系統基于Nios II處理器,設計用戶自定義模塊,構建了靈活性高、可重配置的SoPC系統。設計自定義模塊控制LCM顯示;采用流水線方式設計JPEG解碼自定義模塊以提高解碼效率;根據SD協議設計SD卡控制器擴展SD卡。實現了FAT16文件系統,便于對SD卡進行文件管理及多平臺上的數據交換,并使用μC/OS-II操作系統簡化軟件設計復雜度、提高系統穩定性。最終實現可播放音頻并能顯示、縮放、旋轉圖像且帶有圖像切換特效的多功能數碼相框。
中圖分類號: 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文件系統的SD卡進行圖像數據更新,同時還具有時間顯示等擴展功能。系統中將需要耗費大量時間的復雜操作(如圖像解碼、圖像的各種特效功能以及SD卡控制)用掛載在Avalon總線上的自定義模塊實現。縮短了處理時間,提高了系統響應速度。系統采用基于Nios II處理器的SoPC技術,使得該數碼相框具有靈活性高、可重配置、便于升級等優點[1]。

1 總體設計
    本系統采用經濟型的Cyclone II FPGA芯片作為核心,基于Nios II軟核處理器,采用軟硬件結合的方式設計實現。系統的硬件總體框圖如圖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的地址實現不同的圖像切換效果,如上方切入、下方切入、百葉窗、菱形等八種方式循環出現。切換時,LCM上同時存在新舊兩幅圖像的數據,因此,緩存中需要存儲這兩幅圖像的數據。以百葉窗效果為例,每行以16個像素作為間隔,將LCM的每一行分割成20個條形區域。如圖2所示,第i行被分割后,第一個區域的像素點為n1~n16,最后一個區域為m1~m16。每個條形區域中,新圖像的數據逐漸向右覆蓋舊圖像數據,從而形成百葉窗效果。具體實現過程為:在第一次刷新時,每行的各個條形區域的第一個像素點(n1,…,m1)讀取新圖像的數據,各區域其他像素點(n2~n16,…,m2~m16)仍然讀取舊圖像的數據;第二次刷新時,每行各個條形區域的前兩個像素點(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卡是一種基于半導體快閃記憶器的存儲設備,其數據傳送和物理規范由MMC發展而來。系統中將SD卡控制器設計成一個SPI模式的IP核,通過軟件驅動實現SD卡的基本讀寫操作,即不需要復雜的硬件電路又能得到比軟件模擬SPI的控制方式更快的讀寫速度。SD卡控制器結構圖如圖4所示。

2.2.1 功能模塊劃分
    主控模塊的端口與Avalon總線連接,用于緩存SD卡命令,并存儲扇區地址、待發送的數據到雙口RAM以及從中讀取數據等。初始化模塊完成對SD卡的初始化操作。命令生成模塊完成SD卡命令、參數、命令校驗值的發送和命令回執的讀取以及數據的收發。串并、并串轉換模塊的主要作用是實現串并或者并串轉換[3]。
    使用Quartus II自帶的邏輯分析儀(SignalTap II工具)對SD卡控制管腳的信號量進行實時捕獲,驗證了設計的正確性[4]。
2.2.2 驅動設計
    SD卡控制器的驅動共設計了4個接口函數,分別完成初始化、讀扇區、寫扇區和執行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); /*讀命令回執*/
    &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)是第一個適用于連續色調、多灰度、彩色或黑白靜止圖像的國際標準。為提高JPEG圖像的解碼效率,實現良好的解碼效果,本設計采用流水線結構設計JPEG解碼IP核。解碼模塊結構如圖5所示。

 

 

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

    文件系統中文件數據的存放是以簇為單位的,而SD卡的基本讀寫單位是扇區,所以需要根據簇號計算相應的扇區號,由文件系統結構可得一般的計算公式為:
    起始扇區號=隱藏扇區數+保留扇區數+2&times;FAT表占用扇區數+FDT表占用扇區數+(起始簇號-2)&times;每簇扇區數
    從SD卡的數據扇區中讀取指定文件的核心代碼為:
    clunum = ffdt.fst_clu; /*獲取下一個簇號*/
    do{
    secnum = get_sta_sec(clunum);    /*由起始簇號獲得
起始扇區*/
    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),由幾個長文件名和一個別名組成。作為別名的短文件名以傳統的8.3文件名格式存儲在一個FDT中,其余的幾個長文件名則存儲在屬性標志為0x0FH的FDT中。每個這種登記項中可以存儲13個字符,當讀取文件或目錄時,操作系統會將它們重組成可以包含小寫字母的長文件名[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集成開發環境中整合了?滋C/OS-II操作系統,集成該操作系統后,根據系統的功能和軟硬件功能模塊設計多個任務,各個任務間通過信號量、全局變量等方式進行通信[8]。任務調度示意圖如圖6所示。

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

    該多功能數碼相框系統以Nios II軟核處理器為核心,其優點是有很高的靈活性、硬件可裁剪、產品開發周期短、便于升級。在SD卡上使用FAT16文件系統,便于對音頻、圖像文件進行分類管理,并使多功能數碼相框與PC機、數碼相機等設備進行數據交換時更加方便。利用Nios II軟核特性移植?滋C/OS-II操作系統,完成了各個功能模塊的任務調度,提高了系統穩定性,簡化了系統軟件的設計。該數碼相框不僅可以用于產品原型開發、直接銷售,而且還可以進行定制,滿足定制個性化禮品的市場需求,為多功能數碼相框開辟更加廣闊的市場。
參考文獻
[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系統調試中的應用[J].現代科學儀器,2010(5):61-63.
[5] 祝海鳳.JPEG編解碼的FPGA仿真研究[D].哈爾濱:哈爾濱工程大學,2009.
[6] 李山山,李耀鏘,劉敬晗,等.?滋C/OS-II內核在基于FPGA的CPU上的移植[J].實驗技術與管理,2010,27(4):87-90.
[7] 鄧劍,楊曉非,廖俊卿.FAT文件系統原理及實現[J].計算機與數字工程,2005,33(9):105-108.
[8] 華亮,楊世錫.基于?滋C/OS-II的嵌入式系統應用平臺的構建[J].計算機工程,2004,30(15):184-186.

此內容為AET網站原創,未經授權禁止轉載。
主站蜘蛛池模板: 99精品国产在热久久婷婷| 午夜精品一区二区三区在线观看| 久久久久亚洲av无码尤物| 激情国产AV做激情国产爱| 国产在线视频一区二区三区 | 久久久精品国产免大香伊| 激情视频在线观看网站| 国产人成视频在线观看| 92国产精品午夜福利免费| 日产乱码卡1卡2卡三免费 | 成人影片麻豆国产影片免费观看 | 亚洲欧美日韩国产一区二区三区精品 | 欧美人与z0xxxx另类| 十大最污软件下载| 44luba爱你啪| 性护士movievideobest| 亚洲AV人无码综合在线观看| 男人肌肌捅女人肌肌视频| 国产午夜精品一区二区三区不卡 | 欧美疯狂性受xxxxx另类| 四虎电影免费观看网站| 久久国产视频精品| 欧美老熟妇乱大交xxxxx| 国产人妖乱国产精品人妖| a毛片成人免费全部播放| 日本免费色网站| 亚洲成人福利在线| 精品国产一区二区三区在线| 国产精品亚洲一区二区三区久久 | 国产成人精品啪免费视频| 在车子颠簸中进了老师的身体| 久久精品国产亚洲av电影| 男生和女生一起差差差差| 国产成人精品a视频| jizzjizz之xxxx18| 无码日韩精品一区二区免费| 亚洲中文无码av永久| 特级黄色一级片| 嘟嘟嘟www在线观看免费高清| 在线观看www日本免费网站| 女人被男人狂躁视频免费|