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

2021年11月25日 阅读数:3
这篇文章主要向大家介绍TCL中关于Pins的一些使用方法?,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

前言

Ports,Pins,Cells,nets以及clock都是FPGA中模块的关键组成部分,地位差很少,tcl中对它们的操做也大同小异。markdown

给出前几篇文章列表,便于查询:atom

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

逻辑设计中须要显式地使用IBUF以及OBUF相似的原语吗?spa

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

正文

为了避免来回翻阅,这里仍是得贴出一张图:设计

端口

何为pins?一目了然!code

从这张图中也能够看出,pins是分模块的,不想ports永远都是顶层模块的。blog

既然如此,得到的pins也必定是指出属于哪一个模块的pins等。文档

以Xilinx的wavegen示例工程为例,咱们如何获取内部各个模块的pins?get

模块规划以下(这个图确实漂亮,咱们本身设计模块的时候,若是要写文档,能够借鉴下,并无太多花里胡哨的颜色,却又相对直观):
模块划分

  1. 获取模块中的全部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. 获取包含特定字符的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. 获取时钟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 

可见,寄存器的C端即时钟端。

  1. 获取输入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. 获取输出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. 获取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

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 ]

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
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***

注意,这里的操做彻底是仿照获取ports属性的操做。

结尾

总结起来无非就是get_pins加上一些条件,筛选本身须要的一些pins。

也许,这些看起来没有什么用,但其实用途也不在要实实在在,非要用这些东西,我想更大的用于在于了解这一类元素(Ports,Pins,Cells,nets以及clock)的规律,可以加深对模块的理解,它总会有做用的。

例如在看时序报告时,内部器件以及走线延迟,都是这种形式,一眼就知道,有一种熟悉感,有利于咱们理解这些以外的内容,例如总体的认识,时序的计算,不至于看了报告,还没来得及分析,就被这一大串的pins,nets给整懵了。

本文同步分享在 博客“李锐博恩”(CSDN)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。