Итак, я пытаюсь реализовать свой первый FSM, и я очень запутался.Работа с множеством выходов в конечных автоматах verilog
Коды немного долго, поэтому позвольте мне подвести итог: Я начинаю с объявляя входов и выходов Затем государственных декларации (у меня есть пять плюс три заполнителей) Тогда Текущее состояние назначения, который является последовательным
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
У меня есть около восьми выходов, основываясь только на четыре и государстве, основанных на состоянии и вводе. Как их назначить?
Вы похожи, что находитесь на правильном пути. Почему бы не 'output foo; ... присваивать foo = (Current_State == AllRed); '? – toolic
Вы также можете включить их в свой оператор дела выше; у вас есть логика для 'Current_State == AllRed' через случай для' AllRed' – Unn