Xilinx FPGA復位邏輯處理小結
1. 為什么要復位呢?
(1)FPGA上電的時候對設計進行初始化;
(2)使用一個外部管腳來實現全局復位,復位作為一個同步信號將所有存儲單元設置為一個已知的狀態,這個全局復位管腳與任何其他的輸入管腳沒有什么差別,經常以異步的方式作用於FPGA。因此,設計人員可以在FPGA內部采用異步或者同步的方式來復位他們的設計。 (always@(posedge clk or posedge rst) )
2. 復位是針對存儲單元--觸發器,首先有必要了解一下觸發器(flip-flops)
Xilinx7系列架構的FPGA每一個slice里面包含8個寄存器,並且所有的這些寄存器都是D觸發器,這些觸發器共享控制集。控制集包括輸入時鍾信號(clk),高電平有效使能信號(ce)和高電平有效清零(SR)。SR在觸發器里用作同步置位/復位或者異步預復位/清零。
同步復位與異步復位:
當復位信號出現在敏感信號列表中時,觸發器將采用異步復位的方式。觸發器的SR端口被配置為預置位/清零端口,用FDCE/FDPE觸發器來表示。一旦RST= ‘1’條件滿足,觸發器將立即輸出SRVAl屬性。
在同步復位的情形,觸發器的SR端口被配置為置位/復位端口,用FDSE/FDRE觸發器來表示。一旦RST=‘1’條件滿足,
觸發器將在下一個時鍾上升沿時輸出SRVAl屬性。
INIT 與SRVAL屬性
INIT屬性用來初始化觸發器,INIT屬性的值將在配置過程中加載到觸發器。
XilinxFPGA 的觸發器可以支持同步或者異步復位、置位控制,但是關聯的觸發器一次只能實現one set / reset / preset /clear中的一個。RTL代碼中使用了set / reset / preset /clear 里不止一種時,將導致一些條件下使用觸發器的SR端口,而另一些條件下使用fabric logic,則將消耗了更多FPGA資源。一般來說,最好避免使用超過一種set/reset/preset/clearcondition。
3. 除了考慮復位類型,還需要考慮復位信號與時鍾是否同步的問題
只要全局復位脈沖信號持續的時間夠長,FPGA所有的觸發器都將進入復位狀態。然而,復位信號的解除必須滿足觸發器的時序要求,以確保觸發器能夠正確的從復位狀態恢復到正常狀態。不滿足這些時序要求,將導致觸發器進入亞穩態。
並且,為確保子系統(如狀態機、計數器)正常工作,所有的觸發器必須在相同的時鍾沿跳出復位狀態。
如果同一狀態機的不同的bit在不同的時鍾沿跳出復位狀態,則狀態機將轉移的一個非法的狀態,這就說明了解除復位信號時與時鍾同步必要性。
4. 兩種復位機制
同步復位機制:
可以使用一種標准的亞穩態消除電路(兩個觸發器背靠背相連)來將全局復位同步到特定的時鍾域。同步化的復位信號可以使用同步SR端口來初始化所有的存儲單元。由於同步器和觸發器在同一時鍾域里被復位,標准的時鍾周期約束包括了它們之間的路徑的時間。在FPGA中每一個時鍾域需要使用單獨的同步器來為對應的時鍾域產生同步化的全局復位信號。
Tip 1: When driving the synchronous SR port of flip-flops, every clock domain requires its own localized version of the global reset, synchronized to that domain
異步復位機制:
設計中的存儲單元可能需要使用觸發器的異步SR port 來異步復位初始化。盡管這些存儲單元使用了異步的SR端口,復位信號的解除必須與時鍾信號同步。這與觸發器的復位恢復時序要求有關,類似於異步SR解除信號邊沿對時鍾上升沿要滿足建立時間的要求。不能滿足這些時序要求時將導致觸發器進入一個亞穩態,同步的子系統進入異常的狀態。
--復位橋電路復位橋電路提供了異步復位聲明、同步復位解除的機制。在這個電路中,假定兩個觸發器的SR port 有一個異步設置的值,SRVAL= 1:
復位橋電路提供了同步的解除異步復位的安全機制。每一個時鍾域需要使用復位橋電路來產生它自己的本地化(localized)的全局復位信號。FPGA的每一個時鍾域需要一個單獨的、同步化的全局復位信號。它可以由單獨的復位橋電路來產生。
圖中電路假定:復位橋電路和相關的邏輯的時鍾源clk_a是穩定的、無錯的。在FPGA中,時鍾可以來自芯片外的時鍾源(最好通過一個clock-capable管腳),或者采用MMCM或者PLL內部產生。任何用於產生時鍾信號的MMCM or PLL在復位后需要校准。因此,你可能需要在全局復位路徑插入一些額外的邏輯來穩定時鍾信號。
Tip 2: A reset bridgecircuit provides a safe mechanism to deassert an asynchronous resetsynchronously.Every clock domainrequires its own localized version of the global reset with the use of a resetbridge circuit.
Tip 3: Ensure that theclock the MMCM or PLL has generated is stable and locked before deasserting theglobal reset to the FPGA
FPGA內實現異步復位邏輯的典型框圖
5. 為什么復位信號一般都使用高點平有效呢?
Xilinx 寄存器的SR控制端是高電平有效的。如果RTL代碼采用了低電平有效的復位模式,綜合器將在復位信號驅動寄存器SR控制端之前的插入一個反相器(interver)。你必須使用一個查找表(look up table)來實現反向器,以利用LUT的輸入端口。低電平有效的控制信號帶來的額外的邏輯可能拉長了執行時間(runtime),將導致更低的FPGA資源利用率,也將影響時序和功耗。
到底我想說點什么呢?盡可能的在HDL代碼或者實例化的模塊中使用高電平有效的控制信號。如果在設計中,你不能夠改變這些控制信號的極性,你需要在代碼的頂層文件反轉這些控制信號。采用這種方式描述電路的話,這些反向器將被吸收到I/O邏輯中,而不需要使用額外的FPGA邏輯、路徑。
Tip 4: Active-high resets enable better device utilization and improveperformance.
6.到底如何用呢?
應用場合:多個時鍾域的情況下的復位,針對每一個時鍾域都得有對應的復位邏輯。
參見tri_mode_mac 參考例子中的實現方法。
7. 復位橋電路到底怎么實現呢?
`timescale 1ps/1ps module tri_mode_mac_reset_sync #( parameter INITIALISE = 2'b11 ) ( input reset_in, input clk, input enable, output reset_out ); wire reset_stage1; wire reset_stage2; (* ASYNC_REG = "TRUE", RLOC = "X0Y0", SHREG_EXTRACT = "NO", INIT = "1" *) FDPE #( .INIT (INITIALISE[0]) ) reset_sync1 ( .C (clk), .CE (enable), .PRE(reset_in), .D (1'b0), .Q (reset_stage1) ); (* ASYNC_REG = "TRUE", RLOC = "X0Y0", SHREG_EXTRACT = "NO", INIT = "1" *) FDPE #( .INIT (INITIALISE[1]) ) reset_sync2 ( .C (clk), .CE (enable), .PRE(reset_in), .D (reset_stage1), .Q (reset_stage2) ); assign reset_out = reset_stage2; endmodule
參考文檔:how do i reset FPGA
Srikanth Erusalagandi, Xilinx
---------------------
作者:shanekong
來源:CSDN
原文:https://blog.csdn.net/shanekong/article/details/44834381?utm_source=copy
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
7series 邏輯單元