]> jspc29.x-matter.uni-frankfurt.de Git - trb3sc.git/commitdiff
Update load settings from flash - better timing
authorJan Michel <j.michel@gsi.de>
Mon, 23 Jan 2017 16:56:16 +0000 (17:56 +0100)
committerJan Michel <j.michel@gsi.de>
Mon, 23 Jan 2017 16:56:16 +0000 (17:56 +0100)
code/load_settings.vhd
code/trb3sc_tools.vhd

index a89f4f4330947539ad3236d5f64b6d51658bea9c..65e53488aa5443e67bbf9c767a19976fbd267fe1 100644 (file)
@@ -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);
index c1cc61448ac155d5fdae13aa4ca13b08d1d41953..50b10bd762d8f72897e5adbe4501ed721d544bb8 100644 (file)
@@ -441,4 +441,4 @@ HEADER_IO(10) <= debug_tx;
 DEBUG_OUT <= debug_status;
 
       
-end architecture;
\ No newline at end of file
+end architecture;