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

Subversion Repositories core_arm

[/] [core_arm/] [trunk/] [vhdl/] [tbench/] [tbench_gen.vhd] - Rev 4

Compare with Previous | Blame | View Log

-- $(lic)
-- $(help_generic)
-- $(help_local)
 
library ieee;
use ieee.std_logic_1164.all;
 
-- todo: remove
use work.leon_config.all;
 
use work.debug.all;
use work.core_comp.all;
use work.tbench_comp.all;
use work.tbenchmem_comp.all;
use STD.TEXTIO.all;
 
entity tbench_gen is
  generic (
    msg1      : string := "32 kbyte 32-bit rom, 0-ws";
    msg2      : string := "2x128 kbyte 32-bit ram, 0-ws";
    pcihost   : boolean := false;	-- be PCI host
    DISASS    : integer := 0;	        -- enable disassembly to stdout
    clkperiod : integer := 20;		-- system clock period
    romfile   : string := "soft/tbenchsoft/armrom.dat";  -- rom contents
    ramfile   : string := "soft/tbenchsoft/armram.dat";  -- ram contents
    sdramfile : string := "soft/tbenchsoft/sdram.dat";  -- sdram contents
    romwidth  : integer := 32;		-- rom data width (8/32)
    romdepth  : integer := 13;		-- rom address depth
    romtacc   : integer := 10;		-- rom access time (ns)
    ramwidth  : integer := 32;		-- ram data width (8/16/32)
    ramdepth  : integer := 15;		-- ram address depth
    rambanks  : integer := 2;		-- number of ram banks
    bytewrite : boolean := true;	-- individual byte write strobes
    ramtacc   : integer := 10		-- ram access time (ns)
  );
  port ( 
    i       : in  tbench_gen_typ_in;
    o       : out tbench_gen_typ_out
    );
end tbench_gen;
 
architecture behav of tbench_gen is
 
  signal clk : std_logic := '0';
  signal Rst    : std_logic := '0';			-- Reset
  constant ct : integer := clkperiod/2;
 
  signal address  : std_logic_vector(27 downto 0);
  signal data     : std_logic_vector(31 downto 0);
 
  signal ramsn    : std_logic_vector(4 downto 0);
  signal ramoen   : std_logic_vector(4 downto 0);
  signal rwen     : std_logic_vector(3 downto 0);
  signal rwenx    : std_logic_vector(3 downto 0);
  signal romsn    : std_logic_vector(1 downto 0);
  signal iosn     : std_logic;
  signal oen      : std_logic;
  signal read     : std_logic;
  signal writen   : std_logic;
  signal brdyn    : std_logic;
  signal bexcn    : std_logic;
  signal wdog     : std_logic;
  signal dsuen, dsutx, dsurx, dsubre, dsuact : std_logic;
  signal test     : std_logic;
  signal error    : std_logic;
  signal pio	: std_logic_vector(15 downto 0);
  signal GND      : std_logic := '0';
  signal VCC      : std_logic := '1';
  signal NC       : std_logic := 'Z';
  signal clk2     : std_logic := '1';
 
  signal sdcke    : std_logic_vector ( 1 downto 0);  -- clk en
  signal sdcsn    : std_logic_vector ( 1 downto 0);  -- chip sel
  signal sdwen    : std_logic;                       -- write en
  signal sdrasn   : std_logic;                       -- row addr stb
  signal sdcasn   : std_logic;                       -- col addr stb
  signal sddqm    : std_logic_vector ( 3 downto 0);  -- data i/o mask
  signal sdclk    : std_logic;       
  signal plllock    : std_logic;       
 
  signal emdio   : std_logic;
  signal etx_clk : std_logic := '0';
  signal erx_clk : std_logic := '0';
  signal erxd    : std_logic_vector(3 downto 0);   
  signal erx_dv  : std_logic; 
  signal erx_er  : std_logic; 
  signal erx_col : std_logic;
  signal erx_crs : std_logic;
  signal etxd    : std_logic_vector(3 downto 0);   
  signal etx_en  : std_logic; 
  signal etx_er  : std_logic; 
  signal emdc    : std_logic;    
  signal emddis  : std_logic;    
  signal epwrdwn : std_logic;
  signal ereset  : std_logic;
  signal esleep  : std_logic;
  signal epause  : std_logic;
 
begin  
 
  clk <= not clk after ct * 1 ns;
  rst <= '0', '1' after clkperiod*10 * 1 ns;
 
  -- boot message
  bootmsg : process(rst)
  begin
    if rst'event and (rst = '1') then --'
      print("Core generic testbench ");
      print(msg1); print(msg2); print("");
    end if;
  end process;
 
  -------------------------------------------------------------------------------
  -- processor 
    c0 : core port map (rst, clk, sdclk, plllock, 
                        error, address, data, 
                        ramsn, ramoen, rwenx, romsn, iosn, oen, read, writen, brdyn, 
                        bexcn, sdcke, sdcsn, sdwen, sdrasn, sdcasn, sddqm, sdclk,
                        pio, wdog, dsuen, dsutx, dsurx, dsubre, dsuact, test);
 
 
  -------------------------------------------------------------------------------
  -- 8-bit ram
  ram8d : if ramwidth = 8 generate
    ram0 : iram 
      generic map (index => 0, abits => ramdepth, echk => 2, tacc => ramtacc,
                   fname => ramfile)
      port map (A => address(ramdepth-1 downto 0), D => data(31 downto 24),
                CE1 => ramsn(0), WE => rwen(0), OE => ramoen(0));
  end generate;
 
  -- 16-bit ram
  ram16d : if ramwidth = 16 generate
    rambnk : for i in 0 to rambanks-1 generate
      ramarr : for j in 0 to 1 generate
        ram0 : iram 
	  generic map (index => j, abits => ramdepth, echk => 4, 
		       tacc => ramtacc, fname => ramfile)
          port map (A => address(ramdepth downto 1), D => data((31 - j*8) downto (24-j*8)),
                    CE1 => ramsn(i), WE => rwen(j), OE => ramoen(i));
      end generate;
    end generate;
  end generate;
 
  -- 32-bit ram
  ram32d : if ramwidth = 32 generate
    rambnk : for i in 0 to rambanks-1 generate
      ramarr : for j in 0 to 3 generate
        ram0 : iram 
	  generic map (index => j, abits => ramdepth, echk => 0, 
		       tacc => ramtacc, fname => ramfile)
          port map (A => address(ramdepth+1 downto 2), D => data((31 - j*8) downto (24-j*8)),
                    CE1 => ramsn(i), WE => rwen(j), OE => ramoen(i));
      end generate;
    end generate;
  end generate;
 
  -------------------------------------------------------------------------------
  -- 8-bit rom 
  rom8d : if romwidth = 8 generate
    pio(1 downto 0) <= "LL";	  -- 8-bit data bus
    rom0 : iram 
      generic map (index => 0, abits => romdepth, echk => 2, tacc => romtacc, fname => romfile)
        port map (A => address(romdepth-1 downto 0), D => data(31 downto 24),
                  CE1 => romsn(0), WE => VCC, OE => oen);
  end generate;
 
  -- 16-bit rom 
  rom16d : if romwidth = 16 generate
    pio(1 downto 0) <= "LH";	  -- 16-bit data bus
    romarr : for i in 0 to 1 generate
      rom0 : iram 
	generic map (index => i, abits => romdepth, echk => 4, tacc => romtacc,
		     fname => romfile)
        port map (A => address(romdepth downto 1), D => data((31 - i*8) downto (24-i*8)),
                  CE1 => romsn(0), WE => VCC, OE => oen);
    end generate;
  end generate;
 
  -- 32-bit rom 
  rom32d : if romwidth = 32 generate
    pio(1 downto 0) <= "HH";	  -- 32-bit data bus
    romarr : for i in 0 to 3 generate
      rom0 : iram 
	generic map (index => i, abits => romdepth, echk => 0, tacc => romtacc,
		     fname => romfile)
        port map (A => address(romdepth+1 downto 2), D => data((31 - i*8) downto (24-i*8)),
                  CE1 => romsn(0), WE => VCC, OE => oen);
    end generate;
  end generate;
 
  -------------------------------------------------------------------------------
  -- optional sdram
  sdram : if SDRAMEN generate
    u0: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
	PORT MAP(
            Dq => data(31 downto 16), Addr => address(14 downto 2),
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
            Dqm => sddqm(3 downto 2));
    u1: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
	PORT MAP(
            Dq => data(15 downto 0), Addr => address(14 downto 2),
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
            Cs_n => sdcsn(0), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
            Dqm => sddqm(1 downto 0));
    u2: mt48lc16m16a2 generic map (index => 0, fname => sdramfile)
	PORT MAP(
            Dq => data(31 downto 16), Addr => address(14 downto 2),
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
            Dqm => sddqm(3 downto 2));
    u3: mt48lc16m16a2 generic map (index => 16, fname => sdramfile)
	PORT MAP(
            Dq => data(15 downto 0), Addr => address(14 downto 2),
            Ba => address(16 downto 15), Clk => sdclk, Cke => sdcke(0),
            Cs_n => sdcsn(1), Ras_n => sdrasn, Cas_n => sdcasn, We_n => sdwen,
            Dqm => sddqm(1 downto 0));
  end generate;
 
  -------------------------------------------------------------------------------
  -- write strobes
  rwen <= rwenx when bytewrite else (rwenx(0) & rwenx(0) & rwenx(0) & rwenx(0));
 
end behav;
 
 
 
 
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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