從 Vivado 2019.1 版本開始,Vivado 綜合引擎就已經(jīng)可以支持增量流程了。這使用戶能夠在設(shè)計變化較小時減少總的綜合運行時間。
Vivado IDE 和 Tcl 命令批處理模式都可以啟用此流程。如需了解有關(guān)此流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。
在我們開始討論增量綜合之前,我們先來討論一下一些重要的概念,以便能夠更好地理解該流程。
1. 并行綜合
為了縮短總運行時間,如果設(shè)計足夠大,并且可以獲益于并行流程,Vivado 綜合即會啟動并行流程。
并行流程會將設(shè)計劃分為更小的、由并行進程獨立處理的“RTL 分區(qū)”。
只有當設(shè)計規(guī)模足夠大時,Vivado 綜合才會決定使用并行流程。設(shè)計規(guī)模應(yīng)該至少有 5 個 RTL 分區(qū)是大于 10K 實例大小才行。
要檢查該工具是否已使用并行流程,您可以在綜合日志中查找“Multithreading enabled for synth_design…”消息。
以下消息確認已使用并行流程完成了“Synthesis”,且設(shè)計與增量綜合運行兼容:
"INFO: [Synth 8-5580] Multithreading enabled for synth_design using a maximum of 4 processes." (INFO:[Synth 8-5580] 為 synth_design 啟用多線程,最多使用 4 個進程。)
2. RTL 分區(qū)
Vivado 綜合會基于實例將大型設(shè)計劃分為多個分區(qū),以便啟用并行流程進行綜合。
以下快照示出的是工具如何在“Vivado 綜合”日志文件中報告分區(qū)情況:
RTL 分區(qū)報告:
+------+----------------------------+------------+----------+
| |RTL Partition |Replication |Instances |
+------+----------------------------+------------+----------+
|1 |Partition_name1 | 1| 31536|
|2 |Partition_name2 | 1| 21130|
|3 |Partition_name3 | 1| 18061|
……..
……..
如果設(shè)計符合并行綜合的要求,工具就會將所有分區(qū)寫入.runs/synth_1/runme.log 文件。
如果使用的是增量運行,這些分區(qū)可以幫助工具識別哪些分區(qū)已更改并需要重新綜合,并跟蹤哪些分區(qū)是完整的(以保留這些分區(qū))。
注意:作為參考的運行結(jié)果中使用并行綜合是進行增量綜合的必要條件。如果 50% 或更多的分區(qū)已被更改,這個工具即會使用默認流程,而不使用增量流程。
下圖顯示的是增量綜合的流程描述:左側(cè)顯示的是增量流程的輸入集及生成的輸出文件,右側(cè)顯示的是相應(yīng)的命令。
如需了解有關(guān)工程級和非工程級流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。
修訂后的設(shè)計要點:
修訂后的設(shè)計在頂層不應(yīng)有變化。
修訂后的流程與初始“synth_design”命令使用的“Global Synthesis Settings”應(yīng)完全相同。
如需對較低層級模塊進行工具選項或?qū)傩缘母膭?,則需對該層級使用 BLOCK_SYNTH 屬性。如需了解有關(guān) BLOCK_SYNTH 流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。
如果 50% 以上的設(shè)計已更改(分區(qū)被更改),則該工具會使用默認綜合,而不會使用增量綜合。
工程流程的增量綜合運行示例:
要開啟增量綜合流程,在最初對設(shè)計進行綜合時,請確保選中“Write Incremental Synthesis”選項以便為增量運行生成增量 checkpoint。
請通過“Synthesis Settings”窗口來設(shè)置此選項:
啟動綜合后,請查看日志文件以確認是否使用了并行綜合。
在綜合日志文件中查找 INFO:Synth 8-5580。
此外,您可以在日志文件中查看打印的“RTL 分區(qū)”詳情,如下所示:
在日志文件的末尾,您可以查看到綜合運行所花費的總時間。
完成綜合后,您可以保存生成的、將用于增量流程的 checkpoint 文件,也可以使用工具選項“Automatically use the checkpoint from the previous run”(自動使用上一次運行的檢查點)。
您現(xiàn)在就可以修改設(shè)計或 RTL 了。
現(xiàn)在我們一起來看一下一個簡單的例子。在這個示例中,我在數(shù)據(jù)路徑中添加了兩個寄存器。
下面的屏幕截圖示出的是為增量綜合設(shè)置增量 checkpoint 的示例。
要確認該工具是否讀取了增量 checkpoint,請在生成的綜合日志文件中查看“Command: read_checkpoint -incremental ./top.dcp”的消息。
該工具會分析已更改和未更改的設(shè)計,并報告摘要(該摘要可幫助用戶了解設(shè)計改動和所需的重新綜合的部分)。
以下是一個“增量綜合摘要報告”示例:
變更摘要詳情:
模塊名稱:在設(shè)計分區(qū)內(nèi) RTL 被更改的模塊。請注意,一個分區(qū)下可能包含不止一個模塊。
復制:所提到模塊的實例化總數(shù)(在本例中為“rtlRam”)。復制數(shù)取決于直接實例化的數(shù)量。
例如(參見下面的屏幕截圖),“rtlRam”僅由“usbf_top”實例化一次(因此 Replication = 1),即使 usbf_top 被調(diào)用兩次也是如此。
1. 實例:在 elaboration 階段之前“rtlRam”下的單元/原語數(shù)。在 elaboration 和綜合階段之后,這個數(shù)字可能會有所變更。
2. 變更百分比:RTL 變更 (66)/未變更設(shè)計總數(shù) (801353) * 100 = 0.008%
3. 整個設(shè)計的大?。赫麄€設(shè)計中的單元總數(shù)(包括已更改和未更改的設(shè)計)
4. 再綜合設(shè)計的大?。赫堊⒁?,如果屬于分區(qū)的某一個模塊中有任何更改,工具即會重新綜合整個分區(qū)。在這個例子中,更改的分區(qū)大小為 30279,在設(shè)計中被調(diào)用了兩次,因此“Resynthesis Design Size”數(shù)為 ~60555。
此外,工具將重新綜合那些被傳遞了最優(yōu)化的分區(qū),并且“Resynthesis Design Size”的數(shù)量可能會相應(yīng)地有所變化。
5. 重新綜合設(shè)計的大小:重新綜合的單元數(shù)= 60555/801353 * 100 = 7.55%
正如您在下面的綜合日志快照中所看到的那樣,與之前 3 分 28 秒的默認綜合運行時間相比,增量流程后的運行時間僅為 1 分 35 秒。 7. 重新綜合設(shè)計的大?。褐匦戮C合的單元數(shù)= 60555/801353 * 100 = 7.55%
設(shè)計變化較小時,增量綜合是一個非常強大的功能。請隨時使用此功能并與我們分享您的反饋。謝謝閱讀!
評論
查看更多