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

當前位置:首頁 > > ZYNQ



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


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


Tcl的背景介紹和基礎語法

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


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


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


設置變量


打印




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


文件I/O



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


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

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


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




子程序/過程

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




一些特殊符號


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



在Vivado中使用Tcl定位目標

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


目標的定義和定位



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

get_ports


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



get_cells/get_nets


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


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


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


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



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


get_pins

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



目標之間的關系

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




以上示右圖的設計來舉例,




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




高級查找功能

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




在創(chuàng)建子程序時也常常用到-filter,例如下述get_p的子程序/過程就可以用來返回指定管腳的方向?qū)傩裕嬖V用戶這是一個輸入管腳還是一個輸出管腳。



Tcl在Vivado中的延伸應用

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


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

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