【发布时间】:2016-08-27 21:51:05
【问题描述】:
所以我正在尝试实现我的第一个 FSM,但我感到非常困惑。
代码有点长,让我总结一下: 我从声明输入和输出开始 然后状态声明(我有五个加三个占位符) 然后是当前状态赋值,是顺序的
always @(posedge clk)
begin
if (rst == 1'b1)
Current_State <= MainGreen;
else
Current_State <= Next_state;
end
然后……我迷路了。我最初只有一个分配 next_state 和输出的大型时序电路,但这很混乱/可能有很多错误。
我现在拥有的只是 next_state 逻辑,但与输出无关:
always @*
begin
Next_state = Current_State;
case (Current_State)
MainGreen:
begin
if (count && expired)
begin
Next_state = MainYel;
end
end
MainYel:
begin
if (WR && expired)
Next_state = AllRed;
else if (expired)
Next_state = SideGreen;
end
AllRed:
begin
if (expired)
Next_state = SideGreen;
end
SideGreen:
begin
if(sensor && expired)
Next_state = SideYel;
end
SideYel:
begin
if(expired)
Next_state = MainGreen;
end
endcase
end
我有大约 8 个仅基于状态的输出和 4 个基于状态和输入的输出。我应该如何分配它们?
【问题讨论】:
-
您也可以将它们包含在上面的案例陈述中;您已经通过
AllRed的案例了解Current_State == AllRed的逻辑