You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.2 KiB
VHDL
119 lines
3.2 KiB
VHDL
5 years ago
|
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;
|
||
|
|
||
|
-- Dummy DRAM
|
||
|
signal wb_dram_in : wishbone_master_out;
|
||
|
signal wb_dram_out : wishbone_slave_out;
|
||
|
signal wb_dram_ctrl_in : wb_io_master_out;
|
||
|
signal wb_dram_ctrl_out : wb_io_slave_out;
|
||
|
|
||
|
-- 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,
|
||
|
uart0_rxd => '0',
|
||
|
uart0_txd => open,
|
||
|
wb_dram_in => wb_dram_in,
|
||
|
wb_dram_out => wb_dram_out,
|
||
|
wb_dram_ctrl_in => wb_dram_ctrl_in,
|
||
|
wb_dram_ctrl_out => wb_dram_ctrl_out,
|
||
|
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,
|
||
|
alt_reset => '0'
|
||
|
);
|
||
|
|
||
|
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;
|
||
|
|
||
|
-- Dummy DRAM
|
||
|
wb_dram_out.ack <= wb_dram_in.cyc and wb_dram_in.stb;
|
||
|
wb_dram_out.dat <= x"FFFFFFFFFFFFFFFF";
|
||
|
wb_dram_out.stall <= '0';
|
||
|
wb_dram_ctrl_out.ack <= wb_dram_ctrl_in.cyc and wb_dram_ctrl_in.stb;
|
||
|
wb_dram_ctrl_out.dat <= x"FFFFFFFF";
|
||
|
wb_dram_ctrl_out.stall <= '0';
|
||
|
|
||
|
end;
|