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

Subversion Repositories mblite

[/] [mblite/] [trunk/] [hw/] [core/] [core_wb_adapter.vhd] - Diff between revs 2 and 6

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 6
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
--
--
--      Input file         : core_wb_adapter.vhd
--      Input file         : core_wb_adapter.vhd
--      Design name        : core_wb_adapter.vhd
--      Design name        : core_wb_adapter.vhd
--      Author             : Tamar Kranenburg
--      Author             : Tamar Kranenburg
--      Company            : Delft University of Technology
--      Company            : Delft University of Technology
--                         : Faculty EEMCS, Department ME&CE
--                         : Faculty EEMCS, Department ME&CE
--                         : Systems and Circuits group
--                         : Systems and Circuits group
--
--
--      Description        : Wishbone adapter for the MB-Lite microprocessor. The data output
--      Description        : Wishbone adapter for the MB-Lite microprocessor. The data output
--                           is registered for multicycle transfers. This adapter implements
--                           is registered for multicycle transfers. This adapter implements
--                           the synchronous Wishbone Bus protocol, Rev3B.
--                           the synchronous Wishbone Bus protocol, Rev3B.
--
--
----------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------
 
 
LIBRARY ieee;
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
USE ieee.std_logic_unsigned.ALL;
 
 
LIBRARY mblite;
LIBRARY mblite;
USE mblite.config_Pkg.ALL;
USE mblite.config_Pkg.ALL;
USE mblite.core_Pkg.ALL;
USE mblite.core_Pkg.ALL;
USE mblite.std_Pkg.ALL;
USE mblite.std_Pkg.ALL;
 
 
ENTITY core_wb_adapter IS PORT
ENTITY core_wb_adapter IS PORT
(
(
    dmem_i : OUT dmem_in_type;
    dmem_i : OUT dmem_in_type;
    wb_o   : OUT wb_mst_out_type;
    wb_o   : OUT wb_mst_out_type;
    dmem_o : IN dmem_out_type;
    dmem_o : IN dmem_out_type;
    wb_i   : IN wb_mst_in_type
    wb_i   : IN wb_mst_in_type
);
);
END core_wb_adapter;
END core_wb_adapter;
 
 
ARCHITECTURE arch OF core_wb_adapter IS
ARCHITECTURE arch OF core_wb_adapter IS
 
 
    SIGNAL r_cyc_o : std_ulogic;
    SIGNAL r_cyc_o : std_logic;
    SIGNAL rin_cyc_o : std_ulogic;
    SIGNAL rin_cyc_o : std_logic;
    SIGNAL r_data, rin_data : std_ulogic_vector(CFG_DMEM_WIDTH - 1 DOWNTO 0);
    SIGNAL r_data, rin_data : std_logic_vector(CFG_DMEM_WIDTH - 1 DOWNTO 0);
    SIGNAL s_wait : std_ulogic;
    SIGNAL s_wait : std_logic;
 
 
BEGIN
BEGIN
 
 
    -- Direct input-output connections
    -- Direct input-output connections
    wb_o.adr_o   <= dmem_o.adr_o;
    wb_o.adr_o   <= dmem_o.adr_o;
    wb_o.sel_o   <= dmem_o.sel_o;
    wb_o.sel_o   <= dmem_o.sel_o;
    wb_o.we_o    <= dmem_o.we_o;
    wb_o.we_o    <= dmem_o.we_o;
    dmem_i.dat_i <= wb_i.dat_i;
    dmem_i.dat_i <= wb_i.dat_i;
 
 
    -- synchronous bus control connections
    -- synchronous bus control connections
    wb_o.cyc_o <= r_cyc_o OR wb_i.ack_i;
    wb_o.cyc_o <= r_cyc_o OR wb_i.ack_i;
    wb_o.stb_o <= r_cyc_o;
    wb_o.stb_o <= r_cyc_o;
 
 
    -- asynchronous core enable connection
    -- asynchronous core enable connection
    dmem_i.ena_i <= '0' WHEN (dmem_o.ena_o = '1' AND rin_cyc_o = '1') OR s_wait = '1' ELSE '1';
    dmem_i.ena_i <= '0' WHEN (dmem_o.ena_o = '1' AND rin_cyc_o = '1') OR s_wait = '1' ELSE '1';
    wb_o.dat_o   <= rin_data;
    wb_o.dat_o   <= rin_data;
 
 
    -- logic for wishbone master
    -- logic for wishbone master
    wb_adapter_comb: PROCESS(wb_i, dmem_o, r_cyc_o, r_data)
    wb_adapter_comb: PROCESS(wb_i, dmem_o, r_cyc_o, r_data)
    BEGIN
    BEGIN
 
 
        IF wb_i.rst_i = '1' THEN
        IF wb_i.rst_i = '1' THEN
            -- reset bus
            -- reset bus
            rin_data <= r_data;
            rin_data <= r_data;
            rin_cyc_o <= '0';
            rin_cyc_o <= '0';
            s_wait <= '0';
            s_wait <= '0';
        ELSIF r_cyc_o = '1' AND wb_i.ack_i = '1' THEN
        ELSIF r_cyc_o = '1' AND wb_i.ack_i = '1' THEN
            -- terminate wishbone cycle
            -- terminate wishbone cycle
            rin_data <= r_data;
            rin_data <= r_data;
            rin_cyc_o <= '0';
            rin_cyc_o <= '0';
            s_wait <= '0';
            s_wait <= '0';
        ELSIF dmem_o.ena_o = '1' AND wb_i.ack_i = '1' THEN
        ELSIF dmem_o.ena_o = '1' AND wb_i.ack_i = '1' THEN
            -- wishbone bus is occuppied
            -- wishbone bus is occuppied
            rin_data <= r_data;
            rin_data <= r_data;
            rin_cyc_o <= '1';
            rin_cyc_o <= '1';
            s_wait <= '1';
            s_wait <= '1';
        ELSIF r_cyc_o = '0' AND dmem_o.ena_o = '1' AND wb_i.ack_i = '0' THEN
        ELSIF r_cyc_o = '0' AND dmem_o.ena_o = '1' AND wb_i.ack_i = '0' THEN
            -- start wishbone cycle
            -- start wishbone cycle
            rin_data <= dmem_o.dat_o;
            rin_data <= dmem_o.dat_o;
            rin_cyc_o <= '1';
            rin_cyc_o <= '1';
            s_wait <= '0';
            s_wait <= '0';
        ELSE
        ELSE
            -- maintain wishbone cycle
            -- maintain wishbone cycle
            rin_data <= r_data;
            rin_data <= r_data;
            rin_cyc_o <= r_cyc_o;
            rin_cyc_o <= r_cyc_o;
            s_wait <= '0';
            s_wait <= '0';
        END IF;
        END IF;
 
 
    END PROCESS;
    END PROCESS;
 
 
    wb_adapter_seq: PROCESS(wb_i.clk_i)
    wb_adapter_seq: PROCESS(wb_i.clk_i)
    BEGIN
    BEGIN
        IF rising_edge(wb_i.clk_i) THEN
        IF rising_edge(wb_i.clk_i) THEN
            r_cyc_o <= rin_cyc_o;
            r_cyc_o <= rin_cyc_o;
            r_data <= rin_data;
            r_data <= rin_data;
        END IF;
        END IF;
    END PROCESS;
    END PROCESS;
 
 
END arch;
END arch;
 
 

powered by: WebSVN 2.1.0

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