周舜民,毛瑞士,楊海波,趙祖龍,趙鐵成,徐治國,陳玉聰,李 敏
(1.中國科學(xué)院近代物理研究所,甘肅蘭州 730000;2.中國科學(xué)院大學(xué),北京 100049)
蘭州重離子加速器束損探測系統(tǒng)各種探測器(氣體、閃爍體、金剛石等)輸出的信號通過QF電路轉(zhuǎn)化成TTL信號,加速器現(xiàn)場通過高速光纖對現(xiàn)場束損探測信號進行采集傳輸。當(dāng)前使用的NI系列DIO板卡通過基本電路實現(xiàn)DIO功能,不能直接接收光纖發(fā)送過來的數(shù)據(jù),不具有存儲和FPGA處理功能,只能單次傳輸?shù)綑C箱中進行處理,設(shè)計帶有光纖模塊接口的DIO板卡并添加FPGA和DDR2模塊對信號進行采集處理并存儲緩存,將顯著提高信號的傳輸速率和接收信號的準(zhǔn)確率,可避免因光纖傳輸來的信號數(shù)據(jù)未能及時接收處理而丟失。
圖1為束損探測系統(tǒng)一個簡單原理框圖,以電流型電離室氣體探測器(圖2實物)為例,射線與氣體作用產(chǎn)生帶電粒子對被探測器上正負電極收集以電流形式輸出,經(jīng)QF電子學(xué)處理后輸出TTL信號傳輸?shù)教幚硐到y(tǒng)中。
圖1 束損系統(tǒng)原理框圖
圖2 電流型電離室實物
Xilinx的Spartan-6系列采用成熟的45 nm低功耗銅制程技術(shù)制造,密度從3 840個邏輯單元到147 443個邏輯單元不等,實現(xiàn)了性價比與功耗的完美平衡,能夠提供高效版本的雙寄存器6輸入查找表(LUT)邏輯和一系列豐富的內(nèi)置系統(tǒng)級模塊,包括增強型混合模式時鐘管理模塊、功率優(yōu)化的高速串行收發(fā)器模塊、PCI Express兼容端點模塊、專用集成存儲器控制模塊(MCB)等[1]。Spartan-6系列的高性價比和軟硬核的集成,非常適合成本敏感性嵌入式應(yīng)用和實驗室初版預(yù)研設(shè)計。
DDR2內(nèi)存技術(shù)傳輸速率可達到1 066 MHz,采用FBGA模式封裝,對數(shù)據(jù)進行4 bit預(yù)讀取操作。相比DDR內(nèi)存技術(shù),DDR2本身還集成了用以解決數(shù)據(jù)傳輸過程中信號反射問題的信號端接電阻ODT(on die termination),并加入離線驅(qū)動OCD(off-chip driver)技術(shù)[2]。在I/O Driver中新增了穩(wěn)壓線路,防止了電壓不穩(wěn)定時引起資料丟失,提高了信號的完整性。此外,DDR2 通過引入 Posted CAS 功能解決了指令沖突問題[3]。DDR2在繼承了DDR內(nèi)存技術(shù)的基礎(chǔ)上也改進添加了部分DDR3內(nèi)存技術(shù)的功能,可以通過對DDR2的研究使用順利過渡到DDR3及后續(xù)內(nèi)存技術(shù)的使用。
AFBR-16xxZ光纖發(fā)送模塊集成光學(xué)器件由帶TTL輸入邏輯的驅(qū)動IC和650 nm LED光源構(gòu)成,AFBR-26x4Z光纖接收模塊由帶有集成光電二極管的IC組成,可產(chǎn)生邏輯兼容輸出[4]。光纖發(fā)送和接收模塊與TTL邏輯電平系列兼容,光纖收發(fā)模塊對可用于任何信號,數(shù)據(jù)傳輸速率從DC到50 Mbit/s帶寬,使用1 mm 的聚合物光纖(POF)傳輸距離可達50 m,使用200 μm的塑料包層二氧化硅(PCS)傳輸10 Mbit/s和50 Mbit/s 帶寬信號分別能達到200 m和120 m的距離。
本設(shè)計的硬件處理器平臺是Spartan-6系列的XC6SLX25T,具有PCI Express v1.1 版本的1Lane的通道,便于后續(xù)對PCIE通信協(xié)議使用的開發(fā)驗證。方案設(shè)計如圖3所示。
圖3 方案設(shè)計框圖
方案中信號數(shù)據(jù)在通過光纖收發(fā)模塊時被轉(zhuǎn)換成TTL信號傳入FPGA或?qū)PGA輸出的信號進行逆轉(zhuǎn)換后向外傳輸,或直接收發(fā)傳輸兼容的TTL信號。FPGA實現(xiàn)對光纖收發(fā)模塊的控制主要有2種實現(xiàn)方法。一種是直接將通過光纖收發(fā)模塊的數(shù)據(jù)通過FIFO實現(xiàn)與FPGA進行數(shù)據(jù)交換處理,光纖接收模塊接收轉(zhuǎn)換后的數(shù)據(jù)一位一位通過FIFO緩存再傳輸?shù)紽PGA中進行處理,同樣,F(xiàn)PGA要向光纖發(fā)送模塊發(fā)送數(shù)據(jù)也是先將數(shù)據(jù)緩存入FIFO中,然后一位一位進入光纖發(fā)送模塊將數(shù)據(jù)一位一位發(fā)送出去。除了通過FIFO緩存的方式來處理光纖收發(fā)模塊的數(shù)據(jù),還可以采用串口模塊實現(xiàn)或去除嚴格串口協(xié)議幀格式的方式來收發(fā)數(shù)據(jù)[5],將數(shù)據(jù)以串口發(fā)送數(shù)據(jù)的模式進行打包發(fā)送。本方案中,采用第二種類似UART的方法對光纖收發(fā)模塊的數(shù)據(jù)進行傳輸處理。在FPGA中如果數(shù)據(jù)需要處理可以進行預(yù)處理,如果不需要則可以通過建立一個FIFO將通過UART的數(shù)據(jù)傳輸?shù)紻DR2模塊中,或從DDR2模塊中將數(shù)據(jù)讀取出來通過FIFO傳輸?shù)経ART模塊后將數(shù)據(jù)傳輸出去。同時可以通過UART與PC上的上位機進行串口通信對功能和傳輸?shù)臄?shù)據(jù)進行驗證。后續(xù)中還可以通過對預(yù)留的PCIE功能模塊進行開發(fā),使用1lane的PCIE通道實現(xiàn)PCIE數(shù)據(jù)傳輸與背板的通信功能驗證。
本系統(tǒng)時鐘分配實現(xiàn)方案框圖如圖4所示,板上提供50 MHz外部有源晶振作為FPGA的時鐘源,調(diào)用FPGA PLL時鐘模塊對時鐘進行倍頻處理,對于各個模塊所需的時鐘頻率在倍頻的基礎(chǔ)上進行分頻以滿足各模塊所需時鐘頻率。
圖4 時鐘分配方案
由于FPGA各bank模塊供電不同,系統(tǒng)中主要提供了5 V的輸入電壓,轉(zhuǎn)換處理后得到所需的3.3 V、2.5 V、1.8 V、1.2 V及DDR2模塊的參考電壓0.9 V等電壓。使用flash芯片來存儲FPGA程序的配置文件及SPI通訊測試的實現(xiàn)。
對于DDR2模塊的PCB布線[3,6],根據(jù)XINLINX的MCB的操作手冊中的建議,DDR2接口的信號在內(nèi)層走線,信號線總長盡可能短,DDR2器件盡量靠近FPGA,信號線的寬度控制在3~5 mil(1 mil=0.0254 mm),同組信號間距保持3倍信號寬度,不同組信號及時鐘信號間距至少保持20 mil,差分時鐘信號接100 Ω匹配電阻,其他信號線接50 Ω匹配電阻。對各信號線進行分組等長和總長小于3 inch控制,其中同組信號中數(shù)據(jù)信號組間長度差控制在±150 mil內(nèi),控制組信號間長度差控制在±300 mil內(nèi),差分信號間控制在±10 mil內(nèi),時鐘和數(shù)據(jù)信號的參考信號DQS信號差控制在±300 mil內(nèi)以保證建立和保持時間的正確。本設(shè)計PCB板為6層板,各信號線長度控制在1 000 mil左右,滿足信號的組間長度差和間距差要求,同時進行阻抗匹配控制。
板卡上安裝有光纖收發(fā)轉(zhuǎn)換模塊各一個,用以實現(xiàn)板卡的接收和發(fā)送功能。對于DDR2模塊設(shè)計,通過設(shè)計用戶控制模塊對 MCB 進行二次封裝,實現(xiàn)流傳輸情況下數(shù)據(jù)帶寬的最大化,非常適合一些需要流傳輸?shù)目刂茍龊?,同時也非常方便移植到其他開發(fā)模塊上使用。構(gòu)架框圖如圖5所示。二次封裝后的DDR2讀用戶接口RTL模塊見圖6,DDR2寫用戶接口RTL模塊見圖7。
圖5 MCB二次封裝框架圖
圖6 讀接口RTL圖
圖7 寫接口RTL圖
圖8、圖9、圖10分別為MCB的命令FIFO時序、寫數(shù)據(jù)FIFO時序、讀數(shù)據(jù)FIFO時序[7]。命令FIFO實現(xiàn)要操作的地址、突發(fā)長度、讀寫模式選擇等功能[7],而讀寫FIFO在命令FIFO的配合下結(jié)合使能信號、空滿信號等實現(xiàn)對指定地址的數(shù)據(jù)寫入或讀出功能。要實現(xiàn)MCB對DDR2的數(shù)據(jù)讀寫,根據(jù)DDR2數(shù)據(jù)手冊可知,需先等待Calibration過程完成,即c3_calib_done信號置高有效后才開始DDR2模塊的讀寫操作。如果要向MCB寫入數(shù)據(jù),根據(jù)寫數(shù)據(jù)FIFO時序中的要求,首先在px_wr_en信號有效后將相關(guān)數(shù)據(jù)寫入FIFO中,然后通過使能命令FIFO中px_cmd_en信號,將相關(guān)數(shù)據(jù)寫入到指定的地址;對于讀取數(shù)據(jù)的實現(xiàn),命令時序和讀時序的操作過程則相反,先使能命令FIFO時序?qū)⑾嚓P(guān)控制命令寫入,MCB將DDR2中的數(shù)據(jù)讀取到寫數(shù)據(jù)FIFO中然后再讀取出[8-9]。
圖9 寫數(shù)據(jù)FIFO時序
圖10 讀數(shù)據(jù)FIFO時序
為了測試板卡的性能,在程序內(nèi)部產(chǎn)生測試數(shù)據(jù),設(shè)定MCB FIFO的連續(xù)讀寫存儲深度為64。通過光纖發(fā)送接口發(fā)出到光纖接收接口接收數(shù)據(jù),并存儲到IP核構(gòu)建的異步FIFO中等待讀入DDR2。為了實現(xiàn)MCB FIFO的讀寫效率最大化,寫命令請求的時候,在寫MCB FIFO的數(shù)據(jù)非滿就控制往MCB FIFO繼續(xù)寫數(shù)據(jù),只要FIFO中有數(shù)據(jù)就發(fā)送控制命令把FIFO的數(shù)據(jù)搬運到 DDR2中;同理,讀命令請求的時候,只要寫MCB FIFO的數(shù)據(jù)非空就控制從MCB FIFO繼續(xù)讀數(shù)據(jù),當(dāng)讀FIFO數(shù)據(jù)非滿就發(fā)送控制命令從DDR2把數(shù)據(jù)搬運到讀FIFO中。通過這種非滿即讀或非空即寫的模式,只要MCB讀FIFO有數(shù)據(jù),就可以讀,這樣如果讀速度接近了MCB 和DDR2物理芯片的速度,就可以實現(xiàn)最大化的帶寬利用率。
本系統(tǒng)板卡的外部晶振源為50 MHz,通過FPGA內(nèi)部PLL倍頻、分頻處理分別給光纖收發(fā)UART模塊、DDR2模塊、FIFO、RAM等模塊提供工作時鐘。其中,DDR2的讀寫頻率為500 MHz,UART模塊波特率為9 600 Hz。測試中,在程序內(nèi)部產(chǎn)生連續(xù)交替的AA和55數(shù)據(jù)進行讀取。完成光纖收發(fā)模塊、DDR2模塊等相關(guān)模塊的FPGA控制編程后,再進行對各模塊仿真驗證,對該硬件板卡進行板上功能驗證,使用XILINX提供的Chipscope工具對數(shù)據(jù)進行抓取分析。硬件板卡上電后正常工作,通過JTAG下載線將板卡與電腦進行連接,將編譯生成后的bit文件下載到芯片中運行,設(shè)置好Chipscope相關(guān)參數(shù),運行Chipscope對數(shù)據(jù)進行抓取。抓取測試結(jié)果如圖11~圖13所示。圖11為光纖收發(fā)模塊的結(jié)果,tx信號由1跳變到0,同時send信號置1表明發(fā)送模塊準(zhǔn)備好發(fā)送數(shù)據(jù),最后2行為光纖發(fā)送模塊數(shù)據(jù)。圖12、圖13中為整個功能數(shù)據(jù)讀寫測試結(jié)果,第1行為寫入DDR2中的數(shù)據(jù),第2行為DDR2讀出數(shù)據(jù),第3行為讀出數(shù)據(jù)進入光纖發(fā)送模塊緩沖FIFO的數(shù)據(jù),第4行為光纖發(fā)送模塊要發(fā)送的數(shù)據(jù),最后一行為光纖接收模塊接收到的數(shù)據(jù)。
圖11 光纖收發(fā)模塊數(shù)據(jù)
圖12 整個系統(tǒng)測試數(shù)據(jù)
圖13 整個系統(tǒng)測試數(shù)據(jù)
設(shè)計中對光纖收發(fā)模塊采用類似UART按字節(jié)方式進行傳輸,方便對讀取的數(shù)據(jù)進行觀察對比。對MCB進行二次封裝,采用非滿就寫,非空就讀的方式,可以實現(xiàn)DDR2最大化的帶寬利用率,同時接口控制模塊也方便移植到其他DDR上使用。
通過多次數(shù)據(jù)讀寫測試,系統(tǒng)能夠穩(wěn)定工作,能夠滿足加速器上對常規(guī)束損探測器輸出信號的采集使用。通過將數(shù)據(jù)緩存在DDR2中,可以很好地避免因為高速光纖快速傳輸而DIO板卡不能及時處理導(dǎo)致數(shù)據(jù)丟失的問題。同時,預(yù)留的PCIE接口模塊可用于后續(xù)更大數(shù)據(jù)量的傳輸使用開發(fā)驗證。