end component;
type fsm_state_t is (IDLE, HEADER_RECV, REG_READ, REG_WRITE, ONE_READ, ONE_WRITE, SEND_REPLY_SHORT_TRANSFER, MEM_START_WRITE,
- MEM_READ, MEM_WRITE, DAT_START_READ, DAT_READ, SEND_REPLY_DATA_finish, ADDRESS_ACK, ADDRESS_RECV,MEM_START_READ);
+ MEM_READ, MEM_WRITE, DAT_START_READ, DAT_READ, SEND_REPLY_DATA_finish, ADDRESS_ACK, ADDRESS_RECV,
+ MEM_START_READ, DAT_START_READ_AFTER_WRITE);
signal current_state, next_state : fsm_state_t;
-- signal HDR_F1, HDR_F2, HDR_F3, HDR_F0 : std_logic_vector(c_DATA_WIDTH-1 downto 0);
-- signal next_HDR_F1, next_HDR_F2, next_HDR_F3, next_HDR_F0 : std_logic_vector(c_DATA_WIDTH-1 downto 0);
if or_all(API_DATA_IN(c_REGIO_ADDRESS_WIDTH-1 downto 8)) = '1' then --data port address
if USE_DAT_PORT = c_YES then
next_DAT_READ_ENABLE_OUT <= '1';
- next_state <= DAT_READ;
+ next_state <= DAT_START_READ;
else
next_state <= SEND_REPLY_SHORT_TRANSFER;
next_dont_understand <= '1';
next_state <= REG_READ;
else
next_DAT_WRITE_ENABLE_OUT <= '1';
- next_state <= DAT_START_READ;
+ next_state <= DAT_START_READ_AFTER_WRITE;
end if;
when others => null;
end case;
end if;
end if;
+ when DAT_START_READ_AFTER_WRITE =>
+ next_state <= DAT_START_READ;
+ next_DAT_READ_ENABLE_OUT <= '1';
+
when DAT_START_READ =>
if DAT_DATAREADY_IN = '1' then
next_state <= DAT_READ;
end if;
when DAT_READ =>
+ next_API_SEND_OUT <= '1';
next_API_DATAREADY_OUT <= '1';
case next_packet_counter is
when c_F0 => next_API_DATA_OUT <= address;