1. 程式人生 > >【Vivado使用誤區與進階】在Vivado中實現ECO功能

【Vivado使用誤區與進階】在Vivado中實現ECO功能



更多精彩內容,請微信搜尋“FPGAer俱樂部”關注我們。

關於Tcl在Vivado中的應用文章從Tcl的基本語法和在Vivado中的應用展開,繼上篇《用Tcl定製Vivado設計實現流程》介紹瞭如何擴充套件甚至是定製FPGA設計實現流程後,引出了一個更細節的應用場景:如何利用Tcl在已完成佈局佈線的設計上對網表或是佈局佈線進行區域性編輯,從而在最短時間內,以最小的代價完成個別的設計改動需求。

什麼是ECO

ECO指的是Engineering Change Order,即工程變更指令。目的是為了在設計的後期,快速靈活地做小範圍修改,從而儘可能的保持已經驗證的功能和時序。ECO的叫法算是從IC設計領域繼承而來,其應用在FPGA設計上尚屬首次,但這種做法其實在以往的FPGA設計上已被廣泛採用。簡單來說,ECO便相當於ISE上的FPGA Editor。

但與FPGA Editor不同,Vivado中的ECO並不是一個獨立的介面或是一些特定的命令,要實現不同的ECO功能需要使用不同的方式。

ECO的應用場景和實現流程

ECO的應用場景主要包含:修改cell屬性、增減或移動cell、手動區域性佈線。還有一些需要多種操作配合的複雜場景,例如把RAM(或DSP)的輸出暫存器放入/拉出RAMB(或DSP48)內部,或是把設計內部訊號接到I/O上作除錯probe用等等。

針對不同的應用場景,Vivado中支援的ECO實現方式也略有區別。有些可以用圖形介面實現,有些則只能使用Tcl命令。但通常可以在圖形化介面上實現的操作,都可以改用一條或數條Tcl命令來實現。

ECO的實現流程如下圖所示:

第一步所指的Design通常是完全佈局佈線後的設計,如果是在工程模式下,可以直接在IDE中開啟實現後的設計,若是僅有DCP檔案,不論是工程模式或是非工程模式產生的DCP,都可以用open_checkpoint命令開啟。

第二步就是ECO的意義所在,我們在佈局佈線後的設計上進行各種操作,然後僅對改動的部分進行區域性佈局/佈線而無需整體重跑設計,節約大量時間的同時也不會破壞已經收斂的時序。

第三步就是產生可供下載的bit檔案了,此時必須在Tcl Console中或是Tcl模式下直接輸入命令產生bit檔案,而不能使用IDE上的“Generate Bitstream”按鈕。原因是後者讀到的還是ECO前已經完成佈局佈線的原始設計,生成的bit檔案自然也無法使用。

ECO的實現流程

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

比如要修改暫存器的初值INIT或是LUT的真值表,使用者只需在Vivado IDE中開啟佈局佈線後的設計(Implemented Design),在Device View中找到並選中這個FF/LUT,接著在其左側的Cell Properties檢視中選擇需要修改的屬性,直接修改即可。

除了對FF/LUT的操作外,很多時候我們需要對MMCM/PLL輸出時鐘的相移進行修改。對於這種應用,使用者也無需重新產生MMCM/PLL,與上述方法類似,可以在佈局佈線後的Device View上直接修改。

移動/交換cells

移動/交換cells是對FF/LUT進行的ECO操作中最基本的一個場景,目前也只有這種情況可以通過圖形化實現。如要刪減cells等則只能通過Tcl命令來進行。  

具體操作方法也相當簡便,要互換cells位置的情況下,只要在Device View上選中需要的那兩個cells,如上圖所示的兩個FFs,然後右鍵調出選單,選擇Swap Locations即可。若要移動cells則更簡單,直接在圖中選中FF拖移到新的位置即可。

當用戶移動或改變了cells的位置後會發現與其連線的nets變成了黃色高亮顯示,表示這些nets需要重新佈線。這時候需要做的就是在圖中選中這些nets然後右鍵調出選單,選擇Route進行區域性佈線。

區域性佈線後一定要記得在Tcl Console中使用report_route_status命令檢查佈線情況,確保沒有未完成佈線(unrouted)或是部分未完成佈線(partial routed)的nets存在。給這個命令加上選項則可以報告出更細緻的結果,如下圖所示。

如果換個稍複雜些的Tcl命令配合圖形化顯示,更加直觀的同時,也可以方便右鍵調出命令進行鍼對性的區域性佈線。

手動佈線

手動佈線是一種非常規的佈線方式,一次只能針對一根net在圖形化介面下進行。所謂手動佈線,除了完全手動一個節點一個節點的選擇外,也支援工具自動選擇資源來佈線。通常我們並不建議全手動的方式,Vivado是時序驅動的工具,所以其自動選擇的佈線結果已經是遵循了時序約束下的最佳選擇。

在Device View中選擇一根沒有佈線或是預先Unroute過的net(顯示為紅色高亮),右鍵調出選單並選擇Enter Assign Routing Mode… 便可進入手動佈線模式。

複雜的ECO場景

篇幅過半,一直在鋪墊,其實最有實踐意義的ECO還沒提到。相信大部分使用者最懷念FPGA Editor中的一個功能就是probe了,如何快速地把一根內部訊號連線到FPGA管腳上,無需重新佈局佈線,直接更新bit檔案後下載除錯。曾經數次被客戶問及,很多人還為Vivado中不支援這樣的做法而深表遺憾。

其實這樣類似的功能在Vivado中一直支援,唯一的問題是暫時還沒有圖形化介面可以一鍵操作(相關開發工作已經在進行中)。但受益於Tcl的靈活多變,我們可以更有針對性地實現probe功能,效率也更高。

Tcl操作命令

在UG835中把Vivado支援的Tcl命令按照Category分類,這些列於Netlist目錄下的命令就是實現ECO需要用到的那些。

通常涉及到增減cells的ECO基本分為三步實現:首先用create_cell / create_net 等建立相關cell和/或net,然後用disconnect_net / connect_net 等命令修正因為cell和net的改動而影響到的連線關係,最後用route_design加選項完成區域性佈線。

不同的Vivado版本對此類ECO修改有稍許不同的限制,例如在2014.1之後的版本上,需要在改變cell的連線關係前先用unplace_cell將cell從當前的佈局位置上釋放,在完成新的連線關係後,再用place_cell放到新的佈局位置上。

具體操作上可以根據Vivado的提示或報錯資訊來改動具體的Tcl命令,但操作思路和可用的命令相差無幾。

Add Probe

這是一個在Vivaod上實現probe功能的Tcl指令碼,已經寫成了proc子程式,簡單易懂。可以直接呼叫,也可以做成Vivado的嵌入式擴充套件命令。呼叫其生成probe只需先source這個指令碼,然後按照如下所示在Tcl Console中輸入命令即可。

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

該指令碼已經在Vivado2014.3和2014.4上測試過,一次只能完成一個probe的新增,而且必須按照上述順序輸入訊號名,管腳位置,電平標準和probe名。因為不具備預檢功能,可能會碰到一些報錯資訊而導致無法繼續。例如選擇的訊號是隻存在於SLICE內部的INTRASITE時,則無法拉出到管腳。再比如輸入命令時拼錯了電平標準等,也會造成Tcl已經部分修改Vivado資料庫而無法繼續的問題。此時只能關閉已經開啟的DCP並選擇不儲存而重新來過。

使用者可以根據自己的需要擴充套件這個Tcl指令碼,也可以仿照這個Tcl的寫法來實現其它的ECO需求。例如文章開始舉例時提到過一個將RAMB輸出一級的FF拉出到Fabric上實現的場景,基本的實現方法和思路也類似:先將RAMB的輸出口REG的屬性改為0,然後建立一個新的FF,將其輸入與RAMB的輸出連線,再將FF的輸出與原本RAMB輸出驅動的cell連線,並完成FF的時鐘和復位端的正確連線,然後選擇合適的位置放置這個新的FF,最後針對新增加的nets區域性佈線。

由此可見,用Tcl來實現的ECO雖然不及圖形化介面來的簡便直觀,但是帶給使用者的卻是最大化的自由。完全由使用者來決定如何修改設計,那怕是在最後已經完成佈局佈線時序收斂的結果上,也能直接改變那些底層單元的連線關係,甚至是增減設計。

ECO在Vivado上的發展

經過了兩年多的發展,在Vivado上實現ECO已經有了多種方式,除了前面提到的圖形化上那些可用的技巧,還有使用者自定義的Tcl命令和指令碼等。隨著Xilinx Tcl Store的推出,使用者可以像在App Store中下載使用app一樣下載使用Tcl指令碼,簡化了Tcl在Vivado上應用的同時,進一步擴充套件了Tcl的深入、精細化使用,其中就包括Tcl在ECO上的應用。

目前Vivado 2014.4版本上新增了很多有用的指令碼。安裝好Vivado後,只需開啟Tcl Store,找到Debug Utilities,點選Install,稍等片刻,即可看到一個add_probe的Tcl proc被安裝到了你的Vivado中。

這個add_probe是在上述addProbe例子的基礎上擴充套件而來,不僅可以新增probe,而且可以改變現有probe連線的訊號。此外,這個指令碼採用了argument寫法,點選程式可以看help,所以不一定要按照順序輸入訊號、電平標準等選項,輸錯也沒有問題。另外增加了預檢和糾錯功能,碰到問題會報錯退出而不會改變Vivado資料庫,效率更高。

此外,Tcl Store上還有很多其它好用的指令碼,歡迎大家試用並反饋給我們寶貴意見。雖然裡面關於ECO的指令碼還很少,但我們一直在補充。此外Tcl Store是一個基於GitHub的完全開源的環境,當然也歡迎大家上傳自己手中有用的Tcl指令碼,對其進行補充。

總體來說,ECO是一個比較大的命題,因為牽扯到的改動需求太多,其實也很難限制在一個GUI介面中實現。這篇文章的目的就是為了讓大家對在FPGA上實現ECO有個基本的認識,梳理看似複雜無序的流程,所謂觀一葉而知秋,窺一斑而見全豹,希望能帶給更多使用者信心,用好Vivado其實一點都不難。

本文轉載自: http://xilinx.eepw.com.cn/news/article/a/1447,如涉及侵權,請私信小編刪除。

============華 麗 的 分 割 線============

想加入我們FPGA學習交流群嗎?可以長按或掃描以下二維碼,稽核通過後我們邀請您加入

這些微信群旨在打造一個提供給FPGA工程開發人員及興趣愛好者(統稱“FPGAer”)進行技術交流、答疑解惑和學習的平臺。而且我們也將會通過網路舉辦FPGA技術講座,分享相關研究文獻

瞭解更多FPGA知識可以長按或掃描以下二維碼關注FPGAer俱樂部