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

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

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

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

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

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

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

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

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

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

工程模式

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

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

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

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

非工程模式

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

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

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

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

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

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

Tcl Console

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

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

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

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

Hook Scripts

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

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

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

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

Customer Commands

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

增量設(shè)計(jì)流程

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

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

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

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

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

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


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