FPGA內部資源介紹
目錄
- 邏輯資源塊
- LUT(查找表)
- 加法器
- 寄存器
- MUX(復用器)
- 時鐘網絡資源
- 全局時鐘網絡資源
- 區域時鐘網絡資源
- IO時鐘網絡資源
- 時鐘處理單元
- BLOCK RAM
- DSP
- 布線資源
- 接口資源
- 用戶IO資源
- 專用高速接口資源
- 總結
1. 邏輯資源塊
邏輯資源塊是FPGA中最重要的資源,它在FPGA芯片中占的比重最大。Xilinx公司稱它為CLB(Configurable Logic Block),而Altera公司稱它為ALM(Adaptive Logic Module)。Xilinx把一個CLB劃分為若干個slice,每個slice中一般又包含若干個LUT、寄存器、異或門和復用器等;Altera把一個ALM劃分為若干個ALUT和寄存器等,而每個ALUT中一般又可包含若干個LUT、全加器和復用器等。雖然邏輯資源塊在不同的器件中叫法不一樣(當然結構上也會有略微的差別),但它們的本質是類似的。在FPGA芯片中,邏輯資源塊是均勻分布的,不過在列的方向上,它們的排列一般更加緊密些,這估計是為了減少加法進位鏈的延遲和實現高性能的寄存器鏈。
2. LUT(查找表)
**LUT(查找表)**是FPGA芯片與其他可編程邏輯芯片之間最大的區別。LUT可以有多個輸入引腳,但只能有一個輸出引腳。我們可以用ROM的概念來理解LUT,即一個N輸入的查找表,它的行為相當于一個地址總線為N位,單位存儲量為1 bit,總存儲量為2N bit的單口ROM。例如,對于一個2輸入的查找表,如果按照“邏輯與”的真值表去配置其內部ROM的存儲內容,那么它的行為就相當于一個與門;如果按照“邏輯或”的真值表去配置其內部ROM的存儲內容,那么它的行為就相當于一個或門。通過恰當的連接,LUT可以實現任意的組合邏輯功能。目前,FPGA中的基本LUT一般都是4輸入、6輸入甚至更多輸入引腳的,它們所能實現的邏輯功能更加復雜、靈活和多變。
3. 加法器
加法是所有二進制運算的基礎,因此它在FPGA中的地位非常重要。二進制加法中最重要的功能元素是異或操作,因此,為了實現高性能的加法,Xilinx采用了專門的異或門,而Altera引入了專門的全加器。雖然LUT也可以模擬異或門的功能,但其延遲相比專有的異或門來說還是太大,尤其是兩個多位數據相加時,由于級聯效應,會導致處理變慢。因此,在FPGA的邏輯資源塊中,都留有專門的異或門外加專門的進位鏈布線資源,再配合相關資源實現全加器。不過,LUT可以配合異或門實現超前進位加法器,進一步提高加法器的性能。
4. 寄存器
FPGA中有豐富的寄存器資源,這也是它區別于CPLD的地方。寄存器是時序邏輯的基礎,由于它對電路狀態的保持和記憶特性,才使得數字電路具有千變萬化的功能。FPGA中的寄存器一般可以被配置為D類型的觸發器或者鎖存器。配置為D類型的觸發器時,根據生產廠商以及型號的不同,可能會有一些其他的功能管腳,例如異步復位、同步復位、時鐘使能、同步置位等。FPGA中寄存器的輸出一般都會連到附近一個寄存器的輸入MUX中,通過配置該MUX,可以將多個寄存器串聯起來形成寄存器鏈,實現移位寄存器電路。
5. MUX(復用器)
MUX即復用器,也叫多路選擇器。FPGA的邏輯資源塊中有很多MUX,根據用法可以分為兩類:
- 配置MUX:它的選通是在配置FPGA的時候確定的,因此它決定了所處邏輯資源塊的功能。
- 邏輯MUX:它的選通是由此時的內部邏輯決定的,因此它是內部邏輯的一部分。
配置MUX在FPGA中的作用更大一些,通過改變配置MUX的選通情況,可以讓邏輯資源塊實現多種多樣的功能。例如,通過改變配置MUX的選通情況,我們可以只使用邏輯資源塊中的組合邏輯部分,也可以只使用其中的寄存器,甚至可以同時使用這兩部分,但它們卻分別隸屬于不同的功能模塊。
6. 時鐘網絡資源
6.1 全局時鐘網絡資源
全局時鐘網絡資源的作用范圍覆蓋整個FPGA芯片,它能保證其上所承載的時鐘信號到達FPGA芯片上任意兩個地方的延遲時間偏差最小,從而保證大型的FPGA設計能夠被高速的時鐘信號正確驅動。一般來說,全局時鐘網絡資源是比較珍貴的,一些小型的FPGA中可能僅有幾個全局時鐘網絡,因此在使用的時候一定要節省。
6.2 區域時鐘網絡資源
隨著FPGA芯片的集成度越來越高,規模大一點的FPGA又被劃分為多個區域(一般來說,一個FPGA區域只包含一個IO bank)。與全局時鐘網絡不同,每一個FPGA區域都有若干個屬于自己的區域時鐘網絡,它所能覆蓋的范圍是整個區域甚至還包括與本區域相鄰的區域。區域時鐘網絡能保證其上所承載的時鐘信號到達FPGA芯片上該時鐘網絡作用域中任意兩個地方的時間偏差最小。這種區域時鐘網絡資源對于源同步的接口邏輯十分有效。
6.3 IO時鐘網絡資源
前面所述的兩種時鐘網絡資源主要針對的都是FPGA內部的一些資源,例如邏輯資源塊、BLOCK RAM、DSP等。而對于接口資源,則有專門的IO時鐘網絡資源來完成時鐘信號承載工作。主要原因有三點:
- 接口資源中的寄存器數量較少,不需要大型的樹狀時鐘網絡來減少時鐘到達各個目的地之間的延遲時間差。
- 內部的時鐘網絡資源由于作用范圍廣,網絡較龐大,一般上面不能承載頻率太高的時鐘信號,而一些通信接口的時鐘速率很高,遠遠超出了全局或區域時鐘網絡的承受范圍,因此需要使用專有的IO時鐘網絡資源。
- 高速的接口邏輯一般都使用專有的接口資源,其布局布線已經固定,能夠保證外部信號到達寄存器的延遲最短。為了配合高速信號傳輸,時鐘信號所走的路徑也必須最短。而全局或區域時鐘網絡的特點是保證時鐘到達各個地方的延遲差最小,而不是延遲最短,因此并不適用高速接口的情況,這種情況下只能使用專有的IO時鐘網絡資源。
7. 時鐘處理單元
在實際使用中,經常會碰到外部送給我們的時鐘信號在頻率或者相位上并不滿足直接使用的要求,而內部時序邏輯又只能對時鐘信號進行整數倍的分頻,并且不能保證產生新時鐘信號的相位穩定性。因此,這個時候就需要用到時鐘處理單元。時鐘處理單元可以對時鐘信號進行高精度的倍頻、分頻和相位調整,對時序邏輯的設計非常重要。FPGA中的時鐘處理單元主要有兩種:PLL(Phase-Locked Loop)和DCM(Digital Clock Manager)。
8. BLOCK RAM
FPGA生產廠商相繼為自己的FPGA芯片中引入了硬件的存儲核,我們稱之為BLOCK RAM。由于BLOCK RAM不同于寄存器的硬件結構,使得實現同樣的存儲容量所消耗的資源要遠比寄存器少得多。當然,同一時刻一般只能操作BLOCK RAM中一個地址的數據,而如果是用寄存器實現緩存,我們完全可以在同一時刻操作所有的寄存器。與邏輯資源塊一樣,BLOCK RAM資源也均勻分布于整個FPGA芯片中,當然在列的方向它們的排列也緊密一些,估計是為了便于拼湊起來形成更大的緩存。BLOCK RAM本身就是一個先天的查找表,對于一些普通LUT難以應付的大容量表格情況,使用BLOCK RAM可以很好地解決。
9. DSP
**DSP(Digital Signal Processing)**硬核中的核心資源是一個高性能的硬件乘法器,外加一些累加器和寄存器、復用器等資源。DSP硬核通過將這些高性能的資源緊密地結合在一起,從而讓FPGA芯片具有強大的數字信號處理運算的能力。
10. 布線資源
FPGA中的布局布線資源主要包括三部分:CB(Crossbar)、SB(Switchbox)和行列連線。布線資源的目的是為了能夠讓位于不同位置的邏輯資源塊、時鐘處理單元、BLOCK RAM、DSP和接口模塊等資源能夠相互通信,從而協調合作,完成所需功能。FPGA中的布線資源,就好比繪制PCB板時的連線資源一樣。雖然器件A和器件B的位置和連接關系沒有任何改變,但很可能因為周邊電路的布局、布線的一些變化,使得前后兩次A、B之間的連線形態發生很大的變化。因此,與采用固定長度的金屬線將所有宏單元連接在一起的CPLD不同,FPGA中任意兩點之間的線延遲是無法預測的,必須等到布局、布線完成之后才能確定。這也是為什么在FPGA的開發中,時序約束和時序分析這兩樣工作是必不可少的。
11. 接口資源
11.1 用戶IO資源
接口資源是FPGA芯片的門戶,它決定了FPGA芯片與外界交互的能力,因此接口資源是FPGA必須具備的一種資源。按照功能來劃分,FPGA的外圍接口有負責供電的、接地的、芯片配置的、用戶IO的等。其中最重要的是負責用戶IO的接口資源,按其承載信號的類型又可以細分為用戶時鐘管腳(一般僅指輸入)和用戶數據IO。一般來說,用戶時鐘管腳兼具用戶數據IO的功能,但絕大多數數據IO不能兼具用戶時鐘管腳的特性。區分用戶時鐘IO和數據IO的關鍵,就是看其是否有直接連接到時鐘網絡資源的通路。如果有直接連接到全局時鐘網絡資源的通路,那么這是一個全局時鐘管腳;如果有直接連接到區域時鐘網絡資源的通路,那么這是一個區域時鐘管腳;如果有直接連接到IO時鐘網絡資源的通路,那么這是一個IO時鐘管腳。當然,作為FPGA芯片制作廠商,它會提供詳細的管腳屬性資料供大家區分這些管腳,以便用戶正確、恰當地使用。
針對用戶IO資源,Xilinx公司的IOB(Input Output Block)以及Altera公司的IOE(Input Output Element)是其中的代表。用戶IO資源最基本的功能就是必須支持單端或差分的輸入、輸出、雙向以及三態模式,因此用戶IO的基本原理圖如圖3-20所示,其中,PAD代表FPGA芯片的金屬管腳。此外,當傳輸速度較高時,從用戶IO資源到內部邏輯資源塊之間的延遲就會顯得不可忽略,因此,為了配合較高速度的接口傳輸,用戶IO資源中必須集成一些專有的寄存器和精確的延遲調整功能,來完成較高速度的SOR(Serial-to-Parallel)或者DOR(Parallel-to-Serial)的輸入、輸出功能。例如,集成了相關功能模塊的用戶IO資源如圖3-21所示。為了進一步提升接口傳輸的性能,增加用戶使用的便利性,各大FPGA廠商又在用戶IO資源中集成了名為SERDES(Serializer/Deserializer)的串并轉換器,其中用于輸入的叫做ISERDES,用于輸出的叫OSERDES。相比于SDR、DDR的模式,SERDES能夠做到1:6甚至更高的串并轉換比率。圖3-22所示就是SERDES的工作原理,大家可以參考理解。
最后,用戶IO資源還必須支持LVTTL、LVCMOS、LVDS等多種數字電平,有的用戶IO資源甚至內部嵌入了用于高頻匹配的電阻,這樣在電路板布線時,可以省去一些板載的匹配電阻。關于更高速接口的解決辦法請參考下一小節。
11.2 專用高速接口資源
為了適應目前越來越高的串行通信速率要求,各大FPGA廠商也早已開始在自己的FPGA產品中嵌入專門的硬件資源用于超高速的串行通信。例如,Xilinx公司的Rocket IO資源和Altera公司的Transceiver資源。目前來說,這兩種專有的硬件資源都已經能夠支持最高達28 Gb/s的串行通信速率。
總結
本文詳細介紹了FPGA內部的各種資源及其功能。邏輯資源塊(CLB/ALM)是FPGA的核心資源,通過LUT、寄存器、加法器和MUX等基本元素實現復雜的邏輯功能。時鐘網絡資源(全局、區域和IO時鐘網絡)以及時鐘處理單元(PLL和DCM)為FPGA提供了靈活的時鐘管理能力。BLOCK RAM和DSP硬核分別用于存儲和高性能數字信號處理。布線資源(CB、SB和行列連線)則確保了不同資源之間的通信。接口資源(用戶IO資源和專用高速接口資源)則為FPGA與外部世界的交互提供了支持。這些資源共同構成了FPGA的強大功能基礎,使其能夠適應各種復雜的數字邏輯設計需求。