日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > FPGA算法工程師

今天推出Xilinx已發(fā)布的《Vivado使用誤區(qū)與進(jìn)階》系列的第七章:用TCL定制Vivado設(shè)計實(shí)現(xiàn)流程。

上一篇《Tcl Vivado 中的應(yīng)用》介紹了 Tcl 的基本語法以及如何利 Tcl Vivado 中定位目標(biāo)。其實(shí) Tcl Vivado 中還有很多延展應(yīng)用, 接下來我們就來討論如何利用 Tcl 語言的靈活性和可擴(kuò)展性,在 Vivado 實(shí)現(xiàn)定制化的 FPGA 設(shè)計流程。

基本的 FPGA 設(shè)計實(shí)現(xiàn)流程

FPGA 的設(shè)計流程簡單來講,就是從源代碼到比特流文件的實(shí)現(xiàn)過程。大體上跟 IC 設(shè)計流程類似,可以分為前端設(shè)計和后端設(shè)計。其中前端設(shè)計是把源代碼綜合為對應(yīng)的門級網(wǎng)表的過程,而后端設(shè)計則是把門級網(wǎng)表布局布線到芯片上最終實(shí)現(xiàn)的過程。

以下兩圖分別表示 ISE Vivado 的基本設(shè)計流程:

ISE 中設(shè)計實(shí)現(xiàn)的每一步都是相對獨(dú)立的過程,數(shù)據(jù)模型各不相同, 用戶需要維護(hù)不同的輸入文件,例如約束等,輸出文件也不是標(biāo)準(zhǔn)網(wǎng)表格式,并且形式各異,導(dǎo)致整體運(yùn)行時間過長,冗余文件較多。

Vivado 中則統(tǒng)一了約束格式和數(shù)據(jù)模型,在設(shè)計實(shí)現(xiàn)的任何一個階段 都支持 XDC 約束,可以生成時序報告,在每一步都能輸出包含有網(wǎng)表、約束以及布局布線信息(如果有)的設(shè)計檢查點(diǎn)(DCP)文件,大大縮短了運(yùn)行時間。

從使用方式上來講,Vivado 支持工程模式(Project Based Mode)和非工程模式(None Project Mode 兩種,且都能通過 Tcl 腳本批處理運(yùn)行,或是在 Vivado 圖形化界面 IDE 中交互運(yùn)行和調(diào)試。

工程模式

工程模式的關(guān)鍵優(yōu)勢在于可以通過在 Vivado 中創(chuàng)建工程的方式管理整個設(shè)計流程,包括工程文件的位 置、階段性關(guān)鍵報告的生成、重要數(shù)據(jù)的輸出和存儲等。

如下左圖所示,用戶建立了一個 Vivado 工程后,工具會自動創(chuàng)建相應(yīng)的.xpr 工程文件,并在工程文件所 在的位置同層創(chuàng)建相應(yīng)的幾個目錄,包括.cache.data、.runs .srcs 等等(不同版本可能有稍許差異),分別用于存儲運(yùn)行工程過程中產(chǎn)生的數(shù)據(jù)、輸出的文件和 報告以及工程的輸入源文件(包含約束文件)等。

如下右圖所示,在 Vivado IDE 中還可以一鍵式運(yùn)行整個設(shè)計流程。這些預(yù)置的命令按鈕就放置在工具最左邊的側(cè)欄:Flow Navigator 。不同按鈕對應(yīng)不同的實(shí)現(xiàn)過程,其中在后端實(shí)現(xiàn)階段,還可以用右鍵調(diào)出詳細(xì)分步命令,指引工具具體執(zhí)行實(shí)現(xiàn)的哪一步。

特別需要指出的是 Flow Navigator 只有在 Vivado IDE 中打開.xpr 工程文件才會顯示,如果打開的是設(shè)計檢查點(diǎn).dcp 文件(不論是工程模式或是非工程模式產(chǎn)生的 dcp)都不會顯示這個側(cè)欄。

非工程模式

非工程模式下,由于不會創(chuàng)建工程,用戶就需要自己管理設(shè)計源文件和設(shè)計過程。源文件只能從當(dāng)前位置訪問,在設(shè)計實(shí)現(xiàn)過程中的每一步,數(shù)據(jù)和運(yùn)行結(jié)果都存在于 Vivado 分配到的機(jī)器內(nèi)存中,在用戶不主動輸 出的情況下,不會存儲到硬盤中。

簡單來講,非工程模式提供了一種類似 ASIC 設(shè)計的流程,用戶擁有絕對的自由,可以完全掌控設(shè)計實(shí)現(xiàn)流程,但也需要用戶對設(shè)計實(shí)現(xiàn)的過程和數(shù)據(jù),尤其對文件輸出和管理全權(quán)負(fù)責(zé),包括何時、何地、輸出怎樣的文件等等。

使用非工程模式管理輸入輸出文件、進(jìn)行設(shè)計實(shí)現(xiàn)都需要使用 Tcl 腳本,但這并不代表非工程模式不支持圖形化界面。非工程模式下產(chǎn)生的.dcp 文件一樣可以在 Vivdao IDE 中打開,繼而產(chǎn)生各種報告,進(jìn)行交互式調(diào)試等各種在圖形化下更便捷直觀的操作。這是一個常見誤區(qū),就像很多人誤 認(rèn)為工程模式下不支持 Tcl 腳本運(yùn)行是一個道理。但兩種模式支持的 Tcl 命令確實(shí)是完全不同的,使用起來也不能混淆。

下圖所示是同一個設(shè)計(Vivado 自帶的 Example Design)采用兩種模式實(shí)現(xiàn)所需使用的不同腳本,更詳細(xì)的內(nèi)容可以在 UG975 UG835 中找到。需要注意的是,工程模式下的 Tcl 腳本更簡潔,但并不是最底層的 Tcl 命令,實(shí)際執(zhí)行一條相當(dāng)于執(zhí)行非工程模式下的數(shù)條 Tcl 命令。

Tcl對圖形化的補(bǔ)充

相信對大部分 FPGA 工程設(shè)計人員來說,圖形化界面仍舊是最熟悉的操作環(huán)境,也是設(shè)計實(shí)現(xiàn)的首選。在 Xilinx 推出全面支持 Tcl Vivado 后,這一點(diǎn)依然沒有改變,但我們要指出的是,即使是在圖形化界面上跑設(shè) 計,仍然可以充分利用 Tcl 的優(yōu)勢。在 Vivado IDE 上運(yùn)行 Tcl 腳本主要有以下幾個渠道。

Tcl Console

Vivado IDE 的最下方有一個 Tcl Console,在運(yùn)行過程中允許用戶輸入 Tcl/XDC 命令或是 source 預(yù)先寫 好的 Tcl 腳本,返回值會即時顯示在這個對話框。

舉例來說,設(shè)計調(diào)試過程中,需要將一些約束應(yīng)用在某些網(wǎng)表目標(biāo)上(具體可參照《Tcl Vivado 中的應(yīng) 用》所示),推薦的做法就是在 IDE 中打開.dcp 然后在 Tcl Console 中輸入相應(yīng)的 Tcl/XDC 命令,驗(yàn)證返回值,碰到問題可以直接修改,直到找到正確合適的命令。然后可以記錄這些命令,并存入 XDC 文件中以備下次實(shí)現(xiàn)時使用。

還有一種情況是,預(yù)先讀入的 XDC 中有些約束需要修改,或是缺失了某些重要約束。不同于 ISE 中必須修改 UCF 重跑設(shè)計的做法,在 Vivado 中,我們可以充分利用 Tcl/XDC 的優(yōu)勢, Tcl Console 中輸入新的 Tcl/XDC,無需重跑設(shè)計,只要運(yùn)行時序報告來驗(yàn)證。當(dāng)然,如果能重跑設(shè)計,效果會更好,但是這種方法在早期設(shè)計階段提供了一種快速進(jìn)行交互式驗(yàn)證的可能,保證了更快地設(shè)計迭代,大大提升了效率。

另外,通過某些 Tcl 命令(例如 show_objects、select_objects 等等)的幫助,我們還可以利用 Tcl Console 與時序報告、RTL 和門級網(wǎng)表以及布局布線后的網(wǎng)表之間進(jìn)行交互調(diào)試,極大發(fā)揮 Vivado IDE 的優(yōu)勢。

Hook Scripts

Vivado IDE 中內(nèi)置了 tcl.pre tcl.post,用戶可 以在 Synthesis Implementation 的設(shè)置窗 口中找到。設(shè)計實(shí)現(xiàn)的每 一步都有這樣兩個位置可供用戶加入自己的 Tcl 腳本。

tcl.pre 表示當(dāng)前這步 之前 Vivado 會主動 source Tcl 腳本,tcl.post 表示這步之后會 source 的腳本。

Tcl 腳本必須事先寫好,然后在上圖所示的設(shè)置界面由用戶使用彈出窗口指定到腳本所在位置。

這些就是所謂的鉤子腳本,正是有了這樣的腳本,我們才得以在圖形化界面上既享有一鍵式執(zhí)行的便利,又充分利用 Tcl 帶來的擴(kuò)展性。比較常見的使用場景是,在某個步驟后多產(chǎn)生幾個特別的報告,或是在布線前再跑幾次物理優(yōu)化等。

Customer Commands

Vivado IDE 中還有一個擴(kuò)展功能,允許用戶把事先創(chuàng)建好的 Tcl 腳本以定制化命令的方式加入圖形化界面,成為一個按鈕,方便快速執(zhí)行。這個功能常常用來報告特定的時序信息、修改網(wǎng)表內(nèi)容、實(shí)現(xiàn) ECO 等等。

Tcl定制實(shí)現(xiàn)流程

綜上所述,標(biāo)準(zhǔn)的 FPGA 設(shè)計實(shí)現(xiàn)流程完全可以通過 Vivado IDE 一鍵式執(zhí)行,如果僅需要少量擴(kuò)展,通 過前述鉤子腳本等幾種方法也完全可以做到。若是這些方法都不能滿足需求,還可以使用 Tcl 腳本來跑設(shè)計,從而實(shí)現(xiàn)設(shè)計流程的全定制。

:以下討論的幾種實(shí)現(xiàn)方案中僅包含后端實(shí)現(xiàn)具體步驟的區(qū)別,而且只列出非工程模式下對應(yīng)的Tcl 命令。

右圖所示是 Vivado 中設(shè)計實(shí)現(xiàn)的基本流程,藍(lán)色部分表示實(shí)現(xiàn)的基本 步驟(盡管opt_design 這一步理論上不是必選項(xiàng),但仍強(qiáng)烈建議用戶執(zhí)行),對應(yīng) Implementation Default 策略。黃色部分表示可選擇執(zhí)行的部分,不同的實(shí)現(xiàn)策略中配置不同。

這里不會討論那些圖形化界面中可選的策略,不同策略有何側(cè)重,具體如何配置我們將在另外一篇關(guān)于 Vivado 策略選擇的文章中詳細(xì)描述。

我們要展示的是如何對設(shè)計流程進(jìn)行改動來更好的滿足設(shè)計需求,這些動作往往只能通過 Tcl 腳本來實(shí)現(xiàn)。

充分利用物理優(yōu)化

物理優(yōu)化即 phys_opt_design 是在后端通過復(fù)制、移動寄存器來降扇出和 retiming,從而進(jìn)行時序優(yōu)化的 重要手段,一般在布局和布線之間運(yùn)行,從 Vivado 2014.1 開始,還支持布局后的物理優(yōu)化。

很多用戶會在 Vivado 中選中 phys_opt_design,但往往不知道這一步其實(shí)可以運(yùn)行多次,并且可以選擇不同的 directive 來有側(cè)重的優(yōu)化時序。

比如,我們可以寫這樣一個 Tcl 腳本,在布局后,使用不同的 directive 或選項(xiàng)來跑多次物理優(yōu)化,甚至可 以再多運(yùn)行一次物理優(yōu)化,專門針對那些事先通過 get_nets 命令找到并定義為 highfanout_nets 的高扇出網(wǎng)絡(luò)具體 directive 的含義可以通過 UG835UG904 phys_opt_design -help 命令查詢。

布局布線之間的多次物理優(yōu)化不會惡化時序,但會增加額外的運(yùn)行時間,也有可能出現(xiàn)時序完全沒有得到優(yōu)化的結(jié)果。布線后的物理優(yōu)化有時候會惡化 THS,所以請一定記得每一步后都運(yùn)行 report_timing_summary,并且通過 write_checkpoint 寫出一個.dcp 文件來保留階段性結(jié)果。這一步的結(jié)果不理想就可以及時退回到上一步的.dcp 繼續(xù)進(jìn)行。

閉環(huán)設(shè)計流程

通常的 FPGA 設(shè)計流程是一個開環(huán)系統(tǒng),從前到后依次執(zhí)行。但 Vivado 中提供了一種可能,用戶可以通 place_design -post_place_opt 在已經(jīng)完成布局布線的設(shè)計上再做一次布局布線,從而形成一個有了反饋信息的閉環(huán)系統(tǒng)。這次因?yàn)橛辛饲耙淮尾季€后的真實(shí)連線延遲信息,布局的針對性更好,并且只會基于時序不滿足的路徑進(jìn)行重布局而不會改變大部分已經(jīng)存在的布局信息,之后的布線過程也是增量流程。

這一過程所需的運(yùn)行時間較短,是一種很有針對性的時序優(yōu)化方案??梢酝ㄟ^ Tcl 寫一個循環(huán)多次迭代運(yùn)行,但需留意每次的時序報告,若出現(xiàn)時序惡化就應(yīng)及時停止。

增量設(shè)計流程

Vivado 中的增量設(shè)計也是一個不得不提的功能。當(dāng)設(shè)計進(jìn)行到后期,每次運(yùn)行改動很小,在開始后端實(shí)現(xiàn)前讀入的設(shè)計網(wǎng)表具有較高相似度的情況下,推薦使用 Vivado 的增量布局布線功能。

如上圖所示,運(yùn)行增量流程的前提是有一個已經(jīng)完成布局布線的.dcp 文件,并以此用來作為新的布局布線的參考。

運(yùn)行過程中,Vivado 會重新利用已有的布局布線數(shù)據(jù)來縮短運(yùn)行 時間,并生成可預(yù)測的結(jié)果。當(dāng)設(shè)計有 95% 以上的相似度時,增量布局布線的運(yùn)行時間會比一般布局布線平均縮短 2 倍。若相似度低于 80%,則使用增量布局布線只有很小的優(yōu)勢或者基本沒有優(yōu)勢。

除了縮短運(yùn)行時間外,增量布局布線對沒有發(fā)生變化的設(shè)計部分造成的破壞也很小,因此能減少時序變化,最大限度保留時序結(jié)果,所以一般要求用做參考的.dcp 文件必須是一個完全時序收斂的設(shè)計。

參考點(diǎn).dcp 文件可以在 Vivado IDE Implementation 設(shè)置中指定,也可以在 Tcl 腳本中用 read_checkpoint -incremental 讀入。特別需要指出的是,在工程模式中,如要在不新建一個 impl 實(shí)現(xiàn)的情況下使用上一次運(yùn)行的結(jié)果作為參考點(diǎn),必須將其另存到這次運(yùn)行目錄之外的位置,否則會因沖突而報錯。

以上用 Tcl 定制 Vivado 設(shè)計實(shí)現(xiàn)流程的討論就到這里,后面我將就 Tcl 使用場景,包括 ECO 流程等的更多細(xì)節(jié)進(jìn)行展開。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉