在 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 命名约定中建议使用小写字母和下划线 (_
) 来分隔单词。
我正在用 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 命名约定中建议使用小写字母和下划线 (_
) 来分隔单词。