轉帖:新版vivado2019.2新增增量綜合功能


從 Vivado 2019.1 版本開始,Vivado 綜合引擎就已經可以支持增量流程了。這使用戶能夠在設計變化較小時減少總的綜合運行時間。

Vivado IDE 和 Tcl 命令批處理模式都可以啟用此流程。如需了解有關此流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。

在我們開始討論增量綜合之前,我們先來討論一下一些重要的概念,以便能夠更好地理解該流程。

1. 並行綜合

為了縮短總運行時間,如果設計足夠大,並且可以獲益於並行流程,Vivado 綜合即會啟動並行流程。

並行流程會將設計划分為更小的、由並行進程獨立處理的“RTL 分區”。

只有當設計規模足夠大時,Vivado 綜合才會決定使用並行流程。設計規模應該至少有 5 個 RTL 分區是大於 10K 實例大小才行。

要檢查該工具是否已使用並行流程,您可以在綜合日志中查找“Multithreading enabled for synth_design…”消息。

以下消息確認已使用並行流程完成了“Synthesis”,且設計與增量綜合運行兼容:

"INFO: [Synth 8-5580] Multithreading enabled for synth_design using a maximum of 4 processes." (INFO:[Synth 8-5580] 為 synth_design 啟用多線程,最多使用 4 個進程。)

2. RTL 分區

Vivado 綜合會基於實例將大型設計划分為多個分區,以便啟用並行流程進行綜合。

以下快照示出的是工具如何在“Vivado 綜合”日志文件中報告分區情況:

RTL 分區報告:
+------+----------------------------+------------+----------+

| |RTL Partition |Replication |Instances |

+------+----------------------------+------------+----------+

|1 |Partition_name1 | 1| 31536|

|2 |Partition_name2 | 1| 21130|

|3 |Partition_name3 | 1| 18061|

……..

……..

如果設計符合並行綜合的要求,工具就會將所有分區寫入.runs/synth_1/runme.log 文件。

如果使用的是增量運行,這些分區可以幫助工具識別哪些分區已更改並需要重新綜合,並跟蹤哪些分區是完整的(以保留這些分區)。

注意:作為參考的運行結果中使用並行綜合是進行增量綜合的必要條件。如果 50% 或更多的分區已被更改,這個工具即會使用默認流程,而不使用增量流程。

下圖顯示的是增量綜合的流程描述:左側顯示的是增量流程的輸入集及生成的輸出文件,右側顯示的是相應的命令。

如需了解有關工程級和非工程級流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。

修訂后的設計要點:

修訂后的設計在頂層不應有變化。

修訂后的流程與初始“synth_design”命令使用的“Global Synthesis Settings”應完全相同。

如需對較低層級模塊進行工具選項或屬性的改動,則需對該層級使用 BLOCK_SYNTH 屬性。如需了解有關 BLOCK_SYNTH 流程的詳情,請參閱《Vivado Design Suite 用戶指南:綜合》 (UG901)。

如果 50% 以上的設計已更改(分區被更改),則該工具會使用默認綜合,而不會使用增量綜合。

工程流程的增量綜合運行示例:

要開啟增量綜合流程,在最初對設計進行綜合時,請確保選中“Write Incremental Synthesis”選項以便為增量運行生成增量 checkpoint。

請通過“Synthesis Settings”窗口來設置此選項:

啟動綜合后,請查看日志文件以確認是否使用了並行綜合。

在綜合日志文件中查找 INFO:Synth 8-5580。

此外,您可以在日志文件中查看打印的“RTL 分區”詳情,如下所示:

在日志文件的末尾,您可以查看到綜合運行所花費的總時間。

完成綜合后,您可以保存生成的、將用於增量流程的 checkpoint 文件,也可以使用工具選項“Automatically use the checkpoint from the previous run”(自動使用上一次運行的檢查點)。

您現在就可以修改設計或 RTL 了。

現在我們一起來看一下一個簡單的例子。在這個示例中,我在數據路徑中添加了兩個寄存器。

下面的屏幕截圖示出的是為增量綜合設置增量 checkpoint 的示例。

要確認該工具是否讀取了增量 checkpoint,請在生成的綜合日志文件中查看“Command: read_checkpoint -incremental ./top.dcp”的消息。

該工具會分析已更改和未更改的設計,並報告摘要(該摘要可幫助用戶了解設計改動和所需的重新綜合的部分)。

以下是一個“增量綜合摘要報告”示例:

變更摘要詳情:

  • 模塊名稱:在設計分區內 RTL 被更改的模塊。請注意,一個分區下可能包含不止一個模塊。
  • 復制:所提到模塊的實例化總數(在本例中為“rtlRam”)。復制數取決於直接實例化的數量。

例如(參見下面的屏幕截圖),“rtlRam”僅由“usbf_top”實例化一次(因此 Replication = 1),即使 usbf_top 被調用兩次也是如此。

1. 實例:在 elaboration 階段之前“rtlRam”下的單元/原語數。在 elaboration 和綜合階段之后,這個數字可能會有所變更。
2. 變更百分比:RTL 變更 (66)/未變更設計總數 (801353) * 100 = 0.008%
3. 整個設計的大小:整個設計中的單元總數(包括已更改和未更改的設計)
4. 再綜合設計的大小:請注意,如果屬於分區的某一個模塊中有任何更改,工具即會重新綜合整個分區。在這個例子中,更改的分區大小為 30279,在設計中被調用了兩次,因此“Resynthesis Design Size”數為 ~60555。

此外,工具將重新綜合那些被傳遞了最優化的分區,並且“Resynthesis Design Size”的數量可能會相應地有所變化。

5. 重新綜合設計的大小:重新綜合的單元數= 60555/801353 * 100 = 7.55%

正如您在下面的綜合日志快照中所看到的那樣,與之前 3 分 28 秒的默認綜合運行時間相比,增量流程后的運行時間僅為 1 分 35 秒。 7. 重新綜合設計的大小:重新綜合的單元數= 60555/801353 * 100 = 7.55%

設計變化較小時,增量綜合是一個非常強大的功能。請隨時使用此功能並與我們分享您的反饋。謝謝閱讀!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM