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

Subversion Repositories tinycpu

[/] [tinycpu/] [trunk/] [src/] [core.vhd] - Diff between revs 25 and 27

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

Rev 25 Rev 27
Line 135... Line 135...
 
 
  signal regbank: std_logic;
  signal regbank: std_logic;
 
 
  signal fetcheraddress: std_logic_vector(15 downto 0);
  signal fetcheraddress: std_logic_vector(15 downto 0);
 
 
  --temporary signals
 
  signal tempreg1: std_logic_vector(3 downto 0);
  signal bankreg1: std_logic_vector(3 downto 0); --these signals have register bank stuff baked in
  signal tempreg2: std_logic_vector(3 downto 0);
  signal bankreg2: std_logic_vector(3 downto 0);
  signal tempreg3: std_logic_vector(3 downto 0);
  signal bankreg3: std_logic_vector(3 downto 0);
  signal FetchMemAddr: std_logic_vector(15 downto 0);
  signal FetchMemAddr: std_logic_vector(15 downto 0);
 
 
 
 
begin
begin
  reg: registerfile port map(
  reg: registerfile port map(
Line 195... Line 195...
  opimmd <= IR(7 downto 0);
  opimmd <= IR(7 downto 0);
  opcond1 <= IR(8);
  opcond1 <= IR(8);
  opcond2 <= IR(7);
  opcond2 <= IR(7);
  opreg1 <= IR(11 downto 9);
  opreg1 <= IR(11 downto 9);
  opreg3 <= IR(2 downto 0);
  opreg3 <= IR(2 downto 0);
  opreg2 <= IR(5 downto 3);
  opreg2 <= IR(6 downto 4);
  opseges <= IR(6);
  opseges <= IR(3);
  --debug ports
  --debug ports
  DebugCS <= regOut(REGCS);
  DebugCS <= regOut(REGCS);
  DebugIP <= regOut(REGIP);
  DebugIP <= regOut(REGIP);
  DebugR0 <= regOut(0);
  DebugR0 <= regOut(0);
  DebugIR <= IR;
  DebugIR <= IR;
  DebugTR <= TR;
  DebugTR <= TR;
  --register addresses with registerbank baked in
  --register addresses with registerbank baked in
  tempreg1 <= ('1' & opreg1) when (regbank='1' and opreg1(2)='0') else '0' & opreg1;
  bankreg1 <= ('1' & opreg1) when (regbank='1' and opreg1(2)='0') else '0' & opreg1;
  tempreg2 <= ('1' & opreg2) when (regbank='1' and opreg2(2)='0') else '0' & opreg2;
  bankreg2 <= ('1' & opreg2) when (regbank='1' and opreg2(2)='0') else '0' & opreg2;
  tempreg3 <= ('1' & opreg3) when (regbank='1' and opreg3(2)='0') else '0' & opreg3;
  bankreg3 <= ('1' & opreg3) when (regbank='1' and opreg3(2)='0') else '0' & opreg3;
 
 
 
 
 
 
  decode: process(Clock, Hold, state, IR, inreset, reset, regin, regout, IPCarryOut, CSCarryOut)
  decode: process(Clock, Hold, state, IR, inreset, reset, regin, regout, IPCarryOut, CSCarryOut)
  begin
  begin
Line 298... Line 298...
 
 
        --actual decoding
        --actual decoding
        if opcond1='0' or (opcond1='1' and TR='1') then
        if opcond1='0' or (opcond1='1' and TR='1') then
          case opmain is
          case opmain is
            when "0000" => --mov reg,imm
            when "0000" => --mov reg,imm
              regIn(to_integer(unsigned(tempreg1))) <= opimmd;
              regIn(to_integer(unsigned(bankreg1))) <= opimmd;
              regWE(to_integer(unsigned(tempreg1))) <= '1';
              regWE(to_integer(unsigned(bankreg1))) <= '1';
            when "0001" => --mov [reg],imm
            when "0001" => --mov [reg],imm
              OpAddress <= regOut(REGDS) & regOut(to_integer(unsigned(tempreg1)));
              OpAddress <= regOut(REGDS) & regOut(to_integer(unsigned(bankreg1)));
              OpWE <= '1';
              OpWE <= '1';
              OpData <= x"00" & opimmd;
              OpData <= x"00" & opimmd;
              OpWW <= '0';
              OpWW <= '0';
              state <= WaitForMemory;
              state <= WaitForMemory;
              IPAddend <= x"00"; --disable all this because we have to wait a cycle to write memory
              IPAddend <= x"00"; --disable all this because we have to wait a cycle to write memory
              FetchEN <= '0';
              FetchEN <= '0';
 
            when "0011" => --group 3 comparisons
 
              AluOp <= "01" & opreg3; --nothing hard here, ALU does it all for us
 
              AluIn1 <= regOut(to_integer(unsigned(opreg1)));
 
              AluIn2 <= regOut(to_integer(unsigned(opreg2)));
 
            when "0100" => --group 4 bitwise operations
 
              AluOp <= "00" & opreg3; --nothing hard here, ALU does it all for us
 
              AluIn1 <= regOut(to_integer(unsigned(opreg1)));
 
              AluIn2 <= regOut(to_integer(unsigned(opreg2)));
 
              regIn(to_integer(unsigned(opreg1))) <= AluOut;
 
              regWE(to_integer(unsigned(opreg1))) <= '1';
 
 
            when others =>
            when others =>
              --synthesis off
              --synthesis off
              report "Not implemented" severity error;
              report "Not implemented" severity error;
              --synthesis on
              --synthesis on
          end case;
          end case;

powered by: WebSVN 2.1.0

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