FPGA從Xilinx的7系列學起(3)
1.3再深入一點的了解CLB
那么這個是啥?這個就是一個Slice,這個Slice由幾部分組成,4個六輸入查找表,很多的復用器(multiplexers),一條自下而上的進位鏈(這個進位鏈被連接到四個觸發器上的),8個FF的(4個的FF/Latches, 4個輔助的FF)。看看這個圖的好處就來了,我不需要給大家指出那里是啥了,一目了然。
如果大家不我的文章,那么大家就把這個圖好好的保留一下。這個圖就是你設計到底層,想直接用原語設計的時候的九陽真經了。
1.3.1 聊一聊LUT
查找表LUT也有時也被稱為函數發生器(這個概念有點大,但是我覺得還是比較貼切的,因為你所有的功能都是由它來實現的)。一個LUT的能力是受限于輸入的個數的限制,而不是邏輯的復雜性。只要他在Slice內部進行相關的功能,那么通過LUT的延遲是恒定的,無論你實現的什么樣的邏輯功能。--不過我還是不建議大家取用Slice作為一個延時器的來進行設計。
每個Slice包含一個6輸入LUT,可以也被分成兩個5輸入LUT。那么這樣的應用就允許資源被分解,來幫助保證最大芯片利用率。我覺得每一個人必須了解的LUT的輸入限制的性質。很明顯,如果你的組合邏輯有七個輸入,那么會發生什么呢?由于LUT有六個輸入,那么綜合工具肯定是需要添加第二個LUT來串聯第一個LUT。這又會造成什么呢?這肯定是極大地增加與該路徑相關聯的延遲,進而影響你設計的最大頻率,有時候你設計出來的產品能夠跑到多高的頻率影響你的設計最終能不能成功的應用,影響你的產品在同類產品的競爭力。當然也不是跑得越高越好,頻率越高動態功耗就越高,功耗太高也不是很好的結果,那么結論就是運行頻率適量就好,但是潛在的運行頻率還是越高越好,你進可攻退可守。
再來扯一扯一個6輸入LUT可以也被分成兩個5輸入LUT的事情。那個時候很多人的書上都講了這個事情,但是就是一句話,我也是云里霧里的。今天我不知道是不是該把這個事情捋清楚。后來,我想還是捋一捋吧,畢竟這個東西還是能夠讓人同樣跟我一樣云里霧里的。
不知道大家看了我的圖,清晰了沒有。他的兩個5輸入的查找表的一個前提是5個輸入是必須相同的。如果沒有這個前提,那么他的結論是不正確的。那么很多書上講的都是結論,沒講前提。我就把前提給扒出來了。希望對大家理解這句話有幫助。那么,理解這個的好處是什么呢?LUT本身是可以實現任何輸入的組合函數。但是我們肯定希望用最少的資源。那么如果能把自己的設計用別人1/2的資源來實現了,功耗和成本一定讓你的老板非常喜歡你。
1.3.2 聊一聊Mux
在最上面的圖中,我們看到了許多多路復用器,他的功能很明顯是把LUT的輸出連接到一起,然后形成不同的功能。以下四句話,請大家先記住,然后我再來用圖一個個解釋解釋。
1. 一個LUT能夠實現1個4選1的復用器,一個Slice能夠實現4個4選1的復用器。
2. 兩個LUT能夠實現1個8選1的復用器,一個Slice能夠實現2個8選1的復用器。
3. 四個LUT能夠實現1個16選1的復用器,一個Slice能夠實現1個16選1的復用器。
專用的F7AMUX, F7BMUX和 F8MUX三種選擇器和LUT一起可以形成更多輸入的選擇器。每個Slice包含兩個F7MUXes,它們和該組的兩個LUT的輸出一起可以創建和8比1多路復用器。每Slice還包含一個F8MUX。相結合的F7MUXes的輸出,可以使一個16比1的MUX。這些MUX輸出可以連接到該Slice的觸發器/鎖存器,可以和其他Slice一起組成能力更強的復用器。這些專用多路復用器用來提高大多路復用速度和節省設計所需要的資源的。
4:1的復用器
如下圖所示:每一個LUT都可以被配制成4:1的復用器。
8:1的復用器
每一個Slice有一個F7AMUX 和一個 F7BMUX,這兩個復用器和LUT的輸出一起形成一個支持13輸入的功能,或者一個8:1的復用器。一個Slice能夠實現2個8選1的復用器。
16:1的復用器
每一個Slice里面有一個F8MUX,他和F7AMUX 和 F7BMUX輸出一起組成了支持27輸入的組合邏輯功能或者一個16:1的復用器。一個Slice能夠實現1個16選1的復用器。
1.3.3 聊一聊進位鏈
進位邏輯為了提高用戶的算術功能而專門設置的專用硬件資源,他可以改善加法器,累加器,減法器和比較器運算速度。從圖中可以看到,左邊顯示的Slice被分組到同一個進位鏈中。大家一定要注意,進位鏈邏輯走向垂直向上。這是必須注意,因為絕大多數設計都會廣泛的使用進位鏈邏輯,那么用戶使用的時候,最起始的bit應該被放置在進位鏈的底部,這樣就可以節省很多的資源。當然這個和大家設計的原理圖和Layout PCB的關系都很大,所以現在提倡從設計板卡的時候FPGA的工程師就必須和硬件設計工程師一同工作。以后我們會詳細講述這些事情的,不要太著急,否則很多東西還沒成系統,就又開始亂糟糟的了。
1.3.4 聊一聊觸發器(flip-flop)
XILINX FPGA所有的觸發器都是D觸發器,這個在數字電路中是最基本的概念,如果不太知道的,可以翻一下數字電路的書籍。當是溫故而知新了。D觸發器的特點是有一個Clock輸入端,數據的翻轉需要靠時鐘的上升沿或者下降沿的傳遞來實現的。所有的D觸發器都會一個使能位(CE);都會有同步或者異步的置位輸入位,當上電的時候他會同步或者異步給一個置位信息,是的寄存器處于一個穩定態,這個對我們的設計幫助非常大。很多書上都說這個置位是沒有意義,因為在電路中無法實現該功能,很多工程師朋友在這里都很迷惑。但是實際應用中,我已經測試過,在XILINX的FPGA中,他的作用是存在的,能夠非常準確的按照你的需求來設置數據。
通過圖片,很清晰的可以看到:同一個組里面的所有觸發器和觸發器/鎖存器共享相同的控制信號。觸發器的相關聯的控制信號對我們的設計來說是很重要的,因為只有觸發器有相同的控制信號,那么他們就可以被分配到相同的Slice中了。這意味著,如果你不管理你設計中的控制信號,控制信號的數目也是隨意增加或者減少,那么你真的可能用一個Virtex7的芯片設計出來一個Artix7性能的產品,大量的資源就在你隨意的代碼中悄悄的溜走了。置位和復位信號用戶可以根據自己的需求,配置為同步或異步的。對于同步的設計目的,Xilin的建議,除非必須異步設計,那么用戶就應該設計一個同步置位或復位。這也是FPGA設計基礎,用戶一定要養成同步設計的習慣。為了幫助工程師們理解這些需求,我們的公眾號里面專門有文章,教大家如何編寫代碼才是一個風格優秀的代碼,大家有問題可以公眾號里面詢問。他們的文章精準的告訴了你的什么樣編碼風格很重要,并為你提供很多很好的設計實踐,將幫助你獲得高性能并且提高了器件利用率。
把最重要的事情再總結一下:
每一個Slice都有4個6輸入的查找表和8個寄存器。
每個LUT都能夠實現一個6輸入的組合邏輯功能或者兩個5輸入的組合邏輯功能。
4個寄存器能夠被用作觸發器或者鎖存器,4個寄存器只能被用作觸發器。
每一個Slice都有進位鏈和復選器(MUXF7和FMUX8)。
MUXF8和FMUX7的輸出搭配使用能夠組合成13輸入邏輯功能或者8輸入的復選器。
MUXF8和FMUX7的輸出搭配使用能夠組合成27輸入邏輯功能或者16輸入的復選器。
進位鏈能夠被用作來實現快速的加減和比較邏輯。
FPGA 單片機
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。