




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、XilinxFPGA 內(nèi)部結(jié)構(gòu)深入分析作者:fpga001。論壇:芯片動力(SocVista)。網(wǎng)頁地址:http: 的結(jié)構(gòu)請大家看到手冊的第1頁,這是IOB的review部分。IOblock是高手的領(lǐng)地,一般接觸FPGA第一年都不會太關(guān)心到這個部分。注意看,IOB有三個數(shù)據(jù)通道:輸入、輸出、三態(tài)控制。每個通道都有一對存儲器件,他們可以當(dāng)做寄存器或者鎖存起來使用,視乎你的設(shè)置。輸入通道有可編程的延遲模塊,可以確保holdtime為零。(這是在什么場合使用?請達人補充?。┝硗饪梢钥吹捷斎胼敵鐾ǖ蓝加型陚涞腄DR支持,這個在后面可以看到。所有圖都請參考PDF原文,這里就不再粘貼了。可編程輸入延遲看
2、到手冊第3頁,這個像兩根魚骨似的構(gòu)造就是輸入延遲了。輸入延遲一共16節(jié),每節(jié)250ps,所以總共的延遲在04ns之間。這個魚骨的構(gòu)造非常巧妙,前面8節(jié)直接級聯(lián),只有一個輸出。這樣8節(jié)以內(nèi)的調(diào)整就跳過這根長魚骨;而超過8節(jié)的調(diào)整就直接利用第一根魚骨,然后在后面的8節(jié)中進行微調(diào)。調(diào)整的輸出分別供給IOB中的異步和同步單元,異步就是直接穿過IOB,同步則是經(jīng)由存儲單元流出IOB。異步單元精度較高,可以單節(jié)調(diào)整,所以精度為250ps;同步單元精度稍低,兩個節(jié)為單位調(diào)整,所以精度只有500ps。上述內(nèi)容看圖便知可編程輸入延遲的設(shè)置輸入延遲的設(shè)置只能在Image配置的時候建立, 在設(shè)備工作期間無法改變。
3、我想有兩種方法可以改變輸入延遲的設(shè)置:1 .通過延遲原語在代碼中設(shè)置;2 .通過FPGAeditor在P&R完成后在ngc文件中修改。存儲單元存儲單元可以配置為D觸發(fā)器,就是我們常說的FF,Xilinx稱之為FD;也可以配置為鎖存器,Xilinx稱之為LD。輸出和三態(tài)通路各有一對寄存器外加一個MUX。利用這種2+1的組合可以產(chǎn)生DDR操作,Xilinx稱之為ODDR2。每個存儲單元都有6個接口信號:時鐘+時鐘時能,數(shù)據(jù)輸入+輸出,置位復(fù)位+翻轉(zhuǎn)輸入除了這些信號,存儲單元還有一些屬性設(shè)置:- FF/Latch可以用來配置存儲單元的類型;- Sync/Async配置置位復(fù)位的方式;- SRHIGH
4、/SRLOW配置是置位(1)還是復(fù)位(0);INIT1/INIT0配置置位復(fù)位的初始值,一般置位(1)復(fù)位(0);DDRDDR 支持輸入、輸出、三態(tài)。這三個IOB通道都可以實現(xiàn)DDR支持。輸出和三態(tài)通道可以實現(xiàn)ODDR2原語,這個原語的實現(xiàn)原理可以參考p5的圖3.兩個相差180度的時鐘和兩路信號進入一對寄存器并通過DDR專用MUX輸出,即可得到DDR數(shù)據(jù)輸出。實現(xiàn)相差180度,有兩種方法。一種是通過DCM直接產(chǎn)生這兩個信號。另外的方法是同一時鐘,但是連入寄存器的時鐘端口時,一路取反。輸入通道則實現(xiàn)IDDR2原語。如果輸出、三態(tài)通路實現(xiàn)的是DDR的調(diào)制的話,這一路其實就是DDR的解調(diào),也就是1分
5、為2。當(dāng)然,這里需要提供兩路相差180度的時鐘。另外ODDR2還有一個重要用途,就是用于產(chǎn)生隨路時鐘。只要把兩路數(shù)據(jù)固定為1和0,這樣產(chǎn)生的DDR數(shù)據(jù)其實就是0/1交叉的時鐘信號了,這個一想就明白了吧。這樣做的好處是:數(shù)據(jù)和時鐘都經(jīng)過IOB寄存器處理,具有相同的延遲特性,從而實現(xiàn)了所謂的源同步級聯(lián)”重定時特性一一提高 DDRDDR 的性能在IDDR2和ODDR2的典型實現(xiàn)(圖4圖6)中,存在一個問題.以IDDR2為例,我們可以發(fā)現(xiàn),在經(jīng)典實現(xiàn)中,輸出的兩路數(shù)據(jù)分別與時鐘的兩個邊沿對齊。但是,強調(diào)一下,后端的系統(tǒng)中往往只有一個時鐘,工作在上升沿。那么對于下降沿對齊輸出的數(shù)據(jù),從下降沿開始到上升沿
6、被采樣,只有半個時鐘的余量來穩(wěn)定輸出并滿足setup。由于FPGA系統(tǒng)比較復(fù)雜從IOB出來的數(shù)據(jù)要進入到下一個存儲單元可能會經(jīng)歷非常漫長的邏輯和路由延遲。要在半個時鐘內(nèi)完成,有很大的挑戰(zhàn)性,尤其是在高速系統(tǒng)中,往往有很大的困難。Spartan3E的解決辦法是,利用相鄰從屬IOB的存儲單元,對下降沿輸出的數(shù)據(jù)馬上做一次上升沿抽樣。由于兩個IOB相鄰,不存在復(fù)雜的邏輯和路由延遲,因此雖然余量也是半個時鐘,但一般情況下甚至高速系統(tǒng)下也可以成功實現(xiàn)。這樣數(shù)據(jù)就回到了上升沿時鐘域。到了上升沿時鐘域,則數(shù)據(jù)有一個時鐘的時間余量,處理起來就和普通的情況一樣了。以上是關(guān)于IDDR2的討論,對于ODDR2有著類
7、似的情況,大家可以自己理解一下。參考圖6圖7即可。想到一個資源守恒的公理,就是自然界普遍存在的tradeoff現(xiàn)象。如果添加一個寄存器抽樣, 則系統(tǒng)負擔(dān)降低; 反之如果想少使用資源, 不使用這個抽樣寄存器, 則全系統(tǒng)的負擔(dān)會提高。這個例子告訴我們兩個道理1 .tradeoff普遍存在2 .四兩可以撥千斤SelectIOSelectIO 信號標(biāo)準(zhǔn)S3E可以支持很多接口信號標(biāo)準(zhǔn),比如最常見的LVTTL、LVCMOS系歹U、PCI系歹U。此外,還支持差分信號標(biāo)準(zhǔn),典型的比如LVDS系列。要實現(xiàn)指定的信號標(biāo)準(zhǔn)有兩個必要條件:1 .內(nèi)在設(shè)置: 在UCF文件中對指定pin設(shè)置IOSTANDARD屬性, 這
8、樣FPGA會自動切換指定IOB的信號標(biāo)準(zhǔn);2 .外在設(shè)置:每個信號標(biāo)準(zhǔn)都要求指定的Vcco(有些還要求指定的Vref),因此要在PCB板上提供相應(yīng)的Vcco支持。再來說說差分信號,他的優(yōu)點是差分信號固有的噪聲消除特性來提高數(shù)據(jù)的可靠性,從而提高單路數(shù)據(jù)的傳輸速率。差分信號的命名有套規(guī)則,比如:IO_L43P_3和IO_L43N_3就表示Bank3里面第43對差分線的正負兩根線。差分信號的 terminationtermination差分信號一般傳輸速率較高,因此對信號的完整性有嚴(yán)格要求。方法之一就是使用termination來防止信號反射。為了減少用戶的外部負擔(dān),S3E實現(xiàn)了內(nèi)部的差分term
9、ination。使用方法就是在UCF中加入下列語句。INSTDIFF_TERM=;上拉下拉電阻pullup、pulldown的主要目的就是將懸空的管腳引導(dǎo)到確定的狀態(tài),避免未知的干擾。所以在懸空的管腳,確定輸入的管腳以及三態(tài)管腳上用的比較多。要修改管腳的pullup、pulldown、float屬性,可以在BitGen的時候從GenerateProgrammingFile的屬性中選擇保持電路三態(tài)信號在沒有驅(qū)動的時候懸空,為了防止懸空,有一個保持電路可以幫助信號保持在前一邏輯狀態(tài)。具體使用方法-使用KEEPER屬性-使用KEEPER庫原語注意,如果使用了上下拉電阻,則該屬性被重置,因為實現(xiàn)的功能
10、是類似的。差異是上下拉將懸空信號拉回確定值,而KEEPER是保持回前一邏輯值。電平轉(zhuǎn)換速率 SlewRateSlewRateSlewRate用于設(shè)置IOB輸出電平的切換速率。速率太低則很多接口時序得不到保障,因此有時候需要使用高速的切換速率。實現(xiàn)的方法就是加大驅(qū)動電流,從2mA到16mA,每2mA有一個選擇。電流越大,當(dāng)然驅(qū)動能力越強,相應(yīng)的電平切換速率也更快。但是高速的切換會導(dǎo)致PCB電路的傳輸線效應(yīng),所以只要能滿足應(yīng)用,盡量采用低速的SlewRateBankBank 內(nèi)的 IOBIOB 組織S3E的四邊各有一個IOB的BanKo每個Bank可以有自己獨立的Vcco和Vref,所以一般的,每
11、個bank可以有自己獨立的電平標(biāo)準(zhǔn)。有些電平標(biāo)準(zhǔn)有相同的Vcco,則在該Bank內(nèi)可以支持多個電平標(biāo)準(zhǔn)。對于差分信號,每個Bank都可以支持下面三個差分標(biāo)準(zhǔn)中的任意兩個-LVDS_25-MINI_LVDS_25-RSDS_25但是不能做到同時支持這三個標(biāo)準(zhǔn)BankBank 內(nèi)部電平標(biāo)準(zhǔn)的規(guī)則Vcco規(guī)則:- - 所有Vcco必須連接,即使不使用某個bank;- - 同屬于某個Bank的所有Vcco必須設(shè)置為相同的電平- - 所有Vcco必須和指定的電平標(biāo)準(zhǔn)電壓相符- - 如果某個bank沒有指定電平標(biāo)準(zhǔn),則將其連接到任意電平,比如2.5或者3.3VVref規(guī)則:(前提是該電平標(biāo)準(zhǔn)要求使用Vre
12、f)- - 所有Vref必須連接,即使不使用某個bank;- - 同屬于某個Bank的所有Vref必須設(shè)置為相同的電平- - 所有Vref必須和指定的電平標(biāo)準(zhǔn)電壓相符如果某個bank對應(yīng)的電平標(biāo)準(zhǔn)不需要Vref來偏置輸入切換門限,則該Vref管腳可以用做用戶IO或者輸入管腳。專用的輸入管腳專用輸入管腳一般用IP_Lxxx_x表示。對于專用輸入管腳,沒有差分termination。靜電保護在每個IO上都有靜電保護,大家看文檔的圖1就明白了。在pad-Vcco之間有P-N偏置保護。在pad-GND之間有N-P偏置保護。在靜電過大的時候,通過這兩個保護二極管可以直接將電流泄洪到電源與地IOBIOB
13、的電源支持Vcco用于對驅(qū)動輸出的支持。Vccint用于驅(qū)動內(nèi)部邏輯。Vccaux是輔助電源,用于優(yōu)化FPGA性能(這個誰有補充?)在上電、配置、用戶模式下,IOIO 的行為分析- - 上電狀態(tài)首先,電源穩(wěn)定。Vcco、Vccint、Vccaux作為內(nèi)部主電復(fù)位電路”的必要電源輸入,必須達到穩(wěn)定狀態(tài)。這些基本電源穩(wěn)定了才能實現(xiàn)上電復(fù)位,芯片才能進入配置狀態(tài)。其次,IO高阻上拉,切斷外部接口。HSWAP管腳被施加一個低電平。注意,這個低電平會維持到配置結(jié)束。這個低電平的作用是將用戶IO全部上拉。我想這樣做的目的是令所有IO進入確定狀態(tài),避免對配置操作的干擾。最后,全局復(fù)位,切斷邊緣存儲通道。FP
14、GA內(nèi)部設(shè)置全局置位復(fù)位”,異步方式將所有IOB存儲單元清零- - 配置階段首先,確定配置模式。INIT_B高電平,并抽樣M0,M1,M2的值,據(jù)此確定配置模式。然后,下載數(shù)據(jù)到FPGA。注意,整個配置期間,IO繼續(xù)保持高阻上拉狀態(tài)。最后,釋放GSRo釋放全局GSR,IOB寄存器回到默認的Low狀態(tài),除非設(shè)計中改變了SR輸入的極性,否則都是Low狀態(tài)。- - DesignOperationDesignOperation 階段首先,全局三態(tài)釋放,打通外部接口。GTS釋放,令所有IO都進入活躍狀態(tài),未使用的IO則被弱下拉。通過在BitGen中設(shè)置屬性,可以修改GTS釋放后未使用IO的狀態(tài)設(shè)置,比如
15、上拉、下拉、懸空。其次,全局寫使能,打通內(nèi)部存儲通道。在一個時鐘后,GWE全局寫使能被釋放。這樣RAM和寄存器就都可以寫入了,也就是設(shè)計可以動作起來了。注意,在該階段HSWAP釋放,所以他也可以被用作普通的GPIO?!旧厦娴倪@個內(nèi)容是寫到現(xiàn)在最重要的一部分,對于理解整個 FPGA 的啟動過程非常有幫助?!緾LBCLB 概覽CLB是可配置邏輯塊的簡稱。這是FPGA整個矩形配置結(jié)構(gòu)中的基本單元。1CLB=2X2Slice1Slice=2(LUT+FF)+其他運算、進位、MUX資源每個CLB都是相同的,所以知道一個就知道了全部。接下來重點研究CLB。SliceSlice上面講到了一個CLB有2*2個
16、Slice。這個4個slice可以分成左右兩對,我們來看他們的主要區(qū)別。左邊的是SLICE-M,帶有存儲增強功能(分布式存儲器,移位寄存器等)。右邊的是SLICE-L,沒有存儲增強功能。那么為什么左右不一樣呢?我認為,提供SLICE-M的目的就是為了讓通用FPGA能夠?qū)Υ鎯?yīng)用有更多支持。那為什么右邊的沒有存儲增強呢?最重要的原因是減小CLB右側(cè)的面積,從而降低整個芯片的價格成本。同時,純粹的logic設(shè)計可以提供比混雜設(shè)計的SLICE-M更優(yōu)的性能。LogicCellLogicCell 的概念經(jīng)常有人混淆CLB和LC的概念。這里就給大家澄清一下。CLB就不用講了,就是上面說到的2*2slic
17、e陣列構(gòu)成的可配置邏輯塊。LC則比CLB要小多了。如果給個公式就是:LogicCell=1LUT+1FF(存儲單元)那么一個Slice等價于多少LC呢?看到后面的內(nèi)容你會知道,一個Slice里面有兩個LUT和兩個FF,但是除此之外,還有些運算增強單元。所以Xilinx給出的S3E的slice等價LC個數(shù)為:2.25SliceSlice 結(jié)構(gòu)概覽終于講到Slice了。這個是研究FPGA的重中之重。接下來要分成若干小點分別講述,如果要觀察全部結(jié)構(gòu)則最好參考14頁的圖12.這個圖是Slice-M的結(jié)構(gòu)圖,注意里面的虛線部分是SliceM專有結(jié)構(gòu),在slice-L中并不存在。通過比較,SliceL的結(jié)
18、構(gòu)也就非常清晰了。邏輯通路與 bypassbypass 通路一個slice可以簡單分成上下兩部分,兩部分的結(jié)構(gòu)基本一致,有著近乎相同的元素。下半部分一般冠以前綴或者后綴“F;上半部分則冠以前綴或者后綴“G G?,F(xiàn)在以F為例,來研究一下主要的數(shù)據(jù)通路。參考的圖片主要還是14頁的圖12,這個圖太經(jīng)典了。先來說明一下邏輯路徑,這個路徑必然經(jīng)過LUT,否則就不能成為邏輯路徑,而只能成為旁路路徑??偨Y(jié)一下,主要的邏輯路徑是5個:大家有興趣的話,可以自己用筆標(biāo)示一下這些通路,非常清晰。如果要記憶的話,其實也很簡單,一是邏輯運算后的直接輸出和寄存器輸出;二是加法、乘法的直接輸出和寄存器輸出;三是LUT4到L
19、UT5甚至更多級的運算擴展輸出。資料中還提到了旁路bypass通路,這個通路的特點是必然不經(jīng)過LUT,所以稱為旁路。旁路的應(yīng)用比較多,但是為了集中精力,這里不再展開,大家自己研究吧。LUTLUT 查找表LUT就是lookuptable的簡稱,可以稱為查找表。因為一個邏輯運算的與非門實現(xiàn)和ROM形式的查找表實現(xiàn)是完全等價的,這個在數(shù)電知識里學(xué)過的。在FPGA中,邏輯電路的實現(xiàn),主要就是依靠LUT。當(dāng)然在SliceM中,LUT的能力更強,可以被配置成為DistributedRAM或者16位移位寄存器。此外,在Spartan3E中,所有的LUT都是LUT-4也就是4輸入的,但是他們可以擴展為LUT-
20、5/6/7/8,方法就是我們接下來要介紹的wideMUXWideMultiplexersWideMultiplexers 構(gòu)造高階 LUTiLUTi 的神兵利器有了LUT4,如何實現(xiàn)LUT5?這個問題的答案其實很簡答。對于4位輸入的邏輯可以用LUT實現(xiàn),那么對于一個5位輸入的實現(xiàn),就可以這樣來做。首先假設(shè)第5比特為0,在這個前提下,5位邏輯就變成了4位邏輯,用一個LUT4(F)實現(xiàn)。然后假設(shè)第5比特為1,在這個前提下,5位邏輯也變成了4位邏輯,用另一個LUT4(G)實現(xiàn)。最后,我們把這兩個LUT4的輸出值用一個MUX連接,當(dāng)?shù)?比特為0,我們就選通F,為1則選通Go這樣通過整合兩個LUT4和一
21、個MUX,另外用第5比特作為選通信號,我們得到了一個等價的LUT5。循環(huán)使用上述方法,我們可以進一步得到LUT-6/7/8.可以發(fā)現(xiàn)這里非常重要的一個資源就是MUX,Spartan3E稱為widemultiplexero在一個Slice中,下半部分只提供F5MUX,也就是用于構(gòu)造LUT5的MUX。而在上半部分中則沒有F5MUX,因為一個slice剛好兩個LUT4,有一個F5MUX就夠了。但是上半部分提供了一個FiMUX,這個i可以是6、7、8。這樣,上半部的FiMUX就為擴展更大規(guī)模的LUT-i提供了物質(zhì)基礎(chǔ)。.5.從LUT輸出后,再通過X口,離開CLB從LUT輸出后再經(jīng)過從LU
22、T輸出后再經(jīng)過上述三種情況中,不從從LUT輸出后再經(jīng)過XOR運算(加法或乘法應(yīng)用),再通過X口,離開CLBF5MUX(等價于LUT-5擴展),在通過X口或者F5,離開CLBX口輸出,而是經(jīng)由FF輸出,通過XQ,離開CLBCYMUX,參與到加法運算的進位鏈中如果要細究一下哪些slice提供F6/7/8MUX,可以這樣來歸納。一個CLB中的下面兩個slice,只能提供F6MUX。上面的兩個slice中,SliceM提供F7MUX,SliceL提供F8MUX。另外,LUT作為4比特邏輯能夠?qū)崿F(xiàn)2:1MUX功能,因此借助wideMUX可以實現(xiàn)更高階的MUX。最后重點關(guān)注一下F5MUX中提高性能的一個細
23、節(jié)。F5MUX的選通輸出,如果要構(gòu)造LUT-6,就可以直接將輸出繞回本Slice的F6MUX。為此,F(xiàn)5MUX特意創(chuàng)建了兩個輸出口,一個輸出到CLB外,一個則利用本地反饋電路快速繞回到FiMUX進行級聯(lián)。進位與算術(shù)邏輯這是Slice結(jié)構(gòu)部分的高階知識。Slice的主角是LUT,他有個缺陷,就是比較適合完成普通的邏輯設(shè)計,也就是單比特輸出的運算。但是在設(shè)計中,大量用到算術(shù)邏輯,最常見的就是乘法和加法,這些運算的特點就是多個輸出。比如帶進位的1比特加法運算,結(jié)果有兩個比特,一個是部分和,一個是進位。如果用LUT來實現(xiàn)的話,這么一個簡單的運算都至少需要兩個LUT來完成,非常浪費。為了避免這種浪費,X
24、ilinx想出了妙計, 就是在Slice中添加幾個簡單的XOR和AND門。 這些門數(shù)量極少, 但是畫龍點睛, 把算術(shù)邏輯激活了。比如上面的單比特加法,只使用一個LUT,然后搭配簡單的幾個門就搞定了,大大節(jié)省資源。我們看以參考經(jīng)典的圖12和圖20、21,我們發(fā)現(xiàn),支持算術(shù)邏輯的單元并不多。在slice的上下兩側(cè)各有這樣一套資源。每套資源都是一個三元組:AND、XOR、CYMUX。結(jié)合圖20、21,我們可以領(lǐng)悟到,這些資源其實就是為了實現(xiàn)部分和”運算和部分積”運算而實現(xiàn)的。從而構(gòu)造出一個完整的、高效的算術(shù)邏輯運算通道。對于加法和乘法,產(chǎn)生部分和以及部分積是在橫向完成的,并且沒有積累,所以時序上沒有
25、問題。但是進位鏈由于具有累積效應(yīng),因此必須有專門的針對性設(shè)計。我們可以看到Spartan3E里面就有這樣的一條進位鏈自下往上,通過一堆級聯(lián)的MUX快速輸出。這個就是Xilinx的進位鏈優(yōu)化電路。存儲單元存儲單元是通用的設(shè)計,可以配置成為FF,也可以配置成為Latch。關(guān)于兩者的差異,請自己查閱手冊。基本上存儲單元的輸入數(shù)據(jù)來自兩個部分:1 .LUT組合邏輯輸出;2 .旁路數(shù)據(jù)一個存儲單元有12個輸入輸出口,當(dāng)然配置在不同的類型下,會使用到不同的接口。D-Q是輸入輸出數(shù)據(jù)信號,我給他列成一對;C-CE是時鐘和時鐘使能,也是一對;G-GE是配置為latch時的門和門使能信號,又是一對;S-R是同步
26、set/reset信號,兩者取反,所以等效于一個信號;PRE-CLR是異步set/reset信號,兩者取反,所以等效于一個信號;SR-REV和S-R以及PRE-CLR是一個系列,只不過他們是CLB的輸入信號,在Slice內(nèi)部,他們化身成了S-R以及PRE-CLR。注意SR是一個通用用法,你可以通過SRLOW和SRHIGH屬性來將其設(shè)置為SET用途還是Reset用途。提一下REV,這個信號和SR同時作用,當(dāng)他有效時,set/reset的值就取反。感覺很全面,不過又感覺好無聊,盡整一些沒用的東西。分布式存儲 DistributedRAMDistributedRAM一個SliceMLUT存儲16位數(shù)
27、據(jù)(RAM16)。通過多個LUT的組合,可以對寬度和深度進行擴展,比如16x4,32x2,64x1。要提高地址空間就需要有地址線的擴展,LUT4只接收4位地址,擴展的地址由BX、BY兩個旁路信號提供。有了這兩個信號,地址就是6位的,深度就是64。寫操作是同步的,也就是和寫時鐘(SliceM的CLK)同步。讀操作則是異步的,隨時反映當(dāng)前讀地址的內(nèi)容。接下來重點研究一下SliceM如何構(gòu)造dualportRAM。這個非常巧妙。建議大家對照圖12、23進行研究。注意SliceM中上面的LUT可以同時讀寫,而下面的是只讀的。這和dualport的定義有關(guān),dualport是一側(cè)只讀、一側(cè)只寫,所以有一
28、個讀,來減小控制邏輯。由于在邏輯上只有一個存儲空間,所以兩塊LUT的內(nèi)容必須一致。這就要求所以寫操作必須同時反映到兩個LUT,要完成這一點,必須令寫使能、寫地址、寫數(shù)據(jù)同時反映到兩個LUT。觀察圖12的兩個LUT的WS(寫使能)、WG-WF(寫地址)、D1(寫數(shù)據(jù))的級聯(lián)關(guān)系就明白了。好了,到此我們保證了寫操作的正確性和兩塊LUT的內(nèi)容一致性。那么讀操作怎么完成呢?我們觀察到,除了WG-WF,還有一個名為A4:1的地址總線。這個地址總線獨立于寫地址總線,從而確保了獨立的讀操作。然后讀出的數(shù)據(jù)由LUT的D端輸出。作為DualportRAM使用的時候,讀數(shù)據(jù)從下端LUT的D口輸出。最后,介紹一個使
29、用注意:1 .INIT屬性用于初始化RAM;LUT完全可以只2 .如果只要ROM功能,則SliceL也可以提供;3 .全局寫使能信號GWE在配置階段關(guān)閉,可以防止對RAM初始值的干擾;總之,通過上面的內(nèi)容我們明白了,SliceM和SliceL在存儲支持上的最大區(qū)別:- SliceL只能支持讀功能,比如ROM- SliceM則支持讀寫以及DualPort實現(xiàn),因此在讀寫地址獨立和輸入數(shù)據(jù)通道等方面做了增強移位寄存器-構(gòu)造Slice-M的LUT有個優(yōu)勢,就是可以構(gòu)造16位的移位寄存器。由于一個SliceM內(nèi)有兩個LUT,所以可以級聯(lián)構(gòu)造32位寄存器。進一步,一個CLB內(nèi)有上下兩個SliceM,可以
30、構(gòu)造64位的移位寄存器。事實上,以此類推,多個CLB可以進一步構(gòu)造更長的移位寄存器。-例化要使用移位寄存器可以使用SRL16(ShiftRegisterLUT16bit),他有很多變種,可以構(gòu)造出多種形式的近似的移位寄存器。他的輸出有兩個,一個是可尋址的輸出,這是可變長度的移位寄存器的輸出。另外一個名為MC15,是LUT中的最后一個比特,用于多個移位寄存器級聯(lián)時使用。因為級聯(lián)的上級SR總是從最后一個比特連到下一個SR。移位寄存器有原語,好像是SSRL16,大家可以試用一下。在Xilinx的技術(shù)文檔中可以找到更多的SR形式。-不包括FF很多人疑惑,SR中是否有FF存在,其實圖25清楚的回答了這個
31、問題??梢钥吹絊R是完全由SliceM的LUT實現(xiàn)的,F(xiàn)F不在其內(nèi)。當(dāng)然可以在SR之外和FF連接,構(gòu)造更長的SR。BlockRAMBlockRAM 概覽在spartan3E系列中,每個FPGA基本有4-36個BRAM。每個這樣的BRAM都是DualPort的、可配置的18Kbit存儲器。為什么是18Kbit呢,可以這樣記憶,16K做數(shù)據(jù),2K做校驗位。當(dāng)然你一定要放18K數(shù)據(jù)也是可以的,但是涉及初衷肯定是考慮了校驗位的需要。所以以后如果使用小的內(nèi)存就用我們前面講過的Slice(LUT)分布式RAM。如果要大塊的,就不要麻煩了,直接例化BRAM。BRAM有幾種主要的可配置項:- 初始值(比如可以
32、放啟動軟件代碼)- 端口aspectratio,這個我會在后面介紹,簡單講就是輸入輸出數(shù)據(jù)長度的不對稱配置- 寫狀態(tài)下的數(shù)據(jù)輸出模式- 單端口雙端口配置BRAMBRAM 的片上位置BRAM和乘法器相鄰,兩者一起以12縱列的形式放在FPGA內(nèi)部。根據(jù)FPGA的大小,有些只有1歹U,有些有2列。每個BRAM都和一個18x18的乘法器相鄰。BRAM的A口上端16位和乘法器A口上端16位共享。BRAM的B口上端16位和乘法器B口上端16位共享。不知道這樣做的目的是什么,請大家補充BRAMBRAM 的端口結(jié)構(gòu)BRAM被配置為雙端口結(jié)構(gòu)。每個端口都有其獨立的數(shù)據(jù)、控制、時鐘總線。根據(jù)這個特點,一個BRAM
33、可以有四種基本的讀寫數(shù)據(jù)通路:- 只從A端口讀和寫- 只從B端口讀和寫-A寫B(tài)讀-B寫A讀通過原語調(diào)用 BRAMBRAMBRAM的調(diào)用原語有兩種,一種是當(dāng)做dualport調(diào)用,一種是當(dāng)做singleport調(diào)用。當(dāng)dualport調(diào)用時,使用原語RAMB16_Swa_Swb,例如-RAMB16_S9_S18:雙端口RAM,A端口寬度為9,B端口寬度為18當(dāng)singleport調(diào)用時,使用原語RAMB16_Sw,例如-RAMB16_S18:單端口RAM,端口寬度為18BRAMBRAM 端口寬度比和很多人先入為主的印象不一樣,BRAM是支持靈活的端口寬度的。端口A和端口B相互獨立,兩者可以配置成
34、為不同的寬度。通過尋址單位(A/B端口各不相同)的適配,兩側(cè)都能實現(xiàn)正確尋址。比如一側(cè)寬,一側(cè)窄,則在窄的一側(cè)尋址時,寬的數(shù)據(jù)被分割成窄的數(shù)據(jù)單元。相反的,在寬的一側(cè)尋址時,窄的數(shù)據(jù)被合并成寬的數(shù)據(jù)單元。圖28非常經(jīng)典。建議大家反復(fù)欣賞。假設(shè)A端口寬度為36位,則一個36位數(shù)據(jù)(4個字節(jié),以及4個相應(yīng)校驗位)只占1個尋址單元?,F(xiàn)在來對B端口寬度的各種情況進行假設(shè):-36位:和A端口一樣,原來的36位仍然占用一個尋址單元-18位:原36位數(shù)據(jù)(含校驗位)均勻的一分為二(2x2字節(jié)+2比特校驗),占用2個尋址單元。-09位:原36位數(shù)據(jù)(含校驗位)均勻的一分為四(4x1字節(jié)+1比特校驗),占用4個
35、尋址單元。-04位:原36位數(shù)據(jù)的4比特校驗位被丟棄,原數(shù)據(jù)分割為(8x4比特),占用8個尋址單元。-02位:原36位數(shù)據(jù)的4比特校驗位被丟棄,原數(shù)據(jù)分割為(16x2比特),占用16個尋址單元。-01位:原36位數(shù)據(jù)的4比特校驗位被丟棄,原數(shù)據(jù)分割為(32x1比特),占用32個尋址單元。注意:當(dāng)寬度小于8比特時,因為原來的字節(jié)校驗無法繼承下來,所以校驗信息被丟棄。BRAMBRAM 屬性定義-INITxx(INIT00INIT3F)初始化BRAM數(shù)據(jù)位,在配置階段載入,每個初始化字符串定義32個Hex值,總共16Kbit。(貌似有筆誤,INIT7F才符合)-INITPxx(INITP00INIT
36、P0F)初始化BRAM校驗位,在配置階段載入,每個初始化字符串定義32個Hex值,總共2Kbit。-INIT(單端口)INITA/INITB(雙端口)數(shù)據(jù)輸出鎖存初始化,是一個和端口寬度匹配的Hex值。-SRVAL(單端口)SRVAL_A/SRVAL_B(雙端口)數(shù)據(jù)輸出鎖存同步重置,是一個和端口寬度匹配的Hex值,用于重置輸出鎖存值。-WRITE_MODE數(shù)據(jù)輸出鎖存行為(寫操作下):有先讀、先寫、不變,一共三種模式寫操作下的數(shù)據(jù)輸出鎖存行為這是緊接著上面的內(nèi)容寫的。在寫操作下,數(shù)據(jù)如何輸出,一般不怎么關(guān)心。但是在特殊的應(yīng)用下,設(shè)置不同的模式,可能可以提供到便利。我們只要大概理解就行了。- 先寫這種模式下,正在寫的數(shù)據(jù)穿腸而過,直接輸出。- 先讀這種模式下,寫地址處的原數(shù)據(jù)被讀出。用于保護原始數(shù)據(jù)非常有用。- 不變這種模式下,寫操作前的輸出數(shù)據(jù)被鎖存并持續(xù)輸出,整個寫操作期間都不改變。BRAM到此就結(jié)束了,想想真的沒有什么內(nèi)容。專用乘法器FPGA在數(shù)字信號處理方面比DSP的功能要弱。但是為了爭取更多用戶,F(xiàn)PGA也把DSP的核心一一專用乘法器帶入了芯片。一個典型的乘法器有著18X18=36的輸入輸出結(jié)構(gòu)。兩個輸入端口和一個輸出端口都有可選的寄存器,用于適配不同的應(yīng)用需求。調(diào)用乘
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設(shè)計印刷服務(wù)合同協(xié)議
- 貸款貸款用購銷合同協(xié)議
- 購房合同簽訂時補充協(xié)議
- 購買工具協(xié)議書范本
- 購買牲畜協(xié)議書模板范本
- 購買貨物欠款協(xié)議書范本
- 購買門窗合同協(xié)議書范本
- 試藥延期協(xié)議書模板
- 訂購小麥協(xié)議書范本
- 財產(chǎn)理賠協(xié)議書范本
- 浙江省寧波市鎮(zhèn)海中學(xué)高三下學(xué)期適應(yīng)性測試數(shù)學(xué)試卷2
- Unit 7單元話題寫作“中國傳統(tǒng)節(jié)日”五年級下冊譯林版三起
- 憲法與法律學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 廣州數(shù)控GSK 980TDc車床CNC使用手冊
- 紅色經(jīng)典影片與近現(xiàn)代中國發(fā)展學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 小學(xué)語文“跨學(xué)科學(xué)習(xí)任務(wù)群”內(nèi)涵及解讀
- 申請開票額度合同范本
- 2024年安全員C證考試題庫附答案
- 2024年生態(tài)環(huán)境執(zhí)法大練兵比武競賽理論考試題庫-下(多選、判斷題)
- 醫(yī)院創(chuàng)建服務(wù)基層行創(chuàng)建資料(3.5.2醫(yī)院感染相關(guān)監(jiān)測C)
- 2024年山東省東營市中考道德與法治試卷真題(含答案)
評論
0/150
提交評論