core_flash_tb.vhdl 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3. use ieee.numeric_std.all;
  4. library work;
  5. use work.common.all;
  6. use work.wishbone_types.all;
  7. entity core_flash_tb is
  8. end core_flash_tb;
  9. architecture behave of core_flash_tb is
  10. signal clk, rst: std_logic;
  11. -- testbench signals
  12. constant clk_period : time := 10 ns;
  13. -- SPI
  14. signal spi_sck : std_ulogic;
  15. signal spi_cs_n : std_ulogic := '1';
  16. signal spi_sdat_o : std_ulogic_vector(3 downto 0);
  17. signal spi_sdat_oe : std_ulogic_vector(3 downto 0);
  18. signal spi_sdat_i : std_ulogic_vector(3 downto 0);
  19. signal fl_hold_n : std_logic;
  20. signal fl_wp_n : std_logic;
  21. signal fl_mosi : std_logic;
  22. signal fl_miso : std_logic;
  23. begin
  24. soc0: entity work.soc
  25. generic map(
  26. SIM => true,
  27. MEMORY_SIZE => (384*1024),
  28. RAM_INIT_FILE => "main_ram.bin",
  29. CLK_FREQ => 100000000,
  30. HAS_SPI_FLASH => true,
  31. SPI_FLASH_DLINES => 4,
  32. SPI_FLASH_OFFSET => 0
  33. )
  34. port map(
  35. rst => rst,
  36. system_clk => clk,
  37. spi_flash_sck => spi_sck,
  38. spi_flash_cs_n => spi_cs_n,
  39. spi_flash_sdat_o => spi_sdat_o,
  40. spi_flash_sdat_oe => spi_sdat_oe,
  41. spi_flash_sdat_i => spi_sdat_i
  42. );
  43. flash: entity work.s25fl128s
  44. generic map (
  45. TimingModel => "S25FL128SAGNFI000_R_30pF",
  46. LongTimming => false,
  47. tdevice_PU => 10 ns,
  48. tdevice_PP256 => 100 ns,
  49. tdevice_PP512 => 100 ns,
  50. tdevice_WRR => 100 ns
  51. )
  52. port map(
  53. SCK => spi_sck,
  54. SI => fl_mosi,
  55. CSNeg => spi_cs_n,
  56. HOLDNeg => fl_hold_n,
  57. WPNeg => fl_wp_n,
  58. RSTNeg => '1',
  59. SO => fl_miso
  60. );
  61. fl_mosi <= spi_sdat_o(0) when spi_sdat_oe(0) = '1' else 'Z';
  62. fl_miso <= spi_sdat_o(1) when spi_sdat_oe(1) = '1' else 'Z';
  63. fl_wp_n <= spi_sdat_o(2) when spi_sdat_oe(2) = '1' else 'Z';
  64. fl_hold_n <= spi_sdat_o(3) when spi_sdat_oe(3) = '1' else '1' when spi_sdat_oe(0) = '1' else 'Z';
  65. spi_sdat_i(0) <= fl_mosi;
  66. spi_sdat_i(1) <= fl_miso;
  67. spi_sdat_i(2) <= fl_wp_n;
  68. spi_sdat_i(3) <= fl_hold_n;
  69. clk_process: process
  70. begin
  71. clk <= '0';
  72. wait for clk_period/2;
  73. clk <= '1';
  74. wait for clk_period/2;
  75. end process;
  76. rst_process: process
  77. begin
  78. rst <= '1';
  79. wait for 10*clk_period;
  80. rst <= '0';
  81. wait;
  82. end process;
  83. jtag: entity work.sim_jtag;
  84. end;