<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 設計應用 > 用于SOC的SPI接口設計與驗證

用于SOC的SPI接口設計與驗證

作者: 時(shí)間:2016-10-10 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:給出了一個(gè)可用于SoC設計的SPI接口IP核的RTL設計與功能仿真。采用AMBA 2.0總線(xiàn)標準來(lái)實(shí)現SPI接口在外部設備和內部系統之間進(jìn)行通信,在部分,摒棄傳統的需要一個(gè)專(zhuān)門(mén)的移位傳輸寄存器實(shí)現串/并轉換的設計方法,采用復用寄存器的方法,把移位傳輸寄存器和發(fā)送寄存器結合在一起,提高了傳輸速度,也節約了硬件資源。采用SoC驗證平臺進(jìn)行SoC環(huán)境下對IP的驗證,在100 MHz時(shí)鐘頻率下的仿真和驗證結果表明,SPI接口實(shí)現了,且滿(mǎn)足時(shí)序設計要求。

本文引用地址:http://dyxdggzs.com/article/201610/306468.htm

0 引言

SPI(Serial Peripheral Interface)是一種同步串行總線(xiàn)接口,很多器件如E2PROM、FLASH、實(shí)時(shí)時(shí)鐘、A/D轉換器等都用到了SPI接口,它也是SoC中的一個(gè)常用外圍功能模塊。是由ARM公司開(kāi)發(fā)的一種高性能、開(kāi)放性SoC系統總線(xiàn),它主要包括AHB,ASB和APB三種總線(xiàn)類(lèi)型。AHB總線(xiàn)主要用于連接高性能、高速度的系統模塊,如CPU,DSP,SRAM等;APB總線(xiàn)主要用于連接低速外圍模塊,如UART,I2C等,接口簡(jiǎn)單,效率高,功耗低;ASB總線(xiàn)通過(guò)連接系統高速部件來(lái)實(shí)現高速通信,一般較少用到。

本文設計一個(gè)可作為IP核用于SoC設計的SPI接口,采用AMBA2.0總線(xiàn)標準來(lái)實(shí)現SPI接口在外部設備和內部系統之間進(jìn)行通信,SPI接口作為低速外圍模塊掛載在A(yíng)PB總線(xiàn)上。

1 SPI接口的定義

1.1 接口信號

SPI的接口信號為同步串行時(shí)鐘SCLK、主機輸入/從機輸出MISO、主機輸出/從機輸入MOSI、從機選擇

用于SOC的SPI接口設計與驗證

(低電平有效),由于只用到四根線(xiàn)工作,與其他接口相比具有結構簡(jiǎn)單、速度快的優(yōu)點(diǎn)。SPI有主/從兩種工作模式,SPI總線(xiàn)的串行時(shí)鐘SCLK用來(lái)同步,在主模式下由主機產(chǎn)生,從機選擇信號

用于SOC的SPI接口設計與驗證

用來(lái)決定外部設備是否被選作SPI的從設備。主從設備連接方式如圖1所示。

1.2 內部寄存器

SPI的內部寄存器如表1所示。

用于SOC的SPI接口設計與驗證

1.3 傳輸時(shí)序

在本設計中,SPI的傳輸時(shí)序由控制寄存器CTRL來(lái)決定。CTRL[9]定義為RX_NEGE,置1表示數據在時(shí)鐘下降沿接收,置0為上升沿接收;CTRL[10]定義為T(mén)X_NEGE,置1表示數據在下降沿發(fā)送,置0為上升沿發(fā)送;CTRL[11]定義為L(cháng)SB,置1表示數據從最低位開(kāi)始傳輸,置0從最高位開(kāi)始傳輸。CTRL[6:0]定義為CHAR_LEN,為數據傳輸長(cháng)度,最長(cháng)可為128 b。以其中一種傳輸時(shí)序為例說(shuō)明,如圖2所示。

2 SPI接口的RTL設計

本設計是針對SoC系統的,目標是實(shí)現適用于SoC設計并且符合SPI通信協(xié)議的IP核,實(shí)現SoC通過(guò)此SPI接口和外設通信。所以,本設計分成SPI主機模塊spi_master的設計和SPI從機模塊spi_slave的設計,采用Verilog HDL進(jìn)行RTL設計。

2.1 spi_master模塊設計

spi_master的功能主要包括:

(1)實(shí)現主機通過(guò)APB總線(xiàn)初始化spi_master的寄存器;

(2)實(shí)現spi_master和spi_slave之間的數據交換。

因此,spi_master模塊主要就是實(shí)現分頻和串并轉換,主要包含時(shí)鐘產(chǎn)生子模塊spi_clgen和數據傳輸子模塊spi_shift,其設計結構如圖3所示。

用于SOC的SPI接口設計與驗證

2.1.1 時(shí)鐘產(chǎn)生子模塊設計

該子模塊主要作用是產(chǎn)生SPI主/從設備通信所需的同步串行時(shí)鐘sclk。在主模式下,sclk由系統提供的時(shí)鐘信號pclk分頻產(chǎn)生,產(chǎn)生的串行時(shí)鐘的時(shí)鐘頻率由式(1)計算得來(lái):

用于SOC的SPI接口設計與驗證

傳輸開(kāi)始前,cnt載人DIVIDER值,滿(mǎn)足傳輸條件下cnt減1計數,減為0時(shí),輸出時(shí)鐘clk_out翻轉,并且在clk_out的上升沿和下降沿分別產(chǎn)生pos_edge和neg_edge信號。

2.1.2 數據傳輸子模塊設計

該子模塊的主要功能是完成數據的串/并轉換。在本設計中,該子模塊負責把內部APB總線(xiàn)并行傳輸進(jìn)來(lái)的數據轉化成串行數據傳輸給SPI從設備,并且把外部SPI從設備串行傳輸進(jìn)來(lái)的數據轉化成并行數據傳入到APB總線(xiàn)上。

傳統的串/并轉換設計方法需要一個(gè)專(zhuān)門(mén)的移位傳輸寄存器,本設計采用了復用寄存器的方法,把移位傳輸寄存器和發(fā)送寄存器結合在一起。當傳輸停止且總線(xiàn)鎖存使能時(shí),數據從APB總線(xiàn)并行傳輸到spi_shift移位傳輸寄存器即發(fā)送寄存器TxX,然后在傳輸時(shí)鐘使能情況下串行輸出到MOSI;而在主機接收使能的情況下,由從機MISO串行輸人數據至spi_shift移位傳輸寄存器。傳輸結構如圖4所示,從圖4可以看出,數據傳輸位寬最大可達128 b/s。

用于SOC的SPI接口設計與驗證

2.1.3 RTL代碼設計

spi_master模塊代碼設計劃分如下:

(1)寄存器選擇使能信號的地址譯碼電路;

(2)讀寄存器部分,將并行數據輸出到APB總線(xiàn)上;

(3)控制寄存器ctrl、時(shí)鐘分頻寄存器divider、從機選擇寄存器ss初始化部分;

(4)例化時(shí)鐘分頻子模塊和數據傳輸子模塊。

為了提高代碼的復用性,特別設計了一個(gè)宏定義模塊,主要定義了傳輸最大位數SPI_MAX_CHAR,分頻寄存器位數SPI_DIVIDER_LEN,從機選擇數目SPI_SS_NB等相關(guān)數據。

2.2 spi_slave模塊設計

這部分設計作為SPI的從設備與主機進(jìn)行數據交換,與spi_shift模塊時(shí)鐘同步。通信開(kāi)始后,從機數據最高位開(kāi)始串行輸入到MISO,主機發(fā)出的數據從最低位串行輸出到MOSI。

3 SPI接口的功能仿真

本設計采用Verilog HDL編寫(xiě)Testbench,使用ModelSim軟件進(jìn)行功能仿真,并用Debussy軟件聯(lián)合調試并觀(guān)察波形。為了實(shí)現主從設備通信的仿真,編寫(xiě)了一個(gè)p_master模塊并例化到測試代碼里面來(lái)模擬主機SoC對spi_master的操作,主要包括一個(gè)數據寫(xiě)task、一個(gè)數據讀task、一個(gè)數據比較task。分別測試了1 b,8 b,16 b,32 b,64 b,128 b的數據。仿真全部通過(guò),局部仿真波形如圖5所示。

用于SOC的SPI接口設計與驗證

以第一次傳輸為例進(jìn)行分析,傳輸時(shí)調用寫(xiě)任務(wù),分別向寄存器DIVIDER、TX_0、CTRL寫(xiě)入32’h01、32’h5a、32’h308,設定spi_sla ve.data為32’ha5967e5a。由波形看出,數據在ss[0]有效傳輸,傳輸完成后MIS0=8’b10100101(即32’ha5),MOSI=8’b01011010(即32’h5a),滿(mǎn)足了上升沿發(fā)送下降沿接收及高位先開(kāi)始的數據傳輸時(shí)序。在100 MHz的主時(shí)鐘頻率下,得到串行時(shí)鐘頻率25 MHz,為4分頻,符合式(1)的計算。

4 SPI接口的SoC平臺驗證

驗證用SoC平臺具有良好的可重用性和通用性,可以方便的掛接帶有AHB/APB總線(xiàn)接口的IP核,并通過(guò)內部寄存器對其進(jìn)行配置和驗證,避免了對不同IP設計需要不同的Testbench平臺,提高了IP驗證的效率。本設計用到的SoC驗證平臺如圖6所示,驗證環(huán)境為L(cháng)inux操作系統,仿真工具為VCS。

用于SOC的SPI接口設計與驗證

在SoC驗證平臺中,SPI接口作為外設連接在A(yíng)PB總線(xiàn)的Slave4端口上,地址空間為0xA400_0000~0XA4FF_FFFF。用C測試程序向Tx0寫(xiě)32’h67,spi_slave.data=32’h0,局部仿真波形如圖7所示,MOSI=8’b01100111(即32’h67),MISO=8’b0,結果表明符合要求。

用于SOC的SPI接口設計與驗證

5 結語(yǔ)

本文實(shí)現了基于A(yíng)MBA 2.0總線(xiàn)的、可作為IP核用于SoC設計的SPI接口的設計,并且經(jīng)過(guò)全面的仿真驗證,可以看出本設計滿(mǎn)足性能要求。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>