【问题标题】:What is the best way to give name to different cases in Verilog?在 Verilog 中为不同案例命名的最佳方式是什么?
【发布时间】:2015-12-12 03:20:43
【问题描述】:

我想知道是否有人可以告诉我在 Verilog 中为不同状态命名的最佳方式是什么?例如代替下面的情况

case (a)
  1'b0 : statement1;
  1'b1 : statement2;
  1'bx : statement3;
  1'bz : statement4;
endcase

最好有一段这种格式的代码

case (a)
  Load : statement1;
  Store : statement2;
  Check : statement3;
  Reset : statement4;
endcase

【问题讨论】:

    标签: verilog


    【解决方案1】:

    如果不想使用枚举,那么 localparams 也是为您的状态使用助记符的好方法。

    localparam LOAD  = 1'b0;
    localparam STORE = 1'b1;
    localparam CHECK = 1'bx;
    localparam RESET = 1'bz;
    
    always @* begin
      case (a)
        LOAD : statement1;
        STORE : statement2;
        CHECK : statement3;
        RESET : statement4;
      endcase
    end
    

    大多数语言都使用大写来表示常量,在 Verilog 中使用 localparams 和参数来做这也是一种很好的做法。

    【讨论】:

      【解决方案2】:

      logic 类型的 enum 可以帮助您。例如状态机的IDLE、BUSY等状态变量只能定义所有的状态,并可以用状态名来显示,即enums。

      枚举可以定义如下:

      enum logic {Load,Store,Check,Reset} a;
      

      您可以显式为枚举赋值,如下所示:

      enum logic {Load='0,Store='1,Check='x,Reset='z} a;
      

      此外,您还有内置方法,例如firstlastname 等,可以对enums 执行操作。

      这是我要解释的确切代码:

      module top();
        enum logic {Load='0,Store='1,Check='x,Reset='z} a;
        initial
          begin
            case (a)
              Load : $display("1");
              Store :  $display("2");
              Check :  $display("3");
              Reset :  $display("4");
            endcase
          end 
      endmodule
      

      更多信息,请参考Enumerations链接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-19
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        相关资源
        最近更新 更多