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

Subversion Repositories c16

[/] [c16/] [trunk/] [vhdl/] [cpu_engine.vhd] - Diff between revs 2 and 9

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

Rev 2 Rev 9
Line 9... Line 9...
--use UNISIM.VComponents.all;
--use UNISIM.VComponents.all;
 
 
use work.cpu_pack.ALL;
use work.cpu_pack.ALL;
 
 
entity cpu_engine is
entity cpu_engine is
        PORT(   CLK_I    : in  std_logic;
        PORT(   -- WISHBONE interface
                        T2       : out std_logic;
                        CLK_I   : in  std_logic;
                        CLR      : in  std_logic;
                        DAT_I   : in  std_logic_vector( 7 downto 0);
 
                        DAT_O   : out std_logic_vector( 7 downto 0);
 
                        RST_I   : in  std_logic;
 
                        ACK_I   : in  std_logic;
 
                        ADR_O   : out std_logic_vector(15 downto 0);
 
                        CYC_O   : out std_logic;
 
                        STB_O   : out std_logic;
 
                        TGA_O   : out std_logic_vector( 0 downto 0);              -- '1' if I/O
 
                        WE_O    : out std_logic;
 
 
 
                        INT     : in  std_logic;
 
                        HALT    : out std_logic;
 
 
 
                        -- 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;
 
 
                        -- input/output
 
                        INT      : in  std_logic;
 
                        IO_ADR   : out std_logic_vector(7 downto 0);
 
                        IO_RD    : out std_logic;
 
                        IO_WR    : out std_logic;
 
                        IO_RDAT  : in  std_logic_vector( 7 downto 0);
 
 
 
                        -- external memory
 
                        XM_ADR  : out std_logic_vector(15 downto 0);
 
                        XM_RDAT : in  std_logic_vector( 7 downto 0);
 
                        XM_WDAT : out std_logic_vector( 7 downto 0);
 
                        XM_WE   : out std_logic;
 
                        XM_CE   : out std_logic;
 
 
 
                        -- 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);
Line 46... Line 46...
                        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)
                        HALT       : out std_logic
 
                );
                );
end cpu_engine;
end cpu_engine;
 
 
architecture Behavioral of cpu_engine is
architecture Behavioral of cpu_engine is
 
 
 
        -- Unfortunately, the on-chip memory needs a clock to read data.
 
        -- Therefore we cannot make it wishbone compliant without a speed penalty.
 
        -- We avoid this problem by making the on-chip memory part of the CPU.
 
        -- However, as a consequence, you cannot DMA to the on-chip memory.
 
        --
 
        -- The on-chip memory is 8K, so that you can run a test SoC without external
 
        -- memory. For bigger applications, you should use external ROM and RAM and
 
        -- remove the internal memory entirely (setting EXTERN accordingly).
 
        --
        COMPONENT memory
        COMPONENT memory
        PORT(   CLK_I : IN  std_logic;
        PORT(   CLK_I : IN  std_logic;
                        T2    : IN  std_logic;
                        T2    : IN  std_logic;
                        CE    : IN  std_logic;
                        CE    : IN  std_logic;
                        PC    : IN  std_logic_vector(15 downto 0);
                        PC    : IN  std_logic_vector(15 downto 0);
Line 102... Line 110...
                        D_SMQ   : out std_logic;
                        D_SMQ   : out std_logic;
 
 
                        -- write enable/select signal
                        -- write enable/select signal
                        D_WE_RR  : out std_logic;
                        D_WE_RR  : out std_logic;
                        D_WE_LL  : out std_logic;
                        D_WE_LL  : out std_logic;
                        D_WE_M   : out std_logic;
 
                        D_WE_SP  : out SP_OP;
                        D_WE_SP  : out SP_OP;
 
                        D_RD_O   : out std_logic;
 
                        D_WE_O   : out std_logic;
 
                        D_LOCK   : out std_logic;
 
 
                        -- input/output
                        -- input/output
                        IO_RD    : out std_logic;
                        D_IO     : out std_logic;
                        IO_WR    : out std_logic;
 
 
 
                        PC_OP  : out std_logic_vector(2 downto 0);
                        PC_OP  : out std_logic_vector(2 downto 0);
 
 
                        LAST_M : out std_logic;
                        LAST_M : out std_logic;
                        HLT    : out std_logic
                        HLT    : out std_logic
Line 136... Line 145...
                        -- write enable/select signal
                        -- write enable/select signal
                        WE_RR  : in  std_logic;
                        WE_RR  : in  std_logic;
                        WE_LL  : in  std_logic;
                        WE_LL  : in  std_logic;
                        WE_SP  : in  SP_OP;
                        WE_SP  : in  SP_OP;
 
 
                        -- data in signals
 
                        IMM : in  std_logic_vector(15 downto 0);         -- immediate data
                        IMM : in  std_logic_vector(15 downto 0);         -- immediate data
                        M_RDAT : in  std_logic_vector( 7 downto 0);              -- memory data
                        RDAT : in  std_logic_vector( 7 downto 0);                -- data from memory/IO
 
                        ADR   : out std_logic_vector(15 downto 0);               -- memory/IO address
                        -- memory control signals
                        MQ    : out std_logic_vector( 7 downto 0);               -- data to memory/IO
                        ADR   : out std_logic_vector(15 downto 0);
 
                        MQ    : out std_logic_vector( 7 downto 0);
 
 
 
                        -- input/output
 
                        IO_RDAT  : in  std_logic_vector( 7 downto 0);
 
 
 
                        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;
 
 
        -- global signals
        -- global signals
        signal CE      : std_logic;
        signal CE      : std_logic;
        signal LT2     : std_logic;
        signal T2      : std_logic;
 
 
        -- memory signals
        -- memory signals
        signal  MEM_WDAT : std_logic_vector(7 downto 0);
        signal  WDAT     : std_logic_vector(7 downto 0);
        signal  MEM_RDAT : std_logic_vector(7 downto 0);
        signal  RDAT     : std_logic_vector(7 downto 0);
        signal  M_PC     : std_logic_vector(15 downto 0);
        signal  M_PC     : std_logic_vector(15 downto 0);
        signal  M_OPC    : std_logic_vector(7 downto 0);
        signal  M_OPC    : std_logic_vector(7 downto 0);
 
 
        -- decoder signals
        -- decoder signals
        --
        --
Line 171... Line 174...
        signal  D_OPC    : std_logic_vector(7 downto 0);
        signal  D_OPC    : std_logic_vector(7 downto 0);
        signal  D_CYC    : cycle;
        signal  D_CYC    : cycle;
        signal  D_PC     : std_logic_vector(15 downto 0);        -- debug signal
        signal  D_PC     : std_logic_vector(15 downto 0);        -- debug signal
        signal  D_PC_OP  : std_logic_vector( 2 downto 0);
        signal  D_PC_OP  : std_logic_vector( 2 downto 0);
        signal  D_LAST_M : std_logic;
        signal  D_LAST_M : std_logic;
        signal  D_IO_RD  : std_logic;
        signal  D_IO     : std_logic;
        signal  D_IO_WR  : std_logic;
 
        -- select signals
        -- select signals
        signal  D_SX    : std_logic_vector(1 downto 0);
        signal  D_SX    : std_logic_vector(1 downto 0);
        signal  D_SY    : std_logic_vector(3 downto 0);
        signal  D_SY    : std_logic_vector(3 downto 0);
        signal  D_OP    : std_logic_vector(4 downto 0);
        signal  D_OP    : std_logic_vector(4 downto 0);
        signal  D_SA    : std_logic_vector(4 downto 0);
        signal  D_SA    : std_logic_vector(4 downto 0);
        signal  D_SMQ   : std_logic;
        signal  D_SMQ   : std_logic;
 
 
        -- write enable/select signals
        -- write enable/select signals
        signal  D_WE_RR  : std_logic;
        signal  D_WE_RR  : std_logic;
        signal  D_WE_LL  : std_logic;
        signal  D_WE_LL  : std_logic;
        signal  D_WE_SP  : SP_OP;
        signal  D_WE_SP  : SP_OP;
        signal  D_MEM_WE : std_logic;
        signal  D_RD_O   : std_logic;
        signal  MEM_WE   : std_logic;
        signal  D_WE_O   : std_logic;
 
        signal  D_LOCK   : std_logic;   -- first cycle
 
 
 
        signal  LM_WE    : std_logic;
 
 
        -- core signals
        -- core signals
        --
        --
        signal  C_IMM  : std_logic_vector(15 downto 0);
        signal  C_IMM  : std_logic_vector(15 downto 0);
        signal  ADR    : std_logic_vector(15 downto 0);
        signal  ADR    : std_logic_vector(15 downto 0);
Line 213... Line 220...
        signal  C_WE_SP  : SP_OP;
        signal  C_WE_SP  : SP_OP;
 
 
        signal XM_OPC    : std_logic_vector(7 downto 0);
        signal XM_OPC    : std_logic_vector(7 downto 0);
        signal LM_OPC    : std_logic_vector(7 downto 0);
        signal LM_OPC    : std_logic_vector(7 downto 0);
        signal LM_RDAT   : std_logic_vector(7 downto 0);
        signal LM_RDAT   : std_logic_vector(7 downto 0);
        signal LXM_RDAT   : std_logic_vector(7 downto 0);
        signal XM_RDAT   : std_logic_vector(7 downto 0);
        signal OPCS      : std_logic;
        signal  C_IO     : std_logic;
        signal RDATS     : std_logic;
        signal  C_RD_O   : std_logic;
 
        signal  C_WE_O   : std_logic;
 
 
 
        -- signals to remember, whether the previous read cycle
 
        -- addressed internal memory or external memory
 
        --
 
        signal OPCS      : std_logic;   -- '1' if opcode from external memory
 
        signal RDATS     : std_logic;   -- '1' if data   from external memory
 
        signal EXTERN    : std_logic;   -- '1' if opcode or data from external memory
 
 
begin
begin
 
 
        memo: memory
        memo: memory
        PORT MAP(       CLK_I => CLK_I,
        PORT MAP(       CLK_I => CLK_I,
                                T2    => LT2,
                                T2    => T2,
                                CE    => CE,
                                CE    => CE,
 
 
                                -- read in T1
                                -- read in T1
                                PC    => M_PC,
                                PC    => M_PC,
                                OPC   => LM_OPC,
                                OPC   => LM_OPC,
 
 
                                -- read or written in T2
                                -- read or written in T2
                                ADR   => ADR,
                                ADR   => ADR,
                                WR    => MEM_WE,
                                WR    => LM_WE,
                                WDAT  => MEM_WDAT,
                                WDAT  => WDAT,
                                RDAT  => LM_RDAT
                                RDAT  => LM_RDAT
                        );
                        );
 
 
        ocf: opcode_fetch
        ocf: opcode_fetch
         PORT MAP(      CLK_I    => CLK_I,
         PORT MAP(      CLK_I    => CLK_I,
                                T2       => LT2,
                                T2       => T2,
                                CLR      => CLR,
                                CLR      => RST_I,
                                CE       => CE,
                                CE       => CE,
                                PC_OP    => D_PC_OP,
                                PC_OP    => D_PC_OP,
                                JDATA    => OC_JD,
                                JDATA    => OC_JD,
                                RR       => C_RR,
                                RR       => C_RR,
                                RDATA    => MEM_RDAT,
                                RDATA    => RDAT,
                                PC       => M_PC
                                PC       => M_PC
                        );
                        );
 
 
        opdec: opcode_decoder
        opdec: opcode_decoder
        PORT MAP(       CLK_I    => CLK_I,
        PORT MAP(       CLK_I    => CLK_I,
                                T2       => LT2,
                                T2       => T2,
                                CLR      => CLR,
                                CLR      => RST_I,
                                CE       => CE,
                                CE       => CE,
                                OPCODE  => D_OPC,
                                OPCODE  => D_OPC,
                                OP_CYC  => D_CYC,
                                OP_CYC  => D_CYC,
                                INT     => INT,
                                INT     => INT,
                                RRZ     => RRZ,
                                RRZ     => RRZ,
 
 
                                OP_CAT  => D_CAT,
                                OP_CAT  => D_CAT,
 
 
                                -- select signals
                                -- select signals
                                D_SX    => D_SX,
                                D_SX    => D_SX,
                                D_SY    => D_SY,
                                D_SY    => D_SY,
                                D_OP    => D_OP,
                                D_OP    => D_OP,
                                D_SA    => D_SA,
                                D_SA    => D_SA,
                                D_SMQ   => D_SMQ,
                                D_SMQ   => D_SMQ,
 
 
                                -- write enable/select signal
                                -- write enable/select signal
                                D_WE_RR => D_WE_RR,
                                D_WE_RR => D_WE_RR,
                                D_WE_LL => D_WE_LL,
                                D_WE_LL => D_WE_LL,
                                D_WE_M  => D_MEM_WE,
 
                                D_WE_SP => D_WE_SP,
                                D_WE_SP => D_WE_SP,
 
                                D_RD_O  => D_RD_O,
 
                                D_WE_O  => D_WE_O,
 
                                D_LOCK  => D_LOCK,
 
 
                                IO_RD   => D_IO_RD,
                                D_IO    => D_IO,
                                IO_WR   => D_IO_WR,
 
 
 
                                PC_OP   => D_PC_OP,
                                PC_OP   => D_PC_OP,
                                LAST_M  => D_LAST_M,
                                LAST_M  => D_LAST_M,
                                HLT     => HALT
                                HLT     => HALT
        );
        );
 
 
        dcore: data_core
        dcore: data_core
        PORT MAP(       CLK_I  => CLK_I,
        PORT MAP(       CLK_I  => CLK_I,
                                T2     => LT2,
                                T2     => T2,
                                CLR    => CLR,
                                CLR    => RST_I,
                                CE     => CE,
                                CE     => CE,
 
 
                                -- select signals
                                -- select signals
                                SX     => C_SX,
                                SX     => C_SX,
                                SY     => C_SY,
                                SY     => C_SY,
Line 300... Line 317...
                                WE_RR  => C_WE_RR,
                                WE_RR  => C_WE_RR,
                                WE_LL  => C_WE_LL,
                                WE_LL  => C_WE_LL,
                                WE_SP  => C_WE_SP,
                                WE_SP  => C_WE_SP,
 
 
                                IMM    => C_IMM,
                                IMM    => C_IMM,
                                M_RDAT   => MEM_RDAT,
                                RDAT   => RDAT,
                                ADR    => ADR,
                                ADR    => ADR,
                                MQ     => MEM_WDAT,
                                MQ     => WDAT,
 
 
                                IO_RDAT => IO_RDAT,
 
 
 
                                Q_RR   => C_RR,
                                Q_RR   => C_RR,
                                Q_LL   => Q_LL,
                                Q_LL   => Q_LL,
                                Q_SP   => Q_SP
                                Q_SP   => Q_SP
        );
        );
 
 
        CE     <= '1';
        CE       <= ACK_I or not EXTERN;
        T2     <= LT2;
        TGA_O(0) <= T2 and C_IO;
 
        WE_O     <= T2 and C_WE_O;
 
        STB_O    <= EXTERN;
 
        CYC_O    <= EXTERN;
 
 
        IO_ADR <= ADR(7 downto 0);
 
        Q_RR   <= C_RR;
        Q_RR   <= C_RR;
        RRZ    <= '1' when (C_RR = X"0000") else '0';
        RRZ    <= '1' when (C_RR = X"0000") else '0';
        OC_JD  <= M_OPC & C_IMM(7 downto 0);
        OC_JD  <= M_OPC & C_IMM(7 downto 0);
 
 
        Q_PC   <= C_PC;
        Q_PC   <= C_PC;
Line 331... Line 348...
        Q_SY    <= C_SY;
        Q_SY    <= C_SY;
        Q_OP    <= C_OP;
        Q_OP    <= C_OP;
        Q_SA    <= C_SA;
        Q_SA    <= C_SA;
        Q_SMQ   <= C_SMQ;
        Q_SMQ   <= C_SMQ;
 
 
        -- write enable/select signal
        -- write enable/select signal (debug)
        Q_WE_RR <= C_WE_RR;
        Q_WE_RR <= C_WE_RR;
        Q_WE_LL <= C_WE_LL;
        Q_WE_LL <= C_WE_LL;
        Q_WE_SP <= C_WE_SP;
        Q_WE_SP <= C_WE_SP;
 
 
        XM_WDAT  <= MEM_WDAT;
        DAT_O   <= WDAT;
 
 
        process(CLK_I)
        process(CLK_I)
        begin
        begin
                if (rising_edge(CLK_I)) then
                if (rising_edge(CLK_I)) then
                        LT2 <= not LT2;
                        if (RST_I = '1') then   T2 <= '0';
 
                        else                                    T2 <= not T2;
 
                        end if;
                end if;
                end if;
        end process;
        end process;
 
 
        process(CLK_I)
        process(T2, M_PC, ADR, C_IO)
        begin
        begin
                if (rising_edge(CLK_I)) then
                if (T2 = '0') then                                                                       -- opcode fetch
                        if (LT2 = '1') then
                        EXTERN <= M_PC(15) or M_PC(14) or M_PC(13);             -- 8Kx8  internal memory
                                RDATS    <= ADR(15) or ADR(14) or ADR(13);
-- A            EXTERN <= M_PC(15) or M_PC(14) or M_PC(13) or   -- 512x8 internal memory
                                LXM_RDAT <= XM_RDAT;
-- A                              M_PC(12) or M_PC(11) or M_PC(10) or M_PC(9)
                        end if;
-- B            EXTERN <= '1';                                                                  -- no    internal memory
 
                else                                                                                            -- data or I/O
 
                        EXTERN <= (ADR(15) or ADR(14) or ADR(13) or             -- 8Kx8  internal memory
 
-- A            EXTERN <= (ADR(15) or ADR(14) or ADR(13) or             -- 512x8  internal memory
 
-- A                               ADR(12) or ADR(11) or ADR(10) or ADR(9) or
 
-- B            EXTERN <= ('1' or                                                               -- no    internal memory
 
                                          C_IO) and (C_RD_O or C_WE_O);
                end if;
                end if;
        end process;
        end process;
 
 
 
        -- remember whether access is to internal or to external (incl I/O) memory.
 
        -- clock read data to XM_OPCODE in T1 or to XM_RDAT in T2
 
        --
        process(CLK_I)
        process(CLK_I)
        begin
        begin
                if (rising_edge(CLK_I)) then
                if (rising_edge(CLK_I)) then
                        if (LT2 = '0') then
                        if (T2 = '0') then
                                OPCS   <= M_PC(15) or M_PC(14) or M_PC(13);
                                OPCS   <= EXTERN;
                                XM_OPC <= XM_RDAT;
                                XM_OPC <= DAT_I;
                        end if;
                        else
                end if;
                                RDATS   <= EXTERN;
        end process;
                                XM_RDAT <= DAT_I;
 
 
        process(OPCS, LM_OPC, XM_OPC)
 
        begin
 
                if (OPCS = '0') then     M_OPC <= LM_OPC;
 
                else                                    M_OPC <= XM_OPC;
 
                end if;
                end if;
        end process;
 
 
 
        process(RDATS, LXM_RDAT, LM_RDAT)
 
        begin
 
                if (RDATS = '0') then    MEM_RDAT <= LM_RDAT;
 
                else                                    MEM_RDAT <= LXM_RDAT;
 
                end if;
                end if;
        end process;
        end process;
 
 
        process(LT2, M_PC, ADR, MEM_WE)
        M_OPC <= LM_OPC  when (OPCS = '0')  else XM_OPC;
        begin
        ADR_O <= M_PC    when (T2 = '0')    else ADR;
                if (LT2 = '0') then              -- opcode fetch
        RDAT  <= LM_RDAT when (RDATS = '0') else XM_RDAT;
                        XM_ADR   <= M_PC;
 
                        XM_WE    <= '0';
 
                        XM_CE    <= M_PC(15) or M_PC(14) or M_PC(13);
 
                else                                    -- data
 
                        XM_ADR   <= ADR;
 
                        XM_WE    <= MEM_WE;
 
                        XM_CE    <= ADR(15) or ADR(14) or ADR(13);
 
                end if;
 
        end process;
 
 
 
        process(CLK_I)
        process(CLK_I)
        begin
        begin
                if (rising_edge(CLK_I)) then
                if (rising_edge(CLK_I)) then
                        if (LT2 = '1') then
                        if (RST_I = '1') then
                                if (CLR = '1') then
 
                                        D_PC  <= X"0000";
                                        D_PC  <= X"0000";
                                        D_OPC  <= X"01";
                                        D_OPC  <= X"01";
                                        D_CYC  <= M1;
                                        D_CYC  <= M1;
 
 
                                        C_PC  <= X"0000";
                                        C_PC  <= X"0000";
Line 414... Line 421...
                                        C_SA    <= "00000";
                                        C_SA    <= "00000";
                                        C_SMQ   <= '0';
                                        C_SMQ   <= '0';
                                        C_WE_RR <= '0';
                                        C_WE_RR <= '0';
                                        C_WE_LL <= '0';
                                        C_WE_LL <= '0';
                                        C_WE_SP <= SP_NOP;
                                        C_WE_SP <= SP_NOP;
                                        MEM_WE  <= '0';
                                C_IO    <= '0';
 
                                C_RD_O  <= '0';
                                elsif (CE = '1') then
                                C_WE_O  <= '0';
 
                                LM_WE   <= '0';
 
                        elsif (CE = '1' and T2 = '1') then
                                        C_CYC    <= D_CYC;
                                        C_CYC    <= D_CYC;
                                        Q_CAT    <= D_CAT;
                                        Q_CAT    <= D_CAT;
                                        C_PC     <= D_PC;
                                        C_PC     <= D_PC;
                                        C_OPC    <= D_OPC;
                                        C_OPC    <= D_OPC;
                                        C_SX     <= D_SX;
                                        C_SX     <= D_SX;
Line 429... Line 438...
                                        C_SA     <= D_SA;
                                        C_SA     <= D_SA;
                                        C_SMQ    <= D_SMQ;
                                        C_SMQ    <= D_SMQ;
                                        C_WE_RR  <= D_WE_RR;
                                        C_WE_RR  <= D_WE_RR;
                                        C_WE_LL  <= D_WE_LL;
                                        C_WE_LL  <= D_WE_LL;
                                        C_WE_SP  <= D_WE_SP;
                                        C_WE_SP  <= D_WE_SP;
                                        IO_RD    <= D_IO_RD;
                                C_IO    <= D_IO;
                                        IO_WR    <= D_IO_WR;
                                C_RD_O  <= D_RD_O;
                                        MEM_WE   <= D_MEM_WE;
                                C_WE_O  <= D_WE_O;
 
                                LM_WE   <= D_WE_O and not D_IO;
 
 
                                        if (D_LAST_M = '1') then        -- D goes to M1
                                        if (D_LAST_M = '1') then        -- D goes to M1
                                                -- signals valid for entire opcode...
                                                -- signals valid for entire opcode...
                                                D_OPC <= M_OPC;
                                                D_OPC <= M_OPC;
                                                D_PC  <= M_PC;
                                                D_PC  <= M_PC;
Line 451... Line 461...
                                                        when M5 =>      D_CYC <= M1;
                                                        when M5 =>      D_CYC <= M1;
                                                end case;
                                                end case;
                                        end if;
                                        end if;
                                end if;
                                end if;
                        end if;
                        end if;
                end if;
 
        end process;
        end process;
 
 
end Behavioral;
end Behavioral;
 
 
 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.