(廈門海洋學院 信息技術系,福建 廈門 361000)
由于遙測系統數據信息量較大,在存儲過程中所占用的空間也相對較大,為了減少數據傳輸過程中所耗費的時間和所占用的空間,盡可能在有限信道內對數據進行存儲,能夠有效降低功率和帶寬要求。數據存儲目的就是數據能夠更高效傳輸,節省存儲空間,因此對于數據存儲器控制模塊設計在工程上具有很大應用前景[1]。早期采用分離式、小規模芯片搭建的控制模塊,結構復雜,可靠性較差,隨著大規模器件的出現,早期控制模塊受到噪聲影響已經無法滿足數據高效存儲需求[2]。因此,在遙測技術背景下,提出了基于FPGA的遙測系統數據存儲器控制模塊設計,具有實時高速大容量存儲功能,能夠及時記錄數據在存儲過程中狀態參數,采用多個存儲單元并行存儲,能夠更好匹配數據傳輸,并提高存儲控制速率,經過此控制模塊后,數據量減少,傳輸頻帶也相對減少,有效提高了數據存儲效率。
在實際環境中,要求數據存儲器控制模塊,低電壓差分信號接口的數據傳輸速率低于60 MB/S,并保證數據存儲器能夠可靠傳輸數據,存儲容量不低于10 GB[3]。
模塊總體設計框圖如圖1所示。

圖1 模塊總體設計框圖
由圖1可知:FPGA芯片的功能是輔助數字緩沖單元、數字存儲單元和數據位數轉換單元模塊實現數據存儲器控制。其通過與外部控制單元相連接,能夠緩沖存儲后的編碼數據。在數據讀取模塊,將存儲后的數據通過接口電路顯示在電腦中進行讀取,由此獲取被高效控制后的數據[4]。
在模塊總體設計框圖下,設計實現方案:輸入數字信號,添加數據緩沖模塊降低數據流速,并緩沖輸入數字信號。將數據存儲編碼后,輸出數據編碼流,經過數據位數轉換單元,將數據編碼流轉換為數據形式,流向外部控制單元[5]。經過接口電路將存儲后的數據讀取到電腦之中,經過模塊軟件功能設計,使數據存儲不會受到噪聲干擾,保證數據存儲高效性[6]。
數據存儲器控制模塊總體結構設計如圖2所示。

圖2 控制模塊總體結構
由圖2可知,將控制模塊結構分為三部分,分別是自體測試接口模塊、低速讀寫控制模塊、高速流讀寫控制模塊。其中自體測試接口模塊是將隨機數發生器產生的數據寫入控制模塊之中,并將讀出與寫入數據進行對比,實現自體測試,如果測試結果顯示正常,則說明控制模塊有效果[7]。反之,如果測試結果顯示錯誤,則說明控制模塊無效果;低速讀寫控制模塊可直接寫入讀取控制模塊指定地址的單個數據;高速流讀寫控制模塊可大批量寫入讀取控制模塊任意地址的數據。
1.1.1 存儲器命令控制
高速大容量數據存儲器控制系統是以SATA2.0接口為存儲介質設計的控制器,采用MSM6290高速存儲芯片作為存儲介質,能夠大大縮短尋道時間[8]。SATA2.0控制器工作性能是由物理層、鏈路層、傳出層和命令控制層決定的,當數據從物理層數據收發到命令層過程中,每一層都是由自體檢測狀態機進行控制的[9]。存儲器命令控制界面設計如圖3所示。

圖3 存儲器命令控制界面
根據存儲器命令控制界面,將采集命令與數據分層,可加快控制部分速度,并提高數據傳輸穩定性,使數據在極短時間內完成原語交互、信息處理和命令生成,最大程度發揮固態硬盤優勢[10]。
1)物理層為控制器最底層,其性能好壞決定了數據傳輸質量,與鏈路層模塊之間使用原語級別通訊[11]。
2)鏈路層是數據傳輸的一個通路,負責原語的收發控制,以此保證比特一級數據到幀一級數據能夠成功轉變。鏈路層例化接口示意圖如圖4所示。

圖4 鏈路層例化接口示意圖
在每一幀收發狀態鏈路層控制模塊下,啟動相應收發控制狀態機,使原語不受到限制完成交互行為,同時啟動擾碼校驗,使整個傳輸工作完成控制后,并重新返回給控制模塊,以此等待新傳輸命令[12]。
3)傳輸層負責接收不同幀中數據和命令,從中提取出來,轉交給命令層使用,通過構建不同幀實現鏈路層數據間的傳輸轉換。
4)命令控制層是將用戶輸入讀寫的起始和結束地址轉換成命令幀的一系列命令值,無需CPU干預,直接依靠硬盤與傳輸設備之間進行數據傳輸。
在該控制器下,設計觸發接口電路。
1.1.2 觸發接口電路
FPGA雖然有多種接口標準,但是承載負載能力較差,因此,對于觸發接口驅動電流應保持在100mA左右,才可滿足設計要求。
主控單元在接收到觸發信號后,需立即觸發控制模塊,并監測各模塊運行狀態。外觸發信號包括按鈕和外部觸發信號,無論信號上升或下降都可隨時觸發延時,因此,在FPGA程序中采用自體檢測狀態機實現觸發信號判斷,其原理如圖5所示。

圖5 觸發接口電路
為了防止數據丟失,設計穩態觸發接口電路,其中S1為高電平時,C2釋放電量,LM393比較器輸出高電平;S1為低電平時,C2通過R2進行充電,LM393比較器反相端電位升高,如果C2電壓比流經LM393比較器電壓要高,那么LM393比較器旋轉,輸出低電平,進而達到觸發目的。
1.1.3 高速流讀寫控制模塊
一旦接口電路被觸發,那么控制模塊可進行高速流讀寫控制。高速流讀寫控制模塊中最重要的部分是緩沖單元,在每次寫入數據時,需重新對HALF_DEPTH進行定義。通過用戶使用流讀寫操作,可完成存儲數據快速讀寫,對于大批量數據流處理具有重要作用。
針對數據流讀寫,用戶需將提供的數據寫入模塊之中,等待模塊中數據量達到總容量1/2時,開始讀取將要存儲的數據,將讀取后的數據存儲到存儲器之中;當控制器接收到用戶讀取信號時,直接將讀取的數據寫入存儲器控制模塊之中。如果信號有效,則表示數據中存在未讀取數據,用戶可再次讀取;如果信號無效,則需繼續等待。此時,用戶需提供數據起始和終止地址以及請求信號,實現跨時鐘域存儲控制。
采用高速存儲SATA2.0接口為存儲介質設計控制器,可在物理層、鏈路層、傳輸層和命令控制層中進行數據間傳輸轉換,最大程度發揮固態硬盤優勢,在該控制器下,設計觸發接口電路。觸發接口驅動電流保持在100 mA左右,為防止數據丟失,添加LM393比較器,防止電平輸出過高,達到高速流讀寫控制觸發目的,由此完成模塊結構設計。
硬件采用Cyclone系列FPGA芯片,編譯環境為QuartusⅡ集成開發環境,使用LPC2214芯片,設計模塊功能。模塊功能設計主要包括主控單元、延時控制單元和通信單元,其中主控單元采用C語言進行設計,該部分程序包括液晶顯示子程序、鍵盤操作子程序、數據存儲子程序和RS485通信子程序;延時控制單元包括輸出控制子程序、測試子程序;通信單元包括主控單元分別與主機通信和延時控制單元與主機通信的協議。
數據存儲器控制模塊啟動時,需先自體檢查,如果需要參數設置,那么將該參數全部寫入存儲器之中;反之,如果不需要參數設置,則直接從數據器中讀取即可。軟件主流程設計如下所示:
1)模塊初始化;
2)功能選擇;
3)啟動功能,觸發外接電路,查看延時是否結束?如果結束,則需及時記錄并存儲;如果沒有結束,則需顯示狀態數據;
4)功能設置,通道注冊管理,按照通道進行參數設置,存儲相關參數,并傳送至延時控制單元;
5)通信功能負責直接與PC主機通信;
重復步驟3)、4)、5)完成軟件主流程設計,根據該流程分別對FPGA時序和分時操作進行控制,以此實現數據高效存儲。
1.2.1 FPGA時序控制
為了提高模塊控制效率采用FPGA時序控制,根據插入寄存器減小延遲,使觸發接口電路內部所達到的最高傳輸頻率是由模塊本身時頻來決定,組合邏輯延時情況如圖6所示。

圖6 組合邏輯延時
圖中T1表示時鐘輸出時間;T2表示組合邏輯延遲;T3表示網線延遲;T4表示時序邏輯建立時間;T5表示時鐘信號偏斜。
數據每存儲一次所經歷的最小周期為:
T=T1+T2+T3+T4-T5
(1)
其中:T5=TCD1-TCD2,在觸發接口電路設計中的網線延遲T3和時鐘信號偏斜T5出現概率極低,因此可以忽略不計,由此得到最小周期為:
T=T1+T2+T4
(2)
在組合邏輯中插入寄存器使邏輯延遲,由2*25 ns降到25 ns,保證電路具有極高運行速率。
1.2.2 分時控制
為了有效實現過傳輸層完成幀的收發,需要模塊進行分時控制。在FPGA時序控制條件下,邏輯延遲由2*25 ns降到25 ns,使編程在加載過程中地址和命令的下發時間更為精準,通過FPGA自動編程可完成數據存儲。對命令層中控制器傳輸模式工作流程進行設計,也就是對數據讀寫模式進行控制,具體設計內容如下所示:
1)SATA2.0控制器接口命令為:
邏輯區塊LBA地址X1——Xn&讀/寫命令&工作模式;
2)邏輯區塊LBA讀/寫地址計算,需要的參數有:
寄存器同步帶及內存存取組建幀數量、數據幀數量、內存存取初始化參數配置;
3)讀/寫控制狀態機:
命令層收發幀命令:數據幀組建命令、寄存器組建命令、幀接收正確命令、寄存器接收命令、內存存取幀組建命令、協調幀組建命令;
4)寄存器同步帶和寄存器設備反饋經過組建命令,開始初始化整理,獲取初始化地址X1,調整數據幀,依次獲取寄存器同步帶邏輯區塊LBA地址Xn和寄存器設備反饋地址Xn。
從SATA2.0控制器接口命令接口為出發點,經過命令層控制最終實現傳輸層完成幀的收發。
根據軟件主流程對FPGA時序和分時操作進行控制,其中FPGA時序控制是在組合邏輯中插入寄存器使邏輯出現延遲,計算數據每存儲一次所經歷的最小周期,使邏輯延遲由2*25 ns降到25 ns,提高電路運行速率。通過FPGA自動編程對數據讀寫模式進行控制,采用分時操作方法,實現傳輸層完成幀的控制收發,由此完成模塊軟件功能設計。
通過 QuartusⅡ軟件開發平臺對基于FPGA的遙測系統數據存儲器控制模塊設計合理性進行驗證,同時對控制后的實驗結果通過軟件編譯進行分析。
實驗參數界面設置如圖7所示。

圖7 實驗參數界面設置
針對命令層接口各個信號進行標記分析,為實驗研究提供支持,接口信號表如表1所示。

表1 接口信號表
通過觀察信號選擇命令,結合時序圖對數據的讀寫情況進行分析。
數據讀取與寫入過程時序如圖8所示。

圖8 數據讀寫過程時序
數據讀取時序:生成命令并輸入有效命令,下達命令并輸出有效命令,通過Data_ out輸出數據,經過Data_ outv輸出有效數據。
數據寫入時序:生成命令并輸入有效命令,下達命令并輸出有效命令,通過Data_in輸入數據,經過Data_ inv輸入有效數據。
通過命令接口輸入讀命令,用戶端通過啟動讀允許rd_en開始讀取控制器緩存數據;而控制器通過寫允許wt_allow暫停數據接收。根據數據讀寫過程時序,分析數據存儲波形,如圖9所示。

圖9 數據存儲波形圖
圖9所示為實際環境中數據存儲波形圖,測試輸入為a0、a1、a2、a3、a4循環的一組數據,經過存儲器存儲后的數據為a0、a4、a8、a15、a27、a39、a48、a6...,說明該存儲器中還有其它存儲數據,但不影響整體數據存儲都是以a種數據存儲的標準。在該條件下,將傳統模塊與基于FPGA的遙測系統模塊對數據存儲器控制情況進行對比分析,結果如圖10所示。

圖10 兩種模塊數據存儲器控制情對比分析結果
由圖10可知:統一測試輸入為a0、a1、a2、a3、a4循環的一組數據,經過傳統模塊控制后的數據存儲結果為a0、b3、b6、a5、b35、b48、b52、a6...,而經過基于FPGA模塊控制后的數據存儲結果為a0、a5、a8、a15、a65、a32、a41、a6...。傳統數據存儲器控制模塊中出現了除a以外的b種數據存儲標準,而基于FPGA模塊只有a種數據存儲標準。由此說明,基于FPGA模塊對數據存儲器控制效果較為理想,為了精準分析該模塊具有較高控制效果,對這兩種模塊控制效率進行對比分析,結果如表2所示。

表2 兩種模塊控制效率對比分析 %
由表2可知:在無噪聲影響下,傳統模塊數據存儲器控制效率維持在65%以上,而基于FPGA模塊數據存儲器控制效率都在95%以上,且當實驗次數為9次時,傳統模塊數據存儲器控制效率達到最高為74.3%,實驗次數為1次時,傳統模塊數據存儲器控制效率達到最高為98.7%。在有噪聲影響下,傳統模塊數據存儲器控制效率都低于45%,基于FPGA模塊數據存儲器控制效率仍然穩定在95%以上,當實驗次數為5次時,傳統模塊數據存儲器控制效率達到最低24.3%,實驗次數為6次時,傳統模塊數據存儲器控制效率達到最低為95.1%。詳細分析在噪聲影響下兩種模塊控制效率,對比結果如下所示:
在實驗次數為1次時,基于FPGA模塊比傳統模塊控制效率高62.1%;實驗次數為2時,基于FPGA模塊比傳統模塊控制效率高59.5%;在實驗次數為3次時,基于FPGA模塊比傳統模塊控制效率高59.6%;在實驗次數為4次時,基于FPGA模塊比傳統模塊控制效率高68.3%;實驗次數為5時,基于FPGA模塊比傳統模塊控制效率高72.1%;在實驗次數為6次時,基于FPGA模塊比傳統模塊控制效率高66.4%;實驗次數為7時,基于FPGA模塊比傳統模塊控制效率高57.6%;實驗次數為8時,基于FPGA模塊比傳統模塊控制效率高56.4%;實驗次數為9時,基于FPGA模塊比傳統模塊控制效率高60.7%;實驗次數為10時,基于FPGA模塊比傳統模塊控制效率高64.8%。因此,采用基于FPGA模塊控制效率較高,說明該模塊控制效果較好。
使用QuartusⅡ軟件開發平臺對輸入的數據進行實驗分析,結果與理論一致,說明了基于FPGA的遙測系統數據存儲器控制模塊設計的合理性。通過對FPGA資源占用率可看出,該系統符合一般系統設計標準。
圍繞基于FPGA的遙測系統展開的數據存儲器控制模塊設計,采用FPGA 芯片實現數據高效存儲。根據軟件工程原理以及硬件結構功能,劃分各個模塊,并對模塊功能進行詳細設計。利用QuartusⅡ編譯環境對硬件、軟件進行編譯與調試,并得到一組實驗數據。由實驗結果可知,該模塊具有較高控制效率,為數據高效存儲提供支持。
雖然基于FPGA的遙測系統數據存儲器控制模塊具有良好控制效果,但在硬件數據壓縮方便還需進一步研究,使數據存儲器能夠在多元化壓縮條件下,降低芯片邏輯數量,提高整體可靠性。在航天和醫療領域,進行數據存儲時,需先對數據進行壓縮再存儲,進一步減少電路體積,使系統擁有更廣闊應用前景。