多時(shí)鐘域數據傳遞的Spartan-II FPGA實(shí)現
1 時(shí)鐘域轉換中亞穩態(tài)的產(chǎn)生
本文引用地址:http://dyxdggzs.com/article/191027.htm觸發(fā)器是數字電路設計中的一個(gè)重要元件,而觸發(fā)器工作過(guò)程中存在數據建立與保持時(shí)間的約束,如果這種約束得不到滿(mǎn)足,觸發(fā)器就會(huì )進(jìn)入某個(gè)不確定狀態(tài)——亞穩態(tài)。亞穩態(tài)的存在可能導致連鎖反應,以致引起整個(gè)系統功能混亂。在單時(shí)鐘域電路設計中由于不存在時(shí)鐘之間的延遲和錯位,所以建立條件和保持條件的時(shí)間約束容易滿(mǎn)足。而在多時(shí)鐘域里由于各個(gè)模塊的非同步性,則必須考慮亞穩態(tài)的發(fā)生,如圖1所示。
2 多時(shí)鐘域數據傳遞方案
多時(shí)鐘域傳遞的信號有兩種,其一為控制信號,其二為數據流信號。針對這兩種不同的信號,分別采取不同方案遏制系統墮入亞穩態(tài)。對控制信號采用同步器裝置,即在2個(gè)不同的時(shí)鐘域之間插入同步器;而對于不同獨立時(shí)鐘域之間的數據流傳遞,為了避免異步時(shí)鐘域產(chǎn)生錯誤的采樣電平,采用FIFO存儲器作為其轉換接口,在輸入端口使用寫(xiě)時(shí)鐘寫(xiě)數據,在輸出端口使用讀時(shí)鐘讀數據,這樣就完成了異步時(shí)鐘域之間的數據交換。
芯片的總體邏輯框圖如圖2所示,圖中輸入輸出信號定義如表1所示。
從邏輯結構上將芯片劃分為3塊:寫(xiě)時(shí)鐘域I/OBUFFER、讀時(shí)鐘域I/O BUFFER及FIFO存儲器。I/O BUFFER的主要作用是對外部信號進(jìn)行預處理,消除外部信號的毛刺,保證信號可靠并使外部的信號與時(shí)鐘信號同步,消除不穩定的因素。根據信號的數目,BUFFER由相應數目的多個(gè)D觸發(fā)器構成。
FIFO存儲器結構框圖如圖3所示,他由雙端口存儲器(Dual Port RAM)、寫(xiě)控制單元(Writc Control)和讀控制單元(Read Control)構成。其中DUAL PORT RAM是由ISE6.0的一個(gè)編輯軟件CORE GENERATER自動(dòng)生成,使用者只需設定RAM的端口數、內存大小和瀆寫(xiě)控制便可以生成一個(gè)適合程序的子模塊。由于讀寫(xiě)時(shí)鐘屬于不同的時(shí)鐘域,滿(mǎn)幀信號Frame從寫(xiě)控制單元向讀控制單元傳遞時(shí)必須采取同步器(Synchronizer)同步。
2.1 寫(xiě)控制單元設計
寫(xiě)控制單元主要的功能是根據寫(xiě)數據有效信號wdataen判斷輸入數據是否正確,在檢測到寫(xiě)入數據幀的開(kāi)始標志位wsof后開(kāi)始計數控制寫(xiě)指針waddr的移動(dòng),將正確的數據寫(xiě)入DUAL PORT RAM中,并在一幀數據寫(xiě)滿(mǎn)后向讀控制單元發(fā)出寫(xiě)數據滿(mǎn)幀信號wframe。為防止亞穩態(tài)的出現,設計中采取了兩個(gè)措施:一是采用鎖存器將幀頭信號wsof拉長(cháng),確保其被穩定的采集;二是采用Gray編碼計數器替代普通二進(jìn)制編碼計數器來(lái)控制寫(xiě)指針waddr的移動(dòng),因為Gray碼相鄰兩個(gè)編碼之間有且只有1位發(fā)生變化從而抑制了競爭冒險的出現。
2.2 同步器設計
寫(xiě)控制單元發(fā)出的寫(xiě)數據滿(mǎn)幀信號wframe屬于控制信號,他從寫(xiě)時(shí)域進(jìn)入讀時(shí)域必須采用同步器實(shí)現信號同步,將寫(xiě)時(shí)域的滿(mǎn)幀信號wframe變換為讀時(shí)域的滿(mǎn)幀信號rframe。由于信號是從高時(shí)鐘域(66 MHz)流向低時(shí)鐘域(40 MHz),因此采用如圖4所示的同步器。
同步器時(shí)序圖如圖5所示,可見(jiàn)在寫(xiě)時(shí)域的滿(mǎn)幀信號wframe經(jīng)過(guò)3個(gè)clka周期延后跨越到讀時(shí)鐘域。
2.3 讀控制單元設計
數據從寫(xiě)時(shí)域傳遞到讀時(shí)域,時(shí)鐘發(fā)生了變化,而且讀控制單元的行為受到寫(xiě)控制單元及Dual Port RAM中數據的存儲情況的雙重制約,因此他的設計是整個(gè)芯片設計成功的關(guān)鍵。
由于當Dual Port RAM中寫(xiě)入一幀完整的正確數據后才能輸出,所以讀控制首先必須判斷Dual Port RAM一幀是否寫(xiě)滿(mǎn)。榆測到滿(mǎn)幀信號rframe后,在等待輸出數據幀頭信號rfp到來(lái)后控制讀指針waddr移動(dòng)讀出數據,并置位rvalid表征輸出數據的可靠性。
部分程序沒(méi)計如下:
3 多時(shí)鐘域數據傳遞的FPGA實(shí)現
設計方案完成后選用Xilinx Spartan-II FPGA實(shí)現電路,并在Xilinx ISE6.0集成環(huán)境下用Modelsim5.7進(jìn)行了電路仿真。
圖6為寫(xiě)使能信號dataen恒為有效值“1”的仿真結果截圖。
可見(jiàn),在寫(xiě)使能信號dataen恒為有效值“1”的情況下,在寫(xiě)時(shí)鐘clka控制下當寫(xiě)數據幀頭信號sof有效時(shí),寫(xiě)控制器開(kāi)始寫(xiě)入數據,接收到連續8個(gè)數據后,寫(xiě)控制器發(fā)出一個(gè)幀滿(mǎn)信號wframe。wframe信號經(jīng)過(guò)異步轉換后轉換成clkb時(shí)鐘域的信號。在讀控制器的控制下,當clkb時(shí)鐘處于上升沿,并且檢測到讀出數據幀頭fp時(shí),開(kāi)始從outdata向外發(fā)送數據,并將valid置為有效。
圖7為當寫(xiě)使能信號dataen變化時(shí)的仿真結果截圖。
可見(jiàn),將dataen置低后,系統不再接受寫(xiě)入數據,所以也不再輸出數據,valid被置為低電平,輸出數據無(wú)效。寫(xiě)控制的使能端控制達到要求。
4 結 語(yǔ)
針對異步并行通信接口芯片設計中涉及的多時(shí)鐘域的數據傳遞問(wèn)題,本文采用FIFO存儲器來(lái)完成不同時(shí)鐘域之間數據流傳遞、同步器來(lái)完成控制信號傳遞的方案。仿真驗證結果表明,數據傳遞準確、穩定、可靠,沒(méi)有出現競爭冒險和亞穩態(tài),完全達到了設計要求。
評論