來源:內(nèi)容由半導(dǎo)體行業(yè)觀察(ID:icbank)編譯自「semiwiki」,謝謝。 現(xiàn)場可編程門陣列(FPGA)可以實現(xiàn)任意數(shù)字邏輯:從微處理器到視頻生成器或加密礦機,一應(yīng)俱全。FPGA由許多邏輯模塊組成,每個邏輯模塊通常由觸發(fā)器和邏輯功能以及連接邏輯模塊的路由網(wǎng)絡(luò)組成。FPGA的特殊之處在于它是可編程的硬件:您可以重新定義每個邏輯塊及其之間的連接。這樣的話,您就可以構(gòu)建復(fù)雜的數(shù)字電路,而無需物理上連接各個門和觸發(fā)器,也無需花費設(shè)計定制集成電路的費用。 FPGA是由Ross Freeman 發(fā)明的, 他于1984年共同創(chuàng)立了Xilinx ,并推出了首款FPGA XC2064。該FPGA比現(xiàn)代FPGA簡單得多。它僅包含64個邏輯模塊,而現(xiàn)代FPGA則為數(shù)千或數(shù)百萬個邏輯模塊,但它卻是目前價值數(shù)十億美元的FPGA行業(yè)的鼻祖。由于其重要性,XC2064位列芯片名人堂。我對Xilinx的XC2064進(jìn)行了反向工程,并在此博客文章中解釋了其內(nèi)部電路以及“位流”(bitstream)如何對其進(jìn)行編程。 如今,F(xiàn)PGA是用諸如Verilog或VHDL之類的硬件描述語言編程的,但是那時Xilinx提供了他們自己的開發(fā)軟件,一個名為XACT的MS-DOS應(yīng)用,該軟件價格高達(dá)12,000美元。XACT的運行水平低于現(xiàn)代工具:用戶定義每個邏輯塊的功能(如下面的屏幕快照所示)以及邏輯塊之間的連接。XACT對連接進(jìn)行了路由,并生成了可以加載到FPGA中的比特流文件。 通過比特流(具有專有格式的比特序列)配置FPGA。如果您查看XC2064的比特流(如下所示),那是令人費解的混合模式,這些模式不規(guī)則地重復(fù),并散布在比特流中。XACT中的函數(shù)定義與位流中的數(shù)據(jù)之間沒有明確的聯(lián)系。但是,研究FPGA的物理電路可以揭示比特流數(shù)據(jù)的結(jié)構(gòu),并且可以理解。 FPGA如何工作?下圖來自原始的FPGA專利,顯示了FPGA的基本結(jié)構(gòu)。在這個簡化的FPGA中,有9個邏輯塊(藍(lán)色)和12個I / O引腳。互連網(wǎng)絡(luò)將組件連接在一起。通過在互連上設(shè)置開關(guān)(對角線),邏輯塊相互連接,并與I / O引腳連接。每個邏輯元件都可以使用所需的邏輯功能進(jìn)行編程。結(jié)果是一個高度可編程的芯片,可以實現(xiàn)適用于可用電路的任何東西。 CLB:可配置邏輯塊上圖顯示了九個可配置邏輯塊(Configurable Logic Block:CLB),而XC2064具有64個CLB。下圖顯示了每個CLB的結(jié)構(gòu)。每個CLB具有四個輸入(A,B,C,D)和兩個輸出(X和Y)。介于兩者之間的是組合邏輯,可以使用任何所需的邏輯功能進(jìn)行編程。CLB還包含一個觸發(fā)器,允許FPGA實現(xiàn)計數(shù)器,移位寄存器,狀態(tài)機和其他有狀態(tài)電路。梯形是多路復(fù)用器,可以將其編程為通過其任何輸入。多路復(fù)用器允許為特定任務(wù)配置CLB,為觸發(fā)器控制和輸出選擇所需的信號。 您可能想知道組合邏輯如何實現(xiàn)任意邏輯功能,是否跟芯片一樣在“與”門,“或”門,“異或”門等集合之間進(jìn)行選擇?不,他們其實是使用了一個稱為查找表(LUT)的巧妙技巧,實際上是為函數(shù)保留了真值表。例如,三個變量的函數(shù)由其真值表中的8行定義。LUT由8位存儲器以及用于選擇正確值的多路復(fù)用器電路組成。通過將值存儲在存儲器的這8位中,可以實現(xiàn)任何3輸入邏輯功能。 互連FPGA的第二個關(guān)鍵部分是互連,可以對其進(jìn)行編程以不同方式連接CLB?;ミB相當(dāng)復(fù)雜,但是粗略的描述是每個CLB之間有幾個水平和垂直線段。CLB互連點允許在水平線和垂直線之間建立連接,從而可以創(chuàng)建任意路徑。更復(fù)雜的連接通過“交換矩陣”(switch matrices)完成。每個開關(guān)矩陣都有8個引腳,可以(幾乎)任意方式將它們連接在一起。 下圖顯示了XC2064的互連結(jié)構(gòu),提供了到邏輯塊(青色)和I / O引腳(黃色)的連接。該圖顯示了路由功能的特寫。綠色框是8針開關(guān)矩陣,而小方塊是可編程的互連點。 XC2064 FPGA具有一個8 x 8的CLB網(wǎng)格。每個CLB都有從AA到HH的字母名稱。 互連可以將例如塊DC的輸出連接到塊DE的輸入,如下所示。紅線表示路由路徑,紅色小方塊表示已激活的路由點。離開模塊DC后,信號由第一個路由點定向到8針開關(guān)(綠色),該信號將其引導(dǎo)到另外兩個路由點和另一個8針開關(guān)。(未顯示未使用的垂直和水平路徑。)請注意,布線相當(dāng)復(fù)雜;即使是這條短路徑,也使用了四個路由點和兩個開關(guān)。 下面的照片顯示了XACT程序中的路由外觀。黃線表示邏輯塊之間的路由。隨著添加更多的信號,挑戰(zhàn)在于如何有效地路由而不使路徑發(fā)生沖突。XACT軟件包執(zhí)行自動路由,但是也可以手動編輯路由。 實施這篇文章的其余部分討論了XC2064的內(nèi)部電路,這些照片是根據(jù)照片進(jìn)行反向工程的。 下圖顯示了XC2064芯片的布局。FPGA的主要部分是8×8的網(wǎng)格。每個圖塊包含一個邏輯塊和相鄰的路由電路。盡管FPGA圖將邏輯塊(CLB)顯示為與圍繞它們的路由不同的實體,但這并不是FPGA的實現(xiàn)方式。取而代之的是,每個邏輯塊和相鄰路由都實現(xiàn)為單個實體,即圖塊。(具體來說,圖塊包括每個CLB上方和左側(cè)的路由。) I / O模塊圍繞集成電路的邊緣提供與外界的通信。它們連接到小的綠色方形焊盤,該焊盤連接到芯片的外部引腳。die被緩沖區(qū)(綠色)劃分:兩個垂直和兩個水平。這些緩沖器可放大在電路中傳播很長距離的信號,從而減少延遲。垂直移位寄存器(粉紅色)和水平列選擇電路(藍(lán)色)用于將位流加載到芯片中,如下所述。 內(nèi)部探索下圖顯示了XC2064中單個圖塊的布局;芯片包含上述封裝在一起的這些圖塊中的64個。每個圖塊約有40%被保持配置位的存儲單元(綠色)占用。頂部三分之一(大約)通過兩個 switch matrices和大量單獨的routing switches處理互連路由。在其下方是邏輯塊。邏輯塊的關(guān)鍵部分是輸入,觸發(fā)器和查找表(LUT)的多路復(fù)用器。每個塊通過垂直和水平布線連接到相鄰的塊,以實現(xiàn)互連,電源和接地。配置數(shù)據(jù)位被水平地饋送到存儲單元,而垂直信號選擇要加載的存儲單元的特定列。 晶體管FPGA由CMOS邏輯實現(xiàn),該邏輯由NMOS和PMOS晶體管構(gòu)建。晶體管在FPGA中具有兩個主要作用。首先,可以將它們組合以形成邏輯門。其次,晶體管被用作信號通過的開關(guān),例如以控制路由。在此作用下,該晶體管稱為傳輸晶體管。 下圖顯示了MOS晶體管的基本結(jié)構(gòu)。硅的兩個區(qū)域摻雜有雜質(zhì)以形成源極和漏極區(qū)域。在兩者之間,柵極打開或關(guān)閉晶體管,控制源極和漏極之間的電流。柵極由一種稱為多晶硅的特殊類型的硅制成,并通過一層薄的絕緣氧化物層與下面的硅隔開。在此之上,兩層金屬提供了連接電路的布線。 下面的die照片特寫顯示了在顯微鏡下晶體管的外觀。多晶硅柵極是兩個摻雜硅區(qū)域之間的蛇形線。圓圈是通孔,是硅和金屬層之間的連接(此照片已將其刪除)。 比特流和配置存儲器XC2064中的配置信息存儲在配置存儲單元中。FPGA的內(nèi)存不是使用RAM塊進(jìn)行存儲,而是以160×71的網(wǎng)格分布在整個芯片上,從而確保每個位都與其控制的電路相鄰。 下圖顯示了如何將配置比特流加載到FPGA中。比特流被送入移位寄存器,該移位寄存器沿芯片中心(粉紅色)向下移動。一旦將71位加載到移位寄存器中,列選擇電路(藍(lán)色)就會選擇一個特定的存儲器列,并將這些位并行加載到該列中。然后,接下來的71位被加載到移位寄存器中,并且左側(cè)的下一列成為所選列。對FPGA的所有160列重復(fù)此過程,將整個位流加載到芯片中。 重要的一點是,比特流的分布與文件中的分布完全相同:比特流文件中的比特布局與芯片上的物理布局匹配。如下所示,每個位都存儲在FPGA控制電路的旁邊。因此,比特流文件格式直接由硬件電路的布局確定。 例如,當(dāng)由于緩沖電路而在FPGA切片之間存在間隙時,相同的間隙會出現(xiàn)在位流中。比特流的內(nèi)容不是圍繞字段,數(shù)據(jù)表或配置塊之類的軟件概念來設(shè)計的。了解比特流取決于從硬件角度而非軟件角度進(jìn)行思考。 如下所示實現(xiàn)配置存儲器的每一位。每個存儲單元均包含兩個以環(huán)路連接的反相器。該電路具有兩個穩(wěn)定狀態(tài),因此可以存儲一個位:頂部反相器為1,底部反相器為0,反之亦然。為了寫入該單元,左側(cè)的傳輸晶體管被激活,使數(shù)據(jù)信號通過。數(shù)據(jù)線上的信號只會使逆變器過載,從而寫入所需的位。(您也可以使用相同的路徑從FPGA中讀取配置數(shù)據(jù)。)Q和反相Q輸出控制FPGA中所需的功能,例如關(guān)閉路由連接,為查找表提供位或控制輸出。人字拖。(在大多數(shù)情況下,僅使用Q輸出。) 下圖顯示了存儲單元的物理布局。左圖顯示了八個存儲單元,其中一個單元高亮顯示。每條水平數(shù)據(jù)線饋入該行中的所有存儲單元。每列選擇行選擇該列中的所有存儲單元以進(jìn)行寫入。中間照片放大了一個存儲單元的硅和多晶硅晶體管。 去除金屬層以暴露下面的晶體管。金屬層將晶體管連接在一起。圓圈是硅或多晶硅與金屬之間的連接(通孔)。該示意圖顯示了五個晶體管的連接方式。原理圖的物理布局與照片匹配。兩對晶體管構(gòu)成兩個CMOS反相器,而左下方的傳輸晶體管提供對單元的訪問。 查找表多路復(fù)用器如前所述,F(xiàn)PGA通過使用查找表來實現(xiàn)任意邏輯功能。下圖顯示了如何在XC2064中實現(xiàn)查找表。左側(cè)的八個值存儲在八個存儲單元中。四個多路復(fù)用器根據(jù)A 輸入值選擇每對值中的一個 。如果 A 為0,則選擇最高值;如果 A為1,則選擇最低值。接下來,較大的多路復(fù)用器根據(jù)B 和 選擇四個值之一 C。在這種情況下,結(jié)果是所需的值 A XOR B XOR C。通過在查找表中放置不同的值,可以根據(jù)需要更改邏輯功能。 每個多路復(fù)用器均通過傳輸晶體管實現(xiàn)。根據(jù)控制信號,通過晶體管之一被激活,將該輸入傳遞到輸出。下圖顯示了LUT電路的一部分,對兩個位進(jìn)行了多路復(fù)用。右邊是兩個存儲單元。每個位通過一個反相器放大,然后通過中間的多路復(fù)用器的傳輸晶體管,選擇其中一位。 每個CLB包含一個觸發(fā)器,允許FPGA實現(xiàn)鎖存器,狀態(tài)機和其他有狀態(tài)電路。下圖顯示了觸發(fā)器的(略有不同)實現(xiàn)。它使用主要/輔助設(shè)計。當(dāng)時鐘為低電平時,第一個多路復(fù)用器讓數(shù)據(jù)進(jìn)入主鎖存器。當(dāng)時鐘變高時,多路復(fù)用器關(guān)閉第一個鎖存器的環(huán)路,并保持該值。(該位通過“或”門,“與非”門和反相器兩次反轉(zhuǎn),因此保持不變。) 同時,當(dāng)時鐘變高時,輔助鎖存器的多路復(fù)用器從第一個鎖存器接收該位(請注意,時鐘已反轉(zhuǎn))。該值成為觸發(fā)器的輸出。當(dāng)時鐘變低時,次級的多路復(fù)用器關(guān)閉環(huán)路,從而鎖存該位。因此,觸發(fā)器是邊緣敏感的,在時鐘的上升沿鎖存該值。置位和復(fù)位線強制觸發(fā)器為高電平或低電平。 8針開關(guān)矩陣交換矩陣是重要的路由元素。每個開關(guān)有八個“引腳”(每側(cè)兩個),可以將幾乎任何引腳組合連接在一起。與單個路由節(jié)點相比,這使信號可以更靈活地轉(zhuǎn)向,拆分或交叉。下圖顯示了四個CLB(青色)之間的路由網(wǎng)絡(luò)的一部分。開關(guān)矩陣(綠色)可以與右側(cè)連接的任意組合連接。 請注意,每個引腳可以連接到其他7個引腳中的5個。例如,針腳1可以連接到針腳3,但不能連接到針腳2或4。這使矩陣幾乎變成了交叉開關(guān),具有20個電位連接,而不是28個。 開關(guān)矩陣由一排傳輸晶體管實現(xiàn),該傳輸晶體管由上方和下方的存儲單元控制。晶體管的兩側(cè)是可以通過該晶體管連接的兩個開關(guān)矩陣引腳。因此,每個開關(guān)矩陣具有20個相關(guān)聯(lián)的控制位。 每個圖塊兩個矩陣產(chǎn)生每個圖塊40個控制位的矩陣。下圖顯示了其中一個存儲單元,該存儲單元連接到下面的傳輸晶體管的長彎曲柵極。該晶體管控制引腳5和引腳1之間的連接。 因此,與該存儲單元相對應(yīng)的位流中的位控制引腳5和引腳1之間的開關(guān)連接。同樣,其他存儲單元及其相關(guān)晶體管控制其他開關(guān)連接。請注意,這些連接的順序不遵循特定的模式。因此,位流位和開關(guān)引腳之間的映射是隨機的。 輸入路由CLB的輸入在位流中使用不同的編碼方案,這由硬件實現(xiàn)方式解釋。在下圖中,八個圓圈的節(jié)點是CLB框DD的潛在輸入。最多只能將一個節(jié)點配置為輸入,因為將兩個信號連接到同一輸入將使它們短路。 使用多路復(fù)用器選擇所需的輸入。一個簡單的解決方案是使用8路多路復(fù)用器,其中3個控制位選擇8個信號之一。另一個簡單的解決方案是使用8個通過晶體管,每個晶體管都有自己的控制信號,其中一個選擇所需的信號。但是,F(xiàn)PGA使用一種混合方法,該方法避免了第一種方法的解碼硬件,但使用了5個控制信號,而不是第二種方法所需的8個控制信號。 上面的示意圖顯示了FPGA中使用的兩級多路復(fù)用器方法。在第一階段,控制信號之一被激活。第二階段從頂部或底部選擇信號作為輸出。例如,假設(shè)控制信號 B/F 發(fā)送到第一級,“ ABCD”發(fā)送到第二級;輸入B是唯一將傳遞到輸出的B。因此,選擇八個輸入之一需要在比特流中使用5位,并使用5個存儲單元。 結(jié)論XC2064使用各種高度優(yōu)化的電路來實現(xiàn)其邏輯塊和路由。該電路需要緊湊的布局,以適合芯片。即使這樣,XC2064還是一個非常大的芯片,比當(dāng)時的微處理器還大,因此一開始很難制造,而且要花費數(shù)百美元。與現(xiàn)代FPGA相比,XC2064的單元數(shù)量非常少,但是即使如此,它也引發(fā)了革命性的新產(chǎn)品線。 了解XC2064比特流的關(guān)鍵是兩個概念。首先,F(xiàn)PGA由64個塊組成,這些塊是將邏輯塊和路由結(jié)合在一起的重復(fù)塊。盡管FPGA被描述為具有被路由包圍的邏輯塊,但這并不是實現(xiàn)它們的方式。 第二個概念是,比特流中沒有抽象。它直接映射到FPGA的二維布局。因此,只有考慮FPGA的物理布局,比特流才有意義。 ★ 點擊文末【閱讀原文】,可查看本文原鏈接。 *免責(zé)聲明:本文由作者原創(chuàng)。文章內(nèi)容系作者個人觀點,半導(dǎo)體行業(yè)觀察轉(zhuǎn)載僅為了傳達(dá)一種不同的觀點,不代表半導(dǎo)體行業(yè)觀察對該觀點贊同或支持,如果有任何異議,歡迎聯(lián)系半導(dǎo)體行業(yè)觀察。 今天是《半導(dǎo)體行業(yè)觀察》為您分享的第2435期內(nèi)容,歡迎關(guān)注。 晶圓|設(shè)備|SiC|封裝|射頻|臺積電|華為|EDA |
19款電子扎帶
電路板識別電子標(biāo)簽