Vivado時序約束中Tcl命令的對象及屬性

Vivado時序約束中Tcl命令的對象及屬性url

在前面的章節中,咱們用了不少Tcl的指令,但有些指令並無把全部的參數多列出來解釋,這一節,咱們就把約束中的Tcl指令詳細講一下。spa

咱們前面講到過get_pins和get_ports的區別,並且咱們也用過get_cells、get_clocks和get_nets這幾個指令,下面就經過一張圖直觀展示它們的區別。.net

get_clocks後面的對象是咱們以前經過create_clocks或者create_generated_clocks建立的時鐘,不在硬件上直接映射。regexp

咱們再來看下各個命令的屬性。對象

1. portblog

咱們能夠經過Tcl腳本查看port的全部屬性,好比上面的wave_gen工程中,有一個port是clk_pin_p,採用以下腳本:ci

set inst [get_ports clk_pin_p] report_property $inst

顯示以下:
get

get_ports的使用方法以下:input

# 獲取全部端口 get_ports * # 獲取名稱中包含data的端口 get_ports *data* # 獲取全部輸出端口 get_ports -filter {DIRECTION == OUT} # 獲取全部輸入端口 all_inputs # 獲取輸入端口中名字包含data的端口 get_ports -filter {DIRECTION == IN} *data* # 獲取總線端口 get_ports -filter {BUS_NAME != ""}

2. cellcmd

按照上面的一樣的方式,獲取cell的property,以下:

get_cells的使用方法以下:

# 獲取頂層模塊 get_cells * # 獲取名稱中包含字符gen的模塊 get_cells *gen* # 獲取clk_gen_i0下的全部模塊 get_cells clk_gen_i0/* # 獲取觸發器爲FDRE類型且名稱中包含字符samp get_cells -hier filter {REF_NAME == FDRE} *samp* # 獲取全部的時序單元邏輯 get_cells -hier -filter {IS_SEQUENTIAL == 1} # 獲取模塊uart_rx_i0下兩層的LUT3 get_cells -filter {REF_NAME == LUT3} *uart_tx_i0/*/*

3. pin

獲取pin的property,以下:

get_pins的使用方法以下:

# 獲取全部pins get_pins * # 獲取名稱中包含字符led的引腳 get_pins -hier -filter {NAME =~ *led*} # 獲取REF_PIN_NAME爲led的引腳 get_pins -hier -filter {REF_PIN_NAME == led} # 獲取時鐘引腳 get_pins -hier -filter {IS_CLOCK == 1} # 獲取名稱中包含cmd_parse_i0的使能引腳 get_pins -filter {IS_ENABLE == 1} cmd_parse_i0/*/* # 獲取名稱中包含字符cmd_parse_i0且爲輸入的引腳 get_pins -filter {DIRECTION == IN} cmd_parse_i0/*/*

4. net

獲取pin的property,以下:

get_nets的使用方法以下:

# 獲取全部nets get_nets * # 獲取名稱中包含字符send_resp_val的網線 get_nets -hier *send_resp_val* get_nets -filter {NAME =~ *send_resp_val*} -hier # 獲取穿過邊界的同一網線的全部部分 get_nets {resp_gen_i0/data4[0]} -segments # 獲取模塊cmd_parse_i0下的全部網線 get_nets -filter {PARENT_CELL == cmd_parse_i0} -hier # 獲取模塊cmd_parse_i0下的名稱中包含字符arg_cnt[]的網線 get_nets -filter {PARENT_CELL == cmd_parse_i0} -hier *arg_cnt[*]

這5個tcl指令的經常使用選項以下表:

命令 -hierarchy -filter -of_objects -regexp -nocase
get_cells
get_nets
get_pins
get_ports  
get_clocks  

這5個Tcl命令對應的5個對象之間也有着密切的關係,下圖所示的箭頭的方向表示已知箭頭末端對象可獲取箭頭指向的對象。

 

 

以wave_gen中的clk_gen_i0模塊爲例來講明上面的操做:

# 獲取模塊的輸入引腳 get_pins -of [get_cells {clk_gen_i0/clk_core_i0}] -filter {DIRECTION == IN} # 已知引腳名獲取所在模塊 get_cells -of [get_pins clk_gen_i0/clk_core_i0/clk_in1_n] # 已知模塊名獲取與該模塊相連的網線 get_nets -of [get_cells {clk_gen_i0/clk_core_i0}] # 已知引腳名獲取與該引腳相連的網線 get_nets -of [get_pins clk_gen_i0/clk_core_i0/clk_rx] # 已知時鐘引腳獲取時鐘引腳對應的時鐘 get_clocks -of [get_pins clk_gen_i0/clk_core_i0/clk_rx]

須要注意的是:

① -hier不能和層次分隔符「/」同時使用,但「/」可出如今-filter中

② 可根據屬性過濾查找目標對象

③ -filter中的屬性爲:「==」(相等)、「!=」(不相等)、"=~"(匹配)、"!~"(不匹配),如有多個表達式,其返回值爲bool類型時,支持邏輯操做(&& ||)

本文轉自:科學計算technomania,做者:貓叔,轉載此文目的在於傳遞更多信息,版權歸原做者全部。

相關文章
相關標籤/搜索