選單

世界第一顆FPGA晶片級拆解:詳述工作原理

現場可程式設計門陣列(FPGA)可以實現任意數字邏輯,從微處理器到影片生成器或加密礦機,一應俱全。FPGA由許多邏輯模組組成,每個邏輯模組通常由觸發器和邏輯功能以及連線邏輯模組的路由網路組成。FPGA的特殊之處在於它是可程式設計的硬體:您可以重新定義每個邏輯塊及其之間的連線,用來構建複雜的數位電路,而無需物理上連線各個門和觸發器,也不必花費設計專用積體電路的費用。

世界第一顆FPGA晶片級拆解:詳述工作原理

內部裸片顯微照片

FPGA是由Ross Freeman發明的,他在1984年共同創立了Xilinx,並推出了第一款FPGA——XC2064。這種FPGA比現代FPGA簡單得多,它只包含64個邏輯塊,而現代FPGA中的邏輯塊有幾千個或數百萬個,但它導致了目前價值數十億美元的FPGA產業。由於其重要性,XC2064被列入晶片名人堂。在這篇博文中,我們對Xilinx的XC2064進行了逆向工程,解釋了它的內部電路(上圖)以及 “位元流 ”是如何對它進行程式設計的。

世界第一顆FPGA晶片級拆解:詳述工作原理

Xilinx XC2064是第一款FPGA晶片

如今,FPGA是採用Verilog或VHDL之類的硬體描述語言程式設計的,但是當時Xilinx提供了他們自己的開發軟體XACT,執行再MS-DOS作業系統之下,價格高達12,000美元。XACT自然無法與現在的FPGA開發工具相比,XACT透過使用者定義了每個邏輯塊的功能(如下面的屏截圖所示)以及邏輯塊之間的連線,對連線進行佈線連線,並生成可載入到FPGA中的位元流檔案。

世界第一顆FPGA晶片級拆解:詳述工作原理

XACT的螢幕截圖。兩個查詢表F和G在螢幕底部實現邏輯運算,上面部分顯示該邏輯的卡諾圖。

透過位流(具有專有格式的位序列)配置FPGA。如果您檢視XC2064的位元流(如下所示),那是令人費解的混合模式,這些模式不規則地重複,並散佈在位元流中。XACT中的功能定義與位流中的資料之間沒有明確的聯絡。但是,研究FPGA的物理電路可以揭示位元流資料的結構,並且可以理解。

透過位流(具有專有格式的位序列)配置FPGA。如果您檢視XC2064的位元流(如下所示),那是令人費解的混合模式,這些模式不規則地重複,並散佈在位元流中。XACT中的函式定義與位流中的資料之間沒有明確的聯絡。但是,研究FPGA的物理電路可以揭示位元流資料的結構,並且可以理解。

世界第一顆FPGA晶片級拆解:詳述工作原理

1

FPGA如何工作?

下圖來自原始 FPGA 專利,顯示了 FPGA 的基本結構。在此簡化的 FPGA 中,有 9 個邏輯塊(藍色)和 12 個 I/O 引腳。互連網路將元件連線在一起。透過設定互連上的開關(對角線),邏輯塊相互連線並連線到 I/O 引腳。每個邏輯元素都可以使用所需的邏輯功能進行程式設計。其結果是一個高度可程式設計的晶片,可以實現任何適合可用的電路。

世界第一顆FPGA晶片級拆解:詳述工作原理

FPGA專利顯示透過互連連線的邏輯塊(LE)

2

CLB:可配置邏輯塊

雖然上圖顯示了九個可配置邏輯塊(CLB),但 XC2064 有 64 個 CLB。下圖顯示了每個 CLB 的結構。每個 CLB 有四個輸入(A、B、C、D)和兩個輸出(X 和 Y)。兩者之間是組合邏輯,可以使用任何所需的邏輯功能進行程式設計。CLB 還包含一個觸發器,允許 FPGA 實現計數器、移位暫存器、狀態機和其他有狀態電路。梯形是多路複用器,可以程式設計透過其任何輸入。多路複用器允許為特定任務配置 CLB,為觸發器控制元件和輸出選擇所需的訊號。

世界第一顆FPGA晶片級拆解:詳述工作原理

XC2064 中的可配置邏輯塊

您可能想知道組合邏輯如何實現任意邏輯功能。它會採用與門、或門、異或門等邏輯嗎?不,它使用一種稱為查詢表(LUT)的巧妙技巧,實際上它包含的是邏輯功能的真值表。例如,三個變數的功能由其真值表中的 8 行定義。LUT 由 8 位記憶體以及多路複用電路組成,以選擇正確的值。透過將值儲存在這 8 位記憶體中,可以實現任何 3 輸入邏輯功能。

3

互連

FPGA的第二個關鍵部分是互連,可以對其進行程式設計以不同方式連線CLB。互連相當複雜,但是粗略的描述是每個CLB之間有幾個水平和垂直線段。CLB互連點允許在水平線和垂直線之間建立連線,從而可以建立任意路徑。更復雜的連線透過“交換矩陣”(switchmatrices)完成。每個開關矩陣都有8個引腳,可以(幾乎)任意方式將它們連線在一起。下圖顯示了XC2064的互連結構,提供了到邏輯塊(青色)和I / O引腳(黃色)的連線。該圖顯示了路由功能的特寫。綠色框是8針開關矩陣,而小方塊是可程式設計的互連點。

世界第一顆FPGA晶片級拆解:詳述工作原理

XC2064 FPGA具有一個8 x 8的CLB網格

每個CLB都有從AA到HH的字母名稱。互連可以將例如塊DC的輸出連線到塊DE的輸入,如下所示。紅線表示路由路徑,紅色小方塊表示已啟用的路由點。離開模組DC後,訊號由第一個路由點定向到8針開關(綠色),該訊號將其引導到另外兩個路由點和另一個8針開關。(未顯示未使用的垂直和水平路徑。)請注意,佈線相當複雜;即使是這條短路徑,也使用了四個路由點和兩個開關。

世界第一顆FPGA晶片級拆解:詳述工作原理

從塊DC的輸出路由到塊DE的訊號示例

下面的螢幕截圖顯示了 XACT 程式中的路由外觀。黃線指示邏輯塊之間的路由。隨著訊號的加入,挑戰在於如何有效地路由而不使路徑發生衝突。XACT 軟體包執行自動路由,但也可以手動編輯路由。

世界第一顆FPGA晶片級拆解:詳述工作原理

XACT 程式的螢幕截圖。此 MS-DOS 程式透過鍵盤和滑鼠進行控制。

4

Implementation

本文的其餘部分討論了XC2064的內部電路,從裸片照片中的反向工程。

下圖顯示了XC2064晶片的佈局。FPGA的主要部分是8×8的網格。每個圖塊包含一個邏輯塊和相鄰的路由電路。儘管圖片顯示將邏輯塊(CLB)顯示為與圍繞它們的路由不同的實體,但這並不是 FPGA的實現方式。取而代之的是,每個邏輯塊和相鄰路由都實現為單個實體,即圖塊。(具體來說,圖塊包括每個CLB上方和左側的路由。)

世界第一顆FPGA晶片級拆解:詳述工作原理

XC2064晶片的佈局

I/O模組圍繞積體電路的邊緣提供與外界的通訊。它們連線到小的綠色方形焊盤,該焊盤連線到晶片的外部引腳。裸片被緩衝區(綠色)劃分:兩個垂直和兩個水平。這些緩衝器可放大在電路中傳播很長距離的訊號,從而減少延遲。垂直移位暫存器(粉紅色)和水平列選擇電路(藍色)用於將位元流載入到晶片中,如下所述。

5

Tile的內部結構

下圖顯示了XC2064中單個Tile的佈局;如上圖所示,該晶片包含64個這樣的Tile擠在一起。每個Tile約有40%的面積被儲存配置位的記憶體單元(綠色)所佔據。頂部三分之一處透過兩個交換矩陣和許多單獨的路由交換處理互連路由,下面是邏輯塊。邏輯塊的關鍵部分是輸入的多路複用器、觸發器和查詢表(LUT)。每個塊透過垂直和水平佈線連線到相鄰的塊,以實現互連,電源和接地。配置資料位被水平地饋送到儲存單元,而垂直訊號選擇要載入的儲存單元的特定列。

世界第一顆FPGA晶片級拆解:詳述工作原理

5

電晶體

FPGA由CMOS邏輯實現,該邏輯由NMOS和PMOS電晶體構建。電晶體在FPGA中具有兩個主要作用。首先,可以將它們組合以形成邏輯閘。其次,電晶體被用作訊號透過的開關,例如以控制路由。在此作用下,該電晶體稱為傳輸電晶體。

世界第一顆FPGA晶片級拆解:詳述工作原理

MOSFET的結構

下面的裸片照片特寫顯示了在顯微鏡下電晶體的外觀。多晶矽柵極是兩個摻雜矽區域之間的蛇形線。

世界第一顆FPGA晶片級拆解:詳述工作原理

FPGA中的MOSFET

6

位元流和配置儲存

XC2064 中的配置資訊儲存在配置記憶體單元中。FPGA 的記憶體不是使用 RAM 塊進行儲存,而是分佈在 160×71 網格中的晶片上,確保每個位都位於它控制電路旁邊。下圖顯示了配置位元流如何載入到 FPGA 中。位元流被送入從晶片中心(粉紅色)向下執行的移位暫存器中。將 71 位載入到移位暫存器中後,列選擇電路(藍色)將選擇特定的記憶體列,並並行載入到此列中。然後,將接下來的 71 位載入到移位暫存器中,左側的下一列將成為所選列。此過程將重複 FPGA 的所有 160 列,將整個位元流載入到晶片中。使用移位暫存器可避免大量記憶體定址電路。

世界第一顆FPGA晶片級拆解:詳述工作原理

位元流如何載入到 FPGA 中

重要的是,位元流的分佈與檔案中的分佈完全相同:位元流檔案中的位元佈局與晶片上的物理佈局匹配。如下所示,每個位都儲存在FPGA控制電路的旁邊。因此,位元流檔案格式直接由硬體電路的佈局確定。例如,當由於緩衝電路而在FPGA切片之間存在間隙時,相同的間隙會出現在位流中。位元流的內容不是圍繞欄位,資料表或配置塊之類的軟體概念來設計的。瞭解位元流取決於從硬體角度而非軟體角度進行思考。如下所示實現配置儲存器的每一位。每個儲存單元均包含兩個以環路連線的反相器。該電路具有兩個穩定狀態,因此可以儲存一個位:頂部反相器為1,底部反相器為0,反之亦然。為了寫入該單元,左側的傳輸電晶體被啟用,使資料訊號透過。資料線上的訊號只會使逆變器過載,從而寫入所需的位。(您也可以使用相同的路徑從FPGA中讀取配置資料。)Q和反相Q輸出控制FPGA中所需的功能,例如關閉路由連線,為查詢表提供位,或控制鎖存器電路。(在大多數情況下,僅使用Q輸出。)

世界第一顆FPGA晶片級拆解:詳述工作原理

從資料表中顯示一個位配置記憶體的示意圖。Q 是輸出,Q 是倒置輸出。

下圖顯示了儲存單元的物理佈局。左圖顯示了八個儲存單元,其中一個單元高亮顯示。每條水平資料線饋入該行中的所有儲存單元。每列選擇行選擇該列中的所有儲存單元以進行寫入。中間照片放大了一個儲存單元的矽和多晶矽電晶體。

世界第一顆FPGA晶片級拆解:詳述工作原理

7

查詢表多路複用器

如前所述,FPGA透過使用查詢表來實現任意邏輯功能。下圖顯示瞭如何在XC2064中實現查詢表。左側的八個值儲存在八個儲存單元中。四個多路複用器根據A 輸入值選擇每對值中的一個 。如果 A 為0,則選擇最高值;如果 A 為1,則選擇最低值。接下來,較大的多路複用器根據B 和 選擇四個值之一 C。在這種情況下,結果是所需的值 A XOR B XOR C。透過在查詢表中放置不同的值,可以根據需要更改邏輯功能。

世界第一顆FPGA晶片級拆解:詳述工作原理

使用查詢表實現 XOR

每個多路複用器都是透過電晶體來實現的。根據控制訊號,其中一個傳遞電晶體被啟用,將該輸入傳遞到輸出。下圖顯示了LUT電路的一部分,多路複用了其中的兩個位元。右邊是兩個儲存器單元。每一個位元都要經過一個反相器進行放大,然後經過中間的多路複用器的傳遞電晶體,選擇其中的一個位元。

世界第一顆FPGA晶片級拆解:詳述工作原理

LUT實現中的電路特寫

8

鎖存器

每個CLB包含一個觸發器,允許FPGA實現鎖存器,狀態機和其他有狀態電路。下圖顯示了觸發器的實現。它使用主/輔助設計。當時鍾為低電平時,第一個多路複用器讓資料進入主鎖存器。當時鍾變高時,多路複用器關閉第一個鎖存器的環路,並保持該值。(該位透過“或”門,“與非”門和反相器兩次反轉,因此保持不變。)同時,當時鍾變高時,輔助鎖存器的多路複用器從第一個鎖存器接收該位(請注意,時鐘已反轉)。該值成為觸發器的輸出。當時鍾變低時,次級的多路複用器關閉環路,從而鎖存該位。因此,觸發器是邊緣敏感的,在時鐘的上升沿鎖存該值。置位和復位線強制觸發器為高電平或低電平。

世界第一顆FPGA晶片級拆解:詳述工作原理

觸發器的實現,箭頭指出了第一個多路複用器和兩個OR-NAND門

9

8-pin 交換矩陣

交換矩陣是一個重要的路由元件。每個開關有八個“引腳”(每側兩個),幾乎可以連線任意引腳組合在一起。這允許訊號比單個路由節點更靈活地轉動、拆分或交叉。下圖顯示了四個 CLB (cyan)之間的路由網路的一部分。交換矩陣(綠色)可與右側連線的任意組合連線。請注意,每個引腳可以連線到其他 7 個引腳中的 5 個。例如,引腳 1 可以連線到引腳 3,但無法連線到引腳 2 或 4。這使得矩陣幾乎是一個橫欄,有20個潛在的連線,而不是28個。

世界第一顆FPGA晶片級拆解:詳述工作原理

基於Xilinx 可程式設計門陣列資料手冊,圖7b

開關矩陣由一排傳輸電晶體實現,該傳輸電晶體由上方和下方的儲存單元控制。電晶體的兩側是可以透過該電晶體連線的兩個開關矩陣引腳。因此,每個開關矩陣具有20個相關聯的控制位。

每個圖塊兩個矩陣產生每個圖塊40個控制位的矩陣。下圖顯示了其中一個儲存單元,該儲存單元連線到下面的傳輸電晶體的長彎曲柵極。該電晶體控制引腳5和引腳1之間的連線。

世界第一顆FPGA晶片級拆解:詳述工作原理

因此,與該儲存單元相對應的位流中的位控制引腳5和引腳1之間的開關連線。同樣,其他儲存單元及其相關電晶體控制其他開關連線。請注意,這些連線的順序不遵循特定的模式。因此,位流位和開關引腳之間的對映是隨機的。

10

輸入路由

CLB的輸入在位流中使用不同的編碼方案,這由硬體實現方式解釋。在下圖中,八個圓圈的節點是CLB框DD的潛在輸入。

世界第一顆FPGA晶片級拆解:詳述工作原理

最多隻能將一個節點配置為輸入,因為將兩個訊號連線到同一輸入將使它們短路。使用多路複用器選擇所需的輸入。一個簡單的解決方案是使用8路多路複用器,其中3個控制位選擇8個訊號之一。另一個簡單的解決方案是使用8個透過電晶體,每個電晶體都有自己的控制訊號,其中一個選擇所需的訊號。但是,FPGA使用一種混合方法,該方法避免了第一種方法的解碼硬體,但使用了5個控制訊號,而不是第二種方法所需的8個控制訊號。

世界第一顆FPGA晶片級拆解:詳述工作原理

FPGA使用多路複用器選擇八個輸入之一

上面的示意圖顯示了FPGA中使用的兩級多路複用器方法。在第一階段,控制訊號之一被啟用。第二階段從頂部或底部選擇訊號作為輸出。例如,假設控制訊號 B/F 傳送到第一級,“ ABCD”傳送到第二級;輸入B是唯一將傳遞到輸出的B。因此,選擇八個輸入之一需要在位元流中使用5位,並使用5個儲存單元。

11

結論

XC2064使用各種高度最佳化的電路來實現其邏輯塊和路由。該電路需要緊湊的佈局,以適合晶片。即使這樣,XC2064還是一個非常大的晶片,比當時的微處理器還大,因此一開始很難製造,而且要花費數百美元。與現代FPGA相比,XC2064的單元數量非常少,但是即使如此,它也引發了革命性的新產品線。

瞭解XC2064位元流的關鍵是兩個概念。首先,FPGA由64個塊組成,這些塊是將邏輯塊和路由結合在一起的重複塊。儘管FPGA被描述為具有被路由包圍的邏輯塊,但這並不是實現它們的方式。

第二個概念是,位元流中沒有抽象。它直接對映到FPGA的二維佈局中。因此,只有考慮FPGA的物理佈局,位元流才有意義。

作者:Ken Shirriff