首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
资源利用率报告中的LUT和LUTRAM有什么区别
2
xilinx verilog语法技巧(三)--RAM的初始化
3
为什么推荐使用XPM?
4
Block RAM的基本结构
5
为什么要用XPM_MEMORY
6
Vivado中用于时钟操作的几个Tcl命令
7
影响FPGA时序的进位链(Carry Chain), 你用对了么??
8
动态时钟相位
9
动态时钟频率
10
如何缩短Vivado运行时间
11
你的FPGA设计有这些缺陷吗
12
report_utilization远比你想象的强大
13
vivado如何快速找到schematic中的object
14
FPGA中的CLOCK REGION和SLR是什么含义
15
FPGA中的BEL, SITE, TILE是什么含义
16
如何快速查找目标cell
17
都是pin,有什么区别
18
都是net,有什么区别
19
一张图看懂cell, pin, net, port
20
如何快速找到组合逻辑生成的时钟
21
【Vivado那些事】Vivado下头文件使用注意事项
22
Pblock可以这么画
23
关于Pblock的8个必知问题
24
常用的跟Pblock相关的Tcl命令
25
【Vivado】那些事儿-汇总篇
26
【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
27
Storage Elements
28
D触发器都有哪几种类型?对应什么样的代码?
29
Xilinx 7系列FPGA逻辑单元理解
30
Vivado下查看芯片资源
31
对RAM初始化怎么做
32
干货:Vivado 直接修改RAM初始化文件,避免重新综合、实现的方法
33
借助Elaborated Design优化RTL代码
34
一张图理解什么是好的设计层次
35
9个关于SSI芯片的必知问题
36
Vivado 2018.3 report_qor_suggestions怎么用
37
Vivado 2019.1新特性(5):更新的report_qor_suggestions
38
Xilinx的高质量时钟输出ODDR原语【随路时钟】【全局时钟网络】【ZC706输出时钟】【ZYNQ】
39
FPGA中BEL Site Tile FSR SLR分别指什么?
40
跟I/O相关的几个命令
41
Vivado Non-Project模式
42
FPGA中降低时钟skew的几种方法
43
FPGA时序优化之Reduce MUXF Mapping
44
什么是Forwarded Clock?
45
几个常见问题
46
如何让同一层次的模块在布局时更紧凑一些
47
什么情况下要用OOC综合方式
48
Vivado 2019.1新特性(2):report_ram_utilization
49
URAM和BRAM有什么区别
50
write_first/read_first/no_change什么区别
清单首页FPGA文章详情

如何快速查找目标cell

在用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

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

下一篇
举报
领券