基于異步FIFO實(shí)現不同時(shí)鐘域間數據傳遞的設計
摘 要:數據流在不同時(shí)鐘域間的傳遞一直是集成電路芯片設計中的一個(gè)重點(diǎn)問(wèn)題。本文通過(guò)采用異步FIFO的方式給出了這個(gè)問(wèn)題的一種解決方法,并采用Verilog 硬件描述語(yǔ)言通過(guò)前仿真和邏輯綜合完成設計。
關(guān)鍵詞:異步FIFO;時(shí)鐘域;Verilog
引言
當今集成電路設計的主導思想之一就是設計同步化,即對所有時(shí)鐘控制器件(如觸發(fā)器、RAM等)都采用同一個(gè)時(shí)鐘來(lái)控制。但在實(shí)際的應用系統中,實(shí)現完全同步化的設計非常困難,很多情況下不可避免地要完成數據在不同時(shí)鐘域間的傳遞(如高速模塊和低速模塊之間的數據交換)。這時(shí),如何保持系統的穩定,順利完成數據的傳輸就成為一個(gè)重要的問(wèn)題,這也是異步電路設計中最為棘手的問(wèn)題。
通常的做法是采用對每位信號加同步器或增加握手信號來(lái)解決這一問(wèn)題,但這樣會(huì )增加系統的復雜度且影響傳輸速度。本文的做法是在兩個(gè)時(shí)鐘域的交界處設計一個(gè)異步FIFO,通過(guò)它來(lái)實(shí)現數據流的傳輸。由發(fā)送時(shí)鐘域將數據寫(xiě)入,接收時(shí)鐘域將數據取出,在數據傳輸的同時(shí)實(shí)現了數據的緩存,因此是一種較理想的方法。
不同時(shí)鐘域間數據傳遞的
問(wèn)題及其解決方法
不同時(shí)鐘域間數據傳遞的最重要問(wèn)題就是亞穩態(tài)問(wèn)題。當數據信號通過(guò)兩個(gè)時(shí)鐘域的交界處時(shí),將會(huì )分別由這兩個(gè)時(shí)鐘來(lái)控制信號的值。此時(shí)如果兩時(shí)鐘信號的敏感沿非常接近并超過(guò)了允許的額度,則將出現數據信號的不穩定,即電路陷入亞穩態(tài),也稱(chēng)為同步失敗。亞穩態(tài)是在兩時(shí)鐘敏感沿靠得很近、第二級時(shí)鐘敏感沿到來(lái)時(shí)其輸入數據不穩時(shí)發(fā)生,可將其視為僅僅是第二級觸發(fā)器輸入信號不穩定所導致的結果。只要使輸入信號穩定,就能解決亞穩態(tài)問(wèn)題。
針對如上所述亞穩態(tài)的特點(diǎn),可設計一個(gè)同步器來(lái)保證數據的穩定傳輸以解決這個(gè)問(wèn)題。其原理在于使信號在新的時(shí)鐘域中先穩定下來(lái)再進(jìn)入相關(guān)的邏輯,以保證信號與新的時(shí)鐘同步。本設計在時(shí)鐘域的接口處就采用此法。
異步FIFO模塊設計及實(shí)現
異步FIFO結構設計
本文所設計的異步FIFO采用循環(huán)隊列方式,由獨立的兩個(gè)時(shí)鐘Iclk和Oclk來(lái)控制讀、寫(xiě)指針。模塊結構如圖1所示。
輸入端口:輸入端時(shí)鐘Iclk,輸出端時(shí)鐘Oclk,8位并行輸入數據Din,復位信號Rst_。
輸出端口:8位并行輸出數據Dout,FIFO寫(xiě)滿(mǎn)信號Full,FIFO讀空信號Empty。
信號后綴:i—由輸入時(shí)鐘域控制、o—由輸出時(shí)鐘域控制、g—GRAY碼、b—二進(jìn)制自然碼。
由于FIFO的空、滿(mǎn)是通過(guò)比較讀、寫(xiě)指針來(lái)確定的,而讀、寫(xiě)指針?lè )謩e屬于Oclk和Iclk兩個(gè)時(shí)鐘域,所以對其比較時(shí)要進(jìn)行同步化處理,即用到雙觸發(fā)器型同步器,以避免亞穩態(tài)的出現。以寫(xiě)指針Wp為例。Wpib轉換為Wpig,一方面控制Din的寫(xiě)入地址,另一方面通過(guò)同步和GRAY到二進(jìn)制碼轉換送入到Oclk。本文將傳輸的Wp由GRAY碼形式轉換為二進(jìn)制形式,形成Wpob。此時(shí)Wpob與Rpob為同步信號,比較其大小后可判斷FIFO是否讀空來(lái)控制FlagE信號。若FIFO為空,則FlagE置Empty信號,同時(shí)調整Rpob停止讀出數據。同理可知Rp和Full的控制過(guò)程。
在整個(gè)數據流動(dòng)過(guò)程中,需要跨過(guò)時(shí)鐘域的指針經(jīng)歷了兩次碼制的變化:二進(jìn)制碼到GRAY碼和GRAY碼到二進(jìn)制碼。前者是利用GRAY碼在遞增時(shí)每次只有一位發(fā)生變化的特點(diǎn),以GRAY碼的形式通過(guò)時(shí)鐘域分界線(xiàn)最大限度減小了指針信號的變化,避免了信號傳輸中的抖動(dòng)。而再將信號由GRAY碼轉換為二進(jìn)制碼進(jìn)行比較則是由FIFO異步的特點(diǎn)所決定。由于讀、寫(xiě)指針異步,不存在穩定的相對關(guān)系,為避免讀、寫(xiě)指針同時(shí)對一個(gè)存儲單元進(jìn)行操作,在對FIFO做空、滿(mǎn)比較時(shí)會(huì )對指針差留下一定余量。由于GRAY碼形式不易于直接比較這種有固定差額的數值,所以將其轉化為二進(jìn)制碼進(jìn)行比較。
HDL實(shí)現
下面采用Verilog HDL語(yǔ)言在RTL級上設計此異步FIFO數據通道。此方案的核心在于GRAY碼到二進(jìn)制的轉換和同步器的設計,均在同步和GRAY到二進(jìn)制碼轉換模塊中實(shí)現,程序如下:
……
always@(posedge Oclk or negedge Rst_)// Oclk domain synchronization
if(!Rst_)
……//initialize Wpmg1,Wpmg2 and Wpob
else
begin
Wpmg1<= Wpig;
Wpmg2<= Wpig1;
Wpob[0]<= Wpmg2[5]^Wpmg2[4] ^Wpmg2[3] ^Wpmg2[2] ^Wpmg2[1] ^Wpmg2[0];//GRAY to binary
Wpob[1]<= Wpmg2[5]^Wpmg2[4] ^Wpmg2[3] ^Wpmg2[2] ^Wpmg2[1];
……
Wpob[0]<= Wpmg2[5];
end
……
如上程序所示,以寫(xiě)指針為例,輸入時(shí)鐘GRAY碼寫(xiě)指針Wpig進(jìn)入輸出時(shí)鐘域后賦給兩個(gè)串行寄存器Wpmg1、Wpmg2,此后將Wpmg2變換成二進(jìn)制碼并傳輸給下一級寄存器Wpob。這樣就完成跨時(shí)鐘域數據的同步化并實(shí)現了碼制的變換。
這樣,當讀、寫(xiě)信號被順利同步化以后,實(shí)際上其中通過(guò)時(shí)鐘域邊界的信號(仍以Wpob為例)已被同步器延遲了兩個(gè)Oclk周期,在這段時(shí)間內Wpib有可能已經(jīng)在Iclk作用下增加了。如果使用“Wpob=Rpob”為條件來(lái)判斷FIFO達到空狀態(tài),則此時(shí)實(shí)際控制讀FIFO主體的指針Wpig可能已繼續下行,導致讀出錯誤的數據。為避免這種情況的出現,進(jìn)行指針比較時(shí)是留有一定余地的,具體程序如下:
……
parameter DIFF=3’b 100;
……
assign FlagE=((Wpob<=Rpob +DIFF)&&(Wpob>=Rpob))?1:0;
……
如上程序所示,以空標志為例,比較的是保留了4位的“即空”狀態(tài),即讀指針離寫(xiě)指針還差4個(gè)周期時(shí),就認為其讀“空”,從而置讀空標志FlagE。對于一個(gè)FIFO而言,數據流在其中是連續流動(dòng)的,“即空”狀態(tài)的判斷是通過(guò)減小FIFO的最大容量來(lái)保證傳輸的穩定。
仿真驗證和綜合
設系統復位后Din輸入為從0開(kāi)始每Iclk周期加1至63的循環(huán)變化數據。如果仿真時(shí)鐘周期Iclk設為30ns、Oclk設為50ns,所得結果如圖2所示。
從圖2中可以看到,當輸入時(shí)鐘頻率大于輸出時(shí)鐘頻率時(shí)會(huì )出現數據寫(xiě)滿(mǎn)的情況。因為此時(shí)寫(xiě)時(shí)鐘是快時(shí)鐘,故寫(xiě)滿(mǎn)比較發(fā)生在輸入時(shí)鐘域。當比較到兩指針差等于定義的DIFF值(此時(shí)為4)時(shí),由Iclk觸發(fā)寫(xiě)滿(mǎn)信號給前級系統。同理可得空狀態(tài)的仿真也能達到設計要求。
對于邏輯綜合,本文使用Synopsys公司的Design Compiler工具實(shí)現ASIC綜合。通過(guò)生成的Violators.rpt、area.rpt、tim_max.rpt、lib.rpt等報告觀(guān)察綜合所得電路的特性,可知此設計無(wú)violated constraints,表明綜合結果能夠達到約束條件的要求,此設計能在給定條件下工作,即約束成功。
結語(yǔ)
本文討論了異步設計中數據在不同時(shí)鐘域間傳遞所產(chǎn)生的亞穩態(tài)問(wèn)題及其解決方法,使用Verilog HDL,采用Top-Down的模塊設計方法實(shí)現了一種解決此問(wèn)題的異步FIFO方案。經(jīng)驗證這種方案能方便安全地實(shí)現數據跨時(shí)鐘域的傳遞,并能同時(shí)起到數據緩存的作用,因此是一種較好的解決方法?!?/P>
參考文獻
1 A.Chakraborty, M.R.Greenstreet A minimal source-synchronous interface, ASIC/SOC Conference, 2002. 15th Annual IEEE International , 25-28 Sept. 2002 Page(s): 443 -447
2 William J. Dally,John W. Poulton Digital Systems Engineering,
CambridgeUniversity Press, 1998, Page(s): 468.
3 Clifford E. Cummings Synthesis and Scripting Techniques for Designing Multi-Asynchronous Clock Designs, Sunburst Design, Inc.
評論