如何在cocotb的Makefile中修改模拟器输出格式?
修改Cocotb Makefile自动格式化模拟器输出
实现思路
通过定义通用模式规则,将所有目标的执行委托给官方Makefile.sim,同时把输出(包括错误信息)管道到sed完成格式转换,无需每次手动添加管道命令。
修改步骤
- 保留你原Makefile中所有变量定义(如
TOPLEVEL、SIM、COCOTB_HDL_TIMEUNIT等)。 - 替换原来的
include语句,改为先保存官方Makefile.sim的路径:# 替换原include语句,获取官方仿真Makefile路径 SIM_MAKEFILE := $(shell cocotb-config --makefiles)/Makefile.sim - 添加通用模式规则,处理所有目标的执行与输出格式化:
# 通用规则:匹配所有目标,委托给官方Makefile.sim并处理输出 %: @$(MAKE) -f $(SIM_MAKEFILE) $(MAKECMDGOALS) 2>&1 | sed -e 's/\([0-9]\+\)|\([0-9]\+\)):/:\1:\2):/g' - 设置默认目标(可选,确保无指定目标时执行
all):.DEFAULT_GOAL := all
完整示例Makefile
# 原有的变量定义保留 TOPLEVEL := my_dut SIM := verilator COCOTB_HDL_TIMEUNIT := 1ns COCOTB_HDL_TIMEPRECISION := 1ps # ...其他自定义变量 # 获取官方Cocotb仿真Makefile路径 SIM_MAKEFILE := $(shell cocotb-config --makefiles)/Makefile.sim # 通用规则:处理所有目标的执行与输出格式化 %: @$(MAKE) -f $(SIM_MAKEFILE) $(MAKECMDGOALS) 2>&1 | sed -e 's/\([0-9]\+\)|\([0-9]\+\)):/:\1:\2):/g' # 默认执行all目标 .DEFAULT_GOAL := all
关键说明
@符号用于隐藏Make本身的命令行打印,让输出更简洁。2>&1将stderr重定向到stdout,确保模拟器的错误信息也能被sed格式化。$(MAKECMDGOALS)会传递命令行指定的所有目标和变量(如MODULE=x TESTCASE=y)给下层的Makefile.sim,完全保留原有的Cocotb命令行参数支持。- 若需添加自定义规则,只需将其放在通用模式规则之前即可,Make会优先匹配具体规则而非模式规则。
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

