摘 要: 給出了一個可用于SoC設(shè)計的SPI接口IP核的RTL設(shè)計與功能仿真。采用AMBA 2.0總線標(biāo)準(zhǔn)來實現(xiàn)SPI接口在外部設(shè)備和內(nèi)部系統(tǒng)之間進行通信,在數(shù)據(jù)傳輸部分,摒棄傳統(tǒng)的需要一個專門的移位傳輸寄存器實現(xiàn)串/并轉(zhuǎn)換的設(shè)計方法,采用復(fù)用寄存器的方法,把移位傳輸寄存器和發(fā)送寄存器結(jié)合在一起,提高了傳輸速度,也節(jié)約了硬件資源。采用SoC驗證平臺進行SoC環(huán)境下對IP的驗證,在100 MHz時鐘頻率下的仿真和驗證結(jié)果表明,SPI接口實現(xiàn)了數(shù)據(jù)傳輸,且滿足時序設(shè)計要求。
關(guān)鍵詞: SPI協(xié)議; AMBA總線; SoC設(shè)計; 數(shù)據(jù)傳輸
中圖分類號: TN402?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2013)24?0149?03
Design and verification of SPI applied to SoC
KUANG Chun?yu, MA Qi, CHEN Ke?ming
(Microelectronics CAD Center, Hangzhou Dianzi University, Hangzhou 310018, China)
Abstract: The RTL design and functional simulation of SPI IP core applied to SoC design is presented in this paper. The AMBA 2.0 bus standards is adopted to achieve the communication between the peripheral devices and the internal system through SPI. As fore data transmission section, the traditional design method was abandoned, which needs a specific shift register for serial/parallel transfer. The shifting transmission register and receive register are put together by the reuse registers to improve the speed and save the hardware resources. IP is verified with an SoC verification platform under SoC environment. The results of simulation at the clock frequency of 100 MHZ show that the design can achieve data transmission and meet the requirements of time?sequence design.
Keywords: SPI I ptotocol; AMBA bus; SoC design; data transmission
0 引 言
SPI(Serial Peripheral Interface)是一種同步串行總線接口,很多器件如E2PROM、FLASH、實時時鐘、A/D轉(zhuǎn)換器等都用到了SPI接口[1],它也是SoC中的一個常用外圍功能模塊。AMBA總線是由ARM公司開發(fā)的一種高性能、開放性SoC系統(tǒng)總線,它主要包括AHB,ASB和APB三種總線類型[2]。AHB總線主要用于連接高性能、高速度的系統(tǒng)模塊,如CPU,DSP,SRAM等;APB總線主要用于連接低速外圍模塊,如UART,I2C等,接口簡單,效率高,功耗低[3];ASB總線通過連接系統(tǒng)高速部件來實現(xiàn)高速通信,一般較少用到。
本文設(shè)計一個可作為IP核用于SoC設(shè)計的SPI接口,采用AMBA2.0總線標(biāo)準(zhǔn)來實現(xiàn)SPI接口在外部設(shè)備和內(nèi)部系統(tǒng)之間進行通信,SPI接口作為低速外圍模塊掛載在APB總線上。
1 SPI接口的定義
1.1 接口信號
SPI的接口信號為同步串行時鐘SCLK、主機輸入/從機輸出MISO、主機輸出/從機輸入MOSI、從機選擇[SS](低電平有效)[4],由于只用到四根線工作,與其他接口相比具有結(jié)構(gòu)簡單、速度快的優(yōu)點。SPI有主/從兩種工作模式,SPI總線的串行時鐘SCLK用來同步數(shù)據(jù)傳輸,在主模式下由主機產(chǎn)生,從機選擇信號[SS]用來決定外部設(shè)備是否被選作SPI的從設(shè)備。主從設(shè)備連接方式如圖1所示[5]。
1.2 內(nèi)部寄存器
SPI的內(nèi)部寄存器如表1所示。
1.3 傳輸時序
在本設(shè)計中,SPI的傳輸時序由控制寄存器CTRL來決定。CTRL[9]定義為RX_NEGE,置1表示數(shù)據(jù)在時鐘下降沿接收,置0為上升沿接收;CTRL[10]定義為TX_NEGE,置1表示數(shù)據(jù)在下降沿發(fā)送,置0為上升沿發(fā)送;CTRL[11]定義為LSB,置1表示數(shù)據(jù)從最低位開始傳輸,置0從最高位開始傳輸。CTRL[6:0]定義為CHAR_LEN,為數(shù)據(jù)傳輸長度,最長可為128 b。以其中一種傳輸時序為例說明,如圖2所示。
圖1 主從設(shè)備連接圖
表1 SPI內(nèi)部寄存器
圖2 上升沿發(fā)送下降沿接收時序
2 SPI接口的RTL設(shè)計
本設(shè)計是針對SoC系統(tǒng)的,目標(biāo)是實現(xiàn)適用于SoC設(shè)計并且符合SPI通信協(xié)議的IP核,實現(xiàn)SoC通過此SPI接口和外設(shè)通信[5]。所以,本設(shè)計分成SPI主機模塊spi_master的設(shè)計和SPI從機模塊spi_slave的設(shè)計,采用Verilog HDL進行RTL設(shè)計。
2.1 spi_master模塊設(shè)計
spi_master的功能主要包括:
(1)實現(xiàn)主機通過APB總線初始化spi_master的寄存器;
(2)實現(xiàn)spi_master和spi_slave之間的數(shù)據(jù)交換。因此,spi_master模塊主要就是實現(xiàn)分頻和串并轉(zhuǎn)換,主要包含時鐘產(chǎn)生子模塊spi_clgen和數(shù)據(jù)傳輸子模塊spi_shift,其設(shè)計結(jié)構(gòu)如圖3所示[6]。
圖3 spi_master模塊結(jié)構(gòu)圖
2.1.1 時鐘產(chǎn)生子模塊設(shè)計
該子模塊主要作用是產(chǎn)生SPI主/從設(shè)備通信所需的同步串行時鐘sclk。在主模式下,sclk由系統(tǒng)提供的時鐘信號pclk分頻產(chǎn)生[7],產(chǎn)生的串行時鐘的時鐘頻率由式(1)計算得來:
[fsclk=fpclk(DIVIDER+1)×2] (1)
傳輸開始前,cnt載入DIVIDER值,滿足傳輸條件下cnt減1計數(shù),減為0時,輸出時鐘clk_out翻轉(zhuǎn),并且在clk_out的上升沿和下降沿分別產(chǎn)生pos_edge和neg_edge信號 。
2.1.2 數(shù)據(jù)傳輸子模塊設(shè)計
該子模塊的主要功能是完成數(shù)據(jù)的串/并轉(zhuǎn)換。在本設(shè)計中,該子模塊負(fù)責(zé)把內(nèi)部APB總線并行傳輸進來的數(shù)據(jù)轉(zhuǎn)化成串行數(shù)據(jù)傳輸給SPI從設(shè)備,并且把外部SPI從設(shè)備串行傳輸進來的數(shù)據(jù)轉(zhuǎn)化成并行數(shù)據(jù)傳入到APB總線上。
傳統(tǒng)的串/并轉(zhuǎn)換設(shè)計方法需要一個專門的移位傳輸寄存器,本設(shè)計采用了復(fù)用寄存器的方法,把移位傳輸寄存器和發(fā)送寄存器結(jié)合在一起。當(dāng)傳輸停止且總線鎖存使能時,數(shù)據(jù)從APB總線并行傳輸?shù)絪pi_shift移位傳輸寄存器即發(fā)送寄存器TxX,然后在傳輸時鐘使能情況下串行輸出到MOSI;而在主機接收使能的情況下,由從機MISO串行輸入數(shù)據(jù)至spi_shift移位傳輸寄存器。傳輸結(jié)構(gòu)如圖4所示,從圖4可以看出,數(shù)據(jù)傳輸位寬最大可達128 b/s。
圖4 spi_shift模塊傳輸結(jié)構(gòu)
2.1.3 RTL代碼設(shè)計
spi_master模塊代碼設(shè)計劃分如下:
(1)寄存器選擇使能信號的地址譯碼電路;
(2)讀寄存器部分,將并行數(shù)據(jù)輸出到APB總線上;
(3)控制寄存器ctrl、時鐘分頻寄存器divider、從機選擇寄存器ss初始化部分;
(4)例化時鐘分頻子模塊和數(shù)據(jù)傳輸子模塊。
為了提高代碼的復(fù)用性,特別設(shè)計了一個宏定義模塊,主要定義了傳輸最大位數(shù)SPI_MAX_CHAR,分頻寄存器位數(shù)SPI_DIVIDER_LEN,從機選擇數(shù)目SPI_SS_NB等相關(guān)數(shù)據(jù)[8]。
2.2 spi_slave模塊設(shè)計
這部分設(shè)計作為SPI的從設(shè)備與主機進行數(shù)據(jù)交換,與spi_shift模塊時鐘同步。通信開始后,從機數(shù)據(jù)最高位開始串行輸入到MISO,主機發(fā)出的數(shù)據(jù)從最低位串行輸出到MOSI。
3 SPI接口的功能仿真
本設(shè)計采用Verilog HDL編寫Testbench,使用ModelSim軟件進行功能仿真,并用Debussy軟件聯(lián)合調(diào)試并觀察波形。為了實現(xiàn)主從設(shè)備通信的仿真,編寫了一個p_master模塊并例化到測試代碼里面來模擬主機SoC對spi_master的操作,主要包括一個數(shù)據(jù)寫task、一個數(shù)據(jù)讀task、一個數(shù)據(jù)比較task。分別測試了1 b,8 b,16 b,32 b,64 b,128 b的數(shù)據(jù)。仿真全部通過,局部仿真波形如圖5所示。
圖5 局部仿真波形
以第一次傳輸為例進行分析,傳輸時調(diào)用寫任務(wù),分別向寄存器DIVIDER、TX_0、CTRL寫入32’h01、32’h5a、32’h308,設(shè)定spi_slave.data為32’ha5967e5a。由波形看出,數(shù)據(jù)在ss[0]有效傳輸,傳輸完成后MISO=8’b10100101(即32’ha5),MOSI=8’b01011010(即32’h5a),滿足了上升沿發(fā)送下降沿接收及高位先開始的數(shù)據(jù)傳輸時序。在100 MHz的主時鐘頻率下,得到串行時鐘頻率25 MHz,為4分頻,符合式(1)的計算。
4 SPI接口的SoC平臺驗證
驗證用SoC平臺具有良好的可重用性和通用性,可以方便的掛接帶有AHB/APB總線接口的IP核,并通過內(nèi)部寄存器對其進行配置和驗證,避免了對不同IP設(shè)計需要不同的Testbench平臺,提高了IP驗證的效率[9]。本設(shè)計用到的SoC驗證平臺如圖6所示[10],驗證環(huán)境為Linux操作系統(tǒng),仿真工具為VCS。
圖6 SoC驗證平臺
在SoC驗證平臺中,SPI接口作為外設(shè)連接在APB總線的Slave4端口上,地址空間為0xA400_0000~0XA4FF_FFFF。用C測試程序向Tx0寫32’h67,spi_slave.data=32’h0,局部仿真波形如圖7所示,MOSI=8’b01100111(即32’h67),MISO=8’b0,結(jié)果表明符合要求。
圖7 局部仿真波形
5 結(jié) 語
本文實現(xiàn)了基于AMBA 2.0總線的、可作為IP核用于SoC設(shè)計的SPI 接口的設(shè)計,并且經(jīng)過全面的仿真驗證,可以看出本設(shè)計滿足性能要求。
參考文獻
[1] 易志明,林凌,郝麗宏,等.SPI串行接口及其實現(xiàn)[J].自動化與儀器儀表,2002(6):45?48.
[2] 陸小艷.基于AMBA 2.0的SoC總線平臺的實現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[3] 陳玉梅.面向SoC的UART及DMA控制器IP軟核的設(shè)計[D].濟南:山東大學(xué),2007.
[4] 趙杰,易波.基于AMBA總線的SPI IP核的實現(xiàn)與驗證[J].電子測量技術(shù),2010(1):74?77.
[5] 李躍峰.基于Verilog HDL的SPI可復(fù)用IP核的設(shè)計與實現(xiàn)[D].成都:西南交通大學(xué),2008.
[6] 沈圣盛.基于APB總線的接口IP核設(shè)計與驗證[D].西安:西安電子科技大學(xué),2011.
[7] 趙杰.基于AMBA總線的SPI協(xié)議IP核的實現(xiàn)與驗證[D].合肥:中國科學(xué)技術(shù)大學(xué),2009.
[8] 王二萍.高速可復(fù)用SPI總線的設(shè)計與Verilog HDL實現(xiàn)[D].開封:河南大學(xué),2007.
[9] 史明睿.SoC環(huán)境下IP核的設(shè)計與驗證[D].西安:西安電子科技大學(xué),2009.
[10] 賈凡,謝蒂,楊義先.基于AMBA總線USB控制器的SoC設(shè)計與驗證[J].電子測量技術(shù),2007(12):95?97.