摘 要: 介紹了在激光告警系統(tǒng)中采用異步FIFO解決A/D數(shù)據(jù)采樣與FPGA數(shù)據(jù)處理模塊之間的不同速率匹配問題,。在分析異步FIFO設計難點基礎上,,提出利用Gray碼計數(shù)器作為讀寫地址編碼,有效地同步了異步信號,,避免了亞穩(wěn)態(tài)現(xiàn)象的產生,,給不同速率間的數(shù)據(jù)傳輸提供了一種有效的解決方案。同時采用Verilog語言描述,,提高了硬件設計的可移植性,,減少了系統(tǒng)的復雜性,提高了激光告警接收系統(tǒng)的可靠性,。
關鍵詞: 激光告警接收系統(tǒng),;異步FIFO;Gray碼
快速在片激光告警接收系統(tǒng)中,,A/D信號采樣頻率與FPGA中數(shù)據(jù)處理系統(tǒng)的工作頻率往往不一致,,因此在這種情況下,為避免數(shù)據(jù)丟失,,需要設計一種數(shù)據(jù)緩存,。本文采用Verilog HDL語言設計了一種異步FIFO(時鐘周期和相位相互獨立),它不僅提供數(shù)據(jù)緩沖,,而且能夠實現(xiàn)不同時鐘域間的轉換等功能,。
1 激光告警接收系統(tǒng)的數(shù)據(jù)采樣和處理
對于高速在片激光告警接收系統(tǒng),具有較高的采樣速率,、低功耗、體積小以及相應的高抗干擾性能是提高其成功獲取敵方激光武器有效數(shù)據(jù)的關鍵,,而采用線性CMOS芯片和提高系統(tǒng)的集成度是實現(xiàn)小體積,、低功耗的最經濟、最有效的途經,。本系統(tǒng)采用Xilinx公司Spartan-Ⅲ系列芯片XC3S1500,,設計完成異步FIFO緩存,包括采集控制電路,、FFT數(shù)據(jù)處理,、時鐘控制信號、接口電路等,。激光告警接收系統(tǒng)的數(shù)據(jù)采樣和處理框圖如圖1所示,。
2 異步FIFO設計
異步FIFO由讀、寫地址邏輯,,存儲單元和空滿標志邏輯四部分組成,,如圖2所示。由圖2可以看出,,整個系統(tǒng)分為兩個獨立的時鐘域(讀時鐘域和寫時鐘域),,F(xiàn)IFO的存儲介質為一塊雙口RAM,,可以同時進行讀寫操作。在寫時鐘域部分,,由寫地址邏輯生成寫控制信號和寫地址,;在讀時鐘域部分,由讀地址邏輯生成讀控制信號和讀地址,??諠M標志信號,由寫指針和讀指針通過異步比較器相互比較生成,。對于異步FIFO設計主要有以下兩個難點:一是如何同步異步信號,,避免觸發(fā)器亞穩(wěn)態(tài)的產生;二是如何根據(jù)FIFO的指針信號正確地判斷FIFO的空滿狀態(tài)[1],。
2.1 亞穩(wěn)態(tài)問題的解決
在數(shù)字電路中,,觸發(fā)器需要滿足setup/hold時間要求。當一個信號被寄存器鎖存時,,如果信號和時鐘之間不能滿足這個要求,,data2端的值就是不確定的,這個過程稱為亞穩(wěn)態(tài),。如圖3所示為常用異步時鐘和亞穩(wěn)態(tài)[2],。
在異步FIFO中,由于時鐘之間周期和相位完全獨立,,因此數(shù)據(jù)的丟失概率不為零,。盡管亞穩(wěn)態(tài)無法徹底消除,但是可以通過下面方法將其降低到一個可以接受的范圍之內,。
(1)對讀地址/寫地址采用Gray碼設計,。這是因為采用二進制計數(shù)時所有位都可能變化,不利于跨時鐘域的同步,。例如,,3位二進制數(shù)從3變到4(即011~100)時,所有位都發(fā)生了變化,,而Gray碼的特點是每次只有一個數(shù)據(jù)位變化,。由于同步多個異步輸入信號出現(xiàn)亞穩(wěn)態(tài)的概率遠遠大于同步一個異步信號的概率,因此,,寫地址指針和讀地址指針均采用Gray碼計數(shù)器,,可以保證一個時鐘域的指針盡可能安全地被轉換到另一個時鐘域,有效避免了亞穩(wěn)態(tài),。
(2)采用觸發(fā)器來同步異步輸入信號,,如圖4中的兩級觸發(fā)器,可以將出現(xiàn)亞穩(wěn)態(tài)幾率降低到一個很小的程度,。
不過,,使用這種方法會增加一級延時,。為了充分利用FPGA器件資源,提高系統(tǒng)運行速度,,同時有效地避免亞穩(wěn)定狀態(tài),,結合系統(tǒng)實際應用,本設計采用Gray碼設計讀寫地址,。
2.2 空滿狀態(tài)的判斷
在異步FIFO設計中,,正確地產生“空”/“滿”標志是最困難的部分,主要有兩個問題:(1)異步時鐘域問題,,由上分析可知,,可采用Gray碼計數(shù)器解決;(2)因為FIFO“空”/“滿”都表明讀/寫指針相等,,因此必須準確區(qū)分是讀“空”還是寫“滿”,。“空”、“滿”狀態(tài)的產生需要兩個條件:①對方向的判定:即判定具體是寫地址指針將要接近讀地址指針,,還是讀地址指針將要接近寫地址指針,;②讀寫地址是否相等[4]。
解決辦法:將FIFO地址空間按最高兩位劃分成4個象限,,每當讀/寫地址相等時,,通過對最高兩位譯碼以產生正確的“空”/“滿”標志。
若寫指針比讀指針滯后一個象限,,則FIFO為“接近滿”狀態(tài),,此時置標志“direction”為1,并且鎖存其值,,相應等式為:
wire disrest_n=~((wptr[n]^rptr[n-1]))&~((wptr[n-1])^rptr[n] ))
若寫指針比讀指針超前一個象限,,則FIFO為“接近空”狀態(tài),此時置標志“direction”為0,,并且鎖定其值,相應等式為:
wire dirclr_n=~((~(wptr[n]^rptr[n-1])&(wptr[n-1]^rptr[n]))∣~wrst_n
3 模塊設計的Verilog實現(xiàn)[3-4]
3.1 存儲模塊RAM
為增加設計的可移植性,,本設計的存儲單元沒有采用ISE8.1軟件中的IP核,,而是通過Verilog HDL語句設計一個二維數(shù)組,通過修改參數(shù)可得到相應數(shù)據(jù)寬度的輸入/輸出存儲空間,。主要語句如下:
module dp_ram(rdata,,wdata,waddr,,raddr,,wclken,wclk),;
parameter DATA_WIDTH=12,;
parameter ADDR_WIDTH=10,;
parameter DEPTH=1<<ADDR_WIDTH;
always @(posedge wclk)
if (wclken) MEM[waddr]<=wdata,;
assign rdata=MEM[raddr],;
endmodule
3.2 讀/寫、空/滿標志邏輯模塊
讀寫地址設計中引用了Gray碼,,因Gray碼是一種在相鄰計數(shù)之間只有一位發(fā)生變化的編碼方式,,用Gray碼做地址計數(shù)可以消除在電路中的模糊現(xiàn)象,避免亞穩(wěn)態(tài),。Gray碼可以借助二進制計數(shù)器實現(xiàn),。
3.3 異步比較器
異步比較器用于判斷比較讀指針、寫指針的大小,,輸出控制信號,,判斷存儲器中數(shù)據(jù)是“接近滿”還是“接近空”。其主要程序語句如下:
module async_cmp(aempty_n,,afull_n,,wptr,rptr,,wrst_n),;
always @(posedge high or negedge dirset_n or negedge dirclr_n)
if (!dirclr_n) direction <= 1'b0;
else if (!dirset_n) direction <= 1'b1,;
else direction <= high,;
endmodule
3.4 異步FIFO模塊及RTL級硬件電路[5]
利用Verilog硬件設計描述語言,在Xilinx公司ISE 8.1軟件開發(fā)環(huán)境中編譯后得出如圖5所示的異步FIFO模塊,。
采用綜合工具Synplify Pro軟件對該設計進行綜合,,得出RTL級硬件電路結果圖如圖6所示。
3.5 芯片資源利用
表1列出了設計高速在片激光告警接收系統(tǒng)的異步FIFO占用FPGA(XC3S1500)芯片內部資源的情況,。由表1可知,,F(xiàn)IFO模塊完成后,還有大量的資源可以利用,,因此剩余資源可用于實現(xiàn)FFT數(shù)據(jù)處理,、采集控制、顯示等功能,,從而在一塊芯片上完成多種功能,,可有效減少激光告警接收機的體積,朝小型化發(fā)展,。
4 系統(tǒng)波形仿真
讀寫時鐘異步使得FIFO存儲器的輸入和輸出數(shù)據(jù)速率不相等,,在讀操作時鐘頻率高于寫操作時鐘頻率時,可能出現(xiàn)“讀空”狀態(tài);當寫操作時鐘頻率高于讀操作時鐘頻率時,,可能出現(xiàn)“寫滿”狀態(tài),。在高速在片激光告警接收系統(tǒng)中,數(shù)據(jù)讀取時鐘比寫時鐘要高,,本文選取第一種情況進行仿真,。無論是“讀空”還是“寫空”,對于異步FIFO來說,,讀取的數(shù)據(jù)一定等于寫入的數(shù)據(jù),。利用Modelsim SE 6.0仿真軟件進行仿真,其波形如圖7所示,。結果表明,,該設計是正確的。
本文提出的FIFO設計方法解決了不同時鐘域間的數(shù)據(jù)緩沖和時鐘轉換功能問題,,避免了數(shù)據(jù)的丟失,;通過運用Gray碼計數(shù)器一次只變換一位的特點,有效地同步了異步信號,,避免了亞穩(wěn)態(tài)的產生,;與二進制計數(shù)器相比,還能減少線路切換,,進而減少功率的消耗[3],;采用Verilog HDL語言描述設計,可移植性好,、生成的硬件電路面積小,、速度快、系統(tǒng)可靠性高,。目前,,該FIFO設計已經在所研制的激光告警接收系統(tǒng)中得到應用。
參考文獻
[1] 黃平,,何虎剛,,徐定杰.導航接收機的非對稱異步FIFO設計[J].彈箭與制導學報,2008(2):265-268.
[2] 楊軍,,孔兵,,宋克儉,等.基于FPGA的高速異步FIFO存儲器設計[J].云南大學學報(自然科學版),,2007,29(6):560-565.
[3] 劉波.精通Verilog HDL語言[M].北京:電子工業(yè)出版社,,2007.
[4] (美)CZLETTZ MD,,著. Verilog HDL高級數(shù)字設計[M].張雅綺,李鏘,等譯.北京:電子工業(yè)出版社,,2006.
[5] 簡宏倫.精通Verilog HDL:IC設計核心技術實例詳解[M].北京:電子工業(yè)出版社,,2005.