使用Verilog Parameter关键字

时间:2010-02-20 07:41:21

标签: parameters verilog

我使用参数关键字来定义状态,即RESET = 5'b00000。如果我想使用$ display打印输出状态名而不是二进制表示,或者在我的模拟wave查看器中显示状态名称,我该怎么做?尝试将其打印为字符串(如您所料)是不行的,所以我想知道是否可以这样做。

3 个答案:

答案 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枚举类型,那么这将是状态值的更好选择。