摘 要: 通過(guò)在MEMS信號(hào)處理電路中設(shè)計(jì)一個(gè)異步結(jié)構(gòu)的FIFO,可以有效地降低系統(tǒng)對(duì)MEMS的頻繁訪問(wèn)。設(shè)計(jì)一個(gè)具有多種工作模式的FIFO,可以滿足一些特殊的姿態(tài)檢測(cè)需求,更好地滿足系統(tǒng)智能化操作需要。實(shí)現(xiàn)了一個(gè)具體可行的方案,可以實(shí)際應(yīng)用到各種MEMS電路模塊中。
關(guān)鍵詞: MEMS;智能終端;FIFO;同步雙端口RAM
MEMS傳感器是采用微電子和微機(jī)械加工技術(shù)制造出來(lái)的新型傳感器。目前,加速度計(jì)已普遍用于智能終端(如智能手機(jī))中,未來(lái)幾年,陀螺儀也將普遍應(yīng)用到智能終端中。同時(shí),組合傳感器,如3軸加速度計(jì)+3軸磁力計(jì),3軸加速度計(jì)+3軸陀螺儀,甚至9軸組合傳感器未來(lái)都會(huì)得到廣泛應(yīng)用,相應(yīng)地也會(huì)帶來(lái)數(shù)據(jù)處理量的增加。目前的加速度計(jì)、陀螺儀和磁力計(jì)等MEMS電路的數(shù)據(jù)輸出速率一般在幾赫茲到幾百赫茲之間。主系統(tǒng)處理單元一般通過(guò)串行通信接口I2C或者SPI訪問(wèn)MEMS電路來(lái)獲取數(shù)據(jù),除了需要實(shí)時(shí)響應(yīng)的一些數(shù)據(jù)以外,主系統(tǒng)單元有時(shí)可能不希望頻繁地用串行接口去檢測(cè)MEMS電路狀態(tài),看內(nèi)部數(shù)據(jù)是否已經(jīng)準(zhǔn)備好,然后讀取有效數(shù)據(jù),因?yàn)檫@樣會(huì)降低整個(gè)系統(tǒng)的工作效率。對(duì)于類似于智能手機(jī)的智能終端而言,隨著功能越來(lái)越強(qiáng)大,系統(tǒng)處理的任務(wù)也越來(lái)越多,如何平衡將是一個(gè)問(wèn)題。
針對(duì)上述情況,本文設(shè)計(jì)了一個(gè)48 bit數(shù)據(jù)寬度、64級(jí)存儲(chǔ)深度的異步FIFO(First In First Out),可以有效解決主系統(tǒng)單元頻繁訪問(wèn)MEMS電路的問(wèn)題。這個(gè)FIFO具有旁路模式、連續(xù)模式、先入先出模式和中斷模式4種工作模式,在中斷模式下,通過(guò)設(shè)置不同的條件,可以在不需要主系統(tǒng)單元干涉的情況下自動(dòng)抓取一些特殊狀態(tài)的數(shù)據(jù)。這樣可以節(jié)省很多系統(tǒng)資源。
1 FIFO系統(tǒng)設(shè)計(jì)
傳統(tǒng)異步FIFO[1-2]采用觸發(fā)器同步異步輸入信號(hào)來(lái)降低出現(xiàn)亞穩(wěn)態(tài)的幾率,然后地址通過(guò)格雷碼編碼方式來(lái)消除地址多位變化導(dǎo)致的空滿狀態(tài)誤判,需要用到真正的雙端口RAM。采用觸發(fā)器同步雖然可以降低亞穩(wěn)態(tài)的幾率,但也帶來(lái)了時(shí)序分析和綜合后仿真的難點(diǎn)。格雷碼帶來(lái)了設(shè)計(jì)的復(fù)雜性,可以通過(guò)時(shí)序邏輯的設(shè)計(jì)方式,在布局布線時(shí)插入時(shí)鐘樹來(lái)避免空滿狀態(tài)的不定。同時(shí)真正的雙端口RAM不是每個(gè)集成電路工藝線都支持的,采用偽雙端口RAM更實(shí)際,也能使設(shè)計(jì)適用范圍更廣泛。
整個(gè)系統(tǒng)實(shí)現(xiàn)還要包括I2C和SPI接口模塊、信號(hào)處理模塊以及中斷檢測(cè)模塊,本文僅僅描述FIFO模塊。FIFO模塊的實(shí)現(xiàn)框圖如圖1所示。寫時(shí)鐘是MEMS數(shù)據(jù)采樣時(shí)鐘,讀時(shí)鐘是串口I2C或者SPI讀數(shù)據(jù)時(shí)鐘。為了消除讀寫同時(shí)進(jìn)行產(chǎn)生的沖突,增加了一個(gè)寫使能信號(hào),其與寫時(shí)鐘同時(shí)由內(nèi)部邏輯產(chǎn)生,寫時(shí)鐘比讀時(shí)鐘優(yōu)先級(jí)高。這樣可能會(huì)引入一個(gè)問(wèn)題,那就是讀寫恰好同時(shí)進(jìn)行的時(shí)候,讀的數(shù)據(jù)依然是上一個(gè)數(shù)據(jù),但可以設(shè)置為先入先出模式,數(shù)據(jù)滿了之后不再更新,這樣就不會(huì)有這個(gè)問(wèn)題。模式設(shè)置和水印閾值設(shè)置通過(guò)串口I2C或者SPI寫入。同步雙端口RAM采用SMIC 0.18 m工藝Memory Compiler綜合出來(lái)的64×48 bit的IP模塊,這是一個(gè)偽雙端口RAM,讀寫時(shí)鐘是共用的。48 bit數(shù)據(jù)寬度可以同時(shí)存儲(chǔ)3個(gè)軸的MEMS檢測(cè)數(shù)據(jù),每個(gè)軸16 bit數(shù)據(jù)寬度,基本可以滿足目前的MEMS精度要求。
2 功能模塊設(shè)計(jì)
2.1 讀地址產(chǎn)生邏輯
讀地址產(chǎn)生邏輯,根據(jù)工作模式和FIFO的狀態(tài),生成讀地址指針。假如讀時(shí)鐘有效,并且FIFO不為空,則讀地址加1,假如FIFO為空,則讀地址保持不變。在連續(xù)工作模式下,由于數(shù)據(jù)不斷滾動(dòng)更新,當(dāng)數(shù)據(jù)滿的情況下,假如寫入有效,讀地址加1,保證讀地址指針指向最先寫入的數(shù)據(jù)地址。
2.2 寫地址產(chǎn)生邏輯
假如寫入有效,寫地址指針自動(dòng)加1。通過(guò)控制RAM時(shí)鐘,在先入先出模式下,假如FIFO滿,終止寫入新的數(shù)據(jù)到RAM中,因此寫地址指針不再更新,除非重新使能整個(gè)FIFO模塊。
2.3 狀態(tài)生成邏輯
FIFO的狀態(tài)可以直接用寫地址指針減去讀地址指針來(lái)獲得,但也需要考慮到當(dāng)FIFO滿的時(shí)候,讀地址指針和寫地址指針是指向同一個(gè)地址的,這時(shí)候減出來(lái)數(shù)據(jù)就為0了。因此需要增加中間寄存器,在未滿的時(shí)候輸出減法器的數(shù)值,在滿的時(shí)候輸出全1數(shù)值。滿和空狀態(tài)信號(hào)、水印標(biāo)記信號(hào)和FIFO停止信號(hào)都由時(shí)序邏輯生成,滿信號(hào)邏輯電路圖如圖2所示,用RAM時(shí)鐘的反相信號(hào)來(lái)觸發(fā)。水印標(biāo)記可以通過(guò)設(shè)置水印的閾值來(lái)獲得,閾值范圍可以是0~63。當(dāng)FIFO的狀態(tài)值超過(guò)設(shè)置的閾值,就產(chǎn)生水印標(biāo)記中斷;當(dāng)FIFO的狀態(tài)小于設(shè)置的閾值,水印標(biāo)記中斷就清除,這可以讓主系統(tǒng)根據(jù)應(yīng)用場(chǎng)合靈活選擇。FIFO停止信號(hào)有兩種情況,在先入先出模式下,滿了之后產(chǎn)生FIFO停止信號(hào),RAM數(shù)據(jù)停止更新;在中斷模式下,在中斷信號(hào)產(chǎn)生之前,不產(chǎn)生FIFO停止信號(hào),中斷信號(hào)產(chǎn)生之后,根據(jù)滿狀態(tài)信號(hào)產(chǎn)生FIFO停止信號(hào)。
3 工作模式
3.1 旁路模式
在旁路模式下,復(fù)位信號(hào)有效,F(xiàn)IFO不工作,主系統(tǒng)單元直接讀出ADC輸出的數(shù)據(jù)。
3.2 連續(xù)模式
在連續(xù)模式下,數(shù)據(jù)在FIFO里面不斷更新,相應(yīng)地,讀地址指針和寫地址指針也不斷滾動(dòng)更新,讀地址指針指向最先輸入的RAM地址。在連續(xù)模式下,假如數(shù)據(jù)滿了之后,寫時(shí)鐘有效,讀地址指針和寫地址指針需要同時(shí)加1,因?yàn)樽钕鹊臄?shù)據(jù)已經(jīng)被覆蓋了。同時(shí)在寫時(shí)鐘無(wú)效的時(shí)候,讀時(shí)鐘有效,讀地址指針也要加1。
3.3 先入先出模式
在先入先出模式下,數(shù)據(jù)填充滿了就自動(dòng)終止,產(chǎn)生滿中斷信號(hào)。在沒(méi)有讀時(shí)鐘的情況下,最終讀地址指針和寫地址指針將會(huì)同時(shí)指向地址0。相應(yīng)地,在未充滿的情況下,假如讀時(shí)鐘有效,最終讀地址指針和寫地址指針會(huì)同時(shí)指向中間某一個(gè)地址。
3.4 中斷模式
在中斷模式下,數(shù)據(jù)先是以連續(xù)模式工作,假如中斷信號(hào)有效,進(jìn)入先入先出模式,數(shù)據(jù)填充滿了就自動(dòng)終止。工作時(shí)序圖如圖3所示,數(shù)據(jù)在未填充滿的情況下,產(chǎn)生中斷信號(hào),數(shù)據(jù)填充滿了就產(chǎn)生終止信號(hào),滿中斷信號(hào)置1,數(shù)據(jù)開始讀出之后,滿中斷信號(hào)清0,當(dāng)數(shù)據(jù)完全讀完后,空中斷信號(hào)置1。假如FIFO需要重復(fù)上面的工作流程,需要清中斷,重新啟動(dòng)FIFO,在數(shù)據(jù)開始重新寫入FIFO時(shí),空中斷信號(hào)清0。
與傳統(tǒng)的異步FIFO不同,本文實(shí)現(xiàn)了一個(gè)更加簡(jiǎn)單、并且實(shí)際可行的FIFO結(jié)構(gòu),操作靈活可靠。通過(guò)在MEMS信號(hào)處理電路中加入異步FIFO設(shè)計(jì),可以更好地滿足系統(tǒng)對(duì)低功耗和操作靈活性的需求。通過(guò)DC綜合并流片驗(yàn)證,該FIFO電路已經(jīng)應(yīng)用到多個(gè)MEMS電路產(chǎn)品中,得到很好的效果。特別對(duì)于未來(lái)MEMS組合傳感器、數(shù)據(jù)量的增加以及特殊姿態(tài)的處理,引入更多靈活性的FIFO將會(huì)帶來(lái)更多的優(yōu)越性。
參考文獻(xiàn)
[1] 于海,樊曉椏.基于FPGA異步FIFO的研究與實(shí)現(xiàn)[J].微電子學(xué)與計(jì)算機(jī),2007(3):210-213.
[2] 劉祥遠(yuǎn),陳書明.一種高性能的異步FIFO結(jié)構(gòu)[J].電子學(xué)報(bào),2007(11):2098-2104.