前言

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的属性

上面我们获得了时钟的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给整懵了。

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

  1. TCL中Ports/Pins/Nets/Cells/Clocks之间的交互关系?

    前言 先给出近期文章列表: 逻辑设计中复位的稳妥处理方法? 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗? TCL中关于管脚(Ports)的一些使用方法? TCL中关于Pins的一些使用方 ...

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

    前言 经过前两篇关于ports以及pins的用法讲解,自然而然大概可以猜出cells的使用方法了? 盲猜应该是get_cells类似的语法,其实正是如此. 先给出其他几篇博文的地址: 逻辑设计中复位的 ...

  3. TCL中关于Nets的一些用法?

    前言 往期博文: 逻辑设计中复位的稳妥处理方法? 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗? TCL中关于管脚(Ports)的一些使用方法? TCL中关于Pins的一些使用方法? TC ...

  4. python tcl 控件_在Tkinter.Tcl()中使用Python函数

    >我有一堆Python函数.我们称他们为foo,bar和baz.它们接受可变数量的字符串参数,并执行其他复杂的操作(如访问网络). >我希望"用户"(让我们假设他只熟悉 ...

  5. TCL语言笔记:TCL中的String命令

    一.介绍 字符串是 Tcl 中的基本数据类型,所以有大量的字符串操作命令.一个比较重要的问题就是模式匹配,通过模式匹配将字符串与指定的模式(格式)相匹配来进行字符串的比较.搜索等操作. 二.strin ...

  6. 【转】C#中数组复制的4种方法

    C#中数组复制的4种方法 from:http://blog.csdn.net/burningcpu/article/details/1434167 今天旁边的同事MM叫我调了一段程序,她想复制一个数组 ...

  7. TCL中变量嵌套使用

    TCL中变量嵌套使用 在使用多重嵌套变量时候,因为 {} 对于tcl来说属于非运算符号,因此在使用变量嵌套,直接调用会出现问题 即变量不能正确调用: set mm_list "0 1&quo ...

  8. shell中十种实现自加的方法

    shell中十种实现自加的方法 let "n = $n + 1" : $((n = $n + 1)) ((n = n+1)) n=$(($n + 1)) : $[ n = $n + ...

  9. Unity3D 中 2D_Toolkit插件下载 和 导入方法

    Unity3D 中 2D_Toolkit插件下载 和 导入方法 1.你把下载来的包放到 安装目录:Editor\Standard Packages里面. 2.然后按ctrl+9,进入asset sto ...

最新文章

  1. python时间序列分析航空旅人_时间序列分析-ARIMA模型(python)
  2. 李开复从不缺席的AI夏令营开营:今年周志华俞勇张潼授课,1万人报名仅600入选...
  3. Vuejs报错error: Unexpected console statement (no-console) at src\... 解决办法
  4. 网站首页head区代码规范
  5. Struts文件上传包含修改文件上传参数,多文件上传
  6. 升级 ServeRADI-8i控制器,使用IBM 3650 9797 老服务器支持2T 硬盘
  7. Flume性能测试报告
  8. 最大公约数,最小公倍数,质因式分解
  9. 在深圳呆那么就感觉伤心了有木有?
  10. GridView自动序号
  11. 文件上传input简便美化方案
  12. [UVA1374]Power Calculus【迭代加深】
  13. Qt之QRoundProgressBar(圆形进度条)
  14. Excel高级函数应用总结
  15. 【工科数学分析】2021-10-07-工科数学分析叒复习(三)
  16. php hprose扩展1.5.5,基于Hprose for PHP 1.5.6、Yii2.0.7的RPC的基本实现流程
  17. js实现椭圆轨迹_用js实现一组图片同心椭圆周运动 图片有从小到大渐近效果
  18. 126邮箱国外服务器,网易邮箱海外服务器大升级
  19. 【安卓大作业】Android Studio图书管理系统 听雨轩
  20. 从程序员到项目经理:懂电脑更要懂人脑

热门文章

  1. Android中removeCallbacks失效原因
  2. asp 把大图缩小显示的JS
  3. @service注解_Spring 中 @Component、@Service 等注解如何被解析的
  4. 高职扩招有计算机专业吗,高职扩招计算机专业
  5. 怎样学python最快_如何少走弯路,快速学会Python
  6. 计算机软件3十2二5,计算机软件基础3.2 操作系统.pdf
  7. adams建立一绳索不带滑轮_建立企业精益供应链,必须先解开现有绳索 系列(一)...
  8. python pandas聚合_Python Pandas分组聚合的实现方法
  9. 如何利用Python调用一些搜索引擎网站?
  10. 利用mem数组在MM32 MicroPython中实现COMP的功能