在當(dāng)前的數(shù)字集成電路設(shè)計(jì)中,同步電路占了絕大部分。所謂同步電路,即電路中的所有寄存器由為數(shù)不多的幾個(gè)全局時(shí)鐘驅(qū)動(dòng),被相同時(shí)鐘信號(hào)驅(qū)動(dòng)的寄存器共同組成一個(gè)時(shí)鐘域,并可認(rèn)為同時(shí)時(shí)鐘域內(nèi)所有寄存器的時(shí)鐘沿同時(shí)到達(dá)。
然而,在實(shí)際電路中,同時(shí)鐘域內(nèi)寄存器時(shí)鐘沿的到達(dá)時(shí)間存在偏差,即時(shí)鐘偏差。通過(guò)合理的時(shí)鐘設(shè)計(jì),可以減少這種時(shí)鐘偏差,使其相對(duì)時(shí)鐘周期可以忽略不計(jì),從而達(dá)到同步的效果。
1 ASIC的時(shí)鐘電路
在ASIC的電路設(shè)計(jì)中,自動(dòng)布局布線工具使用動(dòng)態(tài)搭建時(shí)鐘緩沖器樹(shù)的方法來(lái)解決時(shí)鐘偏差問(wèn)題。其基本思想就是控制時(shí)鐘源與寄存器之間的門(mén)延時(shí)與線 路延時(shí)。如果同時(shí)鐘域內(nèi)所有寄存器的時(shí)鐘端與時(shí)鐘源之間的路徑,包含大體相同的時(shí)鐘緩沖器個(gè)數(shù)與連線長(zhǎng)度,就可以近似地認(rèn)為時(shí)鐘信號(hào)從時(shí)鐘源到各寄存器時(shí) 鐘端的延時(shí)是相等的,因此寄存器間的時(shí)鐘偏差可以忽略不計(jì)。
ASIC時(shí)鐘樹(shù)結(jié)構(gòu)如圖1所示。
2 FPGA的時(shí)鐘電路
隨著FPGA集成度的不斷提升,單片F(xiàn)PGA已經(jīng)可以完成百萬(wàn)門(mén)級(jí)的集成電路設(shè)計(jì)。因此,很多ASIC設(shè)計(jì)可以利用FPGA完成流片前的功能驗(yàn)證。 甚至直接使用FPGA進(jìn)行商業(yè)生產(chǎn)。但是,F(xiàn)PGA的特殊結(jié)構(gòu)決定了基于FPGA的設(shè)計(jì)不能直接照搬在ASIC設(shè)計(jì)當(dāng)中的某些經(jīng)驗(yàn),時(shí)鐘設(shè)計(jì)便是其中較突 出的一條。ASIC時(shí)鐘樹(shù)結(jié)構(gòu)如圖1所示。
由于FPGA的生產(chǎn)工藝,在出廠之前,F(xiàn)PGA內(nèi)部元件之間的連線已經(jīng)完全固定。同時(shí),F(xiàn)PGA具有連線延時(shí)相對(duì)門(mén)延時(shí)較大的特點(diǎn),造成FPGA并 不能通過(guò)動(dòng)態(tài)搭建時(shí)鐘緩沖器樹(shù)的方法解決時(shí)鐘偏差問(wèn)題。實(shí)際上,時(shí)鐘樹(shù)結(jié)構(gòu)已經(jīng)被預(yù)先固化在芯片當(dāng)中。針對(duì)Xilinx公司的Virtex Ⅱ系列的FPGA。其時(shí)鐘樹(shù)結(jié)構(gòu)如圖2所示。
該系列FPGA直接利用單獨(dú)一層銅布線層搭建時(shí)鐘網(wǎng)絡(luò)。所有的時(shí)鐘信號(hào),只能通過(guò)處于芯片縱向中軸線上下兩端的16個(gè)BUFGMUX進(jìn)入時(shí)鐘網(wǎng)絡(luò)。 所有BUFGMUX輸出端一直延伸到芯片的中心,連接到銅布線層處于芯片中央縱向分布寬度為8的時(shí)鐘總線。縱向時(shí)鐘總線再連接到橫向的8條寬度為8的時(shí)鐘 總線,進(jìn)而延伸到每一個(gè)CLB(Configurable Logic Block,可編程邏輯塊)的GRM(General Route Matrix,通用布線矩陣陣列)上。
也就是說(shuō),在Virtex Ⅱ結(jié)構(gòu)的FPGA當(dāng)中,最多可以存在16個(gè)時(shí)鐘域,然而同時(shí)只能存在最多8個(gè)全局時(shí)鐘(上下兩個(gè)對(duì)應(yīng)的BUFGMUX共用一條時(shí)鐘總線)。由于每個(gè)寄存器 的時(shí)鐘端都通過(guò)橫向和縱向的時(shí)鐘總線連接到位于芯片中央的時(shí)鐘源,而時(shí)鐘源通過(guò)相同路徑長(zhǎng)度的連線和BUFGMUX連接,因此可以認(rèn)為從同一 BUFGMUX出發(fā)的時(shí)鐘信號(hào)到芯片內(nèi)所有寄存器的延時(shí)相同,從而沒(méi)有時(shí)鐘偏差,經(jīng)過(guò)實(shí)際工程驗(yàn)證,同BUFGMUX構(gòu)成的時(shí)鐘域內(nèi)時(shí)鐘偏差最多不超過(guò) 0.3ns。
3 設(shè)計(jì)實(shí)例
為了更好的說(shuō)明FPGA 時(shí)鐘電路的使用方法與其特殊的問(wèn)題,下面將用一個(gè)在Virtex Ⅱ 6000 FPGA上實(shí)現(xiàn)的設(shè)計(jì)實(shí)例具體說(shuō)明時(shí)鐘電路建立的方法。
3.1 問(wèn)題分析
圖3顯示了在該設(shè)計(jì)當(dāng)中的4個(gè)時(shí)鐘域。
這樣的時(shí)鐘結(jié)構(gòu),在ASIC的時(shí)鐘樹(shù)設(shè)計(jì)中,并不會(huì)引發(fā)很大的問(wèn)題。但是在FPGA的設(shè)計(jì)中,如果不加處理,會(huì)引起電路綜合、布局布線的巨大壓力。其主要的問(wèn)題源于FPGA綜合軟件對(duì)BUFGMUX的自動(dòng)指定,造成門(mén)控時(shí)鐘和分頻時(shí)鐘與源時(shí)鐘之間出現(xiàn)較大的時(shí)鐘偏差。
一般,綜合軟件可以通過(guò)Verilog HDL的“posedge”和“negedge”關(guān)鍵字,或者VHDL當(dāng)中的“event”關(guān)鍵字判斷出時(shí)鐘信號(hào)。然而,綜合工具并沒(méi)有判斷門(mén)控時(shí)鐘與分 頻時(shí)鐘的能力,即就是綜合工具認(rèn)定的時(shí)鐘只能是一根網(wǎng)線,而不能穿越一般的邏輯門(mén)。為了讓同時(shí)鐘域的寄存器間沒(méi)有時(shí)鐘偏差。綜合工具會(huì)自動(dòng)在時(shí)鐘的源頭為 時(shí)鐘信號(hào)指定BUFGMUX,使得時(shí)鐘信號(hào)使用銅布線資源。
經(jīng)過(guò)綜合工具的自動(dòng)指定,最終會(huì)將圖3當(dāng)中時(shí)鐘結(jié)構(gòu)轉(zhuǎn)換為圖4中的電路結(jié)構(gòu)。
正如第2節(jié)所述,F(xiàn)PGA通過(guò)其特定的時(shí)鐘網(wǎng)絡(luò),使得時(shí)鐘信號(hào)從BUFGMUX到每個(gè)CLB的時(shí)鐘端沒(méi)有時(shí)鐘偏差。但是,此結(jié)構(gòu)的間接后果是為每個(gè) CLB的時(shí)鐘端添加了一個(gè)相同的時(shí)鐘線延時(shí),即從BUFGMUX通過(guò)時(shí)鐘網(wǎng)絡(luò)到達(dá)GRM的時(shí)間,在正常情況下,這個(gè)時(shí)間為6-7ns。
正是由于這一點(diǎn),在綜合工具自動(dòng)指定BUFGMUX之后,為了實(shí)現(xiàn)CLK_2XG這個(gè)門(mén)控時(shí)鐘,必須將CLK_2X時(shí)鐘信號(hào)通過(guò)與門(mén),再經(jīng)過(guò) BUFGMUX重新連接到時(shí)鐘資源。顯而易見(jiàn),CLK_2XG時(shí)鐘域的時(shí)鐘信號(hào)相對(duì)時(shí)鐘源CLK_IN來(lái)說(shuō)經(jīng)過(guò)了兩次BUFGMUX和CLK_2X的時(shí)鐘 域產(chǎn)生了至少6ns的時(shí)鐘偏差。同理,CLK_1XG和CLK_1X相應(yīng)與CLK_2X之間存在12ns和6ns的時(shí)鐘偏差。相對(duì)CLK_2X 80MHz的時(shí)鐘頻率,一周期為12.5ns,顯然最大12ns的跨時(shí)鐘域的時(shí)鐘偏差是不能忍受的。從圖5的后仿波形當(dāng)中,可以很明顯地看到這個(gè)時(shí)鐘偏差 達(dá)到了13.34ns。
3.2 解決方案
3.2.1 門(mén)控時(shí)鐘
實(shí)際上,BUFGMUX并不是簡(jiǎn)單的時(shí)鐘緩沖器,他是一個(gè)具有低時(shí)鐘偏差、高驅(qū)動(dòng)能力并帶有選擇端的雙路選擇器。使用不同的原語(yǔ)進(jìn)行實(shí)例化,BUFGMUX可以構(gòu)成時(shí)鐘選擇器、時(shí)鐘門(mén)控器或者簡(jiǎn)單的時(shí)鐘緩沖器[1]。
盡管BUFGMUX就3種使用方式,但如果讓綜合軟件自動(dòng)在合適的位置指定BUFGMUX,由于綜合軟件只能認(rèn)出網(wǎng)線形式的時(shí)鐘信號(hào),因而只會(huì)使用BUFG的方式使用BUFGMUX,造成了上述的問(wèn)題。
為了去除由于門(mén)控時(shí)鐘造成的時(shí)鐘偏差,只能通過(guò)手動(dòng)更改代碼,在合適的位置實(shí)例化BUFGMUX。在此例中可以為CLK_2X信號(hào)實(shí)例化BUFG原 語(yǔ),而使用BUFGCE原語(yǔ)替代原來(lái)的與門(mén),并直接使用CLK_IN為BUGCE的輸入。這樣CLK_2X和CLK_2XG都只經(jīng)過(guò)了一個(gè) BUFGMUX,因此可以近似地認(rèn)為不存在時(shí)鐘偏差。同理CLK_1X和CLK_1XG之間的時(shí)鐘偏差也可以解決。
3.2.2 分頻時(shí)鐘
然而,BUFGMUX的3種使用方式并不能解決分頻寄存器造成的CLK_1X和CLK_2X之間的時(shí)鐘偏差問(wèn)題。比較簡(jiǎn)單的一種方法是使用CLK_IN作為分頻寄存器的輸入,而不對(duì)CLK_2X進(jìn)行分頻。
盡管如此,由于分頻寄存器的器件延時(shí)和相應(yīng)的連接線路延時(shí),CLK_2X和CLK_1X之間仍然存在大約2-3ns的時(shí)鐘偏差,對(duì)于某些跨時(shí)鐘域的 關(guān)鍵路徑和時(shí)鐘保持(Hold Time)約束來(lái)說(shuō),仍然過(guò)大。另外,由于CLK_IN被分頻寄存器當(dāng)作時(shí)鐘使用,可能會(huì)造成綜合軟件自動(dòng)給CLK_IN指定BUFG,導(dǎo)致所有時(shí)鐘信號(hào) 都需要經(jīng)過(guò)兩個(gè)BUFGMUX,產(chǎn)生一個(gè)12ns左右的輸入延時(shí)。
針對(duì)這種問(wèn)題,可以使用FPGA當(dāng)中的另一個(gè)特殊資源——DCM(Digital Clock Manager,數(shù)字時(shí)鐘管理單元)。DCM當(dāng)中包含一個(gè)DLL(Delay-Locked loop,延遲鎖定電路),可以提供對(duì)時(shí)鐘信號(hào)的二倍頻和分頻功能,并且能夠維持各輸出時(shí)鐘之間的相位關(guān)系,即零時(shí)鐘偏差(更詳細(xì)的說(shuō)明可查看參考文獻(xiàn) [1,2]。
因此,針對(duì)分頻時(shí)鐘,可以直接利用DCM的分頻功能,從而省去分頻寄存器,徹底地解決了CLK_2X和CLK_1X之間的時(shí)鐘偏差。不過(guò)更合適的選擇是使用DCM的倍頻功能,這樣只需要為FPGA準(zhǔn)備一個(gè)40MHz的低頻時(shí)鐘輸入,相對(duì)80MHz要更容易實(shí)現(xiàn)。
3.2.3 最終實(shí)現(xiàn)
通過(guò)BUFGMUX和DCM的使用,可以將圖4改造為圖6所示的電路結(jié)構(gòu)。
改造后,每個(gè)時(shí)鐘域的時(shí)鐘信號(hào)和信號(hào)源CLK_IN之間都只通過(guò)一個(gè)DCM和一個(gè)BUFGMUX,他們之間的時(shí)鐘偏差僅為時(shí)鐘網(wǎng)絡(luò)本身的時(shí)鐘偏差和 DCM的輸出到各BUFGMUX輸入端之間的線路延時(shí)偏差。如果進(jìn)一步優(yōu)化,通過(guò)在布局布線的步驟施加對(duì)BUFGMUX的位置約束,迫使圖5中的4個(gè) BUFGMUX都處于FPGA的上方或者下方的8個(gè)BUFGMUX上,跨時(shí)鐘域的時(shí)鐘偏差在VIRTEX Ⅱ 6000FPGA當(dāng)中可以控制在0.5ns以內(nèi),基本滿足80MHz的要求。改造后的時(shí)鐘電路的后仿波形如圖7所示,其最大的時(shí)鐘偏差為0.722ns。
實(shí)際上,DCM和BUFGMUX從VIRTEX Ⅱ開(kāi)始,已經(jīng)成為FPGA的標(biāo)準(zhǔn)元件,可以在SPARTAN-3,VIRTEX Ⅱ,VIRTEX Ⅱ PRO,VIRTEX-4等器件上直接使用,因此該電路結(jié)構(gòu)也可相應(yīng)推廣到這些FPGA的電路設(shè)計(jì)當(dāng)中。
4 結(jié)語(yǔ)
本文通過(guò)比較ASIC時(shí)鐘樹(shù)結(jié)構(gòu)和FPGA時(shí)鐘網(wǎng)絡(luò)的結(jié)構(gòu),說(shuō)明了FPGA時(shí)鐘網(wǎng)絡(luò)的自身特點(diǎn)。通過(guò)一個(gè)設(shè)計(jì)實(shí)例,分析了直接使用綜合工具實(shí)現(xiàn)多時(shí) 鐘域的電路設(shè)計(jì)所存在的問(wèn)題,并針對(duì)這些問(wèn)題提出了利用BUFGMUX的三種使用方式代替門(mén)控時(shí)鐘與利用DCM代替分頻時(shí)鐘的方法,較好地解決了FPGA 時(shí)鐘電路的時(shí)鐘偏差問(wèn)題,并具有一定的適用性。
評(píng)論
查看更多