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

Subversion Repositories tg68

[/] [tg68/] [trunk/] [VHDL/] [TG68.vhd] - Diff between revs 4 and 8

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

Rev 4 Rev 8
Line 1... Line 1...
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
--                                                                          --
--                                                                          --
-- This is the TOP-Level for TG68_fast to generate 68K Bus signals          --
-- This is the TOP-Level for TG68_fast to generate 68K Bus signals          --
--                                                                          --
--                                                                          --
-- Copyright (c) 2007 Tobias Gubener <tobiflex@opencores.org>               -- 
-- Copyright (c) 2007-2008 Tobias Gubener <tobiflex@opencores.org>          -- 
--                                                                          --
--                                                                          --
-- This source file is free software: you can redistribute it and/or modify --
-- This source file is free software: you can redistribute it and/or modify --
-- it under the terms of the GNU Lesser General Public License as published --
-- it under the terms of the GNU Lesser General Public License as published --
-- by the Free Software Foundation, either version 3 of the License, or     --
-- by the Free Software Foundation, either version 3 of the License, or     --
-- (at your option) any later version.                                      --
-- (at your option) any later version.                                      --
Line 19... Line 19...
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.    --
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.    --
--                                                                          --
--                                                                          --
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
--
--
 
-- Revision 1.02 2008/01/23
 
-- bugfix Timing
 
--
-- Revision 1.01 2007/11/28
-- Revision 1.01 2007/11/28
-- add MOVEP
-- add MOVEP
-- Bugfix Interrupt in MOVEQ
-- Bugfix Interrupt in MOVEQ
--
--
-- Revision 1.0 2007/11/05
-- Revision 1.0 2007/11/05
Line 53... Line 56...
        addr          : out std_logic_vector(31 downto 0);
        addr          : out std_logic_vector(31 downto 0);
        data_out      : out std_logic_vector(15 downto 0);
        data_out      : out std_logic_vector(15 downto 0);
        as            : out std_logic;
        as            : out std_logic;
        uds           : out std_logic;
        uds           : out std_logic;
        lds           : out std_logic;
        lds           : out std_logic;
        rw            : out std_logic
        rw            : out std_logic;
 
        drive_data    : out std_logic                           --enable for data_out driver
        );
        );
end TG68;
end TG68;
 
 
ARCHITECTURE logic OF TG68 IS
ARCHITECTURE logic OF TG68 IS
 
 
Line 94... Line 98...
   SIGNAL wr          : std_logic;
   SIGNAL wr          : std_logic;
   SIGNAL uds_in          : std_logic;
   SIGNAL uds_in          : std_logic;
   SIGNAL lds_in          : std_logic;
   SIGNAL lds_in          : std_logic;
   SIGNAL state       : std_logic_vector(1 downto 0);
   SIGNAL state       : std_logic_vector(1 downto 0);
   SIGNAL clkena          : std_logic;
   SIGNAL clkena          : std_logic;
 
   SIGNAL n_clk           : std_logic;
 
   SIGNAL cpuIPL      : std_logic_vector(2 downto 0);
 
 
 
 
BEGIN
BEGIN
 
 
 
        n_clk <= NOT clk;
 
 
TG68_fast_inst: TG68_fast
TG68_fast_inst: TG68_fast
        PORT MAP (
        PORT MAP (
                clk => not clk,                         -- : in std_logic;
                clk => n_clk,                   -- : in std_logic;
        reset => reset,                 -- : in std_logic;
        reset => reset,                 -- : in std_logic;
        clkena_in => clkena,    -- : in std_logic;
        clkena_in => clkena,    -- : in std_logic;
        data_in => data_in,     -- : in std_logic_vector(15 downto 0);
        data_in => data_in,     -- : in std_logic_vector(15 downto 0);
                IPL => IPL,                     -- : in std_logic_vector(2 downto 0);
                IPL => cpuIPL,                  -- : in std_logic_vector(2 downto 0);
        test_IPL => '0',                 -- : in std_logic;
        test_IPL => '0',                 -- : in std_logic;
        address => addr,                -- : out std_logic_vector(31 downto 0);
        address => addr,                -- : out std_logic_vector(31 downto 0);
        data_write => data_out, -- : out std_logic_vector(15 downto 0);
        data_write => data_out, -- : out std_logic_vector(15 downto 0);
        state_out => state,     -- : out std_logic_vector(1 downto 0);
        state_out => state,     -- : out std_logic_vector(1 downto 0);
        decodeOPC => decode,    -- : buffer std_logic;
        decodeOPC => decode,    -- : buffer std_logic;
                wr => wr,                               -- : out std_logic;
                wr => wr,                               -- : out std_logic;
                UDS => uds_in,                  -- : out std_logic;
                UDS => uds_in,                  -- : out std_logic;
                LDS => lds_in                   -- : out std_logic;
                LDS => lds_in                   -- : out std_logic;
        );
        );
 
 
--      clkena <= '1' WHEN clkena_in='1' AND ((clkena_e OR decode)='1')
 
--                                ELSE '0';
 
 
 
 
 
        PROCESS (clk)
        PROCESS (clk)
        BEGIN
        BEGIN
                IF rising_edge(clk) THEN
 
--                      IF clkena_in='1' AND ((clkena_e OR decode)='1') THEN
 
                        IF clkena_in='1' AND (clkena_e='1' OR state="01") THEN
                        IF clkena_in='1' AND (clkena_e='1' OR state="01") THEN
                                clkena <= '1';
                                clkena <= '1';
                        ELSE
                        ELSE
                                clkena <= '0';
                                clkena <= '0';
                        END IF;
                        END IF;
                END IF;
 
        END PROCESS;
        END PROCESS;
 
 
PROCESS (clk, reset, state, as_s, as_e, rw_s, rw_e, uds_s, uds_e, lds_s, lds_e)
PROCESS (clk, reset, state, as_s, as_e, rw_s, rw_e, uds_s, uds_e, lds_s, lds_e)
        BEGIN
        BEGIN
                IF state="01" THEN
                IF state="01" THEN
Line 177... Line 178...
                                                                 IF waitm='0' THEN
                                                                 IF waitm='0' THEN
                                                                        S_state <= "11";
                                                                        S_state <= "11";
                                                                 END IF;
                                                                 END IF;
                                        WHEN "11" =>
                                        WHEN "11" =>
                                                                 S_state <= "00";
                                                                 S_state <= "00";
 
                                                WHEN OTHERS => null;
                                END CASE;
                                END CASE;
                                                                 END IF;
                                                                 END IF;
                        END IF;
                        END IF;
                END IF;
                END IF;
                IF reset='0' THEN
                IF reset='0' THEN
                        as_e <= '1';
                        as_e <= '1';
                        rw_e <= '1';
                        rw_e <= '1';
                        uds_e <= '1';
                        uds_e <= '1';
                        lds_e <= '1';
                        lds_e <= '1';
                        clkena_e <= '0';
                        clkena_e <= '0';
 
                        cpuIPL <= "111";
 
                        drive_data <= '0';
                ELSIF falling_edge(clk) THEN
                ELSIF falling_edge(clk) THEN
                IF clkena_in='1' THEN
                IF clkena_in='1' THEN
                                as_e <= '1';
                                as_e <= '1';
                                rw_e <= '1';
                                rw_e <= '1';
                                uds_e <= '1';
                                uds_e <= '1';
                                lds_e <= '1';
                                lds_e <= '1';
                                clkena_e <= '0';
                                clkena_e <= '0';
 
                                drive_data <= '0';
                                CASE S_state IS
                                CASE S_state IS
                                        WHEN "00" =>
                                        WHEN "00" => null;
                                        WHEN "01" =>
                                        WHEN "01" => drive_data <= NOT wr;
                                        WHEN "10" => as_e <= '0';
                                        WHEN "10" => as_e <= '0';
                                                                 uds_e <= uds_in;
                                                                 uds_e <= uds_in;
                                                                 lds_e <= lds_in;
                                                                 lds_e <= lds_in;
 
                                                                 cpuIPL <= IPL;
 
                                                                 drive_data <= NOT wr;
                                                                 IF state="01" THEN
                                                                 IF state="01" THEN
                                                                         clkena_e <= '1';
                                                                         clkena_e <= '1';
                                                                         waitm <= '0';
                                                                         waitm <= '0';
                                                                 ELSE
                                                                 ELSE
                                                                         clkena_e <= NOT dtack;
                                                                         clkena_e <= NOT dtack;
                                                                         waitm <= dtack;
                                                                         waitm <= dtack;
                                                                 END IF;
                                                                 END IF;
                                        WHEN "11" =>
                                        WHEN OTHERS => null;
                                END CASE;
                                END CASE;
                        END IF;
                        END IF;
                END IF;
                END IF;
        END PROCESS;
        END PROCESS;
END;
END;
 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.