mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-01-11 23:43:15 +00:00
Currently, when not using litedram, the top level still has to hook up "dummy" wishbones to the main dram and control dram busses coming out of the SoC and provide ack signals. Instead, make the SoC generate the acks internally when not using litedram and use defaults to make the wiring entirely optional. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
98 lines
2.5 KiB
VHDL
98 lines
2.5 KiB
VHDL
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
library work;
|
|
use work.common.all;
|
|
use work.wishbone_types.all;
|
|
|
|
entity core_flash_tb is
|
|
end core_flash_tb;
|
|
|
|
architecture behave of core_flash_tb is
|
|
signal clk, rst: std_logic;
|
|
|
|
-- testbench signals
|
|
constant clk_period : time := 10 ns;
|
|
|
|
-- SPI
|
|
signal spi_sck : std_ulogic;
|
|
signal spi_cs_n : std_ulogic := '1';
|
|
signal spi_sdat_o : std_ulogic_vector(3 downto 0);
|
|
signal spi_sdat_oe : std_ulogic_vector(3 downto 0);
|
|
signal spi_sdat_i : std_ulogic_vector(3 downto 0);
|
|
signal fl_hold_n : std_logic;
|
|
signal fl_wp_n : std_logic;
|
|
signal fl_mosi : std_logic;
|
|
signal fl_miso : std_logic;
|
|
begin
|
|
|
|
soc0: entity work.soc
|
|
generic map(
|
|
SIM => true,
|
|
MEMORY_SIZE => (384*1024),
|
|
RAM_INIT_FILE => "main_ram.bin",
|
|
CLK_FREQ => 100000000,
|
|
HAS_SPI_FLASH => true,
|
|
SPI_FLASH_DLINES => 4,
|
|
SPI_FLASH_OFFSET => 0
|
|
)
|
|
port map(
|
|
rst => rst,
|
|
system_clk => clk,
|
|
spi_flash_sck => spi_sck,
|
|
spi_flash_cs_n => spi_cs_n,
|
|
spi_flash_sdat_o => spi_sdat_o,
|
|
spi_flash_sdat_oe => spi_sdat_oe,
|
|
spi_flash_sdat_i => spi_sdat_i
|
|
);
|
|
|
|
flash: entity work.s25fl128s
|
|
generic map (
|
|
TimingModel => "S25FL128SAGNFI000_R_30pF",
|
|
LongTimming => false,
|
|
tdevice_PU => 10 ns,
|
|
tdevice_PP256 => 100 ns,
|
|
tdevice_PP512 => 100 ns,
|
|
tdevice_WRR => 100 ns
|
|
)
|
|
port map(
|
|
SCK => spi_sck,
|
|
SI => fl_mosi,
|
|
CSNeg => spi_cs_n,
|
|
HOLDNeg => fl_hold_n,
|
|
WPNeg => fl_wp_n,
|
|
RSTNeg => '1',
|
|
SO => fl_miso
|
|
);
|
|
|
|
fl_mosi <= spi_sdat_o(0) when spi_sdat_oe(0) = '1' else 'Z';
|
|
fl_miso <= spi_sdat_o(1) when spi_sdat_oe(1) = '1' else 'Z';
|
|
fl_wp_n <= spi_sdat_o(2) when spi_sdat_oe(2) = '1' else 'Z';
|
|
fl_hold_n <= spi_sdat_o(3) when spi_sdat_oe(3) = '1' else '1' when spi_sdat_oe(0) = '1' else 'Z';
|
|
|
|
spi_sdat_i(0) <= fl_mosi;
|
|
spi_sdat_i(1) <= fl_miso;
|
|
spi_sdat_i(2) <= fl_wp_n;
|
|
spi_sdat_i(3) <= fl_hold_n;
|
|
|
|
clk_process: process
|
|
begin
|
|
clk <= '0';
|
|
wait for clk_period/2;
|
|
clk <= '1';
|
|
wait for clk_period/2;
|
|
end process;
|
|
|
|
rst_process: process
|
|
begin
|
|
rst <= '1';
|
|
wait for 10*clk_period;
|
|
rst <= '0';
|
|
wait;
|
|
end process;
|
|
|
|
jtag: entity work.sim_jtag;
|
|
|
|
end;
|