葉聰相,章增優(yōu)
(浙江工貿(mào)職業(yè)技術(shù)學(xué)院 人工智能學(xué)院,浙江 溫州 325000)
隨著信息時(shí)代的蓬勃發(fā)展,各行業(yè)對(duì)信息數(shù)據(jù)的需求更加迫切。產(chǎn)品研制階段需要大量的數(shù)據(jù)支撐,通過分析數(shù)據(jù)能夠?qū)崿F(xiàn)對(duì)產(chǎn)品性能的不斷優(yōu)化,因此大容量數(shù)據(jù)的存儲(chǔ)技術(shù)持續(xù)受到各行各業(yè)的關(guān)注。首先,傳統(tǒng)的存儲(chǔ)芯片F(xiàn)lash隨著芯片制造工藝的不斷改進(jìn),不同廠商生產(chǎn)的芯片也存在差異[1],因此雖然Flash存儲(chǔ)空間越來越大,但其可移植性降低,進(jìn)一步影響軟件的開發(fā)周期[2]。其次,在對(duì)FLASH芯片進(jìn)行讀寫控制時(shí)過程較復(fù)雜,產(chǎn)品異常斷電時(shí)Flash芯片內(nèi)部指針可能會(huì)隨意跳轉(zhuǎn),導(dǎo)致數(shù)據(jù)讀寫錯(cuò)誤[3],且數(shù)據(jù)通過FLASH芯片接口傳輸時(shí)速率低[4]。針對(duì)以上問題,提出采用eMMC存儲(chǔ)芯片來對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。eMMC芯片與其他存儲(chǔ)芯片最大的不同是其內(nèi)部包含了FLASH芯片以及FLASH芯片控制模塊[5],解決了不同型號(hào)存儲(chǔ)芯片兼容性的問題,極大地提高了軟件的可移植性,節(jié)省了產(chǎn)品開發(fā)周期。該存儲(chǔ)芯片存儲(chǔ)容量大,接口傳輸速率高,可實(shí)現(xiàn)數(shù)據(jù)的高速傳輸[6]。因此,這種嵌入式芯片獲得了越來越多的青睞。
由于FPGA具有強(qiáng)大的并行處理數(shù)據(jù)的能力,且內(nèi)部集成了很多硬核,對(duì)其進(jìn)行編程時(shí)可直接調(diào)用,縮短了軟件開發(fā)時(shí)間[7],系統(tǒng)選用FPGA作為控制芯片,利用其內(nèi)部集成的IP核實(shí)現(xiàn)對(duì)外部數(shù)據(jù)的高速收發(fā),然后對(duì)數(shù)據(jù)進(jìn)行暫存及數(shù)據(jù)組幀處理,使用MMC接口實(shí)現(xiàn)對(duì)對(duì)8片eMMC芯片的讀寫操作,完成高速大容量數(shù)據(jù)的存儲(chǔ)。本設(shè)計(jì)對(duì)于產(chǎn)品進(jìn)行后續(xù)測(cè)試提供了保障。
設(shè)計(jì)主要由RS422收發(fā)模塊、主控模塊、eMMC存儲(chǔ)控制模塊、數(shù)據(jù)緩存模塊、GTX控制模塊及電源模塊等模塊組成。系統(tǒng)總體設(shè)計(jì)如圖1所示。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
系統(tǒng)上電復(fù)位完成后,eMMC控制模塊以及GTX控制器模塊自動(dòng)進(jìn)入初始化流程。FPGA通過RS422接口接收到上位機(jī)發(fā)送的啟動(dòng)采數(shù)命令時(shí),首先對(duì)eMMC控制模塊以及GTX控制模塊的狀態(tài)進(jìn)行判斷,若其初始化未完成,則將回應(yīng)幀中的Busy標(biāo)志位置‘1’;若初始化流程結(jié)束,則Busy標(biāo)志位清‘0’,并準(zhǔn)備數(shù)據(jù)的采集。GTX控制模塊啟動(dòng)對(duì)外部串行數(shù)據(jù)的高速采集,為匹配數(shù)據(jù)傳輸速率,使用數(shù)據(jù)緩存模塊對(duì)高速收發(fā)控制器模塊輸出的數(shù)據(jù)進(jìn)行暫存,F(xiàn)PGA主控模塊根據(jù)緩存模塊輸出的空滿標(biāo)志,一方面控制eMMC存儲(chǔ)控制模塊對(duì)eMMC芯片進(jìn)行讀、寫、擦除等工作;另一方面對(duì)GTX控制模塊的收發(fā)也進(jìn)行控制。eMMC控制模塊對(duì)數(shù)據(jù)按照傳輸協(xié)議組幀后,通過MMC接口將數(shù)據(jù)存儲(chǔ)至外部eMMC芯片中。回讀是數(shù)據(jù)寫入的逆過程。經(jīng)系統(tǒng)實(shí)測(cè),eMMC接口傳輸速率為2.4 Gbps,實(shí)現(xiàn)了設(shè)計(jì)需求。
設(shè)計(jì)選用Virtex-6系列的FPGA作為邏輯控制器,采用其內(nèi)部集成的IP硬核GTX實(shí)現(xiàn)對(duì)大容量數(shù)據(jù)的高速傳輸[8]。GTX內(nèi)部由兩部分構(gòu)成,分別為接收模塊和發(fā)送模塊[9]。其中,接收模塊主要實(shí)現(xiàn)的功能依次對(duì)輸入信號(hào)進(jìn)行整形濾波,從輸入串行數(shù)據(jù)流中將時(shí)鐘與數(shù)據(jù)恢復(fù)出來,串并轉(zhuǎn)換,數(shù)據(jù)字符對(duì)齊,解碼,時(shí)鐘糾正,位寬轉(zhuǎn)換輸出[10]。發(fā)送模塊實(shí)現(xiàn)數(shù)據(jù)發(fā)送的步驟大致與接收相反,依次為位寬轉(zhuǎn)換輸入,編碼,并串轉(zhuǎn)換,信號(hào)預(yù)加重,信號(hào)轉(zhuǎn)差分輸出[11]。發(fā)送模塊與接收模塊傳輸時(shí)互不影響,GTX模塊通過SMA接口與用戶設(shè)備進(jìn)行連接,信號(hào)輸入為差分方式,使得數(shù)據(jù)傳輸更穩(wěn)定[12]。GTX控制模塊在進(jìn)行數(shù)據(jù)傳輸時(shí),其接口的傳輸速率理論值為6.6 Gbps[13],完全符合設(shè)計(jì)對(duì)數(shù)據(jù)傳輸速率的要求。GTX控制模塊接口原理如圖2所示。
圖2 GTX接口原理圖
設(shè)計(jì)采用美國美光公司的eMMC芯片(MTFC64GJVDN-4MIT)進(jìn)行大容量數(shù)據(jù)的存儲(chǔ)[14]。通過該芯片進(jìn)行數(shù)據(jù)的傳輸時(shí),其接口的傳輸速率為3.2 Gbps,能夠?qū)崿F(xiàn)數(shù)據(jù)的高速收發(fā)[15]。由于eMMC芯片集成了Flash芯片及Flash控制器,F(xiàn)PGA只需通過簡單的接口就可對(duì)其進(jìn)行操作[16]。FPGA與eMMC芯片通訊的接口原理如圖3所示,設(shè)計(jì)采用6片eMMC芯片進(jìn)行數(shù)據(jù)存儲(chǔ),每片可以存儲(chǔ)的空間大小為64 GB[17]。FPGA與eMMC陣列之間主要通過時(shí)鐘線、數(shù)據(jù)線、命令線、電源線以及地線進(jìn)行通訊。其中,時(shí)鐘線、電源線以及地線是共用線,數(shù)據(jù)線和命令線則各自獨(dú)立[18]。硬件在設(shè)計(jì)時(shí),為降低干擾,在電源接口處引入濾波網(wǎng)絡(luò),從而保證電源的可靠性[19]。同時(shí)硬件上將數(shù)據(jù)線及命令線均進(jìn)行上拉,提高了芯片管腳的驅(qū)動(dòng)力[20]。
圖3 eMMC陣列接口原理圖
系統(tǒng)采用Verilog語言在ISE14.6開發(fā)環(huán)境下實(shí)現(xiàn)軟件代碼的編寫,軟件整體架構(gòu)如圖4所示。系統(tǒng)上電后,上位機(jī)通過RS422接口發(fā)送命令給FPGA,待FPGA各模塊初始化完成后,啟動(dòng)對(duì)外部數(shù)據(jù)的接收存儲(chǔ)。首先外部設(shè)備的數(shù)據(jù)經(jīng)過GTX模塊快速接收后,設(shè)計(jì)為匹配數(shù)據(jù)傳輸速率,保證數(shù)據(jù)傳輸無誤,將數(shù)據(jù)進(jìn)行緩存后再發(fā)送至eMMC控制模塊。eMMC控制模塊根據(jù)上位機(jī)命令對(duì)eMMC芯片進(jìn)行相應(yīng)的操作,通過命令接口、數(shù)據(jù)接口實(shí)現(xiàn)對(duì)eMMC芯片的初始化、寫入、讀出等功能。
圖4 系統(tǒng)軟件總體架構(gòu)圖
3.1.1 數(shù)據(jù)幀格式
FPGA作為主機(jī),控制數(shù)據(jù)總線與eMMC芯片進(jìn)行數(shù)據(jù)交互。在對(duì)eMMC芯片寫入數(shù)據(jù)時(shí),需要按照正確的傳輸格式對(duì)數(shù)據(jù)進(jìn)行重新組幀才可以實(shí)現(xiàn)數(shù)據(jù)的正常發(fā)送[21]。其協(xié)議幀格式如圖5所示,主要由4部分構(gòu)成。其中,起始位為固定值‘0’,結(jié)束位為固定值‘1’,CRC為2選擇字節(jié),數(shù)據(jù)包長度不定。數(shù)據(jù)在SDR模式下傳輸時(shí),可以選擇1 bit、4 bit或者8 bit的傳輸位寬,且數(shù)據(jù)均在時(shí)鐘上升沿進(jìn)行采樣。
圖5 eMMC協(xié)議數(shù)據(jù)幀格式
3.1.2 命令幀格式
FPGA作為主機(jī),控制命令總線與eMMC芯片進(jìn)行命令交互。為確保命令發(fā)送有效,當(dāng)eMMC芯片接收到命令時(shí),會(huì)發(fā)送命令響應(yīng)至FPGA。FPGA通過發(fā)送不同的命令實(shí)現(xiàn)對(duì)芯片的操作,但這些命令都具有相同的幀格式,如表1所示。命令幀長度固定,均為6個(gè)字節(jié)。
表1 eMMC命令幀格式
主機(jī)發(fā)送不同的命令,接收到的響應(yīng)長度各不相同。且命令發(fā)出后,將在各自要求的時(shí)間后收到響應(yīng)信息。如圖6所示,當(dāng)主機(jī)發(fā)送命令給單片eMMC芯片設(shè)置初始地址時(shí),等待NCR個(gè)周期后,得到eMMC芯片發(fā)送的響應(yīng)信息。
圖6 eMMC協(xié)議命令和響應(yīng)時(shí)序圖
系統(tǒng)上電后,通過發(fā)送命令實(shí)現(xiàn)對(duì)eMMC芯片內(nèi)的寄存器進(jìn)行配置,從而完成eMMC芯片的初始化工作。首先,根據(jù)eMMC芯片特性,芯片上電復(fù)位完成后,配置200 Hz的時(shí)鐘作為eMMC芯片的初始化主頻。然后,發(fā)送CMD1命令完成對(duì)工作條件寄存器的配置,實(shí)現(xiàn)eMMC工作電壓的檢驗(yàn)與匹配。發(fā)送CMD2命令可獲取產(chǎn)品出場信息等。由于設(shè)計(jì)選用6片eMMC芯片用于大容量數(shù)據(jù)的存儲(chǔ),因此當(dāng)FPGA對(duì)其進(jìn)行訪問時(shí),需要唯一的芯片地址與之對(duì)應(yīng),因此在配置芯片時(shí),可以通過寫入CMD3命令對(duì)其內(nèi)部相對(duì)地址寄存器進(jìn)行每片芯片地址的配置,使得數(shù)據(jù)在傳輸時(shí)具有一對(duì)一的效果。根據(jù)eMMC傳輸幀格式,一幀數(shù)據(jù)中除去開始位、結(jié)束位以及校驗(yàn)位以外,數(shù)據(jù)字節(jié)長度不定。通過發(fā)送命令CMD9,可以查詢到eMMC芯片在數(shù)據(jù)傳輸過程中支持的數(shù)據(jù)字節(jié)長度等信息。然后發(fā)送CMD7命令選定eMMC芯片參與初始化流程結(jié)束后的數(shù)據(jù)讀寫工作。最后發(fā)送CMD6命令將輸入時(shí)鐘切換至5 MHz,并重復(fù)發(fā)送該命令確認(rèn)數(shù)據(jù)傳輸位寬及采樣時(shí)刻,初始化流程結(jié)束。eMMC控制模塊初始化流程如圖7所示。
圖7 eMMC控制模塊初始化流程圖
將大容量數(shù)據(jù)寫入eMMC存儲(chǔ)芯片時(shí),首先由FPGA通過命令線串行輸出48 bit的CMD7至eMMC存儲(chǔ)器,用于指定6片eMMC存儲(chǔ)器之一作為從機(jī)。然后發(fā)送命令CMD16配置有效的數(shù)據(jù)包長度。完成以上命令的發(fā)送后,F(xiàn)PFA發(fā)送寫指令CMD24至eMMC芯片,并且在FPGA收到正確的命令響應(yīng)之后開啟數(shù)據(jù)的傳輸。eMMC芯片開始接收時(shí),首先將數(shù)據(jù)接收到內(nèi)部緩存器中,同時(shí)對(duì)接收到的每1 bit數(shù)據(jù)進(jìn)行校驗(yàn),當(dāng)接收完一幀數(shù)據(jù)時(shí),會(huì)將CRC正確與否的標(biāo)志通過數(shù)據(jù)線0發(fā)送至FPGA,該標(biāo)志包括3位,若該標(biāo)志為2時(shí)表示數(shù)據(jù)寫入正確,此時(shí)緩存器中的數(shù)據(jù)才會(huì)編程至內(nèi)部Flash;若該標(biāo)志位5時(shí),表示數(shù)據(jù)寫入過程中出錯(cuò),該數(shù)據(jù)將丟棄。數(shù)據(jù)在寫入Flash的過程中,不允許其他寫入操作,因此通過拉低數(shù)據(jù)線0表示數(shù)據(jù)正在寫入。eMMC寫時(shí)序如圖8所示。
圖8 eMMC寫時(shí)序圖
對(duì)eMMC模塊的讀操作與寫操作大致相同。發(fā)送讀命令之前均先發(fā)送CMD7、CMD16,分別完成芯片的選擇及數(shù)據(jù)包長度的配置工作。通過輸入讀命令CMD17,根據(jù)該命令中的參數(shù)選擇指定地址的芯片進(jìn)行數(shù)據(jù)的讀取。等待命令線收到來自eMMC存儲(chǔ)器的響應(yīng)后,開啟數(shù)據(jù)的回讀操作。eMMC模塊讀流程如圖9所示。
圖9 eMMC模塊讀流程圖
FPGA與eMMC進(jìn)行數(shù)據(jù)或命令的交互時(shí),需要對(duì)數(shù)據(jù)及命令分別按照不同的傳輸格式進(jìn)行組幀,并計(jì)算CRC。對(duì)數(shù)據(jù)進(jìn)行組幀的功能由eMMC控制模塊中的子模塊數(shù)據(jù)處理模塊完成。為檢驗(yàn)數(shù)據(jù)處理模塊邏輯設(shè)計(jì)的嚴(yán)密性,編寫仿真文件對(duì)模塊內(nèi)相關(guān)信號(hào)進(jìn)行觀察。由于數(shù)據(jù)及命令在組幀過程中遵循不同的幀格式,其CRC計(jì)算方法也不一致。命令幀的7位CRC按照CRC7校驗(yàn)方法計(jì)算,仿真圖如圖10所示。輸入復(fù)位命令0x400000000095的高40位進(jìn)行校驗(yàn)計(jì)算,得到校驗(yàn)結(jié)果為16’ h4 a,即十進(jìn)制數(shù)95。與輸入數(shù)據(jù)組幀后即為復(fù)位指令,因此可驗(yàn)證該模塊對(duì)于命令幀CRC的計(jì)算仿真正確。
圖10 命令幀CRC計(jì)算仿真圖
數(shù)據(jù)幀的16位CRC按照CRC16校驗(yàn)方法計(jì)算,仿真圖如圖11所示。由于系統(tǒng)采用的是8 bit位寬進(jìn)行數(shù)據(jù)的傳輸,過程中每一條數(shù)據(jù)線都會(huì)針對(duì)本條數(shù)據(jù)線上的串行數(shù)據(jù)進(jìn)行CRC計(jì)算。為方便觀察驗(yàn)證,發(fā)送數(shù)據(jù)從0開始遞增。從圖中可以看出,計(jì)算得到的首個(gè)CRC為0x1021,設(shè)計(jì)正確。
圖11 命令幀CRC計(jì)算仿真圖
采用在線邏輯分析儀Chipscope對(duì)GTX控制模塊進(jìn)行仿真。為使得驗(yàn)證結(jié)果更加直觀,對(duì)GTX模塊進(jìn)行閉環(huán)驗(yàn)證,即收發(fā)模塊進(jìn)行連接,輸入16 bit的遞增數(shù)據(jù),對(duì)數(shù)據(jù)收發(fā)同時(shí)進(jìn)行測(cè)量并繪制折線圖,如圖12所示。從圖中可以看出,數(shù)據(jù)收發(fā)一致。該模塊可以實(shí)現(xiàn)數(shù)據(jù)的高速傳輸功能。
圖12 GTX模塊收發(fā)數(shù)據(jù)曲線圖
eMMC模塊的初始化是對(duì)eMMC模塊進(jìn)行其他操作的前提。為驗(yàn)證eMMC控制模塊是否能正確實(shí)現(xiàn)對(duì)eMMC芯片的初始化操作,采用Chipscope對(duì)該模塊的相關(guān)信號(hào)進(jìn)行在線監(jiān)測(cè)。首先按照初始化流程,輸入相應(yīng)的指令,完成對(duì)eMMC芯片內(nèi)部相關(guān)寄存器的配置。然后通過命令線觀察回應(yīng),判斷初始化完成狀態(tài)。如圖13所示,從圖中可以看出,當(dāng)主機(jī)發(fā)送完時(shí)鐘切換指令0x4603b901002f后,命令線上的回應(yīng)為0x0600000800cb,表明eMMC芯片初始化已完成。
圖13 eMMC模塊初始化驗(yàn)證圖
為加快數(shù)據(jù)的寫速率,簡化寫入步驟。在FPGA對(duì)eMMC芯片進(jìn)行寫操作時(shí),采用多塊寫的方式進(jìn)行。數(shù)據(jù)傳輸前,設(shè)置好寫入數(shù)據(jù)的塊數(shù)據(jù)寫入后,將自行完成塊數(shù)的遞增,并完成數(shù)據(jù)的寫入。發(fā)送完預(yù)設(shè)的數(shù)據(jù)字節(jié)長度后,不斷查詢數(shù)據(jù)線0上的校驗(yàn)標(biāo)志,來確認(rèn)數(shù)據(jù)寫入的正確性。如圖14所示,經(jīng)系統(tǒng)驗(yàn)證,數(shù)據(jù)線0返回的3bit CRC標(biāo)志為0x010,表示多塊寫成功。
圖14 eMMC模塊多塊寫驗(yàn)證圖
eMMC模塊數(shù)據(jù)讀操作同樣采取預(yù)先設(shè)置指定讀塊數(shù),然后發(fā)送讀命令后,自動(dòng)讀取相應(yīng)eMMC地址的數(shù)據(jù)。通過對(duì)比塊數(shù)預(yù)設(shè)值和讀取值,來判定讀流程是否結(jié)束。經(jīng)系統(tǒng)驗(yàn)證,預(yù)設(shè)讀取6塊數(shù)據(jù)幀,同時(shí)對(duì)讀取的數(shù)據(jù)幀進(jìn)行計(jì)數(shù),結(jié)果數(shù)值一致,驗(yàn)證正確。完成的方式。eMMC模塊的數(shù)據(jù)讀過程如圖15所示。
圖15 eMMC模塊多塊讀驗(yàn)證圖
對(duì)系統(tǒng)各模塊功能進(jìn)行驗(yàn)證后,需針對(duì)全局時(shí)序進(jìn)行仿真驗(yàn)證。FPGA主控模塊識(shí)別上位機(jī)輸入的寫命令,控制GTX模塊啟動(dòng)對(duì)外部數(shù)據(jù)的接收,然后經(jīng)過eMMC控制模塊對(duì)數(shù)據(jù)重新組幀處理后,將其串行輸入至eMMC陣列中。對(duì)該過程采用Chipscope進(jìn)行在線監(jiān)測(cè),如圖16所示。根據(jù)數(shù)據(jù)的采樣點(diǎn),計(jì)算其傳輸速度為2.4 Gbps,從而驗(yàn)證了本設(shè)計(jì)可以實(shí)現(xiàn)數(shù)據(jù)的高速存儲(chǔ)。
圖16 系統(tǒng)寫驗(yàn)證圖
上位機(jī)輸入讀命令后,啟動(dòng)對(duì)eMMC陣列的數(shù)據(jù)讀取。然后將讀取的數(shù)據(jù)進(jìn)行相應(yīng)的處理后,發(fā)送給GTX控制模塊發(fā)送至外部設(shè)備。對(duì)該過程采用Chipscope進(jìn)行在線監(jiān)測(cè),如圖17所示。根據(jù)數(shù)據(jù)采樣點(diǎn),計(jì)算其傳輸速度為3.0 Gbps,實(shí)現(xiàn)了數(shù)據(jù)的高速讀取。
圖17 系統(tǒng)讀驗(yàn)證圖
測(cè)試設(shè)備采用對(duì)比工具,將回讀的數(shù)據(jù)與發(fā)送的數(shù)據(jù)進(jìn)行比較后,確認(rèn)數(shù)據(jù)的一致性。驗(yàn)證了數(shù)據(jù)傳輸存儲(chǔ)的正確性和可靠性。
系統(tǒng)為實(shí)現(xiàn)對(duì)某飛行仿真數(shù)據(jù)的快速存儲(chǔ),設(shè)計(jì)了基于eMMC陣列的高速大容量數(shù)據(jù)的存儲(chǔ)設(shè)計(jì)。采用GTX控制模塊與eMMC控制模塊相協(xié)作,實(shí)現(xiàn)了對(duì)大容量數(shù)據(jù)的高速存儲(chǔ),數(shù)據(jù)存儲(chǔ)速率為2.4 Gbps。通過對(duì)數(shù)據(jù)回讀驗(yàn)證,系統(tǒng)傳輸存儲(chǔ)設(shè)計(jì)穩(wěn)定可靠,數(shù)據(jù)未出現(xiàn)錯(cuò)幀丟幀的現(xiàn)象。系統(tǒng)采用eMMC陣列進(jìn)行數(shù)據(jù)的存儲(chǔ),簡化了FPGA對(duì)存儲(chǔ)器的讀寫控制,縮短了研發(fā)周期,節(jié)約了成本,為大容量數(shù)據(jù)的測(cè)試提供了良好的保障。