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