资源利用率报告分析
BRAM
通过report_utilization
命令可查看设计的资源利用率报告,在资源利用率报告中,有时BRAM的Utilization为小数,这是因为BRAM的实际利用率是以容量为36Kb的BRAM位计算单位的,而1个容量为36Kb的BRAM是由2个相对独立容量为18Kb的BRAM组成的;因此一个容量为36Kb的BRAM可以配置为4种模式:2个BRAM(18Kb),1个BRAM(18Kb)+1个FIFO(18Kb),1个BRAM(36Kb),1个FIFO(36Kb);
另外资源利用率是通过Tcl命令生成的,以BRAM为例进行说明,BRAM的四种配置方式对应的REF_NAME分别为RAMB36E2、RAMB18E2、FIFO36E2、FIFO18E2,可通过如下命令找到相应的资源用量
set ram36_num [llength [get_cells -hier -fliter "REF_NAME == RAMB36E2"]]
set ram18_num [llength [get_cells -hier -fliter "REF_NAME == RAMB18E2"]]
set fifo36_num [llength [get_cells -hier -fliter "REF_NAME == FIFO36E2"]]
set fifo18_num [llength [get_cells -hier -fliter "REF_NAME == FIFO18E2"]]
整个设计的BRAM个数可以通过如下命令获取
expr $ram36_num + $fifo36_num + ($ram18_num + $fifo18_num) / 2.0
这条tcl命令中出现了2.0,说明出现了小数,这里的2.0不能写成2,两个命令不一样;
LUT和LUTRAM
在通过report_utilization
命令查看资源利用率报告时,会出现一个表格,在这个表格中二者会有LUT和LUTRAM,LUTRAM是指将LUT用作分布式RAM/ROM,换句话说SLICEM中的LUT被用作了存储单元;
资源利用率报告中的LUT是指设计中消耗的所有LUT,包括用作逻辑函数发生器的LUT(SLICEL),也包括用作存储单元的LUT(SLICEM);
LUT个数
资源利用率报告中的LUTRAM是指设计中消耗的SLICEM中的LUT;
但是用Tcl命令查看的时候发现LUT数目和report_utilization
中显示的数据不一致
set total_used_luts [llength [get_bels -fliter {NAME = ~SLICE*LUT && IS_USED == 1}]]
puts $total_used_luts
可能的原因是上述命令并没有去除Combined LUT(合并的LUT),可通过命令去除,因为他把这个combined LUT统计了两次
report_utilization命令功能
report_utilization -name myutil
查看指定模块的资源利用率报告,这是需要用到-cells选项,后边跟的内容就是指定的模块,通过get_cells获取,可以是一个模块也可以是由多个模块构成的列表;
set mycells [get_cells xxx*]
report_utilization -cells $mycells -name xxxx
查看指定pblock的资源利用率报告需要用到-pblock命令,后面跟的就是指定的Pblock(通过get_pblocks获取),可以是一个Pblock,也可以是由多个Pblock构成的列表,可以将生成的资源利用率报告写入文件中
report_utilizaion -pblocks [get_pblocks] -file xxxxxx
查看每个SLR的资源利用率报告,这时需要用到-slr选项进行操作
report_utilization -slr -file xxxxxx
注意:-slr选项不能和-name选项同时使用