Tcl在Vivado中的應用
如圖3所示,pins 在 Vivado 數據庫中有個獨特的存在形式,即 / 。 這里的“ /”不表示層次,而是其名字的一部分, 表示這個 pin 所屬的實體。 也就是說,在使用 get_pins配合-hier 來查找 pins 時,“ /”可以作為名字的一部分,出現在搜索條件內(注意與上述get_cells 和 get_nets 的使用區別) 。
2.2 目標之間的關系
Tcl 在搜索網表中的目標時,除了上述根據名字條件直接搜索的方式,還可以利用目標間的關系,使用-of_objects(在 Tcl 中可以簡寫為-of)來間接搜索特定目標。 Vivado 中定義的五類目標間的關系如圖4(左)圖所示。 以圖4(右)圖的設計來舉例。
圖5是一個更復雜的示例,涉及跨層次搜索??梢钥吹皆?get_pins 時, 要加上-leaf才能準確定位到門級元件(或 blackbox)的端口 q。另外, 在實際操作中, 使用 get_nets 和get_pins 時,需要視情況而加上其它條件( -filter) 才能準確找到下述例子中的 cells ( i2)。
2.3 高級查找功能
在使用 get_*命令查找網表中的目標時,除了名字這一直接條件,往往還需要輔以其它更復雜的條件判斷,這就需要用到高級查找功能: -filter 結合 Tcl 支持的各種關系和邏輯運算符( ==, !=, =~, !~, <=, >=, >, <, &&, ||)甚至是正則表達式來操作。
在創建子程序時也常常用到-filter,例如下述 get_p 的子程序/過程就可以用來返回指定管腳的方向屬性,告訴用戶這是一個輸入管腳還是一個輸出管腳。
3 Tcl 在 Vivado 中的延伸應用
Tcl 在 Vivado 中的應用還遠不止上述所列,其它常用的功能包括使用預先寫好的 Tcl腳本來跑設計實現流程,創建高級約束( XDC 不支持循環等高級 Tcl 語法)以及實現復雜的個性化設計流程等等。 Tcl 所帶來的強大的可擴展性決定了其在版本控制、 設計自動化流程等方面具有圖形化界面不能比擬的優勢。
Vivado 在不斷發展更新的過程中,還有很多新的功能,包括 ECO、 PR、 HD Flow 等等都是從 Tcl 腳本方式開始支持,然后再逐步放入圖形化界面中實現。這也解釋了為何高端 FPGA 用戶和熟練的 Vivado 用戶都更偏愛 Tcl 腳本。
評論