You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在cocotb的Makefile中修改模拟器输出格式?

修改Cocotb Makefile自动格式化模拟器输出

实现思路

通过定义通用模式规则,将所有目标的执行委托给官方Makefile.sim,同时把输出(包括错误信息)管道到sed完成格式转换,无需每次手动添加管道命令。

修改步骤

  1. 保留你原Makefile中所有变量定义(如TOPLEVEL、SIM、COCOTB_HDL_TIMEUNIT等)。
  2. 替换原来的include语句,改为先保存官方Makefile.sim的路径:
    # 替换原include语句,获取官方仿真Makefile路径
    SIM_MAKEFILE := $(shell cocotb-config --makefiles)/Makefile.sim
    
  3. 添加通用模式规则,处理所有目标的执行与输出格式化:
    # 通用规则:匹配所有目标,委托给官方Makefile.sim并处理输出
    %:
        @$(MAKE) -f $(SIM_MAKEFILE) $(MAKECMDGOALS) 2>&1 | sed -e 's/\([0-9]\+\)|\([0-9]\+\)):/:\1:\2):/g'
    
  4. 设置默认目标(可选,确保无指定目标时执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 18:43:12