在使用Verilog编写状态机等逻辑的时候,状态机的各个状态通常以参数表示,但当使用ModelSim仿真的时候,状态机变量在wave窗口中以二进制编码的形式显示,例如:4’h0、4’h1等。这种显示形式不是很直观,不方便直观了解状态机状态之间的转换关系,但我们可以使用ModelSim提供的命令将状态机变量以“文本”形式的参数名显示,从而有利于观察与调试。通常情况下状态机变量显示如下:

修改后状态机显示的波形如下:

步骤:
1.为被测对象编写testbench,创建modelsim仿真项目,开始仿真,将所有信号添加到wave窗口;
2.创建virtual type:在modelsim transcript命令窗口输入命令
virtual type {{4'd0 IDLE} {4'd1 START} {4'd2 W_COM} {4'd3 W_COM_ACK} {4'd4 W_ADDR} {4'd5 W_ADDR_ACK} {4'd6 A_START} {4'd7 R_COM} {4'd8 R_COM_ACK} {4'd9 R_DATA} {4'd10 R_DATA_ACK} {4'd11 STOP}} FSM_TYPE
注意:一整条命令输入,不能有换行,每一项之间都有空格,输入完成后回车,即创建了FSM_TYPE类型的枚举类数据结构;
3.将被测模块中的状态机变量进行类型转换:在modelsim transcript窗口输入命令
virtual function {(FSM_TYPE)test_iic/iic_slave_ins/current_state} my_IIC_State
此命令为将test_iic/iic_slave_ins下的状态机信号current_state强制转换为FSM_TYPE类型。注意:需要指明状态机信号的路径。
4.修改wave.do文件,按照wave.do的信号格式,将信号my_IIC_State加入到波形窗口中。
5.重新载入wave.do,运行,即可看到修改后的波形。