《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計(jì)應(yīng)用 > 基于FPGA的像素探測器數(shù)據(jù)緩存設(shè)計(jì)
基于FPGA的像素探測器數(shù)據(jù)緩存設(shè)計(jì)
來源:電子技術(shù)應(yīng)用2011年第9期
楊 萌, 王祖強(qiáng)
(山東大學(xué) 信息科學(xué)與工程學(xué)院, 山東 濟(jì)南104221)
摘要: 針對粒子對撞機(jī)像素探測器的數(shù)據(jù)緩存,提出了基于FPGA的解決方法。通過時(shí)序轉(zhuǎn)換匹配模塊,可以使用定制FIFO核實(shí)現(xiàn)對探測器模型的數(shù)據(jù)進(jìn)行緩存。經(jīng)過FPGA驗(yàn)證,在功能上達(dá)到了像素探測器模型的要求,對于粒子對撞機(jī)像素探測器的低成本工程驗(yàn)證具有顯著的參考價(jià)值。
關(guān)鍵詞: FPGA FIFO 像素探測器 CycloneII
中圖分類號: TP333
文獻(xiàn)標(biāo)識碼: 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


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

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

 


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

 FIFO即先進(jìn)先出緩存器。FIFO與其他存儲器的最大區(qū)別就是沒有外部讀寫的地址線,因此應(yīng)用起來十分方便簡單,但是相應(yīng)的缺點(diǎn)就是只能順序?qū)懭牖蛘唔樞蜃x取,其尋址方式由內(nèi)部指針自加自減完成,不能對特定的地址進(jìn)行讀寫。FIFO通常使用在不同速度的接口數(shù)據(jù)交換中,通過FIFO使得時(shí)序分別符合兩個(gè)接口的特定速度,以進(jìn)行數(shù)據(jù)傳輸。
 Altera的FIFO按照驅(qū)動時(shí)鐘分類有兩種:單時(shí)鐘FIFO(SCFIFO),即讀和寫FIFO用的同一個(gè)時(shí)鐘信號;雙時(shí)鐘FIFO(DCFIFO),即讀和寫FIFO分別使用不同時(shí)鐘信號。其中雙時(shí)鐘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進(jìn)行構(gòu)建,像素探測器模型中有16路傳感器輸出,每路輸出需要記錄100個(gè)數(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后,對其進(jìn)行時(shí)序仿真,仿真結(jié)果如圖2所示。

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


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

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

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

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

3 設(shè)計(jì)驗(yàn)證
3.1  驗(yàn)證

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

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

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