在 Verilog 中为不同情况命名的最佳方式是什么?
What is the best way to give name to different cases in Verilog?
我想知道是否有人可以告诉我在 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
logic
类型的 enum
可以帮助您。例如状态机的IDLE,BUSY等状态变量,只能定义所有的状态,用状态名显示,即enum
s.
枚举可以定义如下:
enum logic {Load,Store,Check,Reset} a;
您可以显式为枚举赋值,如下所示:
enum logic {Load='0,Store='1,Check='x,Reset='z} a;
此外,您还有 内置方法,例如 first
、last
、name
等,可以对 [=13] 执行操作=]s.
这是我要解释的确切代码:
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 link。
如果不想使用枚举,那么 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 中使用局部参数和参数也是一种很好的做法。
我想知道是否有人可以告诉我在 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
logic
类型的 enum
可以帮助您。例如状态机的IDLE,BUSY等状态变量,只能定义所有的状态,用状态名显示,即enum
s.
枚举可以定义如下:
enum logic {Load,Store,Check,Reset} a;
您可以显式为枚举赋值,如下所示:
enum logic {Load='0,Store='1,Check='x,Reset='z} a;
此外,您还有 内置方法,例如 first
、last
、name
等,可以对 [=13] 执行操作=]s.
这是我要解释的确切代码:
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 link。
如果不想使用枚举,那么 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 中使用局部参数和参数也是一种很好的做法。