一. 方法
1. 直接使用整数码描述
...
reg [1:0] moore_state;
always @ (moore_state)
begin
case (moore_state)
0: ...;
1: ...;
2: ...;
...
endcase
end
...
2. 利用parameter声明
...
input a;
reg [1:0] mealy_state;
parameter S0 = 0;
parameter S1 = 1;
parameter S2 = 2;
...
always @ (mealy_state or a)
begin
case (mealy_state)
S0: ...;
S1: ...;
...
endcase
end
...
3. 使用`define定义
...
`define S0 2'b00;
`define S1 2'b01;
...
module MealyFSM(clk, rst_n, a, y);
...
二. 注意
1. 直接采用整数码描述状态, 可读性差, 不利于修改维护;
2. 使用parameter声明状态, 可读性好, 利于修改维护;
3. 使用`define定义状态, 虽然能实现同样的功能, 当所定义的是全局变量, 作用域从`define开始, 直至所有代码结束, 这样可能为设计带来麻烦和错误; parameter的作用域则在模块内部, 因此不同的模块可以安全地使用同名的状态名.
用户461316 2008-8-25 14:05