[an error occurred while processing this directive]
|
Вот в упрощенной форме.
Вариант 1.
reg [1:0] state;
reg [1:0] next_state;
localparam STATE_IDLE = 0;
localparam STATE_LOCK = 1;
localparam STATE_RUN = 2;
localparam STATE_LEAVE = 3;
always @(*)
begin
case(state)
STATE_IDLE: if(...) next_state = STATE_RUN;
STATE_LOCK: if(...) next_state = STATE_LEAVE;
STATE_RUN: if(...) next_state = STATE_LOCK;
STATE_LEAVE: if(...) next_state = STATE_IDLE;
endalways @(posedge clk, posedge reset)
begin
if(reset) state <= STATE_IDLE;
else state <= next_state;
end
Вариант 2.
reg [1:0] state;
localparam STATE_IDLE = 0;
localparam STATE_LOCK = 1;
localparam STATE_RUN = 2;
localparam STATE_LEAVE = 3;always @(posedge clk, posedge reset)
begin
if(reset) state <= STATE_IDLE;
else begin
case(state)
STATE_IDLE: if(...) state <= STATE_RUN;
STATE_LOCK: if(...) state <= STATE_LEAVE;
STATE_RUN: if(...) state <= STATE_LOCK;
STATE_LEAVE: if(...) state <= STATE_IDLE;
end
end
E-mail: info@telesys.ru