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

如何在ModelSim中显示状态机状态名而非数值?

在ModelSim中让Verilog状态机波形显示自定义状态名的方法

下面是针对你的问题的几种可行解决方案,按推荐优先级排序:

方法一:用Verilog枚举类型替代Parameter定义(最规范,一劳永逸)

把你当前的parameter状态定义替换成Verilog枚举类型,ModelSim会自动识别并在波形中显示状态名:

// 替换原parameter定义
typedef enum logic [3:0] {
    T0, T1, T2, T3_reg_io, RB0_HLT, T3_mri, D0T4,
    D0T5, D1T4, D1T5, D2T4, D2T5, D3T4
} state_t;

// 用枚举类型定义状态机寄存器
reg state_t current_state;
reg state_t next_state;

重新编译代码后,波形窗口中对应的状态信号会直接显示T0、T1等名称,无需额外设置。

方法二:手动给信号添加自定义基数映射

如果不想修改代码,可直接在波形窗口中手动关联数值与状态名:

  • 在波形窗口找到目标状态信号,右键点击选择 Radix -> Custom
  • 在弹出的「Custom Radix」窗口中点击 New,创建一个新映射
  • 在表格的Value列输入状态对应的数值(0、1、2...),Name列输入对应的状态名(T0、T1...),完成所有状态的映射
  • 给这个映射命名(比如StateMachine_Map)并保存,选中后点击OK,波形就会切换为显示状态名

方法三:用ModelSim命令行批量配置

适合需要重复设置或复杂模块场景,在ModelSim的Transcript窗口输入以下命令:

// 先定义状态映射规则
radix define StateMap {
    0 "T0"
    1 "T1"
    2 "T2"
    3 "T3_reg_io"
    4 "RB0_HLT"
    5 "T3_mri"
    6 "D0T4"
    7 "D0T5"
    8 "D1T4"
    9 "D1T5"
    10 "D2T4"
    11 "D2T5"
    12 "D3T4"
}

// 将映射应用到目标信号(替换为你的模块实际路径)
radix set /your_dut_instance/current_state StateMap

注意事项

  • 若坚持用parameter定义,需确保编译时没有启用符号信息剥离选项(比如-strip),否则ModelSim无法识别参数名称
  • 手动映射后,记得通过File -> Save Format保存波形配置,下次打开时无需重复设置

内容的提问来源于stack exchange,提问作者Yonatan Shkolsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 14:02:20