]> jspc29.x-matter.uni-frankfurt.de Git - trbnet.git/commitdiff
bug with write_mem...
authorMichael Boehmer <mboehmer@ph.tum.de>
Sun, 5 Jun 2022 13:22:41 +0000 (15:22 +0200)
committerMichael Boehmer <mboehmer@ph.tum.de>
Sun, 5 Jun 2022 13:22:41 +0000 (15:22 +0200)
media_interfaces/med_ecp5_sfp_sync_RS.vhd
special/spi_databus_memory.vhd
special/spi_flash_and_fpga_reload_record.vhd
special/spi_master.vhd
special/spi_slim.vhd
trb_net16_endpoint_hades_full_handler_record.vhd

index ea21734f1e45113200e60067fb9fc1cab25fa49a..8054c2359ac41afd40da3157358b2bf4163af195 100644 (file)
@@ -344,7 +344,7 @@ gen_SERDES: if LINK_SPEED = 200 generate
       serdes_sync_0_200M_rxdata            => rx_data,
       serdes_sync_0_200M_rx_k              => rx_k,
       serdes_sync_0_200M_rx_disp_err       => open,
-      serdes_sync_0_200M_rx_cv_err         => rx_error(0),
+      serdes_sync_0_200M_rx_cv_err         => rx_error,
       serdes_sync_0_200M_signal_detect_c   => '1', -- LSM enable
       serdes_sync_0_200M_rx_cdr_lol_s      => rx_cdr_lol,
       serdes_sync_0_200M_rx_los_low_s      => rx_los_low,
index 1caaae7a46f30966c6b82ef0858eef4460be99c7..d392bfd20586b4b7d5061a1906ee3bf8e625bffa 100644 (file)
@@ -33,7 +33,8 @@ architecture Behavioral of spi_databus_memory is
   attribute HGROUP : string;\r
   -- for whole architecture\r
   attribute HGROUP of Behavioral : architecture  is "SPI_group";\r
--- Signals\r
+  \r
+  -- Signals\r
   type STATES is (SLEEP,RD_RDY,WR_RDY,RD_ACK,WR_ACK,DONE);\r
   signal CURRENT_STATE, NEXT_STATE: STATES;\r
 \r
@@ -56,100 +57,99 @@ stat(63 downto 0)  <= (others => '0');
 ---------------------------------------------------------\r
 -- Statemachine                                        --\r
 ---------------------------------------------------------\r
-  STATE_MEM: process( clk_in)\r
-    begin\r
-      if( rising_edge(clk_in) ) then\r
-        if( reset_in = '1' ) then\r
-          CURRENT_STATE <= SLEEP;\r
-          BUS_ack       <= '0';\r
-          store_wr      <= '0';\r
-          store_rd      <= '0';\r
-        else\r
-          CURRENT_STATE <= NEXT_STATE;\r
-          BUS_ack       <= BUS_ack_x;\r
-          store_wr      <= store_wr_x;\r
-          store_rd      <= store_rd_x;\r
-        end if;\r
-      end if;\r
-    end process STATE_MEM;\r
+STATE_MEM: process( CLK_IN )\r
+begin\r
+  if( rising_edge(CLK_IN) ) then\r
+    if( RESET_IN = '1' ) then\r
+      CURRENT_STATE <= SLEEP;\r
+      bus_ack       <= '0';\r
+      store_wr      <= '0';\r
+      store_rd      <= '0';\r
+    else\r
+      CURRENT_STATE <= NEXT_STATE;\r
+      bus_ack       <= bus_ack_x;\r
+      store_wr      <= store_wr_x;\r
+      store_rd      <= store_rd_x;\r
+    end if;\r
+  end if;\r
+end process STATE_MEM;\r
 \r
 -- Transition matrix\r
-  TRANSFORM: process(CURRENT_STATE, BUS_read_in, BUS_write_in )\r
-    begin\r
+TRANSFORM: process(CURRENT_STATE, BUS_READ_IN, BUS_WRITE_IN )\r
+begin\r
+  NEXT_STATE <= SLEEP;\r
+  bus_ack_x  <= '0';\r
+  store_wr_x <= '0';\r
+  store_rd_x <= '0';\r
+  case CURRENT_STATE is\r
+    when SLEEP    =>\r
+      if   ( (BUS_READ_IN = '1') ) then\r
+        NEXT_STATE <= RD_RDY;\r
+        store_rd_x <= '1';\r
+      elsif( (BUS_WRITE_IN = '1') ) then\r
+        NEXT_STATE <= WR_RDY;\r
+        store_wr_x <= '1';\r
+      else\r
+        NEXT_STATE <= SLEEP;\r
+      end if;\r
+\r
+    when RD_RDY    =>\r
+      NEXT_STATE <= RD_ACK;\r
+\r
+    when WR_RDY    =>\r
+      NEXT_STATE <= WR_ACK;\r
+\r
+    when RD_ACK    =>\r
+      if( BUS_READ_IN = '0' ) then\r
+        NEXT_STATE <= DONE;\r
+        bus_ack_x  <= '1';\r
+      else\r
+        NEXT_STATE <= RD_ACK;\r
+        bus_ack_x  <= '1';\r
+      end if;\r
+\r
+    when WR_ACK    =>\r
+      if( BUS_WRITE_IN = '0' ) then\r
+        NEXT_STATE <= DONE;\r
+        bus_ack_x  <= '1';\r
+      else\r
+        NEXT_STATE <= WR_ACK;\r
+        bus_ack_x  <= '1';\r
+      end if;\r
+\r
+    when DONE    =>\r
+      NEXT_STATE <= SLEEP;\r
+\r
+    when others    =>\r
       NEXT_STATE <= SLEEP;\r
-      BUS_ack_x  <= '0';\r
-      store_wr_x <= '0';\r
-      store_rd_x <= '0';\r
-      case CURRENT_STATE is\r
-        when SLEEP    =>\r
-          if   ( (BUS_read_in = '1') ) then\r
-            NEXT_STATE <= RD_RDY;\r
-            store_rd_x <= '1';\r
-          elsif( (BUS_write_in = '1') ) then\r
-            NEXT_STATE <= WR_RDY;\r
-            store_wr_x <= '1';\r
-          else\r
-            NEXT_STATE <= SLEEP;\r
-          end if;\r
-\r
-        when RD_RDY    =>\r
-          NEXT_STATE <= RD_ACK;\r
-\r
-        when WR_RDY    =>\r
-          NEXT_STATE <= WR_ACK;\r
-\r
-        when RD_ACK    =>\r
-          if( BUS_read_in = '0' ) then\r
-            NEXT_STATE <= DONE;\r
-            BUS_ack_x  <= '1';\r
-          else\r
-            NEXT_STATE <= RD_ACK;\r
-            BUS_ack_x  <= '1';\r
-          end if;\r
-\r
-        when WR_ACK    =>\r
-          if( BUS_write_in = '0' ) then\r
-            NEXT_STATE <= DONE;\r
-            BUS_ack_x  <= '1';\r
-          else\r
-            NEXT_STATE <= WR_ACK;\r
-            BUS_ack_x  <= '1';\r
-          end if;\r
-\r
-        when DONE    =>\r
-          NEXT_STATE <= SLEEP;\r
-\r
-        when others    =>\r
-          NEXT_STATE <= SLEEP;\r
   end case;\r
 end process TRANSFORM;\r
 \r
-\r
 ---------------------------------------------------------\r
 -- data handling                                       --\r
 ---------------------------------------------------------\r
 \r
 THE_BUS_SPI_DPRAM: spi_dpram_32_to_8\r
-  port map(\r
-      DATAINA  => BUS_data_in,\r
-      ADDRESSA  => BUS_addr_in,\r
-      CLOCKA  => clk_in,\r
-      CLOCKENA  => '1',\r
-      WRA    => store_wr,\r
-      RESETA  => reset_in,\r
-      QA    => buf_BUS_data_out,\r
-      -- B side is state machine\r
-      DATAINB  => bram_rd_d_in,\r
-      ADDRESSB  => bram_addr_in,\r
-      CLOCKB  => clk_in,\r
-      CLOCKENB  => '1',\r
-      WRB    => bram_we_in,\r
-      RESETB  => reset_in,\r
-      QB    => bram_wr_d_out\r
-    );\r
+port map(\r
+  DATAINA   => BUS_DATA_IN,\r
+  ADDRESSA  => BUS_ADDR_IN,\r
+  CLOCKA    => CLK_IN,\r
+  CLOCKENA  => '1',\r
+  WRA       => store_wr,\r
+  RESETA    => RESET_IN,\r
+  QA        => buf_bus_data_out,\r
+  -- B side is state machine\r
+  DATAINB   => BRAM_RD_D_IN,\r
+  ADDRESSB  => BRAM_ADDR_IN,\r
+  CLOCKB    => CLK_IN,\r
+  CLOCKENB  => '1',\r
+  WRB       => BRAM_WE_IN,\r
+  RESETB    => RESET_IN,\r
+  QB        => BRAM_WR_D_OUT\r
+);\r
 \r
 -- output signals\r
-BUS_data_out <= buf_BUS_data_out;\r
-BUS_ack_out  <= BUS_ack;\r
+BUS_DATA_OUT <= buf_bus_data_out;\r
+BUS_ACK_OUT  <= bus_ack;\r
 \r
 end Behavioral;\r
index aaa37c8c1f3f93e2275b6f2fc2db0ca920e709a7..96c125030cbf4adfa7b4ab956dfdf0ad264a24ea 100644 (file)
@@ -22,7 +22,8 @@ entity spi_flash_and_fpga_reload_record is
     SPI_CS_OUT     : out std_logic;
     SPI_SCK_OUT    : out std_logic;
     SPI_SDO_OUT    : out std_logic;
-    SPI_SDI_IN     : in  std_logic
+    SPI_SDI_IN     : in  std_logic;
+    DEBUG_OUT      : out std_logic_vector(31 downto 0)
   );
 end entity;
 
@@ -48,8 +49,11 @@ architecture flash_reboot_arch of spi_flash_and_fpga_reload_record is
   signal spi_bram_rd_d           : std_logic_vector(7 downto 0);
   signal spi_bram_we             : std_logic;
 
-  signal dat_write_ack, dat_dataready : std_logic;       
-  
+  signal dat_write_ack           : std_logic;
+  signal dat_dataready           : std_logic;       
+
+  signal spi_debug               : std_logic_vector(31 downto 0);
+
 begin
 
 BUS_TX.ack <= dat_dataready or dat_write_ack;
@@ -128,9 +132,21 @@ THE_SPI_MASTER: spi_master
     BRAM_RD_D_OUT  => spi_bram_rd_d,
     BRAM_WE_OUT    => spi_bram_we,
     -- Status lines
-    STAT           => open
+    STAT           => spi_debug --open
   );
 
+  DEBUG_OUT(0)  <= spictrl_read_en;
+  DEBUG_OUT(1)  <= spictrl_write_en;
+  DEBUG_OUT(2)  <= spictrl_ack;
+  DEBUG_OUT(3)  <= spictrl_busy;
+  DEBUG_OUT(4)  <= spimem_read_en;
+  DEBUG_OUT(5)  <= spimem_write_en;
+  DEBUG_OUT(6)  <= spimem_ack;
+  DEBUG_OUT(7)  <= spi_debug(0); -- spi_start
+  DEBUG_OUT(8)  <= spi_debug(1); -- spi_busy
+
+  DEBUG_OUT(31 downto 9) <= (others => '0');
+  
 -- data memory for SPI accesses
 THE_SPI_MEMORY: spi_databus_memory
   port map(
@@ -151,7 +167,7 @@ THE_SPI_MEMORY: spi_databus_memory
     -- Status lines
     STAT          => open
   );
-    
+
 ---------------------------------------------------------------------------
 -- Reboot FPGA
 ---------------------------------------------------------------------------
index 4caf5f141540c7c81875ac47920f1ee28ce58f99..31d6f82a41196a349dd9b1703021c357adced8a3 100644 (file)
@@ -41,34 +41,34 @@ architecture Behavioral of spi_master is
   attribute HGROUP of Behavioral : architecture  is "SPI_group";
 
 -- Signals
-    type STATES is (SLEEP,DONE);--RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK
-    signal CURRENT_STATE, NEXT_STATE: STATES;
+  type STATES is (SLEEP,DONE);--RD_BSY,WR_BSY,RD_RDY,WR_RDY,RD_ACK,WR_ACK
+  signal CURRENT_STATE, NEXT_STATE: STATES;
 
-    signal status_data      : std_logic_vector(31 downto 0);
-    signal spi_busy         : std_logic;
+  signal status_data      : std_logic_vector(31 downto 0);
+  signal spi_busy         : std_logic;
 
-    signal reg_ctrl_data    : std_logic_vector(31 downto 0); -- CMD, ADH, ADM, ADL
-    signal reg_status_data  : std_logic_vector(31 downto 0); -- MAX
+  signal reg_ctrl_data    : std_logic_vector(31 downto 0); -- CMD, ADH, ADM, ADL
+  signal reg_status_data  : std_logic_vector(31 downto 0); -- MAX
 
-    signal reg_bus_data_out : std_logic_vector(31 downto 0); -- readback
+  signal reg_bus_data_out : std_logic_vector(31 downto 0); -- readback
 
-    signal spi_bsm          : std_logic_vector(7 downto 0);
-         signal spi_debug                  : std_logic_vector(31 downto 0);
+  signal spi_bsm          : std_logic_vector(7 downto 0);
+       signal spi_debug                    : std_logic_vector(31 downto 0);
 
-    signal spi_start_x      : std_logic;
-    signal spi_start        : std_logic;
+  signal spi_start_x      : std_logic;
+  signal spi_start        : std_logic;
 
-    -- State machine signals
-    signal bus_busy_x       : std_logic;
-    signal bus_busy         : std_logic;
-    signal bus_ack_x        : std_logic;
-    signal bus_ack          : std_logic;
-    signal store_wr_x       : std_logic;
-    signal store_wr         : std_logic;
-    signal store_rd_x       : std_logic;
-    signal store_rd         : std_logic;
+  -- State machine signals
+  signal bus_busy_x       : std_logic;
+  signal bus_busy         : std_logic;
+  signal bus_ack_x        : std_logic;
+  signal bus_ack          : std_logic;
+  signal store_wr_x       : std_logic;
+  signal store_wr         : std_logic;
+  signal store_rd_x       : std_logic;
+  signal store_rd         : std_logic;
 
-    signal reset_i          : std_logic;
+  signal reset_i          : std_logic;
 
   attribute syn_preserve : boolean;
   attribute syn_keep : boolean;
@@ -146,67 +146,33 @@ begin
   store_wr_x <= '0';
   store_rd_x <= '0';
   case CURRENT_STATE is
-      when SLEEP        =>
-          if   ( (spi_busy = '0') and (bus_read_in = '1') ) then
-              NEXT_STATE <= DONE;
-              store_rd_x <= '1';
-          elsif( (spi_busy = '0') and (bus_write_in = '1') ) then
-              NEXT_STATE <= DONE;
-              store_wr_x <= '1';
-          elsif( (bus_addr_in(0) = '0') and (spi_busy = '1') and (bus_read_in = '1') ) then
-              NEXT_STATE <= SLEEP; -- CMD register is busy protected
-              bus_busy_x <= '1';
-          elsif( (bus_addr_in(0) = '0') and (spi_busy = '1') and (bus_write_in = '1') ) then
-              NEXT_STATE <= SLEEP; -- CMD register is busy protected
-              bus_busy_x <= '1';
-          elsif( (bus_addr_in(0) = '1') and (spi_busy = '1') and (bus_read_in = '1') ) then
-              NEXT_STATE <= DONE; -- STATUS register is not
-              store_rd_x <= '1';
-          elsif( (bus_addr_in(0) = '1') and (spi_busy = '1') and (bus_write_in = '1') ) then
-              NEXT_STATE <= DONE; -- STATUS register is not
-              store_wr_x <= '1';
-          else
-              NEXT_STATE <= SLEEP;
-          end if;
---       when RD_RDY        =>
---           NEXT_STATE <= RD_ACK;
---           bus_ack_x  <= '1';
---       when WR_RDY        =>
---           NEXT_STATE <= WR_ACK;
---           bus_ack_x  <= '1';
---       when RD_ACK        =>
---           if( bus_read_in = '0' ) then
---               NEXT_STATE <= DONE;
---           else
---               NEXT_STATE <= RD_ACK;
---               bus_ack_x  <= '1';
---           end if;
---       when WR_ACK        =>
---           if( bus_write_in = '0' ) then
---               NEXT_STATE <= DONE;
---           else
---               NEXT_STATE <= WR_ACK;
---               bus_ack_x  <= '1';
---           end if;
---       when RD_BSY        =>
---           if( bus_read_in = '0' ) then
---               NEXT_STATE <= DONE;
---           else
---               NEXT_STATE <= RD_BSY;
---               bus_busy_x <= '1';
---           end if;
---       when WR_BSY        =>
---           if( bus_write_in = '0' ) then
---               NEXT_STATE <= DONE;
---           else
---               NEXT_STATE <= WR_BSY;
---               bus_busy_x <= '1';
---           end if;
-      when DONE        =>
-          NEXT_STATE <= SLEEP;
-          bus_ack_x  <= '1';
-      when others      =>
-          NEXT_STATE <= SLEEP;
+    when SLEEP        =>
+      if   ( (spi_busy = '0') and (bus_read_in = '1') ) then
+        NEXT_STATE <= DONE;
+        store_rd_x <= '1';
+      elsif( (spi_busy = '0') and (bus_write_in = '1') ) then
+        NEXT_STATE <= DONE;
+        store_wr_x <= '1';
+      elsif( (bus_addr_in(0) = '0') and (spi_busy = '1') and (bus_read_in = '1') ) then
+        NEXT_STATE <= SLEEP; -- CMD register is busy protected
+        bus_busy_x <= '1';
+      elsif( (bus_addr_in(0) = '0') and (spi_busy = '1') and (bus_write_in = '1') ) then
+        NEXT_STATE <= SLEEP; -- CMD register is busy protected
+        bus_busy_x <= '1';
+      elsif( (bus_addr_in(0) = '1') and (spi_busy = '1') and (bus_read_in = '1') ) then
+        NEXT_STATE <= DONE; -- STATUS register is not
+        store_rd_x <= '1';
+      elsif( (bus_addr_in(0) = '1') and (spi_busy = '1') and (bus_write_in = '1') ) then
+        NEXT_STATE <= DONE; -- STATUS register is not
+        store_wr_x <= '1';
+      else
+         NEXT_STATE <= SLEEP;
+      end if;
+    when DONE        =>
+      NEXT_STATE <= SLEEP;
+      bus_ack_x  <= '1';
+    when others      =>
+      NEXT_STATE <= SLEEP;
   end case;
 end process TRANSFORM;
 
@@ -216,23 +182,23 @@ end process TRANSFORM;
 
 -- register write
 THE_WRITE_REG_PROC: process( clk_in )
-  begin
-      if( rising_edge(clk_in) ) then
-          if   ( reset_i = '1' ) then
-              reg_ctrl_data   <= (others => '0');
-              reg_status_data <= (others => '0');
-              spi_start       <= '0';
-          elsif( (store_wr = '1') and (bus_addr_in(0) = '0') ) then
-              reg_ctrl_data   <= bus_data_in;
-              spi_start       <= spi_start_x;
-          elsif( (store_wr = '1') and (bus_addr_in(0) = '1') ) then
-              reg_status_data <= bus_data_in;
-              spi_start       <= spi_start_x;
-          else
-                 spi_start       <= spi_start_x;
-          end if;
-      end if;
-  end process THE_WRITE_REG_PROC;
+begin
+  if( rising_edge(clk_in) ) then
+    if   ( reset_i = '1' ) then
+      reg_ctrl_data   <= (others => '0');
+      reg_status_data <= (others => '0');
+      spi_start       <= '0';
+    elsif( (store_wr = '1') and (bus_addr_in(0) = '0') ) then
+      reg_ctrl_data   <= bus_data_in;
+      spi_start       <= spi_start_x;
+    elsif( (store_wr = '1') and (bus_addr_in(0) = '1') ) then
+      reg_status_data <= bus_data_in;
+      spi_start       <= spi_start_x;
+    else
+      spi_start       <= spi_start_x;
+    end if;
+  end if;
+end process THE_WRITE_REG_PROC;
 
 spi_start_x <= '1' when ( (store_wr = '1') and (bus_addr_in(0) = '0') ) else '0';
 
@@ -262,9 +228,9 @@ status_data(22 downto 0)  <= (others => '0');
 bus_ack_out       <= bus_ack;
 bus_busy_out      <= bus_busy;
 bus_data_out      <= reg_bus_data_out;
-stat(31 downto 3) <= spi_debug(31 downto 3); --status_data;
-stat(2)           <= spi_start;
-stat(1)           <= bus_write_in;
-stat(0)           <= bus_read_in;
+
+stat(31 downto 2) <= spi_debug(31 downto 2);
+stat(1)           <= spi_busy;
+stat(0)           <= spi_start;
 
 end Behavioral;
index 0d7d1507c1d265de93e8bbbd44a8781f0930abea..0734c29a1b92e3c73b09a8fa8f40154195c3d7e3 100644 (file)
@@ -10,136 +10,135 @@ use work.trb_net_components.all;
 -- missing: end of PP/RDCMD by data_done signal.\r
 \r
 entity spi_slim is\r
-    generic(\r
-      SLOW_SPI     : integer range c_NO to c_YES := c_YES\r
-      );\r
-    port(\r
-      SYSCLK       : in    std_logic; -- 100MHz sysclock\r
-      RESET        : in    std_logic; -- synchronous reset\r
-      -- Command interface\r
-      START_IN     : in    std_logic; -- one start pulse\r
-      BUSY_OUT     : out   std_logic; -- SPI transactions are ongoing\r
-      CMD_IN       : in    std_logic_vector(7 downto 0); -- SPI command byte\r
-      ADL_IN       : in    std_logic_vector(7 downto 0); -- low address byte\r
-      ADM_IN       : in    std_logic_vector(7 downto 0); -- mid address byte\r
-      ADH_IN       : in    std_logic_vector(7 downto 0); -- high address byte\r
-      MAX_IN       : in    std_logic_vector(7 downto 0); -- number of bytes to write / read (PP/RDCMD)\r
-      TXDATA_IN    : in    std_logic_vector(7 downto 0); -- byte to be transmitted next\r
-      TX_RD_OUT    : out   std_logic;\r
-      RXDATA_OUT   : out   std_logic_vector(7 downto 0); -- current received byte\r
-      RX_WR_OUT    : out   std_logic;\r
-      TX_RX_A_OUT  : out   std_logic_vector(7 downto 0); -- memory block counter for PP/RDCMD\r
-      -- SPI interface\r
-      SPI_SCK_OUT  : out   std_logic;\r
-      SPI_CS_OUT   : out   std_logic;\r
-      SPI_SDI_IN   : in    std_logic;\r
-      SPI_SDO_OUT  : out   std_logic;\r
-      -- DEBUG\r
-      CLK_EN_OUT   : out   std_logic;\r
-      BSM_OUT      : out   std_logic_vector(7 downto 0);\r
-      DEBUG_OUT    : out   std_logic_vector(31 downto 0)\r
-    );\r
+  generic(\r
+    SLOW_SPI     : integer range c_NO to c_YES := c_YES\r
+  );\r
+  port(\r
+    SYSCLK       : in    std_logic; -- 100MHz sysclock\r
+    RESET        : in    std_logic; -- synchronous reset\r
+    -- Command interface\r
+    START_IN     : in    std_logic; -- one start pulse\r
+    BUSY_OUT     : out   std_logic; -- SPI transactions are ongoing\r
+    CMD_IN       : in    std_logic_vector(7 downto 0); -- SPI command byte\r
+    ADL_IN       : in    std_logic_vector(7 downto 0); -- low address byte\r
+    ADM_IN       : in    std_logic_vector(7 downto 0); -- mid address byte\r
+    ADH_IN       : in    std_logic_vector(7 downto 0); -- high address byte\r
+    MAX_IN       : in    std_logic_vector(7 downto 0); -- number of bytes to write / read (PP/RDCMD)\r
+    TXDATA_IN    : in    std_logic_vector(7 downto 0); -- byte to be transmitted next\r
+    TX_RD_OUT    : out   std_logic;\r
+    RXDATA_OUT   : out   std_logic_vector(7 downto 0); -- current received byte\r
+    RX_WR_OUT    : out   std_logic;\r
+    TX_RX_A_OUT  : out   std_logic_vector(7 downto 0); -- memory block counter for PP/RDCMD\r
+    -- SPI interface\r
+    SPI_SCK_OUT  : out   std_logic;\r
+    SPI_CS_OUT   : out   std_logic;\r
+    SPI_SDI_IN   : in    std_logic;\r
+    SPI_SDO_OUT  : out   std_logic;\r
+    -- DEBUG\r
+    CLK_EN_OUT   : out   std_logic;\r
+    BSM_OUT      : out   std_logic_vector(7 downto 0);\r
+    DEBUG_OUT    : out   std_logic_vector(31 downto 0)\r
+  );\r
 end entity;\r
 \r
 architecture Behavioral of spi_slim is\r
 \r
--- new clock divider\r
-signal div_counter     : std_logic_vector(1+SLOW_SPI downto 0);\r
-signal div_done_x      : std_logic;\r
-signal div_done        : std_logic; -- same as clk_en\r
-signal clk_en          : std_logic; -- same as div_done\r
-\r
--- Statemachine signals\r
-type state_t is (IDLE,CSL,TXCMD,TXADD_H,TXADD_M,TXADD_L,TXDATA,RXDATA,\r
-                 WAIT1,WAIT2,WAIT3,WAIT4,WAIT5,WAIT6,WAIT7,WAIT8,CSH);\r
-signal STATE, NEXT_STATE    : state_t;\r
-\r
-signal rx_ena_x       : std_logic;\r
-signal rx_ena         : std_logic;\r
-signal tx_ena_x       : std_logic;\r
-signal tx_ena         : std_logic;\r
-signal busy_x         : std_logic;\r
-signal busy           : std_logic;\r
-signal spi_cs_x       : std_logic; -- SPI chip select (low active)\r
-signal spi_cs         : std_logic;\r
-signal spi_sck_x      : std_logic; -- SPI clock (rising edge active, from counter)\r
-signal spi_sck        : std_logic;\r
-signal tx_load_x      : std_logic; -- load TX shift register\r
-signal tx_load        : std_logic;\r
-signal tx_done_x      : std_logic; -- one memory byte sent\r
-signal tx_done        : std_logic;\r
-signal tx_sel_x       : std_logic_vector(2 downto 0); -- select TX content\r
-signal tx_sel         : std_logic_vector(2 downto 0);\r
-signal rx_store_x     : std_logic; -- store RX shift register\r
-signal rx_store       : std_logic;\r
-signal rx_complete    : std_logic;\r
-signal rst_addr_x     : std_logic; -- reset address counter\r
-signal rst_addr       : std_logic;\r
-\r
-signal inc_addr_rx_x  : std_logic;\r
-signal inc_addr_rx    : std_logic;\r
-signal inc_addr_tx_x  : std_logic;\r
-signal inc_addr_tx    : std_logic;\r
-signal ce_addr_x      : std_logic;\r
-signal ce_addr        : std_logic;\r
-\r
-signal addr_ctr       : std_logic_vector(7 downto 0);\r
-signal data_done_x    : std_logic;\r
-signal data_done      : std_logic_vector(5 downto 0);\r
-\r
-signal last_tx_bit_x  : std_logic;\r
-signal last_tx_bit    : std_logic;\r
-signal is_data_x      : std_logic;\r
-signal is_data        : std_logic;\r
-\r
--- debug signals\r
-signal bsm_x          : std_logic_vector(7 downto 0);\r
-signal debug_x        : std_logic_vector(31 downto 0);\r
-\r
-signal start          : std_logic; -- buffered start_in signal, as we have a clocked down state machine\r
-signal cmd_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
-signal adh_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
-signal adm_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
-signal adl_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
-signal max_int        : std_logic_vector(7 downto 0);\r
-\r
--- transmitter\r
-signal tx_sreg        : std_logic_vector(7 downto 0);\r
-signal tx_reg_comb    : std_logic_vector(7 downto 0); -- multiplexer\r
-signal tx_bit_cnt     : std_logic_vector(3 downto 0);\r
-\r
--- receiver\r
-signal rx_sreg        : std_logic_vector(7 downto 0);\r
-signal rx_bit_cnt_clr : std_logic;\r
-signal rx_bit_cnt     : std_logic_vector(3 downto 0);\r
-\r
--- registers\r
-signal rx_data            : std_logic_vector(7 downto 0);\r
-\r
--- FLASH commands\r
--- single byte commands\r
-constant NOP    : std_logic_vector(7 downto 0) := x"FF";  -- no cmd to execute\r
-constant WREN   : std_logic_vector(7 downto 0) := x"06";  -- write enable        -- OK -- CMD\r
-constant WRDI   : std_logic_vector(7 downto 0) := x"04";  -- write disable        -- OK -- CMD\r
-constant ERASE  : std_logic_vector(7 downto 0) := x"C7";  -- chip erase            -- OK -- CMD\r
-constant DPD    : std_logic_vector(7 downto 0) := x"b9";  -- deep powerdown     -- OK -- CMD\r
-constant RDPD   : std_logic_vector(7 downto 0) := x"ab";  -- resume powerdown   -- OK -- CMD\r
-\r
-constant RDID   : std_logic_vector(7 downto 0) := x"9f";  -- read signature        -- OK -- CMD + readbyte(n)\r
-constant RDSR   : std_logic_vector(7 downto 0) := x"05";  -- read status reg    -- OK -- CMD + readbyte(n)\r
-\r
-constant WRSR   : std_logic_vector(7 downto 0) := x"01";  -- write stat. reg    -- OK -- CMD + writebyte(1)\r
-\r
-constant SE64   : std_logic_vector(7 downto 0) := x"d8";  -- sector erase 64kB    -- OK -- CMD + ADH + ADM + ADL\r
-constant SE32   : std_logic_vector(7 downto 0) := x"52";  -- sector erase 32kB    -- OK -- CMD + ADH + ADM + ADL\r
-constant SE4    : std_logic_vector(7 downto 0) := x"20";  -- sector erase 32kB    -- OK -- CMD + ADH + ADM + ADL\r
-constant SECP   : std_logic_vector(7 downto 0) := x"36";  -- sector protect        -- OK -- CMD + ADH + ADM + ADL\r
-constant SECU   : std_logic_vector(7 downto 0) := x"39";  -- sector unprotect    -- OK -- CMD + ADH + ADM + ADL\r
-\r
-constant RDCMD  : std_logic_vector(7 downto 0) := x"03";  -- read data            -- OK -- CMD + ADH + ADM + ADL + readbyte(n)\r
-constant RDSPR  : std_logic_vector(7 downto 0) := x"3c";  -- read sect. prot.    --    -- CMD + ADH + ADM + ADL + readbye(n)\r
-constant PP     : std_logic_vector(7 downto 0) := x"02";  -- page program        -- OK -- CMD + ADH + ADM + ADL + writebyte(n)\r
-\r
+  -- new clock divider\r
+  signal div_counter     : std_logic_vector(1+SLOW_SPI downto 0);\r
+  signal div_done_x      : std_logic;\r
+  signal div_done        : std_logic; -- same as clk_en\r
+  signal clk_en          : std_logic; -- same as div_done\r
+\r
+  -- Statemachine signals\r
+  type state_t is (IDLE,CSL,TXCMD,TXADD_H,TXADD_M,TXADD_L,TXDATA,RXDATA,\r
+                   WAIT1,WAIT2,WAIT3,WAIT4,WAIT5,WAIT6,WAIT7,WAIT8,CSH);\r
+  signal STATE, NEXT_STATE    : state_t; \r
\r
+  signal rx_ena_x       : std_logic;\r
+  signal rx_ena         : std_logic;\r
+  signal tx_ena_x       : std_logic;\r
+  signal tx_ena         : std_logic;\r
+  signal busy_x         : std_logic;\r
+  signal busy           : std_logic;\r
+  signal spi_cs_x       : std_logic; -- SPI chip select (low active)\r
+  signal spi_cs         : std_logic;\r
+  signal spi_sck_x      : std_logic; -- SPI clock (rising edge active, from counter)\r
+  signal spi_sck        : std_logic;\r
+  signal tx_load_x      : std_logic; -- load TX shift register\r
+  signal tx_load        : std_logic;\r
+  signal tx_done_x      : std_logic; -- one memory byte sent\r
+  signal tx_done        : std_logic;\r
+  signal tx_sel_x       : std_logic_vector(2 downto 0); -- select TX content\r
+  signal tx_sel         : std_logic_vector(2 downto 0);\r
+  signal rx_store_x     : std_logic; -- store RX shift register\r
+  signal rx_store       : std_logic;\r
+  signal rx_complete    : std_logic;\r
+  signal rst_addr_x     : std_logic; -- reset address counter\r
+  signal rst_addr       : std_logic;\r
+\r
+  signal inc_addr_rx_x  : std_logic;\r
+  signal inc_addr_rx    : std_logic;\r
+  signal inc_addr_tx_x  : std_logic;\r
+  signal inc_addr_tx    : std_logic;\r
+  signal ce_addr_x      : std_logic;\r
+  signal ce_addr        : std_logic;\r
+\r
+  signal addr_ctr       : std_logic_vector(7 downto 0);\r
+  signal data_done_x    : std_logic; \r
+  signal data_done      : std_logic_vector(5 downto 0);\r
+\r
+  signal last_tx_bit_x  : std_logic;\r
+  signal last_tx_bit    : std_logic;\r
+  signal is_data_x      : std_logic;\r
+  signal is_data        : std_logic;\r
+\r
+  -- debug signals\r
+  signal bsm_x          : std_logic_vector(7 downto 0);\r
+  signal debug_x        : std_logic_vector(31 downto 0);\r
+\r
+  signal start          : std_logic; -- buffered start_in signal, as we have a clocked down state machine\r
+  signal cmd_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
+  signal adh_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
+  signal adm_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
+  signal adl_int        : std_logic_vector(7 downto 0); -- internal command and address bytes\r
+  signal max_int        : std_logic_vector(7 downto 0);\r
+\r
+  -- transmitter\r
+  signal tx_sreg        : std_logic_vector(7 downto 0);\r
+  signal tx_reg_comb    : std_logic_vector(7 downto 0); -- multiplexer\r
+  signal tx_bit_cnt     : std_logic_vector(3 downto 0);\r
+\r
+  -- receiver\r
+  signal rx_sreg        : std_logic_vector(7 downto 0);\r
+  signal rx_bit_cnt_clr : std_logic;\r
+  signal rx_bit_cnt     : std_logic_vector(3 downto 0);\r
+\r
+  -- registers\r
+  signal rx_data            : std_logic_vector(7 downto 0);\r
+\r
+  -- FLASH commands\r
+  -- single byte commands\r
+  constant NOP    : std_logic_vector(7 downto 0) := x"FF";  -- no cmd to execute\r
+  constant WREN   : std_logic_vector(7 downto 0) := x"06";  -- write enable        -- OK -- CMD\r
+  constant WRDI   : std_logic_vector(7 downto 0) := x"04";  -- write disable        -- OK -- CMD\r
+  constant ERASE  : std_logic_vector(7 downto 0) := x"C7";  -- chip erase            -- OK -- CMD\r
+  constant DPD    : std_logic_vector(7 downto 0) := x"b9";  -- deep powerdown     -- OK -- CMD\r
+  constant RDPD   : std_logic_vector(7 downto 0) := x"ab";  -- resume powerdown   -- OK -- CMD\r
+\r
+  constant RDID   : std_logic_vector(7 downto 0) := x"9f";  -- read signature        -- OK -- CMD + readbyte(n)\r
+  constant RDSR   : std_logic_vector(7 downto 0) := x"05";  -- read status reg    -- OK -- CMD + readbyte(n)\r
+\r
+  constant WRSR   : std_logic_vector(7 downto 0) := x"01";  -- write stat. reg    -- OK -- CMD + writebyte(1)\r
+\r
+  constant SE64   : std_logic_vector(7 downto 0) := x"d8";  -- sector erase 64kB    -- OK -- CMD + ADH + ADM + ADL\r
+  constant SE32   : std_logic_vector(7 downto 0) := x"52";  -- sector erase 32kB    -- OK -- CMD + ADH + ADM + ADL\r
+  constant SE4    : std_logic_vector(7 downto 0) := x"20";  -- sector erase 32kB    -- OK -- CMD + ADH + ADM + ADL\r
+  constant SECP   : std_logic_vector(7 downto 0) := x"36";  -- sector protect        -- OK -- CMD + ADH + ADM + ADL\r
+  constant SECU   : std_logic_vector(7 downto 0) := x"39";  -- sector unprotect    -- OK -- CMD + ADH + ADM + ADL\r
+\r
+  constant RDCMD  : std_logic_vector(7 downto 0) := x"03";  -- read data            -- OK -- CMD + ADH + ADM + ADL + readbyte(n)\r
+  constant RDSPR  : std_logic_vector(7 downto 0) := x"3c";  -- read sect. prot.    --    -- CMD + ADH + ADM + ADL + readbye(n)\r
+  constant PP     : std_logic_vector(7 downto 0) := x"02";  -- page program        -- OK -- CMD + ADH + ADM + ADL + writebyte(n)\r
 \r
 begin\r
 \r
@@ -172,19 +171,19 @@ debug_x(2 downto 0)   <= tx_sel;
 -----------------------------------------------------------\r
 -- SPI clock generator\r
 -----------------------------------------------------------\r
-THE_CLOCK_DIVIDER: process(sysclk)\r
+THE_CLOCK_DIVIDER: process( SYSCLK )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if( reset = '1' ) then\r
-            div_counter <= (others => '0');\r
-            div_done    <= '0';\r
-            spi_sck     <= spi_sck_x;--'0';\r
-        else\r
-            div_counter <= div_counter + 1;\r
-            div_done    <= div_done_x;\r
-            spi_sck     <= spi_sck_x;\r
-        end if;\r
+  if( rising_edge(SYSCLK) ) then\r
+    if( RESET = '1' ) then\r
+      div_counter <= (others => '0');\r
+      div_done    <= '0';\r
+      spi_sck     <= spi_sck_x;--'0';\r
+    else\r
+      div_counter <= div_counter + 1;\r
+      div_done    <= div_done_x;\r
+      spi_sck     <= spi_sck_x;\r
     end if;\r
+  end if;\r
 end process THE_CLOCK_DIVIDER;\r
 \r
 div_done_x <= '1' when ( or_all(div_counter) = '0' ) else '0';\r
@@ -197,61 +196,61 @@ clk_en <= div_done;
 -----------------------------------------------------------\r
 -- start signal and local register sets for CMD and ADR\r
 -----------------------------------------------------------\r
-THE_START_PROC: process(sysclk)\r
+THE_START_PROC: process( SYSCLK )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if   ( reset = '1' ) then\r
-            start   <= '0';\r
-            cmd_int <= (others => '0');\r
-            adh_int <= (others => '0');\r
-            adm_int <= (others => '0');\r
-            adl_int <= (others => '0');\r
-            max_int <= (others => '0');\r
-        elsif( (start_in = '1') and (busy = '0') ) then\r
-            start <= '1';\r
-            cmd_int <= cmd_in;\r
-            adh_int <= adh_in;\r
-            adm_int <= adm_in;\r
-            adl_int <= adl_in;\r
-            max_int <= max_in;\r
-        elsif( busy = '1' ) then\r
-            start <= '0';\r
-        end if;\r
+  if( rising_edge(SYSCLK) ) then\r
+    if   ( RESET = '1' ) then\r
+      start   <= '0';\r
+      cmd_int <= (others => '0');\r
+      adh_int <= (others => '0');\r
+      adm_int <= (others => '0');\r
+      adl_int <= (others => '0');\r
+      max_int <= (others => '0');\r
+    elsif( (START_IN = '1') and (busy = '0') ) then\r
+      start <= '1';\r
+      cmd_int <= cmd_in;\r
+      adh_int <= adh_in;\r
+      adm_int <= adm_in;\r
+      adl_int <= adl_in;\r
+      max_int <= max_in;\r
+    elsif( busy = '1' ) then\r
+      start <= '0';\r
     end if;\r
+  end if;\r
 end process THE_START_PROC;\r
 \r
 -----------------------------------------------------------\r
 -- statemachine: clocked process\r
 -----------------------------------------------------------\r
-THE_STATEMACHINE: process( sysclk )\r
+THE_STATEMACHINE: process( SYSCLK )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if   ( reset = '1' ) then\r
-            STATE      <= IDLE;\r
-            rx_ena     <= '0';\r
-            tx_ena     <= '0';\r
-            busy       <= '0';\r
-            spi_cs     <= spi_cs_x;--'1';\r
-            tx_load    <= '0';\r
-            tx_sel     <= "000";\r
-            rx_store   <= '0';\r
-            rst_addr   <= '0';\r
-            tx_done    <= '0';\r
-            is_data    <= '0';\r
-        elsif( clk_en = '1' ) then\r
-            STATE    <= NEXT_STATE;\r
-            rx_ena   <= rx_ena_x;\r
-            tx_ena   <= tx_ena_x;\r
-            busy     <= busy_x;\r
-            spi_cs   <= spi_cs_x;\r
-            tx_load  <= tx_load_x;\r
-            tx_sel   <= tx_sel_x;\r
-            rx_store <= rx_store_x;\r
-            rst_addr <= rst_addr_x;\r
-            tx_done  <= tx_done_x;\r
-            is_data  <= is_data_x;\r
-        end if;\r
+  if( rising_edge(SYSCLK) ) then\r
+    if   ( RESET = '1' ) then\r
+      STATE      <= IDLE;\r
+      rx_ena     <= '0';\r
+      tx_ena     <= '0';\r
+      busy       <= '0';\r
+      spi_cs     <= spi_cs_x;--'1';\r
+      tx_load    <= '0';\r
+      tx_sel     <= "000";\r
+      rx_store   <= '0';\r
+      rst_addr   <= '0';\r
+      tx_done    <= '0';\r
+      is_data    <= '0';\r
+    elsif( clk_en = '1' ) then\r
+      STATE    <= NEXT_STATE;\r
+      rx_ena   <= rx_ena_x;\r
+      tx_ena   <= tx_ena_x;\r
+      busy     <= busy_x;\r
+      spi_cs   <= spi_cs_x;\r
+      tx_load  <= tx_load_x;\r
+      tx_sel   <= tx_sel_x;\r
+      rx_store <= rx_store_x;\r
+      rst_addr <= rst_addr_x;\r
+      tx_done  <= tx_done_x;\r
+      is_data  <= is_data_x;\r
     end if;\r
+  end if;\r
 end process THE_STATEMACHINE;\r
 \r
 -----------------------------------------------------------\r
@@ -259,291 +258,304 @@ end process THE_STATEMACHINE;
 -----------------------------------------------------------\r
 THE_STATE_TRANSITIONS: process( STATE, cmd_int, start, tx_bit_cnt, rx_bit_cnt, data_done(5) )\r
 begin\r
-    rx_ena_x   <= '0';\r
-    tx_ena_x   <= '0';\r
-    busy_x     <= '1';\r
-    spi_cs_x   <= '1';\r
-    tx_load_x  <= '0';\r
-    tx_sel_x   <= "000";\r
-    rx_store_x <= '0';\r
-    rst_addr_x <= '0';\r
-    tx_done_x  <= '0';\r
-    is_data_x  <= '0';\r
-    case STATE is\r
-        when IDLE =>\r
-            if( start = '1' ) then\r
-                NEXT_STATE <= CSL;\r
-                spi_cs_x   <= '0';\r
-                tx_load_x  <= '1';\r
-                tx_sel_x   <= "000";\r
-                rst_addr_x <= '1';\r
-            else\r
-                NEXT_STATE <= IDLE;\r
-                busy_x     <= '0';\r
-            end if;\r
-\r
-        when CSL =>\r
-            NEXT_STATE <= TXCMD;\r
-            tx_ena_x   <= '1';\r
-            spi_cs_x   <= '0';\r
-\r
-        when TXCMD =>\r
-            if( tx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= TXCMD;\r
-                tx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                case cmd_int is\r
-                    when WREN | WRDI | ERASE | DPD | RDPD\r
-                                =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                    when SE64 | SE32 | SE4 | PP | RDCMD | SECP | SECU | RDSPR\r
-                                =>    NEXT_STATE <= WAIT1;\r
-                                    spi_cs_x   <= '0';\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "001"; -- ADH\r
-                    when WRSR    =>    NEXT_STATE <= WAIT1;\r
-                                    spi_cs_x   <= '0';\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "100"; -- TXDATA\r
-                                    is_data_x  <= '1';\r
-                    when RDSR | RDID\r
-                                =>    NEXT_STATE <= WAIT1;\r
-                                    spi_cs_x   <= '0';\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "110"; -- "00"\r
-                    when others    =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                end case;\r
-            end if;\r
-\r
-        when WAIT1 =>\r
-            case cmd_int is\r
-                when SE64 | SE32 | SE4 | PP | RDCMD | SECP | SECU | RDSPR\r
-                            =>    NEXT_STATE <= TXADD_H;\r
-                                tx_ena_x   <= '1';\r
-                                spi_cs_x   <= '0';\r
-                when RDSR | RDID\r
-                            =>    NEXT_STATE <= RXDATA;\r
-                                rx_ena_x   <= '1';\r
-                                spi_cs_x   <= '0';\r
-                when WRSR    =>    NEXT_STATE <= TXDATA;\r
-                                tx_ena_x   <= '1';\r
-                                spi_cs_x   <= '0';\r
-                                is_data_x  <= '1';\r
-                when others    =>    NEXT_STATE <= CSH;\r
-                                spi_cs_x   <= '0';\r
-            end case;\r
-\r
-        when TXADD_H =>\r
-            if( tx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= TXADD_H;\r
-                tx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                NEXT_STATE <= WAIT2;\r
-                spi_cs_x   <= '0';\r
-                tx_load_x  <= '1';\r
-                tx_sel_x   <= "010"; -- ADM\r
-            end if;\r
-\r
-        when WAIT2 =>\r
-            NEXT_STATE <= TXADD_M;\r
-            tx_ena_x   <= '1';\r
-            spi_cs_x   <= '0';\r
-\r
-        when TXADD_M =>\r
-            if( tx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= TXADD_M;\r
-                tx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                NEXT_STATE <= WAIT3;\r
-                spi_cs_x   <= '0';\r
-                tx_load_x  <= '1';\r
-                tx_sel_x   <= "011"; -- ADL\r
-            end if;\r
-\r
-        when WAIT3 =>\r
-            NEXT_STATE <= TXADD_L;\r
-            tx_ena_x   <= '1';\r
-            spi_cs_x   <= '0';\r
-\r
-        when TXADD_L =>\r
-            if( tx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= TXADD_L;\r
-                tx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                case cmd_int is\r
-                    when PP        =>    NEXT_STATE <= WAIT6;\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "100"; -- TXDATA\r
-                                    spi_cs_x   <= '0';\r
-                    when SE64 | SE32 | SE4 | SECP | SECU\r
-                                =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                    when RDCMD | RDSPR\r
-                                =>    NEXT_STATE <= WAIT4;\r
-                                    spi_cs_x   <= '0';\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "110"; -- "00"\r
-                    when others    =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                end case;\r
-            end if;\r
-\r
-        when WAIT4 =>\r
-            case cmd_int is\r
-                when RDCMD | RDSPR\r
-                            =>    NEXT_STATE <= RXDATA;\r
-                                rx_ena_x   <= '1';\r
-                                spi_cs_x   <= '0';\r
-                when others    =>    NEXT_STATE <= CSH;\r
-                                spi_cs_x   <= '0';\r
-            end case;\r
-\r
-        when RXDATA =>\r
-            if( rx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= RXDATA;\r
-                rx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                case cmd_int is\r
-                    when RDCMD | RDSR | RDID | RDSPR\r
-                                =>    NEXT_STATE <= WAIT7;\r
-                                    spi_cs_x   <= '0';\r
-                                    rx_store_x <= '1';\r
-                    when others    =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                                    rx_store_x <= '1';\r
-                end case;\r
-            end if;\r
-\r
-        when WAIT6 =>\r
-            case cmd_int is\r
-                when PP        =>    if( data_done(5) = '1' ) then\r
-                                    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                                else\r
-                                    NEXT_STATE <= TXDATA;\r
-                                    tx_ena_x   <= '1';\r
-                                    spi_cs_x   <= '0';\r
-                                    is_data_x  <= '1';\r
-                                end if;\r
-                when others    =>    NEXT_STATE <= CSH;\r
-                                spi_cs_x   <= '0';\r
-            end case;\r
-\r
-        when TXDATA =>\r
-            if( tx_bit_cnt < x"7" ) then\r
-                NEXT_STATE <= TXDATA;\r
-                tx_ena_x   <= '1';\r
-                spi_cs_x   <= '0';\r
-            else\r
-                case cmd_int is\r
-                    when PP        =>    NEXT_STATE <= WAIT6;\r
-                                    spi_cs_x   <= '0';\r
-                                    tx_done_x  <= '1';\r
-                                    tx_load_x  <= '1';\r
-                                    tx_sel_x   <= "100"; -- TXDATA\r
-                    when others    =>    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                end case;\r
-            end if;\r
-            is_data_x  <= '1';\r
-\r
-        when WAIT7 =>\r
-            NEXT_STATE <= WAIT8;\r
-            spi_cs_x   <= '0';\r
-\r
-        when WAIT8 =>\r
-            case cmd_int is\r
-                when RDCMD | RDID | RDSR | RDSPR\r
-                            =>    if( data_done(5) = '1' ) then\r
-                                    NEXT_STATE <= CSH;\r
-                                    spi_cs_x   <= '0';\r
-                                else\r
-                                    NEXT_STATE <= RXDATA;\r
-                                    rx_ena_x   <= '1';\r
-                                    spi_cs_x   <= '0';\r
-                                end if;\r
-                when others    =>    NEXT_STATE <= CSH;\r
-                                spi_cs_x   <= '0';\r
-        end case;\r
-\r
-        when WAIT5 =>\r
-            NEXT_STATE <= CSH;\r
-            spi_cs_x   <= '0';\r
-\r
-        when CSH =>\r
-            NEXT_STATE <= IDLE;\r
-            busy_x     <= '0';\r
+  rx_ena_x   <= '0';\r
+  tx_ena_x   <= '0';\r
+  busy_x     <= '1';\r
+  spi_cs_x   <= '1';\r
+  tx_load_x  <= '0';\r
+  tx_sel_x   <= "000";\r
+  rx_store_x <= '0';\r
+  rst_addr_x <= '0';\r
+  tx_done_x  <= '0';\r
+  is_data_x  <= '0';\r
+  case STATE is\r
+    when IDLE =>\r
+      if( start = '1' ) then\r
+        NEXT_STATE <= CSL;\r
+        spi_cs_x   <= '0';\r
+        tx_load_x  <= '1';\r
+        tx_sel_x   <= "000";\r
+        rst_addr_x <= '1';\r
+      else\r
+        NEXT_STATE <= IDLE;\r
+        busy_x     <= '0';\r
+      end if;\r
+\r
+    when CSL =>\r
+      NEXT_STATE <= TXCMD;\r
+      tx_ena_x   <= '1';\r
+      spi_cs_x   <= '0';\r
+\r
+    when TXCMD =>\r
+      if( tx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= TXCMD;\r
+        tx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        case cmd_int is\r
+          when WREN | WRDI | ERASE | DPD | RDPD\r
+                    =>    NEXT_STATE <= CSH;\r
+                          spi_cs_x   <= '0';\r
+          when SE64 | SE32 | SE4 | PP | RDCMD | SECP | SECU | RDSPR\r
+                    =>    NEXT_STATE <= WAIT1;\r
+                          spi_cs_x   <= '0';\r
+                          tx_load_x  <= '1';\r
+                          tx_sel_x   <= "001"; -- ADH\r
+          when WRSR\r
+                    =>    NEXT_STATE <= WAIT1;\r
+                          spi_cs_x   <= '0';\r
+                          tx_load_x  <= '1';\r
+                          tx_sel_x   <= "100"; -- TXDATA\r
+                          is_data_x  <= '1';\r
+         when RDSR | RDID\r
+                   =>    NEXT_STATE <= WAIT1;\r
+                         spi_cs_x   <= '0';\r
+                         tx_load_x  <= '1';\r
+                         tx_sel_x   <= "110"; -- "00"\r
+         when others    \r
+                   =>    NEXT_STATE <= CSH;\r
+                         spi_cs_x   <= '0';\r
+      end case;\r
+    end if;\r
 \r
-    end case;\r
+    when WAIT1 =>\r
+      case cmd_int is\r
+        when SE64 | SE32 | SE4 | PP | RDCMD | SECP | SECU | RDSPR\r
+                  =>    NEXT_STATE <= TXADD_H;\r
+                        tx_ena_x   <= '1';\r
+                        spi_cs_x   <= '0';\r
+        when RDSR | RDID\r
+                  =>    NEXT_STATE <= RXDATA;\r
+                        rx_ena_x   <= '1';\r
+                        spi_cs_x   <= '0';\r
+        when WRSR    \r
+                  =>    NEXT_STATE <= TXDATA;\r
+                        tx_ena_x   <= '1';\r
+                        spi_cs_x   <= '0';\r
+                        is_data_x  <= '1';\r
+        when others\r
+                  =>    NEXT_STATE <= CSH;\r
+                        spi_cs_x   <= '0';\r
+      end case;\r
+\r
+    when TXADD_H =>\r
+      if( tx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= TXADD_H;\r
+        tx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        NEXT_STATE <= WAIT2;\r
+        spi_cs_x   <= '0';\r
+        tx_load_x  <= '1';\r
+        tx_sel_x   <= "010"; -- ADM\r
+      end if;\r
+\r
+    when WAIT2 =>\r
+      NEXT_STATE <= TXADD_M;\r
+      tx_ena_x   <= '1';\r
+      spi_cs_x   <= '0';\r
+\r
+    when TXADD_M =>\r
+      if( tx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= TXADD_M;\r
+        tx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        NEXT_STATE <= WAIT3;\r
+        spi_cs_x   <= '0';\r
+        tx_load_x  <= '1';\r
+        tx_sel_x   <= "011"; -- ADL\r
+      end if;\r
+\r
+    when WAIT3 =>\r
+      NEXT_STATE <= TXADD_L;\r
+      tx_ena_x   <= '1';\r
+      spi_cs_x   <= '0';\r
+\r
+    when TXADD_L =>\r
+      if( tx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= TXADD_L;\r
+        tx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        case cmd_int is\r
+          when PP        \r
+                         =>    NEXT_STATE <= WAIT6;\r
+                               tx_load_x  <= '1';\r
+                               tx_sel_x   <= "100"; -- TXDATA\r
+                               spi_cs_x   <= '0';\r
+          when SE64 | SE32 | SE4 | SECP | SECU\r
+                         =>    NEXT_STATE <= CSH;\r
+                               spi_cs_x   <= '0';\r
+          when RDCMD | RDSPR\r
+                         =>    NEXT_STATE <= WAIT4;\r
+                               spi_cs_x   <= '0';\r
+                               tx_load_x  <= '1';\r
+                               tx_sel_x   <= "110"; -- "00"\r
+          when others    \r
+                         =>    NEXT_STATE <= CSH;\r
+                               spi_cs_x   <= '0';\r
+        end case;\r
+      end if;\r
+\r
+    when WAIT4 =>\r
+      case cmd_int is\r
+        when RDCMD | RDSPR\r
+                  =>    NEXT_STATE <= RXDATA;\r
+                        rx_ena_x   <= '1';\r
+                        spi_cs_x   <= '0';\r
+        when others\r
+                  =>    NEXT_STATE <= CSH;\r
+                        spi_cs_x   <= '0';\r
+      end case;\r
+\r
+    when RXDATA =>\r
+      if( rx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= RXDATA;\r
+        rx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        case cmd_int is\r
+          when RDCMD | RDSR | RDID | RDSPR\r
+                      =>    NEXT_STATE <= WAIT7;\r
+                            spi_cs_x   <= '0';\r
+                            rx_store_x <= '1';\r
+          when others\r
+                      =>    NEXT_STATE <= CSH;\r
+                            spi_cs_x   <= '0';\r
+                            rx_store_x <= '1';\r
+        end case;\r
+      end if;\r
+\r
+    when WAIT6 =>\r
+      case cmd_int is\r
+        when PP        \r
+                      =>    if( data_done(5) = '1' ) then\r
+                              NEXT_STATE <= CSH;\r
+                              spi_cs_x   <= '0';\r
+                            else\r
+                              NEXT_STATE <= TXDATA;\r
+                              tx_ena_x   <= '1';\r
+                              spi_cs_x   <= '0';\r
+                              is_data_x  <= '1';\r
+                            end if;\r
+        when others    \r
+                      =>    NEXT_STATE <= CSH;\r
+                            spi_cs_x   <= '0';\r
+      end case;\r
+\r
+    when TXDATA =>\r
+      if( tx_bit_cnt < x"7" ) then\r
+        NEXT_STATE <= TXDATA;\r
+        tx_ena_x   <= '1';\r
+        spi_cs_x   <= '0';\r
+      else\r
+        case cmd_int is\r
+          when PP\r
+                      =>    NEXT_STATE <= WAIT6;\r
+                            spi_cs_x   <= '0';\r
+                            tx_done_x  <= '1';\r
+                            tx_load_x  <= '1';\r
+                            tx_sel_x   <= "100"; -- TXDATA\r
+          when others\r
+                      =>    NEXT_STATE <= CSH;\r
+                            spi_cs_x   <= '0';\r
+        end case;\r
+      end if;\r
+      is_data_x  <= '1';\r
+\r
+    when WAIT7 =>\r
+      NEXT_STATE <= WAIT8;\r
+      spi_cs_x   <= '0';\r
+\r
+    when WAIT8 =>\r
+      case cmd_int is\r
+        when RDCMD | RDID | RDSR | RDSPR\r
+                   =>    if( data_done(5) = '1' ) then\r
+                           NEXT_STATE <= CSH;\r
+                           spi_cs_x   <= '0';\r
+                         else\r
+                           NEXT_STATE <= RXDATA;\r
+                           rx_ena_x   <= '1';\r
+                           spi_cs_x   <= '0';\r
+                         end if;\r
+        when others    \r
+                   =>    NEXT_STATE <= CSH;\r
+                         spi_cs_x   <= '0';\r
+      end case;\r
+\r
+    when WAIT5 =>\r
+      NEXT_STATE <= CSH;\r
+      spi_cs_x   <= '0';\r
+\r
+    when CSH =>\r
+      NEXT_STATE <= IDLE;\r
+      busy_x     <= '0';\r
+\r
+  end case;\r
 end process THE_STATE_TRANSITIONS;\r
 \r
 -- state machine output table\r
 THE_STATEMACHINE_OUT: process( STATE )\r
 begin\r
-    -- default values\r
-    rx_bit_cnt_clr    <= '1';\r
-\r
-    case STATE is\r
-        when IDLE     =>  bsm_x <= x"00";\r
-        when CSL      =>  bsm_x <= x"09";\r
-        when TXCMD    =>  bsm_x <= x"01";\r
-        when TXDATA   =>  bsm_x <= x"02";\r
-        when TXADD_H  =>  bsm_x <= x"03";\r
-        when TXADD_M  =>  bsm_x <= x"04";\r
-        when TXADD_L  =>  bsm_x <= x"05";\r
-        when RXDATA   =>  bsm_x <= x"07";\r
-        when WAIT1    =>  bsm_x <= x"10";\r
-        when WAIT2    =>  bsm_x <= x"11";\r
-        when WAIT3    =>  bsm_x <= x"12";\r
-        when WAIT4    =>  bsm_x <= x"13";\r
-        when WAIT8    =>  bsm_x <= x"17";\r
-        when WAIT6    =>  bsm_x <= x"15";\r
-        when WAIT5    =>  bsm_x <= x"14";\r
-        when WAIT7    =>  bsm_x <= x"16";\r
-        when CSH      =>  bsm_x <= x"08";\r
-        when others   =>  bsm_x <= x"ff";\r
-    end case;\r
+  -- default values\r
+  rx_bit_cnt_clr    <= '1';\r
+\r
+  case STATE is\r
+    when IDLE     =>  bsm_x <= x"00";\r
+    when CSL      =>  bsm_x <= x"09";\r
+    when TXCMD    =>  bsm_x <= x"01";\r
+    when TXDATA   =>  bsm_x <= x"02";\r
+    when TXADD_H  =>  bsm_x <= x"03";\r
+    when TXADD_M  =>  bsm_x <= x"04";\r
+    when TXADD_L  =>  bsm_x <= x"05";\r
+    when RXDATA   =>  bsm_x <= x"07";\r
+    when WAIT1    =>  bsm_x <= x"10";\r
+    when WAIT2    =>  bsm_x <= x"11";\r
+    when WAIT3    =>  bsm_x <= x"12";\r
+    when WAIT4    =>  bsm_x <= x"13";\r
+    when WAIT8    =>  bsm_x <= x"17";\r
+    when WAIT6    =>  bsm_x <= x"15";\r
+    when WAIT5    =>  bsm_x <= x"14";\r
+    when WAIT7    =>  bsm_x <= x"16";\r
+    when CSH      =>  bsm_x <= x"08";\r
+    when others   =>  bsm_x <= x"ff";\r
+  end case;\r
 end process THE_STATEMACHINE_OUT;\r
 \r
 -- TX data register multiplexer\r
 THE_TXREG_MUX: process( tx_sel, cmd_int, adh_int, adm_int, adl_int, txdata_in )\r
 begin\r
-    case tx_sel is\r
-        when "000"    => tx_reg_comb <= cmd_int;\r
-        when "001"    => tx_reg_comb <= adh_int;\r
-        when "010"    => tx_reg_comb <= adm_int;\r
-        when "011"    => tx_reg_comb <= adl_int;\r
-        when "100"    => tx_reg_comb <= txdata_in;\r
-        when "101"    => tx_reg_comb <= x"ee"; -- unused\r
-        when "110"    => tx_reg_comb <= x"00"; -- fixed value\r
-        when "111"    => tx_reg_comb <= x"aa"; -- fixed value\r
-        when others   => tx_reg_comb <= x"00";\r
-    end case;\r
+  case tx_sel is\r
+    when "000"    => tx_reg_comb <= cmd_int;\r
+    when "001"    => tx_reg_comb <= adh_int;\r
+    when "010"    => tx_reg_comb <= adm_int;\r
+    when "011"    => tx_reg_comb <= adl_int;\r
+    when "100"    => tx_reg_comb <= txdata_in;\r
+    when "101"    => tx_reg_comb <= x"ee"; -- unused\r
+    when "110"    => tx_reg_comb <= x"00"; -- fixed value\r
+    when "111"    => tx_reg_comb <= x"aa"; -- fixed value\r
+    when others   => tx_reg_comb <= x"00";\r
+  end case;\r
 end process THE_TXREG_MUX;\r
 \r
 -- TXData shift register and bit counter\r
 THE_TX_SHIFT_AND_BITCOUNT: process( sysclk )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if( reset = '1' ) then\r
-            tx_sreg(6 downto 0) <= (others => '0');\r
-            tx_bit_cnt   <= (others => '0');\r
-            last_tx_bit  <= '0';\r
-        elsif   ( (clk_en = '1' ) and (tx_load = '1') ) then\r
-            tx_bit_cnt <= (others => '0');\r
-            tx_sreg    <= tx_reg_comb;\r
-        elsif( (clk_en = '1') and (tx_ena = '1') ) then\r
-            tx_bit_cnt <= tx_bit_cnt + 1;\r
-            tx_sreg    <= tx_sreg (6 downto 0) & '0';\r
-        end if;\r
-        last_tx_bit <= last_tx_bit_x;\r
+  if( rising_edge(sysclk) ) then\r
+    if( reset = '1' ) then\r
+      tx_sreg(6 downto 0) <= (others => '0');\r
+      tx_bit_cnt   <= (others => '0');\r
+      last_tx_bit  <= '0';\r
+    elsif   ( (clk_en = '1' ) and (tx_load = '1') ) then\r
+      tx_bit_cnt <= (others => '0');\r
+      tx_sreg    <= tx_reg_comb;\r
+    elsif( (clk_en = '1') and (tx_ena = '1') ) then\r
+      tx_bit_cnt <= tx_bit_cnt + 1;\r
+      tx_sreg    <= tx_sreg (6 downto 0) & '0';\r
     end if;\r
+    last_tx_bit <= last_tx_bit_x;\r
+  end if;\r
 end process THE_TX_SHIFT_AND_BITCOUNT;\r
 \r
 last_tx_bit_x <= '1' when ( tx_bit_cnt = x"7" ) else '0';\r
@@ -551,59 +563,59 @@ last_tx_bit_x <= '1' when ( tx_bit_cnt = x"7" ) else '0';
 -- receiver shift register and bit counter\r
 THE_RX_SHIFT_AND_BITCOUNT: process( sysclk )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if   ( reset = '1' ) then\r
-            rx_bit_cnt   <= (others => '0');\r
-            rx_sreg      <= (others => '0');\r
-        elsif( (clk_en = '1') and (rx_ena = '1') ) then\r
-            rx_sreg <= rx_sreg (6 downto 0) & spi_sdi_in;\r
-            case rx_bit_cnt is\r
-                when x"0" | x"1" | x"2" | x"3" | x"4" | x"5" | x"6" =>\r
-                    rx_bit_cnt   <= rx_bit_cnt + 1;\r
-                when x"7" =>\r
-                    rx_bit_cnt   <= (others => '0');\r
-                when others =>\r
-                    null;\r
-            end case;\r
-        end if;\r
+  if( rising_edge(sysclk) ) then\r
+    if   ( reset = '1' ) then\r
+      rx_bit_cnt   <= (others => '0');\r
+      rx_sreg      <= (others => '0');\r
+    elsif( (clk_en = '1') and (rx_ena = '1') ) then\r
+      rx_sreg <= rx_sreg (6 downto 0) & spi_sdi_in;\r
+      case rx_bit_cnt is\r
+        when x"0" | x"1" | x"2" | x"3" | x"4" | x"5" | x"6" =>\r
+          rx_bit_cnt   <= rx_bit_cnt + 1;\r
+        when x"7" =>\r
+          rx_bit_cnt   <= (others => '0');\r
+        when others =>\r
+          null;\r
+      end case;\r
     end if;\r
+  end if;\r
 end process THE_RX_SHIFT_AND_BITCOUNT;\r
 \r
 -- the rx_data register\r
 THE_RXDATA_REG: process( sysclk )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if   ( reset = '1' ) then\r
-            rx_data     <= (others => '0');\r
-            rx_complete <= '0';\r
-        elsif( (clk_en = '1') and (rx_store = '1') ) then\r
-            rx_data     <= rx_sreg;\r
-            rx_complete <= '1';\r
-        else\r
-            rx_complete <= '0';\r
-        end if;\r
+  if( rising_edge(sysclk) ) then\r
+    if   ( reset = '1' ) then\r
+      rx_data     <= (others => '0');\r
+      rx_complete <= '0';\r
+    elsif( (clk_en = '1') and (rx_store = '1') ) then\r
+      rx_data     <= rx_sreg;\r
+      rx_complete <= '1';\r
+    else\r
+      rx_complete <= '0';\r
     end if;\r
+  end if;\r
 end process;\r
 \r
 -- address generator for external BRAM\r
 THE_ADDR_COUNTER: process( sysclk )\r
 begin\r
-    if( rising_edge(sysclk) ) then\r
-        if   ( (reset = '1') or (rst_addr = '1') ) then\r
-            addr_ctr    <= (others => '0');\r
-            data_done   <= (others => '0');\r
-            inc_addr_rx <= '0';\r
-            inc_addr_tx <= '0';\r
-            ce_addr     <= '0';\r
-        elsif( ce_addr = '1' ) then\r
-            addr_ctr <= addr_ctr + 1;\r
-        end if;\r
-        data_done(5 downto 1) <= data_done(4 downto 0);\r
-        data_done(0) <= data_done_x;\r
-        inc_addr_rx  <= inc_addr_rx_x;\r
-        inc_addr_tx  <= inc_addr_tx_x;\r
-        ce_addr      <= ce_addr_x;\r
+  if( rising_edge(sysclk) ) then\r
+    if   ( (reset = '1') or (rst_addr = '1') ) then\r
+      addr_ctr    <= (others => '0');\r
+      data_done   <= (others => '0');\r
+      inc_addr_rx <= '0';\r
+      inc_addr_tx <= '0';\r
+      ce_addr     <= '0';\r
+    elsif( ce_addr = '1' ) then\r
+      addr_ctr <= addr_ctr + 1;\r
     end if;\r
+    data_done(5 downto 1) <= data_done(4 downto 0);\r
+    data_done(0) <= data_done_x;\r
+    inc_addr_rx  <= inc_addr_rx_x;\r
+    inc_addr_tx  <= inc_addr_tx_x;\r
+    ce_addr      <= ce_addr_x;\r
+  end if;\r
 end process THE_ADDR_COUNTER;\r
 \r
 inc_addr_rx_x <= '1' when ( rx_complete = '1' ) else '0';\r
@@ -614,19 +626,18 @@ ce_addr_x     <= inc_addr_rx or inc_addr_tx;
 data_done_x   <= '1' when ( addr_ctr = max_int ) else '0';\r
 \r
 -- output signals\r
-spi_cs_out   <= spi_cs;\r
-spi_sck_out  <= spi_sck;\r
-spi_sdo_out  <= tx_sreg(7);\r
-busy_out     <= busy;\r
-\r
-tx_rd_out    <= '0';\r
-rxdata_out   <= rx_data;\r
-rx_wr_out    <= rx_complete;\r
-tx_rx_a_out  <= addr_ctr;\r
-\r
-clk_en_out   <= clk_en;\r
-bsm_out      <= bsm_x;\r
-debug_out    <= debug_x;\r
-\r
+SPI_CS_OUT   <= spi_cs;\r
+SPI_SCK_OUT  <= spi_sck;\r
+SPI_SDO_OUT  <= tx_sreg(7);\r
+BUSY_OUT     <= busy;\r
+\r
+TX_RD_OUT    <= '0';\r
+RXDATA_OUT   <= rx_data;\r
+RX_WR_OUT    <= rx_complete;\r
+TX_RX_A_OUT  <= addr_ctr;\r
+\r
+CLK_EN_OUT   <= clk_en;\r
+BSM_OUT      <= bsm_x;\r
+DEBUG_OUT    <= debug_x;\r
 \r
 end Behavioral;\r
index ccc18c665090d7c8880a328cbd7fb16febd199d3..43c738c9cd8c653853f9c53d2a71c7c82203d827 100644 (file)
@@ -300,9 +300,17 @@ begin
       STAT_ONEWIRE               => open,
       STAT_ADDR_DEBUG            => open,
       STAT_TRIGGER_OUT           => STAT_TRIGGER_OUT,      
-      DEBUG_LVL1_HANDLER_OUT     => DEBUG_LVL1_HANDLER_OUT
+      DEBUG_LVL1_HANDLER_OUT     => open --DEBUG_LVL1_HANDLER_OUT
       );
 
+----
+  DEBUG_LVL1_HANDLER_OUT(15 downto 4) <= (others => '0');
+  DEBUG_LVL1_HANDLER_OUT(3)           <= regio_tx.nack;
+  DEBUG_LVL1_HANDLER_OUT(2)           <= regio_tx.ack;
+  DEBUG_LVL1_HANDLER_OUT(1)           <= regio_rx.write;
+  DEBUG_LVL1_HANDLER_OUT(0)           <= regio_rx.read;
+----
+
 TIMERS_OUT.microsecond  <= time_global_i;
 TIMERS_OUT.clock        <= time_local_i;
 TIMERS_OUT.last_trigger <= time_since_last_trg_i;
@@ -321,7 +329,7 @@ TIMERS_OUT.uid          <= unique_id_i;
     generic map(
       PORT_NUMBER                => 7,
       PORT_ADDRESSES             => (0 => x"8000", 1 => x"7100", 2 => x"7110", 3 => x"7200", 4 => x"7300", 5 => x"8100", 6 => x"8300", others => x"0000"),
-      PORT_ADDR_MASK             => (0 => 15,      1 => 4,       2 => 3,       3 => 2,       4 => 5,       5 => 8,       6 => 8, others => 0)
+      PORT_ADDR_MASK             => (0 => 15,      1 => 4,       2 => 3,       3 => 2,       4 => 5,       5 => 8,       6 => 8,       others => 0)
       )
     port map(
       CLK         => CLK,