FPGA全局復(fù)位及局部復(fù)位設(shè)計(jì)
隨著FPGA設(shè)計(jì)越來(lái)越復(fù)雜,芯片內(nèi)部的時(shí)鐘域也越來(lái)越多,使全局復(fù)位已不能夠適應(yīng)FPGA設(shè)計(jì)的需求,更多的設(shè)計(jì)趨向于使用局部的復(fù)位。本節(jié)將會(huì)從FPGA內(nèi)部復(fù)位“樹(shù)”的結(jié)構(gòu)來(lái)分析復(fù)位的結(jié)構(gòu)。
我們的復(fù)位線將會(huì)是一個(gè)和時(shí)鐘一樣多扇出的網(wǎng)絡(luò),如此多的扇出,時(shí)鐘信號(hào)是采用全局時(shí)鐘網(wǎng)絡(luò)的,那么復(fù)位如何處理?有人提出用全局時(shí)鐘網(wǎng)絡(luò)來(lái)傳遞復(fù)位信號(hào),但是在FPGA設(shè)計(jì)中,這種方法還是有其弊端。一是無(wú)法解決復(fù)位結(jié)束可能造成的時(shí)序問(wèn)題,因?yàn)槿?strong>網(wǎng)絡(luò)的延時(shí)較大,并且不可以直接連到寄存器的復(fù)位端。仍然需要局部走線,這對(duì)于時(shí)序要求緊張的場(chǎng)合,較難滿足時(shí)序;二是會(huì)占用全局時(shí)鐘資源,多個(gè)復(fù)位信號(hào)會(huì)占用更多的全局時(shí)鐘資源。
在這里提出一個(gè)區(qū)域化復(fù)位的方案,如圖1所示。外部的異步復(fù)位信號(hào)被二級(jí)寄存器同步化之后,復(fù)制不同的復(fù)位寄存器連到不同的模塊來(lái)作為復(fù)位控制。如果單個(gè)模塊的復(fù)位扇出太大的話,還可以在模塊內(nèi)部復(fù)制復(fù)位寄存器。強(qiáng)烈建議那些在datapath上不需要復(fù)位的寄存器不要在代碼中復(fù)位,因?yàn)檫@樣會(huì)增加復(fù)位信號(hào)的扇出,并增加邏輯資源和降低邏輯速度。
對(duì)于那些有多個(gè)時(shí)鐘區(qū)域,需要多個(gè)時(shí)鐘區(qū)域內(nèi)獨(dú)立復(fù)位的設(shè)計(jì)由多個(gè)同步化的寄存器的模塊來(lái)完成同步,然后送到各模塊進(jìn)行復(fù)位。
當(dāng)然,對(duì)于選擇同步化的異步復(fù)位的方案,也可以如圖2所示來(lái)安排復(fù)位。將復(fù)位信號(hào)轉(zhuǎn)換成同步后送到不同的模塊,在各模塊中進(jìn)行同步化處理,各模塊完成自己的本地復(fù)位。
圖1模塊化復(fù)位
圖2 同步化異步復(fù)位之模塊化復(fù)位
綜合本節(jié)說(shuō)明的復(fù)位路徑設(shè)計(jì),推薦采用局部復(fù)位,即各模塊或多個(gè)模塊采用自己的獨(dú)立復(fù)位信號(hào)。