重定時(shí)概述
重定時(shí)是一種順序優(yōu)化技術(shù),旨在不會(huì)影響電路的輸入/輸出行為的前提下在組合邏輯之間移動(dòng)寄存器,以提高設(shè)計(jì)性能。圖 1 所示電路的關(guān)鍵路徑使用了一個(gè) 6 輸入加法器。以紅色突出顯示的路徑是對(duì)整個(gè)電路的性能起限制作用的路徑。
圖 1:寄存器到寄存器路徑設(shè)計(jì)示例:使用 6 個(gè)輸入加法器邏輯
通過將加法器輸出上的寄存器重定時(shí)到電路的組合邏輯,可以提升這里所示電路的性能。
電路的整體時(shí)延為 4。圖 2 顯示移動(dòng)寄存器使邏輯最小化的一種方法。將輸出寄存器移動(dòng)到邏輯錐中被稱為后向重定時(shí)。完成此操作后,關(guān)鍵路徑將減少為只使用一個(gè) 2 輸入加法器。
圖 2:寄存器到寄存器路徑設(shè)計(jì)示例:通過應(yīng)用反向重定時(shí)使用一個(gè) 2 輸入加法器
注意:在上述示例中,寄存器的數(shù)量改變了。
圖 1 使用了 9 條不同的寄存器總線。圖 2 使用了 12 條不同的寄存器總線。這樣做的原因是,當(dāng)執(zhí)行向后重定時(shí)時(shí),即當(dāng)它從輸出移動(dòng)到輸入時(shí),門的兩個(gè)輸入一定各有一個(gè)寄存器。
有兩種不同類型的重定時(shí):后向重定時(shí)和前向重定時(shí)。后向重定時(shí)從門的輸出中移除寄存器,并在同一個(gè)門的輸入處創(chuàng)建新的寄存器。前向重定時(shí)完全相反,它從門的輸入端移除寄存器,并在輸出端創(chuàng)建一個(gè)新的寄存器。
要執(zhí)行后向重定時(shí)操作,組合邏輯必須僅驅(qū)動(dòng)寄存器,而不是扇出到其他邏輯。要執(zhí)行前向重定時(shí)操作,門的每個(gè)輸入必須由具有相同控制邏輯的寄存器驅(qū)動(dòng)。圖 3 顯示的是采用前向或后向重定時(shí)的同一個(gè)電路。
圖 3:前向重定時(shí)或后向后重定時(shí)的與門
全局重定時(shí)與局部后重定時(shí)
在 Vivado 綜合中,有兩種啟用重定時(shí)的方式:“全局”和“局部”。
全局重定時(shí)對(duì)整個(gè)設(shè)計(jì)進(jìn)行重定時(shí),并根據(jù)設(shè)計(jì)時(shí)序在大型組合邏輯結(jié)構(gòu)中移動(dòng)寄存器。
它會(huì)對(duì)設(shè)計(jì)中的所有邏輯進(jìn)行分析,并在最壞情況的路徑中移動(dòng)寄存器,以便設(shè)計(jì)能夠跑得更快。為了完成此操作,設(shè)計(jì)必須在 .xdc 文件中含有準(zhǔn)確的時(shí)序約束。使用 synth_design 命令行中或 Vivado GUI 中綜合設(shè)置下的 -retiming 開關(guān)啟用全局重定時(shí)。 此外,此功能還可以與綜合中的 BLOCK_SYNTH 功能一起使用,作用于您設(shè)計(jì)中的特定模塊。
局部重定時(shí)是指用戶明確告訴工具使用 retiming_forward/retiming_backward RTL 屬性執(zhí)行重定時(shí)時(shí)的邏輯。
在執(zhí)行局部重定時(shí)時(shí)應(yīng)小心,由于這種重定向不是時(shí)序驅(qū)動(dòng)的,工具會(huì)完全按照要求進(jìn)行操作。
如需了解更多有關(guān)使用重定時(shí)的信息,請(qǐng)參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。
分析日志文件中的消息,圖 4 顯示的是可以改善邏輯層次的重定時(shí)示例。該結(jié)構(gòu)的關(guān)鍵路徑有 3 個(gè)來自 37 位的與門的邏輯層次。源寄存器被稱為 din1_dly_reg,目標(biāo)寄存器被稱為 tmp1_reg,在 tmp1_reg 后面還有一個(gè)邏輯層次為 0 的額外寄存器。
這是重新定時(shí)的理想途徑,因?yàn)槲覀兛梢园岩粋€(gè)有 3 個(gè)邏輯層次的路徑(后跟邏輯層次為 0 的路徑)切換到有 2 個(gè)邏輯層次的路徑(后跟一個(gè)有 1 或 2 個(gè)邏輯層次的路徑)。
圖 4:可以向后重定時(shí)的電路
綜合日志文件類似于以下內(nèi)容:
INFO: [Synth 8-5816] Retiming module "test"
Effective logic levels on critical path before retiming is: 3
Total number of crtical paths = 30
Optimizing at the module level
Optimizing locally to improve critical paths (may not reduce worst delay)
Effective logic levels on critical path after retiming is: 2
Total number of crtical paths = 30
Numbers of forward move = 0, and backward move = 1
Retimed registers names:
tmp1_reg_bret
tmp1_reg_bret__0
INFO: [Synth 8-5816] Retiming module "test" done
從此日志文件中,您可以看到重新定時(shí)之前和之后報(bào)告的邏輯層次,以及創(chuàng)建的新寄存器的名稱。當(dāng)綜合從重定時(shí)創(chuàng)建新寄存器時(shí),它會(huì)對(duì)后向重新定時(shí)的寄存器使用后綴“bret”、對(duì)前向重定時(shí)的寄存器使用“fret”。
圖 5 中顯示的電路展示的是不兼容的寄存器元件會(huì)讓重定時(shí)變?yōu)榉欠ú僮鳌T摻Y(jié)構(gòu)使用的仍是一個(gè)名為 din1_dly_reg 的啟動(dòng)寄存器,通過一個(gè) 37 位的與門,產(chǎn)生 3 個(gè)邏輯層次,然后最后是一個(gè)名為 din1_dly_reg 的寄存器。此外,與門還有另一個(gè)以粉紅色突出顯示的寄存器扇出。
圖 5:無法重定時(shí)的電路示例
由于以粉色突出顯示的寄存器的存在,此示例無法重新定時(shí)。該寄存器采用了異步復(fù)位,而 tmp1_reg 沒有采用異步復(fù)位。由于兩個(gè)寄存器的控制集不相同,因此它們無法后向重定時(shí)到與門邏輯。此示例中的日志文件會(huì)顯示以下內(nèi)容:
INFO: [Synth 8-5816] Retiming module "test"
Effective logic levels on critical path before retiming is: 3
Total number of crtical paths = 60
Optimizing at the module level
Cannot find a feasible solution:
backward propagation for flip-flop tmp1_reg:FD along instance tmp1_i_1:LUT2 fails due to incompatible flip-flops
Optimizing locally to improve critical paths (may not reduce worst delay)
Effective logic levels on critical path after retiming is: 3
Total number of crtical paths = 60
Numbers of forward move = 0, and backward move = 0
Retimed registers names:
tmp1_reg_bret
tmp1_reg_bret__0
INFO: [Synth 8-5816] Retiming module "test" done
日志文件內(nèi)含有關(guān)不兼容觸發(fā)器的消息,并且之前和之后的邏輯層次不會(huì)改變。
在以下情況下不能進(jìn)行重定時(shí):
寄存器上加有時(shí)序異常約束(多周期路徑、可忽略路徑、最大延遲)。
存器有保留類型的屬性(DONT_TOUCH、MARK_DEBUG)。
帶有不同控制集的寄存器。
寄存器驅(qū)動(dòng)輸出或由輸入驅(qū)動(dòng)(除非設(shè)計(jì)被標(biāo)記為 out-of-context)。
重定時(shí)無法提升反饋循環(huán)中的關(guān)鍵路徑的示例
當(dāng)路徑的源寄存器和目標(biāo)寄存器相同時(shí),重定時(shí)優(yōu)化有可能無法改善邏輯層次。
例如:
寄存器“dout_reg”的關(guān)鍵路徑以紅色突出顯示。它通過一個(gè)減位與運(yùn)算符,并在同一寄存器的復(fù)位引腳處結(jié)束。減位與運(yùn)算符將基于我們采用的寬度(即 16 位)占用 2 個(gè)邏輯層次。
下面的屏幕截圖顯示綜合對(duì)關(guān)鍵路徑的性質(zhì)的描述。
它還提到了作為關(guān)鍵路徑一部分的單元名稱。
INFO: [Synth 8-5816] Retiming module "test"
Effective logic levels on critical path before retiming is: 2
Total number of crtical paths = 192
Optimizing at the module level
Cannot find a feasible solution:
Worst path is a self-loop from dout_reg[14] to dout_reg[14]
Optimizing locally to improve critical paths (may not reduce worst delay)
Effective logic levels on critical path after retiming is: 2
Total number of crtical paths = 192
Numbers of forward move = 0, and backward move = 0
-
電路
+關(guān)注
關(guān)注
172文章
5828瀏覽量
171811 -
寄存器
+關(guān)注
關(guān)注
31文章
5301瀏覽量
119866
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論