\r
\r
type state_type is (IDLE, EnableFLASH1, EnableFLASH2, EnableFLASH3, Start, ReadPage, WaitFlash1, WaitFlash2, ReadRAM, WaitRAM1, WaitRAM2, WaitRAM3, WaitRAM4,\r
- WaitRAM2_32, WaitRAM3_32, WaitRAM4_32, WaitRAM5_32, WaitRAM6_32, WriteSPI);\r
+ WaitRAM2_32, WaitRAM3_32, WaitRAM4_32, WaitRAM5_32, WaitRAM6_32, WriteSPI, DisableFLASH1, DisableFLASH2, DisableFLASH3);\r
signal state : state_type := IDLE;\r
signal master_running : std_logic;\r
signal master_word_counter : std_logic_vector(3 downto 0);\r
master_word_counter <= std_logic_vector(unsigned(master_word_counter) + 1);\r
else -- break\r
master_DATA_OUT(15 downto 0) <= x"ff" & ram_data_o;\r
- state <= IDLE;\r
+ state <= DisableFLASH1;\r
end if;\r
when WaitRAM2 =>\r
master_ADDR_OUT <= ram_data_o;\r
master_DATA_OUT(15 downto 0) <= ram_data_o & x"00";\r
state <= WaitRAM4;\r
when WaitRAM3_32 =>\r
- master_DATA_OUT(31 downto 0) <= ram_data_o & x"000000";\r
+ if (DATA_BUS_WIDTH > 31) then\r
+ master_DATA_OUT(31 downto 0) <= ram_data_o & x"000000";\r
+ end if;\r
master_word_counter <= std_logic_vector(unsigned(master_word_counter) + 1);\r
state <= WaitRAM4_32;\r
when WaitRAM4 =>\r
state <= WriteSPI;\r
master_WRITE_OUT <= '1';\r
when WaitRAM4_32 =>\r
- master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 24) & ram_data_o & x"0000";\r
+ if (DATA_BUS_WIDTH > 31) then\r
+ master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 24) & ram_data_o & x"0000";\r
+ end if;\r
master_word_counter <= std_logic_vector(unsigned(master_word_counter) + 1);\r
state <= WaitRAM5_32;\r
when WaitRAM5_32 =>\r
- master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 16) & ram_data_o & x"00";\r
+ if (DATA_BUS_WIDTH > 31) then\r
+ master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 16) & ram_data_o & x"00";\r
+ end if;\r
master_word_counter <= std_logic_vector(unsigned(master_word_counter) + 2);\r
-- padding bytes\r
state <= WaitRAM6_32;\r
when WaitRAM6_32 =>\r
- master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 8) & ram_data_o;\r
+ if (DATA_BUS_WIDTH > 31) then\r
+ master_DATA_OUT(31 downto 0) <= master_DATA_OUT(31 downto 8) & ram_data_o;\r
+ end if;\r
state <= WriteSPI;\r
master_WRITE_OUT <= '1';\r
when WriteSPI =>\r
state <= ReadRAM;\r
master_word_counter <= std_logic_vector(unsigned(master_word_counter) + 1);\r
end if;\r
+ when DisableFLASH1 =>\r
+ state <= DisableFLASH2;\r
+ master_flash_command <= "101";\r
+ master_flash_go <= '1';\r
+ when DisableFLASH2 =>\r
+ state <= DisableFLASH3;\r
+ master_flash_go <= '0';\r
+ when DisableFLASH3 =>\r
+ if (flash_busy = '0') then\r
+ state <= IDLE;\r
+ master_flash_command <= "000";\r
+ end if;\r
+ \r
end case;\r
end if;\r
end process;\r