FPGA Fanout-Fanin(扇入扇出)
扇入系數(shù)是指門電路允許的輸入端數(shù)目。一般門電路的扇入系數(shù)為1—5,最多不超過8。扇出系數(shù)是指一個門的輸出端所驅(qū)動同類型門的個數(shù),或稱負載能力。一般門電路的扇出系數(shù)為8,驅(qū)動器的扇出系數(shù)可達25。扇出系數(shù)體現(xiàn)了門電路的負載能力。
灌電流、拉電流
當邏輯門輸出端是低電平時,灌入邏輯門的電流稱為灌電流,灌電流越大,輸出端的低電平就越高。當邏輯門輸出端是高電平時,邏輯門輸出端的電流是從邏輯門中流出,這個電流稱為拉電流。簡單的理解就是邏輯門的輸入(灌電流)和輸出電流(拉電流)。
上、下拉電阻
上拉電阻就是將不確定的信號通過一個電阻嵌位在高電平(即拉電流),來增加高電平輸出時的驅(qū)動能力,以解決總線驅(qū)動能力不足時提供電流;下拉電阻就是將不確定的信號通過一個電阻嵌位在低電平,是用來吸收電流的,也就是灌電流。
負載效應(yīng)
當輸出負載大于它的扇出能力的時候,就會有如下的效應(yīng):
1、輸出低態(tài)時,輸出電壓VOL可能高于VOLmax。
2、輸出高態(tài)時,輸出電壓VOH可能高于VOLmin。
3、輸出的傳播延遲可能大于規(guī)格說明的延遲值。
4、輸出的上升和下降時間可能大于規(guī)格說明的延遲值。
5、器件工作溫度可能升高,從而降低其可靠性,最終引起器件失效。
前面已經(jīng)介紹了什么是扇出和扇出系數(shù)。多扇出問題,通常是指用一個節(jié)點驅(qū)動多個下級邏輯器件,此問題會嚴重影響FPGA布線的穩(wěn)定性,設(shè)計的時候要多加注意,此時采用的是復制寄存器策略。
舉個例子: CLK為系統(tǒng)時鐘,M為1MHz方波信號,由于M信號驅(qū)動的模塊較多,所以M的扇出較多,為了減少扇出,用系統(tǒng)時鐘采樣,將M信號驅(qū)動7個D觸發(fā)器,然后將7個D觸發(fā)器的輸出端分給7個模塊,這樣每個復制點(DUP0~DUP6)平均扇出變?yōu)樵瓉淼?/7,M的信號扇出變?yōu)?,這樣就減少了每個信號的扇出,優(yōu)化了邏輯,也提高了設(shè)計的整體性能。簡而言之,就是將一路信號用D觸發(fā)器和CLK將其分成兩路信號,或者是更多路的信號,再讓這些信號來驅(qū)動下面的各個模塊。
如何判斷是系統(tǒng)的問題是由于多扇出而導致的呢。我是這樣判斷的,因為我的模塊是一個一個寫,一塊一塊的調(diào)試的,所以在分開調(diào)試的時候沒有出任何問題,當所有的綜合在一起的時候,就出現(xiàn)了有一個模塊的信號總是不正常,單獨調(diào)試該模塊的時候又正常,然而這兩個模塊之間又沒有什么交互信號,所以,就把問題定位在這個共用信號的驅(qū)動能力上了,最終曾加了D觸發(fā)器,解決了這個問題。
另外經(jīng)高手指點,還有一種方法是將這個頻率信號放在CLK的管腳上,因為時鐘管腳的驅(qū)動能力比一般的IO口要大一些,所以也就能夠帶動更多的邏輯門。
門控時鐘的問題
最后添加一點關(guān)于門控時鐘的問題。在編譯的時候,系統(tǒng)會報警告,F(xiàn)ound X node(s) in clock paths which may be acting as ripple and/or gated cloxks。這種情況是由于使用了門電路來產(chǎn)生時鐘,一般處理這個警告的方式都會說:“如果是這樣設(shè)計的,就不管這個警告了。”不過看了下面的一段文字也就能夠理解為什么會有這樣的警告了。如果想設(shè)計出更完美的產(chǎn)品,還是要考慮這個問題的。
門控時鐘指的是不用FPGA內(nèi)部的全局時鐘資源BUFG來控制觸發(fā)器的時鐘沿輸入端而是采用組合邏輯和其它時序邏輯(如分頻器)產(chǎn)生的信號作為觸發(fā)器的時鐘沿輸入端。門控時鐘容易帶來時鐘漂移、毛刺等,使得觸發(fā)器誤動作,通常,對于驅(qū)動的觸發(fā)器數(shù)量較少的門控時鐘,編譯器可以自動將分布時鐘緩沖器將其布線優(yōu)化,但是對于驅(qū)動觸發(fā)器較多的門控時鐘,將會使布線不穩(wěn)定,重者造成設(shè)計混亂。門控時中較多,也會使得整個設(shè)計的最大工作速度下降,降低產(chǎn)品的性能。
對于門控時鐘問題,通常的解決辦法是將分頻器做成與系統(tǒng)時鐘寬度一個周期寬度的脈沖信號,所謂系統(tǒng)時鐘就是用全局時鐘資源BUFG驅(qū)動的高扇出、零漂移、零畸變的時鐘資源,在FPGA內(nèi)部的布線結(jié)構(gòu)是樹形結(jié)構(gòu)。
將分頻器的輸出送入觸發(fā)器的ce端,當系統(tǒng)時鐘到來時,檢測ce信號的有效性,當ce信號有效時,將觸發(fā)器的輸出改變,和分頻器的作用完全一樣,而且這樣處理也使得布線更加優(yōu)化。
參考:http://blog.tianya.cn/blogger/post_read.asp?BlogID=4224308&PostID=41813272
在模塊化設(shè)計中
模塊的扇出是指模塊的直屬下層模塊的個數(shù),如圖7.8所示。圖7.8中,平均的扇出是2。一般認為,設(shè)計得好的系統(tǒng)平均扇出是3或4。
圖7.8模塊的扇出
一個模塊的扇出數(shù)過大或過小都不理想,過大比過小更嚴重。一般認為扇出的上限不超過7。扇出過大意味著管理模塊過于復雜,需要控制和協(xié)調(diào)過多的下級。解決的辦法是適當增加中間層次。
一個模塊的扇入是指有多少個上級模塊調(diào)用它。扇人越大,表示該模塊被更多的上級模塊共享。這當然是我們所希望的。但是不能為了獲得高扇人而不惜代價,例如把彼此無關(guān)的功能湊在一起構(gòu)成一個模塊,雖然扇人數(shù)高了,但這樣的模塊內(nèi)聚程度必然低。這是我們應(yīng)避免的。
設(shè)計得好的系統(tǒng),上層模塊有較高的扇出,下層模塊有較高的扇人。其結(jié)構(gòu)圖像清真寺的塔,上面尖,中間寬,下面小。
1.門電路的扇入扇出
扇入系數(shù),是指門電路允許的輸入端數(shù)目。
一般TTL電路的扇入系數(shù) Nr為1~5,最多不超過8。若芯片輸入端數(shù)多于實際要求的數(shù)目,可將芯片多余輸入端接高電平(+5V)或接低電平(GND)。
扇出系數(shù),是指一個門的輸出端所驅(qū)動同類型門的個數(shù),或稱負載能力。
NO=IOLMAX/IILMAX,這是一個通俗的定義一般用在TTL電路的定義中。其中IOLMAX為最大允許灌電流,IILMAX是一個負載門灌入本級的電流。
TTL電路的扇出系數(shù)Nc為8~10。
CMOS電路的扇出系數(shù)Nc可達20~25。
當然LVTTL和LVCMOS都可進一步驗算獲得。
Nc表征了門電路的負載能力。
1.TTL電路
TTL的驗算是比較好弄的,TTL與TTL之間如下圖所示:
由于本身晶體管的轉(zhuǎn)換速度有限,因此對于TTL來說,扇入扇出系數(shù)無所謂低頻和高頻而言。
2.CMOS
扇出系數(shù)實質(zhì)上是根據(jù)頻率有關(guān)的。
因此,扇出系數(shù)是根據(jù)輸出波形識別的時序而定的,隨著頻率的增加,扇出系數(shù)越來越小。
這是因為理論上來說Rdson和Ci都是確定的,根據(jù)充放電過程
注意Rdson的能力計算可參考前面的博文
通過計算時間常數(shù),我們可測算
1.10%=>90%的時間,并確認高電平的時間。
2.90%=>10%的時間,并確認低電平的時間。
如果這兩個都符合,則可接受。
當然MOS管的輸出電容和PCB板的寄生電感和電容,這些因素都會影響實際的效果。