亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于8051軟核的SPI NOR FLASH驗(yàn)證平臺(tái)的研究與實(shí)現(xiàn)

        2014-07-28 05:43:26倪峰
        電腦知識(shí)與技術(shù) 2014年18期

        倪峰

        摘要:該文是基于Verilog描述的8051 IP和Flash Behavior Model的軟件平臺(tái)來構(gòu)建SPI NOR FLASH驗(yàn)證平臺(tái),旨在建立一個(gè)完全是由軟件環(huán)境模擬的FLASH測(cè)試平臺(tái)。該平臺(tái)能開發(fā)并測(cè)試Flash驅(qū)動(dòng)程序,而且實(shí)現(xiàn)一種快速建立驗(yàn)證Flash的實(shí)驗(yàn)環(huán)境。

        關(guān)鍵詞:M8051 IP;Verilog;Flash Behavior Model;FLASH驅(qū)動(dòng)

        中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2014)18-4296-05

        1 概述

        隨著電子技術(shù)的日新月異的發(fā)展,芯片的集成度越來越大,其復(fù)雜度越來越高。在芯片的開發(fā)過程中,測(cè)試驗(yàn)證的環(huán)節(jié)占據(jù)整個(gè)工作量的60%-70%,可見芯片驗(yàn)證平臺(tái)的重要性。

        在真實(shí)芯片生產(chǎn)之前,如果能有一個(gè)平臺(tái)可以驗(yàn)證Flash驅(qū)動(dòng)并提供給客戶,對(duì)及時(shí)提供及更新Flash驅(qū)動(dòng)都有十分重要的實(shí)際意義。該文正是從該目的出發(fā),打造一個(gè)純軟件環(huán)境模擬的FLASH測(cè)試平臺(tái)。該平臺(tái)不僅能提供了一個(gè)低成本的FLASH驗(yàn)證平臺(tái)的方案,而且在消除硬件環(huán)境的影響下,讓驅(qū)動(dòng)開發(fā)得以快速完成。

        基于M8051 IP的Flash驗(yàn)證平臺(tái)主要包括8051IP、Flash Behavior Model文件、Flash Driver以及Message組件等,如圖1所示。

        2 驗(yàn)證平臺(tái)的硬件設(shè)計(jì)

        本平臺(tái)是由一顆開源的8051 IP與Flash Behavior Model文件為基礎(chǔ),加上Test Bench代碼模擬的外部RAM以及調(diào)試代碼所需用到的Message 產(chǎn)生組件構(gòu)成。平臺(tái)硬件連接圖如2所示。硬件設(shè)計(jì)主要分成8051 GPIO與Flash Behavior Model的連接,以及Test Bench所需的top.hdl.v功能文件的實(shí)現(xiàn)。

        2.1 M8051 IP軟核

        M8051 IP軟核是高性能的8位微控制器(MCU),它由算術(shù)邏輯單元(ALU)、數(shù)據(jù)存儲(chǔ)交換部分、程序存儲(chǔ)部分、指令解碼譯碼部分以及外圍IO接口部分等組成。M8051與傳統(tǒng)的8051單片機(jī)在MCU組成部分及指令系統(tǒng)是兼容的,具有Intel 8051所有的特性:

        # 8-bit CPU optimized for control applications.

        # 64K External Program Memory.

        # 64K External Data Memory.

        # 4K on-chip Program ROM.

        # 128 bytes of on-chip Data RAM.

        # 32 bidirectional and individually addressable I/O lines.

        # Two 16-bit timer/counters.

        # Fully duplex UART.

        # 5-vector interrupt structure with two programmable priority levels.

        在這次Flash驗(yàn)證平臺(tái)的搭建中,主要用到M8051的GPIO口進(jìn)行與SPI FLASH連接。使用M8051 GPIO 0作為64 KB外擴(kuò)RAM的連接通信口, GPIO 1作為與SPI Flash PIN腳連接的通信口,GPIO 2作為程序調(diào)試信息功能的擴(kuò)展口。

        2.2 SPI Flash

        本文采用S25FL008A 8-Megabit Flash Memory作為驗(yàn)證平臺(tái)的測(cè)試芯片。這里我們主要要了解該Flash的管腳定義以及功能描述。

        2.2.1 管腳連接圖

        SPI Flash管腳一般包括片選的CS腳、時(shí)鐘的SCLK腳、數(shù)據(jù)口SI和SO、寫保護(hù)口WP腳、中斷串行通信的HOLD腳組成。如圖3所示。

        2.2.2 輸入\輸出IO描述

        2.3 M8051 GPIO與Flash的連接

        M8051的GPIO 1的P1_2與Flash的CS管腳、P1_3與Flash的SCLK管腳、P1_4與Flash 的SI管腳、P1_5與Flash的SO管腳、P1_6與Flash的WP管腳、P1_7與Flash的HOLD管腳進(jìn)行連接,Verilog代碼如下所示。

        /***8051 module instantiation for testing.***/

        top toplevel(

        .PRT07(PRT07), .PRT06(PRT06), .PRT05(PRT05), .PRT04(PRT04),

        .PRT03(PRT03), .PRT02(PRT02), .PRT01(PRT01), .PRT00(PRT00),

        .PRT17(PRT17), .PRT16(PRT16), .PRT15(PRT15), .PRT14(PRT14),

        .PRT13(PRT13), .PRT12(PRT12), .PRT11(PRT11), .PRT10(PRT10),

        .PRT27(PRT27), .PRT26(PRT26), .PRT25(PRT25), .PRT24(PRT24),

        .PRT23(PRT23), .PRT22(PRT22), .PRT21(PRT21), .PRT20(PRT20),

        .PRT37(PRT37), .PRT36(PRT36), .PRT35(PRT35), .PRT34(PRT34),endprint

        .PRT33(PRT33), .PRT32(PRT32), .PRT31(PRT31), .PRT30(PRT30),

        .RSTPN(RSTPN), .XTAL2P(XTAL2P), .XTAL1P(XTAL1P),

        .NPSENP(NPSENP), .ALEPN(ALEPN), .NEAPN(NEAPN) );

        /***spi flash module instantiation for testing.***/

        `DEVICE flash_model (

        .SCLK(PRT13_reg),

        .CS(PRT12),

        .SI(PRT14),

        .SO(PRT15),

        .WP(PRT16),

        .HOLD(PRT17) );

        2.4 topt.hdl.v下添加消息輸出功能模塊

        利用P1_0口作為消息輸出模塊的中斷口。GPIO 2口作為數(shù)據(jù)口,進(jìn)行接收字符數(shù)據(jù)。同時(shí),加入特殊字符串加以判斷是否當(dāng)前字符串已經(jīng)結(jié)束,并把需要輸出的數(shù)據(jù)以十六進(jìn)制輸出。

        3 驗(yàn)證平臺(tái)的軟件設(shè)計(jì)

        3.1 添加M8051與Flash連接的管腳配置

        根據(jù)硬件設(shè)計(jì)部分中提到的M8051與Flash的連接設(shè)定,在norflash_define.h中添加:

        #ifdef GPIO_SPI

        #define HOLD P1_7

        #define WPn P1_6

        #define SO P1_5

        #define SI P1_4

        #define SCLK P1_3

        #define CSn P1_2

        #endif //end GPIO_SPI

        3.2 添加讀寫SPI命令的底層接口

        在norflash_cmd.c中加入底層的讀SPI命令及寫SPI命令的接口函數(shù):

        讀SPI命令函數(shù):

        uint8 GetByte( ) {

        uint16 i;

        uint8 data_buf=0;

        // Set VIP 8051 GPIO as input ( need pull to high )

        SO = 1;

        for( i= 0; i < 8; i++ ) {

        SCLK = 0;

        if ( SO == 1 ) {

        data_buf = (data_buf | (0x80 >> i));

        }

        SCLK = 1;

        }

        return data_buf;

        }

        寫SPI命令函數(shù):

        void SendByte( uint8 byte_value ) {

        uint16 i;

        for( i= 0; i < 8; i++ ) {

        if ( (byte_value & IO_MASK) == 0x80 ){

        SI = 1;

        }

        else{

        SI = 0;

        }

        SCLK = 0;

        byte_value = byte_value << 1;

        SCLK = 1;

        }

        }

        3.3 添加Flash支援的功能函數(shù)

        根據(jù)Flash S25FL008A Datasheet上的描述,添加相應(yīng)的ReadID、Flash_Read、Flash_Erase以及Flash_PP四個(gè)功能演示函數(shù)。

        3.4 添加Test Bench程序

        最后添加Test Bench主程序,在main函數(shù)里加入對(duì)M8051的UART、軟件模擬SPI功能、Timer以及中斷的初始化程序。同時(shí)也要添加調(diào)用Read Flash ID以及擦寫Nor Flash的功能的程序代碼。

        4 測(cè)試Flash Driver的運(yùn)行

        測(cè)試Flash Driver主要分兩個(gè)步驟進(jìn)行,首先是將8051的Firmware編譯成編匯代碼,將其轉(zhuǎn)換成Verilog仿真格式。其次是將轉(zhuǎn)換后的代碼放入ncverilog工具中進(jìn)行仿真運(yùn)行,查看程序打印出的系統(tǒng)信息是否有誤。同時(shí)還可以利用波形Debug工具進(jìn)行調(diào)試程序代碼,這將極大地提高我們檢測(cè)Flash Driver的效率以及準(zhǔn)確性。

        4.1 編譯程序并生成所需燒錄的romcode

        這里我們選擇sdcc作為編譯工具,將8051 firmware進(jìn)行編譯成匯編代碼。SDCC ( Small Device C Compiler) 是一個(gè)優(yōu)化的 ANSI - C交叉編譯器,目標(biāo)CPU基于Intel 8051,是一款免費(fèi)的開放源代碼軟件。

        利用以下命令將我們的編寫好的Flash Driver的測(cè)試代碼編譯成8051目標(biāo)代碼:

        sdcc —model-large -c S25FL_CMD.c

        sdcc —model-large -c testbench.c

        sdcc —model-large tb.rel $S25FL_CMD.rel

        cp -f tb.ihx $ROM_DIR/S25FL_APP.ihx

        再使用hex to dat格式轉(zhuǎn)換工具,將hex文件轉(zhuǎn)換成dat文件。endprint

        ./hex2v.exe S25FL_APP.ihx > S25FL_APP.dat

        最后連接生成romcode.com文件:

        rm romcode.rom

        ln -s $ROM_DIR/S25FL_APP.dat romcode.rom

        4.2 運(yùn)行ncverilog工具進(jìn)行仿真

        查閱相關(guān)ncverilog文檔后,在測(cè)試腳本中鍵入如下命令啟動(dòng)verilog仿真動(dòng)作:

        ncverilog toptst.v -f top.run +access+r +nctimescale+10ns/1ns +ncoverride_precision

        4.3 Flash Driver測(cè)試結(jié)果

        運(yùn)行ncverilog仿真后,可以在終端得到如下信息:

        /**Start Testbench of S25FL008A Flash Driver**/

        #Test Read ID cmd:

        RDID output=>00010213

        expected=>00010213

        #Test READ cmd:

        >>>Start Page Program page address: 0x200

        Read Address=>00000200

        data=>00000047

        expected=>00000047

        Read Address=>00000201

        data=>000000fc

        expected=>000000fc

        Read Address=>00000202

        data=>0000006d

        expected=>0000006d

        Read Address=>00000203

        data=>00000084

        expected=>00000084

        Read Address=>00000204

        data=>00000028

        expected=>00000028

        #Test PP cmd:

        >>>Start Page Program page address: 0x300

        Read Address=>00000300

        data=>000000c9

        expected=>000000c9

        Read Address=>00000301

        data=>0000004a

        expected=>0000004a

        Read Address=>00000302

        data=>0000001d

        expected=>0000001d

        Read Address=>00000303

        data=>000000ae

        expected=>000000ae

        Read Address=>00000304

        data=>000000a5

        expected=>000000a5

        /**End Testbench of S25FL008A Flash Driver**/

        **Total Error: 0

        從結(jié)果可以看出,這次仿真的過程中沒有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫Flash Address 0x200和0x300都正確。

        5 結(jié)束語

        本文通過針基于M8051軟核,對(duì)SPI NOR Flash Driver驗(yàn)證平臺(tái)的硬件模塊及軟件模塊的進(jìn)行較詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),完整地闡述了一種較為快捷以及低成本的方法開發(fā)、測(cè)試Flash Driver。它不僅可以提供一種有別與常規(guī)硬件測(cè)試平臺(tái)的實(shí)現(xiàn)方法,還為我們通過軟件模擬的方式來代替硬件平臺(tái)提供一種全新的思路。

        參考文獻(xiàn):

        [1] J.BHASKER. Verilog HDL入門[M].3版.北京:北京航空航天大學(xué)出版社,2008.

        [2] S25FL800A_00_B3 Data Sheet. Spansion, 2009.

        [3] Technical Specifications M8051.Virtual IP Group.endprint

        ./hex2v.exe S25FL_APP.ihx > S25FL_APP.dat

        最后連接生成romcode.com文件:

        rm romcode.rom

        ln -s $ROM_DIR/S25FL_APP.dat romcode.rom

        4.2 運(yùn)行ncverilog工具進(jìn)行仿真

        查閱相關(guān)ncverilog文檔后,在測(cè)試腳本中鍵入如下命令啟動(dòng)verilog仿真動(dòng)作:

        ncverilog toptst.v -f top.run +access+r +nctimescale+10ns/1ns +ncoverride_precision

        4.3 Flash Driver測(cè)試結(jié)果

        運(yùn)行ncverilog仿真后,可以在終端得到如下信息:

        /**Start Testbench of S25FL008A Flash Driver**/

        #Test Read ID cmd:

        RDID output=>00010213

        expected=>00010213

        #Test READ cmd:

        >>>Start Page Program page address: 0x200

        Read Address=>00000200

        data=>00000047

        expected=>00000047

        Read Address=>00000201

        data=>000000fc

        expected=>000000fc

        Read Address=>00000202

        data=>0000006d

        expected=>0000006d

        Read Address=>00000203

        data=>00000084

        expected=>00000084

        Read Address=>00000204

        data=>00000028

        expected=>00000028

        #Test PP cmd:

        >>>Start Page Program page address: 0x300

        Read Address=>00000300

        data=>000000c9

        expected=>000000c9

        Read Address=>00000301

        data=>0000004a

        expected=>0000004a

        Read Address=>00000302

        data=>0000001d

        expected=>0000001d

        Read Address=>00000303

        data=>000000ae

        expected=>000000ae

        Read Address=>00000304

        data=>000000a5

        expected=>000000a5

        /**End Testbench of S25FL008A Flash Driver**/

        **Total Error: 0

        從結(jié)果可以看出,這次仿真的過程中沒有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫Flash Address 0x200和0x300都正確。

        5 結(jié)束語

        本文通過針基于M8051軟核,對(duì)SPI NOR Flash Driver驗(yàn)證平臺(tái)的硬件模塊及軟件模塊的進(jìn)行較詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),完整地闡述了一種較為快捷以及低成本的方法開發(fā)、測(cè)試Flash Driver。它不僅可以提供一種有別與常規(guī)硬件測(cè)試平臺(tái)的實(shí)現(xiàn)方法,還為我們通過軟件模擬的方式來代替硬件平臺(tái)提供一種全新的思路。

        參考文獻(xiàn):

        [1] J.BHASKER. Verilog HDL入門[M].3版.北京:北京航空航天大學(xué)出版社,2008.

        [2] S25FL800A_00_B3 Data Sheet. Spansion, 2009.

        [3] Technical Specifications M8051.Virtual IP Group.endprint

        ./hex2v.exe S25FL_APP.ihx > S25FL_APP.dat

        最后連接生成romcode.com文件:

        rm romcode.rom

        ln -s $ROM_DIR/S25FL_APP.dat romcode.rom

        4.2 運(yùn)行ncverilog工具進(jìn)行仿真

        查閱相關(guān)ncverilog文檔后,在測(cè)試腳本中鍵入如下命令啟動(dòng)verilog仿真動(dòng)作:

        ncverilog toptst.v -f top.run +access+r +nctimescale+10ns/1ns +ncoverride_precision

        4.3 Flash Driver測(cè)試結(jié)果

        運(yùn)行ncverilog仿真后,可以在終端得到如下信息:

        /**Start Testbench of S25FL008A Flash Driver**/

        #Test Read ID cmd:

        RDID output=>00010213

        expected=>00010213

        #Test READ cmd:

        >>>Start Page Program page address: 0x200

        Read Address=>00000200

        data=>00000047

        expected=>00000047

        Read Address=>00000201

        data=>000000fc

        expected=>000000fc

        Read Address=>00000202

        data=>0000006d

        expected=>0000006d

        Read Address=>00000203

        data=>00000084

        expected=>00000084

        Read Address=>00000204

        data=>00000028

        expected=>00000028

        #Test PP cmd:

        >>>Start Page Program page address: 0x300

        Read Address=>00000300

        data=>000000c9

        expected=>000000c9

        Read Address=>00000301

        data=>0000004a

        expected=>0000004a

        Read Address=>00000302

        data=>0000001d

        expected=>0000001d

        Read Address=>00000303

        data=>000000ae

        expected=>000000ae

        Read Address=>00000304

        data=>000000a5

        expected=>000000a5

        /**End Testbench of S25FL008A Flash Driver**/

        **Total Error: 0

        從結(jié)果可以看出,這次仿真的過程中沒有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫Flash Address 0x200和0x300都正確。

        5 結(jié)束語

        本文通過針基于M8051軟核,對(duì)SPI NOR Flash Driver驗(yàn)證平臺(tái)的硬件模塊及軟件模塊的進(jìn)行較詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),完整地闡述了一種較為快捷以及低成本的方法開發(fā)、測(cè)試Flash Driver。它不僅可以提供一種有別與常規(guī)硬件測(cè)試平臺(tái)的實(shí)現(xiàn)方法,還為我們通過軟件模擬的方式來代替硬件平臺(tái)提供一種全新的思路。

        參考文獻(xiàn):

        [1] J.BHASKER. Verilog HDL入門[M].3版.北京:北京航空航天大學(xué)出版社,2008.

        [2] S25FL800A_00_B3 Data Sheet. Spansion, 2009.

        [3] Technical Specifications M8051.Virtual IP Group.endprint

        国内成+人 亚洲+欧美+综合在线 | 成在线人视频免费视频| 免费观看在线视频一区| 亚洲视频免费在线观看| 久久久久久久极品内射| 亚洲av永久无码一区| 亚洲av日韩av一卡二卡| 一区二区三区四区国产亚洲| 少妇被猛烈进入到喷白浆| 极品新婚夜少妇真紧| 国产香蕉尹人综合在线观| 最新亚洲av日韩av二区一区| 神马影院日本一区二区| 免费高清av一区二区三区| 中文亚洲日韩欧美| 久久人妻少妇中文字幕| 国产嫩草av一区二区三区| 97精品一区二区视频在线观看| 欧美中文在线观看| 中文字幕国产精品专区| 玖玖色玖玖草玖玖爱在线精品视频| 国产好大好硬好爽免费不卡| 91精品国产丝袜在线拍| av手机天堂在线观看| 丰满少妇人妻无码| 无码a∨高潮抽搐流白浆| 亚洲Va中文字幕无码毛片下载| 国产精品一区二区久久蜜桃| 亚洲国产精彩中文乱码av| 亚洲巨乳自拍在线视频| 国产杨幂AV在线播放| 精品少妇一区二区三区免费 | 日韩人妻精品视频一区二区三区| 蜜臀av999无码精品国产专区| 国产成人v爽在线免播放观看| 亚洲一区二区三区成人在线| 日本精品一区二区高清| 欧美国产一区二区三区激情无套| 免费一级国产大片| 青青草视频在线观看入口| 欧美精品黑人粗大免费|