|
例說FPGA連載11:心臟跳動——時鐘電路 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1c0nf6Qc
人體擁有非常奇妙的循環系統,而心臟是這個循環系統的發動機,它向全身各部位供應血液。如圖2.5所示,心臟有四個空腔,上面兩個叫心房(atrium),下面兩個叫心室(ventric1e)。右心房收納全身的靜脈血,通過右心室從肺動脈泵出,此時肺動脈中流的是靜脈血,通過肺中的氣體交換,變成含氧豐富的動脈血,由肺靜脈送至左心房,再通過左心室的主動脈泵向全身各個組織器官以滿足其正常生理活動的需要。這便是人體無時不刻不在進行著的心跳過程。
圖2.5 心臟示意圖 了解了心臟之于人體內部循環系統的作用,反觀時鐘信號之于FPGA器件,其實也有著異曲同工之妙。伴隨著每一次的心跳過程,都有血液的運轉和流動;同樣的,伴隨著每一個時鐘脈沖的產生,也都有數字信號的輸入和輸出。對于在FPGA器件內實現的任何時序邏輯應用,失去了時鐘信號便意味著信號的傳輸將處于停滯狀態。時鐘信號的重要性可見一斑。 如圖2.6所示,理想的時鐘模型是一個占空比為50%且周期固定的方波。file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC306.tmp.png為一個時鐘周期,file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC316.tmp.png為高脈沖寬度,file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC317.tmp.png為低脈沖寬度,file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC328.tmp.png=file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC338.tmp.png+file:///C:\Users\pc\AppData\Local\Temp\ksohtml\wpsC349.tmp.png。一般情況下,FPGA器件內部的邏輯會在每個時鐘周期的上升沿執行一次數據的輸入和輸出處理,而在兩個時鐘上升沿的空閑時間里,則可以用于執行各種各樣復雜的處理。而一個比較耗時的復雜運算過程,往往無法一個時鐘周期完成,便可以切割成幾個耗時較小的運算,然后在數個時鐘上升沿后輸出最終的運算結果。時鐘信號的引入,不僅讓所有的數字運算過程變成“可量化”的,而且也能夠將各種不相關的操作過程同步到一個節拍上協同工作。
圖2.6 理想時鐘波形 FPGA器件的時鐘信號源一般來自外部,我們通常使用晶體振蕩器(簡稱晶振)產生時鐘信號。當然了,一些規模較大的FPGA器件內部都會有可以對時鐘信號進行倍頻或分頻的專用時鐘管理模塊,如PLL或DLL。由于FPGA器件內部使用的時鐘信號往往不只是供給單個寄存器使用,因為在實際應用中,成百上千甚至更多的寄存器很可能共用一個時鐘源,那么從時鐘源到不同寄存器間的延時也可能存在較大偏差(我們通常稱為時鐘網絡延時),而我們知道,這個時間差過大是很要命的。因此,FPGA器件內部設計了一些稱之為“全局時鐘網絡”的走線池。通過這種專用時鐘網絡走線,同一時鐘到達不同寄存器的時間差可以被控制到很小的范圍內。而我們又如何能保證輸入的時鐘信號能夠走“全局時鐘網絡”呢?有多種方式,對于外部輸入的時鐘信號,只要將晶振產生的時鐘信號連接到“全局時鐘專用引腳”上;而對于FPGA內部的高扇出控制信號,通常工具軟件會自動識別此類信號,將其默認連接到“全局時鐘網絡”上,而設計者若是不放心,也可通過編譯報告進行查看,甚至可以手動添加這類信號。關于時鐘電路的設計和選型,有如下幾個基本事項需要考慮: ● 系統運行的時鐘頻率是多少?(可能有多個時鐘) ● 是否有內部的時鐘管理單元可用(通常是有)?它的輸入頻率范圍(需要查看器件手冊進行確認)? ● 盡可能選擇專用的時鐘輸入引腳。 ● 時鐘走線盡可能短,有條件最好做包地處理,確保外部輸入時鐘信號干凈、穩定。 |