《電子技術(shù)應用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應用 > 基于FPGA的像素探測器數(shù)據(jù)緩存設(shè)計
基于FPGA的像素探測器數(shù)據(jù)緩存設(shè)計
來源:電子技術(shù)應用2011年第9期
楊 萌, 王祖強
(山東大學 信息科學與工程學院, 山東 濟南104221)
摘要: 針對粒子對撞機像素探測器的數(shù)據(jù)緩存,提出了基于FPGA的解決方法。通過時序轉(zhuǎn)換匹配模塊,可以使用定制FIFO核實現(xiàn)對探測器模型的數(shù)據(jù)進行緩存。經(jīng)過FPGA驗證,在功能上達到了像素探測器模型的要求,對于粒子對撞機像素探測器的低成本工程驗證具有顯著的參考價值。
關(guān)鍵詞: FPGA FIFO 像素探測器 CycloneII
中圖分類號: TP333
文獻標識碼: B
文章編號: 0258-7998(2011)09-092-05
Design and realization of pixel detector data buffer based on FPGA
Yang Meng, Wang Zuqiang
Information Science and Technology Institute, Shangdong University, Jinan 104221, China
Abstract: In order to solving data buffer problem of partical collider pixel detector model, this paper introduces a method based on FPGA device. By using time sequence switch module, it could use custom-built FIFO IP core for buffering data from pixel detector output. After testing on FPGA development board, this method could satisfy the requirement of pixel detector model, and it has remarkable reference value to experimentation of partical collider pixel detector project.
Key words : FIFO; FPGA; pixel detector


 粒子對撞機[1]是建立在高能同步加速器上的一種粒子對撞裝置。對撞機運行時,能量強大的粒子在其內(nèi)部經(jīng)過加速后對撞,以達到一定的相互反應速率。對實驗數(shù)據(jù)進行分析研究,可以幫助實驗者了解相應粒子的形態(tài)等特性,從而推動各種理論或技術(shù)的發(fā)展。
 像素探測器[2]是粒子對撞機內(nèi)部用于探測質(zhì)子撞擊后所形成的離子軌跡的裝置,是一種專用傳感器,由像素探測器探測得出的數(shù)據(jù)結(jié)果即可繪制出撞擊后的離子軌跡。目前,像素探測器主要采用以下幾種設(shè)計方法:ASIC設(shè)計方法[3],其優(yōu)點是集成度高且功耗低,但是設(shè)計成本高、周期長且風險較大;分立元件采用微處理器的設(shè)計方法,其優(yōu)點是成本低、設(shè)計周期短且風險小,但是速度慢且體積大。針對這幾種設(shè)計方法,本文結(jié)合FPGA[4]提出了一種基于粒子對撞機像素探測器的數(shù)據(jù)緩存方法設(shè)計。相對ASIC設(shè)計方法,具有設(shè)計投入低、參數(shù)設(shè)置靈活、開發(fā)風險低而且開發(fā)周期短的優(yōu)勢;相對于分立元件采用微處理器的設(shè)計方法,具有體積小、功耗低且速度快的優(yōu)勢。
 由于像素探測器的數(shù)據(jù)輸出具有保持時間短(最少保持時間為25 ns)、數(shù)據(jù)間隔時間不確定等特征,所以對于數(shù)據(jù)的存儲必須經(jīng)過時序轉(zhuǎn)換電路將數(shù)據(jù)事先存入緩存,再寫入存儲器。本文的數(shù)據(jù)緩存設(shè)計由FIFO輸入時序模塊、FIFO模塊和FIFO輸出時序模塊三部分組成,通過驗證可以實現(xiàn)由探測器數(shù)據(jù)輸出端到存儲器的數(shù)據(jù)緩存功能。
1 總體設(shè)計
    FPGA是一種新型的可編程邏輯器件,可以通過硬件描述語言生成所需的硬件,相對于傳統(tǒng)的ASIC設(shè)計,具有設(shè)計周期短、靈活性高、開發(fā)費用少、設(shè)計風險低等優(yōu)點,是ASIC的一種高效低成本解決方案。本設(shè)計使用的FPGA是Altera公司的CYCLONE2芯片,最高時鐘頻率100 MHz??傮w架構(gòu)如圖1所示。

 由于探測器數(shù)據(jù)輸出需要符合FIFO數(shù)據(jù)輸入的時序,F(xiàn)IFO的數(shù)據(jù)輸出需要符合存儲器輸入的時序,因此設(shè)計了FIFO輸入時序模塊和FIFO輸出時序模塊,使數(shù)據(jù)能夠正確緩存進而存儲。下面對具體的時序規(guī)范及各個模塊進行說明。

 


2 模塊設(shè)計及說明
2.1 FIFO模塊

 FIFO即先進先出緩存器。FIFO與其他存儲器的最大區(qū)別就是沒有外部讀寫的地址線,因此應用起來十分方便簡單,但是相應的缺點就是只能順序?qū)懭牖蛘唔樞蜃x取,其尋址方式由內(nèi)部指針自加自減完成,不能對特定的地址進行讀寫。FIFO通常使用在不同速度的接口數(shù)據(jù)交換中,通過FIFO使得時序分別符合兩個接口的特定速度,以進行數(shù)據(jù)傳輸。
 Altera的FIFO按照驅(qū)動時鐘分類有兩種:單時鐘FIFO(SCFIFO),即讀和寫FIFO用的同一個時鐘信號;雙時鐘FIFO(DCFIFO),即讀和寫FIFO分別使用不同時鐘信號。其中雙時鐘FIFO還根據(jù)不同的端口數(shù)據(jù)寬度分為DCFIFO和DCFIFO_MIXED_WIDTH,所謂DCFIFO是輸入數(shù)據(jù)和輸出數(shù)據(jù)具有相同的數(shù)據(jù)寬度;而DCFIFO_MIXED_WIDTH是指輸入輸出端口可以使用不同的數(shù)據(jù)寬度。
 使用Altera的FIFO MegaWizard inteface launched對FIFO進行構(gòu)建,像素探測器模型中有16路傳感器輸出,每路輸出需要記錄100個數(shù)據(jù)。根據(jù)模型需要,構(gòu)建FIFO的主要參數(shù)如下:
    dcfifo_component.intended_device_family
    = "Cyclone II"dcfifo_component.lpm_hint"MAXIMIZE_
        SPEED=7  RAM_BLOCK_TYPE=M4K"
    dcfifo_component.lpm_numwords = 128
    dcfifo_component.lpm_showahead = "OFF"
    dcfifo_component.lpm_type = "dcfifo"
    dcfifo_component.lpm_width = 16
    dcfifo_component.lpm_widthu = 7
    dcfifo_component.overflow_checking="ON" dcfifo_compo-
        nent.rdsync_delaypipe = 5
    dcfifo_component.underflow_checking="ON"
    dcfifo_component.use_eab = "ON"
    dcfifo_component.write_aclr_synch = "OFF"
    dcfifo_component.wrsync_delaypipe = 5;
 構(gòu)建完FIFO后,對其進行時序仿真,仿真結(jié)果如圖2所示。

 參照時序仿真圖對各個端口及時序進行說明:
 aclr: 異步清零端,1 bit。清零所有輸出狀態(tài)端口,對于DCFIFO,3個wrclk時鐘上升沿后清零wrfull端口,清零rdfull端口。如果輸出端口定義reg類型的則會被清零;否則會保持輸出值。
 data: 數(shù)據(jù)輸入端口, 16 bit。當寫請求wrreq有效時,保持數(shù)據(jù)直到數(shù)據(jù)被寫入FIFO。當使用手動定義FIFO時,其數(shù)據(jù)寬度用參數(shù)LPM_WIDTH定義。
 q: 數(shù)據(jù)輸出端口, 16 bit。當有數(shù)據(jù)請求時(rdreq有效時),輸出數(shù)據(jù)。對于DCFIFO,輸出數(shù)據(jù)的寬度可以與輸入數(shù)據(jù)data端口寬度不同,具體用參數(shù)LPM_WIDTH_R定義。
 rdcld: 上升沿出發(fā)時鐘,1bit。用來同步以下信號:q、dreq、dfull、dempty、rdusedw。
 rdempty: 輸出數(shù)據(jù)為零時輸出高電平,1 bit。不管目標設(shè)備是什么,在讀請求發(fā)送前必須查詢rdempty信號是否為高電平,以避免錯誤指令發(fā)出。
 rdreq: 讀請求信號端口,1 bit。當需要從FIFO中讀數(shù)據(jù)時,向rdreq端發(fā)送讀請求,讀取數(shù)據(jù)個數(shù)與rdreq持續(xù)的時鐘數(shù)相同。需要注意的是,當rdempty有效時不能發(fā)送rdreq信號。對于這種情況,可以開啟空保護功能,通過設(shè)置參數(shù)UNDERFLOW_CHECKING高電平實現(xiàn),當rdempty為高電平時rdreq信號自動被置為無效。
 rdusedw: 輸出數(shù)據(jù)顯示FIFO中可讀數(shù)據(jù)的數(shù)據(jù)量,7 bit。在DCFIFO中,其端口寬度要與手動設(shè)置參數(shù)LPM_WIDTHU相等。需要注意的是,對于Cyclone系列的FPGA,當顯示數(shù)據(jù)滿時實際FIFO的存儲數(shù)據(jù)量有可能并沒有達到存儲的最大值,因此應該參考full或者wrfull端口來執(zhí)行正確的寫操作,參考empty或者rdempty端口來執(zhí)行正確的讀操作。
 wrclk: 寫數(shù)據(jù)時鐘,上升沿觸發(fā)有效,1 bit。用于同步以下端口:data、wrreq、wrusedw、 wrfull和wrempty。
 wrfull: 寫數(shù)據(jù)滿信號,1 bit。當此端口電平有效時,F(xiàn)IFO已經(jīng)被寫滿。其注意事項同rdfull。總體而言,rdfull信號要比wrfull信號有所延遲,因此,應該通過wrfull信號的電平來判斷是否可以發(fā)送寫請求信號wrreq。
 wrreq: 寫請求信號。當需要向FIFO寫入數(shù)據(jù)時,向wrreq端發(fā)送讀請求,讀取數(shù)據(jù)個數(shù)與wrreq持續(xù)的時鐘數(shù)相同。需要注意的是,當wrfull有效時不能發(fā)送wrreq信號。對于這種情況,可以開啟溢出保護功能,通過設(shè)置參數(shù)OVERFLOW_CHECKING高電平實現(xiàn),當wrfull為高電平時wrreq信號自動被置為無效。同時在取消aclr信號時不應輸入wrreq信號,否則aclr信號的下降沿和wrreq信號置為高電平后寫數(shù)據(jù)的上升沿會產(chǎn)生競爭冒險現(xiàn)象。對于CYCLONE系列的FPGA中DCFIFO器件,可以選擇添加同步電路同步aclr信號和wrclk信號,在手動設(shè)置中也可以通過設(shè)置參數(shù)WRITE_ACLR_SYNCH有效實現(xiàn)同步。
 wrusedw: 輸出數(shù)據(jù)顯示FIFO中寫入數(shù)據(jù)的數(shù)據(jù)量,7 bit。在DCFIFO中,其端口寬度要與手動設(shè)置參數(shù)LPM_WIDTHU相等。需要注意的是,對于Cyclone系列的FPGA,當顯示數(shù)據(jù)滿時實際FIFO的存儲數(shù)據(jù)量有可能并沒有達到存儲的最大值,因此應該參考full或者wrfull端口來執(zhí)行正確的寫操作,參考empty或者rdempty端口來執(zhí)行正確的讀操作。
  FIFO工作時的狀態(tài)轉(zhuǎn)換圖如圖3所示。


2.2 FIFO輸入時序模塊
    FIFO輸入時序模塊用于使TIME COUNTER_WITHID模塊(用于對信號進行計時)的輸出數(shù)據(jù)時序符合FIFO輸入數(shù)據(jù)時序的接口要求。FIFO的寫請求信號wrreq的長度所包含的周期數(shù)為寫入FIFO數(shù)據(jù)的個數(shù),并且寫請求信號有效時輸入數(shù)據(jù)端口的數(shù)據(jù)即被寫入FIFO,幾乎沒有延遲,因此輸入數(shù)據(jù)長度應符合FIFO的時鐘信號周期長度,并且寫請求信號長度也需要符合FIFO時鐘信號周期長度,兩者在時間上需要達到同步。
 為了測試輸出數(shù)據(jù)長度符合FIFO接口的時序要求,分別進行了圖4(a)、圖4(b)、圖4(c)所示的波形仿真,輸入信號的持續(xù)長度分別為10 ns、20 ns、30 ns。如圖所示三種輸入的輸出皆為10 ns保持時間, 同時輸出10 ns write_en使能信號,符合FIFO接口要求。

 參照時序仿真圖對各個端口及時序進行說明:
 clk: FIFO輸入時序模塊時鐘輸入,1 bit。用于同步datain16、dataout16、write_en、complete、enable、usedw信號,與FIFO中wrclk信號相頻相同。
    complete:數(shù)據(jù)接收完成信號,1 bit。當從timecounter_withid模塊接收數(shù)據(jù)完成時發(fā)送給timecounter_withid模塊,持續(xù)時長1周期,timecounter_withid接收到信號時對內(nèi)部數(shù)據(jù)進行初始化,做好準備對新的信號輸入進行計時。
 datain16: 16位數(shù)據(jù)輸入端口,16 bit。用于輸入16位數(shù)據(jù)。
 dataout16: 16位數(shù)據(jù)輸出端口,16 bit。用于輸出16位數(shù)據(jù)。
 enable: 數(shù)據(jù)寫入輸入時序模塊使能,1 bit。當有數(shù)據(jù)要寫入模塊時,首先在此端口輸入高電平,然后輸入數(shù)據(jù)方可被正確接收。
    usedw: FIFO中可用數(shù)據(jù)端口,7 bit。用于查詢FIFO中可用數(shù)據(jù)量,以此判斷是否有剩余空間,進而確定是否向FIFO中寫數(shù)據(jù)。
 write_en: 寫使能信號,1bit。當要向FIFO中寫入數(shù)據(jù)時為高電平,dataout16進行數(shù)據(jù)輸出。
 模塊流程圖如圖5所示。整個模塊以posedge clk為同步時鐘進行循環(huán)判斷。當寫入模塊使能enable有效且寫入完畢信號complete無效時,首先對FIFO的存儲情況進行判斷,當FIFO中字節(jié)小于7 FH時,說明FIFO未被寫滿,可以向其輸入數(shù)據(jù)。數(shù)據(jù)輸入FIFO的同時,寫使能write_en置為有效,對于計數(shù)模塊輸出的接收完成信號complete信號置為有效。對一個周期的計數(shù)寄存器counter進行判斷,如果counter為1即計時一周期到,則寄存器清零。counter的數(shù)值是在每次posedge clk信號到來時對write_en判斷后進行加1,即當write_en為有效電平時,counter才被加1用來計時。

2.3 FIFO輸出時序模塊
 FIFO輸出時序模塊用于使FIFO的輸出信號符合Flash讀寫時序規(guī)范。由FIFO的時序仿真圖可以看出,當讀請求信號rdreq發(fā)出后,數(shù)據(jù)要延遲15 ns左右才會輸出。如果Flash控制器發(fā)出讀請求信號后立即讀FIFO的數(shù)據(jù),則會造成差錯。因此本模塊可以銜接FIFO和Flash控制器的端口時序。
 時序仿真圖如圖6所示。由時序仿真圖可以看出,sendready信號相對于empty信號延遲了13 ns左右,dataout信號相對于sendready信號延遲了20 ns左右??梢詽M足FIFO時序要求。

 參照時序仿真圖對各個端口及時序進行說明:
 clk: FIFO輸入時序模塊時鐘輸入,1 bit。用于同步datain16、dataout16、empty、complete、sendready信號,與FIFO中wrclk信號相頻相同。
    complete: 數(shù)據(jù)接收完成信號,1 bit。當存儲器從模塊接收數(shù)據(jù)完成時發(fā)送給FIFO輸出時序模塊,持續(xù)時長1周期,F(xiàn)IFO輸出時序模塊接收到此信號時對內(nèi)部數(shù)據(jù)進行初始化,開始對新的信號輸入進行計時。
 datain16: 16位數(shù)據(jù)輸入端口,16 bit。用于輸入16位數(shù)據(jù)。
 dataout16: 16位數(shù)據(jù)輸出端口,16 bit。用于輸出16位數(shù)據(jù)。    
 sendready: 數(shù)據(jù)準備就緒信號,1 bit。當FIFO收到讀數(shù)據(jù)請求信號并且有數(shù)據(jù)輸出時sendready發(fā)送有效信號,存儲器讀取輸出數(shù)據(jù)。
 write_en: 寫使能信號,1 bit。當要向FIFO中寫入數(shù)據(jù)時為高電平,dataout16進行數(shù)據(jù)輸出。
 模塊流程圖如圖7所示。

3 設(shè)計驗證
3.1  驗證

    將程序下載到CycloneII FPGA芯片中,并且用按鍵作為輸入信號進行了測試,在控制臺上打印 FIFO的輸出結(jié)果,結(jié)果如圖8所示。

3.2  驗證結(jié)果分析
 當FIFO中的數(shù)據(jù)經(jīng)過時序轉(zhuǎn)換模塊可以向存儲器寫入時,ready信號為1,同時數(shù)據(jù)寫入寄存器并在控制臺打印,然后再將寄存器中的數(shù)據(jù)寫入存儲器,并向時序轉(zhuǎn)換模塊返回完成信號complete高電平1,等待從FIFO中讀取新數(shù)據(jù)。經(jīng)過驗證,本設(shè)計可以將輸入數(shù)據(jù)進行緩存并且輸出給NiosII CPU,符合像素探測器數(shù)據(jù)緩存要求。
    本文結(jié)合FPGA對粒子對撞機像素探測器的數(shù)據(jù)緩存提出了解決方法并進行了設(shè)計和驗證。相對于傳統(tǒng)的ASIC構(gòu)建方法,具有高效率、低投入的優(yōu)勢,提高了探測器升級和參數(shù)設(shè)置等方面的靈活性;相對于分立元件的設(shè)計方法,具有高速、低功耗和集成度高的優(yōu)勢。通過時序仿真和FPGA驗證,能夠滿足像素探測器的設(shè)計需要。
參考文獻
[1] 王直華. 粒子對撞機與宇宙大爆炸[J]. 科技潮,2008(10).
[2] 孟祥承.新型半導體探測器發(fā)展和應用[J]. 核電子學與探測技術(shù),2004,24(1):87-96.
[3] GAGLIARD G. The ATLAS pixel detector electronics.Nuclear Instruments and Methods in Physics Research,2001:275-281.
[4] 楊海鋼,孫嘉斌,王慰.FPGA器件設(shè)計技術(shù)發(fā)展綜述[J].電子與信息學報,2010,32(3):714-727.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。