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

        ?

        基于DW8051 的SPI 控制器設(shè)計(jì)*

        2012-12-22 06:00:04孫永琦李曉明
        電子器件 2012年3期
        關(guān)鍵詞:信號設(shè)計(jì)

        孫永琦,李曉明

        (浙江理工大學(xué)機(jī)械與自動(dòng)控制學(xué)院,杭州310018)

        DW8051 是Synopsys 公司設(shè)計(jì)的一款高性能、可配置、可綜合的8051 軟核,該軟核同工業(yè)標(biāo)準(zhǔn)的803x/805x 微控制器兼容。DW8051 在很多基于ASIC和FPGA 技術(shù)的應(yīng)用中得到廣泛使用。DW8051 作為一個(gè)軟核,只提供了最基本的標(biāo)準(zhǔn)8051 外設(shè),包括通用串口、定時(shí)/計(jì)數(shù)器和中斷控制器。為了擴(kuò)展其應(yīng)用,DW8051 提供了一組用戶SFR(Special Function Register)外設(shè)總線,該總線可以讓用戶將自己設(shè)計(jì)的外設(shè)模塊連接到DW8051 上面。本文設(shè)計(jì)的SPI 控制器,可作為一個(gè)外設(shè)掛載在DW8051 的SFR 外設(shè)總線上。

        1 SPI 總線的概念和基本原理

        串行外圍接口SPI(Serial Peripheral Interface)是芯片內(nèi)部串行通信的一種,該協(xié)議由Motorola 命名。SPI 是一種同步串行接口,可傳輸8 位字節(jié)格式數(shù)據(jù),同一時(shí)刻只能傳輸1 位,具有I/O 資源占用少、協(xié)議實(shí)現(xiàn)簡單、傳輸速度快等優(yōu)點(diǎn)。目前,還沒有公共領(lǐng)域規(guī)范對SPI 協(xié)議進(jìn)行定義,也沒有IEEE 的認(rèn)定。然而,Motorola 設(shè)計(jì)的SPI 規(guī)范已經(jīng)被廣泛采用,可看做事實(shí)上的標(biāo)準(zhǔn),而且得到很多半導(dǎo)體生產(chǎn)商的支持和認(rèn)可[1]。目前,很多的MCU 和DSP 芯片以及AD器件和Flash 都支持SPI 總線接口。

        SPI 的一個(gè)重要特性就是主/從模式,串行SPI總線僅要求4 根信號線,其中兩根為控制線,兩根為數(shù)據(jù)線。SPI 總線的信號定義如下:控制信號,串行時(shí)鐘(SCLK)和從片選擇(SS);數(shù)據(jù)信號,主機(jī)輸入/從機(jī)輸出(MISO)和主機(jī)輸出/從機(jī)輸入(MOSI)。SPI 數(shù)據(jù)傳輸速率可達(dá)幾Mbit/s,通常只受限于主/從接口信號規(guī)范。該接口的主要問題是地址容量不足,每一從芯片都需要一根獨(dú)立的從芯片選擇線。對于簡單的主/從設(shè)計(jì)來說,SPI 是非常不錯(cuò)的選擇[1]。

        2 SPI 控制器模塊設(shè)計(jì)

        本文設(shè)計(jì)的SPI 控制器模塊是作為DW8051 的一個(gè)外設(shè),根據(jù)具體的應(yīng)用需求(沒有多控制器應(yīng)用),該控制器僅被設(shè)計(jì)成一個(gè)SPI 主機(jī),其在整個(gè)系統(tǒng)的位置和與外部設(shè)備的關(guān)系如圖1。在微控制器(MCU)內(nèi)部,SPI 控制器通過SFR 總線與DW8051 內(nèi)核相連,其地位和普通I/O 端口(P0、P1、P2 和P3)相同;在外部,從MCU 頂層引出SPI的四根信號線,通過這些信號線與基于SPI 總線的外設(shè)相連。本文設(shè)計(jì)的SPI 控制器用硬件描述語言描述,成為一個(gè)可復(fù)用的IP 核,可以方便的集成到其他的數(shù)字系統(tǒng)中去。

        圖1 系統(tǒng)總結(jié)構(gòu)

        2.1 SPI 控制器頂層模塊設(shè)計(jì)

        本文最終目標(biāo)是設(shè)計(jì)出如圖2 所示的SPI 頂層模塊。該頂層模塊的端口主要分為兩個(gè)部分:左邊的端口為控制信號端口,包括系統(tǒng)信號和與DW8051 連接的SFR 總線信號;右邊的端口為SPI的四根信號線。

        各端口功能定義與描述如下:

        i_clk:系統(tǒng)時(shí)鐘信號,由MCU 外部提供,與DW8051 內(nèi)核共用。

        i_rst_n:系統(tǒng)復(fù)位信號,低電平有效,由MCU 外部提供,與DW8051 內(nèi)核共用。

        i_sfr_addr:SFR 總線地址輸入信號,由DW8051內(nèi)核提供。

        i_sfr_data_out:SFR 總線數(shù)據(jù)輸出信號,由DW8051 內(nèi)核提供。

        i_sfr_wr:SFR 總線寫使能信號,由DW8051 內(nèi)核提供。

        i_sfr_rd:SFR 總線讀使能信號,由DW8051 內(nèi)核提供。

        o_sfr_data_in:SFR 總線數(shù)據(jù)輸入信號,輸出給DW8051 內(nèi)核。

        o_spi_sfr_cs:SFR 總線選擇信號,輸出給DW8051 內(nèi)核。

        i_miso:主機(jī)輸入/從機(jī)輸出信號,由SPI 外設(shè)輸入。

        o_ss:從片選擇信號,使能SPI 外設(shè)。

        o_mosi:主機(jī)輸出/從機(jī)輸入,輸出給SPI 外設(shè)。

        o_sclk:串行時(shí)鐘,由SPI 控制器產(chǎn)生。

        2.2 SPI 控制器內(nèi)部電路設(shè)計(jì)

        根據(jù)設(shè)計(jì)目標(biāo),將SPI 控制器分為兩個(gè)部分,一個(gè)是SFR 總線控制單元,一個(gè)是SPI 總線控制單元。將設(shè)計(jì)分塊可以有效的劃分功能,讓整個(gè)設(shè)計(jì)的邏輯更加清楚,符合模塊化設(shè)計(jì)的要求,也更有利于硬件描述語言的實(shí)現(xiàn)。

        如圖3 所示,上面虛線框內(nèi)為SFR 總線控制單元,該部分主要負(fù)責(zé)與微控制器交互,包括SFR 總線控制接口和4 個(gè)寄存器;下面虛線框內(nèi)為SPI 總線控制單元,該部分主要負(fù)責(zé)產(chǎn)生和接收SPI 信號,包括sclk 產(chǎn)生模塊,SPI 控制狀態(tài)機(jī),發(fā)送/接收FIFO 和發(fā)送/接收移位寄存器。SPI 控制器的兩個(gè)部分擁有統(tǒng)一的系統(tǒng)時(shí)鐘,系統(tǒng)復(fù)位信號僅供SFR總線控制單元使用。

        圖3 SPI 控制模塊內(nèi)部結(jié)構(gòu)

        SPI 主要的組成部分功能闡述如下:

        SFR 總線控制接口——與DW8051 的接口??刂芐FR 總線控制單元中的四個(gè)寄存器的讀取與寫入。

        控制寄存器——由微控制器進(jìn)行隨機(jī)讀寫,用來配置SPI 控制器的各種控制信號,包括SPI 使能信號、SPI 的時(shí)鐘極性、相位以及傳輸數(shù)率。

        擴(kuò)展控制寄存器——對控制寄存器的擴(kuò)展,包括SPI 讀使能信號、讀取數(shù)據(jù)數(shù)目控制信號、從設(shè)備選擇信號(可以根據(jù)外設(shè)數(shù)目進(jìn)行擴(kuò)展位數(shù))。該寄存器有未定義位,可以作為以后升級擴(kuò)展用。

        狀態(tài)寄存器——控制器運(yùn)行時(shí)的狀態(tài)標(biāo)志,該寄存器為只讀,微控制器根據(jù)狀態(tài)寄存器來控制SPI 的數(shù)據(jù)傳輸。包括傳輸結(jié)束標(biāo)志位、SPI 讀沖突和寫溢出位以及發(fā)送/接收FIFO 的滿空標(biāo)志位。

        數(shù)據(jù)寄存器——在邏輯上只有一個(gè)數(shù)據(jù)寄存器,既表示發(fā)送又表示接收,對于微控制器來說只有一個(gè)單元地址。在物理上分為發(fā)送寄存器和接收寄存器兩個(gè)。

        CLK 分頻計(jì)數(shù)器——由控制寄存器控制,用于產(chǎn)生SCLK 信號,頻率分別為系統(tǒng)頻率的1/2、1/20、1/26 和1/64。

        SPI 控制狀態(tài)機(jī)——根據(jù)控制寄存器和擴(kuò)展控制寄存器來產(chǎn)生控制邏輯,用以控制發(fā)送FIFO 和移位寄存器以及接收FIFO 和移位寄存器。

        緩沖FIFO 和移位寄存器——獨(dú)立的發(fā)送緩沖FIFO 和接收緩沖FIFO,同步FIFO 的深度為16,寬度為8。發(fā)送FIFO 的輸出為寄存輸出,接收FIFO的輸出為非寄存,主要是為了配合微控制器的讀寫時(shí)序,兩者其他都相同。當(dāng)發(fā)送緩沖FIFO 為滿且仍向FIFO 中寫入時(shí),產(chǎn)生寫溢出;當(dāng)接收緩沖FIFO為滿且仍在接收數(shù)據(jù)時(shí),產(chǎn)生讀沖突。發(fā)送和接收移位寄存器在SPI 控制狀態(tài)機(jī)的控制下,串行的發(fā)送和接收數(shù)據(jù),當(dāng)發(fā)送或接收完一個(gè)字節(jié)時(shí),將該字節(jié)存入相應(yīng)的FIFO,然后繼續(xù)下一個(gè)字節(jié)的發(fā)送或者接收。

        2.3 SPI 控制器的Verilog HDL 的實(shí)現(xiàn)

        Verilog HDL 是硬件描述語言的一種,用于數(shù)字電子系統(tǒng)設(shè)計(jì)。該語言允許設(shè)計(jì)者進(jìn)行各種級別的邏輯設(shè)計(jì),進(jìn)行邏輯系統(tǒng)的仿真驗(yàn)證、時(shí)序分析、邏輯綜合。它是目前應(yīng)用最廣泛的一種硬件描述語言。用Verilog HDL 描述的電路設(shè)計(jì)就是該電路的Verilog HDL 模型,也稱模塊[3]。本文對SPI 控制器模塊采用RTL(寄存器傳輸級)進(jìn)行描述,編寫的RTL 模型可以進(jìn)行綜合并在FPGA 上進(jìn)行驗(yàn)證。

        大型數(shù)字系統(tǒng)一般采用自頂向下(Top_Down)的設(shè)計(jì)方法。本文設(shè)計(jì)的SPI 控制器規(guī)模比較小,所以沒有采用該方法,而是把主要電路設(shè)計(jì)在一個(gè)模塊內(nèi)完成,發(fā)送FIFO 和接收FIFO 分別在另外兩個(gè)模塊內(nèi)完成。

        有限狀態(tài)機(jī)是實(shí)現(xiàn)時(shí)序電路常用的方式,很多數(shù)字系統(tǒng)的控制模型都采用這種方式,它是大多數(shù)數(shù)字電路的核心。相比其他的設(shè)計(jì)方案,狀態(tài)機(jī)的機(jī)構(gòu)模式簡單、運(yùn)行速度快、程序?qū)哟畏置?、可靠性更高?/p>

        根據(jù)電路設(shè)計(jì),本文設(shè)計(jì)的SPI 控制器主要分為SFR 總線控制單元和SPI 總線控制單元。SFR 總線控制單元主要是根據(jù)DW8051 的時(shí)序來進(jìn)行寄存器的讀寫操作,結(jié)構(gòu)比較簡單,在本文中不做詳細(xì)介紹;SPI 總線控制單元是設(shè)計(jì)重點(diǎn),本文采用有限狀態(tài)機(jī)來實(shí)現(xiàn)SPI 總線控制單元的核心時(shí)序電路。SPI 控制狀態(tài)機(jī)主要完成的任務(wù)是:根據(jù)CLK 分頻計(jì)數(shù)器和控制寄存器產(chǎn)生SCLK 信號;控制SPI 總線的工作模式;產(chǎn)生讀FIFO 信號,從發(fā)送緩沖FIFO中讀取數(shù)據(jù);產(chǎn)生寫FIFO 信號,向接收緩沖FIFO中寫入數(shù)據(jù);控制發(fā)送和接收移位寄存器的移位輸出和輸入;產(chǎn)生傳輸結(jié)束標(biāo)志。SPI 控制狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)換如圖4 所示。

        圖4 SPI 控制狀態(tài)機(jī)轉(zhuǎn)換結(jié)構(gòu)圖

        狀態(tài)機(jī)開始處于初始狀態(tài)(IDLE),設(shè)置SPI 時(shí)鐘極性,當(dāng)從設(shè)備選擇信號有效后,如果發(fā)送使能信號有效則狀態(tài)轉(zhuǎn)移到發(fā)送開始狀態(tài)(S1),如果接收使能信號有效則狀態(tài)轉(zhuǎn)移到接收開始狀態(tài)(R1);發(fā)送狀態(tài)S1 啟動(dòng)發(fā)送,打開傳輸標(biāo)志位,產(chǎn)生讀發(fā)送緩沖FIFO 信號;發(fā)送狀態(tài)S2 延遲一個(gè)節(jié)拍;發(fā)送狀態(tài)S3 讀取發(fā)送緩沖FIFO 數(shù)據(jù),并設(shè)置SPI 時(shí)鐘相位;發(fā)送狀態(tài)S4 翻轉(zhuǎn)SLCK 信號;發(fā)送狀態(tài)S5 移位輸出發(fā)送數(shù)據(jù)的一位,翻轉(zhuǎn)SLCK 信號并計(jì)數(shù),當(dāng)減一計(jì)數(shù)器歸零狀態(tài)轉(zhuǎn)移到IDLE,當(dāng)減一計(jì)數(shù)器不為零則狀態(tài)轉(zhuǎn)移到S4;接收狀態(tài)R1 啟動(dòng)接收,打開傳輸標(biāo)志位,并設(shè)置SPI 時(shí)鐘相位;接收狀態(tài)R2 翻轉(zhuǎn)SLCK信號;接收狀態(tài)R3 移位接收一位SPI 輸入信號,翻轉(zhuǎn)SLCK 信號并計(jì)數(shù),當(dāng)減一計(jì)數(shù)器歸零狀態(tài)轉(zhuǎn)移到IDLE,當(dāng)減一計(jì)數(shù)器不為零則狀態(tài)轉(zhuǎn)移到R2。

        在本文的設(shè)計(jì)中,采用獨(dú)熱(One Hot)碼對狀態(tài)進(jìn)行編碼。這種編碼方式用n 個(gè)觸發(fā)器實(shí)現(xiàn)n 個(gè)狀態(tài)的狀態(tài)機(jī),雖然使用了較多的觸發(fā)器,但所用組合電路可以省一些,因而使電路的速度和可靠性有顯著提高,而總的單元數(shù)并無增加。采用獨(dú)熱編碼后由了多余的狀態(tài),就有一些不可到達(dá)的狀態(tài)。為此,在case 語句的最后需要增加default 分支項(xiàng)。這可以用默認(rèn)項(xiàng)表示該項(xiàng),也可以用確定項(xiàng)表示,以確?;氐絀DLE 狀態(tài)[3]。用Verilog HDL 來描述狀態(tài)機(jī)時(shí)有多種方法,在本文中采用兩段式方法,用最常用的always 語句和case 語句。

        parameter Idle = 9’b000_000_001,

        S1 = 9’b000_000_010,

        ……

        R3 = 9’b100_000_000;

        always @(posedge i_clk)

        if(~SPE)

        state <= 8’h00;

        else

        state <= next_state;

        always @(state or …)

        case(state)

        Idle:begin

        ……

        end

        ……

        default:next_state = 9’b000_000_001;

        endcase

        3 仿真與驗(yàn)證

        在完成整個(gè)SPI 控制器模型設(shè)計(jì)以后,要對其進(jìn)行功能仿真和在FPGA 上進(jìn)行實(shí)際驗(yàn)證,本文功能仿真使用的工具是Modelsim 6.5f,F(xiàn)PGA 使用的是Altera 公司Cyclone Ⅱ系列的EP2C8Q208C8 芯片,工具是Quartus Ⅱ9.0。為了驗(yàn)證SPI 控制器功能的正確性,在本文中選用了一款SPI 接口的Flash,通過編程向Flash 中寫入指令,然后讀取指令。Flash 的型號為旺宏微電子的MX25L512C,該公司的Flash 提供的有Verilog 仿真模型,方便仿真。Flash 的連接方式如圖1 中的SPI 外設(shè)。仿真波形如圖5 所示,有波形圖可以看出,首先cs 線拉低使能FLASH,接著發(fā)送讀數(shù)據(jù)指令及地址0x03,0x00,0x00,然后可以從Flash 中讀取數(shù)據(jù)。在實(shí)際的仿真過程中,還做了更加詳細(xì)的驗(yàn)證,包括擦出Flash中的內(nèi)容,然后寫入新的數(shù)據(jù),最后再讀出顯示。對于SPI 控制器,我們還設(shè)置了4 種傳輸速率,以及對控制寄存器進(jìn)行不同的賦值,以產(chǎn)生不同的控制信號,最后都證明了SPI 控制器模塊功能的正確性。

        圖5 仿真波形圖

        然后在FPGA 上驗(yàn)證SPI 控制器模塊,整個(gè)過程同功能仿真類似,只是整個(gè)設(shè)計(jì)包括DW8051 內(nèi)核下載到FPGA 上,然后將真實(shí)的Flash(MX25L512C)連接到FPGA 的I/O 端口口上面,對Flash 進(jìn)行各種操作,驗(yàn)證整個(gè)設(shè)計(jì)的正確性。

        4 結(jié)論

        本文設(shè)計(jì)了一款基于DW8051 的SPI 控制器,該控制器基于DW8051 的SFR 總線,特點(diǎn)在于具有獨(dú)立的深度為16 的發(fā)送和接收緩沖FIFO、功能豐富的控制寄存器以及其擴(kuò)展性。本文設(shè)計(jì)的SPI 控制器不僅限于DW8051 的使用,通過對SFR 總線控制單元的修改,同樣可以作為其他微控制器的外圍設(shè)備使用。

        [1] Greg Osborn.嵌入式微控制器與處理器設(shè)計(jì)[M]. 北京:機(jī)械工業(yè)出版社,2011:79-81.

        [2] 李曉林,朱昱光,李臨生,等.單片機(jī)原理與接口技術(shù)[M].第2版.北京:電子工業(yè)出版社,2011:198-203.

        [3] 夏宇聞.Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程[M].第2 版. 北京:北京航空航天大學(xué)出版社,2009:11,19.

        [4] 孫豐軍,余春暄.SPI 串行總線接口的Verilog 實(shí)現(xiàn)[J].現(xiàn)代電子計(jì)數(shù),2005,16(207):105-109.

        [5] 楊承富,徐志軍.SPI 總線接口的FPGA 設(shè)計(jì)與實(shí)現(xiàn)[J].軍事通信計(jì)數(shù),2004,25(2):72-76.

        [6] 趙新麗,許忠仁,付貴增,等.基于FPGA 與單片機(jī)的SPI 接口的實(shí)現(xiàn)[J].工業(yè)儀表與自動(dòng)化裝置,2010,2:32-33.

        [7] Liu Tianxiang,Wang Yunfeng.IP Design of Universal Multiple Devices SPI Interface[C]//Anti-Counterfeiting,Security and Identification(ASID),2011 IEEE International Conference on,2011:169-172.

        [8] Zhang Jianlong,Wu Chunyu,Zhang Wenjing,et al.The Design and Realization of a Comprehensive SPI Interface Controller[C]//Mechanic Automation and Control Engineering(MACE),2011 Second International Conference on,2011:4529-4532.

        [9] Wikipedia,the free encyclopedia,“Serial Peripheral Interface Bus”[EB/OL].Available http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus.

        [10] Deepak Kumar Tala,“Verilog Tutorial”[EB/OL]. Available http://www.asicworld.com.

        [11] Oudjida A K,Berrandjia M L,Liacha A,et al. Design and Test of General-Purpose SPI Master/Slave IPs on OPB bus[C]//2010 7th International Multi-Conference on Systems Signals and Devices(SSD).2010:1-6.

        [12] Oudjida A K,Berrandjia ,M L,Tiar R,et al. FPGA Implementation of I2C & SPI Protocols:A Comparative Study[C]//2009 16th IEEE International Conference on Electronics,Circuits,and Systems(ICECS),2009:507-510.

        猜你喜歡
        信號設(shè)計(jì)
        信號
        鴨綠江(2021年35期)2021-04-19 12:24:18
        完形填空二則
        何為設(shè)計(jì)的守護(hù)之道?
        《豐收的喜悅展示設(shè)計(jì)》
        流行色(2020年1期)2020-04-28 11:16:38
        孩子停止長個(gè)的信號
        瞞天過?!律O(shè)計(jì)萌到家
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        基于LabVIEW的力加載信號采集與PID控制
        一種基于極大似然估計(jì)的信號盲抽取算法
        抽插丰满内射高潮视频| 少妇仑乱a毛片| 丰满少妇被猛男猛烈进入久久| 久久国产品野战| 免费在线观看视频专区| 风骚人妻一区二区三区| 少妇扒开毛茸茸的b自慰| 亚洲爆乳少妇无码激情| 日韩精品永久免费播放平台| 亚洲日本中文字幕乱码| 久久黄色视频| 无遮挡边摸边吃奶边做视频免费 | 男人添女人囗交做爰视频| 又白又嫩毛又多15p| 精品九九视频| 国产一区二区视频在线看| 国产精品视频永久免费播放| 中文字幕人妻丝袜乱一区三区| 国产精品深夜福利免费观看| 在线观看视频国产一区二区三区 | 伊人影院综合在线| 日本高清中文一区二区三区| 亚洲av熟女一区二区三区站| 欧美午夜刺激影院| 97视频在线观看免费| 亚洲天堂av免费在线| 久久久精品人妻一区二区三区四区| 毛多水多www偷窥小便| 综合色天天久久| 99麻豆久久精品一区二区| 性久久久久久| 初尝黑人巨砲波多野结衣| 亚洲欧美v国产蜜芽tv| 亚洲中文字幕日韩综合| 久久久久成人精品无码| 久久香蕉成人免费大片| 一本色道久久88综合亚精品| 日本xxxx色视频在线观看免费| 亚洲成av人片在线观看无码| 国产九九在线观看播放| 国产成人国产三级国产精品|