如何在Vivado TCL模式下仅重定向launch_simulation的仿真输出?
在Vivado TCL模式下单独捕获Verilog测试平台的$display/$monitor输出
有几种可行的方法可以实现只把测试平台的$display/$monitor输出写入文件,而分离Vivado本身的编译、细化流程日志:
方法1:通过launch_simulation传递XSim参数直接捕获仿真输出
Vivado的launch_simulation命令支持通过-runargs选项将参数传递给底层的XSim仿真器,XSim提供了专门参数来单独捕获仿真输出:
launch_simulation -runargs {-log testbench_output.log}
这里的-log参数会让XSim把测试平台中$display、$monitor以及其他仿真相关的标准输出写入指定的testbench_output.log文件,而Vivado自身的编译、细化等流程日志仍会输出到控制台或Vivado的主日志文件中,不会混入到仿真输出文件里。
如果需要同时保留控制台输出和文件记录,可以加上-stdout参数:
launch_simulation -runargs {-log testbench_output.log -stdout console}
方法2:修改Verilog测试平台直接定向输出
如果允许修改测试平台代码,可以在Verilog中直接将$display的输出定向到文件,完全绕过Vivado的日志干扰:
integer log_file; initial begin log_file = $fopen("testbench_output.log", "w"); // 用$fdisplay替代$display,输出到文件 $fdisplay(log_file, "Simulation start at %0t", $time); // 若需要同时输出到控制台和文件,可同时调用$display和$fdisplay $display("Simulation start at %0t", $time); end // 仿真结束时关闭文件 final begin $fclose(log_file); end
这种方法的优势是完全不受Vivado日志的影响,输出内容完全由测试平台控制。
方法3:利用Vivado TCL日志过滤(精准度稍低)
可以通过调整Vivado的日志级别,过滤掉大部分流程日志,只保留仿真相关输出:
# 设置日志级别为WARNING及以上,过滤掉INFO级别的流程日志 set_msg_config -severity INFO -suppress # 运行仿真 launch_simulation # 恢复默认日志级别(可选) set_msg_config -severity INFO -unsuppress
不过这种方法可能会误过滤掉一些有用的仿真相关INFO日志,仅作为备选方案。
内容的提问来源于stack exchange,提问作者WARhead
相关产品推荐
相关产品推荐

