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

【Vivado使用誤區(qū)與進(jìn)階】Tcl在Vivado中的應(yīng)用

2015-03-05
關(guān)鍵詞: Vivado TCL 應(yīng)用


Xilinx的新一代設(shè)計(jì)套件Vivado相比上一代產(chǎn)品ISE,在運(yùn)行速度、算法優(yōu)化和功能整合等很多方面都有了顯著地改進(jìn),。但是對(duì) 初學(xué)者來說,新的約束語言XDC以及腳本語言Tcl的引入則成為了快速掌握Vivado使用技巧的最大障礙,,以至于兩年多后的今天,仍有很多用戶缺乏升級(jí) 到Vivado的信心,。

本文介紹了Tcl在Vivado中的基礎(chǔ)應(yīng)用,,希望起到拋磚引玉的作用,指引使用者在短時(shí)間內(nèi)快速掌握相關(guān)技巧,,更好地發(fā)揮Vivado在FPGA設(shè)計(jì)中的優(yōu)勢(shì)。

Tcl的背景介紹和基礎(chǔ)語法

Tcl(讀 作tickle)誕生于80年代的加州大學(xué)伯克利分校,,作為一種簡(jiǎn)單高效可移植性好的腳本語言,,目前已經(jīng)廣泛應(yīng)用在幾乎所有的EDA工具中。Tcl 的最大特點(diǎn)就是其語法格式極其簡(jiǎn)單甚至可以說僵化,,采用純粹的 [命令 選項(xiàng) 參數(shù)] 形式,,是名副其實(shí)的“工具命令語言”( 即Tcl的全稱Tool Command Language),。

實(shí)際上Tcl的功能可以很強(qiáng)大,用其編寫的程序也可以很復(fù)雜,,但要在Vivado或大部分其它EDA工具中使用,,則只需掌握其中最基本的幾個(gè)部分。

注: 在以下示例中,,% 表示Tcl的命令提示符,,執(zhí)行回車后,Tcl會(huì)在下一行輸出命令執(zhí)行結(jié)果,。 // 后是作者所加注釋,,并不是例子的一部分。

設(shè)置變量

11.png

打印

22.png

打印主要通過puts語句來執(zhí)行,,配合特殊符號(hào),,直接決定最終輸出內(nèi)容。

文件I/O

33.png

可以看到Tcl對(duì)文件的操作也是通過設(shè)置變量,,改變屬性以及打印命令來進(jìn)行的,。上述寫文件的例子中通過puts命令在my_file.txt文件中寫入兩行文字,分別為“Hello World!” 和myVar變量的值,,然后在讀文件操作中讀取同一文件的內(nèi)容,。

控制流和循環(huán)命令

Tcl語言中用于控制流程和循環(huán)的命令與C語言及其它高級(jí)語言中相似,包括if,、while,、for和foreach等等。

具體使用可以參考如下示例:

44.png

子程序/過程

Tcl中的子程序也叫做過程(Procedures),,Tcl正是通過創(chuàng)建新的過程來增強(qiáng)其內(nèi)建命令的能力 ,,提供更強(qiáng)的擴(kuò)展性。具體到Vivado的使用中,,用戶經(jīng)??梢酝ㄟ^對(duì)一個(gè)個(gè)子程序/過程的創(chuàng)建來擴(kuò)展或個(gè)性化Vivado的使用流程。

55.png

一些特殊符號(hào)

tcl_1_1.PNG

tcl_1_2.PNG

Tcl語言的基本語法相對(duì)簡(jiǎn)單,,但要熟練掌握仍需日常不斷練習(xí),。Xilinx網(wǎng)站上有很多相關(guān)資料,這里推薦兩個(gè)跟Tcl相關(guān)的文檔 UG835 和 UG894 ,,希望對(duì)大家學(xué)習(xí)Vivado和Tcl有所幫助,。

在Vivado中使用Tcl定位目標(biāo)

在Vivado中使用Tcl最基本的場(chǎng)景就是對(duì)網(wǎng)表上的目標(biāo)進(jìn)行遍歷、查找和定位,,這也是對(duì)網(wǎng)表上的目標(biāo)進(jìn)行約束的基礎(chǔ),。要掌握這些則首先需要理解Vivado對(duì)目標(biāo)的分類。

目標(biāo)的定義和定位

77.png

如 上圖所示,,設(shè)計(jì)頂層的I/O稱作ports,,其余底層模塊或是門級(jí)網(wǎng)表上的元件端口都稱作pins,。而包括頂層在內(nèi)的各級(jí)模塊,blackbox以及門級(jí) 元件,,都稱作cells,。連線稱作nets,加上XDC中定義的clocks,,在Vivado中一共將網(wǎng)表文件中的目標(biāo)定義為五類,。要選取這五類目標(biāo),則 需用相應(yīng)的get_*命令,,例如get_pins等等,。

get_ports

ports僅指頂層端口,所以get_ports的使用相對(duì)簡(jiǎn)單,,可以配合通配符“* ”以及Tcl語言中處理list的命令一起使用,。如下所示,

88.png99.png

get_cells/get_nets

不同于ports僅指頂層端口,,要定位cells和nets則相對(duì)復(fù)雜,,首先需要面對(duì)層次的問題。這里有個(gè)大背景需要明確:Vivado中Tcl/XDC對(duì)網(wǎng)表中目標(biāo)的搜索是層次化的,,也就是一次僅搜索一個(gè)指定的層次current_instance,,缺省值為頂層。

以下圖所示設(shè)計(jì)來舉例,,若要搜索A(不含a1,a2)層次內(nèi)的所有cells和名字中含有nt的nets,, 有兩種方法:

1010.png1111.png

若要將搜索層次改為A+B+b1,則可以寫一個(gè)循環(huán),,逐一用current_instance將搜索層次指向A,,B和b1,再將搜索到的cells或nets合成一個(gè)list輸出即可,。

若要將搜索層次改為當(dāng)前層次以及其下所有子層次,,可以使用 -hierarchical (在Tcl中可以簡(jiǎn)寫為-hier )。

1212.png

在使用-hierarchical時(shí)有一點(diǎn)需要特別留意,,即后面所跟的搜索條件僅指目標(biāo)對(duì)象的名字,,不能含有代表層次的“/” 。 下面列出的寫法便是一種常見的使用誤區(qū),,并不能以此搜索到A及其下子層次內(nèi)所有的cells,。

1313.png

get_pins

1414.png

pins 在Vivado數(shù)據(jù)庫中有個(gè)獨(dú)特的存在形式,即 <instance>/<pin> ,。這里的“/”不表示層次,,而是其名字的一部分,表示這個(gè)pin所屬的實(shí)體。也就是說,,在使用get_pins 配合-hier來查找pins時(shí),“/”可以作為名字的一部分,,出現(xiàn)在搜索條件內(nèi)(注意與上述get_ce lls和get_nets的使用區(qū)別),。

1515.png

目標(biāo)之間的關(guān)系

Tcl在搜索網(wǎng)表中的目標(biāo)時(shí),除了上述根據(jù)名字條件直接搜索的方式,,還可以利用目標(biāo)間的關(guān)系,,使用-of_objects(在Tcl中可以簡(jiǎn)寫為-of)來間接搜索特定目標(biāo)。Vivado中定義的五類目標(biāo)間的關(guān)系如下左圖所示,。

1616.png

以上示右圖的設(shè)計(jì)來舉例,,

1717.png

下 圖是一個(gè)更復(fù)雜的示例,涉及跨層次搜索,??梢钥吹皆趃et_pins時(shí),要加上-leaf才能準(zhǔn)確定位到門級(jí)元件(或blackbox)的端口q,。另外,, 在實(shí)際操作中,使用get_nets和get_pins時(shí),,需要視情況而加上其它條件(-filter)才能準(zhǔn)確找到下述例子中的cells (i2),。1818.png

高級(jí)查找功能

在使用get_*命令查找網(wǎng)表中的目標(biāo)時(shí),除了名字這一直接條件,,往往還需要輔以其它更復(fù)雜的條件判斷,,這就需要用到高級(jí)查找功能:-filter 結(jié)合Tcl支持的各種關(guān)系和邏輯運(yùn)算符(==, !=, =~, !~, <=, >=, >, <, &&, ||)甚至是正則表達(dá)式來操作。

1919.png

在 創(chuàng)建子程序時(shí)也常常用到-filter,,例如下述get_p的子程序/過程就可以用來返回指定管腳的方向?qū)傩?,告訴用戶這是一個(gè)輸入管腳還是一個(gè)輸出管 腳。 需要特別指出的是,,通常在-filter后會(huì)使用 { } ,,但此時(shí)需要對(duì) $direction做變量替換,必須如下所示改用 " "

tcl_1_3.PNG

Tcl在Vivado中的延伸應(yīng)用

Tcl 在Vivado中的應(yīng)用還遠(yuǎn)不止上述所列,,其它常用的功能包括使用預(yù)先寫好的Tcl腳本來跑設(shè)計(jì)實(shí)現(xiàn)流程,,創(chuàng)建高級(jí)約束(XDC不支持循環(huán)等高級(jí)Tcl語 法)以及實(shí)現(xiàn)復(fù)雜的個(gè)性化設(shè)計(jì)流程等等。Tcl所帶來的強(qiáng)大的可擴(kuò)展性決定了其在版本控制,、設(shè)計(jì)自動(dòng)化流程等方面具有圖形化界面不能比擬的優(yōu)勢(shì),。

Vivado在不斷發(fā)展更新的過程中,還有很多新的功能,,包括ECO,、PR、HD Flow等等都是從Tcl腳本方式開始支持,然后再逐步放入圖形化界面中實(shí)現(xiàn),。這也解釋了為何高端FPGA用戶和熟練的Vivado用戶都更偏愛Tcl腳本,。

篇幅所限,不能一一展開,。關(guān)于以上Tcl在Vivado中的延伸應(yīng)用,,敬請(qǐng)關(guān)注Xilinx官方網(wǎng)站和中文論壇上的更多技術(shù)文章。

allyzhou.jpg
Ally Zhou 2014-9-12 于Xilinx上海Office



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