signal pop_page_data_word : std_logic_vector (31 downto 0);
signal pop_page_data_ready : std_logic;
-- signal pop_page_rewind : std_logic;
-
+signal wait_counter : unsigned(15 downto 0);
-- signals for the PARSE_PAGE process
signal parse_trigger : std_logic;
type parse_state_t is (
- IDLE,
+ WAIT_FOR_COMMAND,
+ START,
READ_HEADER_PAGE,
WAIT4PAGE,
WAIT4RAM,
SEND_SC_DATA,
WAIT4_SC_ACK,
SUCCESS,FAIL);
-signal parse_state : parse_state_t := IDLE;
-signal next_parse_state : parse_state_t := IDLE;
+signal parse_state : parse_state_t := WAIT_FOR_COMMAND;
+signal next_parse_state : parse_state_t := WAIT_FOR_COMMAND;
signal parse_counter : integer range 0 to 255;
signal parse_feedback : std_logic_vector(31 downto 0) := (others=>'0');
case parse_state is
- when IDLE =>
+ when WAIT_FOR_COMMAND =>
take_spi <= '0';
if parse_trigger = '1' then
- parse_state <= READ_HEADER_PAGE;
- take_spi <= '1';
- sc_write_errors <= (others => '0');
+ parse_state <= START;
end if;
+ when START =>
+ parse_state <= READ_HEADER_PAGE;
+ take_spi <= '1';
+ sc_write_errors <= (others => '0');
+
when READ_HEADER_PAGE =>
page_number <= HEADER_PAGE_ADDR;
trigger_read_page <= '1';
end if;
when SUCCESS =>
- parse_state <= IDLE;
+ parse_state <= WAIT_FOR_COMMAND;
parse_feedback <= current_sc_addr & current_sc_value(15 downto 0);
when FAIL =>
- parse_state <= IDLE;
+ parse_state <= WAIT_FOR_COMMAND;
parse_feedback <= x"000000F0";
end case;
if RST = '1' then
- parse_state <= IDLE;
+ parse_state <= WAIT_FOR_COMMAND;
+ take_spi <= '0';
sc_write_errors <= (others => '0');
end if;
-
+
end process;
BUS_TX.data(31 downto 0) <= pop_page_data_word;
BUS_TX.ack <= '1';
end if;
+
+
+ if wait_counter(wait_counter'left) = '0' and not (wait_counter = 0) then
+ wait_counter <= wait_counter + 1;
+ elsif wait_counter(wait_counter'left) = '1' then
+ wait_counter <= (others => '0');
+ parse_trigger <= '1';
+ end if;
+
if RST = '1' then
transmission_counter <= (others => '0');
+ wait_counter <= (0 => '1', others => '0');
end if;
+
+
if(spi_ready = '1') then
transmission_counter <= std_logic_vector(unsigned(transmission_counter) +1);