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

TCL中关于Pins的一些使用方法?前言 Ports Pins Cells nets 以及 clock 都是 FPGA 中模块的关键组成部分 地位差不多 tcl 中对它们的操作也大同小异 给出前几篇文章列表 便于查询 逻辑设计中复位的稳妥处理方法

大家好,我是讯享网,很高兴认识大家。

前言

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

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

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

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

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

正文

为了不来回翻阅,这里还是得贴出一张图:

端口
讯享网

何为pins?一目了然!

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

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

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

模块规划如下(这个图确实漂亮,我们自己设计模块的时候,如果要写文档,可以借鉴下,并没有太多花里胡哨的颜色,却又相对直观):
模块划分

  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的属性
讯享网 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给整懵了。

小讯
上一篇 2025-03-10 10:30
下一篇 2025-04-02 23:16

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/129123.html