白光澤,邢 燕
BAI Guang-ze1,XING Yan2
(1.長春職業(yè)技術(shù)學(xué)院,長春 130033;2.長春物業(yè)管理學(xué)校,長春 130033)
集成電路(IC,Integrated Circuit)作為各種信息設(shè)備的核心,它體現(xiàn)一個國家的利技實力、綜合國力及對科學(xué)界和社會的影響力,它也是國家的戰(zhàn)略性產(chǎn)業(yè)。為了抓住IP設(shè)計技術(shù)這一提升我國設(shè)計水平、發(fā)展IC產(chǎn)業(yè)不可多得的歷史機遇,信息產(chǎn)業(yè)部于2002年成立了集成電路IP核標(biāo)準(zhǔn)工作組,為我國IP核標(biāo)準(zhǔn)的制定及其在業(yè)界的推廣等方面做了大量的工作。因此,研究、開發(fā)和應(yīng)用IP核技術(shù),對企業(yè)、對國家、乃至對全球的IC產(chǎn)業(yè)的發(fā)展都有著至關(guān)重要的意義。
隨著SOC的規(guī)模不斷擴大,集成的IP模塊不斷增多,復(fù)雜程度不斷加大,使得片上各個模塊之間的通信問題越來越突出,為了解決這一問題,各大公司都相繼推出了自己的IP核互聯(lián)規(guī)范。另外,長期以來,外圍設(shè)備與主機CPU速度之間的不匹配始終困擾著人們,影響了計算機系統(tǒng)的迅速發(fā)展,隨著計算機處理能力及存儲規(guī)模的迅速增長,這個問題表現(xiàn)得更加突出。
本文的針對SOC片上系統(tǒng)的SPI接口設(shè)計[1],目標(biāo)是實現(xiàn)適用于SOC設(shè)計并且符合SPI通行協(xié)議的IP核,讓SOC通過此SPI核可以與外圍設(shè)備通信,中間以片上總線Wishbone為接口。設(shè)計中,本著片上系統(tǒng)SOC要求的高度集成和低功耗的特點,在設(shè)計時將面積和功耗放在了第一位,這意味著在用Verilog HDL編程時,必須在遵循SPI協(xié)議、實現(xiàn)基本SPI通信的基礎(chǔ)上,將RTL級邏輯門數(shù)盡可能的減少。保留規(guī)定的四個外部信號,將SPI主機與從機分開,僅設(shè)計SPI_MASTER Core,利用控制寄存器進行狀態(tài)控制,省去時鐘極性與相位配置,直接與Wishbone總線連接。其次,圍繞著SPI IP核的設(shè)計與實現(xiàn)來討論和研究SOC設(shè)計中IP設(shè)計的方法。
SPI Master設(shè)計是本設(shè)計的核心,其主要目標(biāo)是能實現(xiàn)Wishbone Master對SPI Maste的初始化,配置SPI Master的控制寄存器,以實現(xiàn)對SPI各傳輸模式的控制,及其雙向數(shù)據(jù)通信。其次,是實現(xiàn)SPI Master與SPI Slave之間的數(shù)據(jù)雙向通信,從而實現(xiàn)SOC與外界的數(shù)據(jù)通信。在設(shè)計程序時,采用了top-down至上而下的設(shè)計流程,那么首先做的是對所要設(shè)計的SPI IP核做總體的規(guī)劃,建立架構(gòu),對系統(tǒng)進行層次劃分。
根據(jù)前面對Wishbone總線的介紹,在本設(shè)計中spi_master模塊內(nèi)Wishbone接口就是初wishbone slave接口。按照Wishbone協(xié)議,端口定義如下表1所示:
表1 Wishbone slave接口信號表
該模塊是宏定義模塊,主要規(guī)定了分頻值由訪divider,允許一次最大傳輸字節(jié)SPI_MAX_CH,從機擴展數(shù)SPI_SS_NB以及各寄存器的相關(guān)數(shù)據(jù)。這里采用了define來定義,主要一個特點就是這些宏定義中的參數(shù)都是全局的,并不局限在某個module范圍之內(nèi),這樣可以便于對所設(shè)計的IP核的參數(shù)做修改,從而提高IP核的通用性和可移植性。
由前面的設(shè)計思路可知,該模塊要完成與wishbone_master的連接,實分頻和串并轉(zhuǎn)換。按照設(shè)計目標(biāo),可將spi_master劃分成如下的功能塊和模塊:
(1)地址解碼;
(2)讀寄存器,并行輸出至wishbone
(3)寫寄存器,由wishbone并行輸入對曲divider, control和 slave slect寄存器初始化;
(4)實現(xiàn)分頻,spi_clgen子模塊;
(5)實現(xiàn)串并轉(zhuǎn)換,spi_shift子模塊。
spi_slave用于完成數(shù)據(jù)串行輸入輸出,其時鐘信號是spi_clgen產(chǎn)生的sclk,與spi_shift時鐘同步。注意的是,spi_slave均是從其數(shù)據(jù)寄存器最高位串行輸出miso,從最低位串行輸入miso,且傳輸和接收的時鐘邊沿與spi_shift相同。
該模塊在本設(shè)計中只是作為SOC端,來模擬SOC對spi_master讀寫數(shù)據(jù),其中只是簡單地運用任務(wù)(task)寫了一個讀任務(wù)、一個寫任務(wù)和一個數(shù)據(jù)比較任務(wù)。
仿真與驗證是IP核設(shè)計中非常重要的一部分,因為它直接關(guān)系著IP的可用性??紤]到設(shè)計的SPI的門數(shù)和速度上的要求比較低,以及實際資金等清況,在仿真時,本文采用軟件仿真[4,5]的方式。為突出典型性和正確性,所以spi_master只選擇了與一個spi_slave連接進行通信,在不同的傳輸要求下,分別檢測lbit,8bit,16bit,32bit,64bit和128bit數(shù)據(jù)傳輸,測試的基本步驟為:首先是調(diào)用Wb_master模塊中的寫任務(wù)對各個相關(guān)寄存器進行初始化,完成傳輸之前的準(zhǔn)備工作,結(jié)束之后,會顯示在某時刻programmed register;之后,是調(diào)用數(shù)據(jù)比較任務(wù),對寫入寄存器的數(shù)據(jù)進行驗證,確認(rèn)之前寫寄存器操作的正確性,完成之后會顯示在某系統(tǒng)時刻 verified register;接著是進行不同位數(shù)、不同順序的傳輸:最后對比傳輸之后的數(shù)據(jù)與期望的數(shù)據(jù),從而驗證傳輸?shù)恼_性,如果傳輸正確則顯示 transfer completed ok,否則,顯示錯誤。
另外,在spi_defines模塊中,本文測試時設(shè)置了最大傳輸數(shù)據(jù)長度為128bit,先對 spi_master進行初始化,然后對各寄存器寫入數(shù)據(jù),第一次是8bits的傳輸,spi_master tx0中并行數(shù)據(jù)為32'h5a,spi_slave數(shù)據(jù)寄存器內(nèi)為32'ha5967e5a,首先傳高位,上升沿傳輸,下降沿采集,按照spi_shift模塊中tx寄存器的傳輸規(guī)則,傳輸完成之后spi_slave.data=32'h967e5a5a以tx0=32'ha5;第二次與第一次一樣是8bits的傳輸,tx0=32'ha5,只是換成在下降沿傳輸,上升沿采集,傳輸完成之后spi_slave.data=32'h7e5a5aa5以及tx0=32'h96;第三次是16bits的傳輸,首先傳低有效位(lsb first),tx0=32'h5aa5,此時spi_slave.data=32'h7e5a5aa5,由于是lsb first,按照tx的傳輸規(guī)則,32'h5aa5的lsb先傳輸,則變?yōu)?2'ha55a從spi_slave.data的最低位經(jīng)mosi串行輸入,同時spi_slave.data[31:16]=16'h7e5a,由最高位開始經(jīng)miso并行輸入tx,從tx的最低位開始鎖存,16'h7e5a變?yōu)?6'ha57e,所以傳輸完成后spi_slave.data[15:0]=16'ha55a以及tx0=32'h5a7e;同理,測試程序?qū)?4bit,128bit,32bit,1bit進行了檢測,以及在ie和ass賦值的情況下。最后在linux環(huán)境下的EDA平臺上,用Ncverilog進行仿真,最終得到了較滿意的仿真結(jié)果,仿真結(jié)果如圖2,所有仿真模式全部通過。
圖2 SPI IP 核的仿真結(jié)果
[1] L.Bacciarelli.G.Lucia.Design,testing and prototyping of a software programmable I2C/SPI IP on AMBA bus.Research in Microelectronic and Electronic.2006: 373-376.
[2] 牛風(fēng)舉.劉元成.朱明程.基于IP復(fù)用的數(shù)字IC設(shè)計技術(shù).電子工業(yè)出版社,2003.
[3] 李寬余.戴瑜興.張義兵.基于可編程邏輯器件的串行外設(shè)接口設(shè)計及實現(xiàn).低壓器件,2004(11):28-30.
[4] Cadence Design Systems Inc.Verilog-XL Reference [C].Cadence, 2003.
[5] 陳獻文.HDL Debugging with Debussy [M].2004.