前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何快速查找目标cell

如何快速查找目标cell

作者头像
Lauren的FPGA
发布2020-01-14 15:19:39
2.5K0
发布2020-01-14 15:19:39
举报
文章被收录于专栏:Lauren的FPGA

在用Vivado时,必然会用到Tcl。一方面描述约束时要用到,另一方面执行各种操作典型的如生成各种定制化报告等也会用到。这其中涉及到一个重要问题:如何快速且高效地找到目标单元(cell)。什么是cell可以阅读这篇文章:一张图看懂cell, pin, net, port

通常,Vivado综合后的结果是以层次化方式显示的,这种层次化方式和设计输入阶段的RTL代码层次基本吻合。因此,对于设计者而言,了解原始RTL代码的层次结构有助于查找cell。

方法1:根据目标cell的名字特征查找

Cell的名字其实是包含层次的,类似于操作系统中文件的全名。假如,已知cell名字中包含字符char_cnt_reg,那么可借助该字符查找cell,如下图所示。

这里,选项-hier的目的是层次化寻找。同时,还可以看到Vivado的命名特征:对于寄存器,综合后的名字是在原有名字后添加“_reg”。

方法2:根据REF_NAME查找

REF_NAME实际上是cell的一个属性。每个cell都有自己名字(NAME),也都有自己的REF_NAME。那么什么是REF_NAME呢?从宏观上看,Verilog module关键字后的名字或者VHDL entity关键字后的名字就是REF_NAME。module或entity被实例化后,会有个实例化名字,这个名字将构成NAME的一部分。从微观上看,RTL代码综合后的电路最终映射到具体芯片的查找表、触发器、Block RAM、DSP48等。这些逻辑单元都有自己对应的cell,同样每个cell都有REF_NAME。不同的是,REF_NAME的名字是固定的。例如,如果RTL代码对应的电路是触发器,那么其REF_NAME的可能值是FDCE、FDPE、FDRE或FDSE。如下图所示。

REF_NAME是cell的属性,因此在使用时需要借助选项-filter。例如:查找REF_NAME为FDRE的所有cell,其命令如下图所示。

显然,NAME和REF_NAME可以结合使用,以便更准确地找到目标cell。例如,查找名字中包含特征字符active,且REF_NAME是FDRE的cell,具体命令如下图所示。

这里,使用了“&&”,与Verilog中的含义一致,都表示逻辑与。

方法3:根据其他属性查找

选中一个cell,在其property窗口中可以看到相关的属性。根据属性的特征可以筛选出目标cell。例如,可以根据属性IS_SEQUENTIAL获取设计中的所有时序逻辑单元。

方法4:根据cell与net或pin的关系查找

通过与cell相连的net可以找到cell,通过附属于cell的pin也可以找到cell。看一个典型案例。具体电路如下图所示。图中蓝色标记的net为已知net,现在要找到这个net的所有负载。

具体命令如下图所示。注意第二条命令,先找到与net直接相连的pin。在找pin时,要求pin的方向为输入,也就是pin为输入管脚,同时pin是leaf pin,也就是最底层的pin,这意味着图中的rst_clk_tx不是目标pin,而FDSE的S以及FDRE的R是目标pin。

几个小技巧:

技巧1:

在Schematic视图下,选中一个对象,不管该对象是pin、cell还是net,在Tcl Console中输入命令get_selected_objects,就可以打印出该对象的全名。

技巧2:

如果已知一个对象的全名,在Tcl console中获得该对象,并执行select_objects,然后按下F4,则可显示该对象的Schematic视图。具体操作如下图所示。

技巧3:

如果返回对象很多,不便于查看可通过show_objects命令查看。具体操作如下图所示。该命令会打开一个新窗口,显示找到的对象。

典型案例:

查找指定模块下的所有触发器,假定这里指定的模块为samp_gen_i0下的子模块meta_harden_samp_gen_go_i0,具体命令如下图所示。这里将NAME和REF_NAME结合使用。

如果采用如下命令,则会报告没有匹配对象。这是因为-hier和层次表示符不能同时使用,但可以在选项-filter中使用,如上图所示的那样。

思考一下,根据上述方法,

1. 如果要找到指定模块下的所有Block RAM对应的cell,应采用什么样的命令?

2. 如果要找到指定模块下的所有Ultra RAM对应的cell,应采用什么样的命令?

3. 如果要找到指定模块下的所有DSP48对应的cell,应采用什么样的命令?

4. 如果要找到指定模块下的所有时序单元对应的cell,应采用什么样的命令?

在描述时序约束时,越具体越好,这里介绍的方法可以帮助我们准备找到目标cell。

文 | Lauren 图 | Lauren

Copyright @ Lauren的FPGA

转载事宜请私信 | 获得授权后方可转载

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Lauren的FPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档