无论是综合(Synthesis)还是实现(Implementation),Vivado在运行过程中都会生成日志文件。文件名为runme.log。这个文件位于相应的Design Runs目录下。例如,综合的Design Runs名为synth_1,那么runme.log就在这个目录下。该文件记录了Vivado在运行过程中的一些基本信息,对于设计分析很有帮助,却往往被很多工程师所忽略。这里我们就来看看runme.log里都有哪些信息。
以综合阶段的runme.log为例。打开之后文件开头部分信息如下图所示。第7行可以看到Vivado版本信息。第13行关键字Command表明Vivado执行的命令,这里执行的命令是synth_design。根据该命令的参数可知顶层文件名为oc_top,参数-part给出了该工程使用的具体芯片型号信息。Command是一个很重要的关键字,Vivado运行的所有命令在log文件中呈现时都是以Command开头。
接下来会看到很多以INFO开头的行,这些内容通常情况下我们可以忽略,但也可以从中捕获出一些信息,例如下图第19行,显示了综合阶段使用的线程数,根据这个参数我们就可以判定所设定的线程数是否生效。
相比于INFO,以WARNING开头的行对应的内容更为重要,也值得我们进一步关注。如下图所示,WARNING信息显示相应的管脚没有负载,处于断开的状态,这就要回到RTL代码里查看,是设计者有意为之还是设计失误。
在约束文件处理环节,可以看到Vivado编译约束文件的顺序,例如第190行分析的是IP生成的约束文件,第193行和第195行则分析的是用户约束文件。如果约束文件中有语法错误或者Tcl命令没有期望的返回值,也会在这个部分显示出来,这对于我们判断约束是否生效也是有帮助的。
如果约束中使用了set_property命令,而相应的属性在综合阶段会生效,那么Vivado也会显示对这些属性的处理信息,如下图所示。第220行显示设计使用了属性IO_BUFFER_TYPE,第221行显示设计使用了属性CLOCK_BUFFER_TYPE,第222行显示设计使用了属性RETIMING_FORWARD,第223行显示设计使用了属性KEEP_HIERARCHY。同时也会显示这些属性作用的对象。
如果设计中使用了RTL代码描述的存储单元,综合阶段也会显示该存储单元的映射结果。如下图所示,显示RAM使用URAM实现,同时默认的URAM级联高度为8。
而这些RAM也可以通过如下命令在ElaboratedDesign中查找到。
同时,Vivado对于URAM的具体映射信息也会给出映射报告,如下图所示,显示了URAM的深度/宽度、输出是否有流水寄存器以及被吸收的流水寄存器的个数。
如果综合阶段使用了属性RETIMING_BACKWARD或RETIMING_FORWARD,也可以看到相应的信息,如下图所示。
阅读log文件时要关注两点:WARNING和CRITICAL WARNING。如下图所示的CRITICAL WARNING,可以帮助我们判断约束是否生效。
这些WARNING或CRITICAL WARNING也可以在Vivado Message窗口中看到,如下图所示。
没有回复内容