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