席忠紅,李海翼
(甘肅民族師范學(xué)院物理與水電工程系,甘肅合作747000)
XI Zhonghong,LI Haiyi*
(Department of Physics and Hydranlic Engineering,Gansu Normal University for Nationalities,Hezuo Gansu 747000,China)
近年來,CCD(Charge Coupled Device)以其光譜響應(yīng)寬、動態(tài)范圍大、靈敏度高、噪聲低、體積小、像素多等優(yōu)點[1-2],在光譜儀器中,常使用它作為光電轉(zhuǎn)換元件。特別是在出現(xiàn)了背照式CCD后[3],它的光譜范圍可以延伸到深紫外區(qū),可以成為全譜式光譜儀的檢測器件。FPGA作為可編程門陣列,可以產(chǎn)生時鐘嚴格同步的多路信號,是驅(qū)動CCD數(shù)據(jù)采集的首選器件之一,特別是基于FPGA[4]的SoPC技術(shù)的應(yīng)用[5-6],使數(shù)據(jù)采集控制、數(shù)據(jù)同步處理和轉(zhuǎn)換傳輸融合為一體,同時通過調(diào)用IP核(Intellectual Property),使設(shè)計過程變得更為簡捷和可靠。通用串行總線USB2.0接口具有最高480Mb/s的傳輸速度,可以把高速采集到的光譜數(shù)據(jù)及時送給上位機軟件,本文將調(diào)用SLS公司的USB20HR IP軟核實現(xiàn)USB2.0接口,從而代替了專用USB芯片,不但節(jié)約了成本,而且使整個系統(tǒng)更緊湊。
本文要實現(xiàn)的系統(tǒng)的結(jié)構(gòu)及功能如圖1所示?;贔PGA的SoPC系統(tǒng)通過可編程硬件來實現(xiàn)。
圖1 系統(tǒng)功能及結(jié)構(gòu)框圖
驅(qū)動模塊用Verilog HDL語言編寫,為了保證時序的同步性,所有控制信號都在同一個基準脈沖下產(chǎn)生,這個基準脈沖是片上鎖相環(huán)PLL輸出的12 MHz時鐘脈沖。考慮成本和滿足使用的要求,CCD器件選擇線陣CCDILX554B;A/D轉(zhuǎn)換器件選擇并行12位輸出的 ADS803E,最高并行轉(zhuǎn)換時鐘2 MHz。
所實現(xiàn)驅(qū)動模塊的邏輯功能時序仿真如圖2所示。為了頂層設(shè)計的方便,在驗證此模塊后,把此邏輯功能生成一個具有輸入輸出的獨立模塊,以供調(diào)用。
圖2 驅(qū)動模塊邏輯功能時序仿真圖
為了提高采集效率和降低誤碼率,采用異步時鐘FIFO(First In First Out)緩沖數(shù)據(jù),調(diào)用片上FIFO IP核,入口端設(shè)為Avalon-ST Sink接口,時鐘和控制信號也由驅(qū)動模塊按一定的時序提供,這個接口的優(yōu)點是把A/D轉(zhuǎn)換完的數(shù)據(jù)源源不斷地送給FIFO,不需要CPU的參與,提高了效率;出口端設(shè)為Avalon-MM slave,時鐘取自系統(tǒng)時鐘,當(dāng)FIFO達到半滿標志時,F(xiàn)IFO核向片上CPU發(fā)出中斷請求,CPU響應(yīng)中斷后,控制DMA,把FIFO里的數(shù)據(jù)高速取走,經(jīng)過處理后,通過USB接口送給上位機。另外,為了把A/D轉(zhuǎn)換完的數(shù)據(jù)送給Avalon-ST Sink入口的FIFO,必須在SoPC builder設(shè)計時例化一個新Avalon Streaming Source接口部件,部件的輸出直接接到FIFO,輸入接外部數(shù)據(jù)端。同時,這個新部件為FIFO補齊32位數(shù)據(jù)位寬,方便對接。
為了把采集到的大量數(shù)據(jù)即時地傳送給上位機,采用USB2.0通用串行總線協(xié)議接口。它具有高傳輸速度、即插即用、可以總線供電、與主流上位機兼容等優(yōu)點。本文采用SLS公司USB20HR軟核,把 USB2.0接口集成到 SoPC系統(tǒng)。USB20HR是基于片上RAM的USB從設(shè)備軟核,支持32位Avalon總線接口,可以設(shè)置批量傳輸、中斷傳輸和同步傳輸,最多可支持15個 USB輸入輸出端點[7]。該IP核代替了傳統(tǒng)USB芯片的功能,可以節(jié)約成本,也使圖3 USB20HR與Avalon總線及外部連接整個系統(tǒng)融合為一體,更大程度上體現(xiàn)了SoPC技術(shù)的優(yōu)勢。USB20HR IP核與SoPC系統(tǒng)Avalon總線的連接及外部接口,通過外部串行解碼芯片ISP1504,就可以實現(xiàn)和上位機通信的功能。
圖3 USB20HR與Avalon總線及外部連接
在例化NIOSⅡ處理器的基礎(chǔ)上,調(diào)用相應(yīng)模塊和IP核,構(gòu)建整個SoPC系統(tǒng),其頂層邏輯連接和結(jié)構(gòu)設(shè)計如圖4所示。
圖4 SoPC系統(tǒng)頂層邏輯連接和結(jié)構(gòu)框圖
圖4中,driver模塊即為CCD、A/D控制驅(qū)動模塊,轉(zhuǎn)換后的數(shù)據(jù)由data_in引腳端口送給Avalon-ST source接口部件,經(jīng)位寬調(diào)整后送入FIFO;圖中NIOSⅡ模塊是由SOPC Builder而自定義生成的包含NIOSⅡ處理器、片上RAM、DMA控制器、異步FIFO、USB20HR、FIR、SDRAM 控制器、EPCS控制器、鎖相環(huán)PLL等單元的綜合模塊,每個單元擁有獨立的基地址和IRQ優(yōu)先級值,NIOSⅡ處理器作為Avalon Master,可以通過Avalon總線訪問任何一個Avalon Slave單元。系統(tǒng)時鐘的布置,以40MHz外部時鐘,作為兩個鎖相環(huán)PLL的時鐘輸入。PLL0的輸出CO設(shè)為12MHz,給驅(qū)動模塊提供基準時鐘,C1為50MHz,給NIOSⅡ處理器和其它模塊提供時鐘,C2為50MHz,從PLL的專用管腳輸出,提供給外部SDRAM;PLL1的C2設(shè)為26MHz,從專用管腳輸出為ISP1504提供時鐘,以進一步產(chǎn)生60MHz脈沖,為ULPI提供同步時鐘信號。其次,雖然硬件配置文件和軟件程序可以下載在配置芯片EPCS等上,但程序運行時在RAM中運行,為了滿足后續(xù)一定容量的程序運行的需要,在片外擴展一片8MB SDRAM MT48LC8M8A2,設(shè)置PLL1 C2時鐘相移-60°,接到SDRAM時鐘輸入端。在頂層框圖中為各模塊分配輸入輸出引腳,執(zhí)行分析綜合,利用Time-Quest
Analyzer對各時序進行約束,以滿足Fmax、tco、tsu等要求,編寫SDC約束文件,用create_clock命令對輸入時鐘約束,定義它的周期、上下沿;用derive_pll_clocks命令為鎖相環(huán)定義輸入時鐘,用set_clock_groups約束時鐘組是否同時有效。約束后的全編譯結(jié)果如圖5所示。時序分析和仿真后,編譯結(jié)果滿足設(shè)計要求。執(zhí)行全編譯,生成SOF和POF硬件配置文件。
圖5 TimeQuest Analyzer時序分析報告
基于FPGA的SoPC系統(tǒng)既要實現(xiàn)可編程硬件描述的目的,也要有軟件來控制片上NIOSⅡ處理器實現(xiàn)相應(yīng)功能。軟件開發(fā)是在集成開發(fā)環(huán)境NIOSⅡIDE下編寫C程序及調(diào)用HAL系統(tǒng)庫,以及編譯和調(diào)試程序。產(chǎn)生基于前述硬件的System.h文件,它提供了所有SoPC硬件系統(tǒng)完整的描述,包括每個調(diào)用硬件的名稱、基地址、中斷優(yōu)先級等,為NIOSHAL系統(tǒng)庫及其驅(qū)動提供了基礎(chǔ)。NIOS系統(tǒng)庫定義了各數(shù)據(jù)類型,輸入輸出函數(shù),設(shè)備分類等。調(diào)用NIOSⅡHAL,會在驅(qū)動的配合下,映射到硬件,實現(xiàn)相應(yīng)功能[8]。
本文主程序流程如圖6所示。上位機發(fā)送CCD數(shù)據(jù)采集的開始、停止等命令,通過USB中斷通知NIOSⅡ系統(tǒng),控制驅(qū)動模塊輸出有效驅(qū)動信號或停止輸出有效信號,來實現(xiàn)數(shù)據(jù)采集的開始、停止等過程。
圖6 NIOSⅡ主程序流程圖
系統(tǒng)上電并自動完成硬件配置后,NIOSⅡ系統(tǒng)從EPCS4中開始BOOT,并完成各模塊的初始化及USB設(shè)備的枚舉,然后用while()命令開始輪詢各中斷源。當(dāng)要開始采集時,由上位機通過USB接口發(fā)送中斷指令,使接有上拉電阻的I/O變?yōu)榈碗娖?,也即把接在一起的start信號拉低,驅(qū)動模塊開始工作。CCD輸出信號不斷送入FIFO,F(xiàn)IFO半滿時向NIOSⅡ產(chǎn)生中斷,中斷服務(wù)程序立即啟動DMA,高速讀取FIFO半滿深度字節(jié)數(shù)的數(shù)據(jù),做數(shù)據(jù)處理后,送入USB20HR的輸入端點RAM,等待上位機及時取走數(shù)據(jù)。為了采集的完整性,在設(shè)計中,設(shè)置FIFO中斷優(yōu)先級高于USB中斷。
設(shè)計在自制PCB板上完成,考慮成本和滿足使用的因素,采用Altera EP2C8 FPGA芯片。板上采用JTAG+AS聯(lián)合配置模式,方便調(diào)試及調(diào)試成功后的上電自動配置,串行配置芯片選擇EPCS4。
USB通信是主-從式的通信方式,由主機發(fā)起通信,設(shè)備做出響應(yīng)。USB上位機枚舉是USB設(shè)備連接到上位機系統(tǒng),由系統(tǒng)指定唯一地址碼,獲取設(shè)備相關(guān)信息和描述符,并為設(shè)備加載驅(qū)動程序的過程。在此過程中,默認在設(shè)備的端點0用控制傳輸方式通信。枚舉是每個USB設(shè)備能夠正常通信的必須過程。本文在主程序中調(diào)用NIOSⅡ HAL,控制USB20HR核開始枚舉。用USB調(diào)試工具捕捉到枚舉過程如圖7所示。
圖7 USB20HR枚舉過程數(shù)據(jù)捕捉
枚舉過程中系統(tǒng)為USB20HR分配唯一設(shè)備號,枚舉完成后,USB20HR在NIOSⅡ軟件中設(shè)置的端點信息為上位機掌握,如圖8所示。端點0為控制端點,端點1和2分別為輸入和輸出端點,所能傳輸?shù)臄?shù)據(jù)包的最大值為40字節(jié)。
圖8 系統(tǒng)讀取到的USB20HR設(shè)備端點信息
枚舉完成后,手動為USB設(shè)備加載相應(yīng)驅(qū)動程序,之后,USB就可以和上位機實現(xiàn)通信。編寫簡單上位機程序,驗證USB讀寫批量數(shù)據(jù)成功,平均速度超過90 Mbit/s,能很好滿足CCD數(shù)據(jù)采集任務(wù)。
為了驗證采集系統(tǒng)的功能,在NIOSⅡIDE環(huán)境下,利用NIOSⅡHardware Debug進行在線測試,在Debug之前,設(shè)置 NIOSⅡ處理器支持 Level 3級Debug。連接CCD及各電路模塊,下載.sof硬件配置文件到FPGA,手動控制CCD模塊使能,在程序中設(shè)置斷點,讀出FIFO的幾個字節(jié)數(shù)據(jù),Debug結(jié)果如圖9所示。圖中顯示的是32位數(shù)據(jù)的十進制值。送給USB輸入端點的數(shù)據(jù)如圖10所示,USB20HR輸出時默認最小輸出4個字節(jié),即32位無符號數(shù)據(jù)。在在線硬件測試時,從FIFO讀出的數(shù)據(jù),經(jīng)過一定處理后,以每次4個字節(jié)的寫操作,送到USB20HR的輸入端點,等待上位機及時取走這些數(shù)據(jù)。從圖10中可以看出,處理完的FIFO數(shù)據(jù)經(jīng)過中間的讀寫操作送到USB輸入端點緩存后,數(shù)據(jù)順序操作前一致。因此,上位機可以讀到正確的數(shù)據(jù)行。
圖9 FIFO讀出數(shù)據(jù)
圖10 USB20HR輸入端點數(shù)據(jù)
本文提出了可應(yīng)用在光譜儀器中的CCD數(shù)據(jù)采集系統(tǒng),提供了完整的下位機方案。通過仿真和實際測試,本文所設(shè)計的CCD數(shù)據(jù)采集驅(qū)動模塊能滿足驅(qū)動CCD信號積分及數(shù)據(jù)輸出及使能控制的目的,能為A/D轉(zhuǎn)換及Avalon-ST接口提供正確時序的驅(qū)動信號;調(diào)用USB20HR軟核實現(xiàn)了USB2.0接口,通過加載驅(qū)動程序和實驗驗證,實現(xiàn)了USB2.0接口的全部功能;通過在線硬件Debug測試,F(xiàn)PGA硬件工程和NIOSⅡ軟件實現(xiàn)了預(yù)期功能。本文設(shè)計的CCD數(shù)據(jù)采集系統(tǒng)方案結(jié)構(gòu)簡單有效,集成度高,系統(tǒng)緊湊可靠。在光譜儀器中具有很好的實用價值和應(yīng)用前景。本文下一步將研究基于本文系統(tǒng)的應(yīng)用于光譜儀器的上位機應(yīng)用軟件。
[1] 米本和也,陳榕庭,彭美桂.CCD/CMOS圖像傳感器基礎(chǔ)與應(yīng)用[M].北京:北京科學(xué)出版社,2006.
[2] 宋敏,鄶新凱,鄭亞茹.CCD與CMOS圖像傳感器探測性能比較[J].半導(dǎo)體光電,2005,26(1):5-9.
[3] 戴麗英,劉德林.背照式電荷耦合器件的研制[J].光電子技術(shù),2005,9:25-30.
[4] 范鐵道,田雁,曹劍中,等.基于FPGA的CMOS圖像感器IA_G3 驅(qū)動電路的研究[J].電子器件,2009,32(2):269-276.
[5] 陳東明,葉玉堂,蒲亮,等.基于SOPC可重構(gòu)的圖像采集與處理系統(tǒng)設(shè)計[J].電子器件,2011,34(2):232-236.
[6] 高文韜,李偉明,丁曉明.基于SOPC技術(shù)的圖像采集模塊設(shè)計[J].信息科技,2007,6:126-127.
[7] SLS,USB2.0(USB20HR)document.2009,(2.2)6.
[8] 俞一鳴.Altera可編程邏輯器件的應(yīng)用與設(shè)計[M].北京:北京機械工業(yè)出版社,2007.