From 60164647a49b22b7e1e6fd10359efc33d0d56fe9 Mon Sep 17 00:00:00 2001 From: Jan Michel Date: Mon, 23 Jan 2017 17:56:16 +0100 Subject: [PATCH] Update load settings from flash - better timing --- code/load_settings.vhd | 41 +++++++++++++++++++++++++++++------------ code/trb3sc_tools.vhd | 2 +- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/code/load_settings.vhd b/code/load_settings.vhd index a89f4f4..65e5348 100644 --- a/code/load_settings.vhd +++ b/code/load_settings.vhd @@ -104,14 +104,15 @@ signal pop_page_state : pop_page_state_t := IDLE; 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, @@ -128,8 +129,8 @@ type parse_state_t is ( 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'); @@ -401,14 +402,17 @@ PARSE : process begin 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'; @@ -556,20 +560,21 @@ PARSE : process begin 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; @@ -650,10 +655,22 @@ sync : process begin 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); diff --git a/code/trb3sc_tools.vhd b/code/trb3sc_tools.vhd index c1cc614..50b10bd 100644 --- a/code/trb3sc_tools.vhd +++ b/code/trb3sc_tools.vhd @@ -441,4 +441,4 @@ HEADER_IO(10) <= debug_tx; DEBUG_OUT <= debug_status; -end architecture; \ No newline at end of file +end architecture; -- 2.43.0