在FPGA開發(fā)中盡量避免全局復(fù)位的使用?(1)
最近幾天讀了Xilinx網(wǎng)站上一個(gè)很有意思的白皮書(white paper,wp272.pdf),名字叫《Get Smart About Reset:Think Local, Not Global》,在此分享一下心得,包括以前設(shè)計(jì)中很少注意到的一些細(xì)節(jié)。
在數(shù)字系統(tǒng)設(shè)計(jì)中,我們傳統(tǒng)上都認(rèn)為,應(yīng)該對所有的觸發(fā)器設(shè)置一個(gè)主復(fù)位,這樣將大大方便后續(xù)的測試工作。所以,在所有的程序中,我往往都在端口定義中使用同一個(gè)reset信號(其實(shí)好多時(shí)候根本就沒有用到)。所以,當(dāng)看到文檔中提到,“不建議在FPGA設(shè)計(jì)中使用全局復(fù)位,或者說應(yīng)該努力避免這種設(shè)計(jì)方式”時(shí),許多設(shè)計(jì)人員(包括我)都會覺得非常難以理解,這種設(shè)計(jì)思想跟我們通常的認(rèn)識是相沖突的!
繼續(xù)讀下去,不知不覺發(fā)現(xiàn)這個(gè)白皮書講的還真是在理。接下來把我的個(gè)人理解講述一下。
1.全局復(fù)位是不是關(guān)鍵時(shí)序?
全局復(fù)位信號一般由以下三種途徑獲得:
1. 第一種,最常見的,就是用一個(gè)復(fù)位按鈕產(chǎn)生一個(gè)復(fù)位信號接到FPGA的全局復(fù)位管腳上。它的速度顯然是非常慢的(因?yàn)槭菣C(jī)械結(jié)構(gòu)),而且存在抖動的問題。
2. 第二種是上電的時(shí)候由電源芯片產(chǎn)生的,如TI的TPS76x系列的電源系統(tǒng)一般都可以產(chǎn)生復(fù)位信號,供主芯片上電復(fù)位使用。
3. 第三種是由控制芯片產(chǎn)生的復(fù)位脈沖,這個(gè)是我們設(shè)計(jì)人員可以方便使用程序控制的。
在這些情況下,復(fù)位信號的變化與FGPA芯片內(nèi)部信號相比看起來是及其緩慢的,例如,復(fù)位按鈕產(chǎn)生的復(fù)位信號的周期至少是在毫秒級別的,而我們FPGA內(nèi)部信號往往是納米或者微秒級別的。復(fù)位信號的頻率是如此之低,以至于我們?nèi)蝿?wù)它不屬于關(guān)鍵時(shí)序(not TIming-criTIcal)。即使是對此類信號進(jìn)行時(shí)序約束,約束的周期也是非常長的。全局復(fù)位脈沖的周期遠(yuǎn)大于時(shí)鐘周期,所以傳統(tǒng)意義上假設(shè)FPGA芯片中所有的觸發(fā)器都能夠得到有效的復(fù)位。
然而,隨著FPGA性能和工作頻率的快速提高,這種假設(shè)開始不再成立。此時(shí),全局復(fù)位信號的產(chǎn)生開始成為時(shí)序關(guān)鍵的問題。
評論