XilinxFPGA內部結構深入分析_第1頁
XilinxFPGA內部結構深入分析_第2頁
XilinxFPGA內部結構深入分析_第3頁
XilinxFPGA內部結構深入分析_第4頁
XilinxFPGA內部結構深入分析_第5頁
免費預覽已結束,剩余11頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、XilinxFPGA 內部結構深入分析作者:fpga001。論壇:芯片動力(SocVista)。網頁地址:http: 的結構請大家看到手冊的第1頁,這是IOB的review部分。IOblock是高手的領地,一般接觸FPGA第一年都不會太關心到這個部分。注意看,IOB有三個數據通道:輸入、輸出、三態(tài)控制。每個通道都有一對存儲器件,他們可以當做寄存器或者鎖存起來使用,視乎你的設置。輸入通道有可編程的延遲模塊,可以確保holdtime為零。(這是在什么場合使用?請達人補充?。┝硗饪梢钥吹捷斎胼敵鐾ǖ蓝加型陚涞腄DR支持,這個在后面可以看到。所有圖都請參考PDF原文,這里就不再粘貼了??删幊梯斎胙舆t看

2、到手冊第3頁,這個像兩根魚骨似的構造就是輸入延遲了。輸入延遲一共16節(jié),每節(jié)250ps,所以總共的延遲在04ns之間。這個魚骨的構造非常巧妙,前面8節(jié)直接級聯,只有一個輸出。這樣8節(jié)以內的調整就跳過這根長魚骨;而超過8節(jié)的調整就直接利用第一根魚骨,然后在后面的8節(jié)中進行微調。調整的輸出分別供給IOB中的異步和同步單元,異步就是直接穿過IOB,同步則是經由存儲單元流出IOB。異步單元精度較高,可以單節(jié)調整,所以精度為250ps;同步單元精度稍低,兩個節(jié)為單位調整,所以精度只有500ps。上述內容看圖便知可編程輸入延遲的設置輸入延遲的設置只能在Image配置的時候建立, 在設備工作期間無法改變。

3、我想有兩種方法可以改變輸入延遲的設置:1 .通過延遲原語在代碼中設置;2 .通過FPGAeditor在P&R完成后在ngc文件中修改。存儲單元存儲單元可以配置為D觸發(fā)器,就是我們常說的FF,Xilinx稱之為FD;也可以配置為鎖存器,Xilinx稱之為LD。輸出和三態(tài)通路各有一對寄存器外加一個MUX。利用這種2+1的組合可以產生DDR操作,Xilinx稱之為ODDR2。每個存儲單元都有6個接口信號:時鐘+時鐘時能,數據輸入+輸出,置位復位+翻轉輸入除了這些信號,存儲單元還有一些屬性設置:- FF/Latch可以用來配置存儲單元的類型;- Sync/Async配置置位復位的方式;- SRHIGH

4、/SRLOW配置是置位(1)還是復位(0);INIT1/INIT0配置置位復位的初始值,一般置位(1)復位(0);DDRDDR 支持輸入、輸出、三態(tài)。這三個IOB通道都可以實現DDR支持。輸出和三態(tài)通道可以實現ODDR2原語,這個原語的實現原理可以參考p5的圖3.兩個相差180度的時鐘和兩路信號進入一對寄存器并通過DDR專用MUX輸出,即可得到DDR數據輸出。實現相差180度,有兩種方法。一種是通過DCM直接產生這兩個信號。另外的方法是同一時鐘,但是連入寄存器的時鐘端口時,一路取反。輸入通道則實現IDDR2原語。如果輸出、三態(tài)通路實現的是DDR的調制的話,這一路其實就是DDR的解調,也就是1分

5、為2。當然,這里需要提供兩路相差180度的時鐘。另外ODDR2還有一個重要用途,就是用于產生隨路時鐘。只要把兩路數據固定為1和0,這樣產生的DDR數據其實就是0/1交叉的時鐘信號了,這個一想就明白了吧。這樣做的好處是:數據和時鐘都經過IOB寄存器處理,具有相同的延遲特性,從而實現了所謂的源同步級聯”重定時特性一一提高 DDRDDR 的性能在IDDR2和ODDR2的典型實現(圖4圖6)中,存在一個問題.以IDDR2為例,我們可以發(fā)現,在經典實現中,輸出的兩路數據分別與時鐘的兩個邊沿對齊。但是,強調一下,后端的系統中往往只有一個時鐘,工作在上升沿。那么對于下降沿對齊輸出的數據,從下降沿開始到上升沿

6、被采樣,只有半個時鐘的余量來穩(wěn)定輸出并滿足setup。由于FPGA系統比較復雜從IOB出來的數據要進入到下一個存儲單元可能會經歷非常漫長的邏輯和路由延遲。要在半個時鐘內完成,有很大的挑戰(zhàn)性,尤其是在高速系統中,往往有很大的困難。Spartan3E的解決辦法是,利用相鄰從屬IOB的存儲單元,對下降沿輸出的數據馬上做一次上升沿抽樣。由于兩個IOB相鄰,不存在復雜的邏輯和路由延遲,因此雖然余量也是半個時鐘,但一般情況下甚至高速系統下也可以成功實現。這樣數據就回到了上升沿時鐘域。到了上升沿時鐘域,則數據有一個時鐘的時間余量,處理起來就和普通的情況一樣了。以上是關于IDDR2的討論,對于ODDR2有著類

7、似的情況,大家可以自己理解一下。參考圖6圖7即可。想到一個資源守恒的公理,就是自然界普遍存在的tradeoff現象。如果添加一個寄存器抽樣, 則系統負擔降低; 反之如果想少使用資源, 不使用這個抽樣寄存器, 則全系統的負擔會提高。這個例子告訴我們兩個道理1 .tradeoff普遍存在2 .四兩可以撥千斤SelectIOSelectIO 信號標準S3E可以支持很多接口信號標準,比如最常見的LVTTL、LVCMOS系歹U、PCI系歹U。此外,還支持差分信號標準,典型的比如LVDS系列。要實現指定的信號標準有兩個必要條件:1 .內在設置: 在UCF文件中對指定pin設置IOSTANDARD屬性, 這

8、樣FPGA會自動切換指定IOB的信號標準;2 .外在設置:每個信號標準都要求指定的Vcco(有些還要求指定的Vref),因此要在PCB板上提供相應的Vcco支持。再來說說差分信號,他的優(yōu)點是差分信號固有的噪聲消除特性來提高數據的可靠性,從而提高單路數據的傳輸速率。差分信號的命名有套規(guī)則,比如:IO_L43P_3和IO_L43N_3就表示Bank3里面第43對差分線的正負兩根線。差分信號的 terminationtermination差分信號一般傳輸速率較高,因此對信號的完整性有嚴格要求。方法之一就是使用termination來防止信號反射。為了減少用戶的外部負擔,S3E實現了內部的差分term

9、ination。使用方法就是在UCF中加入下列語句。INSTDIFF_TERM=;上拉下拉電阻pullup、pulldown的主要目的就是將懸空的管腳引導到確定的狀態(tài),避免未知的干擾。所以在懸空的管腳,確定輸入的管腳以及三態(tài)管腳上用的比較多。要修改管腳的pullup、pulldown、float屬性,可以在BitGen的時候從GenerateProgrammingFile的屬性中選擇保持電路三態(tài)信號在沒有驅動的時候懸空,為了防止懸空,有一個保持電路可以幫助信號保持在前一邏輯狀態(tài)。具體使用方法-使用KEEPER屬性-使用KEEPER庫原語注意,如果使用了上下拉電阻,則該屬性被重置,因為實現的功能

10、是類似的。差異是上下拉將懸空信號拉回確定值,而KEEPER是保持回前一邏輯值。電平轉換速率 SlewRateSlewRateSlewRate用于設置IOB輸出電平的切換速率。速率太低則很多接口時序得不到保障,因此有時候需要使用高速的切換速率。實現的方法就是加大驅動電流,從2mA到16mA,每2mA有一個選擇。電流越大,當然驅動能力越強,相應的電平切換速率也更快。但是高速的切換會導致PCB電路的傳輸線效應,所以只要能滿足應用,盡量采用低速的SlewRateBankBank 內的 IOBIOB 組織S3E的四邊各有一個IOB的BanKo每個Bank可以有自己獨立的Vcco和Vref,所以一般的,每

11、個bank可以有自己獨立的電平標準。有些電平標準有相同的Vcco,則在該Bank內可以支持多個電平標準。對于差分信號,每個Bank都可以支持下面三個差分標準中的任意兩個-LVDS_25-MINI_LVDS_25-RSDS_25但是不能做到同時支持這三個標準BankBank 內部電平標準的規(guī)則Vcco規(guī)則:- - 所有Vcco必須連接,即使不使用某個bank;- - 同屬于某個Bank的所有Vcco必須設置為相同的電平- - 所有Vcco必須和指定的電平標準電壓相符- - 如果某個bank沒有指定電平標準,則將其連接到任意電平,比如2.5或者3.3VVref規(guī)則:(前提是該電平標準要求使用Vre

12、f)- - 所有Vref必須連接,即使不使用某個bank;- - 同屬于某個Bank的所有Vref必須設置為相同的電平- - 所有Vref必須和指定的電平標準電壓相符如果某個bank對應的電平標準不需要Vref來偏置輸入切換門限,則該Vref管腳可以用做用戶IO或者輸入管腳。專用的輸入管腳專用輸入管腳一般用IP_Lxxx_x表示。對于專用輸入管腳,沒有差分termination。靜電保護在每個IO上都有靜電保護,大家看文檔的圖1就明白了。在pad-Vcco之間有P-N偏置保護。在pad-GND之間有N-P偏置保護。在靜電過大的時候,通過這兩個保護二極管可以直接將電流泄洪到電源與地IOBIOB

13、的電源支持Vcco用于對驅動輸出的支持。Vccint用于驅動內部邏輯。Vccaux是輔助電源,用于優(yōu)化FPGA性能(這個誰有補充?)在上電、配置、用戶模式下,IOIO 的行為分析- - 上電狀態(tài)首先,電源穩(wěn)定。Vcco、Vccint、Vccaux作為內部主電復位電路”的必要電源輸入,必須達到穩(wěn)定狀態(tài)。這些基本電源穩(wěn)定了才能實現上電復位,芯片才能進入配置狀態(tài)。其次,IO高阻上拉,切斷外部接口。HSWAP管腳被施加一個低電平。注意,這個低電平會維持到配置結束。這個低電平的作用是將用戶IO全部上拉。我想這樣做的目的是令所有IO進入確定狀態(tài),避免對配置操作的干擾。最后,全局復位,切斷邊緣存儲通道。FP

14、GA內部設置全局置位復位”,異步方式將所有IOB存儲單元清零- - 配置階段首先,確定配置模式。INIT_B高電平,并抽樣M0,M1,M2的值,據此確定配置模式。然后,下載數據到FPGA。注意,整個配置期間,IO繼續(xù)保持高阻上拉狀態(tài)。最后,釋放GSRo釋放全局GSR,IOB寄存器回到默認的Low狀態(tài),除非設計中改變了SR輸入的極性,否則都是Low狀態(tài)。- - DesignOperationDesignOperation 階段首先,全局三態(tài)釋放,打通外部接口。GTS釋放,令所有IO都進入活躍狀態(tài),未使用的IO則被弱下拉。通過在BitGen中設置屬性,可以修改GTS釋放后未使用IO的狀態(tài)設置,比如

15、上拉、下拉、懸空。其次,全局寫使能,打通內部存儲通道。在一個時鐘后,GWE全局寫使能被釋放。這樣RAM和寄存器就都可以寫入了,也就是設計可以動作起來了。注意,在該階段HSWAP釋放,所以他也可以被用作普通的GPIO?!旧厦娴倪@個內容是寫到現在最重要的一部分,對于理解整個 FPGA 的啟動過程非常有幫助?!緾LBCLB 概覽CLB是可配置邏輯塊的簡稱。這是FPGA整個矩形配置結構中的基本單元。1CLB=2X2Slice1Slice=2(LUT+FF)+其他運算、進位、MUX資源每個CLB都是相同的,所以知道一個就知道了全部。接下來重點研究CLB。SliceSlice上面講到了一個CLB有2*2個

16、Slice。這個4個slice可以分成左右兩對,我們來看他們的主要區(qū)別。左邊的是SLICE-M,帶有存儲增強功能(分布式存儲器,移位寄存器等)。右邊的是SLICE-L,沒有存儲增強功能。那么為什么左右不一樣呢?我認為,提供SLICE-M的目的就是為了讓通用FPGA能夠對存儲應用有更多支持。那為什么右邊的沒有存儲增強呢?最重要的原因是減小CLB右側的面積,從而降低整個芯片的價格成本。同時,純粹的logic設計可以提供比混雜設計的SLICE-M更優(yōu)的性能。LogicCellLogicCell 的概念經常有人混淆CLB和LC的概念。這里就給大家澄清一下。CLB就不用講了,就是上面說到的2*2slic

17、e陣列構成的可配置邏輯塊。LC則比CLB要小多了。如果給個公式就是:LogicCell=1LUT+1FF(存儲單元)那么一個Slice等價于多少LC呢?看到后面的內容你會知道,一個Slice里面有兩個LUT和兩個FF,但是除此之外,還有些運算增強單元。所以Xilinx給出的S3E的slice等價LC個數為:2.25SliceSlice 結構概覽終于講到Slice了。這個是研究FPGA的重中之重。接下來要分成若干小點分別講述,如果要觀察全部結構則最好參考14頁的圖12.這個圖是Slice-M的結構圖,注意里面的虛線部分是SliceM專有結構,在slice-L中并不存在。通過比較,SliceL的結

18、構也就非常清晰了。邏輯通路與 bypassbypass 通路一個slice可以簡單分成上下兩部分,兩部分的結構基本一致,有著近乎相同的元素。下半部分一般冠以前綴或者后綴“F;上半部分則冠以前綴或者后綴“G G?,F在以F為例,來研究一下主要的數據通路。參考的圖片主要還是14頁的圖12,這個圖太經典了。先來說明一下邏輯路徑,這個路徑必然經過LUT,否則就不能成為邏輯路徑,而只能成為旁路路徑??偨Y一下,主要的邏輯路徑是5個:大家有興趣的話,可以自己用筆標示一下這些通路,非常清晰。如果要記憶的話,其實也很簡單,一是邏輯運算后的直接輸出和寄存器輸出;二是加法、乘法的直接輸出和寄存器輸出;三是LUT4到L

19、UT5甚至更多級的運算擴展輸出。資料中還提到了旁路bypass通路,這個通路的特點是必然不經過LUT,所以稱為旁路。旁路的應用比較多,但是為了集中精力,這里不再展開,大家自己研究吧。LUTLUT 查找表LUT就是lookuptable的簡稱,可以稱為查找表。因為一個邏輯運算的與非門實現和ROM形式的查找表實現是完全等價的,這個在數電知識里學過的。在FPGA中,邏輯電路的實現,主要就是依靠LUT。當然在SliceM中,LUT的能力更強,可以被配置成為DistributedRAM或者16位移位寄存器。此外,在Spartan3E中,所有的LUT都是LUT-4也就是4輸入的,但是他們可以擴展為LUT-

20、5/6/7/8,方法就是我們接下來要介紹的wideMUXWideMultiplexersWideMultiplexers 構造高階 LUTiLUTi 的神兵利器有了LUT4,如何實現LUT5?這個問題的答案其實很簡答。對于4位輸入的邏輯可以用LUT實現,那么對于一個5位輸入的實現,就可以這樣來做。首先假設第5比特為0,在這個前提下,5位邏輯就變成了4位邏輯,用一個LUT4(F)實現。然后假設第5比特為1,在這個前提下,5位邏輯也變成了4位邏輯,用另一個LUT4(G)實現。最后,我們把這兩個LUT4的輸出值用一個MUX連接,當第5比特為0,我們就選通F,為1則選通Go這樣通過整合兩個LUT4和一

21、個MUX,另外用第5比特作為選通信號,我們得到了一個等價的LUT5。循環(huán)使用上述方法,我們可以進一步得到LUT-6/7/8.可以發(fā)現這里非常重要的一個資源就是MUX,Spartan3E稱為widemultiplexero在一個Slice中,下半部分只提供F5MUX,也就是用于構造LUT5的MUX。而在上半部分中則沒有F5MUX,因為一個slice剛好兩個LUT4,有一個F5MUX就夠了。但是上半部分提供了一個FiMUX,這個i可以是6、7、8。這樣,上半部的FiMUX就為擴展更大規(guī)模的LUT-i提供了物質基礎。.5.從LUT輸出后,再通過X口,離開CLB從LUT輸出后再經過從LU

22、T輸出后再經過上述三種情況中,不從從LUT輸出后再經過XOR運算(加法或乘法應用),再通過X口,離開CLBF5MUX(等價于LUT-5擴展),在通過X口或者F5,離開CLBX口輸出,而是經由FF輸出,通過XQ,離開CLBCYMUX,參與到加法運算的進位鏈中如果要細究一下哪些slice提供F6/7/8MUX,可以這樣來歸納。一個CLB中的下面兩個slice,只能提供F6MUX。上面的兩個slice中,SliceM提供F7MUX,SliceL提供F8MUX。另外,LUT作為4比特邏輯能夠實現2:1MUX功能,因此借助wideMUX可以實現更高階的MUX。最后重點關注一下F5MUX中提高性能的一個細

23、節(jié)。F5MUX的選通輸出,如果要構造LUT-6,就可以直接將輸出繞回本Slice的F6MUX。為此,F5MUX特意創(chuàng)建了兩個輸出口,一個輸出到CLB外,一個則利用本地反饋電路快速繞回到FiMUX進行級聯。進位與算術邏輯這是Slice結構部分的高階知識。Slice的主角是LUT,他有個缺陷,就是比較適合完成普通的邏輯設計,也就是單比特輸出的運算。但是在設計中,大量用到算術邏輯,最常見的就是乘法和加法,這些運算的特點就是多個輸出。比如帶進位的1比特加法運算,結果有兩個比特,一個是部分和,一個是進位。如果用LUT來實現的話,這么一個簡單的運算都至少需要兩個LUT來完成,非常浪費。為了避免這種浪費,X

24、ilinx想出了妙計, 就是在Slice中添加幾個簡單的XOR和AND門。 這些門數量極少, 但是畫龍點睛, 把算術邏輯激活了。比如上面的單比特加法,只使用一個LUT,然后搭配簡單的幾個門就搞定了,大大節(jié)省資源。我們看以參考經典的圖12和圖20、21,我們發(fā)現,支持算術邏輯的單元并不多。在slice的上下兩側各有這樣一套資源。每套資源都是一個三元組:AND、XOR、CYMUX。結合圖20、21,我們可以領悟到,這些資源其實就是為了實現部分和”運算和部分積”運算而實現的。從而構造出一個完整的、高效的算術邏輯運算通道。對于加法和乘法,產生部分和以及部分積是在橫向完成的,并且沒有積累,所以時序上沒有

25、問題。但是進位鏈由于具有累積效應,因此必須有專門的針對性設計。我們可以看到Spartan3E里面就有這樣的一條進位鏈自下往上,通過一堆級聯的MUX快速輸出。這個就是Xilinx的進位鏈優(yōu)化電路。存儲單元存儲單元是通用的設計,可以配置成為FF,也可以配置成為Latch。關于兩者的差異,請自己查閱手冊?;旧洗鎯卧妮斎霐祿碜詢蓚€部分:1 .LUT組合邏輯輸出;2 .旁路數據一個存儲單元有12個輸入輸出口,當然配置在不同的類型下,會使用到不同的接口。D-Q是輸入輸出數據信號,我給他列成一對;C-CE是時鐘和時鐘使能,也是一對;G-GE是配置為latch時的門和門使能信號,又是一對;S-R是同步

26、set/reset信號,兩者取反,所以等效于一個信號;PRE-CLR是異步set/reset信號,兩者取反,所以等效于一個信號;SR-REV和S-R以及PRE-CLR是一個系列,只不過他們是CLB的輸入信號,在Slice內部,他們化身成了S-R以及PRE-CLR。注意SR是一個通用用法,你可以通過SRLOW和SRHIGH屬性來將其設置為SET用途還是Reset用途。提一下REV,這個信號和SR同時作用,當他有效時,set/reset的值就取反。感覺很全面,不過又感覺好無聊,盡整一些沒用的東西。分布式存儲 DistributedRAMDistributedRAM一個SliceMLUT存儲16位數

27、據(RAM16)。通過多個LUT的組合,可以對寬度和深度進行擴展,比如16x4,32x2,64x1。要提高地址空間就需要有地址線的擴展,LUT4只接收4位地址,擴展的地址由BX、BY兩個旁路信號提供。有了這兩個信號,地址就是6位的,深度就是64。寫操作是同步的,也就是和寫時鐘(SliceM的CLK)同步。讀操作則是異步的,隨時反映當前讀地址的內容。接下來重點研究一下SliceM如何構造dualportRAM。這個非常巧妙。建議大家對照圖12、23進行研究。注意SliceM中上面的LUT可以同時讀寫,而下面的是只讀的。這和dualport的定義有關,dualport是一側只讀、一側只寫,所以有一

28、個讀,來減小控制邏輯。由于在邏輯上只有一個存儲空間,所以兩塊LUT的內容必須一致。這就要求所以寫操作必須同時反映到兩個LUT,要完成這一點,必須令寫使能、寫地址、寫數據同時反映到兩個LUT。觀察圖12的兩個LUT的WS(寫使能)、WG-WF(寫地址)、D1(寫數據)的級聯關系就明白了。好了,到此我們保證了寫操作的正確性和兩塊LUT的內容一致性。那么讀操作怎么完成呢?我們觀察到,除了WG-WF,還有一個名為A4:1的地址總線。這個地址總線獨立于寫地址總線,從而確保了獨立的讀操作。然后讀出的數據由LUT的D端輸出。作為DualportRAM使用的時候,讀數據從下端LUT的D口輸出。最后,介紹一個使

29、用注意:1 .INIT屬性用于初始化RAM;LUT完全可以只2 .如果只要ROM功能,則SliceL也可以提供;3 .全局寫使能信號GWE在配置階段關閉,可以防止對RAM初始值的干擾;總之,通過上面的內容我們明白了,SliceM和SliceL在存儲支持上的最大區(qū)別:- SliceL只能支持讀功能,比如ROM- SliceM則支持讀寫以及DualPort實現,因此在讀寫地址獨立和輸入數據通道等方面做了增強移位寄存器-構造Slice-M的LUT有個優(yōu)勢,就是可以構造16位的移位寄存器。由于一個SliceM內有兩個LUT,所以可以級聯構造32位寄存器。進一步,一個CLB內有上下兩個SliceM,可以

30、構造64位的移位寄存器。事實上,以此類推,多個CLB可以進一步構造更長的移位寄存器。-例化要使用移位寄存器可以使用SRL16(ShiftRegisterLUT16bit),他有很多變種,可以構造出多種形式的近似的移位寄存器。他的輸出有兩個,一個是可尋址的輸出,這是可變長度的移位寄存器的輸出。另外一個名為MC15,是LUT中的最后一個比特,用于多個移位寄存器級聯時使用。因為級聯的上級SR總是從最后一個比特連到下一個SR。移位寄存器有原語,好像是SSRL16,大家可以試用一下。在Xilinx的技術文檔中可以找到更多的SR形式。-不包括FF很多人疑惑,SR中是否有FF存在,其實圖25清楚的回答了這個

31、問題??梢钥吹絊R是完全由SliceM的LUT實現的,FF不在其內。當然可以在SR之外和FF連接,構造更長的SR。BlockRAMBlockRAM 概覽在spartan3E系列中,每個FPGA基本有4-36個BRAM。每個這樣的BRAM都是DualPort的、可配置的18Kbit存儲器。為什么是18Kbit呢,可以這樣記憶,16K做數據,2K做校驗位。當然你一定要放18K數據也是可以的,但是涉及初衷肯定是考慮了校驗位的需要。所以以后如果使用小的內存就用我們前面講過的Slice(LUT)分布式RAM。如果要大塊的,就不要麻煩了,直接例化BRAM。BRAM有幾種主要的可配置項:- 初始值(比如可以

32、放啟動軟件代碼)- 端口aspectratio,這個我會在后面介紹,簡單講就是輸入輸出數據長度的不對稱配置- 寫狀態(tài)下的數據輸出模式- 單端口雙端口配置BRAMBRAM 的片上位置BRAM和乘法器相鄰,兩者一起以12縱列的形式放在FPGA內部。根據FPGA的大小,有些只有1歹U,有些有2列。每個BRAM都和一個18x18的乘法器相鄰。BRAM的A口上端16位和乘法器A口上端16位共享。BRAM的B口上端16位和乘法器B口上端16位共享。不知道這樣做的目的是什么,請大家補充BRAMBRAM 的端口結構BRAM被配置為雙端口結構。每個端口都有其獨立的數據、控制、時鐘總線。根據這個特點,一個BRAM

33、可以有四種基本的讀寫數據通路:- 只從A端口讀和寫- 只從B端口讀和寫-A寫B(tài)讀-B寫A讀通過原語調用 BRAMBRAMBRAM的調用原語有兩種,一種是當做dualport調用,一種是當做singleport調用。當dualport調用時,使用原語RAMB16_Swa_Swb,例如-RAMB16_S9_S18:雙端口RAM,A端口寬度為9,B端口寬度為18當singleport調用時,使用原語RAMB16_Sw,例如-RAMB16_S18:單端口RAM,端口寬度為18BRAMBRAM 端口寬度比和很多人先入為主的印象不一樣,BRAM是支持靈活的端口寬度的。端口A和端口B相互獨立,兩者可以配置成

34、為不同的寬度。通過尋址單位(A/B端口各不相同)的適配,兩側都能實現正確尋址。比如一側寬,一側窄,則在窄的一側尋址時,寬的數據被分割成窄的數據單元。相反的,在寬的一側尋址時,窄的數據被合并成寬的數據單元。圖28非常經典。建議大家反復欣賞。假設A端口寬度為36位,則一個36位數據(4個字節(jié),以及4個相應校驗位)只占1個尋址單元?,F在來對B端口寬度的各種情況進行假設:-36位:和A端口一樣,原來的36位仍然占用一個尋址單元-18位:原36位數據(含校驗位)均勻的一分為二(2x2字節(jié)+2比特校驗),占用2個尋址單元。-09位:原36位數據(含校驗位)均勻的一分為四(4x1字節(jié)+1比特校驗),占用4個

35、尋址單元。-04位:原36位數據的4比特校驗位被丟棄,原數據分割為(8x4比特),占用8個尋址單元。-02位:原36位數據的4比特校驗位被丟棄,原數據分割為(16x2比特),占用16個尋址單元。-01位:原36位數據的4比特校驗位被丟棄,原數據分割為(32x1比特),占用32個尋址單元。注意:當寬度小于8比特時,因為原來的字節(jié)校驗無法繼承下來,所以校驗信息被丟棄。BRAMBRAM 屬性定義-INITxx(INIT00INIT3F)初始化BRAM數據位,在配置階段載入,每個初始化字符串定義32個Hex值,總共16Kbit。(貌似有筆誤,INIT7F才符合)-INITPxx(INITP00INIT

36、P0F)初始化BRAM校驗位,在配置階段載入,每個初始化字符串定義32個Hex值,總共2Kbit。-INIT(單端口)INITA/INITB(雙端口)數據輸出鎖存初始化,是一個和端口寬度匹配的Hex值。-SRVAL(單端口)SRVAL_A/SRVAL_B(雙端口)數據輸出鎖存同步重置,是一個和端口寬度匹配的Hex值,用于重置輸出鎖存值。-WRITE_MODE數據輸出鎖存行為(寫操作下):有先讀、先寫、不變,一共三種模式寫操作下的數據輸出鎖存行為這是緊接著上面的內容寫的。在寫操作下,數據如何輸出,一般不怎么關心。但是在特殊的應用下,設置不同的模式,可能可以提供到便利。我們只要大概理解就行了。- 先寫這種模式下,正在寫的數據穿腸而過,直接輸出。- 先讀這種模式下,寫地址處的原數據被讀出。用于保護原始數據非常有用。- 不變這種模式下,寫操作前的輸出數據被鎖存并持續(xù)輸出,整個寫操作期間都不改變。BRAM到此就結束了,想想真的沒有什么內容。專用乘法器FPGA在數字信號處理方面比DSP的功能要弱。但是為了爭取更多用戶,FPGA也把DSP的核心一一專用乘法器帶入了芯片。一個典型的乘法器有著18X18=36的輸入輸出結構。兩個輸入端口和一個輸出端口都有可選的寄存器,用于適配不同的應用需求。調用乘

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論