張榮剛,顧強(qiáng)
(中北大學(xué) 機(jī)電工程學(xué)院,太原 030051)
MicroBlaze軟核處理器的SPI控制器設(shè)計(jì)
張榮剛1,顧強(qiáng)2
(中北大學(xué) 機(jī)電工程學(xué)院,太原 030051)
設(shè)計(jì)了一種基于Xilinx公司提供的MicroBlaze微處理器的SPI控制器。該SPI具有可配置的分頻器、三線-四線轉(zhuǎn)換功能,同時(shí)可以根據(jù)外接的芯片SPI總線需求配置其數(shù)據(jù)發(fā)送的方式。該SPI控制器的邏輯功能在Modelsim下仿真結(jié)果正確,并且在Virtex-7芯片上運(yùn)用此控制器配置多款高速數(shù)據(jù)轉(zhuǎn)換器、時(shí)鐘芯片等。驗(yàn)證結(jié)果表明,該SPI控制器具有使用靈活、便于移植、易于使用、可以同時(shí)配置多片器件等優(yōu)點(diǎn)。
串行外設(shè)總線;MicroBlaze;FPGA;Vivado
現(xiàn)代通信系統(tǒng)中很多集成電路的配置總線大多為I2C、SPI等低速總線,這類(lèi)總線速度從幾十kbps到幾十Mbps不等。常用的設(shè)計(jì)方案是用一顆微控制器芯片來(lái)控制這些外設(shè)器件,采用FPGA傳輸高速數(shù)據(jù),這樣的設(shè)計(jì)對(duì)于硬件工程師來(lái)說(shuō)無(wú)疑加大了工作量和設(shè)計(jì)成本,得不償失。
MicroBlaze軟核是一款針對(duì)Xilinx FPGA器件而優(yōu)化的功能強(qiáng)大的32位微處理器,支持用于嵌入式處理器的標(biāo)準(zhǔn)AXI總線外設(shè)集合,具有兼容性和可重復(fù)利用性,最精簡(jiǎn)的核只需要將近400個(gè)Sclice[1]。利用適當(dāng)?shù)募夹g(shù),用戶可以開(kāi)發(fā)構(gòu)造簡(jiǎn)單的預(yù)配置MicroBlaze微控制器,并方便快捷地將其添加到任何FPGA設(shè)計(jì)中,還可將控制器的實(shí)例直接加入HDL。用戶能在標(biāo)準(zhǔn)的FPGA設(shè)計(jì)流程中直接使用,無(wú)須特殊的腳本或復(fù)雜的步驟,僅需三個(gè)文件即可啟動(dòng)設(shè)計(jì)工作,包括兩個(gè)硬件實(shí)施文件和一個(gè)軟件定義文件。這種方法使工程師不用學(xué)習(xí)或者只需很少量的學(xué)習(xí)就能快速啟動(dòng)FPGA嵌入式設(shè)計(jì)工作。同時(shí)Xilinx公司提供了與標(biāo)準(zhǔn)的Eclipse一致的軟件工具SDK,以及大量可用戶定制的驅(qū)動(dòng)程序,符合 POSIX 規(guī)范的內(nèi)核庫(kù)、網(wǎng)絡(luò)和文件處理庫(kù),可以簡(jiǎn)單地通過(guò)MicroBlaze與外設(shè)進(jìn)行通信。
SPI(串行外設(shè)接口)總線是Motorola公司推出的一種高速、同步、全雙工的通信總線。它只需要4條線就可以完成MCU與各種外圍器件的通信,正是由于這種簡(jiǎn)單易用的特性,越來(lái)越多的芯片集成了這種通信協(xié)議。許多高速模/數(shù)轉(zhuǎn)換器、高頻PLL時(shí)鐘芯片等,通常使用SPI接口配置其寄存器。該設(shè)計(jì)使用Xilinx公司的Virtex-7系列FPGA芯片,利用Verilog HDL語(yǔ)言編寫(xiě)SPI模塊,并封裝成IP核添加到MicroBlaze的AXI總線上。
MicroBlaze是一款基于構(gòu)造的嵌入式微處理器,其結(jié)構(gòu)如圖1所示,它的顯著優(yōu)勢(shì)在于能滿足復(fù)雜應(yīng)用的需求,除了運(yùn)行簡(jiǎn)單的通用應(yīng)用以外,還能運(yùn)行操作系統(tǒng)[6]。MicroBlaze 是高度可配置的 IP 核,支持 70 多種配置選項(xiàng)。用戶可使用高度靈活的可配置內(nèi)核,能夠?qū)崿F(xiàn)幾乎任何處理器的使用案例,從極小型狀態(tài)機(jī)或微控制器到運(yùn)行 Linux 的高性能計(jì)算密集型微處理器系統(tǒng),無(wú)所不能。
圖1 MicroBlaze 處理器結(jié)構(gòu)
該IP既可配置為在三級(jí)管線模式下工作(針對(duì)尺寸進(jìn)行優(yōu)化),也可配置為在五級(jí)管線模式下工作(針對(duì)速度進(jìn)行優(yōu)化),因而可提供比其他任何 FPGA 軟處理解決方案更快的 DMIP 性能。
該設(shè)計(jì)采用的FPGA為XC7V485T芯片,擁有75 900個(gè)Slices,485 760個(gè)邏輯單元,片內(nèi)RAM共37 080 KB,14個(gè)時(shí)鐘CMT模塊,2 800個(gè)DSP Slices,56個(gè)GTX(最高12.5 Gb/s)高速收發(fā)器,4個(gè)PCIE GEN2模塊。同時(shí)此芯片內(nèi)集成的MicroBlaze軟核處理器最高工作頻率可達(dá)到389 MHz,對(duì)于不同的應(yīng)用情況,可以選擇minimum area、maximum performance、maximum frequency、linux with MMU、typical、frequency optimized等配置模式,各種模式占用的資源也不盡相同[6]。
SPI總線是Motorola公司提出的一個(gè)同步串行外設(shè)接口,具有接口線少、通信效率高等特點(diǎn)。該設(shè)計(jì)中用于驗(yàn)證的外設(shè)器件為ADI公司的AD9265模數(shù)轉(zhuǎn)換器,接口實(shí)現(xiàn)方案與業(yè)界標(biāo)準(zhǔn)SPI端口兼容,并且至少采用雙線式模式和可選的芯片選擇引腳[7]。
ADI公司高速轉(zhuǎn)換器的SPI端口由3個(gè)引腳組成:串行時(shí)鐘引腳(SCLK)、串行輸入/輸出引腳(SDIO)和片選引腳(CSB)。
串行時(shí)鐘(SCLK):該引腳為串行移位時(shí)鐘輸入引腳。為降低該引腳對(duì)視中線路上噪聲的敏感度,采用施密特觸發(fā)器實(shí)現(xiàn),并且通過(guò)50 kΩ電阻下拉到地。SCLK的最低保證頻率為25 MHz,輸入數(shù)據(jù)在上升沿有效,輸出數(shù)據(jù)在下降沿有效。保持時(shí)間(tDH)典型值為0 ns,SCLK與SDIO之間要求最短5 ns的建立時(shí)間(tDS)。
串行數(shù)據(jù)輸入/輸出(SDIO):該引腳具有雙重用途。通常用作輸入或輸出,具體取決于所發(fā)送的指令(讀或?qū)?,以及時(shí)序幀中的相對(duì)位置(指令周期或數(shù)據(jù)周期)。在寫(xiě)或讀操作的第一階段,該引腳用作輸入,將該信息傳遞到內(nèi)部狀態(tài)機(jī)。如果該命令被確定為讀命令,狀態(tài)機(jī)將把該引腳(SDIO)變?yōu)檩敵?;如果該命令被確定為寫(xiě)命令,則在指令周期內(nèi),SDIO引腳始終為輸入。
芯片選擇(CSB):該引腳是一種低電平有效控制,用來(lái)選通讀寫(xiě)周期,CSB可以在多種模式下工作。當(dāng)該線為低電平時(shí),器件被選擇,SCLK和SDIO線路上的信息便會(huì)得到處理;該引腳為高電平時(shí),器件會(huì)忽略SCLK和SDIO線路上的所有信息。在一些配置中,CSB可以停止在高電平,即在多個(gè)時(shí)鐘周期內(nèi)保持高電平,如果傳輸三個(gè)字節(jié)或更少的字節(jié)(不包含指令信息),則CSB可以在字節(jié)(包括指令信息的字節(jié))之間停止在高電平。
該SPI控制器主要分為SPI配置模塊、SPI控制模塊、SPI輸出模塊。首先由spi_ff_i[31:0]、spi_fe_i[31:0]、spi_fd_i[31:0]三個(gè)寄存器將SPI的時(shí)鐘分頻、傳輸?shù)刂贰?shù)據(jù)長(zhǎng)度等參數(shù)以及操作開(kāi)始請(qǐng)求信號(hào)送入配置模塊,然后配置模塊將各項(xiàng)參數(shù)從寄存器中讀出并送入控制模塊,最后由輸出模塊將數(shù)據(jù)與SCLK時(shí)鐘同步輸出到MOSI和MISO端口。
由于SPI總線工作頻率從幾Mbps到二十幾Mbps不等,因此在此SPI控制器中需要分頻模塊將處理器工作頻率降低到低速范圍才能滿足一些高性能時(shí)鐘芯片、ADC、DAC芯片的微總線時(shí)序要求。圖2所示為該SPI控制器的分頻器模塊分為CLK_IDLE(6’h01)、 CLK_CNT_OP(6’h02)、CLK_HALF_PERIOD(6’h04)、CLK_FULL_PERIOD(6’h08)、CLK_END_PERIOD(6’h10)、CNT_END(6’h20)共6個(gè)狀態(tài)。當(dāng)檢測(cè)到cfg_op_req信號(hào)置1后,分頻模塊啟動(dòng),當(dāng)時(shí)鐘計(jì)數(shù)器達(dá)到half_sclk_period-1和sclk_period-2時(shí),分別進(jìn)入下一狀態(tài),當(dāng)處于CLK_END_PERIOD時(shí),如果檢測(cè)到主狀態(tài)機(jī)的op_done信號(hào)置1,則分頻器停止運(yùn)行。
圖2 分頻模塊狀態(tài)機(jī)
圖3和圖4為Modelsim對(duì)分頻模塊的仿真波形,sclk_period為24,經(jīng)過(guò)驗(yàn)證與設(shè)計(jì)一致。
圖3 分頻模塊仿真圖
圖4 系統(tǒng)時(shí)鐘與SCLK仿真
如圖5所示, SPI主狀態(tài)機(jī)模塊分為SPI_IDLE(7’h01)、SPI_INSTRUCTION_LOAD(7’02)、SPI_CS_SU(7’h04)、SPI_WRITE(7’h08)、SPI_READ(7’h10)、SPI_OP_RECOVERY(7’h20)、SPI_OP_DONE(7’h40)共7個(gè)狀態(tài)。
圖5 SPI主狀態(tài)機(jī)
當(dāng)cfg_op_req信號(hào)置1后,SPI控制器開(kāi)始啟動(dòng),讀取SPI控制器的各項(xiàng)參數(shù)后,進(jìn)入地址傳輸狀態(tài),當(dāng)sck_cnt寄存器的值達(dá)到addr_size后,根據(jù)命令類(lèi)型spi_cfg_type值,分別進(jìn)入讀或?qū)憼顟B(tài),最后當(dāng)sck_cnt達(dá)到addr_size與transfer_size的和后,進(jìn)入最后一個(gè)SPI_OP_DONE狀態(tài),將op_done寄存器置1,SPI控制器返回IDLE狀態(tài)。
SPI控制器主狀態(tài)機(jī)仿真波形如圖6和圖7所示。
圖6和圖7分別為SPI_WRITE跳轉(zhuǎn)到SPI_RECOVERY、SPI_OP_DONE狀態(tài)和SPI_CS_SU跳轉(zhuǎn)到SPI_WRITE,由于SCLK每次前半周期為低,后半周期為高,因此每次當(dāng)sck_ne為1時(shí),主狀態(tài)機(jī)才進(jìn)行跳轉(zhuǎn)。SPI一次完整操作仿真如圖8所示。
該SPI控制器的cs_n寄存器寬度為8位,因此SPI master控制器可以同時(shí)配置8片slave器件。當(dāng)cs_n置0時(shí),片選信號(hào)選中,SCLK、SDIO信號(hào)則開(kāi)始配置該選中的器件。
Virtex-7系列的工程文件需要在Xilinx公司提供的工具Vivado下進(jìn)行編譯、綜合、實(shí)現(xiàn)、下載、調(diào)試等流程。Vivado Design Suite 可提供業(yè)界首款即插即用型 IP 集成設(shè)計(jì)環(huán)境并具有IP 集成器特性,從而解決了 RTL 設(shè)計(jì)生產(chǎn)力問(wèn)題。Vivado IP 集成器可提供基于 Tcl、設(shè)計(jì)期正確的圖形化設(shè)計(jì)開(kāi)發(fā)流程。IPI 特性可提供具有器件和平臺(tái)意識(shí)的互動(dòng)環(huán)境,能支持關(guān)鍵 IP 接口的智能自動(dòng)連接、一鍵式 IP 子系統(tǒng)生成、實(shí)時(shí) DRC 和接口修改傳遞等功能,此外還提供強(qiáng)大的調(diào)試功能。
在 IP 之間建立連接時(shí),設(shè)計(jì)人員工作在“接口”而不是“信號(hào)”的抽象層面上,從而大幅提高了生產(chǎn)力。這通常采用業(yè)界標(biāo)準(zhǔn)的 AXI4 接口,不過(guò) IP 集成器也支持?jǐn)?shù)十個(gè)其他接口。
創(chuàng)建嵌入式處理器硬件設(shè)計(jì)時(shí),可以在IP 集成器環(huán)境中實(shí)例化、配置和組裝處理器內(nèi)核及其接口。該工具能執(zhí)行基于規(guī)則的連接功能,并提供設(shè)計(jì)輔助。設(shè)計(jì)通過(guò)實(shí)現(xiàn)完成編譯后被導(dǎo)出到Xilinx軟件開(kāi)發(fā)套件(SDK) 中,用于軟件開(kāi)發(fā)與驗(yàn)證流程。仿真與調(diào)試功能使工程師可以跨兩個(gè)域?qū)υO(shè)計(jì)進(jìn)行仿真和驗(yàn)證。
IP集成器中可以設(shè)置4~256個(gè)32位寬的寄存器,并可以通過(guò)AXI4總線設(shè)置寄存器的值。在IP設(shè)計(jì)時(shí),可以選擇AXI4_Lite、AXI4_Stream、AXI4三種:AXI4用于高性能內(nèi)存映射要求;AXI4-Lite用于簡(jiǎn)單、低吞吐量的內(nèi)存映射通信(例如與控制和狀態(tài)寄存器之間的通信);AXI4-Stream用于高速流數(shù)據(jù)。
圖6 主狀態(tài)機(jī)仿真a
圖7 主狀態(tài)機(jī)仿真b
圖8 SPI一次完整操作仿真
由于該SPI控制器與MicroBlaze軟核的交互數(shù)據(jù)主要為低速,少量數(shù)據(jù),故可以選擇AXI4_Lite模式。
該SPI控制器封裝成IP核時(shí),共需要5個(gè)32位寄存器,spi_ff_i、spi_fe_i、spi_fd_i、讀寫(xiě)請(qǐng)求request寄存器,以及一個(gè)回讀寄存器read_back_reg 。圖9所示adc16_spi_0即為該SPI控制器。
圖9 MicroBlaze嵌入式設(shè)計(jì)
為了節(jié)省引腳,AD9265的SPI總線采用三線模式,即MOSI和MISO信號(hào)合并成SDIO端口。INOUT在具體實(shí)現(xiàn)上一般用三態(tài)門(mén)來(lái)實(shí)現(xiàn)。三態(tài)門(mén)的第三個(gè)狀態(tài)就是高阻'Z'。當(dāng)INOUT端口不輸出時(shí),將三態(tài)門(mén)置高阻。該端口為INOUT信號(hào),當(dāng)SDIO為輸出時(shí),MISO為高阻態(tài)1’bz,這就是所說(shuō)的高阻輸入;同樣當(dāng)SDIO讀取從slave器件進(jìn)來(lái)的數(shù)據(jù)時(shí),mosi為高阻態(tài)1’bz。
如圖9所示,該設(shè)計(jì)選用的MicroBlaze為typical模式,設(shè)計(jì)中除了SPI控制器還有uartlite、clock_module、reset_module、axi_connector,以及MicroBlaze_debug_module和一個(gè)64 KB的local_bram作為MicroBlaze的數(shù)據(jù)和指令緩存。
完成綜合、實(shí)現(xiàn)并生成bit文件后可以將硬件信息導(dǎo)入SDK中,利用封裝SPI控制器時(shí)Xilinx自動(dòng)生成的driver函數(shù)來(lái)啟動(dòng)SPI控制器。
在ISE中可以捕捉信號(hào)的chipscope工具,同樣到了Vivado下可以使用與其功能相似的debug工具捕捉信號(hào),圖10為調(diào)試SPI控制器時(shí)捕捉到的sclk、miso、mosi、cs_n等信號(hào),并且與圖8中通過(guò)Modelsim仿真得到的波形一致。
圖10 Debug捕捉到的SPI信號(hào)
該SPI控制器設(shè)計(jì)在某公司開(kāi)發(fā)的芯片測(cè)試系統(tǒng)中已經(jīng)得到運(yùn)用,運(yùn)用該控制器已經(jīng)對(duì)各類(lèi)使用SPI總線的芯片成功調(diào)試。結(jié)果表明,該SPI控制器使用靈活,并且可以根據(jù)實(shí)際芯片的需求改變其輸出模式。同時(shí)該控制器可配置多片器件,并且減少了硬件工程師的設(shè)計(jì)工作,對(duì)于高速數(shù)據(jù)傳輸和低速、小吞吐量控制通信功能,只用一顆FPGA器件即可完成。對(duì)于整個(gè)系統(tǒng)來(lái)說(shuō)精簡(jiǎn)了很多不必要的模塊,節(jié)省了成本。
[1] 王爾申,張淑芳,張芝賢.基于Xilinx MicroBlaze的嵌入式GPS接收機(jī)研究[J].通信技術(shù),2010,43(10):28-30.
[2] 張斌,劉宇,榮金峰.通用型SPI總線的IP設(shè)計(jì)與實(shí)現(xiàn)[J].中國(guó)集成電路,2011,20(7):43-47.
[3] 阮芳,馮永新.基于Xilinx MicroBlaze的嵌入式I/O系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子器件,2008,31(2):626-630.
[4] 龍霞飛,李仁發(fā).MicroBlaze微處理器IP Core的結(jié)構(gòu)及應(yīng)用[J].微處理器,2004,25(6):6-9.
[5] Xilinx corporation.ug473 7Series Memory Resources(v1.10)[EB/OL].[2016-12].https://www.xilinx.com/support/documentation/user_guides/ug473_7Series_Memory_Resources.pdf.
[6] Xilinx corporation.ug984 vivado MicroBlaze ref(v2016.3)[EB/OL].[2016-12].https://www.xilinx.com/support/documentation/sw_manuals/xilinx2016_3/ug984-vivado-MicroBlaze-ref.pdf.
[7] ADI corporation.AN-877_cn 通過(guò)SPI與高速ADC接口[EB/OL].[2016-12].http://www.analog.com/media/cn/technical-documentation/application-notes/AN-877_cn.pdf.
[8] 楊定定,施慧彬.基于AXI總線的MicroBlaze雙核SoPC系統(tǒng)設(shè)計(jì)[J].電子產(chǎn)品世界,2012,19(1):76-77.
[9] 張松,李筠.FPGA的模塊化設(shè)計(jì)方法[J].電子測(cè)量與儀器學(xué)報(bào),2014,28(5):560-565.
[10] 劉永健.軟核嵌入處理器MicroBlaze[J].計(jì)算機(jī)與網(wǎng)絡(luò),2012,38(15):64-66.
[11] 張桂興,張英敏,張鵬.基于IP核與ModelSim的正弦波發(fā)生器仿真平臺(tái)建立[J].測(cè)控技術(shù),2011,30(1):28-31.
[12] 顧頡,胡生亮,李朝旭.基于SPI接口ADC和FPGA的并行多通道同步采樣系統(tǒng)設(shè)計(jì)[J].艦船電子工程,2011,31(12):146-149.
張榮剛(研究生),主要研究方向?yàn)榛旌闲盘?hào)芯片測(cè)試系統(tǒng)研究;顧強(qiáng)(教授),主要從事機(jī)電系統(tǒng)設(shè)計(jì)與分析、引信技術(shù)研究。
SPI Controller Design Based on Soft-core Processor MicroBlaze
Zhang Ronggang1,Gu Qiang2
(North Central University,School of Mechanical and Electrical Engineering,Taiyuan 030051,China)
In the paper,a SPI controller is designed which is based on MicroBlaze microprocessor provided by Xilinx.The SPI has a configurable divider,three-wire-to-four-wire conversion,and can configure the data transmission way according to the requirements of the external chip SPI bus.The logic of the SPI controller simulation results in Modelsim are correct,and can use the controller to configure a variety of the high-speed data converters,the clock chips in the Virtex-7 chip.The verification results show that the SPI controller has the advantages of flexibility,portability,easy to use and multiple devices configuration at the same time.
SPI controller;MicroBlaze;FPGA;Vivado
TP368
A
士然
2016-12-16)