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