題主最近開始接觸和FPGA的方案驗證相關的工作內容,需要把握FPGA內部資源的詳細信息,所以又仔細查看了官方的器件手冊。這一次給大家分享的內容主要涉及Xilinx FPGA內的CLBs,SelectIO和Clocking資源,適合對FPGA設計有時序要求,卻還沒有足夠了解的朋友。
參考器件上,雖然一些專用的資源都集中在高端的FPGA型號中,不過題主想了想,還是把它們放在該系列后續(xù)的文章中吧。下文中的舉證皆來自Spartan6器件文檔,所以也不會超出Spartan6涵蓋內容。
傳統(tǒng)的FPGA內部資源分類作三類,可配置邏輯模塊(Configurable Logic Block)、輸入輸出模塊(InputOutput Block)和內部布線資源(Interconnect)三個部分,這些大家都知道的。隨著FPGA的發(fā)展,為了滿足對信號處理和片上儲存的需要,又在前三類基礎上增加了塊RAM(BRAM)、時鐘管理單元和硬件乘法器,之后又在部分系列里增加了PPC和高速串行輸入與輸出等等。
下文將要提到的CLB、SelectIO和Clocking資源里,SelectIO資源是比較豐富的一類,所以在順序上把它放在最后。
正文:
首先說說CLB吧,它是一類最重要,其實也是最易于使用的結構。Xilinx把盡可能多的資源配置接口開放給用戶,但是出于控制開發(fā)周期,并且提高系統(tǒng)穩(wěn)定性的考慮,CLB不是其中之一,它的配置方案幾乎全部由IDE實現(xiàn)過程智能分配,用戶可以約束特殊Slice的位置,但很少有這種必要,交給IDE來完成會更加有效。
來看看它的結構(有一些圖片資料不好找,后期整合的時候會補全):
① CLB資源會根據(jù)FPGA的尺寸被內部時鐘網(wǎng)絡分割成若干個區(qū)域,一般每個區(qū)域是40個CLB單元高度;
② 每個CLB連接到一個開關矩陣來接入全局布線矩陣;
③ 一個CLB單元包含 一對Slice單元(兩個Slice無直接連接,并且在CLB間成列分布,每個縱列的Slice有一條獨立的進位鏈);
④ 一個CLB中下方的Slice記為Slice0,上方的記為Slice1;
⑤ 每個Slice包含4個查找表(LUTs),8個存儲單元(FF),以及一些選擇器和進位邏輯,這些單元用于提供邏輯、算術和ROM功能;
⑥ 有一部分Slice支持DistributedRAM和32位移位寄存器功能,被記為SLICEM,其他的記為SLICEL(一個CLB最多有一個SLICEM,每個CLB縱列至少有一個SLICEM,在DSP48E(XilinxFPGA內的硬件乘法器)縱列旁的兩個CLB縱列,每一個CLB都有SLICEM)。
SLICEM
(DistributedRAM和ShiftRegisters資源都在LUTs上掛載)
最后看一下一個CLB中的資源總量:
當然具體到Slice中幾種資源還有一些細節(jié)需要關注,主要是和LUTs的特性相關,不過等后面加入案例來講吧。如果此前你已經(jīng)對FPGA設計有一些經(jīng)驗和體會的話,現(xiàn)在想必已經(jīng)對FPGA的查找表結構有了自己的理解。
還是簡單提及一下LUTs的作用,就是查表,,,在我看來,它就是一個6輸入2輸出的多功能選擇器,可以直接把Verilog中always塊的行為映射到它的行為上,通過對輸入端口的連接配置,它就能夠實現(xiàn)我們需要的信號行為模型。完整的過程以后會加入案例來講。讓我們緩一口氣,先進入下一個內容。
XilinxFPGA內部有復雜的時鐘資源網(wǎng)絡,來維護大數(shù)量邏輯資源條件下的時序要求和系統(tǒng)穩(wěn)定。主要分為全局時鐘線和局部時鐘網(wǎng)絡,在Spartan6上,還有數(shù)字時鐘管理器(DCM)和數(shù)字鎖相環(huán)(PLL)兩種硬核資源,用以輔助時鐘資源網(wǎng)絡。Spartan6內部提供了16個全局時鐘驅動buffer和40個局部時鐘的,它們均勻地分布在上文提到的被時鐘網(wǎng)絡分割出來的各區(qū)域中:
我們可以通過例化BUFG和BUFIO等原語調用這些資源,為GTP(H/X/Z)和DDR、AD/DA這樣的高速信號組提供更低相位偏移的時鐘參考,但是時鐘資源的分配有比較多的使用規(guī)則,在資源有限而布線拮據(jù)的情況下,時常會被Xilinx規(guī)則檢查器告知使用違例。之后題主會結合一些真實案例來引導大家去規(guī)避這樣的錯誤。
時鐘資源所用的篇幅也很短,事實上涉及到時鐘的問題很多,但是要在需要的時候再去認識才有價值,不然沒有依據(jù)的去了解,也沒有什么價值。接下來看看FPGA內部最為豐富的I/O資源,畢竟現(xiàn)在市場上FPGA最廣泛和最擅長的,就是做接口,下文包含的很多內容,在多個系列的FPGA上都是差不多的規(guī)范:
① FPGA的I/O資源被分布在若干個Bank中,每個Bank中有20個I/O Tile;
② 一個Tile包含2個IOB,2個ILOGIC,2個OLOGIC和2個IOEDLAY,用于對雙端(差分)信號配對;
③ IOB包含輸入、輸出和三態(tài)驅動,可配置為不同的I/O標準;IOB直連一對I(O)LOGIC,I(O)LOGIC包含數(shù)據(jù)I/O的邏輯資源和三態(tài)控制,I(O)LOGIC也可以通過調用相關原語配置為I(O)SERDES,實現(xiàn)數(shù)據(jù)的串并行轉換;
IOB單元支持大量的接口標準,可以對負載能力和轉換速率進行控制。并且同Bank內支持復合電壓輸出,以驅動一些低壓I/O標準,不過對參考電平的選擇有一些規(guī)則。
對于單端和雙端信號I/O,可以選擇很多種buffer配置方式去驅動這些信號,當然IDE的實現(xiàn)過程中也幫我們配置好了很多,作為用戶,常用的像IBUFG、IBUFR這樣的時鐘驅動資源,IBUFDS、OBUFDS實現(xiàn)信號單雙端轉換,以及用OBUFT實現(xiàn)三態(tài)控制等等。
評論
查看更多