Line 1... |
Line 1... |
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
--
|
--
|
-- The Decoder unit.
|
-- The Decoder unit.
|
-- It decodes the instruction opcodes and executes them.
|
-- It decodes the instruction opcodes and executes them.
|
--
|
--
|
-- $Id: decoder.vhd,v 1.4 2004-04-04 14:18:53 arniml Exp $
|
-- $Id: decoder.vhd,v 1.5 2004-04-07 22:09:03 arniml Exp $
|
--
|
--
|
-- Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
|
-- Copyright (c) 2004, Arnim Laeuger (arniml@opencores.org)
|
--
|
--
|
-- All rights reserved
|
-- All rights reserved
|
--
|
--
|
Line 100... |
Line 100... |
psw_write_sp_o : out boolean;
|
psw_write_sp_o : out boolean;
|
-- ALU Interface ----------------------------------------------------------
|
-- ALU Interface ----------------------------------------------------------
|
alu_carry_i : in std_logic;
|
alu_carry_i : in std_logic;
|
alu_op_o : out alu_op_t;
|
alu_op_o : out alu_op_t;
|
alu_use_carry_o : out boolean;
|
alu_use_carry_o : out boolean;
|
alu_da_low_o : out boolean;
|
|
alu_da_high_o : out boolean;
|
alu_da_high_o : out boolean;
|
alu_accu_low_o : out boolean;
|
alu_accu_low_o : out boolean;
|
alu_p06_temp_reg_o : out boolean;
|
alu_p06_temp_reg_o : out boolean;
|
alu_p60_temp_reg_o : out boolean;
|
alu_p60_temp_reg_o : out boolean;
|
alu_da_overflow_i : in boolean;
|
alu_da_overflow_i : in boolean;
|
Line 460... |
Line 459... |
psw_read_sp_o <= false;
|
psw_read_sp_o <= false;
|
psw_write_psw_o <= false;
|
psw_write_psw_o <= false;
|
psw_write_sp_o <= false;
|
psw_write_sp_o <= false;
|
alu_op_o <= ALU_NOP;
|
alu_op_o <= ALU_NOP;
|
alu_use_carry_o <= false;
|
alu_use_carry_o <= false;
|
alu_da_low_o <= false;
|
|
alu_da_high_o <= false;
|
alu_da_high_o <= false;
|
alu_accu_low_o <= false;
|
alu_accu_low_o <= false;
|
clk_assert_prog_o <= false;
|
clk_assert_prog_o <= false;
|
clk_assert_rd_o <= false;
|
clk_assert_rd_o <= false;
|
clk_assert_wr_o <= false;
|
clk_assert_wr_o <= false;
|
Line 817... |
Line 815... |
alu_p06_temp_reg_o <= true;
|
alu_p06_temp_reg_o <= true;
|
|
|
-- Step 2: Check Auxiliary Carry and overflow on low nibble
|
-- Step 2: Check Auxiliary Carry and overflow on low nibble
|
-- Add 0x06 to shadow Accumulator if one is true
|
-- Add 0x06 to shadow Accumulator if one is true
|
when MSTATE4 =>
|
when MSTATE4 =>
|
alu_da_low_o <= true;
|
|
|
|
if psw_aux_carry_i = '1' or alu_da_overflow_i then
|
if psw_aux_carry_i = '1' or alu_da_overflow_i then
|
alu_read_alu_o <= true;
|
alu_read_alu_o <= true;
|
alu_write_shadow_o <= true;
|
alu_write_shadow_o <= true;
|
end if;
|
end if;
|
|
|
Line 1841... |
Line 1837... |
|
|
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
-- File History:
|
-- File History:
|
--
|
--
|
-- $Log: not supported by cvs2svn $
|
-- $Log: not supported by cvs2svn $
|
|
-- Revision 1.4 2004/04/04 14:18:53 arniml
|
|
-- add measures to implement XCHD
|
|
--
|
-- Revision 1.3 2004/03/28 21:15:48 arniml
|
-- Revision 1.3 2004/03/28 21:15:48 arniml
|
-- implemented mnemonic DA
|
-- implemented mnemonic DA
|
--
|
--
|
-- Revision 1.2 2004/03/28 13:06:32 arniml
|
-- Revision 1.2 2004/03/28 13:06:32 arniml
|
-- implement mnemonics:
|
-- implement mnemonics:
|