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

Subversion Repositories c16

[/] [c16/] [trunk/] [vhdl/] [cpu.vhd] - Diff between revs 9 and 26

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

Rev 9 Rev 26
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;
 
 
use work.cpu_pack.ALL;
use work.cpu_pack.ALL;
 
 
library UNISIM;
library UNISIM;
use UNISIM.VComponents.all;
use UNISIM.VComponents.all;
 
 
entity cpu is
entity cpu is
        PORT(   CLK_I                   : in  STD_LOGIC;
        PORT(   CLK_I                   : in  STD_LOGIC;
                        SWITCH                  : in  STD_LOGIC_VECTOR (9 downto 0);
                        SWITCH                  : in  STD_LOGIC_VECTOR (9 downto 0);
 
 
                        SER_IN                  : in  STD_LOGIC;
                        SER_IN                  : in  STD_LOGIC;
                        SER_OUT                 : out STD_LOGIC;
                        SER_OUT                 : out STD_LOGIC;
 
 
                        TEMP_SPO                : in  STD_LOGIC;
                        TEMP_SPO                : in  STD_LOGIC;
                        TEMP_SPI                : out STD_LOGIC;
                        TEMP_SPI                : out STD_LOGIC;
 
 
                        TEMP_CE                 : out STD_LOGIC;
                        TEMP_CE                 : out STD_LOGIC;
                        TEMP_SCLK               : out STD_LOGIC;
                        TEMP_SCLK               : out STD_LOGIC;
                        SEG1                    : out STD_LOGIC_VECTOR (7 downto 0);
                        SEG1                    : out STD_LOGIC_VECTOR (7 downto 0);
                        SEG2                    : out STD_LOGIC_VECTOR (7 downto 0);
                        SEG2                    : out STD_LOGIC_VECTOR (7 downto 0);
                        LED                             : out STD_LOGIC_VECTOR( 7 downto 0);
                        LED                             : out STD_LOGIC_VECTOR( 7 downto 0);
 
 
                        XM_ADR                  : out STD_LOGIC_VECTOR(15 downto 0);
                        XM_ADR                  : out STD_LOGIC_VECTOR(15 downto 0);
                        XM_RDAT                 : in  STD_LOGIC_VECTOR( 7 downto 0);
                        XM_RDAT                 : in  STD_LOGIC_VECTOR( 7 downto 0);
                        XM_WDAT                 : out STD_LOGIC_VECTOR( 7 downto 0);
                        XM_WDAT                 : out STD_LOGIC_VECTOR( 7 downto 0);
                        XM_WE                   : out STD_LOGIC;
                        XM_WE                   : out STD_LOGIC;
                        XM_CE                   : out STD_LOGIC
                        XM_CE                   : out STD_LOGIC
            );
            );
end cpu;
end cpu;
 
 
architecture behavioral of cpu is
architecture behavioral of cpu is
 
 
        COMPONENT bin_to_7segment
        COMPONENT bin_to_7segment
        PORT(   CLK_I : IN std_logic;
        PORT(   CLK_I : IN std_logic;
                        PC    : IN std_logic_vector(15 downto 0);
                        PC    : IN std_logic_vector(15 downto 0);
                        SEG1  : OUT std_logic_vector(7 downto 1);
                        SEG1  : OUT std_logic_vector(7 downto 1);
                        SEG2  : OUT std_logic_vector(7 downto 0)
                        SEG2  : OUT std_logic_vector(7 downto 0)
                );
                );
        END COMPONENT;
        END COMPONENT;
 
 
        COMPONENT cpu_engine
        COMPONENT cpu_engine
        PORT(   CLK_I    : in  std_logic;
        PORT(   CLK_I    : in  std_logic;
                        DAT_I    : in  std_logic_vector( 7 downto 0);
                        DAT_I    : in  std_logic_vector( 7 downto 0);
                        DAT_O    : out std_logic_vector( 7 downto 0);
                        DAT_O    : out std_logic_vector( 7 downto 0);
                        RST_I    : in  std_logic;
                        RST_I    : in  std_logic;
                        ACK_I    : in  std_logic;
                        ACK_I    : in  std_logic;
                        ADR_O    : out std_logic_vector(15 downto 0);
                        ADR_O    : out std_logic_vector(15 downto 0);
                        CYC_O    : out std_logic;
                        CYC_O    : out std_logic;
                        STB_O    : out std_logic;
                        STB_O    : out std_logic;
                        TGA_O    : out std_logic_vector(0 downto 0);
                        TGA_O    : out std_logic_vector(0 downto 0);
                        WE_O     : out std_logic;
                        WE_O     : out std_logic;
 
 
                        INT      : in  std_logic;
                        INT      : in  std_logic;
                        HALT     : out std_logic;
                        HALT     : out std_logic;
 
 
                        -- debug signals
                        -- debug signals
                        --
                        --
                        Q_PC   : out std_logic_vector(15 downto 0);
                        Q_PC   : out std_logic_vector(15 downto 0);
                        Q_OPC  : out std_logic_vector( 7 downto 0);
                        Q_OPC  : out std_logic_vector( 7 downto 0);
                        Q_CAT  : out op_category;
                        Q_CAT  : out op_category;
                        Q_IMM  : out std_logic_vector(15 downto 0);
                        Q_IMM  : out std_logic_vector(15 downto 0);
                        Q_CYC  : out cycle;
                        Q_CYC  : out cycle;
 
 
                        -- select signals
                        -- select signals
                        Q_SX    : out std_logic_vector(1 downto 0);
                        Q_SX    : out std_logic_vector(1 downto 0);
                        Q_SY    : out std_logic_vector(3 downto 0);
                        Q_SY    : out std_logic_vector(3 downto 0);
                        Q_OP    : out std_logic_vector(4 downto 0);
                        Q_OP    : out std_logic_vector(4 downto 0);
                        Q_SA    : out std_logic_vector(4 downto 0);
                        Q_SA    : out std_logic_vector(4 downto 0);
                        Q_SMQ   : out std_logic;
                        Q_SMQ   : out std_logic;
 
 
                        -- write enable/select signal
                        -- write enable/select signal
                        Q_WE_RR  : out std_logic;
                        Q_WE_RR  : out std_logic;
                        Q_WE_LL  : out std_logic;
                        Q_WE_LL  : out std_logic;
                        Q_WE_SP  : out SP_OP;
                        Q_WE_SP  : out SP_OP;
 
 
                        Q_RR     : out std_logic_vector(15 downto 0);
                        Q_RR     : out std_logic_vector(15 downto 0);
                        Q_LL     : out std_logic_vector(15 downto 0);
                        Q_LL     : out std_logic_vector(15 downto 0);
                        Q_SP     : out std_logic_vector(15 downto 0)
                        Q_SP     : out std_logic_vector(15 downto 0)
                );
                );
        END COMPONENT;
        END COMPONENT;
 
 
        COMPONENT input_output
        COMPONENT input_output
        PORT(   CLK_I        : IN std_logic;
        PORT(   CLK_I        : IN std_logic;
                        CYC_I        : IN  std_logic;
                        CYC_I        : IN  std_logic;
                        RST_O        : OUT std_logic;
                        RST_O        : OUT std_logic;
                        STB_I        : IN  std_logic;
                        STB_I        : IN  std_logic;
                        ACK_O        : OUT std_logic;
                        ACK_O        : OUT std_logic;
                        IO           : IN  std_logic;
                        IO           : IN  std_logic;
                        WE_I         : IN  std_logic;
                        WE_I         : IN  std_logic;
                        ADR_I        : IN  std_logic_vector(7 downto 0);
                        ADR_I        : IN  std_logic_vector(7 downto 0);
 
 
                        TEMP_SPO     : IN  std_logic;
                        TEMP_SPO     : IN  std_logic;
                        TEMP_SPI     : OUT std_logic;
                        TEMP_SPI     : OUT std_logic;
                        TEMP_CE      : OUT std_logic;
                        TEMP_CE      : OUT std_logic;
                        TEMP_SCLK    : OUT std_logic;
                        TEMP_SCLK    : OUT std_logic;
 
 
                        SER_IN       : IN  std_logic;
                        SER_IN       : IN  std_logic;
                        SER_OUT      : OUT std_logic;
                        SER_OUT      : OUT std_logic;
 
 
                        SWITCH       : IN  std_logic_vector(9 downto 0);
                        SWITCH       : IN  std_logic_vector(9 downto 0);
                        LED          : OUT std_logic_vector(7 downto 0);
                        LED          : OUT std_logic_vector(7 downto 0);
 
 
                        IO_WDAT      : IN  std_logic_vector(7 downto 0);
                        IO_WDAT      : IN  std_logic_vector(7 downto 0);
                        IO_RDAT      : OUT std_logic_vector(7 downto 0);
                        IO_RDAT      : OUT std_logic_vector(7 downto 0);
                        INT          : OUT std_logic;
                        INT          : OUT std_logic;
                        HALT         : in  std_logic
                        HALT         : in  std_logic
                );
                );
        END COMPONENT;
        END COMPONENT;
 
 
        signal CLR      : std_logic;
        signal CLR      : std_logic;
 
 
        signal ADR      : std_logic_vector(15 downto 0);
        signal ADR      : std_logic_vector(15 downto 0);
        signal CYC      : std_logic;
        signal CYC      : std_logic;
        signal STB      : std_logic;
        signal STB      : std_logic;
        signal XM_STB   : std_logic;
        signal XM_STB   : std_logic;
        signal IO_STB   : std_logic;
        signal IO_STB   : std_logic;
        signal ACK      : std_logic;
        signal ACK      : std_logic;
        signal XM_ACK   : std_logic;
        signal XM_ACK   : std_logic;
        signal IO_ACK   : std_logic;
        signal IO_ACK   : std_logic;
 
 
        signal HALT     : std_logic;
        signal HALT     : std_logic;
        signal INT      : std_logic;
        signal INT      : std_logic;
        signal IO       : std_logic;
        signal IO       : std_logic;
        signal WE       : std_logic;
        signal WE       : std_logic;
        signal IO_RDAT  : std_logic_vector( 7 downto 0);
        signal IO_RDAT  : std_logic_vector( 7 downto 0);
        signal WDAT     : std_logic_vector( 7 downto 0);
        signal WDAT     : std_logic_vector( 7 downto 0);
        signal RDAT     : std_logic_vector( 7 downto 0);
        signal RDAT     : std_logic_vector( 7 downto 0);
 
 
        signal PC       : std_logic_vector(15 downto 0);
        signal PC       : std_logic_vector(15 downto 0);
        signal Q_C_SX    : std_logic_vector(1 downto 0);
        signal Q_C_SX    : std_logic_vector(1 downto 0);
        signal Q_C_SY    : std_logic_vector(3 downto 0);
        signal Q_C_SY    : std_logic_vector(3 downto 0);
        signal Q_C_OP    : std_logic_vector(4 downto 0);
        signal Q_C_OP    : std_logic_vector(4 downto 0);
        signal Q_C_SA    : std_logic_vector(4 downto 0);
        signal Q_C_SA    : std_logic_vector(4 downto 0);
        signal Q_C_SMQ   : std_logic;
        signal Q_C_SMQ   : std_logic;
 
 
        signal Q_C_WE_RR : std_logic;
        signal Q_C_WE_RR : std_logic;
        signal Q_C_WE_LL : std_logic;
        signal Q_C_WE_LL : std_logic;
        signal Q_C_WE_SP : SP_OP;
        signal Q_C_WE_SP : SP_OP;
 
 
        signal Q_C_RR    : std_logic_vector(15 downto 0);
        signal Q_C_RR    : std_logic_vector(15 downto 0);
        signal Q_C_LL    : std_logic_vector(15 downto 0);
        signal Q_C_LL    : std_logic_vector(15 downto 0);
        signal Q_C_SP    : std_logic_vector(15 downto 0);
        signal Q_C_SP    : std_logic_vector(15 downto 0);
 
 
        signal Q_C_OPC   : std_logic_vector( 7 downto 0);
        signal Q_C_OPC   : std_logic_vector( 7 downto 0);
        signal Q_C_CAT   : op_category;
        signal Q_C_CAT   : op_category;
        signal Q_C_IMM   : std_logic_vector(15 downto 0);
        signal Q_C_IMM   : std_logic_vector(15 downto 0);
        signal Q_C_CYC   : cycle;
        signal Q_C_CYC   : cycle;
 
 
begin
begin
 
 
        SEG1(0) <= HALT;
        SEG1(0) <= HALT;
        XM_ADR  <= ADR;
        XM_ADR  <= ADR;
        XM_WDAT <= WDAT;
        XM_WDAT <= WDAT;
        XM_WE   <= WE;
        XM_WE   <= WE;
        XM_STB  <= STB and not IO;
        XM_STB  <= STB and not IO;
        IO_STB  <= STB and IO;
        IO_STB  <= STB and IO;
        XM_ACK  <= XM_STB;
        XM_ACK  <= XM_STB;
        XM_CE   <= CYC and not IO;
        XM_CE   <= CYC and not IO;
        RDAT    <= IO_RDAT when (IO = '1') else XM_RDAT;
        RDAT    <= IO_RDAT when (IO = '1') else XM_RDAT;
        ACK     <= IO_ACK  when (IO = '1') else XM_ACK;
        ACK     <= IO_ACK  when (IO = '1') else XM_ACK;
 
 
        seg7: bin_to_7segment
        seg7: bin_to_7segment
        PORT MAP(       CLK_I => CLK_I,
        PORT MAP(       CLK_I => CLK_I,
                                PC    => PC,
                                PC    => PC,
                                SEG1  => SEG1(7 downto 1),              -- SEG1(0) is HALT
                                SEG1  => SEG1(7 downto 1),              -- SEG1(0) is HALT
                                SEG2  => SEG2
                                SEG2  => SEG2
                        );
                        );
 
 
        eng: cpu_engine
        eng: cpu_engine
        PORT MAP(       CLK_I     => CLK_I,
        PORT MAP(       CLK_I     => CLK_I,
                                DAT_I     => RDAT,
                                DAT_I     => RDAT,
                                DAT_O     => WDAT,
                                DAT_O     => WDAT,
                                RST_I     => CLR,       -- SW-1 (RESET)
                                RST_I     => CLR,       -- SW-1 (RESET)
                                ACK_I     => ACK,
                                ACK_I     => ACK,
                                CYC_O     => CYC,
                                CYC_O     => CYC,
                                STB_O     => STB,
                                STB_O     => STB,
                                ADR_O     => ADR,
                                ADR_O     => ADR,
                                TGA_O(0)  => IO,
                                TGA_O(0)  => IO,
                                WE_O      => WE,
                                WE_O      => WE,
 
 
                                INT       => INT,
                                INT       => INT,
                                HALT      => HALT,
                                HALT      => HALT,
 
 
                                Q_PC      => PC,
                                Q_PC      => PC,
                                Q_OPC     => Q_C_OPC,
                                Q_OPC     => Q_C_OPC,
                                Q_CAT     => Q_C_CAT,
                                Q_CAT     => Q_C_CAT,
                                Q_IMM     => Q_C_IMM,
                                Q_IMM     => Q_C_IMM,
                                Q_CYC     => Q_C_CYC,
                                Q_CYC     => Q_C_CYC,
 
 
                                Q_SX      => Q_C_SX,
                                Q_SX      => Q_C_SX,
                                Q_SY      => Q_C_SY,
                                Q_SY      => Q_C_SY,
                                Q_OP      => Q_C_OP,
                                Q_OP      => Q_C_OP,
                                Q_SA      => Q_C_SA,
                                Q_SA      => Q_C_SA,
                                Q_SMQ     => Q_C_SMQ,
                                Q_SMQ     => Q_C_SMQ,
 
 
                                Q_WE_RR   => Q_C_WE_RR,
                                Q_WE_RR   => Q_C_WE_RR,
                                Q_WE_LL   => Q_C_WE_LL,
                                Q_WE_LL   => Q_C_WE_LL,
                                Q_WE_SP   => Q_C_WE_SP,
                                Q_WE_SP   => Q_C_WE_SP,
 
 
                                Q_RR      => Q_C_RR,
                                Q_RR      => Q_C_RR,
                                Q_LL      => Q_C_LL,
                                Q_LL      => Q_C_LL,
                                Q_SP      => Q_C_SP
                                Q_SP      => Q_C_SP
                        );
                        );
 
 
        ino: input_output
        ino: input_output
        PORT MAP(       CLK_I        => CLK_I,
        PORT MAP(       CLK_I        => CLK_I,
                                CYC_I        => CYC,
                                CYC_I        => CYC,
                                RST_O        => CLR,
                                RST_O        => CLR,
                                STB_I        => IO_STB,
                                STB_I        => IO_STB,
                                ACK_O        => IO_ACK,
                                ACK_O        => IO_ACK,
 
 
                                TEMP_SPO     => TEMP_SPO,
                                TEMP_SPO     => TEMP_SPO,
                                TEMP_SPI     => TEMP_SPI,
                                TEMP_SPI     => TEMP_SPI,
                                TEMP_CE      => TEMP_CE,
                                TEMP_CE      => TEMP_CE,
                                TEMP_SCLK    => TEMP_SCLK,
                                TEMP_SCLK    => TEMP_SCLK,
 
 
                                SER_IN       => SER_IN,
                                SER_IN       => SER_IN,
                                SER_OUT      => SER_OUT,
                                SER_OUT      => SER_OUT,
 
 
                                SWITCH       => SWITCH,
                                SWITCH       => SWITCH,
                                LED          => LED,
                                LED          => LED,
 
 
                                IO           => IO,
                                IO           => IO,
                                WE_I         => WE,
                                WE_I         => WE,
                                ADR_I        => ADR(7 downto 0),
                                ADR_I        => ADR(7 downto 0),
                                IO_RDAT      => IO_RDAT,
                                IO_RDAT      => IO_RDAT,
                                IO_WDAT      => WDAT,
                                IO_WDAT      => WDAT,
                                INT          => INT,
                                INT          => INT,
                                HALT         => HALT
                                HALT         => HALT
                        );
                        );
 
 
end behavioral;
end behavioral;
 
 

powered by: WebSVN 2.1.0

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