OpenCores
URL https://opencores.org/ocsvn/mlite/mlite/trunk

Subversion Repositories mlite

[/] [mlite/] [trunk/] [vhdl/] [tbench.vhd] - Diff between revs 265 and 346

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 265 Rev 346
Line 10... Line 10...
--    This entity provides a test bench for testing the Plasma CPU core.
--    This entity provides a test bench for testing the Plasma CPU core.
---------------------------------------------------------------------
---------------------------------------------------------------------
library ieee;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_1164.all;
use work.mlite_pack.all;
use work.mlite_pack.all;
 
use ieee.std_logic_unsigned.all;
 
 
entity tbench is
entity tbench is
end; --entity tbench
end; --entity tbench
 
 
architecture logic of tbench is
architecture logic of tbench is
Line 29... Line 30...
 
 
   signal clk         : std_logic := '1';
   signal clk         : std_logic := '1';
   signal reset       : std_logic := '1';
   signal reset       : std_logic := '1';
   signal interrupt   : std_logic := '0';
   signal interrupt   : std_logic := '0';
   signal mem_write   : std_logic;
   signal mem_write   : std_logic;
   signal mem_address : std_logic_vector(31 downto 2);
   signal address     : std_logic_vector(31 downto 2);
   signal mem_data    : std_logic_vector(31 downto 0);
   signal data_write  : std_logic_vector(31 downto 0);
   signal mem_pause   : std_logic := '0';
 
   signal mem_byte_sel: std_logic_vector(3 downto 0);
 
   --signal uart_read   : std_logic;
 
   signal uart_write  : std_logic;
 
   signal data_read   : std_logic_vector(31 downto 0);
   signal data_read   : std_logic_vector(31 downto 0);
 
   signal pause1      : std_logic := '0';
 
   signal pause2      : std_logic := '0';
 
   signal pause       : std_logic;
 
   signal no_ddr_start: std_logic;
 
   signal no_ddr_stop : std_logic;
 
   signal byte_we     : std_logic_vector(3 downto 0);
 
   signal uart_write  : std_logic;
 
   signal gpioA_in    : std_logic_vector(31 downto 0) := (others => '0');
begin  --architecture
begin  --architecture
   --Uncomment the line below to test interrupts
   --Uncomment the line below to test interrupts
   interrupt <= '1' after 20 us when interrupt = '0' else '0' after 445 ns;
   interrupt <= '1' after 20 us when interrupt = '0' else '0' after 445 ns;
 
 
   clk   <= not clk after 50 ns;
   clk   <= not clk after 50 ns;
   reset <= '0' after 500 ns;
   reset <= '0' after 500 ns;
   --mem_pause <= not mem_pause after 100 ns;
   pause1 <= '1' after 700 ns when pause1 = '0' else '0' after 200 ns;
   --uart_read <= '0';
   pause2 <= '1' after 300 ns when pause2 = '0' else '0' after 200 ns;
   data_read <= interrupt & ZERO(30 downto 0);
   pause <= pause1 or pause2;
 
   gpioA_in(20) <= not gpioA_in(20) after 200 ns; --E_RX_CLK
 
   gpioA_in(19) <= not gpioA_in(19) after 20 us;  --E_RX_DV
 
   gpioA_in(18 downto 15) <= gpioA_in(18 downto 15) + 1 after 400 ns; --E_RX_RXD
 
   gpioA_in(14) <= not gpioA_in(14) after 200 ns; --E_TX_CLK
 
 
   u1_plasma: plasma
   u1_plasma: plasma
      generic map (memory_type => memory_type,
      generic map (memory_type => memory_type,
 
                   ethernet    => '1',
 
                   use_cache   => '1',
                   log_file    => log_file)
                   log_file    => log_file)
      PORT MAP (
      PORT MAP (
         clk               => clk,
         clk               => clk,
         reset             => reset,
         reset             => reset,
         uart_read         => uart_write,
         uart_read         => uart_write,
         uart_write        => uart_write,
         uart_write        => uart_write,
 
 
         address           => mem_address,
         address           => address,
         byte_we           => mem_byte_sel,
         byte_we           => byte_we,
         data_write        => mem_data,
         data_write        => data_write,
         data_read         => data_read,
         data_read         => data_read,
         mem_pause_in      => mem_pause,
         mem_pause_in      => pause,
 
         no_ddr_start      => no_ddr_start,
 
         no_ddr_stop       => no_ddr_stop,
 
 
         gpio0_out         => open,
         gpio0_out         => open,
         gpioA_in          => data_read);
         gpioA_in          => gpioA_in);
 
 
 
   dram_proc: process(clk, address, byte_we, data_write, pause)
 
      constant ADDRESS_WIDTH : natural := 16;
 
      type storage_array is
 
         array(natural range 0 to (2 ** ADDRESS_WIDTH) / 4 - 1) of
 
         std_logic_vector(31 downto 0);
 
      variable storage : storage_array;
 
      variable data    : std_logic_vector(31 downto 0);
 
      variable index   : natural := 0;
 
   begin
 
      index := conv_integer(address(ADDRESS_WIDTH-1 downto 2));
 
      data := storage(index);
 
 
 
      if byte_we(0) = '1' then
 
         data(7 downto 0) := data_write(7 downto 0);
 
      end if;
 
      if byte_we(1) = '1' then
 
         data(15 downto 8) := data_write(15 downto 8);
 
      end if;
 
      if byte_we(2) = '1' then
 
         data(23 downto 16) := data_write(23 downto 16);
 
      end if;
 
      if byte_we(3) = '1' then
 
         data(31 downto 24) := data_write(31 downto 24);
 
      end if;
 
 
 
      if rising_edge(clk) then
 
         if address(30 downto 28) = "001" and byte_we /= "0000" then
 
            storage(index) := data;
 
         end if;
 
      end if;
 
 
 
      if pause = '0' then
 
         data_read <= data;
 
      end if;
 
   end process;
 
 
 
 
end; --architecture logic
end; --architecture logic
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.