《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 可編程邏輯 > 解決方案 > 【Vivado使用誤區(qū)與進(jìn)階】在Vivado中實(shí)現(xiàn)ECO功能

【Vivado使用誤區(qū)與進(jìn)階】在Vivado中實(shí)現(xiàn)ECO功能

2015-03-05
關(guān)鍵詞: Vivado Xilinx 誤區(qū)


關(guān)于Tcl在Vivado中的應(yīng)用文章從Tcl的基本語(yǔ)法和在Vivado中的應(yīng)用展開(kāi),,繼上篇xilinx" title="xilinx">《用Tcl定制Vivado設(shè)計(jì)實(shí)現(xiàn)流程》介紹了如何擴(kuò)展甚至是定制FPGA設(shè)計(jì)實(shí)現(xiàn)流程后,引出了一個(gè)更細(xì)節(jié)的應(yīng)用場(chǎng)景:如何利用Tcl在已完成布局布線的設(shè)計(jì)上對(duì)網(wǎng)表或是布局布線進(jìn)行局部編輯,,從而在最短時(shí)間內(nèi),,以最小的代價(jià)完成個(gè)別的設(shè)計(jì)改動(dòng)需求,。

什么是ECO

ECO 指的是Engineering Change Order,,即工程變更指令。目的是為了在設(shè)計(jì)的后期,,快速靈活地做小范圍修改,,從而盡可能的保持已經(jīng)驗(yàn)證的功能和時(shí)序。ECO的叫法算是從IC設(shè)計(jì)領(lǐng)域 繼承而來(lái),,其應(yīng)用在FPGA設(shè)計(jì)上尚屬首次,但這種做法其實(shí)在以往的FPGA設(shè)計(jì)上已被廣泛采用,。簡(jiǎn)單來(lái)說(shuō),,ECO便相當(dāng)于ISE上的FPGA Editor,。

但與FPGA Editor不同,Vivado中的ECO并不是一個(gè)獨(dú)立的界面或是一些特定的命令,,要實(shí)現(xiàn)不同的ECO功能需要使用不同的方式,。

ECO的應(yīng)用場(chǎng)景和實(shí)現(xiàn)流程

ECO的應(yīng)用場(chǎng)景主要包含:修改cell屬性、增減或移動(dòng)cell,、手動(dòng)局部布線,。還有一些需要多種操作配合的復(fù)雜場(chǎng)景,例如把RAM(或DSP)的輸出寄存器放入/拉出RAMB(或DSP48)內(nèi)部,,或是把設(shè)計(jì)內(nèi)部信號(hào)接到I/O上作調(diào)試probe用等等,。

針對(duì)不同的應(yīng)用場(chǎng)景,Vivado中支持的ECO實(shí)現(xiàn)方式也略有區(qū)別,。有些可以用圖形界面實(shí)現(xiàn),,有些則只能使用Tcl命令。但通??梢栽趫D形化界面上實(shí)現(xiàn)的操作,,都可以改用一條或數(shù)條Tcl命令來(lái)實(shí)現(xiàn)。

ECO的實(shí)現(xiàn)流程如下圖所示:

original.png

第一步所指的Design通常是完全布局布線后的設(shè)計(jì),,如果是在工程模式下,,可以直接在IDE中打開(kāi)實(shí)現(xiàn)后的設(shè)計(jì),若是僅有DCP文件,,不論是工程模式或是非工程模式產(chǎn)生的DCP,,都可以用open_checkpoint命令打開(kāi)。

第二步就是ECO的意義所在,,我們?cè)诓季植季€后的設(shè)計(jì)上進(jìn)行各種操作,,然后僅對(duì)改動(dòng)的部分進(jìn)行局部布局/布線而無(wú)需整體重跑設(shè)計(jì),節(jié)約大量時(shí)間的同時(shí)也不會(huì)破壞已經(jīng)收斂的時(shí)序,。

第 三步就是產(chǎn)生可供下載的bit文件了,,此時(shí)必須在Tcl Console中或是Tcl模式下直接輸入命令產(chǎn)生bit文件,而不能使用IDE上的“Generate Bitstream”按鈕,。原因是后者讀到的還是ECO前已經(jīng)完成布局布線的原始設(shè)計(jì),,生成的bit文件自然也無(wú)法使用。

ECO的實(shí)現(xiàn)流程

絕大部分的屬性修改都能通過(guò)IDE界面完成,,如下圖所示:

original2.png

比 如要修改寄存器的初值INIT或是LUT的真值表,,用戶(hù)只需在Vivado IDE中打開(kāi)布局布線后的設(shè)計(jì)(Implemented Design),在Device View中找到并選中這個(gè)FF/LUT,,接著在其左側(cè)的Cell Properties視圖中選擇需要修改的屬性,,直接修改即可。

除了對(duì)FF/LUT的操作外,很多時(shí)候我們需要對(duì)MMCM/PLL輸出時(shí)鐘的相移進(jìn)行修改,。對(duì)于這種應(yīng)用,,用戶(hù)也無(wú)需重新產(chǎn)生MMCM/PLL,與上述方法類(lèi)似,,可以在布局布線后的Device View上直接修改,。

original3.png

移動(dòng)/交換cells

移動(dòng)/交換cells是對(duì)FF/LUT進(jìn)行的ECO操作中最基本的一個(gè)場(chǎng)景,目前也只有這種情況可以通過(guò)圖形化實(shí)現(xiàn),。如要?jiǎng)h減cells等則只能通過(guò)Tcl命令來(lái)進(jìn)行,。  

具 體操作方法也相當(dāng)簡(jiǎn)便,要互換cells位置的情況下,,只要在Device View上選中需要的那兩個(gè)cells,,如上圖所示的兩個(gè)FFs,然后右鍵調(diào)出菜單,,選擇Swap Locations即可,。若要移動(dòng)cells則更簡(jiǎn)單,直接在圖中選中FF拖移到新的位置即可,。

original4.png

當(dāng)用戶(hù)移動(dòng)或改變了cells的位置后會(huì)發(fā)現(xiàn)與其連接的nets變成了黃色高亮顯示,,表示這些nets需要重新布線。這時(shí)候需要做的就是在圖中選中這些nets然后右鍵調(diào)出菜單,,選擇Route進(jìn)行局部布線,。

original5.png

局 部布線后一定要記得在Tcl Console中使用report_route_status命令檢查布線情況,確保沒(méi)有未完成布線(unrouted)或是部分未完成布線 (partial routed)的nets存在,。給這個(gè)命令加上選項(xiàng)則可以報(bào)告出更細(xì)致的結(jié)果,,如下圖所示。

original6.png

如果換個(gè)稍復(fù)雜些的Tcl命令配合圖形化顯示,,更加直觀的同時(shí),,也可以方便右鍵調(diào)出命令進(jìn)行針對(duì)性的局部布線。

original7.png

手動(dòng)布線

手 動(dòng)布線是一種非常規(guī)的布線方式,,一次只能針對(duì)一根net在圖形化界面下進(jìn)行,。所謂手動(dòng)布線,除了完全手動(dòng)一個(gè)節(jié)點(diǎn)一個(gè)節(jié)點(diǎn)的選擇外,,也支持工具自動(dòng)選擇資 源來(lái)布線,。通常我們并不建議全手動(dòng)的方式,Vivado是時(shí)序驅(qū)動(dòng)的工具,,所以其自動(dòng)選擇的布線結(jié)果已經(jīng)是遵循了時(shí)序約束下的最佳選擇,。

在Device View中選擇一根沒(méi)有布線或是預(yù)先Unroute過(guò)的net(顯示為紅色高亮),右鍵調(diào)出菜單并選擇Enter Assign Routing Mode… 便可進(jìn)入手動(dòng)布線模式,。

original8.png

復(fù)雜的ECO場(chǎng)景

篇 幅過(guò)半,,一直在鋪墊,,其實(shí)最有實(shí)踐意義的ECO還沒(méi)提到。相信大部分用戶(hù)最懷念FPGA Editor中的一個(gè)功能就是probe了,,如何快速地把一根內(nèi)部信號(hào)連接到FPGA管腳上,,無(wú)需重新布局布線,,直接更新bit文件后下載調(diào)試,。曾經(jīng)數(shù)次 被客戶(hù)問(wèn)及,很多人還為Vivado中不支持這樣的做法而深表遺憾,。

其實(shí)這樣類(lèi)似的功能在Vivado中一直支持,,唯一的問(wèn)題是暫時(shí)還沒(méi)有圖形化界面可以一鍵操作(相關(guān)開(kāi)發(fā)工作已經(jīng)在進(jìn)行中)。但受益于Tcl的靈活多變,,我們可以更有針對(duì)性地實(shí)現(xiàn)probe功能,,效率也更高。

Tcl操作命令

在UG835中把Vivado支持的Tcl命令按照Category分類(lèi),,這些列于Netlist目錄下的命令就是實(shí)現(xiàn)ECO需要用到的那些,。

original9.png

通 常涉及到增減cells的ECO基本分為三步實(shí)現(xiàn):首先用create_cell / create_net 等創(chuàng)建相關(guān)cell和/或net,然后用disconnect_net / connect_net 等命令修正因?yàn)閏ell和net的改動(dòng)而影響到的連接關(guān)系,,最后用route_design加選項(xiàng)完成局部布線,。

不同的Vivado版本對(duì)此類(lèi)ECO修改有稍許不同的限制,例如在2014.1之后的版本上,,需要在改變cell的連接關(guān)系前先用unplace_cell將cell從當(dāng)前的布局位置上釋放,,在完成新的連接關(guān)系后,再用place_cell放到新的布局位置上,。

具體操作上可以根據(jù)Vivado的提示或報(bào)錯(cuò)信息來(lái)改動(dòng)具體的Tcl命令,,但操作思路和可用的命令相差無(wú)幾。

Add Probe

original10.png

這是一個(gè)在Vivaod上實(shí)現(xiàn)probe功能的Tcl腳本,,已經(jīng)寫(xiě)成了proc子程序,,簡(jiǎn)單易懂??梢灾苯诱{(diào)用,,也可以做成Vivado的嵌入式擴(kuò)展命令。調(diào)用其生成probe只需先source這個(gè)腳本,,然后按照如下所示在Tcl Console中輸入命令即可,。

Vivado%   addProbe  inst_1/tmp_q[3]  D9  LVCMOS18  my_probe_1

該 腳本已經(jīng)在Vivado2014.3和2014.4上測(cè)試過(guò),一次只能完成一個(gè)probe的添加,,而且必須按照上述順序輸入信號(hào)名,,管腳位置,電平標(biāo)準(zhǔn)和 probe名,。因?yàn)椴痪邆漕A(yù)檢功能,,可能會(huì)碰到一些報(bào)錯(cuò)信息而導(dǎo)致無(wú)法繼續(xù),。例如選擇的信號(hào)是只存在于SLICE內(nèi)部的INTRASITE時(shí),則無(wú)法拉出 到管腳,。再比如輸入命令時(shí)拼錯(cuò)了電平標(biāo)準(zhǔn)等,,也會(huì)造成Tcl已經(jīng)部分修改Vivado數(shù)據(jù)庫(kù)而無(wú)法繼續(xù)的問(wèn)題。此時(shí)只能關(guān)閉已經(jīng)打開(kāi)的DCP并選擇不保存 而重新來(lái)過(guò),。

用戶(hù)可以根據(jù)自己的需要擴(kuò)展這個(gè)Tcl腳本,,也可以仿照這個(gè)Tcl的寫(xiě)法 來(lái)實(shí)現(xiàn)其它的ECO需求。例如文章開(kāi)始舉例時(shí)提到過(guò)一個(gè)將RAMB輸出一級(jí)的FF拉出到Fabric上實(shí)現(xiàn)的場(chǎng)景,,基本的實(shí)現(xiàn)方法和思路也類(lèi)似:先將 RAMB的輸出口REG的屬性改為0,,然后創(chuàng)建一個(gè)新的FF,將其輸入與RAMB的輸出連接,,再將FF的輸出與原本RAMB輸出驅(qū)動(dòng)的cell連接,,并完 成FF的時(shí)鐘和復(fù)位端的正確連接,然后選擇合適的位置放置這個(gè)新的FF,,最后針對(duì)新增加的nets局部布線,。

由此可見(jiàn),用Tcl來(lái)實(shí)現(xiàn)的ECO雖然不及圖形化界面來(lái)的簡(jiǎn)便直觀,,但是帶給用戶(hù)的卻是最大化的自由,。完全由用戶(hù)來(lái)決定如何修改設(shè)計(jì),那怕是在最后已經(jīng)完成布局布線時(shí)序收斂的結(jié)果上,,也能直接改變那些底層單元的連接關(guān)系,,甚至是增減設(shè)計(jì)。

ECO在Vivado上的發(fā)展

經(jīng) 過(guò)了兩年多的發(fā)展,,在Vivado上實(shí)現(xiàn)ECO已經(jīng)有了多種方式,,除了前面提到的圖形化上那些可用的技巧,還有用戶(hù)自定義的Tcl命令和腳本等,。隨著 Xilinx Tcl Store的推出,,用戶(hù)可以像在App Store中下載使用app一樣下載使用Tcl腳本,簡(jiǎn)化了Tcl在Vivado上應(yīng)用的同時(shí),,進(jìn)一步擴(kuò)展了Tcl的深入,、精細(xì)化使用,其中就包括Tcl 在ECO上的應(yīng)用,。

目前Vivado 2014.4版本上新增了很多有用的腳本,。安裝好Vivado后,只需打開(kāi)Tcl Store,,找到Debug Utilities,,點(diǎn)擊Install,稍等片刻,,即可看到一個(gè)add_probe的Tcl proc被安裝到了你的Vivado中,。

original11.png

這 個(gè)add_probe是在上述addProbe例子的基礎(chǔ)上擴(kuò)展而來(lái),,不僅可以新增probe,而且可以改變現(xiàn)有probe連接的信號(hào),。此外,,這個(gè)腳本采 用了argument寫(xiě)法,點(diǎn)擊程序可以看help,,所以不一定要按照順序輸入信號(hào),、電平標(biāo)準(zhǔn)等選項(xiàng),輸錯(cuò)也沒(méi)有問(wèn)題,。另外增加了預(yù)檢和糾錯(cuò)功能,,碰到問(wèn) 題會(huì)報(bào)錯(cuò)退出而不會(huì)改變Vivado數(shù)據(jù)庫(kù),,效率更高,。

此外,Tcl Store上還有很多其它好用的腳本,,歡迎大家試用并反饋給我們寶貴意見(jiàn),。雖然里面關(guān)于ECO的腳本還很少,但我們一直在補(bǔ)充,。此外Tcl Store是一個(gè)基于GitHub的完全開(kāi)源的環(huán)境,,當(dāng)然也歡迎大家上傳自己手中有用的Tcl腳本,對(duì)其進(jìn)行補(bǔ)充,。

總 體來(lái)說(shuō),,ECO是一個(gè)比較大的命題,因?yàn)闋砍兜降母膭?dòng)需求太多,,其實(shí)也很難限制在一個(gè)GUI界面中實(shí)現(xiàn),。這篇文章的目的就是為了讓大家對(duì)在FPGA上實(shí)現(xiàn) ECO有個(gè)基本的認(rèn)識(shí),梳理看似復(fù)雜無(wú)序的流程,,所謂觀一葉而知秋,,窺一斑而見(jiàn)全豹,希望能帶給更多用戶(hù)信心,,用好Vivado其實(shí)一點(diǎn)都不難,。


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無(wú)法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容,、版權(quán)和其它問(wèn)題,,請(qǐng)及時(shí)通過(guò)電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:aet@chinaaet.com。