在 verilog 中使用枚举

Using enum in verilog

我正在用 Quartus verilog (.v) 编写一段代码,我正在尝试在我的模块中编写一个枚举类型:

module Controller(clk, IorD);

    enum {READ, DECODE} state;
    myState = READ;
    //...

但它给了我以下错误:Error (10170): Verilog HDL syntax error at Controller.v(3) near text "{"; expecting ";"

我做错了什么?我如何在 verilog 中使用枚举?

enum 是 SystemVerilog 的一项功能。您需要确保 Quartus 中的文件类型是 SystemVerilog(通常也使用 .sv 扩展名)

如果您只能在工具中使用 verilog,则可以使用参数代替枚举。 如果您可以切换到其他工具,请尝试 edaplayground(dot)com

示例代码如下:

localparam START =1;
localparam STOP  =2;

使用 localparam 而不是参数,因为您确实不希望在实例化期间更改这些值。

您将需要使用 typedef。

你的情况=>

模块控制器(clk,IorD);

typedef enum {READ, DECODE} state_e;

state_e myState;

//Now you can use myState ... 

enum 不是 IEEE Std 1364-2005 规范(最新的 Verilog 规范)的一部分。

您必须使用支持 enum 的 SystemVerilog 或在 Verilog 中进行变通:

parameter READ   = 'd 0;
parameter DECODE = 'd 1;

my_state = STATE_READ;

我建议将所有参数放在扩展名为 .vh(Verilog 头文件)的第二个文件中,并通过 `include 指令包含它们。例如:

`include "parameters.vh"

您还可以注意到我使用 my_state 除了 myState 因为在 Verilog 命名约定中建议使用小写字母和下划线 (_) 来分隔单词。