重定時(Retiming)是一種時序優化技術,用在不影響電路輸入/輸出行為的情況下跨組合邏輯寄存器從而提高設計性能。圖1所示的電路是六輸入加法器,其中有一條關鍵路徑,紅色推出顯示的路徑是限制整個電路性能的關鍵路徑。
圖1:六輸入加法器寄存器到寄存器之間的信號路徑示例
通過對加法器輸出路徑上寄存器進行重定時設計,調整電路的組合邏輯,可以改變整個電路的性能。
整個電路的延遲是4,圖2展示的是一種寄存器組合方法可以將邏輯最小化,將輸出寄存器融合到邏輯寄存器中稱為向后重定時設計,這一步完成后關鍵路徑被壓縮為二輸入加法器。
圖2:采用向后重定時方案二輸入加法器寄存器到寄存器路徑設計的一個示例
關于上述 示例需要注意的另一點是寄存器數量的變化。
圖1采用9個不同寄存器總線,圖2使用了12個不同寄存器總線,產生這樣結果的原因是當采用向后重定時設計時,當寄存器從輸出移動到輸入時,邏輯門的兩個輸入都必須增加一個寄存器。
有兩種不同的重定時方法,向后重定時和向前重定時。向后重定時從門的輸出中刪除寄存器,并在同一邏輯門的輸入出創建新的寄存器。向前重定時的作用正好相反,它從邏輯門的輸入中刪除寄存器,并在輸出中創建新的寄存器。
若要向后重定時,組合邏輯必須僅用來驅動寄存器,而不能向其他邏輯寄存器展開,為了使前向重定時正常工作,邏輯門的每個輸入必須有具有相同控制邏輯的寄存器來驅動。
圖3:邏輯與門(AND)采用前向重定時和后向重定時的效果
全局重定時vs 局部重定時
在Vivado 綜合操作中有兩種方法實現自動重定時:全局重定時和局部重定時。
全局重定時是對整個設計而言的,基于設計時的時序要求優化大型組合邏輯結構中的寄存器設計。
這種方式需要分析設計中的所有邏輯,優化最壞路徑情況下的寄存器從而使整體設計反應速度更快。為了實現這一點設計時必須在.xdc文件中規定準確的時間限制。在synth_design或Vivado GUI綜合設置下通過-retiming命令啟用全局重定時,此外該特性還可以與合成中的BLOCK_SYNTH特性一起用于設計中的特定模塊。
局部重定時是指用戶明確告訴工具使用retiming_forward、retiming_bbackward RTL屬性時需要執行的重定時邏輯。
執行局部重定時操作是應該要小心,因為它不是計時器驅動的,而是工具將完全按照用戶要求去執行。
有關重定時使用的更多信息,請參閱(UG901)Vivado設計工具用戶指南:Synthesis(綜合)。
分析日志文件中的信息
圖4是通過重定時提升邏輯水平的一個例子,該電路結構中有一個關鍵的路徑分為三個邏輯層,組成的是一個37位的邏輯與門(AND),源寄存器命名為din1_dly_reg,目標寄存器命名為tmp1_reg,在邏輯級別為0的tmp1_reg后面增加一個額外的寄存器。
這是一個理想的重定時邏輯路徑設計,因為我們可以切換為三個邏輯級別的路徑,由0、1、2三個局部邏輯電路模塊組成。
圖4:采用后向重定時設計的電路
綜合操作日志文件包含的信息大致如下:
從這個日志文件中你可以看到重定時操作前后的邏輯門信息對比,以及創建的新寄存器名稱,當synthesis通過重定時創建新寄存器時,它將對后向重定時的寄存器使用后綴“bret”,對前向重定時寄存器使用后綴“fret”。
圖5展示的電路中一些不兼容的寄存器將無法進行重定時操作,這個結構中同樣有一個名為din1_dly_reg的源寄存器,它經過37位邏輯與門生成三級邏輯電路結構,然后在din1_dly_reg寄存器前結束。此外邏輯與門還有一路連接到另外一個寄存器,如下圖粉色高亮顯示的部分。
圖5:不能進行重定時操作電路的示例
這是示例不能進行重定時操作是因為粉紅色高亮顯示的部分,這個寄存器需要一部重置,而tmp1_reg沒有這個功能,因為這兩個寄存器沒有相同的控制集,所以它們不能向后重定時到新的邏輯與門電路中,本例的日志文件信息如下:
這個日志文件包含的信息是關于 不兼容的FIFO寄存器的,前后的電路的邏輯層級不變。
以下情況下不能進行重定時操作:1. 寄存器時序異常(多循環路徑、錯誤的路徑、最大延遲路徑)2. 寄存器的類型屬性不能改變(DONT_TOUCH, MARK_DEBUG)3. 采用不同控制級的寄存器
驅動輸出的寄存器或者被輸入驅動的寄存器(除非這部分是與前后電路不相關的)
重定時無法改善反饋循環回路中關鍵路徑的性能的一個例子:
當路徑中具有相同的源寄存器和目標寄存器時,重定時優化操作可能無法改進整個邏輯電路的結構。
舉個例子:
寄存器“dout_reg”的關鍵路徑如下圖中紅色所示,要經過一個邏輯與運算,然后連接到同一寄存器的復位管腳上才算結束。
根據數位寬度(16比特)邏輯與門電路要占用兩個邏輯操作。
下面的屏幕截圖顯示了綜合操作如何描述關鍵路徑的
其中還提到了關鍵路徑中一部分模塊或寄存器的名字。
-
寄存器
+關注
關注
31文章
5363瀏覽量
120925 -
總線
+關注
關注
10文章
2900瀏覽量
88277 -
Vivado
+關注
關注
19文章
815瀏覽量
66786
原文標題:Vivado綜合操作中的重定時(Retiming)
文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發圈】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論