always@(posedge clock)
begin
if (reset == 1'b1)
state <= IDLE;
else
state <= next_state;
end
//----------Output Logic-----------------------------
always @ (posedge clock)
begin
if (reset == 1'b1)
begin
gnt_0 <= #1 1'b0;
gnt_1 <= #1 1'b0;
end
else
begin
case(state)
IDLE :
begin
gnt_0 <= #1 1'b0;
gnt_1 <= #1 1'b0;
end
GNT0 :
begin
gnt_0 <= #1 1'b1;
gnt_1 <= #1 1'b0;
end
GNT1 :
begin
gnt_0 <= #1 1'b0;
gnt_1 <= #1 1'b1;
end
default :
begin
gnt_0 <= #1 1'b0;
gnt_1 <= #1 1'b0;
end
endcase
end
end // End Of Block OUTPUT_
endmodule 状态机通常要写成3段式,从而避免出现过大的组合逻辑。
上面说的都是可以通过流水的方式切割组合逻辑的情况,但是有些情况下我们是很难去切割组合逻辑的,在这些情况下我们又该怎么做呢?
状态机就是这么一个例子,我们不能通过往状态译码组合逻辑中加入流水。如果我们的设计中有一个几十个状态的状态机,它的状态译码逻辑将非常