<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 【超級干貨】FPGA設計流程及原理

【超級干貨】FPGA設計流程及原理

發(fā)布人:智能物聯(lián)研習社 時(shí)間:2021-07-29 來(lái)源:工程師 發(fā)布文章

FPGA是可編程芯片,因此FPGA的設計內容包括硬件設計和軟件設計兩部分。硬件包括FPGA芯片電路、 存儲器、輸入輸出接口電路以及其他設備,軟件即是相應的HDL程序以及最新才流行的嵌入式C程序。

 

FPGA的開(kāi)發(fā)流程即是利用EDA開(kāi)發(fā)軟件以及編程工具對FPGA芯片進(jìn)行開(kāi)發(fā)的過(guò)程。EDA ( Electronic Design Automation,電子設計自動(dòng)化)是充分發(fā)揮LSI性能的關(guān)鍵技術(shù)。理論上,一款FPGA所能達到的性能上限是由制程等物理因素決定的,而在實(shí)際應用中用戶(hù)電路的性能很大程度上取決于器件的架構和EDA工具。這就像汽車(chē)一樣,無(wú)論引擎(制程)多么強勁,都需要配合適當的車(chē)體(架構)和駕駛技術(shù)( EDA工具)才能發(fā)揮出極限速度。尤其是與電路實(shí)現直接相關(guān)的EDA工具,其對性能的影響不可估量。

 

FPGA的設計流程由HDL源代碼的邏輯綜合開(kāi)始,經(jīng)過(guò)工藝映射、邏輯打包、布局布線(xiàn)等過(guò)程,最終生成比特流。邏輯綜合將HDL描述轉換為門(mén)級網(wǎng)表,工藝映射將這個(gè)網(wǎng)表轉換為查找表級別的網(wǎng)表。邏輯打包是將多個(gè)查我表和觸發(fā)器集合到一個(gè)邏輯塊的過(guò)程。布局布線(xiàn)工具先決定邏輯塊在器件上的位置,然后通過(guò)布線(xiàn)結構實(shí)現邏輯塊之間的連接。最終,基于這些布局布線(xiàn)信息可以決定FPGA中各個(gè)開(kāi)關(guān)的連接關(guān)系,以此生成比特流。

 

器件上查找表的輸入數是既定的(查找表能實(shí)現輸人數不大于自己的任意邏輯),而FPGA的設計就是要從目標電路的邏輯函數中不斷分離出既定輸入數之內的邏輯,并將其映射到查找表上。然后將這些查找表通過(guò)布線(xiàn)相連, 就可以在FPGA 上實(shí)現目標電路。

 

FPGAASIC的區別在于,ASIC通過(guò)組合使用標準單元庫中的邏輯實(shí)現電路,而FPGA則使用統一構造的查找表。這種區別也體現在了EDA工具上。下面我們就對這種不同于ASICEDA技術(shù)原理進(jìn)行詳細介紹,具體包括上述的工藝映射、邏輯打包、布局布線(xiàn)。

 

02

 

工藝映射

 

工藝映射是指將不依賴(lài)于任何工藝的門(mén)級網(wǎng)表轉換為由特定FPGA邏輯單元所表示的網(wǎng)表的過(guò)程。這里所說(shuō)的邏輯單元依賴(lài)于特定的FPGA架構,是由查找表或MUX等邏輯電路實(shí)現的FPGA上的最小邏輯單位。工藝映射是從HDL開(kāi)始的邏輯轉換的最后一步,因此對最終電路實(shí)現的質(zhì)量(面積、速度、功耗等)至關(guān)重要。下面我們就通過(guò)工藝映射最具代表性的工具FlowMap,來(lái)講解工藝映射的原理。Flow Map是由加州大學(xué)洛杉磯分校叢京生教授(Jason Cong)的研究團隊開(kāi)發(fā)的工藝映射算法。將目標電路網(wǎng)表轉換到k輸入的查找表(k-LUT)的工藝映射過(guò)程由下面兩個(gè)步驟組成。

 

1)分解:門(mén)級網(wǎng)標實(shí)際上都是以布爾網(wǎng)絡(luò )的形式來(lái)表示的。先將布爾網(wǎng)絡(luò )的各個(gè)節點(diǎn)不斷分解,直至輸人數小于查找表的輸人數k。

 

2)覆蓋:基于過(guò)程(1)所得到的布爾網(wǎng)絡(luò ),使用某種基準對輸入進(jìn)行切分,使用k-LUT覆蓋多個(gè)節點(diǎn)。

 

FlowMap第(2)步的覆蓋過(guò)程,是一種可以在多項式時(shí)間內找到邏輯層數最優(yōu)解的方法。

 

03

 

3、邏輯打包

 

目前,主流FPGA的邏輯塊都具有多個(gè)查找表,因此將查找表高效地打包到邏輯塊的過(guò)程是不可或缺的。邏輯打包主要有兩個(gè)要點(diǎn):第一,邏輯塊內部布線(xiàn)(局部布線(xiàn))和邏輯塊外部布線(xiàn)(布線(xiàn)通道中的布線(xiàn))的延遲相差很大;第二,如果邏輯塊中有查找表空閑,資源使用率就會(huì )降低(增加邏輯塊的使用量),因此要盡量在每個(gè)邏輯塊內填裝更多邏輯。

 

之前世界上出現了許多可以實(shí)現多種性能優(yōu)化的打包工具,但他們的裝箱算法都只能處理單一的查找表結構。近些年的邏輯塊包含了自適應查找表等更為復雜的結構。自適應查找表不僅需要在工藝映射時(shí)選擇最佳輸入數的查找表,對裝箱算法也有很大影響。比如,在打包自適應查找表的網(wǎng)表時(shí)為了改善布通率和延遲,不能只考慮邏輯塊中查找表的數量,還要考慮主輸入數量、邏輯塊所允許的查找表模式組合等因素。因此要找到同時(shí)滿(mǎn)足邏輯塊數最少、延遲最小、布線(xiàn)數最少的解是非常困難的。

 

VTR(Verilog-to-Routing)中集成的AAPack(ArchitectureAware Packer)就是為了挑戰這個(gè)問(wèn)題而誕生的。VTR系統使用XML的形式建立器件的架構模型。其架構的定義分為單元結構( physical block,相當于邏輯塊內的邏輯單元)和布線(xiàn)結構( interconnect,相當于physical block間的連接關(guān)系和連接方式)。單元結構的描述方式為嵌套式,可以描還含有多個(gè)邏輯單元的邏輯塊。使用模式單元還可以表達具有多種模式的結構,例如將多輸入查找表拆分為多個(gè)少輸人的查找表(多種模式)等。

 

AAPack實(shí)現了對上述架構模型的支持,其裝箱算法如下所示。

 

(1)如果有未打包的查找表,則選其作為種子并確定要插入的邏輯塊。

 

(2)按照如下算法向當前邏輯塊填裝查找表。

 

(a)尋找可填裝的候補查找表。

 

(b)將選擇的查找表填入邏輯塊。

 

(c)如果邏輯塊還有空位,返回到步驟(2)(a)。

 

(3)將裝箱完畢的邏輯塊輸出到文件,返回到步驟(1)。

 

綜上,AAPack可以對結構復雜的邏輯塊實(shí)現查找表打包功能。

 

04

 

布局布線(xiàn)

 

布局布線(xiàn)是FPGA設計流程的最后一個(gè)步驟——在物理上確定邏輯塊的位置和信號連接路徑。一般來(lái)說(shuō)首先會(huì )確定邏輯塊的布局,然后再對邏輯塊間的連接進(jìn)行布線(xiàn)。

 

多數FPGA的邏輯塊都呈二維陣列狀排列,因此邏輯塊布局問(wèn)題可以視為標準的二次分配問(wèn)題。然而,此類(lèi)問(wèn)題也被公認為是NP問(wèn)題,通常只能使用SA ( Simulated Annealing)等算法獲取近似解。

 

布線(xiàn)過(guò)程中主要使用兩種布線(xiàn)方法:全局布線(xiàn)和詳細布線(xiàn)。全局布線(xiàn)階段主要決定線(xiàn)網(wǎng)的布線(xiàn)路徑,例如通過(guò)哪些通道形成連接。詳細布線(xiàn)則基于全局布線(xiàn)所得的信息,確定路徑具體使用了哪些布線(xiàn)資源、通過(guò)了哪些開(kāi)關(guān)等。

 

下面我們使用由多倫多大學(xué)開(kāi)發(fā)、在學(xué)術(shù)界被廣泛應用的布局布線(xiàn)工具VPR(Versatile Place and Route)進(jìn)行介紹。


VPR的布線(xiàn)過(guò)程如下:

 

(2)計算當前布局的布線(xiàn)擁擠度。

 

(3)隨機選擇兩個(gè)邏輯塊并對調其位置。

 

(4)計算對調后的布線(xiàn)擁擠度。

 

(5)比較對調前后擁擠度的數值,決定是否接受新的布局。

 

目前,作為最主要的開(kāi)源FPGA設計框架,VPR已經(jīng)發(fā)展到了7.0的版本了,其中也加入了一些更加實(shí)用的功能和工具,例如支持進(jìn)位信號等專(zhuān)用連接、多時(shí)鐘域時(shí)序分析、功耗分析等。


當然,理論肯定不及實(shí)踐,以下推薦個(gè)平臺,各路大佬可以體驗:

https://auth.tuya.com/?_source=32fe8c33b5a2a7c071f562063e20fd8a       



*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。

繼電器相關(guān)文章:繼電器工作原理


時(shí)間繼電器相關(guān)文章:時(shí)間繼電器


電化學(xué)工作站相關(guān)文章:電化學(xué)工作站原理



相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>