王 偉,郝小龍,周 靜,楊 誠,高國寅
(1.西安石油大學(xué) 電子工程學(xué)院,陜西 西安 710065; 2.西安石油大學(xué) 油氣鉆井技術(shù)國家工程實驗室井下測控研究室,陜西 西安 710065)
隨著油氣勘探與開發(fā)的不斷深入,鉆井工程越來越依賴隨鉆測井的遠探測地質(zhì)導(dǎo)向功能。基于隨鉆測量、地質(zhì)導(dǎo)向和旋轉(zhuǎn)導(dǎo)向的“測定導(dǎo)”一體化技術(shù)成為優(yōu)化井筒軌跡、提高油氣采收率的重要手段[1-2]。
目前,隨鉆電磁波電阻率和方位伽馬測井在地質(zhì)導(dǎo)向中應(yīng)用較多[3-5]。隨鉆聲波測井每個測量點的數(shù)據(jù)量遠大于這兩種技術(shù)所對應(yīng)的數(shù)據(jù)量,無法實時上傳全部數(shù)據(jù),現(xiàn)有儀器多采用“井下存儲數(shù)據(jù)、起鉆后再讀取和處理”的方式或者只實時上傳滑行波時差信息[6-7]。這導(dǎo)致隨鉆聲波測井數(shù)據(jù)處理的實時性很差,無法滿足鉆井的地質(zhì)導(dǎo)向需求,也阻礙了隨鉆聲波“遠探”和“前探”技術(shù)的快速發(fā)展[8-9]。對數(shù)據(jù)進行井下處理后只實時上傳處理結(jié)果,是一種有效的解決方案。
聲波測井的數(shù)據(jù)處理算法主要有預(yù)處理[10]、滑行波的時差計算[7,11]、反射波的提取和成像[12-14]、方位接收信號的相控增強[15]等算法。這些算法大多數(shù)是在PC機的純軟件中進行測后處理,未考慮測井儀器的硬件條件和執(zhí)行算法所需要的時間與內(nèi)存,不能作為井下實時處理算法。因此,必須開發(fā)井下硬件支持、運行時間短、占用內(nèi)存小、兼容數(shù)據(jù)采集的井下處理算法來滿足隨鉆聲波測井地質(zhì)導(dǎo)向的實時性需求。構(gòu)建井下算法測試系統(tǒng)并使用已有的測井數(shù)據(jù)對算法進行驗證是開發(fā)各種隨鉆聲波測井井下處理算法的重要途徑。
數(shù)據(jù)交換接口是井下算法測試系統(tǒng)的重要組成部分,需要完成測試系統(tǒng)上位機中原始測井數(shù)據(jù)與前端機SRAM中處理數(shù)據(jù)的格式轉(zhuǎn)換與雙向快速傳輸兩個功能,其中傳輸速率在20 MB/s以上。本文設(shè)計了一種用于井下算法測試系統(tǒng)的數(shù)據(jù)交換接口,滿足了上述需求。硬件上,前端機以FPGA為控制核心,它與上位機通過USB微控制器連接。軟件上,USB微控制器固件、FPGA和上位機控制軟件三者配合,實現(xiàn)了數(shù)據(jù)交換接口的通信協(xié)議。
圖1所示為隨鉆聲波測井井下處理算法測試系統(tǒng)的硬件整體框架。該系統(tǒng)由上位機和前端機組成,二者通過USB總線連接。數(shù)據(jù)交換接口實現(xiàn)上位機與前端機SRAM中數(shù)據(jù)的格式轉(zhuǎn)換與雙向傳輸。上位機實現(xiàn)測井數(shù)據(jù)格式轉(zhuǎn)換、USB傳輸控制和數(shù)據(jù)二次處理等功能。前端機主要由FPGA、SRAM和USB微控制器三部分組成。FPGA作為井下處理算法的執(zhí)行中心,一方面能夠并行處理多道信號,大大減少算法的執(zhí)行時間,另一方面與實際測井儀器的采集控制器一致,保證了井下數(shù)據(jù)處理和采集功能的硬件兼容。高速SRAM掛接在FPGA上,緩存算法運行過程中的大量數(shù)據(jù)。USB微控制器是數(shù)據(jù)交換接口的核心硬件,它以從設(shè)備的方式與FPGA交換數(shù)據(jù),通過USB總線與上位機通信。
USB微控制器選用CY7C68013A,它集成了一個增強型8051微處理器和一個USB 2.0收發(fā)器[16]。該芯片以Slave FIFO接口模式掛接在FPGA上,FPGA產(chǎn)生該接口所需的訪問時序[17]。IFCLK為接口時鐘信號,SLCS為片選信號,SLRD和SLWR分別為讀寫使能信號,SLOE為讀寫允許控制信號,FIFOADDR[1:0]為FIFO緩沖區(qū)選擇信號,FD[15:0]為16位數(shù)據(jù)總線。FLAGB和FLAGC分別為所選端點FIFO的空標志和滿標志,PKTEND為FPGA數(shù)據(jù)包發(fā)送完畢標志。
基于該數(shù)據(jù)交換接口,按照以下流程測試井下處理算法:(1)上位機將原始測井數(shù)據(jù)轉(zhuǎn)換為前端機能夠識別的數(shù)據(jù)文件,通過USB微控制器傳遞,下發(fā)至FPGA并存儲在SRAM中;(2)FPGA運行井下處理算法,對SRAM中的測井數(shù)據(jù)進行處理;(3)上位機讀取處理后的數(shù)據(jù)并進行二次處理,評價井下處理算法。
本工作設(shè)計了USB微控制器固件、FPGA和上位機控制軟件三部分,它們共同實現(xiàn)了上位機和前端機之間的數(shù)據(jù)交換協(xié)議。
USB微控制器的固件實現(xiàn)了上位機和FPGA之間雙向數(shù)據(jù)的中轉(zhuǎn)功能。它與上位機以低位先發(fā)送的方式串行通信,與FPGA以16位數(shù)據(jù)總線的方式并行通信。圖2為微控制器的工作流程,主要包含以下步驟:
(1)系統(tǒng)初始化。配置CPU時鐘為48 MHz,USB總線為480 Mbps的高速模式。設(shè)置外部FIFO接口工作在從模式,并為該接口分配引腳。
(2)配置Slave FIFO端點。設(shè)置EP2端點為自動輸出模式,緩存上位機和FPGA之間的下行數(shù)據(jù)。EP6為自動輸入模式,緩存上行數(shù)據(jù)。這兩個端點以16位數(shù)據(jù)總線和批量傳輸?shù)姆绞焦ぷ?均配置為四緩沖方式,每個緩沖區(qū)512字節(jié)。
(3)中斷配置。使能INT2和INT4中的USB設(shè)備掛起請求、接收到設(shè)備包令牌、端點FIFO空滿狀態(tài)等中斷。
(4)USB微控制器枚舉,與上位機建立連接。在該過程中,上位機獲取微控制器的設(shè)備描述符等信息,為設(shè)備分配配置值,確認USB接口和斷點的屬性。
(5)等待并分析上位機的事務(wù)命令,執(zhí)行相應(yīng)的操作。若收到OUT事務(wù),則將下行數(shù)據(jù)寫入EP2端點并通過FIFO非空狀態(tài)通知FPGA讀取數(shù)據(jù)。若收到IN事務(wù),則將EP6中的上行數(shù)據(jù)放到USB總線上。這一步驟(圖2中虛線以下的過程)是自動執(zhí)行的,不需要CPU的參與。與此同時,微控制器及時處理各種中斷請求,保證設(shè)備的正常運行。
本工作在FPGA中設(shè)計了USB微控制器和SRAM的訪問模塊,并在此基礎(chǔ)上實現(xiàn)了二者的數(shù)據(jù)交換。圖3為FPGA內(nèi)部控制的原理框圖。PLL模塊將24 MHz的輸入時鐘倍頻成48 MHz和96 MHz的時鐘信號,分別提供給Slave FIFO接口控制模塊和FIFO-SRAM轉(zhuǎn)換模塊。Slave FIFO接口控制模塊實現(xiàn)兩個功能:一是構(gòu)建USB微控制器內(nèi)從FIFO的訪問時序,對其進行讀寫操作;二是根據(jù)上位機下發(fā)的數(shù)據(jù)包類型,執(zhí)行下傳數(shù)據(jù)到SRAM、上傳數(shù)據(jù)至從FIFO以及數(shù)據(jù)處理等操作。FIFO-SRAM轉(zhuǎn)換模塊一方面對SRAM進行讀寫訪問,另一方面與Slave FIFO接口控制模塊交互,實現(xiàn)數(shù)據(jù)在FPGA內(nèi)部的下傳和上傳。主FIFO模塊在數(shù)據(jù)下傳過程中緩存數(shù)據(jù),協(xié)調(diào)讀從FIFO操作和寫SRAM操作之間的速度差異。該FIFO由IP核生成,深度為4 096,數(shù)據(jù)寬度為16位。在數(shù)據(jù)上傳過程中,FIFO-SRAM轉(zhuǎn)換模塊將SRAM中的數(shù)據(jù)讀出并寫入Slave FIFO接口控制模塊。
圖3 FPGA控制原理示意圖
在Slave FIFO接口控制模塊中,數(shù)據(jù)上傳和下傳兩個功能的設(shè)計方法類似,都是基于狀態(tài)機思想。圖4為該模塊下傳功能的狀態(tài)機圖,展示了該模塊從USB微控制器的從FIFO中讀取數(shù)據(jù)并寫入主FIFO的過程。當FPGA上電并完成初始化后(RESET=1′b1),系統(tǒng)從復(fù)位狀態(tài)(RESET)進入空閑狀態(tài)(IDLE),此時從FIFO的讀寫控制信號SLOE、SLRD和SLWR均為不操作時的高電平,主FIFO的寫控制信號FIFO_WR為不操作時的低電平。當從FIFO中有數(shù)據(jù)需要讀取時(FLAGB=1′b1),系統(tǒng)進入下傳等待狀態(tài)(DOWNLOAD_WAIT)并判斷主FIFO是否允許寫入數(shù)據(jù)。當主FIFO允許寫入時(WR_READY=1′b1),系統(tǒng)進入下傳狀態(tài)(DOWNLOAD)。在該狀態(tài),FIFOADR被配置為選擇EP2緩沖區(qū),SLOE和SLRD變?yōu)榈碗娖接糜谶B續(xù)讀取EP2中的數(shù)據(jù),FIFO_WR變?yōu)楦唠娖接糜趯憯?shù)據(jù)到主FIFO。當從FIFO的數(shù)據(jù)讀完后(FLAGB = 1′b0),系統(tǒng)返回到IDLE狀態(tài)。
圖4 Slave FIFO接口控制模塊數(shù)據(jù)下傳的狀態(tài)機圖
圖5所示為Slave FIFO接口控制模塊數(shù)據(jù)下傳功能的仿真結(jié)果,其中左側(cè)虛線以上為該模塊的輸入信號,虛線以下為輸出信號。FDATA為USB微控制器輸出到Slave FIFO接口控制模塊的16位并行數(shù)據(jù),FIFO_DATA是Slave FIFO接口控制模塊輸出到主FIFO的數(shù)據(jù)。時間段1到時間段4分別代表復(fù)位、空閑、下傳等待和下傳這4種狀態(tài)。仿真結(jié)果與預(yù)期相符合,表明該設(shè)計是正確的。
圖5 Slave FIFO接口控制模塊數(shù)據(jù)下傳的仿真結(jié)果
上位機是井下算法測試系統(tǒng)數(shù)據(jù)交換的控制中心,圖6所示為該系統(tǒng)的上位機控制軟件。該軟件基于MFC框架開發(fā),實現(xiàn)了文件轉(zhuǎn)換和文件傳輸兩個功能。
圖6 井下算法測試系統(tǒng)的上位機控制軟件
文件轉(zhuǎn)換是將不同記錄格式的測井數(shù)據(jù)轉(zhuǎn)換為前端機能夠識別和處理的文件[18]。該功能通過文件輸入、輸出和回放3個模塊實現(xiàn)。文件輸入模塊導(dǎo)入原始測井數(shù)據(jù)并解析出數(shù)據(jù)對應(yīng)的測井起止深度與采樣間隔。文件輸出模塊轉(zhuǎn)換出所需深度、接收站和通道的測井數(shù)據(jù)。文件回放模塊可以快速查看上述2個模塊中數(shù)據(jù)文件的質(zhì)量,回放速度可以設(shè)置。
文件傳輸是在正確識別USB設(shè)備的基礎(chǔ)上進行文件的下傳與上傳操作。該功能的開發(fā)利用了Cypress提供的CyAPI驅(qū)動程序庫。USB設(shè)備的識別主要判斷設(shè)備的初始化是否正常,并在軟件中顯示設(shè)備的PID號和VID號。文件下傳是將上位機的測井數(shù)據(jù)傳送到前端機的SRAM中,而文件上傳與之相反。文件傳輸以512字節(jié)的數(shù)據(jù)包為基本單位,每包中的前511個字節(jié)為純數(shù)據(jù),最后1個為校驗和字節(jié)。在數(shù)據(jù)傳輸過程中,上位機和FPGA均計算每包數(shù)據(jù)的校驗和,統(tǒng)計校驗和不一致的數(shù)據(jù)包個數(shù)用于計算誤碼率。文件傳輸完畢后,該軟件顯示平均傳輸速度和誤碼率。若有傳輸錯誤發(fā)生,則重新傳輸該文件。
本設(shè)計對基于USB微控制器的傳輸過程和數(shù)據(jù)交換接口的整體性能進行了測試。
在上位機和FPGA之間互相收發(fā)已知數(shù)據(jù),可以測試系統(tǒng)中USB傳輸過程的準確性和接口速度。圖7所示為下傳測試時上位機端發(fā)送和FPGA端接收到的數(shù)據(jù)。圖的上部為上位機端發(fā)送數(shù)據(jù)包中的前16個字節(jié)數(shù)據(jù),也即0x0000-0x0007這8個字數(shù)據(jù),其中字數(shù)據(jù)的高字節(jié)在前,低字節(jié)在后。圖的下部為FPGA中Slave FIFO接口控制模塊接收數(shù)據(jù)包中的前8個字數(shù)據(jù)??梢钥闯?FPGA端接收到的數(shù)據(jù)與上位機端發(fā)送的數(shù)據(jù)一致,說明二者可以進行基于USB微控制器的通信。
圖7 基于USB的下傳測試數(shù)據(jù)
上位機連續(xù)發(fā)送512字節(jié)(含校驗字節(jié),每個字節(jié)占8位)的數(shù)據(jù)包時,利用示波器可以測試基于USB微控制器的數(shù)據(jù)包傳輸時序。圖8所示為示波器測試結(jié)果,通道1到通道3分別是Slave FIFO接口控制模塊的IFCLK、SLRD以及FLAGB信號,其中IFCLK是48 MHz的時鐘信號。SLRD為低電平而FLAGB為高電平的時間段表示FPGA讀取USB微控制器中從FIFO數(shù)據(jù)的過程,SLRD為高電平而FLAGB為低電平的時間段表示上位機往從FIFO中寫數(shù)據(jù)的過程。從圖可以看出,傳輸一個512字節(jié)的數(shù)據(jù)包耗時約為9.75 μs,計算可得本系統(tǒng)中USB接口的數(shù)據(jù)傳輸速度約為420.10 Mb/s。
圖8 基于USB的數(shù)據(jù)包傳輸時序
本設(shè)計通過傳輸已知大小的數(shù)據(jù)文件來估算該數(shù)據(jù)交換接口的上傳和下傳速度,驗證上位機軟件中傳輸速度自動測試功能的可靠性。上位機下傳1 GB的數(shù)據(jù)時,秒表記錄的耗時為24.69 s,估算的下傳速度為41.47 MB/s。前端機上傳1 GB的數(shù)據(jù)通過連續(xù)64次讀取SRAM中的全部數(shù)據(jù)并上傳來實現(xiàn)。該過程的耗時為30.44 s,上傳速度的估算值為33.64 MB/s。測試中,上位機軟件測量的下傳和上傳速度分別為43.04 MB/s和34.78 MB/s。這與估算值接近,說明該數(shù)據(jù)交換接口的傳輸速度滿足設(shè)計要求且上位機軟件的傳輸速度測試功能正常。在此基礎(chǔ)上,使用實際聲波測井數(shù)據(jù)對該接口進行了整體測試。結(jié)果表明,該數(shù)據(jù)交換接口的上位機控制軟件能夠?qū)崿F(xiàn)測井數(shù)據(jù)的格式轉(zhuǎn)換,上位機和前端機SRAM之間能夠進行雙向快速傳輸,且傳輸速度和所需時間均與預(yù)期相符合。
本文在開發(fā)FPGA、USB微控制器和上位機軟硬件的基礎(chǔ)上,初步構(gòu)建了一種隨鉆聲波測井井下算法測試系統(tǒng),設(shè)計了前端機SRAM與上位機之間的數(shù)據(jù)交換接口,實現(xiàn)了測井數(shù)據(jù)的格式轉(zhuǎn)換、上位機和前端機的雙向快速傳輸?shù)裙δ?滿足了井下處理算法測試系統(tǒng)的接口需求。
該數(shù)據(jù)交換接口能夠完善隨鉆聲波測井井下算法測試系統(tǒng),提高開發(fā)井下實時處理算法的效率,有助于推動隨鉆聲波測井地質(zhì)導(dǎo)向技術(shù)的發(fā)展。