0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Vivado綜合操作中的重定時(shí)(Retiming)

YCqV_FPGA_EETre ? 來源:lp ? 2019-03-14 16:26 ? 次閱讀

重定時(shí)(Retiming)是一種時(shí)序優(yōu)化技術(shù),用在不影響電路輸入/輸出行為的情況下跨組合邏輯寄存器從而提高設(shè)計(jì)性能。圖1所示的電路是六輸入加法器,其中有一條關(guān)鍵路徑,紅色推出顯示的路徑是限制整個(gè)電路性能的關(guān)鍵路徑。

圖1:六輸入加法器寄存器到寄存器之間的信號路徑示例

通過對加法器輸出路徑上寄存器進(jìn)行重定時(shí)設(shè)計(jì),調(diào)整電路的組合邏輯,可以改變整個(gè)電路的性能。

整個(gè)電路的延遲是4,圖2展示的是一種寄存器組合方法可以將邏輯最小化,將輸出寄存器融合到邏輯寄存器中稱為向后重定時(shí)設(shè)計(jì),這一步完成后關(guān)鍵路徑被壓縮為二輸入加法器。

圖2:采用向后重定時(shí)方案二輸入加法器寄存器到寄存器路徑設(shè)計(jì)的一個(gè)示例

關(guān)于上述 示例需要注意的另一點(diǎn)是寄存器數(shù)量的變化。

圖1采用9個(gè)不同寄存器總線,圖2使用了12個(gè)不同寄存器總線,產(chǎn)生這樣結(jié)果的原因是當(dāng)采用向后重定時(shí)設(shè)計(jì)時(shí),當(dāng)寄存器從輸出移動到輸入時(shí),邏輯門的兩個(gè)輸入都必須增加一個(gè)寄存器。

有兩種不同的重定時(shí)方法,向后重定時(shí)和向前重定時(shí)。向后重定時(shí)從門的輸出中刪除寄存器,并在同一邏輯門的輸入出創(chuàng)建新的寄存器。向前重定時(shí)的作用正好相反,它從邏輯門的輸入中刪除寄存器,并在輸出中創(chuàng)建新的寄存器。

若要向后重定時(shí),組合邏輯必須僅用來驅(qū)動寄存器,而不能向其他邏輯寄存器展開,為了使前向重定時(shí)正常工作,邏輯門的每個(gè)輸入必須有具有相同控制邏輯的寄存器來驅(qū)動。

圖3:邏輯與門(AND)采用前向重定時(shí)和后向重定時(shí)的效果

全局重定時(shí)vs 局部重定時(shí)

在Vivado 綜合操作中有兩種方法實(shí)現(xiàn)自動重定時(shí):全局重定時(shí)和局部重定時(shí)。

全局重定時(shí)是對整個(gè)設(shè)計(jì)而言的,基于設(shè)計(jì)時(shí)的時(shí)序要求優(yōu)化大型組合邏輯結(jié)構(gòu)中的寄存器設(shè)計(jì)。

這種方式需要分析設(shè)計(jì)中的所有邏輯,優(yōu)化最壞路徑情況下的寄存器從而使整體設(shè)計(jì)反應(yīng)速度更快。為了實(shí)現(xiàn)這一點(diǎn)設(shè)計(jì)時(shí)必須在.xdc文件中規(guī)定準(zhǔn)確的時(shí)間限制。在synth_design或Vivado GUI綜合設(shè)置下通過-retiming命令啟用全局重定時(shí),此外該特性還可以與合成中的BLOCK_SYNTH特性一起用于設(shè)計(jì)中的特定模塊。

局部重定時(shí)是指用戶明確告訴工具使用retiming_forward、retiming_bbackward RTL屬性時(shí)需要執(zhí)行的重定時(shí)邏輯。

執(zhí)行局部重定時(shí)操作是應(yīng)該要小心,因?yàn)樗皇怯?jì)時(shí)器驅(qū)動的,而是工具將完全按照用戶要求去執(zhí)行。

有關(guān)重定時(shí)使用的更多信息,請參閱(UG901)Vivado設(shè)計(jì)工具用戶指南:Synthesis(綜合)。

分析日志文件中的信息

圖4是通過重定時(shí)提升邏輯水平的一個(gè)例子,該電路結(jié)構(gòu)中有一個(gè)關(guān)鍵的路徑分為三個(gè)邏輯層,組成的是一個(gè)37位的邏輯與門(AND),源寄存器命名為din1_dly_reg,目標(biāo)寄存器命名為tmp1_reg,在邏輯級別為0的tmp1_reg后面增加一個(gè)額外的寄存器。

這是一個(gè)理想的重定時(shí)邏輯路徑設(shè)計(jì),因?yàn)槲覀兛梢郧袚Q為三個(gè)邏輯級別的路徑,由0、1、2三個(gè)局部邏輯電路模塊組成。

圖4:采用后向重定時(shí)設(shè)計(jì)的電路

綜合操作日志文件包含的信息大致如下:

從這個(gè)日志文件中你可以看到重定時(shí)操作前后的邏輯門信息對比,以及創(chuàng)建的新寄存器名稱,當(dāng)synthesis通過重定時(shí)創(chuàng)建新寄存器時(shí),它將對后向重定時(shí)的寄存器使用后綴“bret”,對前向重定時(shí)寄存器使用后綴“fret”。

圖5展示的電路中一些不兼容的寄存器將無法進(jìn)行重定時(shí)操作,這個(gè)結(jié)構(gòu)中同樣有一個(gè)名為din1_dly_reg的源寄存器,它經(jīng)過37位邏輯與門生成三級邏輯電路結(jié)構(gòu),然后在din1_dly_reg寄存器前結(jié)束。此外邏輯與門還有一路連接到另外一個(gè)寄存器,如下圖粉色高亮顯示的部分。

圖5:不能進(jìn)行重定時(shí)操作電路的示例

這是示例不能進(jìn)行重定時(shí)操作是因?yàn)榉奂t色高亮顯示的部分,這個(gè)寄存器需要一部重置,而tmp1_reg沒有這個(gè)功能,因?yàn)檫@兩個(gè)寄存器沒有相同的控制集,所以它們不能向后重定時(shí)到新的邏輯與門電路中,本例的日志文件信息如下:

這個(gè)日志文件包含的信息是關(guān)于 不兼容的FIFO寄存器的,前后的電路的邏輯層級不變。

以下情況下不能進(jìn)行重定時(shí)操作:1. 寄存器時(shí)序異常(多循環(huán)路徑、錯誤的路徑、最大延遲路徑)2. 寄存器的類型屬性不能改變(DONT_TOUCH, MARK_DEBUG)3. 采用不同控制級的寄存器

驅(qū)動輸出的寄存器或者被輸入驅(qū)動的寄存器(除非這部分是與前后電路不相關(guān)的)

重定時(shí)無法改善反饋循環(huán)回路中關(guān)鍵路徑的性能的一個(gè)例子:

當(dāng)路徑中具有相同的源寄存器和目標(biāo)寄存器時(shí),重定時(shí)優(yōu)化操作可能無法改進(jìn)整個(gè)邏輯電路的結(jié)構(gòu)。

舉個(gè)例子:

寄存器“dout_reg”的關(guān)鍵路徑如下圖中紅色所示,要經(jīng)過一個(gè)邏輯與運(yùn)算,然后連接到同一寄存器的復(fù)位管腳上才算結(jié)束。

根據(jù)數(shù)位寬度(16比特)邏輯與門電路要占用兩個(gè)邏輯操作。

下面的屏幕截圖顯示了綜合操作如何描述關(guān)鍵路徑的

其中還提到了關(guān)鍵路徑中一部分模塊或寄存器的名字。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5295

    瀏覽量

    119824
  • 總線
    +關(guān)注

    關(guān)注

    10

    文章

    2859

    瀏覽量

    87914
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    805

    瀏覽量

    66231

原文標(biāo)題:Vivado綜合操作中的重定時(shí)(Retiming)

文章出處:【微信號:FPGA-EETrend,微信公眾號:FPGA開發(fā)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Vivado 高層次綜合

    感謝你對Vivado HLS也就是XILINX’s 高層次綜合解決方案有興趣,這個(gè)解決方案綜合c,c++和系統(tǒng)c代碼成Verilog和VHDL RTL結(jié)構(gòu)。
    發(fā)表于 04-25 08:59 ?2851次閱讀

    探索Vivado HLS設(shè)計(jì)流,Vivado HLS高層次綜合設(shè)計(jì)

    作者:Mculover666 1.實(shí)驗(yàn)?zāi)康?通過例程探索Vivado HLS設(shè)計(jì)流 用圖形用戶界面和TCL腳本兩種方式創(chuàng)建Vivado HLS項(xiàng)目 用各種HLS指令綜合接口 優(yōu)化Vivado
    的頭像 發(fā)表于 12-21 16:27 ?3546次閱讀

    vivado 2015.3 綜合報(bào)錯

    菜鳥求指教,最近在用vivado 2015.3 做個(gè)小項(xiàng)目,遇到問題:代碼綜合后會報(bào)錯:'get_property' expects at least one object.錯誤地址在IP的 clocks.xdc文件。
    發(fā)表于 08-31 10:42

    Vivado 2015.4許可證與Windows 10操作系統(tǒng)工作出現(xiàn)綜合錯誤

    我正在使用Vivado 2015.4與Windows 10操作系統(tǒng)一起工作。直到今天早上,這工作還算不錯。現(xiàn)在我得到以下綜合錯誤:[Common 17-345]找不到功能'Synthesis'和/或
    發(fā)表于 01-08 10:08

    Vivado綜合操作定時(shí)Retiming

    synth_design或Vivado GUI綜合設(shè)置下通過-retiming命令啟用全局定時(shí),此外該特性還可以與合成
    發(fā)表于 03-14 12:32

    運(yùn)行綜合時(shí)Vivado崩潰

    親愛的大家,我現(xiàn)在正在使用Vivado 2013.3。我試圖將PL結(jié)構(gòu)時(shí)鐘從1 MHZ更改為500KHZ。 (1 MHZ下沒問題)但是,Vivado在運(yùn)行綜合時(shí)崩潰了。對我來說減少PL結(jié)構(gòu)時(shí)鐘非常重要,因?yàn)槲掖蛩阍谝粋€(gè)時(shí)鐘周期內(nèi)
    發(fā)表于 03-25 08:40

    vivado綜合Soc設(shè)計(jì)時(shí)發(fā)現(xiàn)的錯誤,請問如何解決?

    嗨, 我們正在嘗試將自定義IP連接到vivado的IP集成商的可用IP。但我們在綜合設(shè)計(jì)時(shí)發(fā)現(xiàn)了一些問題。請查看附帶的截圖以獲取詳細(xì)視圖。謝謝。
    發(fā)表于 04-09 06:28

    如何為管道設(shè)計(jì)插入寄存器并進(jìn)行定時(shí)

    大家好,我需要為管道設(shè)計(jì)插入寄存器并進(jìn)行定時(shí)以改善負(fù)面松弛。在vivado是否有內(nèi)置的方法來執(zhí)行此操作。我嘗試了phys_opt_des
    發(fā)表于 05-01 14:51

    Vivado 全局定時(shí)vs 局部定時(shí)

    限制。在synth_design或Vivado GUI綜合設(shè)置下通過-retiming命令啟用全局定時(shí),此外該特性還可以與合成
    發(fā)表于 11-24 07:00

    使用Vivado高層次綜合 (HLS)進(jìn)行FPGA設(shè)計(jì)的簡介

    Introduction to FPGA Design with Vivado High-Level Synthesis,使用 Vivado 高層次綜合 (HLS) 進(jìn)行 FPGA 設(shè)計(jì)的簡介
    發(fā)表于 01-06 11:32 ?65次下載

    Vivado綜合引擎的增量綜合流程

    Vivado 2019.1 版本開始,Vivado 綜合引擎就已經(jīng)可以支持增量流程了。這使用戶能夠在設(shè)計(jì)變化較小時(shí)減少總的綜合運(yùn)行時(shí)間。
    發(fā)表于 07-21 11:02 ?1627次閱讀

    Vivado綜合參數(shù)設(shè)置

    如果你正在使用Vivado開發(fā)套件進(jìn)行設(shè)計(jì),你會發(fā)現(xiàn)綜合設(shè)置中提供了許多綜合選項(xiàng)。這些選項(xiàng)對綜合結(jié)果有著潛在的影響,而且能夠提升設(shè)計(jì)效率。為了更好地利用這些資源,需要仔細(xì)研究每一個(gè)選項(xiàng)
    的頭像 發(fā)表于 05-16 16:45 ?3390次閱讀
    <b class='flag-5'>Vivado</b><b class='flag-5'>綜合</b>參數(shù)設(shè)置

    Vivado綜合階段什么約束生效?

    Vivado綜合默認(rèn)是timing driven模式,除了IO管腳等物理約束,建議添加必要的時(shí)序約束,有利于綜合邏輯的優(yōu)化,同時(shí)綜合后的design里面可以評估時(shí)序。
    的頭像 發(fā)表于 07-03 09:03 ?663次閱讀

    Vivado Design Suite用戶指南:綜合

    電子發(fā)燒友網(wǎng)站提供《Vivado Design Suite用戶指南:綜合.pdf》資料免費(fèi)下載
    發(fā)表于 09-13 15:47 ?0次下載
    <b class='flag-5'>Vivado</b> Design Suite用戶指南:<b class='flag-5'>綜合</b>

    如何運(yùn)用Retiming優(yōu)化Block RAM的使用

    對于邏輯級數(shù)較大的路徑,常用的時(shí)序收斂的方法之一就是采用Retiming(中文翻譯為重定時(shí))。Retiming到底是怎么回事呢?
    的頭像 發(fā)表于 04-18 10:05 ?865次閱讀
    如何運(yùn)用<b class='flag-5'>Retiming</b>優(yōu)化Block RAM的使用