在 FPGA 設(shè)計中,復(fù)位起到的是同步信號的作用,能夠?qū)⑺械拇鎯υO(shè)置成已知狀態(tài)。在數(shù)字電路設(shè)計中,設(shè)計人員一般把全局復(fù)位作為一個外部引腳來實現(xiàn),在加電的時候初始化設(shè)計。全局復(fù)位引腳與任何其它輸入引腳類似,對 FPGA 來說往往是異步的。設(shè)計人員可以使用這個信號在 FPGA 內(nèi)部對自己的設(shè)計進(jìn)行異步或者同步復(fù)位。
不過在一些提示和技巧的幫助下,設(shè)計人員可以找到更加合適的復(fù)位結(jié)構(gòu)。理想的復(fù)位結(jié)構(gòu)可以改善 FPGA 中器件的利用率、時序和功耗水平。
了解觸發(fā)器復(fù)位行為
在深入探討復(fù)位技術(shù)之前,有必要了解 FPGA Slice 內(nèi)觸發(fā)器行為?;?a href="http://hljzzgx.com/tags/賽靈思/" target="_blank">賽靈思 7 系列架構(gòu)的 FPGA 器件的每個Slice中含有 8 個寄存器,所有這些寄存器都是 D 類觸發(fā)器。這些觸發(fā)器共享一個通用的控制集。
觸發(fā)器控制集的組成包括時鐘輸入(CLK)、高電平有效芯片使能端 (CE) 和高電平有效 SR 端口。觸發(fā)器中的 SR 端口既可用作同步置位/復(fù)位端口,也可用作異步預(yù)設(shè)/清除端口(見圖1)。
推斷觸發(fā)器的 RTL 代碼也能推斷觸發(fā)器準(zhǔn)備使用的復(fù)位類型。當(dāng)復(fù)位信號出現(xiàn)在 RTL 過程的敏感列表中時,該代碼就會推斷異步復(fù)位(如圖 2a所示)。隨后綜合工具將推斷出一個觸發(fā)器,該觸發(fā)器的 SR 端口被配置為預(yù)設(shè)或清除端口(用 FDCE 或者 FDPE 觸發(fā)器原語來表示)。在 SR 端口被斷言后,觸發(fā)器的輸出會被立即強(qiáng)制賦予給觸發(fā)器的 SRVAL 屬性。
在同步復(fù)位的情況下,綜合工具推斷出的觸發(fā)器,其 SR 端口被配置為置位或復(fù)位端口(用FDSE 或 FDRE 觸發(fā)器原語來表示)。SR 端口被斷言后,觸發(fā)器的輸出將在時鐘周期的下一個上升沿被強(qiáng)制賦予給觸發(fā)器的 SRVAL 屬性。
此外,還可以把觸發(fā)器的輸出初始化為 INIT 屬性規(guī)定的值。在配置過程中,當(dāng)全局置位/復(fù)位 (GSR) 信號被斷言時,INIT 值就會被加載到觸發(fā)器。
賽靈思 FPGA 中的觸發(fā)器能夠同時支持異步的和同步的復(fù)位與置位控制。但是,底層觸發(fā)器每次只能實現(xiàn)一個設(shè)置/重設(shè)/預(yù)設(shè)/清除。如果為 RTL 代碼中的多個設(shè)置/重設(shè)/預(yù)設(shè)/清除狀況進(jìn)行編碼,那么其中一種狀況的實現(xiàn)將使用觸發(fā)器的 SR端口,其余的狀況則使用架構(gòu)邏輯,因而會占用更多的 FPGA 資源。
如果其中一個狀況是同步的,另一個狀況是異步的,異步狀況的實現(xiàn)將使用 SR 端口,同步狀況的實現(xiàn)則使用架構(gòu)邏輯。一般來說,應(yīng)盡量避免出現(xiàn)一個以上的設(shè)置/重設(shè)/預(yù)設(shè)/清除狀況的出現(xiàn)。另外,對于 Slice 中的每個觸發(fā)器組(4 個觸發(fā)器為一組),只有一個屬性可以確定觸發(fā)器的 SR 端口是同步的還是異步的。
復(fù)位方法 不管使用哪種復(fù)位類型( 同步或是異步),一般都需要讓復(fù)位與時鐘同步。只要全局復(fù)位脈沖的持續(xù)時間足夠長,器件上所有的觸發(fā)器都會進(jìn)入復(fù)位狀態(tài)。但是,取消復(fù)位信號的斷言必須滿足觸發(fā)器的時序要求,才能保證觸發(fā)器順利地從復(fù)位狀態(tài)轉(zhuǎn)換到正常狀態(tài)。如果不能滿足時序要求,觸發(fā)器就會進(jìn)入亞穩(wěn)定狀態(tài)。
另外, 為了某些子系統(tǒng)的正常運行,比如狀態(tài)機(jī)和計數(shù)器,所有的觸發(fā)器必須在同一個時鐘邊沿退出復(fù)位。如果狀態(tài)機(jī)的不同部分在不同的時鐘周期退出復(fù)位狀態(tài),狀態(tài)機(jī)可能會進(jìn)入非法狀態(tài)。這就要求取消復(fù)位斷言必須與時鐘同步。
對在給定時鐘域中使用同步復(fù)位方法的設(shè)計來說,使用標(biāo)準(zhǔn)的亞穩(wěn)態(tài)解決電路(兩個背對背觸發(fā)器)就足以把全局復(fù)位引腳同步到特定的時鐘域。這個同步復(fù)位信號可以利用觸發(fā)器上的同步SR 端口初始化該時鐘域內(nèi)的所有存儲元件。由于待復(fù)位的同步器和觸發(fā)器都處于同一時鐘域,因此該時鐘域的標(biāo)準(zhǔn)PERIOD 約束的包括同步器與觸發(fā)器之間的路徑時序。器件中的每個時鐘域都需要使用單獨的同步器為該時鐘域生成一個同步的全局復(fù)位。
現(xiàn)在進(jìn)入實質(zhì)部分。下面是一些具體的提示和技巧,有助于您找到最佳的設(shè)計復(fù)位策略。
技巧 1:當(dāng)驅(qū)動觸發(fā)器的同步 SR端口時,每個時鐘域都需要全局復(fù)位的局部版本, 并與該時鐘域同步。
有時候不能保證設(shè)計的某個部分具備有效的時鐘。這種情況通常發(fā)生在這樣的系統(tǒng)中,即系統(tǒng)使用的時鐘為恢復(fù)時鐘,或者系統(tǒng)使用的時鐘源于熱拔插模塊。在這種情況下,可能需要使用觸發(fā)器上的異步 SR 端口,通過異步復(fù)位的方法對設(shè)計中的存儲元件進(jìn)行初始化。即便存儲元件使用的是異步 SR 端口,取消復(fù)位沿斷言仍然必須與時鐘同步。這項要求主要體現(xiàn)為觸發(fā)器的復(fù)位恢復(fù)時序弧,這類似于要求將異步 SR的取消斷言沿設(shè)置為與時鐘的上升沿同步。如果不能滿足這個時序弧的要求,就會導(dǎo)致觸發(fā)器進(jìn)入亞穩(wěn)態(tài),同步子系統(tǒng)也會進(jìn)入異常狀態(tài)。
圖 3 所示的復(fù)位橋接電路提供了一種機(jī)制,可以對復(fù)位進(jìn)行異步斷言(故在無有效時鐘的情況下也可以進(jìn)行)以及對復(fù)位進(jìn)行同步取消斷言。在這個電路中,假定兩個觸發(fā)器的 SR端口具有異步置位功能 (SRVAL=1)。
可以使用該復(fù)位橋的輸出來驅(qū)動給定時鐘域的異步復(fù)位。這種經(jīng)過同步的復(fù)位能夠使用觸發(fā)器的異步 SR 端口對該時鐘域中的所有存儲元件進(jìn)行初始化。器件中的每個時鐘域仍需要一個單獨的、經(jīng)過同步的、由單獨復(fù)位橋生成的全局復(fù)位。
技巧 2:復(fù)位橋接電路實現(xiàn)了一種安全的機(jī)制,可以同步地對異步復(fù)位取消斷言。使用復(fù)位橋接電路,每個時鐘域都需要全局復(fù)位的局部版本。
在圖 3 所示的電路中,假定為復(fù)位橋和相關(guān)邏輯提供時鐘信號的時鐘 (clk_a) 是穩(wěn)定且無誤的。在 FPGA 中,時鐘信號可以直接來自片外的時鐘源(理想的情況下是通過有時鐘功能的引腳獲得),或者可以用 MMCM 或者鎖相環(huán)(PLL) 在內(nèi)部生成。任何用于生成時鐘的MMCM 或者 PLL 在復(fù)位之后都需要進(jìn)行校準(zhǔn)。因此,可能需要在全局復(fù)位路徑中插入額外的邏輯來穩(wěn)定時鐘。
技巧3:在對 FPGA 的全局復(fù)位取消斷言之前,確保由 MMCM 或PLL 生成的時鐘是穩(wěn)定且被鎖定的
圖 4 是 FPGA 中典型的復(fù)位實現(xiàn)方法。
賽靈思寄存器的 SR 控制端口屬于高電平有效。如果 RTL 代碼描述的是低電平有效的設(shè)置/重設(shè)/預(yù)設(shè)/清除功能,那么綜合工具在驅(qū)動寄存器的控制端口之前,必須首先推斷出一個反相器。由于必須使用查找表來完成反相操作,所以需要一個 LUT 輸入。這個因使用低電平有效的控制信號而增加的邏輯可能導(dǎo)致運行時間延長,器件利用率下降。而且它還會給時序和功耗造成不利影響。
那么底線是什么呢?在 HDL 代碼或者實例化組件中盡量使用高電平有效的控制信號。在無法控制設(shè)計中控制信號的極性的時候,應(yīng)在代碼的最頂層對信號進(jìn)行反相操作。用這種方法進(jìn)行描述,推斷出的反相器可以并入 I/O 邏輯中,無需占用額外的 FPGA 邏輯或者布線。
技巧 4:高電平有效復(fù)位能夠?qū)崿F(xiàn)更高的器件利用率,并可改善性能 值得注意的是,F(xiàn)PGA 不是一定需要全局復(fù)位。全局復(fù)位和設(shè)計中的其它線路一樣,要爭用相同的布線資源。全局復(fù)位一般具有高扇出,因為它需要擴(kuò)展到設(shè)計中的每一個觸發(fā)器。這樣會消耗大量的布線資源,對器件的利用率和時序性能造成不利影響。由此,有必要探索出不是建立在完整的全局復(fù)位基礎(chǔ)之上的其它復(fù)位機(jī)制。
在配置或重配置賽靈思 FPGA時,每一個單元(包括觸發(fā)器和 block RAM)都需要進(jìn)行初始化,如圖 5 所示。因此,F(xiàn)PGA 配置具有與全局復(fù)位一樣的效果,因為它能將 FPGA中的每一個存儲元件的初始狀態(tài)都設(shè)置為已知狀態(tài)。
可以從 RTL 代碼中推斷觸發(fā)器初始化值。圖 6 的示例說明了如何對 RTL中寄存器的初始化進(jìn)行編碼。FPGA 工具能夠綜合這些信號的初始化,盡管通常會誤以為做不到。底層 VHDL 信號或者 Verilog 寄存器的初始化值會成為推斷出的觸發(fā)器的 INIT 值,這個值會在配置的過程中被加載到觸發(fā)器中。
使用寄存器還可以在配置過程中初始化 block RAM。隨著基于處理器的系統(tǒng)中嵌入式 RAM 數(shù)量的增多,BRAM初始化已經(jīng)成為一項有用的功能。這是因為預(yù)先定義的 RAM 能夠簡化仿真設(shè)置,并且無需使用引導(dǎo)順序為嵌入式設(shè)計清空內(nèi)存。
全局置位/復(fù)位 (GSR) 信號是一種特殊的預(yù)布線復(fù)位信號,能夠在 FPGA配置的過程中讓設(shè)計保持初始狀態(tài)。在配置完成后,GSR 會被釋放,所有的觸發(fā)器及其它資源都加載的是 INIT 值。除了在配置進(jìn)程中運行 GSR,用戶設(shè)計還可以通過實例化 STARTUPE2 模塊并連接到 GSR 端口的方法來訪問 GSR 網(wǎng)。使用該端口,設(shè)計可以重新斷言 GSR網(wǎng),相應(yīng)地 FPGA 中的所有存儲元件將返回到它們的 INIT 屬性所規(guī)定的狀態(tài)。
取消斷言 GSR 是異步的,需要使用多個時鐘才能影響到設(shè)計中的所有觸發(fā)器。對于狀態(tài)機(jī)、計數(shù)器或者其它能夠自動改變狀態(tài)的邏輯,需要一個顯示的復(fù)位,用于同步取消用戶時鐘斷言。因次,使用 GSR 作為唯一的復(fù)位機(jī)制可能導(dǎo)致系統(tǒng)不可靠。
因此,最好是綜合采用多種方法來有效地管理啟動。
技巧 5:依靠 GSR 提供的內(nèi)置初始化功能,同時對設(shè)計中能夠自動啟動的部分進(jìn)行顯式復(fù)位,這種綜合法能夠帶來更高的利用率和性能。
在使用 GSR 設(shè)置整個設(shè)計的初始狀態(tài)之后,對需要同步復(fù)位的邏輯單元(比如狀態(tài)機(jī))使用顯式復(fù)位??墒褂脴?biāo)準(zhǔn)的亞穩(wěn)態(tài)解決電路或者復(fù)位橋來生成同步的顯式復(fù)位。
使用恰當(dāng)?shù)膹?fù)位實現(xiàn)利用率的最大化 RTL 代碼中使用的復(fù)位類型對工具將設(shè)計映射到 FPGA 底層資源的能力有重大影響。在編寫 RTL 代碼的時候,設(shè)計人員應(yīng)根據(jù)情況定制子設(shè)計的復(fù)位方式,以便工具能夠把設(shè)計映射到這些資源。
應(yīng)注意的是,SRL、LUTRAM 和BRAM 中內(nèi)容的初始化,只能用 GSR方法來完成,不能使用顯式復(fù)位。因此,在為以上這些資源編寫代碼時,應(yīng)注意避免在編碼中使用復(fù)位。例如,如果一段 RTL 代碼描述的是一個 32 位移位寄存器,而且對移位寄存器的 32 個階進(jìn)行顯式復(fù)位,那么綜合工具將無法將這段 RTL 代碼直接映射到 SRL32E上, 因為它無法滿足該資源的編碼復(fù)位要求。作為替代,該代碼將圍繞SRL32E 推斷出 32 個觸發(fā)器,或推斷出一些其它電路,用以實現(xiàn)要求的復(fù)位功能。相對于不使用復(fù)位的 RTL 代碼,這兩種解決方案都會占用更多資源。
技巧 6:在映射到 SRL、LUTRAM或者 BRAM 時,不要為 SRL 或者RAM 陣列的復(fù)位進(jìn)行編碼 在 7 系列器件中,不能把具有不同控制信號的觸發(fā)器打包到同一個 Slice中。對于低扇出復(fù)位,這樣會給 Slice的總體利用率造成不利影響。在同步復(fù)位的情況下,綜合工具可以使用 LUT(如圖 7 所示)來實現(xiàn)復(fù)位功能,而不是使用觸發(fā)器的控制端口,故而可將復(fù)位當(dāng)作控制端口移除。這樣就可以把得到的 LUT/觸發(fā)器對與其它不使用其 SR端口的觸發(fā)器打包。這樣做的結(jié)果是LUT 使用率雖然會上升,但 Slice 的使用率可以得到改善。
技巧 7:同步復(fù)位能夠增強(qiáng) FPGA利用率。在設(shè)計中應(yīng)使用同步復(fù)位,而不是異步復(fù)位
一些較大的專用資源(即 BRAM和 DSP48E1 單元)內(nèi)含的寄存器可以被推斷為專用資源功能的組成部分。BRAM 包含可選的輸出寄存器,可利用該寄存器以及附加的時延時鐘來改善時鐘頻率。DSP48E1 有許多寄存器,既可以作為流水線來增加最大時鐘速度,也可作為周期時延 (Z-1)。但是這些寄存器只具備同步置位/復(fù)位功能。
技巧 8:使用同步復(fù)位可以允許綜合工具使用 DSP48E1 Slice 或BRAM等專用資源內(nèi)部的寄存器。這樣能夠改善設(shè)計中相應(yīng)部分的器件總體使用率和性能,同時降低總體功耗。
如果 RTL 代碼描述的是異步置位/復(fù)位,那么綜合工具就無法使用這些內(nèi)部寄存器。作為替代,它將使用 Slice觸發(fā)器,因為它們能夠?qū)崿F(xiàn)要求的異步置位/復(fù)位功能。這樣不僅會導(dǎo)致器件利用率降低,還會給性能和功耗造成不利影響。
多種選擇 有多種復(fù)位方法可供 FPGA 選擇,每種都有自身的優(yōu)勢和不足。這里提出的建議有助于設(shè)計人員為自己的設(shè)計選擇最適合的復(fù)位結(jié)構(gòu)。理想的復(fù)位結(jié)構(gòu)能夠改善 FPGA 的器件使用率、時序和功耗。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602977 -
復(fù)位
+關(guān)注
關(guān)注
0文章
171瀏覽量
24211
原文標(biāo)題:FPGA復(fù)位的8種技巧
文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論