許 璐,劉正軍,陳一銘
(中國測繪科學研究院航測所,北京 100036)
SD(Secure digital)卡是一種基于flash 閃存的高速存儲設備,因其記憶容量高、傳輸速率快、移動靈活性強和安全系數(shù)高等優(yōu)點被廣泛應用于音樂、攝影等數(shù)字媒體領域。但隨著數(shù)字媒體領域的快速發(fā)展,無論是對音樂還是圖像傳感器的采樣頻率、分辨率等指標都有了更高的要求,這也對SD 卡的存儲容量和存儲速度等性能參數(shù)帶來了新挑戰(zhàn)[1-2]。
SD 卡的存儲主要通過控制器實現(xiàn),目前對于SD 卡控制器的研究已經(jīng)取得了一些成果。文獻[3]采用基于ARM 處理器的方案,通過Linux 系統(tǒng)成熟的AMBA 總線模式實現(xiàn)了SD3.0 控制器的設計,但受限于ARM 芯片的串行化操作流程,實際的存儲速度很低;文獻[4]采用STM32 微控制器實現(xiàn)SD 卡的存儲,但試驗中選擇的是SPI 總線模式,這種模式實現(xiàn)方便但存儲效率過低,只適合做指令的驗證,無法應用于實際的數(shù)據(jù)存儲中;文獻[5]采用Altera NIOS Ⅱ軟核操作SD 卡控制器,實現(xiàn)了現(xiàn)場可編程邏輯門陣列(Field programmable gate array,F(xiàn)PGA)設計的SD 卡控制器的SPI(1 bit)模式,存儲效率同樣不高;文獻[6]設計和實現(xiàn)了FPGA 原型驗證平臺內部存儲系統(tǒng)DDR3 控制器及外部存儲系統(tǒng)SD 卡控制器,并結合工程應用設計了針對驗證平臺存儲系統(tǒng)的測試方案,但SD 卡采用的是2.0 版本協(xié)議,理論上的最高存儲速度只有25 MB/s,而實際應用中會更低,無法滿足數(shù)據(jù)的高速存儲需要;文獻[7]設計了一種基于SD3.0 協(xié)議的分布式RTL 級控制器,采用8 路TF 卡存儲陣列,但此方案存在各個存儲介質間的協(xié)同性工作問題,并且占用面積很大,不適合小型化的數(shù)據(jù)存儲方案。考慮到以上方案的不足,結合本實驗的需求,本文設計一種基于FPGA 芯片的SD(TF)卡控制器,通過SD3.0 協(xié)議的4bit 傳輸模式,對單TF 卡實現(xiàn)扇區(qū)寫數(shù)據(jù)操作,旨在占用最小體積的同時,通過提高數(shù)據(jù)的存儲效率,實現(xiàn)更快的數(shù)據(jù)存儲速度。
在芯片的選擇上,F(xiàn)PGA 作為一種可反復擦寫的編程芯片,相比其他可編程芯片,其內部資源豐富、開發(fā)成本低、靈活性高、設計周期更短。本實驗采用Xilinx 公司的Artix-7 系列芯片,該系列芯片在單個成本中提供了最高性能的功耗比結構、收發(fā)器線速、DSP 處理能力以及AMS 集成,可充分滿足對SD 卡控制器的設計資源需求[8-9]。存儲協(xié)議的選擇上,本實驗采用可行性更高的SD3.0 協(xié)議作為SD 卡的存儲協(xié)議。該協(xié)議通過串行指令的發(fā)送—響應模式,實現(xiàn)對SD 卡的初始化操作,指令結構相對簡單,操作便捷,并且理論存儲速度可達104 MB/s[1],適合自主性設計,滿足存儲速度要求。緩存設備的選擇上,通過DDR3+RAM+FIFO 內外存儲資源相結合的方式將24 bit 位寬數(shù)據(jù)轉換成4 bit 位寬數(shù)據(jù)存入TF 卡中。DDR3作為外部緩存設備對寫入的數(shù)據(jù)進行暫存,彌補FPGA 芯片內部存儲空間不足的缺陷。FIFO與RAM相結合,實現(xiàn)數(shù)據(jù)位寬的轉換、跨時鐘域的處理與數(shù)據(jù)的發(fā)送前準備工作。本實驗的系統(tǒng)結構如圖1所示。
圖1 系統(tǒng)結構圖Fig.1 System structure diagram
為保證功能的需要,數(shù)據(jù)采集卡通過對電路需求的分析、設計、焊接、調試等過程實現(xiàn)。板卡具有一個9~24 V 直流輸入接口,2 個12 V 直流輸出,總功率12 W,各有一個LED 指示燈;5 V 和3.3 V 電源狀態(tài)指示燈各一個,電線接地端(GND)測試點若干。采用現(xiàn)有成熟的沉金工藝,板卡抗氧化性好、壽命長、導電性好。4 層PCB 板的設計,彼此間通過通孔、埋孔、盲孔互聯(lián),可靈活設計,提供了更大的布線空間,最重要的是在高頻電路中滿足對于電磁屏蔽的需求,提升了電路整體的穩(wěn)定性與性能。由于SD3.0 協(xié)議頻率最高可達208 MHz,所以TF 卡的走線需布線等長,保持一致,且與FPGA 芯片間的距離不能過大。
數(shù)據(jù)采集卡的硬件實物圖如圖2 所示。板卡由ARM+FPGA 雙芯片控制,F(xiàn)PGA 負責大規(guī)模數(shù)據(jù)的存儲,ARM 負責其他指令的控制,本文實驗不涉及ARM 芯片的控制內容。在FPGA 芯片周圍有很多擴展接口與LED 燈,支持與其他設備的互聯(lián)和電路狀態(tài)的顯示。其中J2:MDR26 接口負責與Camera Link 接口的前端采集設備相連,將采集到的數(shù)據(jù)與控制信號經(jīng)過解碼芯片的譯碼直接發(fā)送給FPGA;J3、J4、J10 為雙芯片的外接串口,用于控制板與上位機、傳感器之間的數(shù)據(jù)通信;實驗數(shù)據(jù)通過FPGA 芯片控制存儲在J8A 中,該部分數(shù)據(jù)存儲量大、存儲速度要求高,采用基于SD3.0 協(xié)議的雙電壓SD 卡座。該卡座與FPGA 芯片相連,芯片提供3.3 V 與1.8 V 雙電壓引腳,二者并聯(lián)。初始化過程中根據(jù)實際需要屏蔽低電平引腳,收到CMD11 指令之后選中低電平引腳,屏蔽高電平引腳最終實現(xiàn)TF 卡引腳電平的切換過程。之所以要進行電平切換,主要是需要電路實現(xiàn)電荷的快速充放,提高高頻模式下的傳輸速度;J11為FPGA 程序的下載接口,負責與PC 相連,用于程序更新;J1A 與J1B 責提供9~24 V 的電壓,為整個板卡供電,并保持電壓穩(wěn)定。
圖2 數(shù)據(jù)采集卡實物圖Fig.2 Physical image of data acquisition card
芯片內部采用FPGA 自帶的時鐘管理單元混合模式時鐘管理器(Mixed-mode clock manager,MMCM)、MIG7 控制器、RAM IP 核、FIFO IP 核與LUT 資源等實現(xiàn)指令交互與數(shù)據(jù)傳輸功能。指令流程狀態(tài)機負責TF 卡不同模式下指令的收發(fā)和條件的判斷,數(shù)據(jù)流程狀態(tài)機負責對FIFO 和CRC16校驗模塊進行控制,控制數(shù)據(jù)流的輸入和CRC 校驗的開始與停止。并且內部使用異步存儲器實現(xiàn)設計,這主要是考慮到時鐘頻率的改變以及跨時鐘域的時序約束問題[10-11]。
FPGA 芯片外接100 MHz 晶振為整個芯片提供時鐘。輸入的100 MHz 時鐘送入芯片內部,通過MMCM的倍頻與分頻操作,輸出200、20 和166.667 MHz 的3 路時鐘[12],200 MHz 時鐘通過一個分頻計數(shù)器再輸出一個不到400 kHz 的時鐘。這4 路時鐘用于TF 卡模式轉換、數(shù)據(jù)發(fā)送、DDR3 輸入和參考時鐘,構成芯片內部時鐘樹。
SD3.0 協(xié)議支持兩種電壓的工作模式,具體如表1 所示。實驗中采用理想速度最快的SDR104 模式實現(xiàn)TF卡的數(shù)據(jù)寫入,此時的卡也必須支持引腳電壓的轉換。
表1 SD3.0 模式參數(shù)指標Table 1 Parameter index of SD3.0 mode
SD3.0 協(xié)議由空閑狀態(tài)、卡識別模式和數(shù)據(jù)傳輸模式3 部分組成。發(fā)送CMD8 指令詢問TF 卡支持的電壓是否滿足要求;收到CMD11 指令后進行電壓切換;CMD6 負責TF 卡的模式轉換;功能切換正確后,強制要求發(fā)送CMD19 指令進行時鐘調制,保證在高頻狀態(tài)下時鐘的穩(wěn)定性。發(fā)送CMD25 指令進入數(shù)據(jù)傳輸模式,實現(xiàn)TF 卡的連續(xù)寫操作;寫結束后發(fā)送CMD12 指令對卡緩沖區(qū)內的數(shù)據(jù)進行編程。
對于發(fā)送指令和數(shù)據(jù)的時鐘而言,在電壓轉換之前,時鐘為100~400 kHz,電壓轉換之后進入SDR12 模式進行傳輸,最高頻率為25 MHz,當接收到CMD6 指令的返回值8 個時鐘周期之后,TF 卡即可進入高速模式(SDR104),最高頻率可用為208 MHz,本實驗中采用200 MHz。
現(xiàn)有的方案中,由需要電壓轉換而帶來控制電路的特殊性,使得選擇FPGA 實現(xiàn)SD3.0 的方案較少,大部分的方案或基于SD2.0 協(xié)議[13-14],或選擇串行外設接口(Serial peripheral interface,SPI)模式[15]實現(xiàn)數(shù)據(jù)的存儲。這種方案的理論存儲速度不僅很低,只有25 MB/s,實際應用中,存儲效率也只有SD 模式的25%,遠遠達不到快速數(shù)據(jù)存儲的使用要求。文獻[16]中,作者選擇SD3.0 模式設計了一種基于FPGA 的SD 卡控制器,通過多次的讀寫測試,采用頂層模塊設計與相位調整的方法,設計出了一款讀寫速度約為35 MB/s 的SD3.0 控制器。雖然與理想速度104 MB/s 仍存在較大差距,但此方案為實現(xiàn)更快速度的SD3.0 控制器方案提供了事實依據(jù)。
實驗中發(fā)現(xiàn),當一邊發(fā)送數(shù)據(jù)一邊進行CRC16 校驗計算時,得到的校驗結果與正確值存在一個時鐘周期的偏移,這使得當數(shù)據(jù)發(fā)送完畢后CRC16 的正確校驗值還未計算完成。為解決這一問題,提高數(shù)據(jù)的傳輸效率與準確性。本文提出如下3 種方案:
(1)采用先計算CRC 校驗值后發(fā)送數(shù)據(jù)的方式,可以保證數(shù)據(jù)發(fā)送的準確性。但此方案會使TF卡總線利用率大大降低。先計算一遍校驗值再發(fā)送數(shù)據(jù)相當于對本組數(shù)據(jù)進行了兩次串行處理,導致總線利用率不超過50%,在實際測試過程中傳輸速率結果大約30 MB/s,與文獻[16]結果相差不大。
(2)數(shù)據(jù)的校驗計算先于發(fā)送的數(shù)據(jù),即CRC16 計算比發(fā)送數(shù)據(jù)至少優(yōu)先一個時鐘周期,實現(xiàn)過程中需要準備兩組相同的緩存資源,一組用來優(yōu)先進行校驗計算,另一組延后至少一個周期進行數(shù)據(jù)的發(fā)送,確保數(shù)據(jù)發(fā)送完畢時校驗結果也能正確完成。這種方法相對于上一種總線利用率大幅增加,數(shù)據(jù)的傳輸速率也大幅上升,不到50 MB/s。
(3)如圖3 所示,將FIFO 輸出的數(shù)據(jù)先分為相同的兩路,一路輸入到一級緩存的同時另一路同步進行CRC16 校驗,這樣可以保證CRC 校驗得到的結果與一級緩存中的待發(fā)送數(shù)據(jù)保持匹配。將數(shù)據(jù)與CRC 校驗結果拼接后并行送入二級緩存,這種并行的處理方法雖然會占用很大的總線帶寬但只占用一個時鐘周期,提高了電路的執(zhí)行速度。在數(shù)據(jù)由二級緩存發(fā)送給TF 卡的過程中一級緩存又可同時進行數(shù)據(jù)流輸入與CRC 校驗操作,將串行處理的過程同步進行。若TF 卡正確的返回一個正脈沖“010”,則證明發(fā)送數(shù)據(jù)準確,一級緩存中的數(shù)據(jù)將繼續(xù)送入二級緩存當中,循環(huán)往復。此方案不僅提高了總線利用率,而且當數(shù)據(jù)發(fā)送錯誤時也可重新發(fā)送,使傳輸鏈路更加可靠。
圖3 方案3 存儲流程示意圖Fig.3 Schematic diagram of storage process of Scheme 3
圖4 為TF 卡返回正確響應的示意圖,圖中紅圈為TF 卡的響應信號(一位起始位“0”,正脈沖“010”。一位終止位“1”)。當TF 卡返回此信號后,證明數(shù)據(jù)被正確寫入TF 卡緩沖區(qū),等待編程。
圖4 TF 卡響應信號Fig.4 TF card response signal
現(xiàn)有的圖像采集卡產(chǎn)品已十分成熟,性能穩(wěn)定,具有一定的通用性。但部分采集卡的體積過大,集成度不高,無法滿足小型存儲方案的設計要求,也無法滿足特定的功能需求。為此,本文選擇自行設計采集卡實現(xiàn)小型化存儲方案,部分圖像采集卡的參數(shù)見表2。表2 中,SD 采集卡采用的是SDHC 接口,雖然體積較小,但存儲容量不高,存儲速度低,無法作為數(shù)據(jù)的高速存儲方案;采用Camera Link/HDMI+PCI-e 的圖像采集卡需要外接存儲設備,集成度較低,實際應用起來占用體積較大,不利于實現(xiàn)小型化存儲;本文設計的采集卡,將支持SD3.0 協(xié)議的小型TF 卡存儲介質集成于板卡上,TF 卡尺寸規(guī)格為15 mm×11 mm×1 mm,遠小于市場上主流的存儲設備。使用此方案不僅提高了采集卡整體的集成度,板卡具有豐富接口的同時,面積只有差不多手掌大小,可實現(xiàn)占用較小體積下數(shù)據(jù)的高速存儲功能,是一種高集成度的應用方案。
表2 采集卡參數(shù)Table 2 Acquisition card parameters
PCB 信號完整性主要包括阻抗不匹配引起的信號過沖、不同網(wǎng)絡之間耦合引起的信號串擾和傳輸通道損耗引起的信號邊沿退化等,會造成電路的功能錯誤,產(chǎn)生電磁兼容問題。為保證板卡硬件設計性能穩(wěn)定、板級輻射發(fā)射不超標,本文使用Mentor Graphics 公司的EDA 軟件HyperLynx 對電路做板級信號完整性仿真分析。
3.2.1 信號過沖測試
信號電平發(fā)生跳變后,第一個峰值電壓或谷值電壓超過預設值,叫做信號過沖,由信號過沖引起的振鈴效應會產(chǎn)生嚴重電磁干擾(Electro-magnetic interference,EMI)。產(chǎn)生過沖的主要原因是傳輸線阻抗不匹配造成信號多級反射的疊加。為避免由信號過沖帶來電壓波動,產(chǎn)生對信號閾值的誤判,本文通過過沖仿真,優(yōu)化布線阻抗和端接阻抗等方法,最小化振鈴效應,減小PCB 的輻射發(fā)射,改善電路板的電磁兼容特性。
如圖5(a)所示,信號有輕微過沖,經(jīng)電路原理圖分析,發(fā)現(xiàn)是端接阻抗不匹配而引起的振鈴效應,這可能會導致元器件多次判斷峰值電壓與谷值電壓,得到錯誤的邏輯結果,或使得保護二極管工作于不正常的狀態(tài),影響電路整體功能的實現(xiàn)。為改善信號振鈴,實驗中在TF 卡存儲網(wǎng)絡首末兩端各加入50 Ω 電阻實現(xiàn)端接阻抗匹配,由此得到圖5(b)所示效果。從圖中可以看出,振鈴效應得到了明顯改善,無多峰值或谷值的情況出現(xiàn),保證了電路信號的穩(wěn)定性與閾值判別結果的準確性。
圖5 信號過沖驗證結果Fig.5 Signal overshoot verification results
3.2.2 信號串擾測試
串擾是多個不同網(wǎng)絡間的相互干擾,其機理是傳輸線之間的容性和感性耦合。容性耦合產(chǎn)生耦合電流,而感性耦合引發(fā)耦合電壓,PCB 板層的參數(shù)、信號線間距、驅動端和接收端的電氣特性及線端接方式對串擾都有一定的影響。實驗中設定軟件串擾門限(邏輯高電平的5%左右)后,添加攻擊網(wǎng)絡,對TF 卡存儲進行網(wǎng)絡攻擊得到如圖6 所示的測試結果,圖中所示信號沒有產(chǎn)生明顯的扭曲變形,證明在TF 卡存儲的網(wǎng)絡中,布線間距合理,高速信號線間距離適中,沒有發(fā)生明顯的電壓、電流耦合現(xiàn)象,電路性能可靠。
圖6 串擾測試結果Fig.6 Crosstalk test results
若實驗中產(chǎn)生了嚴重的信號串擾,導致信號波形產(chǎn)生了嚴重形變,可以采用增加信號間的間距、降低耦合長度、降低路徑特性阻抗和增加短路過孔的防護布線等優(yōu)化方式。
3.2.3 輻射仿真
電磁兼容(Electro-magnetic compatibility,EMC)仿真提供了一個可添加單一驅動輸出網(wǎng)絡的輻射狀況,模擬天線的輻射發(fā)射場。實驗中設置天線距離PCB 長度3 m,得到DATA0 網(wǎng)絡的輻射仿真結果如圖7 所示。本實驗中選擇的200 MHz 頻率上受輻射較小,證明PCB 設計在200 MHz 頻率上可提供較強的抗輻射性。
圖7 DATA0 網(wǎng)絡的輻射仿真測試結果Fig.7 Radiation simulation test results of DATA0 network
實驗采用Xilinx 公司商用EDA 工具Vivado 2018.3,PC與FPGA 芯片通過QSPI 模式互聯(lián)對軟件IP 核集成邏輯分析儀(Integrated logic analyzer,ILA)進行觀察,分析其波形與實驗結果。
3.3.1 存儲速度分析
將測試用數(shù)據(jù)寫入扇區(qū),持續(xù)5 min。通過Winhex 軟件觀察,記錄寫入數(shù)據(jù)的最后一個扇區(qū),與起始扇區(qū)之差為寫入的總扇區(qū)數(shù),通過此方法計算硬件測試寫入平均速度。通過DiskMark 軟件測試TF 卡的寫入速度記為軟件測試平均寫入速度。選用不同品牌的TF 卡,測試其寫入數(shù)據(jù)的性能,幫助驗證TF 卡控制器的設計方案是否具有廣泛適用性,能否滿足實際需求,具體測試結果見表3。
表3 分別記錄了不同品牌、不同容量TF 卡的軟測和硬件的平均寫入速度。通過實驗分析發(fā)現(xiàn),實際的存儲速率與理想存儲速率104 MB/s 仍有很大差距。通過觀察軟件IP 核ILA看出,數(shù)據(jù)的寫入狀態(tài)滿足CMD25 指令的連續(xù)寫要求,但寫入一定的數(shù)據(jù)量之后,TF 卡會處于一個相對長時間的“BUSY”狀態(tài),即data0 總線上返回大量周期的低電平,如圖8 紅圈部分所示。這是一個不可避免的過程,由TF 卡的寫入機制可知,寫入的數(shù)據(jù)暫存在TF 卡緩沖區(qū)當中,等到緩沖區(qū)寫滿才會一次性寫入扇區(qū)中,在這個階段中,數(shù)據(jù)將無法寫入TF 卡,所以實際的存儲速率與理論值仍有一定差距。
表3 寫入速度記錄表Table 3 Writing speed record table
圖8 TF 卡BUSY 狀態(tài)示意圖Fig.8 Schematic diagram of BUSY state in TF card
分析軟件與硬件的平均測試速度發(fā)現(xiàn),硬件測試得到的平均寫入速度大體上要略高于軟件測試的平均寫入速度,說明通過直接寫扇區(qū)的操作能夠更大限度地提升TF 卡的寫入效率,提高寫入數(shù)據(jù)速度;并且部分TF 卡的寫入速度可超過60 MB/s,遠高于已有的一些SD 卡控制器的設計方案。
3.3.2 數(shù)據(jù)可靠性分析
測試用數(shù)據(jù)由24 位寬加法器組成,由FPGA 計數(shù)實現(xiàn)。第一個數(shù)據(jù)是24 位“0x000001”,最后一個是24 位“0x00003ff”,一組數(shù)據(jù)由1 024 組16 進制數(shù)據(jù)構成。通過寫入已知的實驗數(shù)據(jù)可方便后期驗證是否存在混亂、誤碼與丟失,具體結果如圖9 所示。每次寫完一個循環(huán)后,寫入一組“0xaabbccddeeff”的數(shù)作為幀尾,方便對數(shù)據(jù)的快速定位與查找。
圖9 測試數(shù)據(jù)結果Fig.9 Test data results
圖9 結果表明,本數(shù)據(jù)塊內數(shù)據(jù)的寫入保持連續(xù),數(shù)據(jù)塊的銜接上也保持連續(xù),與理論分析的結果相同,通過連續(xù)10、20、30 min 寫數(shù)據(jù)系統(tǒng)測試表明,測試結果與圖9 所示相同,并且無誤碼,說明測試得到的數(shù)據(jù)準確度較高,寫入系統(tǒng)性能穩(wěn)定,具備長時間數(shù)據(jù)寫入能力。
本文采用Xilinx 公司的Artix-7 系列FPGA 與SD 協(xié)會3.0 版本協(xié)議實現(xiàn)對SD(TF)卡的數(shù)據(jù)寫入。采用前期PCB 設計、電路板制作、FPGA 代碼編寫調試等實現(xiàn)流程。通過設計與實現(xiàn),得到以下結論:
(1)通過FPGA 芯片實現(xiàn)SD(TF)卡控制器的方案具有一定的可行性,自主設計的采集卡體積小,集成度高,通過PCB 的板級信號完整性驗證設計得到的控制板性能穩(wěn)定。
(2)使用Verilog 語言完成SD(TF)卡控制器的RTL 實現(xiàn)方案,將24 bit 位寬數(shù)據(jù)經(jīng)過DDR3、RAM、FIFO、一級緩存等級聯(lián)存儲介質送入二級緩存中與TF 卡直接對接,通過數(shù)據(jù)流程狀態(tài)機的控制將數(shù)據(jù)寫入TF 卡,通過方案對比這一RTL 級流程無差錯、無數(shù)據(jù)混亂,并且數(shù)據(jù)發(fā)送速率最快,可靠性最高。
(3)經(jīng)過測試,寫扇區(qū)的方式比寫文件速度略快,通過驗證不同TF 卡的寫入速度選擇速度合適的TF 卡作為存儲介質,滿足對于寫入速度60 MB/s 的最低需求,長時間測試性能穩(wěn)定。
(4)此TF 卡控制器適用于所有支持SD3.0 協(xié)議的TF 卡,具有一定的普適性。
與主流的ARM 實現(xiàn)SD(TF)卡控制器方案不同,本實驗選擇處理速度更快的FPGA 作為核心控制芯片,通過調用其內部豐富的資源與IP 核完成靈活的方案設計。該方案更利于模塊化的實現(xiàn),方便后續(xù)功能的擴展,提高了系統(tǒng)的集成度,為小型化存儲實驗提供了有效的解決方案。