張榮剛,顧強
(中北大學 機電工程學院,太原 030051)
MicroBlaze軟核處理器的SPI控制器設計
張榮剛1,顧強2
(中北大學 機電工程學院,太原 030051)
設計了一種基于Xilinx公司提供的MicroBlaze微處理器的SPI控制器。該SPI具有可配置的分頻器、三線-四線轉換功能,同時可以根據外接的芯片SPI總線需求配置其數據發送的方式。該SPI控制器的邏輯功能在Modelsim下仿真結果正確,并且在Virtex-7芯片上運用此控制器配置多款高速數據轉換器、時鐘芯片等。驗證結果表明,該SPI控制器具有使用靈活、便于移植、易于使用、可以同時配置多片器件等優點。
串行外設總線;MicroBlaze;FPGA;Vivado
現代通信系統中很多集成電路的配置總線大多為I2C、SPI等低速總線,這類總線速度從幾十kbps到幾十Mbps不等。常用的設計方案是用一顆微控制器芯片來控制這些外設器件,采用FPGA傳輸高速數據,這樣的設計對于硬件工程師來說無疑加大了工作量和設計成本,得不償失。
MicroBlaze軟核是一款針對Xilinx FPGA器件而優化的功能強大的32位微處理器,支持用于嵌入式處理器的標準AXI總線外設集合,具有兼容性和可重復利用性,最精簡的核只需要將近400個Sclice[1]。利用適當的技術,用戶可以開發構造簡單的預配置MicroBlaze微控制器,并方便快捷地將其添加到任何FPGA設計中,還可將控制器的實例直接加入HDL。用戶能在標準的FPGA設計流程中直接使用,無須特殊的腳本或復雜的步驟,僅需三個文件即可啟動設計工作,包括兩個硬件實施文件和一個軟件定義文件。這種方法使工程師不用學習或者只需很少量的學習就能快速啟動FPGA嵌入式設計工作。同時Xilinx公司提供了與標準的Eclipse一致的軟件工具SDK,以及大量可用戶定制的驅動程序,符合 POSIX 規范的內核庫、網絡和文件處理庫,可以簡單地通過MicroBlaze與外設進行通信。
SPI(串行外設接口)總線是Motorola公司推出的一種高速、同步、全雙工的通信總線。它只需要4條線就可以完成MCU與各種外圍器件的通信,正是由于這種簡單易用的特性,越來越多的芯片集成了這種通信協議。許多高速模/數轉換器、高頻PLL時鐘芯片等,通常使用SPI接口配置其寄存器。該設計使用Xilinx公司的Virtex-7系列FPGA芯片,利用Verilog HDL語言編寫SPI模塊,并封裝成IP核添加到MicroBlaze的AXI總線上。
MicroBlaze是一款基于構造的嵌入式微處理器,其結構如圖1所示,它的顯著優勢在于能滿足復雜應用的需求,除了運行簡單的通用應用以外,還能運行操作系統[6]。MicroBlaze 是高度可配置的 IP 核,支持 70 多種配置選項。用戶可使用高度靈活的可配置內核,能夠實現幾乎任何處理器的使用案例,從極小型狀態機或微控制器到運行 Linux 的高性能計算密集型微處理器系統,無所不能。

圖1 MicroBlaze 處理器結構
該IP既可配置為在三級管線模式下工作(針對尺寸進行優化),也可配置為在五級管線模式下工作(針對速度進行優化),因而可提供比其他任何 FPGA 軟處理解決方案更快的 DMIP 性能。
該設計采用的FPGA為XC7V485T芯片,擁有75 900個Slices,485 760個邏輯單元,片內RAM共37 080 KB,14個時鐘CMT模塊,2 800個DSP Slices,56個GTX(最高12.5 Gb/s)高速收發器,4個PCIE GEN2模塊。同時此芯片內集成的MicroBlaze軟核處理器最高工作頻率可達到389 MHz,對于不同的應用情況,可以選擇minimum area、maximum performance、maximum frequency、linux with MMU、typical、frequency optimized等配置模式,各種模式占用的資源也不盡相同[6]。
SPI總線是Motorola公司提出的一個同步串行外設接口,具有接口線少、通信效率高等特點。該設計中用于驗證的外設器件為ADI公司的AD9265模數轉換器,接口實現方案與業界標準SPI端口兼容,并且至少采用雙線式模式和可選的芯片選擇引腳[7]。
ADI公司高速轉換器的SPI端口由3個引腳組成:串行時鐘引腳(SCLK)、串行輸入/輸出引腳(SDIO)和片選引腳(CSB)。
串行時鐘(SCLK):該引腳為串行移位時鐘輸入引腳。為降低該引腳對視中線路上噪聲的敏感度,采用施密特觸發器實現,并且通過50 kΩ電阻下拉到地。SCLK的最低保證頻率為25 MHz,輸入數據在上升沿有效,輸出數據在下降沿有效。保持時間(tDH)典型值為0 ns,SCLK與SDIO之間要求最短5 ns的建立時間(tDS)。
串行數據輸入/輸出(SDIO):該引腳具有雙重用途。通常用作輸入或輸出,具體取決于所發送的指令(讀或寫),以及時序幀中的相對位置(指令周期或數據周期)。在寫或讀操作的第一階段,該引腳用作輸入,將該信息傳遞到內部狀態機。如果該命令被確定為讀命令,狀態機將把該引腳(SDIO)變為輸出;如果該命令被確定為寫命令,則在指令周期內,SDIO引腳始終為輸入。
芯片選擇(CSB):該引腳是一種低電平有效控制,用來選通讀寫周期,CSB可以在多種模式下工作。當該線為低電平時,器件被選擇,SCLK和SDIO線路上的信息便會得到處理;該引腳為高電平時,器件會忽略SCLK和SDIO線路上的所有信息。在一些配置中,CSB可以停止在高電平,即在多個時鐘周期內保持高電平,如果傳輸三個字節或更少的字節(不包含指令信息),則CSB可以在字節(包括指令信息的字節)之間停止在高電平。
該SPI控制器主要分為SPI配置模塊、SPI控制模塊、SPI輸出模塊。首先由spi_ff_i[31:0]、spi_fe_i[31:0]、spi_fd_i[31:0]三個寄存器將SPI的時鐘分頻、傳輸地址、數據長度等參數以及操作開始請求信號送入配置模塊,然后配置模塊將各項參數從寄存器中讀出并送入控制模塊,最后由輸出模塊將數據與SCLK時鐘同步輸出到MOSI和MISO端口。
由于SPI總線工作頻率從幾Mbps到二十幾Mbps不等,因此在此SPI控制器中需要分頻模塊將處理器工作頻率降低到低速范圍才能滿足一些高性能時鐘芯片、ADC、DAC芯片的微總線時序要求。圖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個狀態。當檢測到cfg_op_req信號置1后,分頻模塊啟動,當時鐘計數器達到half_sclk_period-1和sclk_period-2時,分別進入下一狀態,當處于CLK_END_PERIOD時,如果檢測到主狀態機的op_done信號置1,則分頻器停止運行。

圖2 分頻模塊狀態機
圖3和圖4為Modelsim對分頻模塊的仿真波形,sclk_period為24,經過驗證與設計一致。

圖3 分頻模塊仿真圖

圖4 系統時鐘與SCLK仿真
如圖5所示, SPI主狀態機模塊分為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個狀態。

圖5 SPI主狀態機
當cfg_op_req信號置1后,SPI控制器開始啟動,讀取SPI控制器的各項參數后,進入地址傳輸狀態,當sck_cnt寄存器的值達到addr_size后,根據命令類型spi_cfg_type值,分別進入讀或寫狀態,最后當sck_cnt達到addr_size與transfer_size的和后,進入最后一個SPI_OP_DONE狀態,將op_done寄存器置1,SPI控制器返回IDLE狀態。
SPI控制器主狀態機仿真波形如圖6和圖7所示。
圖6和圖7分別為SPI_WRITE跳轉到SPI_RECOVERY、SPI_OP_DONE狀態和SPI_CS_SU跳轉到SPI_WRITE,由于SCLK每次前半周期為低,后半周期為高,因此每次當sck_ne為1時,主狀態機才進行跳轉。SPI一次完整操作仿真如圖8所示。
該SPI控制器的cs_n寄存器寬度為8位,因此SPI master控制器可以同時配置8片slave器件。當cs_n置0時,片選信號選中,SCLK、SDIO信號則開始配置該選中的器件。
Virtex-7系列的工程文件需要在Xilinx公司提供的工具Vivado下進行編譯、綜合、實現、下載、調試等流程。Vivado Design Suite 可提供業界首款即插即用型 IP 集成設計環境并具有IP 集成器特性,從而解決了 RTL 設計生產力問題。Vivado IP 集成器可提供基于 Tcl、設計期正確的圖形化設計開發流程。IPI 特性可提供具有器件和平臺意識的互動環境,能支持關鍵 IP 接口的智能自動連接、一鍵式 IP 子系統生成、實時 DRC 和接口修改傳遞等功能,此外還提供強大的調試功能。
在 IP 之間建立連接時,設計人員工作在“接口”而不是“信號”的抽象層面上,從而大幅提高了生產力。這通常采用業界標準的 AXI4 接口,不過 IP 集成器也支持數十個其他接口。
創建嵌入式處理器硬件設計時,可以在IP 集成器環境中實例化、配置和組裝處理器內核及其接口。該工具能執行基于規則的連接功能,并提供設計輔助。設計通過實現完成編譯后被導出到Xilinx軟件開發套件(SDK) 中,用于軟件開發與驗證流程。仿真與調試功能使工程師可以跨兩個域對設計進行仿真和驗證。
IP集成器中可以設置4~256個32位寬的寄存器,并可以通過AXI4總線設置寄存器的值。在IP設計時,可以選擇AXI4_Lite、AXI4_Stream、AXI4三種:AXI4用于高性能內存映射要求;AXI4-Lite用于簡單、低吞吐量的內存映射通信(例如與控制和狀態寄存器之間的通信);AXI4-Stream用于高速流數據。

圖6 主狀態機仿真a

圖7 主狀態機仿真b

圖8 SPI一次完整操作仿真
由于該SPI控制器與MicroBlaze軟核的交互數據主要為低速,少量數據,故可以選擇AXI4_Lite模式。
該SPI控制器封裝成IP核時,共需要5個32位寄存器,spi_ff_i、spi_fe_i、spi_fd_i、讀寫請求request寄存器,以及一個回讀寄存器read_back_reg 。圖9所示adc16_spi_0即為該SPI控制器。

圖9 MicroBlaze嵌入式設計
為了節省引腳,AD9265的SPI總線采用三線模式,即MOSI和MISO信號合并成SDIO端口。INOUT在具體實現上一般用三態門來實現。三態門的第三個狀態就是高阻'Z'。當INOUT端口不輸出時,將三態門置高阻。該端口為INOUT信號,當SDIO為輸出時,MISO為高阻態1’bz,這就是所說的高阻輸入;同樣當SDIO讀取從slave器件進來的數據時,mosi為高阻態1’bz。
如圖9所示,該設計選用的MicroBlaze為typical模式,設計中除了SPI控制器還有uartlite、clock_module、reset_module、axi_connector,以及MicroBlaze_debug_module和一個64 KB的local_bram作為MicroBlaze的數據和指令緩存。
完成綜合、實現并生成bit文件后可以將硬件信息導入SDK中,利用封裝SPI控制器時Xilinx自動生成的driver函數來啟動SPI控制器。
在ISE中可以捕捉信號的chipscope工具,同樣到了Vivado下可以使用與其功能相似的debug工具捕捉信號,圖10為調試SPI控制器時捕捉到的sclk、miso、mosi、cs_n等信號,并且與圖8中通過Modelsim仿真得到的波形一致。

圖10 Debug捕捉到的SPI信號
該SPI控制器設計在某公司開發的芯片測試系統中已經得到運用,運用該控制器已經對各類使用SPI總線的芯片成功調試。結果表明,該SPI控制器使用靈活,并且可以根據實際芯片的需求改變其輸出模式。同時該控制器可配置多片器件,并且減少了硬件工程師的設計工作,對于高速數據傳輸和低速、小吞吐量控制通信功能,只用一顆FPGA器件即可完成。對于整個系統來說精簡了很多不必要的模塊,節省了成本。
[1] 王爾申,張淑芳,張芝賢.基于Xilinx MicroBlaze的嵌入式GPS接收機研究[J].通信技術,2010,43(10):28-30.
[2] 張斌,劉宇,榮金峰.通用型SPI總線的IP設計與實現[J].中國集成電路,2011,20(7):43-47.
[3] 阮芳,馮永新.基于Xilinx MicroBlaze的嵌入式I/O系統設計與實現[J].電子器件,2008,31(2):626-630.
[4] 龍霞飛,李仁發.MicroBlaze微處理器IP Core的結構及應用[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 通過SPI與高速ADC接口[EB/OL].[2016-12].http://www.analog.com/media/cn/technical-documentation/application-notes/AN-877_cn.pdf.
[8] 楊定定,施慧彬.基于AXI總線的MicroBlaze雙核SoPC系統設計[J].電子產品世界,2012,19(1):76-77.
[9] 張松,李筠.FPGA的模塊化設計方法[J].電子測量與儀器學報,2014,28(5):560-565.
[10] 劉永健.軟核嵌入處理器MicroBlaze[J].計算機與網絡,2012,38(15):64-66.
[11] 張桂興,張英敏,張鵬.基于IP核與ModelSim的正弦波發生器仿真平臺建立[J].測控技術,2011,30(1):28-31.
[12] 顧頡,胡生亮,李朝旭.基于SPI接口ADC和FPGA的并行多通道同步采樣系統設計[J].艦船電子工程,2011,31(12):146-149.
張榮剛(研究生),主要研究方向為混合信號芯片測試系統研究;顧強(教授),主要從事機電系統設計與分析、引信技術研究。
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)