首页 > 技术文章 > Modelsim——显示状态机名称的方法

xianyufpga 2019-03-03 11:24 原文

  方法在本人博客《状态机的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

 

  当然还有其他的方法,这两种是最常见最快捷的,掌握这两个足够应付日常设计了。

推荐阅读