《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > MEMS|傳感技術(shù) > 設(shè)計(jì)應(yīng)用 > 基于Nios II的多功能數(shù)碼相框
基于Nios II的多功能數(shù)碼相框
來(lái)源:電子技術(shù)應(yīng)用2012年第3期
張 玲,高 湛,林英撐,何 偉
重慶大學(xué) 通信工程學(xué)院,重慶400044
摘要: 介紹了基于Nios II 的多功能數(shù)碼相框的實(shí)現(xiàn)。系統(tǒng)基于Nios II處理器,設(shè)計(jì)用戶自定義模塊,構(gòu)建了靈活性高、可重配置的SoPC系統(tǒng)。設(shè)計(jì)自定義模塊控制LCM顯示;采用流水線方式設(shè)計(jì)JPEG解碼自定義模塊以提高解碼效率;根據(jù)SD協(xié)議設(shè)計(jì)SD卡控制器擴(kuò)展SD卡。實(shí)現(xiàn)了FAT16文件系統(tǒng),便于對(duì)SD卡進(jìn)行文件管理及多平臺(tái)上的數(shù)據(jù)交換,并使用μC/OS-II操作系統(tǒng)簡(jiǎn)化軟件設(shè)計(jì)復(fù)雜度、提高系統(tǒng)穩(wěn)定性。最終實(shí)現(xiàn)可播放音頻并能顯示、縮放、旋轉(zhuǎn)圖像且?guī)в袌D像切換特效的多功能數(shù)碼相框。
中圖分類號(hào): TP335.3
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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

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

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

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

2.1.2 縮放算法實(shí)現(xiàn)
    為實(shí)現(xiàn)圖像縮放功能,該模塊實(shí)現(xiàn)了如圖3所示的雙線性插值縮放算法。該算法利用了需要處理的原始圖像像素點(diǎn)周圍的4個(gè)像素點(diǎn)的相關(guān)性,通過雙線性算法計(jì)算實(shí)現(xiàn)圖像縮放[2]。設(shè)計(jì)中使用SRAM作為顯示緩存,無(wú)嚴(yán)格的實(shí)時(shí)性要求,因此忽略了行場(chǎng)同步信號(hào),簡(jiǎn)化了模塊設(shè)計(jì)。

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

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

 

 

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

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

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

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

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。