基于BUFGMUX與DCM的FPGA時(shí)鐘電路設(shè)計(jì)
在當(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í)鐘偏差。通過合理的時(shí)鐘設(shè)計(jì),可以減少這種時(shí)鐘偏差,使其相對(duì)時(shí)鐘周期可以忽略不計(jì),從而達(dá)到同步的效果。
本文引用地址:http://www.ex-cimer.com/article/20762.htm1 asic的時(shí)鐘電路
在asic的電路設(shè)計(jì)中,自動(dòng)布局布線工具使用動(dòng)態(tài)搭建時(shí)鐘緩沖器樹的方法來解決時(shí)鐘偏差問題。其基本思想就是控制時(shí)鐘源與寄存器之間的門延時(shí)與線路延時(shí)。如果同時(shí)鐘域內(nèi)所有寄存器的時(shí)鐘端與時(shí)鐘源之間的路徑,包含大體相同的時(shí)鐘緩沖器個(gè)數(shù)與連線長度,就可以近似地認(rèn)為時(shí)鐘信號(hào)從時(shí)鐘源到各寄存器時(shí)鐘端的延時(shí)是相等的,因此寄存器間的時(shí)鐘偏差可以忽略不計(jì)。
asic時(shí)鐘樹結(jié)構(gòu)如圖1所示。
2 fpga的時(shí)鐘電路
隨著fpga集成度的不斷提升,單片fpga已經(jīng)可以完成百萬門級(jí)的集成電路設(shè)計(jì)。因此,很多asic設(shè)計(jì)可以利用fpga完成流片前的功能驗(yàn)證。甚至直接使用fpga進(jìn)行商業(yè)生產(chǎn)。但是,fpga的特殊結(jié)構(gòu)決定了基于fpga的設(shè)計(jì)不能直接照搬在asic設(shè)計(jì)當(dāng)中的某些經(jīng)驗(yàn),時(shí)鐘設(shè)計(jì)便是其中較突出的一條。asic時(shí)鐘樹結(jié)構(gòu)如圖1所示。
由于fpga的生產(chǎn)工藝,在出廠之前,fpga內(nèi)部元件之間的連線已經(jīng)完全固定。同時(shí),fpga具有連線延時(shí)相對(duì)門延時(shí)較大的特點(diǎn),造成fpga并不能通過動(dòng)態(tài)搭建時(shí)鐘緩沖器樹的方法解決時(shí)鐘偏差問題。實(shí)際上,時(shí)鐘樹結(jié)構(gòu)已經(jīng)被預(yù)先固化在芯片當(dāng)中。針對(duì)xilinx公司的virtex ⅱ系列的fpga。其時(shí)鐘樹結(jié)構(gòu)如圖2所示。
該系列fpga直接利用單獨(dú)一層銅布線層搭建時(shí)鐘網(wǎng)絡(luò)。所有的時(shí)鐘信號(hào),只能通過處于芯片縱向中軸線上下兩端的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,通用布線矩陣陣列)上。
也就是說,在virtex ⅱ結(jié)構(gòu)的fpga當(dāng)中,最多可以存在16個(gè)時(shí)鐘域,然而同時(shí)只能存在最多8個(gè)全局時(shí)鐘(上下兩個(gè)對(duì)應(yīng)的bufgmux共用一條時(shí)鐘總線)。由于每個(gè)寄存器的時(shí)鐘端都通過橫向和縱向的時(shí)鐘總線連接到位于芯片中央的時(shí)鐘源,而時(shí)鐘源通過相同路徑長度的連線和bufgmux連接,因此可以認(rèn)為從同一bufgmux出發(fā)的時(shí)鐘信號(hào)到芯片內(nèi)所有寄存器的延時(shí)相同,從而沒有時(shí)鐘偏差,經(jīng)過實(shí)際工程驗(yàn)證,同bufgmux構(gòu)成的時(shí)鐘域內(nèi)時(shí)鐘偏差最多不超過0.3ns。
3 設(shè)計(jì)實(shí)例
為了更好的說明fpga 時(shí)鐘電路的使用方法與其特殊的問題,下面將用一個(gè)在virtex ⅱ 6000 fpga上實(shí)現(xiàn)的設(shè)計(jì)實(shí)例具體說明時(shí)鐘電路建立的方法。
3.1 問題分析
圖3顯示了在該設(shè)計(jì)當(dāng)中的4個(gè)時(shí)鐘域。
這樣的時(shí)鐘結(jié)構(gòu),在asic的時(shí)鐘樹設(shè)計(jì)中,并不會(huì)引發(fā)很大的問題。但是在fpga的設(shè)計(jì)中,如果不加處理,會(huì)引起電路綜合、布局布線的巨大壓力。其主要的問題源于fpga綜合軟件對(duì)bufgmux的自動(dòng)指定,造成門控時(shí)鐘和分頻時(shí)鐘與源時(shí)鐘之間出現(xiàn)較大的時(shí)鐘偏差。
一般,綜合軟件可以通過verilog hdl的“posedge”和“negedge”關(guān)鍵字,或者vhdl當(dāng)中的“event”關(guān)鍵字判斷出時(shí)鐘信號(hào)。然而,綜合工具并沒有判斷門控時(shí)鐘與分頻時(shí)鐘的能力,即就是綜合工具認(rèn)定的時(shí)鐘只能是一根網(wǎng)線,而不能穿越一般的邏輯門。為了讓同時(shí)鐘域的寄存器間沒有時(shí)鐘偏差。綜合工具會(huì)自動(dòng)在時(shí)鐘的源頭為時(shí)鐘信號(hào)指定bufgmux,使得時(shí)鐘信號(hào)使用銅布線資源。
經(jīng)過綜合工具的自動(dòng)指定,最終會(huì)將圖3當(dāng)中時(shí)鐘結(jié)構(gòu)轉(zhuǎn)換為圖4中的電路結(jié)構(gòu)。
正如第2節(jié)所述,fpga通過其特定的時(shí)鐘網(wǎng)絡(luò),使得時(shí)鐘信號(hào)從bufgmux到每個(gè)clb的時(shí)鐘端沒有時(shí)鐘偏差。但是,此結(jié)構(gòu)的間接后果是為每個(gè)clb的時(shí)鐘端添加了一個(gè)相同的時(shí)鐘線延時(shí),即從bufgmux通過時(shí)鐘網(wǎng)絡(luò)到達(dá)grm的時(shí)間,在正常情況下,這個(gè)時(shí)間為6-7ns。
正是由于這一點(diǎn),在綜合工具自動(dòng)指定bufgmux之后,為了實(shí)現(xiàn)clk_2xg這個(gè)門控時(shí)鐘,必須將clk_2x時(shí)鐘信號(hào)通過與門,再經(jīng)過bufgmux重新連接到時(shí)鐘資源。顯而易見,clk_2xg時(shí)鐘域的時(shí)鐘信號(hào)相對(duì)時(shí)鐘源clk_in來說經(jīng)過了兩次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 門控時(shí)鐘
實(shí)際上,bufgmux并不是簡單的時(shí)鐘緩沖器,他是一個(gè)具有低時(shí)鐘偏差、高驅(qū)動(dòng)能力并帶有選擇端的雙路選擇器。使用不同的原語進(jìn)行實(shí)例化,bufgmux可以構(gòu)成時(shí)鐘選擇器、時(shí)鐘門控器或者簡單的時(shí)鐘緩沖器[1]。
盡管bufgmux就3種使用方式,但如果讓綜合軟件自動(dòng)在合適的位置指定bufgmux,由于綜合軟件只能認(rèn)出網(wǎng)線形式的時(shí)鐘信號(hào),因而只會(huì)使用bufg的方式使用bufgmux,造成了上述的問題。
為了去除由于門控時(shí)鐘造成的時(shí)鐘偏差,只能通過手動(dòng)更改代碼,在合適的位置實(shí)例化bufgmux。在此例中可以為clk_2x信號(hào)實(shí)例化bufg原語,而使用bufgce原語替代原來的與門,并直接使用clk_in為bugce的輸入。這樣clk_2x和clk_2xg都只經(jīng)過了一個(gè)bufgmux,因此可以近似地認(rèn)為不存在時(shí)鐘偏差。同理clk_1x和clk_1xg之間的時(shí)鐘偏差也可以解決。
3.2.2 分頻時(shí)鐘
然而,bufgmux的3種使用方式并不能解決分頻寄存器造成的clk_1x和clk_2x之間的時(shí)鐘偏差問題。比較簡單的一種方法是使用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)約束來說,仍然過大。另外,由于clk_in被分頻寄存器當(dāng)作時(shí)鐘使用,可能會(huì)造成綜合軟件自動(dòng)給clk_in指定bufg,導(dǎo)致所有時(shí)鐘信號(hào)都需要經(jīng)過兩個(gè)bufgmux,產(chǎn)生一個(gè)12ns左右的輸入延時(shí)。
針對(duì)這種問題,可以使用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ì)的說明可查看參考文獻(xiàn)[1,2]。
因此,針對(duì)分頻時(shí)鐘,可以直接利用dcm的分頻功能,從而省去分頻寄存器,徹底地解決了clk_2x和clk_1x之間的時(shí)鐘偏差。不過更合適的選擇是使用dcm的倍頻功能,這樣只需要為fpga準(zhǔn)備一個(gè)40mhz的低頻時(shí)鐘輸入,相對(duì)80mhz要更容易實(shí)現(xiàn)。
3.2.3 最終實(shí)現(xiàn)
通過bufgmux和dcm的使用,可以將圖4改造為圖6所示的電路結(jié)構(gòu)。
改造后,每個(gè)時(shí)鐘域的時(shí)鐘信號(hào)和信號(hào)源clk_in之間都只通過一個(gè)dcm和一個(gè)bufgmux,他們之間的時(shí)鐘偏差僅為時(shí)鐘網(wǎng)絡(luò)本身的時(shí)鐘偏差和dcm的輸出到各bufgmux輸入端之間的線路延時(shí)偏差。如果進(jìn)一步優(yōu)化,通過在布局布線的步驟施加對(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 ⅱ開始,已經(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é)語
本文通過比較asic時(shí)鐘樹結(jié)構(gòu)和fpga時(shí)鐘網(wǎng)絡(luò)的結(jié)構(gòu),說明了fpga時(shí)鐘網(wǎng)絡(luò)的自身特點(diǎn)。通過一個(gè)設(shè)計(jì)實(shí)例,分析了直接使用綜合工具實(shí)現(xiàn)多時(shí)鐘域的電路設(shè)計(jì)所存在的問題,并針對(duì)這些問題提出了利用bufgmux的三種使用方式代替門控時(shí)鐘與利用dcm代替分頻時(shí)鐘的方法,較好地解決了fpga時(shí)鐘電路的時(shí)鐘偏差問題,并具有一定的適用性。
評(píng)論