added next_state concurrent assignment

This commit is contained in:
Erik Örtenberg 2025-02-25 14:26:11 +01:00
parent 12897f0ae2
commit 147d9e4d7b

View File

@ -72,6 +72,31 @@ begin
READ_RESPONSE when "01100",
NO_OP when others;
--- State Transition Diagram ---
--
-- +-----+
-- \|/ |
-- RESET --+
-- |
-- |
-- IDLE<-------------------+
-- / \ |
-- / \ |
-- / \ |
-- \|/ \|/ |
-- TX_HEADER RX_HEADER |
-- | | |
-- | | ----+ |
-- \|/ \|/ \|/ | |
-- TX_BODY RX_RESPONSE---+ |
-- | | |
-- | +--+ | |
-- \|/\|/ | \|/ |
-- TX_ACK--+ RX_BODY |
-- | | |
-- | | |
-- +-----------+--------------+
--
case curr_state is
when IDLE =>
if curr_command = WRITE or curr_command = WRITE_ADD then
@ -82,12 +107,37 @@ begin
next_state <= IDLE;
end if;
when RESET =>
next_state <= IDLE;
when TX_HEADER =>
-- The header only takes one word (cycle) to transmit.
-- Continue to body directly afterwards.
next_state <= TX_BODY;
when TX_BODY =>
-- Here we want to stay in TX_BODY for the duration of a packet.
-- Right now, we transfer one single word at a time for simplicity
next_state <= TX_ACK;
when TX_ACK =>
-- Wait for write acknowledgement.
if curr_respoonse = WRITE_ACK then
next_state <= IDLE;
else
next_state <= TX_ACK;
end if;
when RX_HEADER =>
-- The header only takes one word (cycle) to transmit.
-- Continue to awaiting response directly afterwards.
next_state <= RX_RESPONSE;
when RX_RESPONSE =>
-- Wait for read response.
if curr_respoonse = READ_RESPONSE then
next_state <= RX_BODY;
else
next_state <= RX_RESPONSE;
end if;
when RX_BODY =>
-- Here we want to stay in RX_BODY for the duration of a packet.
-- Right now, we receive only one single word at a time for simplicity
next_state <= IDLE;
end case;
end process comb_proc;