OpenCores
URL https://opencores.org/ocsvn/1g_ethernet_dpi/1g_ethernet_dpi/trunk

Subversion Repositories 1g_ethernet_dpi

[/] [1g_ethernet_dpi/] [tags/] [vmblite_base/] [hw/] [src/] [rtl/] [mblite/] [mblite_unit.vhd] - Rev 7

Compare with Previous | Blame | View Log

----------------------------------------------------------------------------------------------
--
--      Input file         : 
--      Design name        : 
--      Author             : Tamar Kranenburg
--      Company            : Delft University of Technology
--                         : Faculty EEMCS, Department ME&CE
--                         : Systems and Circuits group
--
--      Description        : 
--
----------------------------------------------------------------------------------------------
 
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
 
library mblite;
use mblite.config_Pkg.all;
use mblite.core_Pkg.all;
use mblite.std_Pkg.all;
 
entity mblite_unit is port
(   -- SYS_CON
    sys_clk_i        : in std_logic;
    sys_rst_i        : in std_logic;
    -- IRQ
    sys_int_i        : in std_logic;
    -- WB-master inputs from the wb-slaves
    wbm_dat_i : in  std_logic_vector(CFG_DMEM_WIDTH - 1 downto 0); -- databus input
    wbm_ack_i : in  std_logic;                                     -- buscycle acknowledge input
    -- WB-master outputs to the wb-slaves
    wbm_adr_o : out std_logic_vector(CFG_DMEM_SIZE - 1 downto 0);  -- address bits
    wbm_dat_o : out std_logic_vector(CFG_DMEM_WIDTH - 1 downto 0); -- databus output
    wbm_we_o  : out std_logic;                                     -- write enable output
    wbm_stb_o : out std_logic;                                     -- strobe signals
    wbm_sel_o : out std_logic_vector(CFG_DMEM_WIDTH/8 - 1 downto 0); -- select output array
    wbm_cyc_o : out std_logic                                      -- valid BUS cycle output
);
end mblite_unit;
 
architecture arch of mblite_unit is
 
    signal dmem_o : dmem_out_type;
    signal dmem_i : dmem_in_type;
    signal imem_o : imem_out_type;
    signal imem_i : imem_in_type;
    signal s_dmem_o : dmem_out_array_type(CFG_NUM_SLAVES - 1 downto 0);
    signal s_dmem_i : dmem_in_array_type(CFG_NUM_SLAVES - 1 downto 0);
    signal s_dmem_sel_o : std_logic_vector(3 downto 0);
    signal s_dmem_ena_o : std_logic;
 
    signal m_wb_i : wb_mst_in_type;
    signal m_wb_o : wb_mst_out_type;
 
    constant rom_size : integer := 16;
    constant ram_size : integer := 16;
 
begin
 
--
-- WB route
--
wbm_adr_o   <= m_wb_o.adr_o;
wbm_dat_o   <= m_wb_o.dat_o;
wbm_we_o    <= m_wb_o.we_o;
wbm_stb_o   <= m_wb_o.stb_o;
wbm_sel_o   <= m_wb_o.sel_o;
wbm_cyc_o   <= m_wb_o.cyc_o;
m_wb_i.dat_i    <= wbm_dat_i;
m_wb_i.ack_i    <= wbm_ack_i;
m_wb_i.int_i    <= sys_int_i;
m_wb_i.clk_i <= sys_clk_i;
m_wb_i.rst_i <= sys_rst_i;
 
--
-- ??
--
    wb_adapter : core_wb_adapter 
    port map
    (
        dmem_i => s_dmem_i(1),
        wb_o   => m_wb_o,
        dmem_o => s_dmem_o(1),
        wb_i   => m_wb_i
    );
 
    s_dmem_i(0).ena_i <= '1';
    s_dmem_sel_o <= s_dmem_o(0).sel_o when s_dmem_o(0).we_o = '1' else (others => '0');
    s_dmem_ena_o <= not sys_rst_i and s_dmem_o(0).ena_o;
 
    dmem : sram_4en 
    generic map
    (
        WIDTH => CFG_DMEM_WIDTH,
        SIZE  => ram_size - 2
    )
    port map
    (
        dat_o => s_dmem_i(0).dat_i,
        dat_i => s_dmem_o(0).dat_o,
        adr_i => s_dmem_o(0).adr_o(ram_size - 1 downto 2),
        wre_i => s_dmem_sel_o,
        ena_i => s_dmem_ena_o,
        clk_i => sys_clk_i
    );
 
    decoder : core_address_decoder 
    generic map
    (
        G_NUM_SLAVES => CFG_NUM_SLAVES
    )
    port map
    (
        m_dmem_i => dmem_i,
        s_dmem_o => s_dmem_o,
        m_dmem_o => dmem_o,
        s_dmem_i => s_dmem_i,
        clk_i    => sys_clk_i
    );
 
    imem : sram 
    generic map
    (
        FNAME => "rom.mem",
        WIDTH => CFG_IMEM_WIDTH,
        SIZE  => rom_size - 2
    )
    port map
    (
        dat_o => imem_i.dat_i,
        dat_i => (others => '0'),
        adr_i => imem_o.adr_o(rom_size - 1 downto 2),
        wre_i => '0',
        ena_i => imem_o.ena_o,
        clk_i => sys_clk_i
    );
 
    core0 : core 
    port map
    (
        imem_o => imem_o,
        dmem_o => dmem_o,
        imem_i => imem_i,
        dmem_i => dmem_i,
        int_i  => sys_int_i,
        rst_i  => sys_rst_i,
        clk_i  => sys_clk_i
    );
end arch;

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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