前言

往期博文:

​逻辑设计中复位的稳妥处理方法?​

​逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?​

​TCL中关于管脚(Ports)的一些使用方法?​

​TCL中关于Pins的一些使用方法?​

​TCL中关于Cells的一些使用方法?​

TCL在FPGA中的应用的最后一个元素,nets,即线网。

net是连接pin与pin或者pin与port的桥梁,相对而言, 由于一个设计中的module(cell)很多,pins更多,固然,net也有很多。如何找到特定的net是关键。

正文

先给出这些元素之间的关系:

TCL中关于Nets的一些用法?_gui界面

  1. 获取所有的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]
# 这是部分nets

  1. 获取其属性

找到一个具体的net,例如:

TCL中关于Nets的一些用法?_显式_02

我可以通过GUI界面看到他的属性:

TCL中关于Nets的一些用法?_显式_03

可今天可不是通过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的属性对比,貌似是不一样的。

  1. 获取包含特定字符的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

  1. 获取特定模块下的所有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

  1. 获取在具体模块下且具有特定字符的网线:
get_nets -filter {PARENT_CELL == rst_gen_i0} -hier *clk_tx*
rst_gen_i0/clk_tx rst_gen_i0/rst_clk_tx

我觉得最后两个还是比较实用的。