我使用参数关键字来定义状态,即RESET = 5'b00000。如果我想使用$ display打印输出状态名而不是二进制表示,或者在我的模拟wave查看器中显示状态名称,我该怎么做?尝试将其打印为字符串(如您所料)是不行的,所以我想知道是否可以这样做。
答案 0 :(得分:3)
我不知道如何自动$display
parameter
的名称。但是,如果您不介意复制代码,可以创建task
(或function
)来完成目标:
task show_name_state;
case (state)
5'b00000: $display("RESET");
5'b00001: $display("WAIT");
endcase
endtask
$display(state); show_name_state();
我知道至少有一个(昂贵的)Verilog调试器,它能够识别参数并在波形查看器中自动显示它们的名称:Verdi(以前的Debussy)nWave工具可以做到这一点。
答案 1 :(得分:2)
如果您的目标只是在模拟过程中显示状态名称,我通常会执行类似
的操作`ifdef SIMULATION
reg [127:0] __state__;
case (state)
STATE_1 : __state__ = "STATE_1";
STATE_2 : __state__ = "STATE_2";
default : __state__ = "error";
endcase
`endif
其中state是具有相关参数的状态寄存器。
答案 2 :(得分:1)
可以有多个具有相同值的参数,因此通常不能将数值从具有该值的参数名称转换为参数的名称。参数类似于C #define
s;虽然您可以使用它们来定义一组状态,但变量与用于表示可能状态的参数列表之间没有正式关联。因为没有更好的选择它曾经以这种方式(误)使用参数是常见的,但是SystemVerilog引入了enum
类型,它没有参数方法的问题。您没有提到您正在使用的工具,但假设您的工具支持SystemVerilog枚举类型,那么这将是状态值的更好选择。