TCL中關于Pins的一些使用方法?
前言

Ports,Pins,Cells,nets以及clock都是FPGA中模塊的關鍵組成部分,地位差不多,tcl中對它們的操作也大同小異。
給出前幾篇文章列表,便于查詢:
邏輯設計中復位的穩妥處理方法?
邏輯設計中需要顯式地使用IBUF以及OBUF類似的原語嗎?
TCL中關于管腳(Ports)的一些使用方法?
正文
為了不來回翻閱,這里還是得貼出一張圖:
何為pins?一目了然!
從這張圖中也可以看出,pins是分模塊的,不想ports永遠都是頂層模塊的。
既然如此,獲得的pins也一定是指出屬于哪個模塊的pins等。
以Xilinx的wavegen示例工程為例,我們如何獲取內部各個模塊的pins?
模塊規劃如下(這個圖確實漂亮,我們自己設計模塊的時候,如果要寫文檔,可以借鑒下,并沒有太多花里胡哨的顏色,卻又相對直觀):
獲取模塊中的所有pins :get_pins
當然,這各并不實用,因為FPGA中模塊太多了(一般來說),那么pins也很多,不易觀看。
這里列出部分結果:
get_pins ... IBUF_rst_i0/O IBUF_rst_i0/I IBUF_rxd_i0/O IBUF_rxd_i0/I OBUF_dac_clr_n/O OBUF_dac_clr_n/I OBUF_dac_cs_n/O ... clk_gen_i0/Q[10] clk_gen_i0/Q[11] clk_gen_i0/Q[12] clk_gen_i0/Q[13] clk_gen_i0/Q[14] clk_gen_i0/Q[15] ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
獲取包含特定字符的PIN:
get_pins -hier -filter {NAME =~ *uart_tx*} # 此處省略大多數pin,太多不利于觀看 uart_tx_i0/clk_tx uart_tx_i0/dout[0] uart_tx_i0/dout[1] uart_tx_i0/dout[2] # ......
1
2
3
4
5
6
7
8
9
10
獲取時鐘pin:
get_pins -hier -filter {IS_CLOCK == 1} # 此處省略很多pin char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0]/C char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][1]/C
1
2
3
4
5
6
可見,寄存器的C端即時鐘端。
獲取輸入pins:
get_pins -filter {DIRECTION == IN} IBUF_rst_i0/I IBUF_rxd_i0/I OBUF_dac_clr_n/I OBUF_dac_cs_n/I OBUF_led_i0/I OBUF_led_i1/I
1
2
3
4
5
6
獲取輸出pins:
get_pins -filter {DIRECTION == OUT} IBUF_rst_i0/O IBUF_rxd_i0/O OBUF_dac_clr_n/O OBUF_dac_cs_n/O OBUF_led_i0/O OBUF_led_i1/O OBUF_led_i2/O
1
2
獲取pin的屬性
上面我們獲得了時鐘的pins,我們看看這個時鐘PIN的屬性:
上面獲取的時鐘:
get_pins char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0]/C
1
2
set inst [get_pins char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0]/C ]
1
char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0]/C
report_property $inst
1
Property Type Read-only Value CLASS string true pin DIRECTION enum true IN HD.ASSIGNED_PPLOCS string* true HOLD_SLACK double true needs timing update*** IS_CLEAR bool true 0 IS_CLOCK bool true 1 IS_CONNECTED bool true 1 IS_ENABLE bool true 0 IS_INVERTED bool false 0 IS_LEAF bool true 1 IS_ORIG_PIN bool true 1 IS_PRESET bool true 0 IS_RESET bool true 0 IS_REUSED bool true 0 IS_SET bool true 0 IS_SETRESET bool true 0 IS_TIED bool true 0 IS_WRITE_ENABLE bool true 0 LOGIC_VALUE string true needs timing update*** NAME string true char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0]/C PARENT_CELL cell true char_fifo_i0/U0/inst_fifo_gen/gconvfifo.rf/grf.rf/gntv_or_sync_fifo.gcx.clkx/rd_pntr_cdc_inst/dest_graysync_ff_reg[0][0] REF_NAME string true FDRE REF_PIN_NAME string true C SETUP_SLACK double true needs timing update***
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
注意,這里的操作完全是仿照獲取ports屬性的操作。
結尾
總結起來無非就是get_pins加上一些條件,篩選自己需要的一些pins。
也許,這些看起來沒有什么用,但其實用途也不在要實實在在,非要用這些東西,我想更大的用于在于了解這一類元素(Ports,Pins,Cells,nets以及clock)的規律,能夠加深對模塊的理解,它總會有作用的。
例如在看時序報告時,內部器件以及走線延遲,都是這種形式,一眼就知道,有一種熟悉感,有利于我們理解這些之外的內容,例如整體的認識,時序的計算,不至于看了報告,還沒來得及分析,就被這一大串的pins,nets給整懵了。
FPGA
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。