• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于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)來(lái)構(gòu)建SPI NOR FLASH驗(yàn)證平臺(tái),旨在建立一個(gè)完全是由軟件環(huán)境模擬的FLASH測(cè)試平臺(tái)。該平臺(tái)能開(kā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ā)展,芯片的集成度越來(lái)越大,其復(fù)雜度越來(lái)越高。在芯片的開(kāi)發(fā)過(guò)程中,測(cè)試驗(yàn)證的環(huán)節(jié)占據(jù)整個(gè)工作量的60%-70%,可見(jiàn)芯片驗(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)開(kāi)發(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)是由一顆開(kā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、寫(xiě)保護(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 添加讀寫(xiě)SPI命令的底層接口

    在norflash_cmd.c中加入底層的讀SPI命令及寫(xiě)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;

    }

    寫(xiě)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以及擦寫(xiě)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)的開(kāi)放源代碼軟件。

    利用以下命令將我們的編寫(xiě)好的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é)果可以看出,這次仿真的過(guò)程中沒(méi)有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫(xiě)Flash Address 0x200和0x300都正確。

    5 結(jié)束語(yǔ)

    本文通過(guò)針基于M8051軟核,對(duì)SPI NOR Flash Driver驗(yàn)證平臺(tái)的硬件模塊及軟件模塊的進(jìn)行較詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),完整地闡述了一種較為快捷以及低成本的方法開(kāi)發(fā)、測(cè)試Flash Driver。它不僅可以提供一種有別與常規(guī)硬件測(cè)試平臺(tái)的實(shí)現(xiàn)方法,還為我們通過(guò)軟件模擬的方式來(lái)代替硬件平臺(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é)果可以看出,這次仿真的過(guò)程中沒(méi)有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫(xiě)Flash Address 0x200和0x300都正確。

    5 結(jié)束語(yǔ)

    本文通過(guò)針基于M8051軟核,對(duì)SPI NOR Flash Driver驗(yàn)證平臺(tái)的硬件模塊及軟件模塊的進(jìn)行較詳細(xì)的設(shè)計(jì)與實(shí)現(xiàn),完整地闡述了一種較為快捷以及低成本的方法開(kāi)發(fā)、測(cè)試Flash Driver。它不僅可以提供一種有別與常規(guī)硬件測(cè)試平臺(tái)的實(shí)現(xiàn)方法,還為我們通過(guò)軟件模擬的方式來(lái)代替硬件平臺(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é)果可以看出,這次仿真的過(guò)程中沒(méi)有錯(cuò)誤,讀S25FL008A Flash ID正確,以及讀寫(xiě)Flash Address 0x200和0x300都正確。

    5 結(jié)束語(yǔ)

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

    洞口县| 桃园市| 陈巴尔虎旗| 徐汇区| 修文县| 蒙城县| 报价| 措勤县| 江孜县| 卓资县| 雅江县| 无锡市| 宁河县| 集贤县| 当涂县| 淳安县| 交口县| 平定县| 博湖县| 凤翔县| 莱西市| 芒康县| 林甸县| 古浪县| 社旗县| 格尔木市| 海宁市| 金塔县| 武平县| 六盘水市| 邢台市| 上饶县| 玛曲县| 木兰县| 忻城县| 镇安县| 渑池县| 莱州市| 南部县| 合作市| 修水县|