前言
先给出近期文章列表:
逻辑设计中复位的稳妥处理方法?
逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?
TCL中关于管脚(Ports)的一些使用方法?
TCL中关于Pins的一些使用方法?
TCL中关于Cells的一些使用方法?
TCL中关于Nets的一些用法?
前面几篇关于TCL的文章都是关于某种对象单独的使用方法,这篇文章就要将他们都联系起来;
我们依然使用wavegen示例工程作为今天的工程来测试:
正文
标题中所说的这些对象:Ports/Pins/Nets/Cells/Clocks,它们之间都有相互的联系:
例如:
可以获取与特定cells相关的pins、ports、nets、clocks,当然如果存在的话,就可以获取。
以wavegen中的模块clk_gen_i0为例:
- 获取特定模块的pins:
get_pins -of [get_cells clk_gen_i0]
clk_gen_i0/CLK
clk_gen_i0/Q[0]
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] clk_gen_i0/Q[1] clk_gen_i0/Q[2] clk_gen_i0/Q[3] clk_gen_i0/Q[4] clk_gen_i0/Q[5] clk_gen_i0/Q[6] clk_gen_i0/Q[7] clk_gen_i0/Q[8] clk_gen_i0/Q[9] clk_gen_i0/active clk_gen_i0/bit_cnt_reg[4] clk_gen_i0/clk_pin_n clk_gen_i0/clk_pin_p clk_gen_i0/clk_samp clk_gen_i0/clk_tx clk_gen_i0/en_clk_samp clk_gen_i0/int_rst clk_gen_i0/reset clk_gen_i0/rst_clk_tx clk_gen_i0/samp_val
- 获取特定模块的ports:
get_ports -of [get_cells clk_gen_i0]
clk_pin_n clk_pin_p
- 获取特定模块的nets:
get_nets -of [get_cells clk_gen_i0]
clk_rx clkx_pre_i0_n_31
clkx_pre_i0_n_21
clkx_pre_i0_n_20
clkx_pre_i0_n_19
clkx_pre_i0_n_18 clkx_pre_i0_n_17 clkx_pre_i0_n_16 clkx_pre_i0_n_30 clkx_pre_i0_n_29 clkx_pre_i0_n_28 clkx_pre_i0_n_27 clkx_pre_i0_n_26 clkx_pre_i0_n_25 clkx_pre_i0_n_24 clkx_pre_i0_n_23 clkx_pre_i0_n_22 active dac_spi_i0_n_7 clk_pin_n clk_pin_p clk_samp clk_tx en_clk_samp int_rst rst_i rst_clk_tx samp_val
- 获取特定模块的clock
get_clocks -of [get_cells clk_gen_i0]
clk_rx_clk_core
clk_pin_p
clk_samp
clk_tx_clk_core
可见,cells可以和其他所有对象交互;
同理,我们也可以获取特定引脚的cell:
我们先看看和clk_gen_i0相关的pin有哪些:
get_pins -of [get_cells clk_gen_i0]
clk_gen_i0/CLK
clk_gen_i0/Q[0] 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] clk_gen_i0/Q[1] clk_gen_i0/Q[2] clk_gen_i0/Q[3] clk_gen_i0/Q[4] clk_gen_i0/Q[5] clk_gen_i0/Q[6] clk_gen_i0/Q[7] clk_gen_i0/Q[8] clk_gen_i0/Q[9] clk_gen_i0/active clk_gen_i0/bit_cnt_reg[4]
clk_gen_i0/clk_pin_n
clk_gen_i0/clk_pin_p
clk_gen_i0/clk_samp
clk_gen_i0/clk_tx
clk_gen_i0/en_clk_samp clk_gen_i0/int_rst clk_gen_i0/reset clk_gen_i0/rst_clk_tx clk_gen_i0/samp_val
我们关注到一个引脚clk_gen_i0/clk_pin_n ,我们就来看看这个引脚相关的cells:
get_cells -of [get_pins clk_gen_i0/clk_pin_n]
clk_gen_i0
再看看和pin相关的net:
get_nets -of [get_pins clk_gen_i0/clk_pin_n]
clk_pin_n
能获得与pin相关的时钟吗?
也可以,如果存在的话:
get_clocks -of [get_pins clk_gen_i0/clk_core_i0/clk_rx]
clk_rx_clk_core
如果不存在的话:
get_clocks -of [get_pins clk_gen_i0/clk_pin_n]
WARNING: [Vivado 12-1008] No clocks found for command 'get_clocks -of [get_pins clk_gen_i0/clk_pin_n]'.
Resolution: Verify the create_clock command was called to create the clock object before it is referenced.
INFO: [Vivado 12-626] No clocks found. Please use 'create_clock' or 'create_generated_clock' command to create clocks.
会有相应的提醒。
因此,最终的结论是它们之间都有着相互的联系,如果存在的话,可以相互获取。