前言
往期博文:
逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?
TCL在FPGA中的应用的最后一个元素,nets,即线网。
net是连接pin与pin或者pin与port的桥梁,相对而言, 由于一个设计中的module(cell)很多,pins更多,固然,net也有很多。如何找到特定的net是关键。
正文
先给出这些元素之间的关系:
- 获取所有的nets:
get_nets
active
arg_cnt
arg_sav
bus_dst[0]
bus_dst[1]
bus_dst[2]
bus_samp_src[0]
bus_samp_src[10]
bus_samp_src[1]
bus_samp_src[2]
bus_samp_src[3]
bus_samp_src[4]
bus_samp_src[5]
bus_samp_src[6]
bus_samp_src[7]
bus_samp_src[8] bus_samp_src[9] char_cnt_reg[0] char_cnt_reg[1] char_cnt_reg[2] char_fifo_din[0]
- 获取其属性
找到一个具体的net,例如:
我可以通过GUI界面看到他的属性:
可今天可不是通过GUI界面来看属性的,我们要联系TCL命令:
set inst [get_nets rst_pin]
rst_pin
report_property $inst
Property Type Read-only Value
CLASS string true net
CROSSING_SLRS string true
DRIVER_COUNT int true 1
FLAT_PIN_COUNT int true 1
IS_CONTAIN_ROUTING bool true 0
IS_INTERNAL bool true 0
IS_REUSED bool true 1
IS_ROUTE_FIXED bool false 0
MARK_DEBUG bool false 0
NAME string true rst_pin
PARENT string true rst_pin
PIN_COUNT int true 1
REUSE_STATUS enum true
ROUTE_STATUS enum true INTRASITE
TYPE enum true SIGNAL
这里的属性和GUI的属性对比,貌似是不一样的。
- 获取包含特定字符的net:
get_nets *rst*
int_rst
rst_clk_rx
rst_clk_samp
rst_clk_tx
rst_i rst_pin
或者,具有层次关系的:
get_nets -hier *rst*
int_rst
rst_clk_rx
rst_clk_samp
rst_clk_tx rst_i
rst_pin char_fifo_i0/rst char_fifo_i0/U0/rst char_fifo_i0/U0/inst_fifo_gen/rst
get_nets -filter {NAME =~ *rst*} -hier
int_rst rst_clk_rx rst_clk_samp rst_clk_tx rst_i rst_pin
- 获取特定模块下的所有net:
get_nets -filter {PARENT_CELL == rst_gen_i0} -hier
rst_gen_i0/CLK rst_gen_i0/clk_samp rst_gen_i0/clk_tx rst_gen_i0/int_rst rst_gen_i0/pwropt rst_gen_i0/rst_clk_rx rst_gen_i0/rst_clk_samp rst_gen_i0/rst_clk_tx
- 获取在具体模块下且具有特定字符的网线:
get_nets -filter {PARENT_CELL == rst_gen_i0} -hier *clk_tx*
rst_gen_i0/clk_tx rst_gen_i0/rst_clk_tx
我觉得最后两个还是比较实用的。