畢彥峰,李 杰,胡陳君,高 寧,高詩堯
(1.中北大學(xué) 電子測試技術(shù)重點實驗室,山西 太原 030051;2.蘇州中盛納米科技有限公司,江蘇 蘇州 215123)
常規(guī)導(dǎo)彈彈藥在研制試驗階段,為進行測試反饋,數(shù)據(jù)的采集回讀是一種最重要的手段[1-2].在導(dǎo)彈射前進行靶場測試時,數(shù)據(jù)回讀也是監(jiān)測彈藥狀態(tài)的一種十分重要的方式.由于導(dǎo)彈型號的差異,離線式采集存儲設(shè)備的安裝位置并不完全相同,數(shù)據(jù)傳輸?shù)木€纜長度不統(tǒng)一,以及彈藥所提供的接口數(shù)量有限,都會導(dǎo)致數(shù)據(jù)回讀設(shè)備達不到最大帶寬,而數(shù)據(jù)回讀系統(tǒng)往往都有一個預(yù)設(shè)的傳輸頻率,從而導(dǎo)致離線式數(shù)據(jù)存儲系統(tǒng)與數(shù)據(jù)回讀系統(tǒng)的傳輸速度不匹配.
為解決以上問題,提出一種接口速度兼容的通用數(shù)據(jù)回讀設(shè)備.數(shù)據(jù)回讀設(shè)備與采集存儲設(shè)備之間的接口采用LVDS傳輸協(xié)議,LVDS接口為串行總線,能夠有效地減少接口線纜的數(shù)量,并且具有很強的抗干擾能力[3-4].控制和傳輸部分采用FPGA搭配USB2.0芯片,能夠自適應(yīng)不同的LVDS時鐘和數(shù)據(jù),實現(xiàn)對LVDS數(shù)據(jù)的串并轉(zhuǎn)換、總線的命令解析發(fā)送和數(shù)據(jù)的傳輸控制,并將數(shù)據(jù)通過USB接口發(fā)送至上位機.
通用數(shù)據(jù)回讀系統(tǒng)由串并轉(zhuǎn)換單元、FPGA控制單元、USB傳輸單元和上位機4個部分組成,系統(tǒng)框圖如圖1所示.
圖1 系統(tǒng)總體設(shè)計Fig.1 Overall system design
通用數(shù)據(jù)回讀系統(tǒng)的主要工作流程為:FPGA接收前端LVDS總線數(shù)據(jù),通過串并轉(zhuǎn)換單元使用FPGA內(nèi)部串行收發(fā)器將數(shù)據(jù)反序列化,經(jīng)由片內(nèi)RAM緩存通過USB2.0芯片發(fā)送至上位機.FPGA采用Xilinx公司Spartan6系列XCS6LX9-144I型號芯片,此款芯片自身支持LVDS接口和SERDES,通過內(nèi)部IBUFDS模塊可以將差分信號轉(zhuǎn)換成單端信號使用,通過SERDES簡化了電路串行化和反序列化的設(shè)計[5-6],并根據(jù)內(nèi)部相位檢測電路設(shè)計模塊,動態(tài)地調(diào)整數(shù)據(jù)和時鐘的相位關(guān)系,使數(shù)據(jù)的中心和時鐘的上升沿始終保持對齊,有效地減少了數(shù)據(jù)傳輸?shù)恼`碼率.USB傳輸單元采用FTDI公司的FT232H芯片,具有時序簡單、傳輸速度快等優(yōu)點.上位機采用Qt框架編寫,數(shù)據(jù)的傳輸架構(gòu)采用多線程讀寫,很大程度上提高了USB傳輸?shù)乃俣?
為了實現(xiàn)自動適應(yīng)不同頻率的傳輸總線,對差分時鐘的處理尤為關(guān)鍵.傳統(tǒng)的時鐘直接連接在FPGA的普通引腳上,無法使用FPGA內(nèi)部的全局緩沖時鐘資源,導(dǎo)致時鐘到達每個觸發(fā)器的路徑延遲不一致,如圖2所示,利用普通布線資源會導(dǎo)致T1和T2不相等,從而產(chǎn)生時鐘偏斜.
圖2 時鐘偏斜Fig.2 Clock skew
當(dāng)系統(tǒng)的時鐘頻率較低時,內(nèi)部邏輯可以正常運行,當(dāng)時鐘頻率達到一定速度后,就無法滿足觸發(fā)器的靜態(tài)時序要求,尤其在FPGA芯片工藝較低時延遲較大,會導(dǎo)致時序無法收斂,可以通過兩種方式解決:使用FPGA內(nèi)部硬核鎖相環(huán)或?qū)S脮r鐘網(wǎng)絡(luò)BUFIO2.
通過鎖相環(huán)可以將輸入時鐘進行分頻,但鎖相環(huán)的使用需要設(shè)置輸入輸出的時鐘頻率,其雖然可以滿足時序收斂但是無法自適應(yīng)外部的不同時鐘頻率,所以鎖相環(huán)無法滿足需求.為了自動適應(yīng)外部差分時鐘并使時序收斂,可以使用FPGA的內(nèi)部專用時鐘網(wǎng)絡(luò)BUFIO2.BUFIO2的連接如圖3所示,首先將LVDS數(shù)據(jù)的隨路時鐘通過IBUFDS轉(zhuǎn)化為和LVDS數(shù)據(jù)同步的單端時鐘,然后通過BUFIO2將單端時鐘按照模塊例化時預(yù)設(shè)的分頻系數(shù)生成時鐘.將LVDS數(shù)據(jù)的差分隨路時鐘經(jīng)過IBUFDS產(chǎn)生的單端時鐘連接到BUFIO2,分頻系數(shù)設(shè)置為8,即產(chǎn)生差分時鐘的8分頻時鐘,此分頻時鐘可以通過BUFG連入到全局緩沖,從而消除時鐘偏斜,并且連入到全局緩沖BUFG輸出的信號與恢復(fù)的并行數(shù)據(jù)同步,從而解決了對LVDS任意時鐘的固定分頻問題,并提供了一個優(yōu)質(zhì)的全局時鐘.BUFIO2生成的IO時鐘以及選通脈沖可以結(jié)合SERDES對數(shù)據(jù)進行串并轉(zhuǎn)換.
圖3 時鐘兼容Fig.3 Clock compatible
PC中數(shù)據(jù)的最小存儲單元為1個字節(jié),所以一般設(shè)置總線位寬為8位,而單個Spartan-6系列FPGA內(nèi)部的串行收發(fā)器SERDES最高支持4∶1的數(shù)據(jù)反序列化[7-8].
FPGA提供了一種機制,將兩個SERDES級聯(lián)即可實現(xiàn)8∶1以及更高比例的數(shù)據(jù)反序列化.每個LVDS接口恰好含有兩個SERDES,通過如圖4所示的方式進行級聯(lián)可以實現(xiàn)8∶1的數(shù)據(jù)反序列化.
圖4 ISERDES級聯(lián)Fig.4 ISERDES cascade
當(dāng)LVDS接口線速率比較高時(>1 Gbit/s),PCB走線以及線纜的不等長和溫度等因素會導(dǎo)致時鐘與數(shù)據(jù)發(fā)生錯位,不能滿足數(shù)字電路的建立保持時間等時序要求,這會極大地提高數(shù)據(jù)傳輸?shù)恼`碼率,并且隨著工作環(huán)境的改變,溫度等因素對誤碼的影響也會發(fā)生變化.當(dāng)速度不高時,數(shù)據(jù)和時鐘的相位對數(shù)據(jù)的傳輸影響不大,當(dāng)時鐘頻率達到一定程度時,這種錯位就無法忽視[9],可以通過在數(shù)據(jù)通路上添加延遲來解決數(shù)據(jù)和時鐘的相位問題.
如圖5所示,理想的數(shù)據(jù)信號的建立保持時間符合要求,可以正確地傳輸數(shù)據(jù),但由于線路不等長或溫度等因素,實際數(shù)據(jù)信號相對于時鐘信號發(fā)生了相位偏移,導(dǎo)致建立保持時間難以得到滿足,此時在數(shù)據(jù)通路上添加延遲可以使得建立保持時間重新得到滿足.這種手動添加延遲的方法雖然有效,卻不能兼容所有的數(shù)據(jù)路徑錯位問題.解決辦法就是在數(shù)據(jù)通路上加入IODELAY模塊,此模塊不僅能加入延遲,還支持動態(tài)地調(diào)整延遲值.
圖5 接口時序Fig.5 Interface timing
進行動態(tài)調(diào)節(jié)延遲的前提是了解數(shù)據(jù)和時鐘的相位關(guān)系,相位檢測電路如圖6所示,其中INCDEC信號用來指示當(dāng)前數(shù)據(jù)和時鐘的相位關(guān)系,VALID信號表示當(dāng)前的INCDEC是否有效.當(dāng)E2=S2時,表示數(shù)據(jù)中心相位超前于時鐘上升沿,INCDEC輸出為1;當(dāng)E2=S3時,表示數(shù)據(jù)中心相位落后于時鐘上升沿,INCDEC輸出為0.根據(jù)鑒相器的輸出邏輯設(shè)計模塊,當(dāng)檢測到INCDEC為1時,則驅(qū)動IODELAY減小延遲;當(dāng)檢測到INCDEC為0時,則驅(qū)動IODEALY增大延遲.
圖6 相位檢測電路Fig.6 Phase detection circuit
串并轉(zhuǎn)換模塊的具體連接如圖7所示,相位檢測狀態(tài)機檢測到有效的相位信息后,置位從IODELAY2的CE,并根據(jù)相位信息驅(qū)動從IODELAY的INC信號,此時從IODELAY2的BUSY信號會被拉高,表示從IODELAY2接收到相位信息.當(dāng)BUSY信號被拉低時,相位檢測狀態(tài)機即可使能CAL信號控制主從IODELAY2進行延遲的調(diào)整.
圖7 串并轉(zhuǎn)換模塊Fig.7 Serial-to-parallel conversion module
由于INCDEC只能指示超前和滯后,所以當(dāng)校準(zhǔn)完畢后,相位校準(zhǔn)信號始終處于0~1的跳動狀態(tài)中.動態(tài)調(diào)整相位可以使數(shù)據(jù)的中心始終和時鐘的上升沿保持對齊.動態(tài)校準(zhǔn)相位流程如圖8所示.
圖8 相位動態(tài)調(diào)整流程Fig.8 Phase dynamic adjustment process
當(dāng)傳輸串行數(shù)據(jù)時,LVDS總線前端將并行數(shù)據(jù)序列化進行傳輸,串并轉(zhuǎn)換單元需要將串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù),此時需要對數(shù)據(jù)進行對齊,即確定這一幀的第一位.
通過LVDS鏈路雙方約定固定幀0xEB確定當(dāng)前總線是否空閑和數(shù)據(jù)是否對齊完成.當(dāng)LVDS總線初始化或空閑時,總線上的數(shù)據(jù)不為0xEB,則需要使能SERDES的BITSLIP信號,每使能一次,相當(dāng)于轉(zhuǎn)換輸出的并行信號循環(huán)移位一次,直到并行數(shù)據(jù)與約定的數(shù)據(jù)0xEB一致時,如圖9所示,則表示數(shù)據(jù)對齊.
圖9 數(shù)據(jù)對齊Fig.9 Data alignment
本設(shè)計的緩沖區(qū)采用FPGA片內(nèi)塊RAM,利用Xilinx提供的FIFO IP核生成首字預(yù)見型FIFO.首字預(yù)見型FIFO可以在不影響讀寫功能的前提下,觀測到即將出隊列的數(shù)據(jù),相比于標(biāo)準(zhǔn)FIFO,首字預(yù)見型FIFO更加靈活,更有益于指令的發(fā)送和控制.相比于外部RAM,此設(shè)計方式可以縮小體積,降低成本.
USB接口芯片采用FTDI公司的FT232H,支持UART、同步FIFO等多種模式,具有傳輸速度快、時序簡單等優(yōu)點[10-11].
1.6.1 初始化流程
FT232H芯片的初始化流程主要是配置工作模式以及初始化時鐘.FTDI公司提供了FT_Prog應(yīng)用程序,可以配置工作模式、驅(qū)動電流強度、壓擺率和掛起狀態(tài)等多種參數(shù),并將配置信息燒寫到配置芯片中.USB芯片每次上電都會讀取配置芯片EEPROM中保存的配置信息,以確定FT232H的工作模式.但此時芯片還不能完全工作在同步FIFO模式,還需要應(yīng)用程序驅(qū)動芯片設(shè)置模式,使用驅(qū)動提供的接口FT_SetBitMode命令選擇同步FIFO,芯片才會產(chǎn)生工作的60 MHz 時鐘[9].
1.6.2 傳輸控制
FT232H芯片的傳輸時序控制十分簡單,當(dāng)進行寫FT232H芯片時,如果芯片準(zhǔn)備好可以被讀出數(shù)據(jù),則會驅(qū)動RXF引腳.當(dāng)RXF信號為低電平時,用戶可以驅(qū)動OE信號和RD信號,并根據(jù)FT232H芯片輸出的時鐘將數(shù)據(jù)同步地讀出來.當(dāng)進行寫FT232H時,如果TXE有效,表示FT232H片內(nèi)緩沖區(qū)非滿,此時可以驅(qū)動TX信號為低,根據(jù)FT232H輸出的時鐘將數(shù)據(jù)寫入芯片中.
1.7.1 驅(qū)動
FTDI公司為FT232H芯片提供FTDIBUS.SYS驅(qū)動包括虛擬COM端口(VCP)驅(qū)動和直接驅(qū)動(D2XX).VCP驅(qū)動模擬標(biāo)準(zhǔn)的PC串行端口,USB設(shè)備可以作為一個標(biāo)準(zhǔn)RS232的通信設(shè)備.D2XX驅(qū)動程序允許通過一個DLL接口直接訪問USB設(shè)備.
上位機在Qt環(huán)境下使用C++語言編寫,將驅(qū)動中提供的ftd2xx.h以及ftd2xx.lib鏈接到工程中,即可直接驅(qū)動FTDI公司提供的動態(tài)鏈接庫FTD2XX.DLL.通過動態(tài)鏈接庫中的接口增大了PC端USB的緩沖區(qū),提高了突發(fā)傳輸?shù)乃矔r速度.
1.7.2 緩沖區(qū)設(shè)計
為了提高USB接口的傳輸速度,上位機采用多個線程并設(shè)置了兩個大容量緩沖區(qū),如圖10所示,其中一個線程讀取USB設(shè)備中的數(shù)據(jù)并將數(shù)據(jù)保存在其中一個緩沖區(qū)中,當(dāng)一個緩沖區(qū)存滿之后,繼續(xù)將數(shù)據(jù)保存在另一個緩沖區(qū),另一個線程負責(zé)將存滿數(shù)據(jù)的緩沖區(qū)寫到硬盤中.兩個線程同時工作,讀取USB接口的數(shù)據(jù)與寫硬盤同時進行,大大提高了USB接口的傳輸速度[12].
圖10 上位機多線程結(jié)構(gòu)Fig.10 Multi-threaded structure of the host computer
上位機的主要功能為配置設(shè)備、發(fā)送讀取命令、擦除命令以及數(shù)據(jù)處理.上位機啟動后就會持續(xù)監(jiān)測設(shè)備,當(dāng)檢測到設(shè)備連接到上位機,上位機會自動發(fā)出配置指令,這樣FT232H芯片才能工作在預(yù)期的狀態(tài).其他命令為上位機與設(shè)備前端約定好握手協(xié)議,用來實現(xiàn)讀取、擦除和停止等多種功能.
首先使用Xilinx公司提供的ICON和ILA兩個IP核進行測試,驗證整個相位校準(zhǔn)的流程.如圖11所示為抓取的真實波形,根據(jù)圖中標(biāo)記1,當(dāng)鑒相器VALID信號拉高時,INCDEC指示的相位狀態(tài)有效.獲取到當(dāng)前數(shù)據(jù)和時鐘的相位關(guān)系后,開始進行相位校準(zhǔn),使能IODELAY2的CE信號,并根據(jù)INCDEC指示的狀態(tài)控制IODELAY2的INC信號將信息傳遞給IODELAY2,IODELAY2接收到相位信息則會進入BUSY狀態(tài),當(dāng)BUSY拉低時,即可使能IODELAY2的CAL信號,此時IODELAY2再次進入BUSY狀態(tài)開始調(diào)整延遲,當(dāng)BUSY再次拉低時表示延遲調(diào)整完成.緊接著進入標(biāo)記2的狀態(tài),延遲調(diào)整完成后鑒相器會再次指示調(diào)整之后的相位關(guān)系.從圖中可以看到,在VALID信號有效時,INCDEC處于高低電平的跳變狀態(tài),此時相位的校準(zhǔn)已然完成.
圖11 相位校準(zhǔn)的實際過程Fig.11 The actual process of phase calibration
然后驗證通用數(shù)據(jù)回讀系統(tǒng)的時鐘兼容功能,通過如圖12所示的硬件電路進行數(shù)據(jù)回讀測試,通過前端LVDS總線發(fā)送數(shù)據(jù),數(shù)據(jù)回讀系統(tǒng)接收數(shù)據(jù),并將接收到的數(shù)據(jù)通過USB接口發(fā)送到上位機.
圖12 硬件電路Fig.12 Hardware circuit
將設(shè)備上電,上位機會檢測到設(shè)備并配置設(shè)備,通過上位機對采集設(shè)備發(fā)送指令,確認(rèn)指令后前端采集設(shè)備會將數(shù)據(jù)通過USB傳輸設(shè)備將數(shù)據(jù)傳輸?shù)缴衔粰C.實際測試時分為3種情況:
1) 時鐘線纜與數(shù)據(jù)線纜等長,以大約40 MB/s 的速度傳輸數(shù)據(jù);
2) 時鐘線纜與數(shù)據(jù)線纜不等長,以大約40 MB/s 的速度傳輸數(shù)據(jù);
3) 時鐘線纜與數(shù)據(jù)線纜等長,以大約20 MB/s 的速度傳輸數(shù)據(jù).
數(shù)據(jù)的內(nèi)容為一個字節(jié)的遞增數(shù),大小均為400 MB.如圖13所示,使用兩種不同速度的時鐘傳輸400 MB數(shù)據(jù)分別用時12 s和20 s.數(shù)據(jù)傳輸?shù)慕Y(jié)果如圖14所示,3次測試接收到的數(shù)據(jù)相同.
圖13 傳輸時間Fig.13 Transmission time
圖14 回讀的數(shù)據(jù)Fig.14 Read back data
本文分別從數(shù)據(jù)回讀系統(tǒng)的硬件總體設(shè)計、自適應(yīng)時鐘的實現(xiàn)和通過動態(tài)調(diào)整相位方法解決鏈路不等長和溫度等因素造成的誤碼現(xiàn)象,并通過構(gòu)造多線程上位機來提升USB接口的傳輸速度.通過對多種速度的LVDS總線進行數(shù)據(jù)回讀測試,系統(tǒng)可以自動適應(yīng)不同時鐘速度的傳輸,并且傳輸?shù)臄?shù)據(jù)相同.經(jīng)過驗證,通過BUFIO2對時鐘進行分頻,鑒相器等實現(xiàn)動態(tài)調(diào)整時鐘和數(shù)據(jù)的相位關(guān)系,自動適應(yīng)不同的時鐘頻率,實現(xiàn)了速度兼容的通用數(shù)據(jù)總線系統(tǒng),為離線式數(shù)據(jù)存儲系統(tǒng)的回讀提供了一種通用的傳輸速度快、靈活可靠和可移植性強的方案.