RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

Tcl在Vivado中的應用

FPGA算法工程師 ? 來源:FPGA算法工程師 ? 2023-04-15 09:43 ? 次閱讀

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í)行結果。 // 后是作者所加注釋,并不是例子的一部分。

3be8c8f0-daf8-11ed-bfe3-dac502259ad0.png

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

3bfee7d4-daf8-11ed-bfe3-dac502259ad0.png

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

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

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

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

3c12abb6-daf8-11ed-bfe3-dac502259ad0.png

子程序/過程

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

3c288382-daf8-11ed-bfe3-dac502259ad0.png

一些特殊符號

3c42060e-daf8-11ed-bfe3-dac502259ad0.png

注: 反斜杠出現(xiàn)在行尾以允許命令在下一行繼續(xù)時,必須是這一行的最后一個字符,其后不能有空格。

3c53c8a8-daf8-11ed-bfe3-dac502259ad0.png

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

在Vivado 中使用 Tcl定位目標

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

目標的定義和定位

3c677d9e-daf8-11ed-bfe3-dac502259ad0.png

如上圖所示,設計頂層的 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 的命令一起使用。如下所示,

3c79e1a0-daf8-11ed-bfe3-dac502259ad0.png

get_cells/get_nets

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

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

3c8f10d4-daf8-11ed-bfe3-dac502259ad0.png

3cad2858-daf8-11ed-bfe3-dac502259ad0.png

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

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

3cce55be-daf8-11ed-bfe3-dac502259ad0.png

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

3ce13b70-daf8-11ed-bfe3-dac502259ad0.png

get_pins

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

3cf80b02-daf8-11ed-bfe3-dac502259ad0.png

目標之間的關系

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

3d12b22c-daf8-11ed-bfe3-dac502259ad0.png

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

3d2c826a-daf8-11ed-bfe3-dac502259ad0.png

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

3d3c5c9e-daf8-11ed-bfe3-dac502259ad0.png

高級查找功能

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

3d602ef8-daf8-11ed-bfe3-dac502259ad0.png

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

3d74ad06-daf8-11ed-bfe3-dac502259ad0.png

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 腳本。

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

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21729

    瀏覽量

    602963
  • Xilinx
    +關注

    關注

    71

    文章

    2167

    瀏覽量

    121293
  • eda
    eda
    +關注

    關注

    71

    文章

    2755

    瀏覽量

    173192
  • 腳本
    +關注

    關注

    1

    文章

    389

    瀏覽量

    14858
  • Vivado
    +關注

    關注

    19

    文章

    812

    瀏覽量

    66470

原文標題:Tcl在Vivado中的應用

文章出處:【微信號:FPGA算法工程師,微信公眾號:FPGA算法工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TclVivado的基礎應用

    Xilinx的新一代設計套件Vivado相比上一代產(chǎn)品ISE,在運行速度、算法優(yōu)化和功能整合等很多方面都有了顯著地改進。但是對初學者來說,新的約束語言XDC以及腳本語言Tcl的引入則成為了快速掌握Vivado使用技巧的最大障礙,
    的頭像 發(fā)表于 09-14 09:09 ?1871次閱讀

    如何利用TclVivado實現(xiàn)定制化的FPGA設計流程?

    FPGA 的設計流程簡單來講,就是從源代碼到比特流文件的實現(xiàn)過程。大體上跟 IC 設計流程類似,可以分為前端設計和后端設計。
    的頭像 發(fā)表于 04-23 09:08 ?2164次閱讀
    如何利用<b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>實現(xiàn)定制化的FPGA設計流程?

    VIVADO從此開始高亞軍編著

    / 226第7章 TclVivado的應用 / 2277.1 VivadoTcl的支持
    發(fā)表于 10-21 18:24

    Vivado圖形化界面IDE運行和調(diào)試Tcl命令

    。Xilinx公司從ISE工具的后期開始,工具引入了對tcl語言的支持。目前廣泛使用的設計工具Vivado
    發(fā)表于 06-17 14:52

    TCL 定制 Vivado 設計實現(xiàn)流程

    今天推出Xilinx已發(fā)布的《Vivado使用誤區(qū)與進階》系列:用TCL定制Vivado設計實現(xiàn)流程。 上一篇《Tcl
    發(fā)表于 06-28 19:34

    Vivado設計之Tcl定制化的實現(xiàn)流程

    其實TclVivado還有很多延展應用,接下來我們就來討論如何利用Tcl語言的靈活性和可擴展性,
    發(fā)表于 11-18 01:48 ?3605次閱讀
    <b class='flag-5'>Vivado</b>設計之<b class='flag-5'>Tcl</b>定制化的實現(xiàn)流程

    Vivado下利用Tcl腳本對綜合后的網(wǎng)表進行編輯過程

    ISE下,對綜合后的網(wǎng)表進行編輯幾乎是不可能的事情,但在Vivado下成為可能。VivadoTcl的支持,使得Tcl腳本
    發(fā)表于 11-18 03:16 ?7526次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Vivado</b>下利用<b class='flag-5'>Tcl</b>腳本對綜合后的網(wǎng)表進行編輯過程

    TclVivado的基礎應用

    Vivado使用技巧的最大障礙,以至于兩年多后的今天,仍有很多用戶缺乏升級到Vivado的信心。本文介紹了TclVivado
    發(fā)表于 11-18 03:52 ?4938次閱讀
    <b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>的基礎應用

    Vivado使用誤區(qū)與進階——Vivado實現(xiàn)ECO功能

    關于TclVivado的應用文章從Tcl的基本語法和在Vivado
    發(fā)表于 11-18 18:26 ?5395次閱讀
    <b class='flag-5'>Vivado</b>使用誤區(qū)與進階——<b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>實現(xiàn)ECO功能

    如何使用Tcl命令語言讓Vivado HLS運作

    了解如何使用Tcl命令語言以批處理模式運行Vivado HLS并提高工作效率。 該視頻演示了如何從現(xiàn)有的Vivado HLS設計輕松創(chuàng)建新的Tcl批處理腳本。
    的頭像 發(fā)表于 11-20 06:06 ?3183次閱讀

    TclVivado的基礎應用及優(yōu)勢

    實際上Tcl的功能可以很強大,用其編寫的程序也可以很復雜,但要在Vivado或大部分其它EDA工具中使用,則只需掌握其中最基本的幾個部分
    的頭像 發(fā)表于 07-24 16:52 ?3463次閱讀
    <b class='flag-5'>Tcl</b><b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>的基礎應用及優(yōu)勢

    FPGA設計TclVivado的基礎應用

    ,還是從對使用者思路的要求,都是全新的;在運行速度、算法優(yōu)化和功能整合等很多方面都有了顯著地改進。但是對初學者來說,新的約束語言XDC以及腳本語言Tcl的引入則成為了快速掌握Vivado使用技巧的最大障礙,以至于兩年多后的今天,仍有很多用戶缺乏升級到
    的頭像 發(fā)表于 11-17 17:32 ?2580次閱讀

    TCL定制Vivado設計實現(xiàn)流程

    今天推出Xilinx已發(fā)布的《Vivado使用誤區(qū)與進階》系列:用TCL定制Vivado設計實現(xiàn)流程。
    的頭像 發(fā)表于 05-05 09:44 ?1069次閱讀
    用<b class='flag-5'>TCL</b>定制<b class='flag-5'>Vivado</b>設計實現(xiàn)流程

    Vivado實現(xiàn)ECO功能

    關于 Tcl Vivado的應用文章從 Tcl 的基本語法和在 Vivado
    的頭像 發(fā)表于 05-05 15:34 ?2670次閱讀
    <b class='flag-5'>在</b><b class='flag-5'>Vivado</b><b class='flag-5'>中</b>實現(xiàn)ECO功能

    Vivado設計套件Tcl命令參考指南

    電子發(fā)燒友網(wǎng)站提供《Vivado設計套件Tcl命令參考指南.pdf》資料免費下載
    發(fā)表于 09-14 10:23 ?1次下載
    <b class='flag-5'>Vivado</b>設計套件<b class='flag-5'>Tcl</b>命令參考指南
    RM新时代网站-首页