Modelsim——显示状态机名称的方法
方法在本人博客《状态机的Verilog写法》已经写明,为了方便查看,特意拎出来。
方法1: 转ASCII码
设计文件含有状态机时,增加一段"参数转ASCII码"的代码,即可在 Modelsim 中显示出状态机名称,如下所示:
reg [15:0] state_name; //1个字符8位宽 always @(*) begin case(state_c) S0: state_name = "S0"; S1: state_name = "S1"; S2: state_name = "S2"; S3: state_name = "S3"; default:state_name = "S0"; endcase end
在 Modelsim 中点击信号 state_name,右键选择用 ASSIC 码查看就可以看到该状态机的名称。编写时注意一下位宽,1个ASSIC码字符宽度是8位,例如“S0”有2个字符则需要16位宽。如果不想动设计文件,也可以直接在 testbench 中引出该模块的 state_c 来增加这段代码。
方法2: do文件(tcl文件也是一样的)
首先你得学会怎么使用Modelsim的自动化脚本仿真,详情见本人博客《Modelsim——do脚本、bat命令》,那么我们只要在do文件中加入这段代码即可:
# 结构体设置 virtual type { {4'b0001 S0} {4'b0010 S1} {4'b0100 S2} {4'b1000 S3} } fsm_type; # 结构体和信号名关联,命名为state_name virtual function {(fsm_type)/fsm_tb/u_fsm/state} state_name
当然还有其他的方法,这两种是最常见最快捷的,掌握这两个足够应付日常设计了。