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

Subversion Repositories cpu6502_true_cycle

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /cpu6502_true_cycle/branches/avendor/rtl
    from Rev 8 to Rev 18
    Reverse comparison

Rev 8 → Rev 18

/vhdl/reg_pc.vhd
0,0 → 1,220
-- VHDL Entity R6502_TC.Reg_PC.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTWICKL4-XP-PR)
-- at - 22:42:52 04.01.2009
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
entity Reg_PC is
port(
adr_i : in std_logic_vector (15 downto 0);
clk_clk_i : in std_logic;
ld_i : in std_logic_vector (1 downto 0);
ld_pc_i : in std_logic;
offset_i : in std_logic_vector (15 downto 0);
rst_rst_n_i : in std_logic;
sel_pc_as_i : in std_logic;
sel_pc_in_i : in std_logic;
sel_pc_val_i : in std_logic_vector (1 downto 0);
adr_nxt_pc_o : out std_logic_vector (15 downto 0);
adr_pc_o : out std_logic_vector (15 downto 0)
);
 
-- Declarations
 
end Reg_PC ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
-- scantara2003@yahoo.de
-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG
--
-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or any later version.
--
-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
--
-- CVS Revisins History
--
-- $Log: not supported by cvs2svn $
-- <<-- more -->>
-- Title: Program Counter Logic
-- Path: R6502_TC/Reg_PC/struct
-- Edited: by eda on 01 Jan 2009
--
-- VHDL Architecture R6502_TC.Reg_PC.struct
--
-- Created:
-- by - eda.UNKNOWN (ENTWICKL4-XP-PR)
-- at - 22:42:52 04.01.2009
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
 
architecture struct of Reg_PC is
 
-- Architecture declarations
 
-- Internal signal declarations
signal adr_pc_high_o_i : std_logic_vector(7 downto 0);
signal adr_pc_low_o_i : std_logic_vector(7 downto 0);
signal adr_pc_o_i : std_logic_vector(15 downto 0);
signal as_n_o_i : std_logic;
signal ci_o_i : std_logic;
signal cout_pc_o_i : std_logic;
signal load3_o_i : std_logic;
signal load_o_i : std_logic;
signal offset_high_o_i : std_logic_vector(7 downto 0);
signal offset_low_o_i : std_logic_vector(7 downto 0);
signal val_o_i : std_logic_vector(7 downto 0);
signal val_one : std_logic_vector(7 downto 0);
signal val_zero : std_logic_vector(7 downto 0);
 
-- Implicit buffer signal declarations
signal adr_pc_o_internal : std_logic_vector (15 downto 0);
signal adr_nxt_pc_o_internal : std_logic_vector (15 downto 0);
 
 
-- ModuleWare signal declarations(v1.9) for instance 'U_11' of 'addsub'
signal mw_U_11temp_din0 : std_logic_vector(8 downto 0);
signal mw_U_11temp_din1 : std_logic_vector(8 downto 0);
signal mw_U_11sum : unsigned(8 downto 0);
 
-- ModuleWare signal declarations(v1.9) for instance 'U_12' of 'addsub'
signal mw_U_12temp_din0 : std_logic_vector(8 downto 0);
signal mw_U_12temp_din1 : std_logic_vector(8 downto 0);
signal mw_U_12sum : unsigned(8 downto 0);
 
-- ModuleWare signal declarations(v1.9) for instance 'U_0' of 'adff'
signal mw_U_0reg_cval : std_logic_vector(7 downto 0);
 
-- ModuleWare signal declarations(v1.9) for instance 'U_4' of 'adff'
signal mw_U_4reg_cval : std_logic_vector(7 downto 0);
 
 
begin
 
-- ModuleWare code(v1.9) for instance 'U_11' of 'addsub'
mw_U_11temp_din0 <= '0' & adr_pc_low_o_i;
mw_U_11temp_din1 <= '0' & val_o_i;
u_11combo_proc: process (mw_U_11temp_din0, mw_U_11temp_din1, as_n_o_i)
variable temp_carry : std_logic;
begin
temp_carry := '0';
if (as_n_o_i = '1') then
mw_U_11sum <= unsigned(mw_U_11temp_din0) + unsigned(mw_U_11temp_din1) + temp_carry;
else
mw_U_11sum <= unsigned(mw_U_11temp_din0) - unsigned(mw_U_11temp_din1) - temp_carry;
end if;
end process u_11combo_proc;
adr_nxt_pc_o_internal(7 DOWNTO 0) <= conv_std_logic_vector(mw_U_11sum(7 downto 0),8);
cout_pc_o_i <= mw_U_11sum(8);
 
-- ModuleWare code(v1.9) for instance 'U_12' of 'addsub'
mw_U_12temp_din0 <= '0' & adr_pc_high_o_i;
mw_U_12temp_din1 <= '0' & offset_high_o_i;
u_12combo_proc: process (mw_U_12temp_din0, mw_U_12temp_din1, as_n_o_i, ci_o_i)
variable temp_carry : std_logic;
begin
temp_carry := ci_o_i;
if (as_n_o_i = '1') then
mw_U_12sum <= unsigned(mw_U_12temp_din0) + unsigned(mw_U_12temp_din1) + temp_carry;
else
mw_U_12sum <= unsigned(mw_U_12temp_din0) - unsigned(mw_U_12temp_din1) - temp_carry;
end if;
end process u_12combo_proc;
adr_nxt_pc_o_internal(15 DOWNTO 8) <= conv_std_logic_vector(mw_U_12sum(7 downto 0),8);
 
-- ModuleWare code(v1.9) for instance 'U_0' of 'adff'
adr_pc_o_internal(7 DOWNTO 0) <= mw_U_0reg_cval;
u_0seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_0reg_cval <= "00000000";
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load_o_i = '1') then
mw_U_0reg_cval <= adr_nxt_pc_o_internal(7 DOWNTO 0);
end if;
end if;
end process u_0seq_proc;
 
-- ModuleWare code(v1.9) for instance 'U_4' of 'adff'
adr_pc_o_internal(15 DOWNTO 8) <= mw_U_4reg_cval;
u_4seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_4reg_cval <= "00000000";
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load3_o_i = '1') then
mw_U_4reg_cval <= adr_nxt_pc_o_internal(15 DOWNTO 8);
end if;
end if;
end process u_4seq_proc;
 
-- ModuleWare code(v1.9) for instance 'U_6' of 'and'
load_o_i <= ld_pc_i and ld_i(0);
 
-- ModuleWare code(v1.9) for instance 'U_7' of 'and'
load3_o_i <= ld_pc_i and ld_i(1);
 
-- ModuleWare code(v1.9) for instance 'U_10' of 'and'
ci_o_i <= cout_pc_o_i and ld_pc_i;
 
-- ModuleWare code(v1.9) for instance 'U_1' of 'constval'
val_zero <= "00000000";
 
-- ModuleWare code(v1.9) for instance 'U_9' of 'constval'
val_one <= "00000001";
 
-- ModuleWare code(v1.9) for instance 'U_2' of 'inv'
as_n_o_i <= not(sel_pc_as_i);
 
-- ModuleWare code(v1.9) for instance 'U_8' of 'mux'
u_8combo_proc: process(adr_pc_o_internal, adr_i, sel_pc_in_i)
begin
case sel_pc_in_i is
when '0' => adr_pc_o_i <= adr_pc_o_internal;
when '1' => adr_pc_o_i <= adr_i;
when others => adr_pc_o_i <= (others => 'X');
end case;
end process u_8combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_13' of 'mux'
u_13combo_proc: process(val_one, val_zero, offset_low_o_i,
sel_pc_val_i)
begin
case sel_pc_val_i is
when "00" => val_o_i <= val_one;
when "01" => val_o_i <= val_zero;
when "10" => val_o_i <= offset_low_o_i;
when "11" => val_o_i <= val_zero;
when others => val_o_i <= (others => 'X');
end case;
end process u_13combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_3' of 'split'
adr_pc_low_o_i <= adr_pc_o_i(7 downto 0);
adr_pc_high_o_i <= adr_pc_o_i(15 downto 8);
 
-- ModuleWare code(v1.9) for instance 'U_5' of 'split'
offset_low_o_i <= offset_i(7 downto 0);
offset_high_o_i <= offset_i(15 downto 8);
 
-- Instance port mappings.
 
-- Implicit buffered output assignments
adr_pc_o <= adr_pc_o_internal;
adr_nxt_pc_o <= adr_nxt_pc_o_internal;
 
end struct;
vhdl/reg_pc.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/reg_sp.vhd =================================================================== --- vhdl/reg_sp.vhd (nonexistent) +++ vhdl/reg_sp.vhd (revision 18) @@ -0,0 +1,147 @@ +-- VHDL Entity R6502_TC.Reg_SP.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:53 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity Reg_SP is + port( + adr_low_i : in std_logic_vector (7 downto 0); + clk_clk_i : in std_logic; + ld_low_i : in std_logic; + ld_sp_i : in std_logic; + rst_rst_n_i : in std_logic; + sel_sp_as_i : in std_logic; + sel_sp_in_i : in std_logic; + adr_sp_o : out std_logic_vector (15 downto 0) + ); + +-- Declarations + +end Reg_SP ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- <<-- more -->> +-- Title: Stack Pointer Logic +-- Path: R6502_TC/Reg_SP/struct +-- Edited: by eda on 01 Jan 2009 +-- +-- VHDL Architecture R6502_TC.Reg_SP.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:53 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + + +architecture struct of Reg_SP is + + -- Architecture declarations + + -- Internal signal declarations + signal adr_sp_low_o_i : std_logic_vector(7 downto 0); + signal load_o_i : std_logic; + signal result_low1_o_i : std_logic_vector(7 downto 0); + signal result_low_o_i : std_logic_vector(7 downto 0); + signal sp_as_n_o_i : std_logic; + signal val_one : std_logic_vector(7 downto 0); + + -- Implicit buffer signal declarations + signal adr_sp_o_internal : std_logic_vector (15 downto 0); + + + -- ModuleWare signal declarations(v1.9) for instance 'U_11' of 'addsub' + signal mw_U_11temp_din0 : std_logic_vector(8 downto 0); + signal mw_U_11temp_din1 : std_logic_vector(8 downto 0); + signal mw_U_11sum : unsigned(8 downto 0); + + -- ModuleWare signal declarations(v1.9) for instance 'U_0' of 'adff' + signal mw_U_0reg_cval : std_logic_vector(7 downto 0); + + +begin + + -- ModuleWare code(v1.9) for instance 'U_11' of 'addsub' + mw_U_11temp_din0 <= '0' & adr_sp_low_o_i; + mw_U_11temp_din1 <= '0' & val_one; + u_11combo_proc: process (mw_U_11temp_din0, mw_U_11temp_din1, sp_as_n_o_i) + variable temp_carry : std_logic; + begin + temp_carry := '0'; + if (sp_as_n_o_i = '1') then + mw_U_11sum <= unsigned(mw_U_11temp_din0) + unsigned(mw_U_11temp_din1) + temp_carry; + else + mw_U_11sum <= unsigned(mw_U_11temp_din0) - unsigned(mw_U_11temp_din1) - temp_carry; + end if; + end process u_11combo_proc; + result_low_o_i <= conv_std_logic_vector(mw_U_11sum(7 downto 0),8); + + -- ModuleWare code(v1.9) for instance 'U_0' of 'adff' + adr_sp_o_internal(7 DOWNTO 0) <= mw_U_0reg_cval; + u_0seq_proc: process (clk_clk_i, rst_rst_n_i) + begin + if (rst_rst_n_i = '0') then + mw_U_0reg_cval <= "00000000"; + elsif (clk_clk_i'event and clk_clk_i='1') then + if (load_o_i = '1') then + mw_U_0reg_cval <= result_low1_o_i; + end if; + end if; + end process u_0seq_proc; + + -- ModuleWare code(v1.9) for instance 'U_6' of 'and' + load_o_i <= ld_sp_i and ld_low_i; + + -- ModuleWare code(v1.9) for instance 'U_3' of 'buff' + adr_sp_o_internal(15 DOWNTO 8) <= val_one; + + -- ModuleWare code(v1.9) for instance 'U_4' of 'constval' + val_one <= "00000001"; + + -- ModuleWare code(v1.9) for instance 'U_2' of 'inv' + sp_as_n_o_i <= not(sel_sp_as_i); + + -- ModuleWare code(v1.9) for instance 'U_8' of 'mux' + u_8combo_proc: process(result_low_o_i, adr_low_i, sel_sp_in_i) + begin + case sel_sp_in_i is + when '0' => result_low1_o_i <= result_low_o_i; + when '1' => result_low1_o_i <= adr_low_i; + when others => result_low1_o_i <= (others => 'X'); + end case; + end process u_8combo_proc; + + -- ModuleWare code(v1.9) for instance 'U_10' of 'tap' + adr_sp_low_o_i <= adr_sp_o_internal(7 downto 0); + + -- Instance port mappings. + + -- Implicit buffered output assignments + adr_sp_o <= adr_sp_o_internal; + +end struct;
vhdl/reg_sp.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/r6502_tc.vhd =================================================================== --- vhdl/r6502_tc.vhd (nonexistent) +++ vhdl/r6502_tc.vhd (revision 18) @@ -0,0 +1,119 @@ +-- VHDL Entity R6502_TC.R6502_TC.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:06 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity R6502_TC is + port( + clk_clk_i : in std_logic; + d_i : in std_logic_vector (7 downto 0); + irq_n_i : in std_logic; + nmi_n_i : in std_logic; + rdy_i : in std_logic; + rst_rst_n_i : in std_logic; + so_n_i : in std_logic; + a_o : out std_logic_vector (15 downto 0); + d_o : out std_logic_vector (7 downto 0); + rd_o : out std_logic; + sync_o : out std_logic; + wr_n_o : out std_logic; + wr_o : out std_logic + ); + +-- Declarations + +end R6502_TC ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- <<-- more -->> +-- Title: Top Level +-- Path: R6502_TC/R6502_TC/struct +-- Edited: by eda on 04 Jan 2009 +-- +-- VHDL Architecture R6502_TC.R6502_TC.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:06 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; + +library R6502_TC; + +architecture struct of R6502_TC is + + -- Architecture declarations + + -- Internal signal declarations + + + -- Component Declarations + component Core + port ( + clk_clk_i : in std_logic ; + d_i : in std_logic_vector (7 downto 0); + irq_n_i : in std_logic ; + nmi_n_i : in std_logic ; + rdy_i : in std_logic ; + rst_rst_n_i : in std_logic ; + so_n_i : in std_logic ; + a_o : out std_logic_vector (15 downto 0); + d_o : out std_logic_vector (7 downto 0); + rd_o : out std_logic ; + sync_o : out std_logic ; + wr_n_o : out std_logic ; + wr_o : out std_logic + ); + end component; + + -- Optional embedded configurations + -- pragma synthesis_off + for all : Core use entity R6502_TC.Core; + -- pragma synthesis_on + + +begin + + -- Instance port mappings. + U_0 : Core + port map ( + clk_clk_i => clk_clk_i, + d_i => d_i, + irq_n_i => irq_n_i, + nmi_n_i => nmi_n_i, + rdy_i => rdy_i, + rst_rst_n_i => rst_rst_n_i, + so_n_i => so_n_i, + a_o => a_o, + d_o => d_o, + rd_o => rd_o, + sync_o => sync_o, + wr_n_o => wr_n_o, + wr_o => wr_o + ); + +end struct;
vhdl/r6502_tc.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/fsm_execution_unit.vhd =================================================================== --- vhdl/fsm_execution_unit.vhd (nonexistent) +++ vhdl/fsm_execution_unit.vhd (revision 18) @@ -0,0 +1,5061 @@ +-- VHDL Entity R6502_TC.FSM_Execution_Unit.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:53 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity FSM_Execution_Unit is + port( + adr_nxt_pc_i : in std_logic_vector (15 downto 0); + adr_pc_i : in std_logic_vector (15 downto 0); + adr_sp_i : in std_logic_vector (15 downto 0); + clk_clk_i : in std_logic; + d_alu_i : in std_logic_vector ( 7 downto 0 ); + d_i : in std_logic_vector ( 7 downto 0 ); + d_regs_out_i : in std_logic_vector ( 7 downto 0 ); + irq_n_i : in std_logic; + nmi_i : in std_logic; + q_a_i : in std_logic_vector ( 7 downto 0 ); + q_x_i : in std_logic_vector ( 7 downto 0 ); + q_y_i : in std_logic_vector ( 7 downto 0 ); + rdy_i : in std_logic; + reg_0flag_i : in std_logic; + reg_1flag_i : in std_logic; + reg_7flag_i : in std_logic; + rst_rst_n_i : in std_logic; + so_n_i : in std_logic; + a_o : out std_logic_vector (15 downto 0); + adr_o : out std_logic_vector (15 downto 0); + ch_a_o : out std_logic_vector ( 7 downto 0 ); + ch_b_o : out std_logic_vector ( 7 downto 0 ); + d_o : out std_logic_vector ( 7 downto 0 ); + d_regs_in_o : out std_logic_vector ( 7 downto 0 ); + fetch_o : out std_logic; + ld_o : out std_logic_vector ( 1 downto 0 ); + ld_pc_o : out std_logic; + ld_sp_o : out std_logic; + load_regs_o : out std_logic; + offset_o : out std_logic_vector ( 15 downto 0 ); + rd_o : out std_logic; + sel_pc_as_o : out std_logic; + sel_pc_in_o : out std_logic; + sel_pc_val_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_in_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_out_o : out std_logic_vector ( 1 downto 0 ); + sel_reg_o : out std_logic_vector ( 1 downto 0 ); + sel_sp_as_o : out std_logic; + sel_sp_in_o : out std_logic; + sync_o : out std_logic; + wr_n_o : out std_logic; + wr_o : out std_logic + ); + +-- Declarations + +end FSM_Execution_Unit ; + +-- Jens-D. Gutschmidt Project: R6502_TC + +-- scantara2003@yahoo.de + +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG + +-- + +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by + +-- the Free Software Foundation, either version 3 of the License, or any later version. + +-- + +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +-- + +-- You should have received a copy of the GNU General Public License along with this program. If not, see . + +-- + +-- CVS Revisins History + +-- + +-- $Log: not supported by cvs2svn $ + +-- <<-- more -->> + +-- Title: FSM Execution Unit for all op codes + +-- Path: R6502_TC/FSM_Execution_Unit/fsm + +-- Edited: by eda on 04 Jan 2009 + +-- +-- VHDL Architecture R6502_TC.FSM_Execution_Unit.fsm +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:55 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +architecture fsm of FSM_Execution_Unit is + + -- Architecture Declarations + signal reg_F : std_logic_vector( 7 DOWNTO 0 ); + signal reg_PC : std_logic_vector(15 DOWNTO 0); + signal reg_PC1 : std_logic_vector( 15 DOWNTO 0 ); + signal reg_sel_pc_as : std_logic; + signal reg_sel_pc_in : std_logic; + signal reg_sel_pc_val : std_logic_vector( 1 DOWNTO 0 ); + signal reg_sel_rb_in : std_logic_vector( 1 DOWNTO 0 ); + signal reg_sel_rb_out : std_logic_vector( 1 DOWNTO 0 ); + signal reg_sel_reg : std_logic_vector( 1 DOWNTO 0 ); + signal reg_sel_sp_as : std_logic; + signal reg_sel_sp_in : std_logic; + signal sig_D_OUT : std_logic_vector( 7 DOWNTO 0 ); + signal sig_PC : std_logic_vector(15 DOWNTO 0); + signal sig_RD : std_logic; + signal sig_RWn : std_logic; + signal sig_SYNC : std_logic; + signal sig_WR : std_logic; + signal zw_ALU : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU1 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU2 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU3 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU4 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU5 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU6 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_PC : std_logic_vector( 15 DOWNTO 0 ); + signal zw_REG_ALU : std_logic_vector( 8 DOWNTO 0 ); + signal zw_REG_NMI : std_logic; + signal zw_REG_OP : std_logic_vector( 7 DOWNTO 0 ); + signal zw_REG_sig_PC : std_logic_vector(15 DOWNTO 0); + signal zw_b1 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b2 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b3 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b4 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_so : std_logic; + signal zw_w1 : std_logic_vector( 15 DOWNTO 0 ); + signal zw_w2 : std_logic_vector( 15 DOWNTO 0 ); + signal zw_w3 : std_logic_vector( 15 DOWNTO 0 ); + + subtype state_type is + std_logic_vector(7 downto 0); + + -- State vector declaration + attribute state_vector : string; + attribute state_vector of fsm : architecture is "current_state"; + + -- Hard encoding + constant FETCH : state_type := "00000000"; + constant s1 : state_type := "00000001"; + constant s2 : state_type := "00000011"; + constant s5 : state_type := "00000010"; + constant s3 : state_type := "00000110"; + constant s4 : state_type := "00000111"; + constant s12 : state_type := "00000101"; + constant s16 : state_type := "00000100"; + constant s17 : state_type := "00001100"; + constant s24 : state_type := "00001101"; + constant s25 : state_type := "00001111"; + constant s271 : state_type := "00001110"; + constant s273 : state_type := "00001010"; + constant s304 : state_type := "00001011"; + constant s307 : state_type := "00001001"; + constant s177 : state_type := "00001000"; + constant s180 : state_type := "00011000"; + constant s181 : state_type := "00011001"; + constant s182 : state_type := "00011011"; + constant s183 : state_type := "00011010"; + constant s184 : state_type := "00011110"; + constant s185 : state_type := "00011111"; + constant s186 : state_type := "00011101"; + constant s187 : state_type := "00011100"; + constant s188 : state_type := "00010100"; + constant s189 : state_type := "00010101"; + constant s190 : state_type := "00010111"; + constant s191 : state_type := "00010110"; + constant s192 : state_type := "00010010"; + constant s193 : state_type := "00010011"; + constant s377 : state_type := "00010001"; + constant s381 : state_type := "00010000"; + constant s378 : state_type := "00110000"; + constant s382 : state_type := "00110001"; + constant s379 : state_type := "00110011"; + constant s383 : state_type := "00110010"; + constant s384 : state_type := "00110110"; + constant s380 : state_type := "00110111"; + constant s385 : state_type := "00110101"; + constant s386 : state_type := "00110100"; + constant s387 : state_type := "00111100"; + constant s388 : state_type := "00111101"; + constant s389 : state_type := "00111111"; + constant s391 : state_type := "00111110"; + constant s392 : state_type := "00111010"; + constant s390 : state_type := "00111011"; + constant s393 : state_type := "00111001"; + constant s394 : state_type := "00111000"; + constant s395 : state_type := "00101000"; + constant s396 : state_type := "00101001"; + constant s397 : state_type := "00101011"; + constant s398 : state_type := "00101010"; + constant s399 : state_type := "00101110"; + constant s400 : state_type := "00101111"; + constant s401 : state_type := "00101101"; + constant s526 : state_type := "00101100"; + constant s527 : state_type := "00100100"; + constant s528 : state_type := "00100101"; + constant s529 : state_type := "00100111"; + constant s530 : state_type := "00100110"; + constant s531 : state_type := "00100010"; + constant s544 : state_type := "00100011"; + constant s545 : state_type := "00100001"; + constant s546 : state_type := "00100000"; + constant s547 : state_type := "01100000"; + constant s549 : state_type := "01100001"; + constant s550 : state_type := "01100011"; + constant s404 : state_type := "01100010"; + constant s556 : state_type := "01100110"; + constant s557 : state_type := "01100111"; + constant s579 : state_type := "01100101"; + constant s201 : state_type := "01100100"; + constant s202 : state_type := "01101100"; + constant s210 : state_type := "01101101"; + constant s211 : state_type := "01101111"; + constant s215 : state_type := "01101110"; + constant s217 : state_type := "01101010"; + constant s218 : state_type := "01101011"; + constant s222 : state_type := "01101001"; + constant s223 : state_type := "01101000"; + constant s224 : state_type := "01111000"; + constant s225 : state_type := "01111001"; + constant s226 : state_type := "01111011"; + constant s243 : state_type := "01111010"; + constant s244 : state_type := "01111110"; + constant s247 : state_type := "01111111"; + constant s344 : state_type := "01111101"; + constant s343 : state_type := "01111100"; + constant s250 : state_type := "01110100"; + constant s251 : state_type := "01110101"; + constant s351 : state_type := "01110111"; + constant s361 : state_type := "01110110"; + constant s360 : state_type := "01110010"; + constant s403 : state_type := "01110011"; + constant s406 : state_type := "01110001"; + constant s407 : state_type := "01110000"; + constant s409 : state_type := "01010000"; + constant s412 : state_type := "01010001"; + constant s413 : state_type := "01010011"; + constant s416 : state_type := "01010010"; + constant s418 : state_type := "01010110"; + constant s510 : state_type := "01010111"; + constant s553 : state_type := "01010101"; + constant s555 : state_type := "01010100"; + constant s558 : state_type := "01011100"; + constant s560 : state_type := "01011101"; + constant s561 : state_type := "01011111"; + constant s563 : state_type := "01011110"; + constant s564 : state_type := "01011010"; + constant s565 : state_type := "01011011"; + constant s566 : state_type := "01011001"; + constant s266 : state_type := "01011000"; + constant s301 : state_type := "01001000"; + constant s302 : state_type := "01001001"; + constant RES : state_type := "01001011"; + constant s511 : state_type := "01001010"; + constant s559 : state_type := "01001110"; + constant s562 : state_type := "01001111"; + constant s567 : state_type := "01001101"; + constant s568 : state_type := "01001100"; + constant s569 : state_type := "01000100"; + constant s570 : state_type := "01000101"; + constant s571 : state_type := "01000111"; + constant s572 : state_type := "01000110"; + constant s573 : state_type := "01000010"; + constant s574 : state_type := "01000011"; + constant s548 : state_type := "01000001"; + constant s551 : state_type := "01000000"; + constant s552 : state_type := "11000000"; + constant s575 : state_type := "11000001"; + constant s576 : state_type := "11000011"; + constant s577 : state_type := "11000010"; + constant s532 : state_type := "11000110"; + constant s533 : state_type := "11000111"; + constant s534 : state_type := "11000101"; + constant s535 : state_type := "11000100"; + constant s536 : state_type := "11001100"; + constant s537 : state_type := "11001101"; + + -- Declare current and next state signals + signal current_state : state_type; + signal next_state : state_type; + + -- Declare any pre-registered internal signals + signal d_o_cld : std_logic_vector ( 7 downto 0 ); + signal rd_o_cld : std_logic ; + signal sync_o_cld : std_logic ; + signal wr_n_o_cld : std_logic ; + signal wr_o_cld : std_logic ; + +begin + + ----------------------------------------------------------------- + clocked_proc : process ( + clk_clk_i, + rst_rst_n_i + ) + ----------------------------------------------------------------- + begin + if (rst_rst_n_i = '0') then + current_state <= RES; + -- Default Reset Values + d_o_cld <= X"00"; + rd_o_cld <= '0'; + sync_o_cld <= '0'; + wr_n_o_cld <= '1'; + wr_o_cld <= '0'; + reg_F <= "00000100"; + reg_PC <= X"0000"; + reg_PC1 <= X"0000"; + reg_sel_pc_as <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_rb_in <= "00"; + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_sp_as <= '0'; + reg_sel_sp_in <= '0'; + sig_PC <= X"0000"; + zw_PC <= X"0000"; + zw_REG_ALU <= '0' & X"00"; + zw_REG_NMI <= '0'; + zw_REG_OP <= X"00"; + zw_REG_sig_PC <= X"0000"; + zw_b1 <= X"00"; + zw_b2 <= X"00"; + zw_b3 <= X"00"; + zw_b4 <= X"00"; + zw_so <= '0'; + zw_w1 <= X"0000"; + zw_w2 <= X"0000"; + zw_w3 <= X"0000"; + elsif (clk_clk_i'event and clk_clk_i = '1') then + current_state <= next_state; + -- Default Assignment To Internals + reg_F <= reg_F(7) & (zw_so OR reg_F(6)) & reg_F(5 downto 0); + reg_PC <= reg_PC; + reg_PC1 <= reg_PC1; + reg_sel_pc_as <= reg_sel_pc_as; + reg_sel_pc_in <= reg_sel_pc_in; + reg_sel_pc_val <= reg_sel_pc_val; + reg_sel_rb_in <= reg_sel_rb_in; + reg_sel_rb_out <= reg_sel_rb_out; + reg_sel_reg <= reg_sel_reg; + reg_sel_sp_as <= reg_sel_sp_as; + reg_sel_sp_in <= reg_sel_sp_in; + sig_PC <= sig_PC; + zw_PC <= zw_PC; + zw_REG_ALU <= zw_REG_ALU; + zw_REG_NMI <= zw_REG_NMI or nmi_i; + zw_REG_OP <= zw_REG_OP; + zw_REG_sig_PC <= zw_REG_sig_PC; + zw_b1 <= zw_b1; + zw_b2 <= zw_b2; + zw_b3 <= zw_b3; + zw_b4 <= zw_b4; + zw_so <= (zw_so OR (NOT(so_n_i))) AND (NOT(reg_F(6))); + zw_w1 <= zw_w1; + zw_w2 <= zw_w2; + zw_w3 <= zw_w3; + d_o_cld <= sig_D_OUT; + rd_o_cld <= sig_RD; + sync_o_cld <= sig_SYNC; + wr_n_o_cld <= sig_RWn; + wr_o_cld <= sig_WR; + + -- Combined Actions + case current_state is + when FETCH => + zw_REG_OP <= d_i; + if ((nmi_i = '1') and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + zw_REG_NMI <= '0'; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + zw_b1(0) <= reg_F(7); + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + zw_b3 <= adr_nxt_pc_i (15 downto 8); + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"00") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"18") and (rdy_i = '1')) then + elsif ((d_i = X"D8") and (rdy_i = '1')) then + elsif ((d_i = X"58") and (rdy_i = '1')) then + elsif ((d_i = X"B8") and (rdy_i = '1')) then + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + reg_sel_rb_out <= "10"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + zw_b4 <= X"FF"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + reg_sel_reg <= "01"; + reg_sel_rb_in <= "11"; + zw_b4 <= X"FF"; + elsif ((d_i = X"88") and (rdy_i = '1')) then + reg_sel_rb_out <= "10"; + reg_sel_reg <= "10"; + reg_sel_rb_in <= "11"; + zw_b4 <= X"FF"; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + zw_b4 <= X"01"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + reg_sel_reg <= "01"; + reg_sel_rb_in <= "11"; + zw_b4 <= X"01"; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + reg_sel_rb_out <= "10"; + reg_sel_reg <= "10"; + reg_sel_rb_in <= "11"; + zw_b4 <= X"01"; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"20") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + reg_sel_reg <= "01"; + reg_sel_rb_in <= "11"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + reg_sel_reg <= "10"; + reg_sel_rb_in <= "11"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + elsif ((d_i = X"48") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"08") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"68") and (rdy_i = '1')) then + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '0'; + + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + elsif ((d_i = X"28") and (rdy_i = '1')) then + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"40") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"60") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + zw_b1(0) <= reg_F(7); + elsif ((d_i = X"38") and (rdy_i = '1')) then + elsif ((d_i = X"F8") and (rdy_i = '1')) then + elsif ((d_i = X"78") and (rdy_i = '1')) then + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + reg_sel_rb_out <= "10"; + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "01"; + reg_sel_rb_in <= "00"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "11"; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + reg_sel_rb_out <= "00"; + reg_sel_reg <= "10"; + reg_sel_rb_in <= "00"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"98") and (rdy_i = '1')) then + reg_sel_rb_out <= "10"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "01"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + reg_sel_reg <= "01"; + reg_sel_rb_in <= "11"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + reg_sel_reg <= "00"; + reg_sel_rb_in <= "10"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + reg_sel_rb_out <= "01"; + reg_sel_reg <= "11"; + reg_sel_rb_in <= "11"; + reg_sel_sp_in <= '1'; + reg_sel_sp_as <= '0'; + end if; + when s1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s2 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s5 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s3 => + sig_PC <= adr_pc_i; + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(2) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s4 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s12 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s16 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s17 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(2) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s24 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(6) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s25 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s271 => + if (rdy_i = '1' and + zw_REG_OP = X"4C") then + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6C") then + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + zw_b1 <= d_i; + end if; + when s273 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + zw_b2 <= d_i; + end if; + when s304 => + if (rdy_i = '1') then + sig_PC <= zw_b2 & adr_pc_i(7 downto 0); + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when s307 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s177 => + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + end if; + when s180 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s181 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s182 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s183 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s184 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s185 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s186 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s187 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s188 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s189 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s190 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s191 => + sig_PC <= zw_b3 & zw_b1; + when s192 => + sig_PC <= d_i & zw_b1; + when s193 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s377 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s381 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s378 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s382 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s383 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s384 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s385 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s386 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F <= d_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s387 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s388 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s389 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + reg_F <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + end if; + when s391 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when s392 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s390 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s393 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s394 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + end if; + when s395 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s396 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s397 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when s399 => + sig_PC <= adr_sp_i; + when s400 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + when s401 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1 (7 downto 0); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s526 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s527 => + sig_PC <= adr_sp_i; + when s528 => + sig_PC <= adr_sp_i; + when s529 => + sig_PC <= X"FFFE"; + when s530 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(2) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s531 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when s544 => + sig_PC <= adr_sp_i; + when s545 => + sig_PC <= adr_sp_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + when s546 => + sig_PC <= adr_pc_i; + when s547 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + zw_w1 (7 downto 0) <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + end if; + when s549 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_w1 (7 downto 0); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s550 => + sig_PC <= adr_sp_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + when s404 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(7); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s556 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s557 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(7); + reg_F(0) <= q_a_i(7); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s579 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s201 => + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + sig_PC <= X"00" & d_i; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + end if; + when s202 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s210 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s211 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s215 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s217 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s218 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s222 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s223 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s224 => + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s225 => + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s226 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s243 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s244 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s247 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s344 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s343 => + if (rdy_i = '1') then + zw_b1 <= d_alu_i; + end if; + when s251 => + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s351 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + end if; + when s361 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= d_i(7); + reg_F(6) <= d_i(6); + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s360 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s403 => + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + end if; + when s406 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s407 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s409 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s412 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s416 => + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + zw_b1 <= d_i(6 downto 0) & '0'; + zw_b2(0) <= d_i(7); + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + zw_b1 <= '0' & d_i(7 downto 1); + zw_b2(0) <= d_i(0); + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + zw_b1 <= d_i(6 downto 0) & reg_F(0); + zw_b2(0) <= d_i(7); + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + zw_b1 <= reg_F(0) & d_i(7 downto 1); + zw_b2(0) <= d_i(0); + end if; + when s418 => + sig_PC <= adr_pc_i; + reg_F(0) <= zw_b2(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s510 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s553 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s555 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s558 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s560 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s561 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s563 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s564 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s565 => + if (rdy_i = '1' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s566 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s266 => + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "10"; + zw_b2 <= d_i; + end if; + when s301 => + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & adr_nxt_pc_i (7 downto 0); + end if; + when s302 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when RES => + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_pc_as <= '0'; + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when s511 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s559 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s562 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s567 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s568 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s569 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s570 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s571 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s572 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s573 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s574 => + if (rdy_i = '1' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s548 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s551 => + sig_PC <= adr_sp_i; + when s552 => + sig_PC <= adr_sp_i; + when s575 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + zw_b1 <= d_i; + end if; + when s576 => + sig_PC <= X"FFFE"; + when s577 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(2) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when s532 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s533 => + sig_PC <= adr_sp_i; + when s534 => + sig_PC <= adr_sp_i; + when s535 => + if (rdy_i = '1') then + sig_PC <= X"FFFB"; + reg_sel_pc_in <= '1'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when s536 => + sig_PC <= X"FFFA"; + when s537 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_as <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when others => + null; + end case; + end if; + end process clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : process ( + adr_nxt_pc_i, + current_state, + d_i, + irq_n_i, + nmi_i, + rdy_i, + reg_F, + zw_REG_OP, + zw_b2, + zw_b3 + ) + ----------------------------------------------------------------- + begin + case current_state is + when FETCH => + if ((nmi_i = '1') and (rdy_i = '1')) then + next_state <= s532; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + next_state <= s548; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + next_state <= s510; + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + next_state <= s266; + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + next_state <= s351; + elsif ((d_i = X"00") and (rdy_i = '1')) then + next_state <= s526; + elsif ((d_i = X"18") and (rdy_i = '1')) then + next_state <= s12; + elsif ((d_i = X"D8") and (rdy_i = '1')) then + next_state <= s16; + elsif ((d_i = X"58") and (rdy_i = '1')) then + next_state <= s17; + elsif ((d_i = X"B8") and (rdy_i = '1')) then + next_state <= s24; + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + next_state <= s226; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"88") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + next_state <= s226; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + next_state <= s271; + elsif ((d_i = X"20") and (rdy_i = '1')) then + next_state <= s397; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + next_state <= s1; + elsif ((d_i = X"48") and (rdy_i = '1')) then + next_state <= s377; + elsif ((d_i = X"08") and (rdy_i = '1')) then + next_state <= s378; + elsif ((d_i = X"68") and (rdy_i = '1')) then + next_state <= s379; + elsif ((d_i = X"28") and (rdy_i = '1')) then + next_state <= s380; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"40") and (rdy_i = '1')) then + next_state <= s387; + elsif ((d_i = X"60") and (rdy_i = '1')) then + next_state <= s390; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + next_state <= s511; + elsif ((d_i = X"38") and (rdy_i = '1')) then + next_state <= s2; + elsif ((d_i = X"F8") and (rdy_i = '1')) then + next_state <= s5; + elsif ((d_i = X"78") and (rdy_i = '1')) then + next_state <= s3; + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + next_state <= s404; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + next_state <= s556; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + next_state <= s557; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + next_state <= s579; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"98") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + next_state <= s4; + elsif (rdy_i = '1') then + next_state <= s1; + else + next_state <= FETCH; + end if; + when s1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s1; + end if; + when s2 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s2; + end if; + when s5 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s5; + end if; + when s3 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s3; + end if; + when s4 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s4; + end if; + when s12 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s12; + end if; + when s16 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s16; + end if; + when s17 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s17; + end if; + when s24 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s24; + end if; + when s25 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s25; + end if; + when s271 => + if (rdy_i = '1' and + zw_REG_OP = X"4C") then + next_state <= s307; + elsif (rdy_i = '1' and + zw_REG_OP = X"6C") then + next_state <= s273; + else + next_state <= s271; + end if; + when s273 => + if (rdy_i = '1') then + next_state <= s304; + else + next_state <= s273; + end if; + when s304 => + if (rdy_i = '1') then + next_state <= s307; + else + next_state <= s304; + end if; + when s307 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s307; + end if; + when s177 => + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + next_state <= s184; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + next_state <= s185; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + next_state <= s183; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + next_state <= s182; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + next_state <= s180; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + next_state <= s181; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + next_state <= s186; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + next_state <= s185; + else + next_state <= s177; + end if; + when s180 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s180; + end if; + when s181 => + if (rdy_i = '1') then + next_state <= s189; + else + next_state <= s181; + end if; + when s182 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s182; + end if; + when s183 => + if (rdy_i = '1') then + next_state <= s187; + else + next_state <= s183; + end if; + when s184 => + next_state <= FETCH; + when s185 => + if (rdy_i = '1') then + next_state <= s190; + else + next_state <= s185; + end if; + when s186 => + if (rdy_i = '1') then + next_state <= s188; + else + next_state <= s186; + end if; + when s187 => + next_state <= FETCH; + when s188 => + if (rdy_i = '1') then + next_state <= s192; + else + next_state <= s188; + end if; + when s189 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s189; + end if; + when s190 => + next_state <= FETCH; + when s191 => + next_state <= s193; + when s192 => + next_state <= s193; + when s193 => + next_state <= FETCH; + when s377 => + if (rdy_i = '1') then + next_state <= s381; + else + next_state <= s377; + end if; + when s381 => + next_state <= FETCH; + when s378 => + if (rdy_i = '1') then + next_state <= s382; + else + next_state <= s378; + end if; + when s382 => + next_state <= FETCH; + when s379 => + if (rdy_i = '1') then + next_state <= s383; + else + next_state <= s379; + end if; + when s383 => + if (rdy_i = '1') then + next_state <= s384; + else + next_state <= s383; + end if; + when s384 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s384; + end if; + when s380 => + if (rdy_i = '1') then + next_state <= s385; + else + next_state <= s380; + end if; + when s385 => + if (rdy_i = '1') then + next_state <= s386; + else + next_state <= s385; + end if; + when s386 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s386; + end if; + when s387 => + if (rdy_i = '1') then + next_state <= s388; + else + next_state <= s387; + end if; + when s388 => + if (rdy_i = '1') then + next_state <= s389; + else + next_state <= s388; + end if; + when s389 => + if (rdy_i = '1') then + next_state <= s391; + else + next_state <= s389; + end if; + when s391 => + if (rdy_i = '1') then + next_state <= s392; + else + next_state <= s391; + end if; + when s392 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s392; + end if; + when s390 => + if (rdy_i = '1') then + next_state <= s393; + else + next_state <= s390; + end if; + when s393 => + if (rdy_i = '1') then + next_state <= s394; + else + next_state <= s393; + end if; + when s394 => + if (rdy_i = '1') then + next_state <= s395; + else + next_state <= s394; + end if; + when s395 => + if (rdy_i = '1') then + next_state <= s396; + else + next_state <= s395; + end if; + when s396 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s396; + end if; + when s397 => + if (rdy_i = '1') then + next_state <= s398; + else + next_state <= s397; + end if; + when s398 => + if (rdy_i = '1') then + next_state <= s399; + else + next_state <= s398; + end if; + when s399 => + next_state <= s400; + when s400 => + next_state <= s401; + when s401 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s401; + end if; + when s526 => + if (rdy_i = '1') then + next_state <= s527; + else + next_state <= s526; + end if; + when s527 => + next_state <= s528; + when s528 => + next_state <= s529; + when s529 => + next_state <= s531; + when s530 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s530; + end if; + when s531 => + if (rdy_i = '1') then + next_state <= s530; + else + next_state <= s531; + end if; + when s544 => + next_state <= s550; + when s545 => + next_state <= s546; + when s546 => + next_state <= s547; + when s547 => + if (rdy_i = '1') then + next_state <= s549; + else + next_state <= s547; + end if; + when s549 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s549; + end if; + when s550 => + next_state <= s545; + when s404 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s404; + end if; + when s556 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s556; + end if; + when s557 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s557; + end if; + when s579 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s579; + end if; + when s201 => + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + next_state <= s224; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + next_state <= FETCH; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + next_state <= s217; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + next_state <= s202; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + next_state <= s210; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + next_state <= s211; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + next_state <= s215; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + next_state <= s218; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + next_state <= s217; + else + next_state <= s201; + end if; + when s202 => + if (rdy_i = '1') then + next_state <= s224; + else + next_state <= s202; + end if; + when s210 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s210; + end if; + when s211 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s211; + end if; + when s215 => + if (rdy_i = '1') then + next_state <= s223; + else + next_state <= s215; + end if; + when s217 => + if (rdy_i = '1') then + next_state <= s224; + else + next_state <= s217; + end if; + when s218 => + if (rdy_i = '1') then + next_state <= s222; + else + next_state <= s218; + end if; + when s222 => + if (rdy_i = '1') then + next_state <= s202; + else + next_state <= s222; + end if; + when s223 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s223; + end if; + when s224 => + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s224; + end if; + when s225 => + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s224; + else + next_state <= s225; + end if; + when s226 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + next_state <= s343; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + next_state <= s247; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + next_state <= s243; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + next_state <= s244; + else + next_state <= s226; + end if; + when s243 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s243; + end if; + when s244 => + if (rdy_i = '1') then + next_state <= s344; + else + next_state <= s244; + end if; + when s247 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s247; + end if; + when s344 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s344; + end if; + when s343 => + if (rdy_i = '1') then + next_state <= s250; + else + next_state <= s343; + end if; + when s250 => + if (rdy_i = '1') then + next_state <= s251; + else + next_state <= s250; + end if; + when s251 => + next_state <= FETCH; + when s351 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + next_state <= s361; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + next_state <= s360; + else + next_state <= s351; + end if; + when s361 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s361; + end if; + when s360 => + if (rdy_i = '1') then + next_state <= s361; + else + next_state <= s360; + end if; + when s403 => + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + next_state <= s407; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + next_state <= s413; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + next_state <= s409; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + next_state <= s406; + else + next_state <= s403; + end if; + when s406 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s406; + end if; + when s407 => + if (rdy_i = '1') then + next_state <= s412; + else + next_state <= s407; + end if; + when s409 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s409; + end if; + when s412 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s412; + end if; + when s413 => + if (rdy_i = '1') then + next_state <= s416; + else + next_state <= s413; + end if; + when s416 => + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + next_state <= s418; + else + next_state <= s416; + end if; + when s418 => + next_state <= FETCH; + when s510 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + next_state <= s565; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + next_state <= s560; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + next_state <= s553; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + next_state <= s555; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + next_state <= s555; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + next_state <= s558; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + next_state <= s561; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s510; + end if; + when s553 => + if (rdy_i = '1') then + next_state <= s565; + else + next_state <= s553; + end if; + when s555 => + if (rdy_i = '1') then + next_state <= s564; + else + next_state <= s555; + end if; + when s558 => + if (rdy_i = '1') then + next_state <= s566; + else + next_state <= s558; + end if; + when s560 => + if (rdy_i = '1') then + next_state <= s565; + else + next_state <= s560; + end if; + when s561 => + if (rdy_i = '1') then + next_state <= s563; + else + next_state <= s561; + end if; + when s563 => + if (rdy_i = '1') then + next_state <= s553; + else + next_state <= s563; + end if; + when s564 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s565; + else + next_state <= s564; + end if; + when s565 => + if (rdy_i = '1' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s565; + end if; + when s566 => + if (rdy_i = '1') then + next_state <= s564; + else + next_state <= s566; + end if; + when s266 => + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s301; + else + next_state <= s266; + end if; + when s301 => + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s302; + else + next_state <= s301; + end if; + when s302 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s302; + end if; + when RES => + next_state <= s544; + when s511 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + next_state <= s574; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + next_state <= s569; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + next_state <= s559; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + next_state <= s562; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + next_state <= s567; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + next_state <= s568; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + next_state <= s570; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s511; + end if; + when s559 => + if (rdy_i = '1') then + next_state <= s574; + else + next_state <= s559; + end if; + when s562 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s562; + end if; + when s567 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s567; + end if; + when s568 => + if (rdy_i = '1') then + next_state <= s571; + else + next_state <= s568; + end if; + when s569 => + if (rdy_i = '1') then + next_state <= s574; + else + next_state <= s569; + end if; + when s570 => + if (rdy_i = '1') then + next_state <= s572; + else + next_state <= s570; + end if; + when s571 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s571; + end if; + when s572 => + if (rdy_i = '1') then + next_state <= s559; + else + next_state <= s572; + end if; + when s573 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s574; + else + next_state <= s573; + end if; + when s574 => + if (rdy_i = '1' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s574; + end if; + when s548 => + if (rdy_i = '1') then + next_state <= s551; + else + next_state <= s548; + end if; + when s551 => + next_state <= s552; + when s552 => + next_state <= s576; + when s575 => + if (rdy_i = '1') then + next_state <= s577; + else + next_state <= s575; + end if; + when s576 => + next_state <= s575; + when s577 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s577; + end if; + when s532 => + if (rdy_i = '1') then + next_state <= s533; + else + next_state <= s532; + end if; + when s533 => + next_state <= s534; + when s534 => + next_state <= s536; + when s535 => + if (rdy_i = '1') then + next_state <= s537; + else + next_state <= s535; + end if; + when s536 => + next_state <= s535; + when s537 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s537; + end if; + when others => + next_state <= RES; + end case; + end process nextstate_proc; + + ----------------------------------------------------------------- + output_proc : process ( + adr_nxt_pc_i, + adr_pc_i, + adr_sp_i, + current_state, + d_alu_i, + d_i, + d_regs_out_i, + irq_n_i, + nmi_i, + q_a_i, + q_x_i, + q_y_i, + rdy_i, + reg_F, + reg_sel_pc_as, + reg_sel_pc_in, + reg_sel_pc_val, + reg_sel_rb_in, + reg_sel_rb_out, + reg_sel_reg, + reg_sel_sp_as, + reg_sel_sp_in, + sig_PC, + zw_ALU, + zw_ALU1, + zw_ALU2, + zw_ALU3, + zw_ALU4, + zw_ALU5, + zw_ALU6, + zw_REG_OP, + zw_b1, + zw_b2, + zw_b3, + zw_b4, + zw_w1 + ) + ----------------------------------------------------------------- + begin + -- Default Assignment + a_o <= sig_PC; + adr_o <= X"0000"; + ch_a_o <= X"00"; + ch_b_o <= X"00"; + d_regs_in_o <= X"00"; + fetch_o <= '0'; + ld_o <= "00"; + ld_pc_o <= '0'; + ld_sp_o <= '0'; + load_regs_o <= '0'; + offset_o <= X"0000"; + sel_pc_as_o <= reg_sel_pc_as; + sel_pc_in_o <= reg_sel_pc_in; + sel_pc_val_o <= reg_sel_pc_val; + sel_rb_in_o <= reg_sel_rb_in; + sel_rb_out_o <= reg_sel_rb_out; + sel_reg_o <= reg_sel_reg; + sel_sp_as_o <= reg_sel_sp_as; + sel_sp_in_o <= reg_sel_sp_in; + -- Default Assignment To Internals + sig_D_OUT <= X"00"; + sig_RD <= '1'; + sig_RWn <= '1'; + sig_SYNC <= '0'; + sig_WR <= '0'; + zw_ALU <= '0' & X"00"; + zw_ALU1 <= '0' & X"00"; + zw_ALU2 <= '0' & X"00"; + zw_ALU3 <= '0' & X"00"; + zw_ALU4 <= '0' & X"00"; + zw_ALU5 <= '0' & X"00"; + zw_ALU6 <= '0' & X"00"; + + -- Combined Actions + case current_state is + when FETCH => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= NOT (rdy_i); + if ((nmi_i = '1') and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"00") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"18") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"D8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"58") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"B8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"88") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"20") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"48") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"08") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"68") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"28") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"40") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"60") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"38") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"F8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"78") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"98") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s2 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s5 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s3 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s4 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + adr_o <= X"01" & d_regs_out_i; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + d_regs_in_o <= adr_sp_i (7 downto 0); + ch_a_o <= adr_sp_i (7 downto 0); + ch_b_o <= X"00"; + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1') then + ch_a_o <= d_regs_out_i; + ch_b_o <= X"00"; + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s12 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s16 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s17 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s24 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s25 => + if (rdy_i = '1') then + d_regs_in_o <= d_alu_i; + ch_a_o <= d_regs_out_i; + ch_b_o <= zw_b4; + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s273 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s307 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s177 => + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s180 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s181 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s182 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s183 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s184 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s185 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s187 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s188 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s189 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s190 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s191 => + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + when s192 => + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + when s193 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s377 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= q_a_i; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s381 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s378 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s382 => + sig_SYNC <= '1'; + fetch_o <= '1'; + when s379 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s384 => + if (rdy_i = '1') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s380 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s386 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s387 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s388 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s389 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s392 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s390 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s393 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s395 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s396 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s397 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when s398 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when s399 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s401 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s526 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when s527 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s528 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F OR X"10"; + when s530 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s544 => + ld_o <= "11"; + ld_sp_o <= '1'; + when s545 => + adr_o <= X"FFFB"; + ld_o <= "11"; + ld_pc_o <= '1'; + when s546 => + ld_o <= "11"; + ld_pc_o <= '1'; + when s549 => + if (rdy_i = '1') then + adr_o <= d_i & zw_w1 (7 downto 0); + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s550 => + ld_o <= "11"; + ld_sp_o <= '1'; + when s404 => + if (rdy_i = '1') then + ch_a_o <= q_a_i (6 downto 0) & '0'; + ch_b_o <= X"00"; + d_regs_in_o <= q_a_i (6 downto 0) & '0'; + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s556 => + if (rdy_i = '1') then + ch_a_o <= '0' & q_a_i (7 downto 1); + ch_b_o <= X"00"; + d_regs_in_o <= '0' & q_a_i (7 downto 1); + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s557 => + if (rdy_i = '1') then + ch_a_o <= q_a_i (6 downto 0) & reg_F(0); + ch_b_o <= X"00"; + d_regs_in_o <= q_a_i (6 downto 0) & reg_F(0); + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s579 => + if (rdy_i = '1') then + ch_a_o <= reg_F(0) & q_a_i (7 downto 1); + ch_b_o <= X"00"; + d_regs_in_o <= reg_F(0) & q_a_i (7 downto 1); + load_regs_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s201 => + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + ld_o <= "11"; + ld_pc_o <= '1'; + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s202 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s210 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s211 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s215 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s217 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s222 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s223 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s224 => + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s225 => + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s226 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + end if; + when s243 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s244 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s247 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s343 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= zw_b4; + end if; + when s250 => + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= zw_b1; + end if; + when s251 => + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + when s351 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s361 => + if (rdy_i = '1') then + ch_a_o <= q_a_i AND d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s360 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s403 => + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s406 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s407 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s409 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s416 => + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + sig_D_OUT <= d_i(6 downto 0) & '0'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + sig_D_OUT <= '0' & d_i(7 downto 1); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + sig_D_OUT <= d_i(6 downto 0) & reg_F(0); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + sig_D_OUT <= reg_F(0) & d_i(7 downto 1); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + end if; + when s418 => + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + when s510 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s553 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s555 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s558 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s560 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s563 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s564 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s565 => + if (rdy_i = '1' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s566 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s266 => + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s301 => + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & + zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0)); + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1') then + offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & + zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0)); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s302 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when RES => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_pc_o <= '1'; + + ld_sp_o <= '1'; + sig_RWn <= '1'; + sig_RD <= '1'; + when s511 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s559 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s562 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s567 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s568 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s569 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s571 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s572 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s573 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s574 => + if (rdy_i = '1' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s548 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when s551 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s552 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when s577 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when s532 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when s533 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s534 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when s537 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when others => + null; + end case; + end process output_proc; + + -- Concurrent Statements + -- Clocked output assignments + d_o <= d_o_cld; + rd_o <= rd_o_cld; + sync_o <= sync_o_cld; + wr_n_o <= wr_n_o_cld; + wr_o <= wr_o_cld; +end fsm; Index: vhdl/core.vhd =================================================================== --- vhdl/core.vhd (nonexistent) +++ vhdl/core.vhd (revision 18) @@ -0,0 +1,341 @@ +-- VHDL Entity R6502_TC.Core.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:05 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity Core is + port( + clk_clk_i : in std_logic; + d_i : in std_logic_vector (7 downto 0); + irq_n_i : in std_logic; + nmi_n_i : in std_logic; + rdy_i : in std_logic; + rst_rst_n_i : in std_logic; + so_n_i : in std_logic; + a_o : out std_logic_vector (15 downto 0); + d_o : out std_logic_vector (7 downto 0); + rd_o : out std_logic; + sync_o : out std_logic; + wr_n_o : out std_logic; + wr_o : out std_logic + ); + +-- Declarations + +end Core ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version +-- 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A +-- PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- <<-- more -->> +-- Title: Core +-- Path: R6502_TC/Core/struct +-- Edited: by eda on 04 Jan 2009 +-- +-- VHDL Architecture R6502_TC.Core.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:06 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +library R6502_TC; + +architecture struct of Core is + + -- Architecture declarations + + -- Internal signal declarations + signal adr_nxt_pc_o_i : std_logic_vector(15 downto 0); + signal adr_o_i : std_logic_vector(15 downto 0); + signal adr_pc_o_i : std_logic_vector(15 downto 0); + signal adr_sp_o_i : std_logic_vector(15 downto 0); + signal ch_a_o_i : std_logic_vector(7 downto 0); + signal ch_b_o_i : std_logic_vector(7 downto 0); + signal d_alu_n_o_i : std_logic; + signal d_alu_o_i : std_logic_vector(7 downto 0); + signal d_alu_or_o_i : std_logic; + signal d_regs_in_o_i : std_logic_vector(7 downto 0); + signal d_regs_out_o_i : std_logic_vector(7 downto 0); + signal fetch_o_i : std_logic; + signal ld_o_i : std_logic_vector(1 downto 0); + signal ld_pc_o_i : std_logic; + signal ld_sp_o_i : std_logic; + signal load_regs_o_i : std_logic; + signal nmi_o_i : std_logic; + signal offset_o_i : std_logic_vector(15 downto 0); + signal q_a_o_i : std_logic_vector(7 downto 0); + signal q_x_o_i : std_logic_vector(7 downto 0); + signal q_y_o_i : std_logic_vector(7 downto 0); + signal reg_0flag_o_i : std_logic; + signal reg_1flag_o_i : std_logic; + signal reg_7flag_o_i : std_logic; + signal sel_pc_as_o_i : std_logic; + signal sel_pc_in_o_i : std_logic; + signal sel_pc_val_o_i : std_logic_vector(1 downto 0); + signal sel_rb_in_o_i : std_logic_vector(1 downto 0); + signal sel_rb_out_o_i : std_logic_vector(1 downto 0); + signal sel_reg_o_i : std_logic_vector(1 downto 0); + signal sel_sp_as_o_i : std_logic; + signal sel_sp_in_o_i : std_logic; + + + -- ModuleWare signal declarations(v1.9) for instance 'U_11' of 'add' + signal mw_U_11temp_din0 : std_logic_vector(8 downto 0); + signal mw_U_11temp_din1 : std_logic_vector(8 downto 0); + signal mw_U_11sum : unsigned(8 downto 0); + + -- Component Declarations + component FSM_Execution_Unit + port ( + adr_nxt_pc_i : in std_logic_vector (15 downto 0); + adr_pc_i : in std_logic_vector (15 downto 0); + adr_sp_i : in std_logic_vector (15 downto 0); + clk_clk_i : in std_logic ; + d_alu_i : in std_logic_vector ( 7 downto 0 ); + d_i : in std_logic_vector ( 7 downto 0 ); + d_regs_out_i : in std_logic_vector ( 7 downto 0 ); + irq_n_i : in std_logic ; + nmi_i : in std_logic ; + q_a_i : in std_logic_vector ( 7 downto 0 ); + q_x_i : in std_logic_vector ( 7 downto 0 ); + q_y_i : in std_logic_vector ( 7 downto 0 ); + rdy_i : in std_logic ; + reg_0flag_i : in std_logic ; + reg_1flag_i : in std_logic ; + reg_7flag_i : in std_logic ; + rst_rst_n_i : in std_logic ; + so_n_i : in std_logic ; + a_o : out std_logic_vector (15 downto 0); + adr_o : out std_logic_vector (15 downto 0); + ch_a_o : out std_logic_vector ( 7 downto 0 ); + ch_b_o : out std_logic_vector ( 7 downto 0 ); + d_o : out std_logic_vector ( 7 downto 0 ); + d_regs_in_o : out std_logic_vector ( 7 downto 0 ); + fetch_o : out std_logic ; + ld_o : out std_logic_vector ( 1 downto 0 ); + ld_pc_o : out std_logic ; + ld_sp_o : out std_logic ; + load_regs_o : out std_logic ; + offset_o : out std_logic_vector ( 15 downto 0 ); + rd_o : out std_logic ; + sel_pc_as_o : out std_logic ; + sel_pc_in_o : out std_logic ; + sel_pc_val_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_in_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_out_o : out std_logic_vector ( 1 downto 0 ); + sel_reg_o : out std_logic_vector ( 1 downto 0 ); + sel_sp_as_o : out std_logic ; + sel_sp_in_o : out std_logic ; + sync_o : out std_logic ; + wr_n_o : out std_logic ; + wr_o : out std_logic + ); + end component; + component FSM_NMI + port ( + clk_clk_i : in std_logic ; + fetch_i : in std_logic ; + nmi_n_i : in std_logic ; + rst_rst_n_i : in std_logic ; + nmi_o : out std_logic + ); + end component; + component RegBank_AXY + port ( + clk_clk_i : in std_logic ; + d_regs_in_i : in std_logic_vector (7 downto 0); + load_regs_i : in std_logic ; + rst_rst_n_i : in std_logic ; + sel_rb_in_i : in std_logic_vector (1 downto 0); + sel_rb_out_i : in std_logic_vector (1 downto 0); + sel_reg_i : in std_logic_vector (1 downto 0); + d_regs_out_o : out std_logic_vector (7 downto 0); + q_a_o : out std_logic_vector (7 downto 0); + q_x_o : out std_logic_vector (7 downto 0); + q_y_o : out std_logic_vector (7 downto 0) + ); + end component; + component Reg_PC + port ( + adr_i : in std_logic_vector (15 downto 0); + clk_clk_i : in std_logic ; + ld_i : in std_logic_vector (1 downto 0); + ld_pc_i : in std_logic ; + offset_i : in std_logic_vector (15 downto 0); + rst_rst_n_i : in std_logic ; + sel_pc_as_i : in std_logic ; + sel_pc_in_i : in std_logic ; + sel_pc_val_i : in std_logic_vector (1 downto 0); + adr_nxt_pc_o : out std_logic_vector (15 downto 0); + adr_pc_o : out std_logic_vector (15 downto 0) + ); + end component; + component Reg_SP + port ( + adr_low_i : in std_logic_vector (7 downto 0); + clk_clk_i : in std_logic ; + ld_low_i : in std_logic ; + ld_sp_i : in std_logic ; + rst_rst_n_i : in std_logic ; + sel_sp_as_i : in std_logic ; + sel_sp_in_i : in std_logic ; + adr_sp_o : out std_logic_vector (15 downto 0) + ); + end component; + + -- Optional embedded configurations + -- pragma synthesis_off + for all : FSM_Execution_Unit use entity R6502_TC.FSM_Execution_Unit; + for all : FSM_NMI use entity R6502_TC.FSM_NMI; + for all : RegBank_AXY use entity R6502_TC.RegBank_AXY; + for all : Reg_PC use entity R6502_TC.Reg_PC; + for all : Reg_SP use entity R6502_TC.Reg_SP; + -- pragma synthesis_on + + +begin + + -- ModuleWare code(v1.9) for instance 'U_11' of 'add' + mw_U_11temp_din0 <= '0' & ch_a_o_i; + mw_U_11temp_din1 <= '0' & ch_b_o_i; + u_11combo_proc: process (mw_U_11temp_din0, mw_U_11temp_din1) + variable temp_carry : std_logic; + begin + temp_carry := '0'; + mw_U_11sum <= unsigned(mw_U_11temp_din0) + unsigned(mw_U_11temp_din1) + temp_carry; + end process u_11combo_proc; + d_alu_o_i <= conv_std_logic_vector(mw_U_11sum(7 downto 0),8); + reg_0flag_o_i <= mw_U_11sum(8) ; + + -- ModuleWare code(v1.9) for instance 'U_8' of 'inv' + reg_1flag_o_i <= not(d_alu_or_o_i); + + -- ModuleWare code(v1.9) for instance 'U_9' of 'inv' + reg_7flag_o_i <= not(d_alu_n_o_i); + + -- ModuleWare code(v1.9) for instance 'U_10' of 'inv' + d_alu_n_o_i <= not(d_alu_o_i(7)); + + -- ModuleWare code(v1.9) for instance 'U_7' of 'por' + d_alu_or_o_i <= d_alu_o_i(0) or d_alu_o_i(1) or d_alu_o_i(2) or d_alu_o_i(3) or d_alu_o_i(4) or d_alu_o_i(5) or d_alu_o_i(6) or d_alu_o_i(7); + + -- Instance port mappings. + U_4 : FSM_Execution_Unit + port map ( + adr_nxt_pc_i => adr_nxt_pc_o_i, + adr_pc_i => adr_pc_o_i, + adr_sp_i => adr_sp_o_i, + clk_clk_i => clk_clk_i, + d_alu_i => d_alu_o_i, + d_i => d_i, + d_regs_out_i => d_regs_out_o_i, + irq_n_i => irq_n_i, + nmi_i => nmi_o_i, + q_a_i => q_a_o_i, + q_x_i => q_x_o_i, + q_y_i => q_y_o_i, + rdy_i => rdy_i, + reg_0flag_i => reg_0flag_o_i, + reg_1flag_i => reg_1flag_o_i, + reg_7flag_i => reg_7flag_o_i, + rst_rst_n_i => rst_rst_n_i, + so_n_i => so_n_i, + a_o => a_o, + adr_o => adr_o_i, + ch_a_o => ch_a_o_i, + ch_b_o => ch_b_o_i, + d_o => d_o, + d_regs_in_o => d_regs_in_o_i, + fetch_o => fetch_o_i, + ld_o => ld_o_i, + ld_pc_o => ld_pc_o_i, + ld_sp_o => ld_sp_o_i, + load_regs_o => load_regs_o_i, + offset_o => offset_o_i, + rd_o => rd_o, + sel_pc_as_o => sel_pc_as_o_i, + sel_pc_in_o => sel_pc_in_o_i, + sel_pc_val_o => sel_pc_val_o_i, + sel_rb_in_o => sel_rb_in_o_i, + sel_rb_out_o => sel_rb_out_o_i, + sel_reg_o => sel_reg_o_i, + sel_sp_as_o => sel_sp_as_o_i, + sel_sp_in_o => sel_sp_in_o_i, + sync_o => sync_o, + wr_n_o => wr_n_o, + wr_o => wr_o + ); + U_6 : FSM_NMI + port map ( + clk_clk_i => clk_clk_i, + fetch_i => fetch_o_i, + nmi_n_i => nmi_n_i, + rst_rst_n_i => rst_rst_n_i, + nmi_o => nmi_o_i + ); + U_2 : RegBank_AXY + port map ( + clk_clk_i => clk_clk_i, + d_regs_in_i => d_regs_in_o_i, + load_regs_i => load_regs_o_i, + rst_rst_n_i => rst_rst_n_i, + sel_rb_in_i => sel_rb_in_o_i, + sel_rb_out_i => sel_rb_out_o_i, + sel_reg_i => sel_reg_o_i, + d_regs_out_o => d_regs_out_o_i, + q_a_o => q_a_o_i, + q_x_o => q_x_o_i, + q_y_o => q_y_o_i + ); + U_0 : Reg_PC + port map ( + adr_i => adr_o_i, + clk_clk_i => clk_clk_i, + ld_i => ld_o_i, + ld_pc_i => ld_pc_o_i, + offset_i => offset_o_i, + rst_rst_n_i => rst_rst_n_i, + sel_pc_as_i => sel_pc_as_o_i, + sel_pc_in_i => sel_pc_in_o_i, + sel_pc_val_i => sel_pc_val_o_i, + adr_nxt_pc_o => adr_nxt_pc_o_i, + adr_pc_o => adr_pc_o_i + ); + U_1 : Reg_SP + port map ( + adr_low_i => adr_o_i(7 DOWNTO 0), + clk_clk_i => clk_clk_i, + ld_low_i => ld_o_i(0), + ld_sp_i => ld_sp_o_i, + rst_rst_n_i => rst_rst_n_i, + sel_sp_as_i => sel_sp_as_o_i, + sel_sp_in_i => sel_sp_in_o_i, + adr_sp_o => adr_sp_o_i + ); + +end struct;
vhdl/core.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/fsm_nmi.vhd =================================================================== --- vhdl/fsm_nmi.vhd (nonexistent) +++ vhdl/fsm_nmi.vhd (revision 18) @@ -0,0 +1,167 @@ +-- VHDL Entity R6502_TC.FSM_NMI.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:05 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity FSM_NMI is + port( + clk_clk_i : in std_logic; + fetch_i : in std_logic; + nmi_n_i : in std_logic; + rst_rst_n_i : in std_logic; + nmi_o : out std_logic + ); + +-- Declarations + +end FSM_NMI ; + +-- Jens-D. Gutschmidt Project: R6502_TC + +-- scantara2003@yahoo.de + +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG + +-- + +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by + +-- the Free Software Foundation, either version 3 of the License, or any later version. + +-- + +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +-- + +-- You should have received a copy of the GNU General Public License along with this program. If not, see . + +-- + +-- CVS Revisins History + +-- + +-- $Log: not supported by cvs2svn $ + +-- <<-- more -->> + +-- Title: FSM for NMI + +-- Path: R6502_TC/FSM_NMI/fsm + +-- Edited: by eda on 03 Jan 2009 + +-- +-- VHDL Architecture R6502_TC.FSM_NMI.fsm +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:43:05 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +architecture fsm of FSM_NMI is + + type state_type is ( + idle, + idle1, + idle2, + IMP + ); + + -- State vector declaration + attribute state_vector : string; + attribute state_vector of fsm : architecture is "current_state"; + + -- Declare current and next state signals + signal current_state : state_type; + signal next_state : state_type; + + -- Declare any pre-registered internal signals + signal nmi_o_cld : std_logic ; + +begin + + ----------------------------------------------------------------- + clocked_proc : process ( + clk_clk_i, + rst_rst_n_i + ) + ----------------------------------------------------------------- + begin + if (rst_rst_n_i = '0') then + current_state <= idle; + -- Default Reset Values + nmi_o_cld <= '0'; + elsif (clk_clk_i'event and clk_clk_i = '1') then + current_state <= next_state; + -- Default Assignment To Internals + nmi_o_cld <= '0'; + + -- Combined Actions + case current_state is + when IMP => + nmi_o_cld <= '1'; + when others => + null; + end case; + end if; + end process clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : process ( + current_state, + fetch_i, + nmi_n_i + ) + ----------------------------------------------------------------- + begin + case current_state is + -- <<< REQ1 + when idle => + if (nmi_n_i = '1') then + next_state <= idle1; + else + next_state <= idle; + end if; + when idle1 => + if (nmi_n_i = '0') then + next_state <= idle2; + else + next_state <= idle1; + end if; + when idle2 => + if (nmi_n_i = '0') then + next_state <= IMP; + else + next_state <= idle; + end if; + when IMP => + if (fetch_i = '1') then + next_state <= idle; + else + next_state <= IMP; + end if; + when others => + next_state <= idle; + end case; + end process nextstate_proc; + + -- Concurrent Statements + -- Clocked output assignments + nmi_o <= nmi_o_cld; +end fsm;
vhdl/fsm_nmi.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/regbank_axy.vhd =================================================================== --- vhdl/regbank_axy.vhd (nonexistent) +++ vhdl/regbank_axy.vhd (revision 18) @@ -0,0 +1,191 @@ +-- VHDL Entity R6502_TC.RegBank_AXY.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:53 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity RegBank_AXY is + port( + clk_clk_i : in std_logic; + d_regs_in_i : in std_logic_vector (7 downto 0); + load_regs_i : in std_logic; + rst_rst_n_i : in std_logic; + sel_rb_in_i : in std_logic_vector (1 downto 0); + sel_rb_out_i : in std_logic_vector (1 downto 0); + sel_reg_i : in std_logic_vector (1 downto 0); + d_regs_out_o : out std_logic_vector (7 downto 0); + q_a_o : out std_logic_vector (7 downto 0); + q_x_o : out std_logic_vector (7 downto 0); + q_y_o : out std_logic_vector (7 downto 0) + ); + +-- Declarations + +end RegBank_AXY ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- <<-- more -->> +-- Title: Register Bank for register A, X and Y +-- Path: R6502_TC/RegBank_AXY/struct +-- Edited: by eda on 02 Jan 2009 +-- +-- VHDL Architecture R6502_TC.RegBank_AXY.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 22:42:53 04.01.2009 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + + +architecture struct of RegBank_AXY is + + -- Architecture declarations + + -- Internal signal declarations + signal ld : std_logic_vector(2 downto 0); + signal load1_o_i : std_logic; + signal load2_o_i : std_logic; + signal load_o_i : std_logic; + signal q_mux_o_i : std_logic_vector(7 downto 0); + signal val_zero : std_logic_vector(7 downto 0); + + -- Implicit buffer signal declarations + signal q_a_o_internal : std_logic_vector (7 downto 0); + signal q_x_o_internal : std_logic_vector (7 downto 0); + signal q_y_o_internal : std_logic_vector (7 downto 0); + + + -- ModuleWare signal declarations(v1.9) for instance 'U_0' of 'adff' + signal mw_U_0reg_cval : std_logic_vector(7 downto 0); + + -- ModuleWare signal declarations(v1.9) for instance 'U_4' of 'adff' + signal mw_U_4reg_cval : std_logic_vector(7 downto 0); + + -- ModuleWare signal declarations(v1.9) for instance 'U_5' of 'adff' + signal mw_U_5reg_cval : std_logic_vector(7 downto 0); + + +begin + + -- ModuleWare code(v1.9) for instance 'U_0' of 'adff' + q_a_o_internal <= mw_U_0reg_cval; + u_0seq_proc: process (clk_clk_i, rst_rst_n_i) + begin + if (rst_rst_n_i = '0') then + mw_U_0reg_cval <= "00000000"; + elsif (clk_clk_i'event and clk_clk_i='1') then + if (load_o_i = '1') then + mw_U_0reg_cval <= q_mux_o_i; + end if; + end if; + end process u_0seq_proc; + + -- ModuleWare code(v1.9) for instance 'U_4' of 'adff' + q_x_o_internal <= mw_U_4reg_cval; + u_4seq_proc: process (clk_clk_i, rst_rst_n_i) + begin + if (rst_rst_n_i = '0') then + mw_U_4reg_cval <= "00000000"; + elsif (clk_clk_i'event and clk_clk_i='1') then + if (load1_o_i = '1') then + mw_U_4reg_cval <= q_mux_o_i; + end if; + end if; + end process u_4seq_proc; + + -- ModuleWare code(v1.9) for instance 'U_5' of 'adff' + q_y_o_internal <= mw_U_5reg_cval; + u_5seq_proc: process (clk_clk_i, rst_rst_n_i) + begin + if (rst_rst_n_i = '0') then + mw_U_5reg_cval <= "00000000"; + elsif (clk_clk_i'event and clk_clk_i='1') then + if (load2_o_i = '1') then + mw_U_5reg_cval <= q_mux_o_i; + end if; + end if; + end process u_5seq_proc; + + -- ModuleWare code(v1.9) for instance 'U_6' of 'and' + load_o_i <= load_regs_i and ld(0); + + -- ModuleWare code(v1.9) for instance 'U_7' of 'and' + load1_o_i <= load_regs_i and ld(1); + + -- ModuleWare code(v1.9) for instance 'U_8' of 'and' + load2_o_i <= load_regs_i and ld(2); + + -- ModuleWare code(v1.9) for instance 'U_11' of 'constval' + val_zero <= "00000000"; + + -- ModuleWare code(v1.9) for instance 'U_1' of 'decoder1' + u_1combo_proc: process (sel_reg_i) + begin + ld <= (others => '0'); + case sel_reg_i is + when "00" => ld(0) <= '1'; + when "01" => ld(1) <= '1'; + when "10" => ld(2) <= '1'; + when others => ld <= (others => '0'); + end case; + end process u_1combo_proc; + + -- ModuleWare code(v1.9) for instance 'U_2' of 'mux' + u_2combo_proc: process(q_a_o_internal, q_x_o_internal, q_y_o_internal, + val_zero, sel_rb_out_i) + begin + case sel_rb_out_i is + when "00" => d_regs_out_o <= q_a_o_internal; + when "01" => d_regs_out_o <= q_x_o_internal; + when "10" => d_regs_out_o <= q_y_o_internal; + when "11" => d_regs_out_o <= val_zero; + when others => d_regs_out_o <= (others => 'X'); + end case; + end process u_2combo_proc; + + -- ModuleWare code(v1.9) for instance 'U_3' of 'mux' + u_3combo_proc: process(q_a_o_internal, q_y_o_internal, q_x_o_internal, + d_regs_in_i, sel_rb_in_i) + begin + case sel_rb_in_i is + when "00" => q_mux_o_i <= q_a_o_internal; + when "01" => q_mux_o_i <= q_y_o_internal; + when "10" => q_mux_o_i <= q_x_o_internal; + when "11" => q_mux_o_i <= d_regs_in_i; + when others => q_mux_o_i <= (others => 'X'); + end case; + end process u_3combo_proc; + + -- Instance port mappings. + + -- Implicit buffered output assignments + q_a_o <= q_a_o_internal; + q_x_o <= q_x_o_internal; + q_y_o <= q_y_o_internal; + +end struct;
vhdl/regbank_axy.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/R6502_TC_config.vhd =================================================================== --- vhdl/R6502_TC_config.vhd (nonexistent) +++ vhdl/R6502_TC_config.vhd (revision 18) @@ -0,0 +1,38 @@ +-- Generation properties: +-- Format : flat +-- Generic mappings : exclude +-- Leaf-level entities : direct binding +-- Regular libraries : use work +-- View name : include +-- +library work; +configuration R6502_TC_config of R6502_TC is + for struct + for all : Core + use entity work.Core(struct); + for struct + for all : FSM_Execution_Unit + use entity work.FSM_Execution_Unit(fsm); + end for; + for all : FSM_NMI + use entity work.FSM_NMI(fsm); + end for; + for all : RegBank_AXY + use entity work.RegBank_AXY(struct); + for struct + end for; + end for; + for all : Reg_PC + use entity work.Reg_PC(struct); + for struct + end for; + end for; + for all : Reg_SP + use entity work.Reg_SP(struct); + for struct + end for; + end for; + end for; + end for; + end for; +end R6502_TC_config; Index: vhdl/testbench.vhd =================================================================== --- vhdl/testbench.vhd (nonexistent) +++ vhdl/testbench.vhd (revision 18) @@ -0,0 +1,1144 @@ +-- VHDL Entity R6502_TC.Testbench.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 13:06:53 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity Testbench is + port( + IRQn : in std_logic; + NMIn : in std_logic; + RDY : in std_logic; + RSTn : in std_logic; + clk : in std_logic; + clk1 : in std_logic; + so_n_i : in std_logic; + A : out std_logic_vector (15 downto 0); + CPU_DOUT : out std_logic_vector ( 7 downto 0 ); + RAM_DOUT : out std_logic_vector (7 downto 0); + RD : out std_logic; + SYNC : out std_logic; + WR : out std_logic + ); + +-- Declarations + +end Testbench ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $log$ +-- +-- Title: Testbench for the 6502 Core +-- Path: R6502_TC/Testbench/struct +-- Edited: by eda on 08 Apr 2008 +-- +-- VHDL Architecture R6502_TC.Testbench.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 13:06:54 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +library R6502_TC; + +architecture struct of Testbench is + + -- Architecture declarations + + -- Internal signal declarations + signal dout : std_logic_vector(7 downto 0); + signal dout1 : std_logic_vector(7 downto 0); + + -- Implicit buffer signal declarations + signal CPU_DOUT_internal : std_logic_vector ( 7 downto 0 ); + signal RAM_DOUT_internal : std_logic_vector (7 downto 0); + signal WR_internal : std_logic; + signal A_internal : std_logic_vector (15 downto 0); + + + -- ModuleWare signal declarations(v1.9) for instance 'U_2' of 'ramsp' + type MW_U_2RAM_TYPE is array (((2**16) -1) downto 0) of std_logic_vector(7 downto 0); + signal mw_U_2ram_table : MW_U_2RAM_TYPE := (others => "00000000"); + signal mw_U_2addr_reg: std_logic_vector(15 downto 0); + + -- ModuleWare signal declarations(v1.9) for instance 'U_3' of 'rom' + type MW_U_3ROM_TYPE is array(65535 downto 0) of std_logic_vector(7 downto 0); + signal mw_U_3rom_table : MW_U_3ROM_TYPE; + signal mw_U_3addr_int : INTEGER := 0 ; + + -- Component Declarations + component R6502_TC + port ( + clk_clk_i : in std_logic ; + d_i : in std_logic_vector (7 downto 0); + irq_n_i : in std_logic ; + nmi_n_i : in std_logic ; + rdy_i : in std_logic ; + rst_rst_n_i : in std_logic ; + so_n_i : in std_logic ; + a_o : out std_logic_vector (15 downto 0); + d_o : out std_logic_vector (7 downto 0); + rd_o : out std_logic ; + sync_o : out std_logic ; + wr_n_o : out std_logic ; + wr_o : out std_logic + ); + end component; + + -- Optional embedded configurations + -- pragma synthesis_off + for all : R6502_TC use entity R6502_TC.R6502_TC; + -- pragma synthesis_on + + +begin + + -- ModuleWare code(v1.9) for instance 'U_1' of 'mux' + u_1combo_proc: process(dout, dout1, A_internal(15)) + begin + case A_internal(15) is + when '0' => RAM_DOUT_internal <= dout; + when '1' => RAM_DOUT_internal <= dout1; + when others => RAM_DOUT_internal <= (others => 'X'); + end case; + end process u_1combo_proc; + + -- ModuleWare code(v1.9) for instance 'U_2' of 'ramsp' + --attribute block_ram : boolean; + --attribute block_ram of mem : signal is false; + u_2ram_p_proc: process (clk1) + begin + if (clk1'event and clk1='1') then + if (WR_internal = '1') then + mw_U_2ram_table(CONV_INTEGER(unsigned(A_internal))) <= CPU_DOUT_internal; + end if; + mw_U_2addr_reg <= A_internal; + end if; + end process u_2ram_p_proc; + dout <= mw_U_2ram_table(CONV_INTEGER(unsigned(mw_U_2addr_reg))); + + -- ModuleWare code(v1.9) for instance 'U_3' of 'rom' + mw_U_3addr_int <= (CONV_INTEGER(unsigned(A_internal(15 DOWNTO 0)))); + u_3rom_table_proc : process ( mw_U_3addr_int ) + begin + case mw_U_3addr_int is + when 32768 => mw_U_3rom_table(32768) <= "11111111"; + when 32769 => mw_U_3rom_table(32769) <= "11111111"; + when 32770 => mw_U_3rom_table(32770) <= "11111111"; + when 32771 => mw_U_3rom_table(32771) <= "11111111"; + when 32772 => mw_U_3rom_table(32772) <= "11111111"; + when 32773 => mw_U_3rom_table(32773) <= "11111111"; + when 32774 => mw_U_3rom_table(32774) <= "11111111"; + when 32775 => mw_U_3rom_table(32775) <= "11111111"; + when 32776 => mw_U_3rom_table(32776) <= "11111111"; + when 32777 => mw_U_3rom_table(32777) <= "11111111"; + when 32778 => mw_U_3rom_table(32778) <= "11111111"; + when 32779 => mw_U_3rom_table(32779) <= "11111111"; + when 32780 => mw_U_3rom_table(32780) <= "11111111"; + when 32781 => mw_U_3rom_table(32781) <= "11111111"; + when 32782 => mw_U_3rom_table(32782) <= "11111111"; + when 32783 => mw_U_3rom_table(32783) <= "11111111"; + when 32784 => mw_U_3rom_table(32784) <= "11111111"; + when 32785 => mw_U_3rom_table(32785) <= "11111111"; + when 32786 => mw_U_3rom_table(32786) <= "11111111"; + when 32787 => mw_U_3rom_table(32787) <= "11111111"; + when 32788 => mw_U_3rom_table(32788) <= "11111111"; + when 32789 => mw_U_3rom_table(32789) <= "11111111"; + when 32790 => mw_U_3rom_table(32790) <= "11111111"; + when 32791 => mw_U_3rom_table(32791) <= "11111111"; + when 32792 => mw_U_3rom_table(32792) <= "11111111"; + when 32793 => mw_U_3rom_table(32793) <= "11111111"; + when 32794 => mw_U_3rom_table(32794) <= "11111111"; + when 32795 => mw_U_3rom_table(32795) <= "11111111"; + when 32796 => mw_U_3rom_table(32796) <= "11111111"; + when 32797 => mw_U_3rom_table(32797) <= "11111111"; + when 32798 => mw_U_3rom_table(32798) <= "11111111"; + when 32799 => mw_U_3rom_table(32799) <= "00000000"; + when 57344 => mw_U_3rom_table(57344) <= "00010100"; + when 57345 => mw_U_3rom_table(57345) <= "00000000"; + when 57346 => mw_U_3rom_table(57346) <= "00001010"; + when 57347 => mw_U_3rom_table(57347) <= "00000000"; + when 57348 => mw_U_3rom_table(57348) <= "00000100"; + when 57349 => mw_U_3rom_table(57349) <= "00000000"; + when 57350 => mw_U_3rom_table(57350) <= "00000011"; + when 57351 => mw_U_3rom_table(57351) <= "00000000"; + when 57352 => mw_U_3rom_table(57352) <= "00000010"; + when 57353 => mw_U_3rom_table(57353) <= "00000000"; + when 57354 => mw_U_3rom_table(57354) <= "00000001"; + when 57355 => mw_U_3rom_table(57355) <= "00000000"; + when 57356 => mw_U_3rom_table(57356) <= "00000000"; + when 57357 => mw_U_3rom_table(57357) <= "00000100"; + when 57358 => mw_U_3rom_table(57358) <= "11010010"; + when 57359 => mw_U_3rom_table(57359) <= "00000100"; + when 57360 => mw_U_3rom_table(57360) <= "11010010"; + when 57361 => mw_U_3rom_table(57361) <= "00000010"; + when 57362 => mw_U_3rom_table(57362) <= "10011100"; + when 57363 => mw_U_3rom_table(57363) <= "00000010"; + when 57364 => mw_U_3rom_table(57364) <= "10011100"; + when 57365 => mw_U_3rom_table(57365) <= "00000000"; + when 57366 => mw_U_3rom_table(57366) <= "00101010"; + when 57367 => mw_U_3rom_table(57367) <= "00000000"; + when 57368 => mw_U_3rom_table(57368) <= "00101010"; + when 57369 => mw_U_3rom_table(57369) <= "00010010"; + when 57370 => mw_U_3rom_table(57370) <= "00110100"; + when 57371 => mw_U_3rom_table(57371) <= "00000110"; + when 57372 => mw_U_3rom_table(57372) <= "00010001"; + when 57373 => mw_U_3rom_table(57373) <= "00010010"; + when 57374 => mw_U_3rom_table(57374) <= "00110100"; + when 57375 => mw_U_3rom_table(57375) <= "00010010"; + when 57376 => mw_U_3rom_table(57376) <= "00000001"; + when 57377 => mw_U_3rom_table(57377) <= "00000000"; + when 57378 => mw_U_3rom_table(57378) <= "00000001"; + when 57379 => mw_U_3rom_table(57379) <= "00000000"; + when 57380 => mw_U_3rom_table(57380) <= "00000001"; + when 57381 => mw_U_3rom_table(57381) <= "00000000"; + when 57382 => mw_U_3rom_table(57382) <= "00000000"; + when 57383 => mw_U_3rom_table(57383) <= "00000000"; + when 57384 => mw_U_3rom_table(57384) <= "00000001"; + when 57385 => mw_U_3rom_table(57385) <= "00000000"; + when 57386 => mw_U_3rom_table(57386) <= "00000000"; + when 57387 => mw_U_3rom_table(57387) <= "00000000"; + when 57388 => mw_U_3rom_table(57388) <= "00000001"; + when 57389 => mw_U_3rom_table(57389) <= "00100011"; + when 57390 => mw_U_3rom_table(57390) <= "01000000"; + when 57391 => mw_U_3rom_table(57391) <= "00000001"; + when 57392 => mw_U_3rom_table(57392) <= "00100011"; + when 57393 => mw_U_3rom_table(57393) <= "00000000"; + when 57394 => mw_U_3rom_table(57394) <= "00000011"; + when 57395 => mw_U_3rom_table(57395) <= "11111111"; + when 57396 => mw_U_3rom_table(57396) <= "11111100"; + when 57397 => mw_U_3rom_table(57397) <= "00000000"; + when 57398 => mw_U_3rom_table(57398) <= "00001010"; + when 57399 => mw_U_3rom_table(57399) <= "00000000"; + when 57400 => mw_U_3rom_table(57400) <= "00010101"; + when 57401 => mw_U_3rom_table(57401) <= "11100000"; + when 57402 => mw_U_3rom_table(57402) <= "00100101"; + when 57403 => mw_U_3rom_table(57403) <= "11100000"; + when 57404 => mw_U_3rom_table(57404) <= "00100011"; + when 57405 => mw_U_3rom_table(57405) <= "00000000"; + when 57406 => mw_U_3rom_table(57406) <= "01100100"; + when 57407 => mw_U_3rom_table(57407) <= "00000000"; + when 57408 => mw_U_3rom_table(57408) <= "11111111"; + when 57409 => mw_U_3rom_table(57409) <= "11111111"; + when 57410 => mw_U_3rom_table(57410) <= "11111111"; + when 57411 => mw_U_3rom_table(57411) <= "11111111"; + when 57412 => mw_U_3rom_table(57412) <= "11111111"; + when 57413 => mw_U_3rom_table(57413) <= "11111111"; + when 57414 => mw_U_3rom_table(57414) <= "11111111"; + when 57415 => mw_U_3rom_table(57415) <= "11111111"; + when 57416 => mw_U_3rom_table(57416) <= "11111111"; + when 57417 => mw_U_3rom_table(57417) <= "11111111"; + when 57418 => mw_U_3rom_table(57418) <= "11111111"; + when 57419 => mw_U_3rom_table(57419) <= "11111111"; + when 57420 => mw_U_3rom_table(57420) <= "11111111"; + when 57421 => mw_U_3rom_table(57421) <= "11111111"; + when 57422 => mw_U_3rom_table(57422) <= "11111111"; + when 57423 => mw_U_3rom_table(57423) <= "11111111"; + when 57424 => mw_U_3rom_table(57424) <= "11111111"; + when 57425 => mw_U_3rom_table(57425) <= "11111111"; + when 57426 => mw_U_3rom_table(57426) <= "11111111"; + when 57427 => mw_U_3rom_table(57427) <= "11111111"; + when 57428 => mw_U_3rom_table(57428) <= "11111111"; + when 57429 => mw_U_3rom_table(57429) <= "11111111"; + when 57430 => mw_U_3rom_table(57430) <= "11111111"; + when 57431 => mw_U_3rom_table(57431) <= "11111111"; + when 57432 => mw_U_3rom_table(57432) <= "11111111"; + when 57433 => mw_U_3rom_table(57433) <= "00010010"; + when 57434 => mw_U_3rom_table(57434) <= "00110100"; + when 57435 => mw_U_3rom_table(57435) <= "00000000"; + when 57436 => mw_U_3rom_table(57436) <= "00000000"; + when 57437 => mw_U_3rom_table(57437) <= "00000000"; + when 57438 => mw_U_3rom_table(57438) <= "00000000"; + when 57439 => mw_U_3rom_table(57439) <= "00000000"; + when 61440 => mw_U_3rom_table(61440) <= "00000110"; + when 61441 => mw_U_3rom_table(61441) <= "10101101"; + when 61442 => mw_U_3rom_table(61442) <= "01011011"; + when 61443 => mw_U_3rom_table(61443) <= "10000101"; + when 61444 => mw_U_3rom_table(61444) <= "11100000"; + when 61445 => mw_U_3rom_table(61445) <= "00000101"; + when 61446 => mw_U_3rom_table(61446) <= "10101101"; + when 61447 => mw_U_3rom_table(61447) <= "01011010"; + when 61448 => mw_U_3rom_table(61448) <= "10000101"; + when 61449 => mw_U_3rom_table(61449) <= "11100000"; + when 61450 => mw_U_3rom_table(61450) <= "00000100"; + when 61451 => mw_U_3rom_table(61451) <= "10101101"; + when 61452 => mw_U_3rom_table(61452) <= "01011001"; + when 61453 => mw_U_3rom_table(61453) <= "10000101"; + when 61454 => mw_U_3rom_table(61454) <= "11100000"; + when 61455 => mw_U_3rom_table(61455) <= "00000011"; + when 61456 => mw_U_3rom_table(61456) <= "10101101"; + when 61457 => mw_U_3rom_table(61457) <= "01011000"; + when 61458 => mw_U_3rom_table(61458) <= "10000101"; + when 61459 => mw_U_3rom_table(61459) <= "11100000"; + when 61460 => mw_U_3rom_table(61460) <= "00000010"; + when 61461 => mw_U_3rom_table(61461) <= "10101101"; + when 61462 => mw_U_3rom_table(61462) <= "01010111"; + when 61463 => mw_U_3rom_table(61463) <= "10000101"; + when 61464 => mw_U_3rom_table(61464) <= "11100000"; + when 61465 => mw_U_3rom_table(61465) <= "00000001"; + when 61466 => mw_U_3rom_table(61466) <= "10101101"; + when 61467 => mw_U_3rom_table(61467) <= "01010110"; + when 61468 => mw_U_3rom_table(61468) <= "10000101"; + when 61469 => mw_U_3rom_table(61469) <= "11100000"; + when 61470 => mw_U_3rom_table(61470) <= "00000000"; + when 61471 => mw_U_3rom_table(61471) <= "10101101"; + when 61472 => mw_U_3rom_table(61472) <= "10000101"; + when 61473 => mw_U_3rom_table(61473) <= "11100000"; + when 61474 => mw_U_3rom_table(61474) <= "00001100"; + when 61475 => mw_U_3rom_table(61475) <= "10101101"; + when 61476 => mw_U_3rom_table(61476) <= "01100001"; + when 61477 => mw_U_3rom_table(61477) <= "10000101"; + when 61478 => mw_U_3rom_table(61478) <= "11100000"; + when 61479 => mw_U_3rom_table(61479) <= "00001011"; + when 61480 => mw_U_3rom_table(61480) <= "10101101"; + when 61481 => mw_U_3rom_table(61481) <= "01100000"; + when 61482 => mw_U_3rom_table(61482) <= "10000101"; + when 61483 => mw_U_3rom_table(61483) <= "11100000"; + when 61484 => mw_U_3rom_table(61484) <= "00001010"; + when 61485 => mw_U_3rom_table(61485) <= "10101101"; + when 61486 => mw_U_3rom_table(61486) <= "01011111"; + when 61487 => mw_U_3rom_table(61487) <= "10000101"; + when 61488 => mw_U_3rom_table(61488) <= "11100000"; + when 61489 => mw_U_3rom_table(61489) <= "00001001"; + when 61490 => mw_U_3rom_table(61490) <= "10101101"; + when 61491 => mw_U_3rom_table(61491) <= "01011110"; + when 61492 => mw_U_3rom_table(61492) <= "10000101"; + when 61493 => mw_U_3rom_table(61493) <= "11100000"; + when 61494 => mw_U_3rom_table(61494) <= "00001000"; + when 61495 => mw_U_3rom_table(61495) <= "10101101"; + when 61496 => mw_U_3rom_table(61496) <= "01011101"; + when 61497 => mw_U_3rom_table(61497) <= "10000101"; + when 61498 => mw_U_3rom_table(61498) <= "11100000"; + when 61499 => mw_U_3rom_table(61499) <= "00000111"; + when 61500 => mw_U_3rom_table(61500) <= "10101101"; + when 61501 => mw_U_3rom_table(61501) <= "01011100"; + when 61502 => mw_U_3rom_table(61502) <= "10000101"; + when 61503 => mw_U_3rom_table(61503) <= "11100000"; + when 61504 => mw_U_3rom_table(61504) <= "10101101"; + when 61505 => mw_U_3rom_table(61505) <= "01101000"; + when 61506 => mw_U_3rom_table(61506) <= "10000101"; + when 61507 => mw_U_3rom_table(61507) <= "11100000"; + when 61508 => mw_U_3rom_table(61508) <= "00010010"; + when 61509 => mw_U_3rom_table(61509) <= "10101101"; + when 61510 => mw_U_3rom_table(61510) <= "01100111"; + when 61511 => mw_U_3rom_table(61511) <= "10000101"; + when 61512 => mw_U_3rom_table(61512) <= "11100000"; + when 61513 => mw_U_3rom_table(61513) <= "00010001"; + when 61514 => mw_U_3rom_table(61514) <= "10101101"; + when 61515 => mw_U_3rom_table(61515) <= "01100110"; + when 61516 => mw_U_3rom_table(61516) <= "10000101"; + when 61517 => mw_U_3rom_table(61517) <= "11100000"; + when 61518 => mw_U_3rom_table(61518) <= "00010000"; + when 61519 => mw_U_3rom_table(61519) <= "10101101"; + when 61520 => mw_U_3rom_table(61520) <= "01100101"; + when 61521 => mw_U_3rom_table(61521) <= "10000101"; + when 61522 => mw_U_3rom_table(61522) <= "11100000"; + when 61523 => mw_U_3rom_table(61523) <= "00001111"; + when 61524 => mw_U_3rom_table(61524) <= "10101101"; + when 61525 => mw_U_3rom_table(61525) <= "01100100"; + when 61526 => mw_U_3rom_table(61526) <= "10000101"; + when 61527 => mw_U_3rom_table(61527) <= "11100000"; + when 61528 => mw_U_3rom_table(61528) <= "00001110"; + when 61529 => mw_U_3rom_table(61529) <= "10101101"; + when 61530 => mw_U_3rom_table(61530) <= "01100011"; + when 61531 => mw_U_3rom_table(61531) <= "10000101"; + when 61532 => mw_U_3rom_table(61532) <= "11100000"; + when 61533 => mw_U_3rom_table(61533) <= "00001101"; + when 61534 => mw_U_3rom_table(61534) <= "10101101"; + when 61535 => mw_U_3rom_table(61535) <= "01100010"; + when 61536 => mw_U_3rom_table(61536) <= "11100000"; + when 61537 => mw_U_3rom_table(61537) <= "00011001"; + when 61538 => mw_U_3rom_table(61538) <= "10101101"; + when 61539 => mw_U_3rom_table(61539) <= "01101110"; + when 61540 => mw_U_3rom_table(61540) <= "10000101"; + when 61541 => mw_U_3rom_table(61541) <= "11100000"; + when 61542 => mw_U_3rom_table(61542) <= "00011000"; + when 61543 => mw_U_3rom_table(61543) <= "10101101"; + when 61544 => mw_U_3rom_table(61544) <= "01101101"; + when 61545 => mw_U_3rom_table(61545) <= "10000101"; + when 61546 => mw_U_3rom_table(61546) <= "11100000"; + when 61547 => mw_U_3rom_table(61547) <= "00010111"; + when 61548 => mw_U_3rom_table(61548) <= "10101101"; + when 61549 => mw_U_3rom_table(61549) <= "01101100"; + when 61550 => mw_U_3rom_table(61550) <= "10000101"; + when 61551 => mw_U_3rom_table(61551) <= "11100000"; + when 61552 => mw_U_3rom_table(61552) <= "00010110"; + when 61553 => mw_U_3rom_table(61553) <= "10101101"; + when 61554 => mw_U_3rom_table(61554) <= "01101011"; + when 61555 => mw_U_3rom_table(61555) <= "10000101"; + when 61556 => mw_U_3rom_table(61556) <= "11100000"; + when 61557 => mw_U_3rom_table(61557) <= "00010101"; + when 61558 => mw_U_3rom_table(61558) <= "10101101"; + when 61559 => mw_U_3rom_table(61559) <= "01101010"; + when 61560 => mw_U_3rom_table(61560) <= "10000101"; + when 61561 => mw_U_3rom_table(61561) <= "11100000"; + when 61562 => mw_U_3rom_table(61562) <= "00010100"; + when 61563 => mw_U_3rom_table(61563) <= "10101101"; + when 61564 => mw_U_3rom_table(61564) <= "01101001"; + when 61565 => mw_U_3rom_table(61565) <= "10000101"; + when 61566 => mw_U_3rom_table(61566) <= "11100000"; + when 61567 => mw_U_3rom_table(61567) <= "00010011"; + when 61568 => mw_U_3rom_table(61568) <= "01110101"; + when 61569 => mw_U_3rom_table(61569) <= "10000101"; + when 61570 => mw_U_3rom_table(61570) <= "11100000"; + when 61571 => mw_U_3rom_table(61571) <= "00011111"; + when 61572 => mw_U_3rom_table(61572) <= "10101101"; + when 61573 => mw_U_3rom_table(61573) <= "01110100"; + when 61574 => mw_U_3rom_table(61574) <= "10000101"; + when 61575 => mw_U_3rom_table(61575) <= "11100000"; + when 61576 => mw_U_3rom_table(61576) <= "00011110"; + when 61577 => mw_U_3rom_table(61577) <= "10101101"; + when 61578 => mw_U_3rom_table(61578) <= "01110011"; + when 61579 => mw_U_3rom_table(61579) <= "10000101"; + when 61580 => mw_U_3rom_table(61580) <= "11100000"; + when 61581 => mw_U_3rom_table(61581) <= "00011101"; + when 61582 => mw_U_3rom_table(61582) <= "10101101"; + when 61583 => mw_U_3rom_table(61583) <= "01110010"; + when 61584 => mw_U_3rom_table(61584) <= "10000101"; + when 61585 => mw_U_3rom_table(61585) <= "11100000"; + when 61586 => mw_U_3rom_table(61586) <= "00011100"; + when 61587 => mw_U_3rom_table(61587) <= "10101101"; + when 61588 => mw_U_3rom_table(61588) <= "01110001"; + when 61589 => mw_U_3rom_table(61589) <= "10000101"; + when 61590 => mw_U_3rom_table(61590) <= "11100000"; + when 61591 => mw_U_3rom_table(61591) <= "00011011"; + when 61592 => mw_U_3rom_table(61592) <= "10101101"; + when 61593 => mw_U_3rom_table(61593) <= "01110000"; + when 61594 => mw_U_3rom_table(61594) <= "10000101"; + when 61595 => mw_U_3rom_table(61595) <= "11100000"; + when 61596 => mw_U_3rom_table(61596) <= "00011010"; + when 61597 => mw_U_3rom_table(61597) <= "10101101"; + when 61598 => mw_U_3rom_table(61598) <= "01101111"; + when 61599 => mw_U_3rom_table(61599) <= "10000101"; + when 61600 => mw_U_3rom_table(61600) <= "00100110"; + when 61601 => mw_U_3rom_table(61601) <= "10101101"; + when 61602 => mw_U_3rom_table(61602) <= "01111011"; + when 61603 => mw_U_3rom_table(61603) <= "10000101"; + when 61604 => mw_U_3rom_table(61604) <= "11100000"; + when 61605 => mw_U_3rom_table(61605) <= "00100101"; + when 61606 => mw_U_3rom_table(61606) <= "10101101"; + when 61607 => mw_U_3rom_table(61607) <= "01111010"; + when 61608 => mw_U_3rom_table(61608) <= "10000101"; + when 61609 => mw_U_3rom_table(61609) <= "11100000"; + when 61610 => mw_U_3rom_table(61610) <= "00100100"; + when 61611 => mw_U_3rom_table(61611) <= "10101101"; + when 61612 => mw_U_3rom_table(61612) <= "01111001"; + when 61613 => mw_U_3rom_table(61613) <= "10000101"; + when 61614 => mw_U_3rom_table(61614) <= "11100000"; + when 61615 => mw_U_3rom_table(61615) <= "00100011"; + when 61616 => mw_U_3rom_table(61616) <= "10101101"; + when 61617 => mw_U_3rom_table(61617) <= "01111000"; + when 61618 => mw_U_3rom_table(61618) <= "10000101"; + when 61619 => mw_U_3rom_table(61619) <= "11100000"; + when 61620 => mw_U_3rom_table(61620) <= "00100010"; + when 61621 => mw_U_3rom_table(61621) <= "10101101"; + when 61622 => mw_U_3rom_table(61622) <= "01110111"; + when 61623 => mw_U_3rom_table(61623) <= "10000101"; + when 61624 => mw_U_3rom_table(61624) <= "11100000"; + when 61625 => mw_U_3rom_table(61625) <= "00100001"; + when 61626 => mw_U_3rom_table(61626) <= "10101101"; + when 61627 => mw_U_3rom_table(61627) <= "01110110"; + when 61628 => mw_U_3rom_table(61628) <= "10000101"; + when 61629 => mw_U_3rom_table(61629) <= "11100000"; + when 61630 => mw_U_3rom_table(61630) <= "00100000"; + when 61631 => mw_U_3rom_table(61631) <= "10101101"; + when 61632 => mw_U_3rom_table(61632) <= "10000101"; + when 61633 => mw_U_3rom_table(61633) <= "11100000"; + when 61634 => mw_U_3rom_table(61634) <= "00101100"; + when 61635 => mw_U_3rom_table(61635) <= "10101101"; + when 61636 => mw_U_3rom_table(61636) <= "10000001"; + when 61637 => mw_U_3rom_table(61637) <= "10000101"; + when 61638 => mw_U_3rom_table(61638) <= "11100000"; + when 61639 => mw_U_3rom_table(61639) <= "00101011"; + when 61640 => mw_U_3rom_table(61640) <= "10101101"; + when 61641 => mw_U_3rom_table(61641) <= "10000000"; + when 61642 => mw_U_3rom_table(61642) <= "10000101"; + when 61643 => mw_U_3rom_table(61643) <= "11100000"; + when 61644 => mw_U_3rom_table(61644) <= "00101010"; + when 61645 => mw_U_3rom_table(61645) <= "10101101"; + when 61646 => mw_U_3rom_table(61646) <= "01111111"; + when 61647 => mw_U_3rom_table(61647) <= "10000101"; + when 61648 => mw_U_3rom_table(61648) <= "11100000"; + when 61649 => mw_U_3rom_table(61649) <= "00101001"; + when 61650 => mw_U_3rom_table(61650) <= "10101101"; + when 61651 => mw_U_3rom_table(61651) <= "01111110"; + when 61652 => mw_U_3rom_table(61652) <= "10000101"; + when 61653 => mw_U_3rom_table(61653) <= "11100000"; + when 61654 => mw_U_3rom_table(61654) <= "00101000"; + when 61655 => mw_U_3rom_table(61655) <= "10101101"; + when 61656 => mw_U_3rom_table(61656) <= "01111101"; + when 61657 => mw_U_3rom_table(61657) <= "10000101"; + when 61658 => mw_U_3rom_table(61658) <= "11100000"; + when 61659 => mw_U_3rom_table(61659) <= "00100111"; + when 61660 => mw_U_3rom_table(61660) <= "10101101"; + when 61661 => mw_U_3rom_table(61661) <= "01111100"; + when 61662 => mw_U_3rom_table(61662) <= "10000101"; + when 61663 => mw_U_3rom_table(61663) <= "11100000"; + when 61664 => mw_U_3rom_table(61664) <= "10101101"; + when 61665 => mw_U_3rom_table(61665) <= "10001000"; + when 61666 => mw_U_3rom_table(61666) <= "10000101"; + when 61667 => mw_U_3rom_table(61667) <= "11100000"; + when 61668 => mw_U_3rom_table(61668) <= "00110010"; + when 61669 => mw_U_3rom_table(61669) <= "10101101"; + when 61670 => mw_U_3rom_table(61670) <= "10000111"; + when 61671 => mw_U_3rom_table(61671) <= "10000101"; + when 61672 => mw_U_3rom_table(61672) <= "11100000"; + when 61673 => mw_U_3rom_table(61673) <= "00110001"; + when 61674 => mw_U_3rom_table(61674) <= "10101101"; + when 61675 => mw_U_3rom_table(61675) <= "10000110"; + when 61676 => mw_U_3rom_table(61676) <= "10000101"; + when 61677 => mw_U_3rom_table(61677) <= "11100000"; + when 61678 => mw_U_3rom_table(61678) <= "00110000"; + when 61679 => mw_U_3rom_table(61679) <= "10101101"; + when 61680 => mw_U_3rom_table(61680) <= "10000101"; + when 61681 => mw_U_3rom_table(61681) <= "10000101"; + when 61682 => mw_U_3rom_table(61682) <= "11100000"; + when 61683 => mw_U_3rom_table(61683) <= "00101111"; + when 61684 => mw_U_3rom_table(61684) <= "10101101"; + when 61685 => mw_U_3rom_table(61685) <= "10000100"; + when 61686 => mw_U_3rom_table(61686) <= "10000101"; + when 61687 => mw_U_3rom_table(61687) <= "11100000"; + when 61688 => mw_U_3rom_table(61688) <= "00101110"; + when 61689 => mw_U_3rom_table(61689) <= "10101101"; + when 61690 => mw_U_3rom_table(61690) <= "10000011"; + when 61691 => mw_U_3rom_table(61691) <= "10000101"; + when 61692 => mw_U_3rom_table(61692) <= "11100000"; + when 61693 => mw_U_3rom_table(61693) <= "00101101"; + when 61694 => mw_U_3rom_table(61694) <= "10101101"; + when 61695 => mw_U_3rom_table(61695) <= "10000010"; + when 61696 => mw_U_3rom_table(61696) <= "11100000"; + when 61697 => mw_U_3rom_table(61697) <= "00111001"; + when 61698 => mw_U_3rom_table(61698) <= "10101101"; + when 61699 => mw_U_3rom_table(61699) <= "10001110"; + when 61700 => mw_U_3rom_table(61700) <= "10000101"; + when 61701 => mw_U_3rom_table(61701) <= "11100000"; + when 61702 => mw_U_3rom_table(61702) <= "00111000"; + when 61703 => mw_U_3rom_table(61703) <= "10101101"; + when 61704 => mw_U_3rom_table(61704) <= "10001101"; + when 61705 => mw_U_3rom_table(61705) <= "10000101"; + when 61706 => mw_U_3rom_table(61706) <= "11100000"; + when 61707 => mw_U_3rom_table(61707) <= "00110111"; + when 61708 => mw_U_3rom_table(61708) <= "10101101"; + when 61709 => mw_U_3rom_table(61709) <= "10001100"; + when 61710 => mw_U_3rom_table(61710) <= "10000101"; + when 61711 => mw_U_3rom_table(61711) <= "11100000"; + when 61712 => mw_U_3rom_table(61712) <= "00110110"; + when 61713 => mw_U_3rom_table(61713) <= "10101101"; + when 61714 => mw_U_3rom_table(61714) <= "10001011"; + when 61715 => mw_U_3rom_table(61715) <= "10000101"; + when 61716 => mw_U_3rom_table(61716) <= "11100000"; + when 61717 => mw_U_3rom_table(61717) <= "00110101"; + when 61718 => mw_U_3rom_table(61718) <= "10101101"; + when 61719 => mw_U_3rom_table(61719) <= "10001010"; + when 61720 => mw_U_3rom_table(61720) <= "10000101"; + when 61721 => mw_U_3rom_table(61721) <= "11100000"; + when 61722 => mw_U_3rom_table(61722) <= "00110100"; + when 61723 => mw_U_3rom_table(61723) <= "10101101"; + when 61724 => mw_U_3rom_table(61724) <= "10001001"; + when 61725 => mw_U_3rom_table(61725) <= "10000101"; + when 61726 => mw_U_3rom_table(61726) <= "11100000"; + when 61727 => mw_U_3rom_table(61727) <= "00110011"; + when 61728 => mw_U_3rom_table(61728) <= "10010101"; + when 61729 => mw_U_3rom_table(61729) <= "10000101"; + when 61730 => mw_U_3rom_table(61730) <= "11100000"; + when 61731 => mw_U_3rom_table(61731) <= "00111111"; + when 61732 => mw_U_3rom_table(61732) <= "10101101"; + when 61733 => mw_U_3rom_table(61733) <= "10010100"; + when 61734 => mw_U_3rom_table(61734) <= "10000101"; + when 61735 => mw_U_3rom_table(61735) <= "11100000"; + when 61736 => mw_U_3rom_table(61736) <= "00111110"; + when 61737 => mw_U_3rom_table(61737) <= "10101101"; + when 61738 => mw_U_3rom_table(61738) <= "10010011"; + when 61739 => mw_U_3rom_table(61739) <= "10000101"; + when 61740 => mw_U_3rom_table(61740) <= "11100000"; + when 61741 => mw_U_3rom_table(61741) <= "00111101"; + when 61742 => mw_U_3rom_table(61742) <= "10101101"; + when 61743 => mw_U_3rom_table(61743) <= "10010010"; + when 61744 => mw_U_3rom_table(61744) <= "10000101"; + when 61745 => mw_U_3rom_table(61745) <= "11100000"; + when 61746 => mw_U_3rom_table(61746) <= "00111100"; + when 61747 => mw_U_3rom_table(61747) <= "10101101"; + when 61748 => mw_U_3rom_table(61748) <= "10010001"; + when 61749 => mw_U_3rom_table(61749) <= "10000101"; + when 61750 => mw_U_3rom_table(61750) <= "11100000"; + when 61751 => mw_U_3rom_table(61751) <= "00111011"; + when 61752 => mw_U_3rom_table(61752) <= "10101101"; + when 61753 => mw_U_3rom_table(61753) <= "10010000"; + when 61754 => mw_U_3rom_table(61754) <= "10000101"; + when 61755 => mw_U_3rom_table(61755) <= "11100000"; + when 61756 => mw_U_3rom_table(61756) <= "00111010"; + when 61757 => mw_U_3rom_table(61757) <= "10101101"; + when 61758 => mw_U_3rom_table(61758) <= "10001111"; + when 61759 => mw_U_3rom_table(61759) <= "10000101"; + when 61760 => mw_U_3rom_table(61760) <= "01000110"; + when 61761 => mw_U_3rom_table(61761) <= "10101101"; + when 61762 => mw_U_3rom_table(61762) <= "10011011"; + when 61763 => mw_U_3rom_table(61763) <= "10000101"; + when 61764 => mw_U_3rom_table(61764) <= "11100000"; + when 61765 => mw_U_3rom_table(61765) <= "01000101"; + when 61766 => mw_U_3rom_table(61766) <= "10101101"; + when 61767 => mw_U_3rom_table(61767) <= "10011010"; + when 61768 => mw_U_3rom_table(61768) <= "10000101"; + when 61769 => mw_U_3rom_table(61769) <= "11100000"; + when 61770 => mw_U_3rom_table(61770) <= "01000100"; + when 61771 => mw_U_3rom_table(61771) <= "10101101"; + when 61772 => mw_U_3rom_table(61772) <= "10011001"; + when 61773 => mw_U_3rom_table(61773) <= "10000101"; + when 61774 => mw_U_3rom_table(61774) <= "11100000"; + when 61775 => mw_U_3rom_table(61775) <= "01000011"; + when 61776 => mw_U_3rom_table(61776) <= "10101101"; + when 61777 => mw_U_3rom_table(61777) <= "10011000"; + when 61778 => mw_U_3rom_table(61778) <= "10000101"; + when 61779 => mw_U_3rom_table(61779) <= "11100000"; + when 61780 => mw_U_3rom_table(61780) <= "01000010"; + when 61781 => mw_U_3rom_table(61781) <= "10101101"; + when 61782 => mw_U_3rom_table(61782) <= "10010111"; + when 61783 => mw_U_3rom_table(61783) <= "10000101"; + when 61784 => mw_U_3rom_table(61784) <= "11100000"; + when 61785 => mw_U_3rom_table(61785) <= "01000001"; + when 61786 => mw_U_3rom_table(61786) <= "10101101"; + when 61787 => mw_U_3rom_table(61787) <= "10010110"; + when 61788 => mw_U_3rom_table(61788) <= "10000101"; + when 61789 => mw_U_3rom_table(61789) <= "11100000"; + when 61790 => mw_U_3rom_table(61790) <= "01000000"; + when 61791 => mw_U_3rom_table(61791) <= "10101101"; + when 61792 => mw_U_3rom_table(61792) <= "00110101"; + when 61793 => mw_U_3rom_table(61793) <= "01010110"; + when 61794 => mw_U_3rom_table(61794) <= "00110010"; + when 61795 => mw_U_3rom_table(61795) <= "01010110"; + when 61796 => mw_U_3rom_table(61796) <= "00110001"; + when 61797 => mw_U_3rom_table(61797) <= "01010110"; + when 61798 => mw_U_3rom_table(61798) <= "00100001"; + when 61799 => mw_U_3rom_table(61799) <= "01010110"; + when 61800 => mw_U_3rom_table(61800) <= "00101001"; + when 61801 => mw_U_3rom_table(61801) <= "11110001"; + when 61802 => mw_U_3rom_table(61802) <= "01100011"; + when 61803 => mw_U_3rom_table(61803) <= "01101101"; + when 61804 => mw_U_3rom_table(61804) <= "01010110"; + when 61805 => mw_U_3rom_table(61805) <= "01100101"; + when 61806 => mw_U_3rom_table(61806) <= "00000000"; + when 61807 => mw_U_3rom_table(61807) <= "01010110"; + when 61808 => mw_U_3rom_table(61808) <= "01111001"; + when 61809 => mw_U_3rom_table(61809) <= "01010110"; + when 61810 => mw_U_3rom_table(61810) <= "01110101"; + when 61811 => mw_U_3rom_table(61811) <= "01010110"; + when 61812 => mw_U_3rom_table(61812) <= "01110010"; + when 61813 => mw_U_3rom_table(61813) <= "01010110"; + when 61814 => mw_U_3rom_table(61814) <= "01110010"; + when 61815 => mw_U_3rom_table(61815) <= "01010110"; + when 61816 => mw_U_3rom_table(61816) <= "01110001"; + when 61817 => mw_U_3rom_table(61817) <= "01010110"; + when 61818 => mw_U_3rom_table(61818) <= "01100001"; + when 61819 => mw_U_3rom_table(61819) <= "01010110"; + when 61820 => mw_U_3rom_table(61820) <= "01101001"; + when 61821 => mw_U_3rom_table(61821) <= "10011100"; + when 61822 => mw_U_3rom_table(61822) <= "10000101"; + when 61823 => mw_U_3rom_table(61823) <= "11100000"; + when 61824 => mw_U_3rom_table(61824) <= "11101010"; + when 61825 => mw_U_3rom_table(61825) <= "00000001"; + when 61826 => mw_U_3rom_table(61826) <= "00010000"; + when 61827 => mw_U_3rom_table(61827) <= "11101010"; + when 61828 => mw_U_3rom_table(61828) <= "00000001"; + when 61829 => mw_U_3rom_table(61829) <= "00110000"; + when 61830 => mw_U_3rom_table(61830) <= "11101010"; + when 61831 => mw_U_3rom_table(61831) <= "00000001"; + when 61832 => mw_U_3rom_table(61832) <= "11010000"; + when 61833 => mw_U_3rom_table(61833) <= "11101010"; + when 61834 => mw_U_3rom_table(61834) <= "00000001"; + when 61835 => mw_U_3rom_table(61835) <= "11110000"; + when 61836 => mw_U_3rom_table(61836) <= "11101010"; + when 61837 => mw_U_3rom_table(61837) <= "00000001"; + when 61838 => mw_U_3rom_table(61838) <= "10110000"; + when 61839 => mw_U_3rom_table(61839) <= "11101010"; + when 61840 => mw_U_3rom_table(61840) <= "00000001"; + when 61841 => mw_U_3rom_table(61841) <= "10010000"; + when 61842 => mw_U_3rom_table(61842) <= "01010110"; + when 61843 => mw_U_3rom_table(61843) <= "00000110"; + when 61844 => mw_U_3rom_table(61844) <= "01010110"; + when 61845 => mw_U_3rom_table(61845) <= "00010110"; + when 61846 => mw_U_3rom_table(61846) <= "00001010"; + when 61847 => mw_U_3rom_table(61847) <= "11110001"; + when 61848 => mw_U_3rom_table(61848) <= "01100011"; + when 61849 => mw_U_3rom_table(61849) <= "00101101"; + when 61850 => mw_U_3rom_table(61850) <= "01010110"; + when 61851 => mw_U_3rom_table(61851) <= "00100101"; + when 61852 => mw_U_3rom_table(61852) <= "00000000"; + when 61853 => mw_U_3rom_table(61853) <= "01010110"; + when 61854 => mw_U_3rom_table(61854) <= "00111001"; + when 61855 => mw_U_3rom_table(61855) <= "01010110"; + when 61856 => mw_U_3rom_table(61856) <= "01010110"; + when 61857 => mw_U_3rom_table(61857) <= "11011001"; + when 61858 => mw_U_3rom_table(61858) <= "01010110"; + when 61859 => mw_U_3rom_table(61859) <= "11010101"; + when 61860 => mw_U_3rom_table(61860) <= "01010110"; + when 61861 => mw_U_3rom_table(61861) <= "11010010"; + when 61862 => mw_U_3rom_table(61862) <= "01010110"; + when 61863 => mw_U_3rom_table(61863) <= "11010001"; + when 61864 => mw_U_3rom_table(61864) <= "01010110"; + when 61865 => mw_U_3rom_table(61865) <= "11000001"; + when 61866 => mw_U_3rom_table(61866) <= "01010110"; + when 61867 => mw_U_3rom_table(61867) <= "11001001"; + when 61868 => mw_U_3rom_table(61868) <= "10111000"; + when 61869 => mw_U_3rom_table(61869) <= "01011000"; + when 61870 => mw_U_3rom_table(61870) <= "11011000"; + when 61871 => mw_U_3rom_table(61871) <= "00011000"; + when 61872 => mw_U_3rom_table(61872) <= "00000000"; + when 61873 => mw_U_3rom_table(61873) <= "11110001"; + when 61874 => mw_U_3rom_table(61874) <= "01100011"; + when 61875 => mw_U_3rom_table(61875) <= "00101100"; + when 61876 => mw_U_3rom_table(61876) <= "01010110"; + when 61877 => mw_U_3rom_table(61877) <= "00100100"; + when 61878 => mw_U_3rom_table(61878) <= "01010110"; + when 61879 => mw_U_3rom_table(61879) <= "00110100"; + when 61880 => mw_U_3rom_table(61880) <= "01010110"; + when 61881 => mw_U_3rom_table(61881) <= "10001001"; + when 61882 => mw_U_3rom_table(61882) <= "11101010"; + when 61883 => mw_U_3rom_table(61883) <= "00000001"; + when 61884 => mw_U_3rom_table(61884) <= "01110000"; + when 61885 => mw_U_3rom_table(61885) <= "11101010"; + when 61886 => mw_U_3rom_table(61886) <= "00000001"; + when 61887 => mw_U_3rom_table(61887) <= "01010000"; + when 61888 => mw_U_3rom_table(61888) <= "11001010"; + when 61889 => mw_U_3rom_table(61889) <= "11110001"; + when 61890 => mw_U_3rom_table(61890) <= "01100011"; + when 61891 => mw_U_3rom_table(61891) <= "11001110"; + when 61892 => mw_U_3rom_table(61892) <= "01010110"; + when 61893 => mw_U_3rom_table(61893) <= "11000110"; + when 61894 => mw_U_3rom_table(61894) <= "11110001"; + when 61895 => mw_U_3rom_table(61895) <= "01100011"; + when 61896 => mw_U_3rom_table(61896) <= "11011110"; + when 61897 => mw_U_3rom_table(61897) <= "01010110"; + when 61898 => mw_U_3rom_table(61898) <= "11010110"; + when 61899 => mw_U_3rom_table(61899) <= "00111010"; + when 61900 => mw_U_3rom_table(61900) <= "11110001"; + when 61901 => mw_U_3rom_table(61901) <= "01100011"; + when 61902 => mw_U_3rom_table(61902) <= "11001100"; + when 61903 => mw_U_3rom_table(61903) <= "01010110"; + when 61904 => mw_U_3rom_table(61904) <= "11000100"; + when 61905 => mw_U_3rom_table(61905) <= "01010110"; + when 61906 => mw_U_3rom_table(61906) <= "11000000"; + when 61907 => mw_U_3rom_table(61907) <= "11110001"; + when 61908 => mw_U_3rom_table(61908) <= "01100011"; + when 61909 => mw_U_3rom_table(61909) <= "11101100"; + when 61910 => mw_U_3rom_table(61910) <= "01010110"; + when 61911 => mw_U_3rom_table(61911) <= "11100100"; + when 61912 => mw_U_3rom_table(61912) <= "01010110"; + when 61913 => mw_U_3rom_table(61913) <= "11100000"; + when 61914 => mw_U_3rom_table(61914) <= "11110001"; + when 61915 => mw_U_3rom_table(61915) <= "01100011"; + when 61916 => mw_U_3rom_table(61916) <= "11001101"; + when 61917 => mw_U_3rom_table(61917) <= "01010110"; + when 61918 => mw_U_3rom_table(61918) <= "11000101"; + when 61919 => mw_U_3rom_table(61919) <= "00000000"; + when 61920 => mw_U_3rom_table(61920) <= "11001000"; + when 61921 => mw_U_3rom_table(61921) <= "11101000"; + when 61922 => mw_U_3rom_table(61922) <= "11110001"; + when 61923 => mw_U_3rom_table(61923) <= "01100011"; + when 61924 => mw_U_3rom_table(61924) <= "11101110"; + when 61925 => mw_U_3rom_table(61925) <= "01010110"; + when 61926 => mw_U_3rom_table(61926) <= "11100110"; + when 61927 => mw_U_3rom_table(61927) <= "11110001"; + when 61928 => mw_U_3rom_table(61928) <= "01100011"; + when 61929 => mw_U_3rom_table(61929) <= "11111110"; + when 61930 => mw_U_3rom_table(61930) <= "01010110"; + when 61931 => mw_U_3rom_table(61931) <= "11110110"; + when 61932 => mw_U_3rom_table(61932) <= "00011010"; + when 61933 => mw_U_3rom_table(61933) <= "11110001"; + when 61934 => mw_U_3rom_table(61934) <= "01100011"; + when 61935 => mw_U_3rom_table(61935) <= "01001101"; + when 61936 => mw_U_3rom_table(61936) <= "01010110"; + when 61937 => mw_U_3rom_table(61937) <= "01000101"; + when 61938 => mw_U_3rom_table(61938) <= "00000000"; + when 61939 => mw_U_3rom_table(61939) <= "01010110"; + when 61940 => mw_U_3rom_table(61940) <= "01011001"; + when 61941 => mw_U_3rom_table(61941) <= "01010110"; + when 61942 => mw_U_3rom_table(61942) <= "01010101"; + when 61943 => mw_U_3rom_table(61943) <= "01010110"; + when 61944 => mw_U_3rom_table(61944) <= "01010010"; + when 61945 => mw_U_3rom_table(61945) <= "01010110"; + when 61946 => mw_U_3rom_table(61946) <= "01010001"; + when 61947 => mw_U_3rom_table(61947) <= "01010110"; + when 61948 => mw_U_3rom_table(61948) <= "01000001"; + when 61949 => mw_U_3rom_table(61949) <= "01010110"; + when 61950 => mw_U_3rom_table(61950) <= "01001001"; + when 61951 => mw_U_3rom_table(61951) <= "10001000"; + when 61952 => mw_U_3rom_table(61952) <= "01100011"; + when 61953 => mw_U_3rom_table(61953) <= "10101101"; + when 61954 => mw_U_3rom_table(61954) <= "01010110"; + when 61955 => mw_U_3rom_table(61955) <= "10100101"; + when 61956 => mw_U_3rom_table(61956) <= "00000000"; + when 61957 => mw_U_3rom_table(61957) <= "01010110"; + when 61958 => mw_U_3rom_table(61958) <= "10111001"; + when 61959 => mw_U_3rom_table(61959) <= "01010110"; + when 61960 => mw_U_3rom_table(61960) <= "10110101"; + when 61961 => mw_U_3rom_table(61961) <= "01010110"; + when 61962 => mw_U_3rom_table(61962) <= "10110010"; + when 61963 => mw_U_3rom_table(61963) <= "01010110"; + when 61964 => mw_U_3rom_table(61964) <= "10110001"; + when 61965 => mw_U_3rom_table(61965) <= "01010110"; + when 61966 => mw_U_3rom_table(61966) <= "10100001"; + when 61967 => mw_U_3rom_table(61967) <= "01010110"; + when 61968 => mw_U_3rom_table(61968) <= "10101001"; + when 61969 => mw_U_3rom_table(61969) <= "11110001"; + when 61970 => mw_U_3rom_table(61970) <= "01100011"; + when 61971 => mw_U_3rom_table(61971) <= "00100000"; + when 61972 => mw_U_3rom_table(61972) <= "00000000"; + when 61973 => mw_U_3rom_table(61973) <= "01010110"; + when 61974 => mw_U_3rom_table(61974) <= "00100000"; + when 61975 => mw_U_3rom_table(61975) <= "00000000"; + when 61976 => mw_U_3rom_table(61976) <= "01010110"; + when 61977 => mw_U_3rom_table(61977) <= "01001100"; + when 61978 => mw_U_3rom_table(61978) <= "00000000"; + when 61979 => mw_U_3rom_table(61979) <= "01010110"; + when 61980 => mw_U_3rom_table(61980) <= "01101100"; + when 61981 => mw_U_3rom_table(61981) <= "00000000"; + when 61982 => mw_U_3rom_table(61982) <= "01010110"; + when 61983 => mw_U_3rom_table(61983) <= "01111100"; + when 61984 => mw_U_3rom_table(61984) <= "01010110"; + when 61985 => mw_U_3rom_table(61985) <= "00000001"; + when 61986 => mw_U_3rom_table(61986) <= "01010110"; + when 61987 => mw_U_3rom_table(61987) <= "00001001"; + when 61988 => mw_U_3rom_table(61988) <= "11101010"; + when 61989 => mw_U_3rom_table(61989) <= "11110001"; + when 61990 => mw_U_3rom_table(61990) <= "01100011"; + when 61991 => mw_U_3rom_table(61991) <= "01001110"; + when 61992 => mw_U_3rom_table(61992) <= "01010110"; + when 61993 => mw_U_3rom_table(61993) <= "01000110"; + when 61994 => mw_U_3rom_table(61994) <= "01010110"; + when 61995 => mw_U_3rom_table(61995) <= "01010110"; + when 61996 => mw_U_3rom_table(61996) <= "01001010"; + when 61997 => mw_U_3rom_table(61997) <= "11110001"; + when 61998 => mw_U_3rom_table(61998) <= "01100011"; + when 61999 => mw_U_3rom_table(61999) <= "10101100"; + when 62000 => mw_U_3rom_table(62000) <= "01010110"; + when 62001 => mw_U_3rom_table(62001) <= "10100100"; + when 62002 => mw_U_3rom_table(62002) <= "01010110"; + when 62003 => mw_U_3rom_table(62003) <= "10110100"; + when 62004 => mw_U_3rom_table(62004) <= "01010110"; + when 62005 => mw_U_3rom_table(62005) <= "10100000"; + when 62006 => mw_U_3rom_table(62006) <= "11110001"; + when 62007 => mw_U_3rom_table(62007) <= "01100011"; + when 62008 => mw_U_3rom_table(62008) <= "10101110"; + when 62009 => mw_U_3rom_table(62009) <= "01010110"; + when 62010 => mw_U_3rom_table(62010) <= "10100110"; + when 62011 => mw_U_3rom_table(62011) <= "01010110"; + when 62012 => mw_U_3rom_table(62012) <= "10110110"; + when 62013 => mw_U_3rom_table(62013) <= "01010110"; + when 62014 => mw_U_3rom_table(62014) <= "10100010"; + when 62015 => mw_U_3rom_table(62015) <= "11110001"; + when 62016 => mw_U_3rom_table(62016) <= "11110001"; + when 62017 => mw_U_3rom_table(62017) <= "01100011"; + when 62018 => mw_U_3rom_table(62018) <= "01111110"; + when 62019 => mw_U_3rom_table(62019) <= "01010110"; + when 62020 => mw_U_3rom_table(62020) <= "01110110"; + when 62021 => mw_U_3rom_table(62021) <= "01101010"; + when 62022 => mw_U_3rom_table(62022) <= "11110001"; + when 62023 => mw_U_3rom_table(62023) <= "01100011"; + when 62024 => mw_U_3rom_table(62024) <= "00101110"; + when 62025 => mw_U_3rom_table(62025) <= "01010110"; + when 62026 => mw_U_3rom_table(62026) <= "00100110"; + when 62027 => mw_U_3rom_table(62027) <= "01010110"; + when 62028 => mw_U_3rom_table(62028) <= "00110110"; + when 62029 => mw_U_3rom_table(62029) <= "00101010"; + when 62030 => mw_U_3rom_table(62030) <= "00101000"; + when 62031 => mw_U_3rom_table(62031) <= "01101000"; + when 62032 => mw_U_3rom_table(62032) <= "00001000"; + when 62033 => mw_U_3rom_table(62033) <= "01001000"; + when 62034 => mw_U_3rom_table(62034) <= "11110001"; + when 62035 => mw_U_3rom_table(62035) <= "01100011"; + when 62036 => mw_U_3rom_table(62036) <= "00001101"; + when 62037 => mw_U_3rom_table(62037) <= "01010110"; + when 62038 => mw_U_3rom_table(62038) <= "00000101"; + when 62039 => mw_U_3rom_table(62039) <= "00000000"; + when 62040 => mw_U_3rom_table(62040) <= "01010110"; + when 62041 => mw_U_3rom_table(62041) <= "00011001"; + when 62042 => mw_U_3rom_table(62042) <= "01010110"; + when 62043 => mw_U_3rom_table(62043) <= "00010101"; + when 62044 => mw_U_3rom_table(62044) <= "01010110"; + when 62045 => mw_U_3rom_table(62045) <= "00010010"; + when 62046 => mw_U_3rom_table(62046) <= "01010110"; + when 62047 => mw_U_3rom_table(62047) <= "00010001"; + when 62048 => mw_U_3rom_table(62048) <= "01010110"; + when 62049 => mw_U_3rom_table(62049) <= "10010001"; + when 62050 => mw_U_3rom_table(62050) <= "01010110"; + when 62051 => mw_U_3rom_table(62051) <= "10000001"; + when 62052 => mw_U_3rom_table(62052) <= "01111000"; + when 62053 => mw_U_3rom_table(62053) <= "11111000"; + when 62054 => mw_U_3rom_table(62054) <= "00111000"; + when 62055 => mw_U_3rom_table(62055) <= "11110001"; + when 62056 => mw_U_3rom_table(62056) <= "01100011"; + when 62057 => mw_U_3rom_table(62057) <= "11101101"; + when 62058 => mw_U_3rom_table(62058) <= "01010110"; + when 62059 => mw_U_3rom_table(62059) <= "11100101"; + when 62060 => mw_U_3rom_table(62060) <= "00000000"; + when 62061 => mw_U_3rom_table(62061) <= "01010110"; + when 62062 => mw_U_3rom_table(62062) <= "11111001"; + when 62063 => mw_U_3rom_table(62063) <= "01010110"; + when 62064 => mw_U_3rom_table(62064) <= "11110101"; + when 62065 => mw_U_3rom_table(62065) <= "01010110"; + when 62066 => mw_U_3rom_table(62066) <= "11110010"; + when 62067 => mw_U_3rom_table(62067) <= "01010110"; + when 62068 => mw_U_3rom_table(62068) <= "11110001"; + when 62069 => mw_U_3rom_table(62069) <= "01010110"; + when 62070 => mw_U_3rom_table(62070) <= "11100001"; + when 62071 => mw_U_3rom_table(62071) <= "01010110"; + when 62072 => mw_U_3rom_table(62072) <= "11101001"; + when 62073 => mw_U_3rom_table(62073) <= "01100000"; + when 62074 => mw_U_3rom_table(62074) <= "01000000"; + when 62075 => mw_U_3rom_table(62075) <= "11110001"; + when 62076 => mw_U_3rom_table(62076) <= "01100011"; + when 62077 => mw_U_3rom_table(62077) <= "01101110"; + when 62078 => mw_U_3rom_table(62078) <= "01010110"; + when 62079 => mw_U_3rom_table(62079) <= "01100110"; + when 62080 => mw_U_3rom_table(62080) <= "10011000"; + when 62081 => mw_U_3rom_table(62081) <= "10011010"; + when 62082 => mw_U_3rom_table(62082) <= "10001010"; + when 62083 => mw_U_3rom_table(62083) <= "10111010"; + when 62084 => mw_U_3rom_table(62084) <= "10101000"; + when 62085 => mw_U_3rom_table(62085) <= "10101010"; + when 62086 => mw_U_3rom_table(62086) <= "11110001"; + when 62087 => mw_U_3rom_table(62087) <= "01100011"; + when 62088 => mw_U_3rom_table(62088) <= "10001100"; + when 62089 => mw_U_3rom_table(62089) <= "01010110"; + when 62090 => mw_U_3rom_table(62090) <= "10000100"; + when 62091 => mw_U_3rom_table(62091) <= "01010110"; + when 62092 => mw_U_3rom_table(62092) <= "10010100"; + when 62093 => mw_U_3rom_table(62093) <= "11110001"; + when 62094 => mw_U_3rom_table(62094) <= "01100011"; + when 62095 => mw_U_3rom_table(62095) <= "10001110"; + when 62096 => mw_U_3rom_table(62096) <= "01010110"; + when 62097 => mw_U_3rom_table(62097) <= "10000110"; + when 62098 => mw_U_3rom_table(62098) <= "01010110"; + when 62099 => mw_U_3rom_table(62099) <= "10010110"; + when 62100 => mw_U_3rom_table(62100) <= "11110001"; + when 62101 => mw_U_3rom_table(62101) <= "01100011"; + when 62102 => mw_U_3rom_table(62102) <= "10001101"; + when 62103 => mw_U_3rom_table(62103) <= "01010110"; + when 62104 => mw_U_3rom_table(62104) <= "10000101"; + when 62105 => mw_U_3rom_table(62105) <= "00000000"; + when 62106 => mw_U_3rom_table(62106) <= "01010110"; + when 62107 => mw_U_3rom_table(62107) <= "10011001"; + when 62108 => mw_U_3rom_table(62108) <= "01010110"; + when 62109 => mw_U_3rom_table(62109) <= "10010101"; + when 62110 => mw_U_3rom_table(62110) <= "01010110"; + when 62111 => mw_U_3rom_table(62111) <= "10010010"; + when 62112 => mw_U_3rom_table(62112) <= "11100010"; + when 62113 => mw_U_3rom_table(62113) <= "01010110"; + when 62114 => mw_U_3rom_table(62114) <= "10011111"; + when 62115 => mw_U_3rom_table(62115) <= "11100101"; + when 62116 => mw_U_3rom_table(62116) <= "01010110"; + when 62117 => mw_U_3rom_table(62117) <= "10001111"; + when 62118 => mw_U_3rom_table(62118) <= "11101000"; + when 62119 => mw_U_3rom_table(62119) <= "01010110"; + when 62120 => mw_U_3rom_table(62120) <= "01111111"; + when 62121 => mw_U_3rom_table(62121) <= "11101011"; + when 62122 => mw_U_3rom_table(62122) <= "01010110"; + when 62123 => mw_U_3rom_table(62123) <= "01101111"; + when 62124 => mw_U_3rom_table(62124) <= "11101110"; + when 62125 => mw_U_3rom_table(62125) <= "01010110"; + when 62126 => mw_U_3rom_table(62126) <= "01011111"; + when 62127 => mw_U_3rom_table(62127) <= "11110001"; + when 62128 => mw_U_3rom_table(62128) <= "01010110"; + when 62129 => mw_U_3rom_table(62129) <= "01001111"; + when 62130 => mw_U_3rom_table(62130) <= "11110100"; + when 62131 => mw_U_3rom_table(62131) <= "01010110"; + when 62132 => mw_U_3rom_table(62132) <= "00111111"; + when 62133 => mw_U_3rom_table(62133) <= "11110111"; + when 62134 => mw_U_3rom_table(62134) <= "01010110"; + when 62135 => mw_U_3rom_table(62135) <= "00101111"; + when 62136 => mw_U_3rom_table(62136) <= "11111010"; + when 62137 => mw_U_3rom_table(62137) <= "01010110"; + when 62138 => mw_U_3rom_table(62138) <= "00011111"; + when 62139 => mw_U_3rom_table(62139) <= "11111101"; + when 62140 => mw_U_3rom_table(62140) <= "01010110"; + when 62141 => mw_U_3rom_table(62141) <= "00001111"; + when 62142 => mw_U_3rom_table(62142) <= "00000000"; + when 62143 => mw_U_3rom_table(62143) <= "10000000"; + when 62144 => mw_U_3rom_table(62144) <= "01000111"; + when 62145 => mw_U_3rom_table(62145) <= "01010110"; + when 62146 => mw_U_3rom_table(62146) <= "00110111"; + when 62147 => mw_U_3rom_table(62147) <= "01010110"; + when 62148 => mw_U_3rom_table(62148) <= "00100111"; + when 62149 => mw_U_3rom_table(62149) <= "01010110"; + when 62150 => mw_U_3rom_table(62150) <= "00010111"; + when 62151 => mw_U_3rom_table(62151) <= "01010110"; + when 62152 => mw_U_3rom_table(62152) <= "00000111"; + when 62153 => mw_U_3rom_table(62153) <= "01111010"; + when 62154 => mw_U_3rom_table(62154) <= "11111010"; + when 62155 => mw_U_3rom_table(62155) <= "01011010"; + when 62156 => mw_U_3rom_table(62156) <= "11011010"; + when 62157 => mw_U_3rom_table(62157) <= "00000010"; + when 62158 => mw_U_3rom_table(62158) <= "11010000"; + when 62159 => mw_U_3rom_table(62159) <= "01010110"; + when 62160 => mw_U_3rom_table(62160) <= "11111111"; + when 62161 => mw_U_3rom_table(62161) <= "11010011"; + when 62162 => mw_U_3rom_table(62162) <= "01010110"; + when 62163 => mw_U_3rom_table(62163) <= "11101111"; + when 62164 => mw_U_3rom_table(62164) <= "11010110"; + when 62165 => mw_U_3rom_table(62165) <= "01010110"; + when 62166 => mw_U_3rom_table(62166) <= "11011111"; + when 62167 => mw_U_3rom_table(62167) <= "11011001"; + when 62168 => mw_U_3rom_table(62168) <= "01010110"; + when 62169 => mw_U_3rom_table(62169) <= "11001111"; + when 62170 => mw_U_3rom_table(62170) <= "11011100"; + when 62171 => mw_U_3rom_table(62171) <= "01010110"; + when 62172 => mw_U_3rom_table(62172) <= "10111111"; + when 62173 => mw_U_3rom_table(62173) <= "11011111"; + when 62174 => mw_U_3rom_table(62174) <= "01010110"; + when 62175 => mw_U_3rom_table(62175) <= "10101111"; + when 62176 => mw_U_3rom_table(62176) <= "01010110"; + when 62177 => mw_U_3rom_table(62177) <= "00010100"; + when 62178 => mw_U_3rom_table(62178) <= "11110001"; + when 62179 => mw_U_3rom_table(62179) <= "01100011"; + when 62180 => mw_U_3rom_table(62180) <= "10011100"; + when 62181 => mw_U_3rom_table(62181) <= "01010110"; + when 62182 => mw_U_3rom_table(62182) <= "01100100"; + when 62183 => mw_U_3rom_table(62183) <= "01010110"; + when 62184 => mw_U_3rom_table(62184) <= "01110100"; + when 62185 => mw_U_3rom_table(62185) <= "01010110"; + when 62186 => mw_U_3rom_table(62186) <= "11110111"; + when 62187 => mw_U_3rom_table(62187) <= "01010110"; + when 62188 => mw_U_3rom_table(62188) <= "11100111"; + when 62189 => mw_U_3rom_table(62189) <= "01010110"; + when 62190 => mw_U_3rom_table(62190) <= "11010111"; + when 62191 => mw_U_3rom_table(62191) <= "01010110"; + when 62192 => mw_U_3rom_table(62192) <= "11000111"; + when 62193 => mw_U_3rom_table(62193) <= "01010110"; + when 62194 => mw_U_3rom_table(62194) <= "10110111"; + when 62195 => mw_U_3rom_table(62195) <= "01010110"; + when 62196 => mw_U_3rom_table(62196) <= "10100111"; + when 62197 => mw_U_3rom_table(62197) <= "01010110"; + when 62198 => mw_U_3rom_table(62198) <= "10010111"; + when 62199 => mw_U_3rom_table(62199) <= "01010110"; + when 62200 => mw_U_3rom_table(62200) <= "10000111"; + when 62201 => mw_U_3rom_table(62201) <= "01010110"; + when 62202 => mw_U_3rom_table(62202) <= "01110111"; + when 62203 => mw_U_3rom_table(62203) <= "01010110"; + when 62204 => mw_U_3rom_table(62204) <= "01100111"; + when 62205 => mw_U_3rom_table(62205) <= "01010110"; + when 62206 => mw_U_3rom_table(62206) <= "01010111"; + when 62207 => mw_U_3rom_table(62207) <= "01010110"; + when 62208 => mw_U_3rom_table(62208) <= "11111111"; + when 62209 => mw_U_3rom_table(62209) <= "11111111"; + when 62210 => mw_U_3rom_table(62210) <= "11111111"; + when 62211 => mw_U_3rom_table(62211) <= "11111111"; + when 62212 => mw_U_3rom_table(62212) <= "11111111"; + when 62213 => mw_U_3rom_table(62213) <= "11111111"; + when 62214 => mw_U_3rom_table(62214) <= "11111111"; + when 62215 => mw_U_3rom_table(62215) <= "11111111"; + when 62216 => mw_U_3rom_table(62216) <= "11111111"; + when 62217 => mw_U_3rom_table(62217) <= "11111111"; + when 62218 => mw_U_3rom_table(62218) <= "11111111"; + when 62219 => mw_U_3rom_table(62219) <= "11111111"; + when 62220 => mw_U_3rom_table(62220) <= "11111111"; + when 62221 => mw_U_3rom_table(62221) <= "11111111"; + when 62222 => mw_U_3rom_table(62222) <= "11111111"; + when 62223 => mw_U_3rom_table(62223) <= "11111111"; + when 62224 => mw_U_3rom_table(62224) <= "11111111"; + when 62225 => mw_U_3rom_table(62225) <= "11111111"; + when 62226 => mw_U_3rom_table(62226) <= "11111111"; + when 62227 => mw_U_3rom_table(62227) <= "11111111"; + when 62228 => mw_U_3rom_table(62228) <= "11111111"; + when 62229 => mw_U_3rom_table(62229) <= "11111111"; + when 62230 => mw_U_3rom_table(62230) <= "11111111"; + when 62231 => mw_U_3rom_table(62231) <= "11111111"; + when 62232 => mw_U_3rom_table(62232) <= "11111111"; + when 62233 => mw_U_3rom_table(62233) <= "11111111"; + when 62234 => mw_U_3rom_table(62234) <= "11111111"; + when 62235 => mw_U_3rom_table(62235) <= "11111111"; + when 62236 => mw_U_3rom_table(62236) <= "11111111"; + when 62237 => mw_U_3rom_table(62237) <= "11111111"; + when 62238 => mw_U_3rom_table(62238) <= "01010110"; + when 62239 => mw_U_3rom_table(62239) <= "00000100"; + when 65504 => mw_U_3rom_table(65504) <= "11111111"; + when 65505 => mw_U_3rom_table(65505) <= "11111111"; + when 65506 => mw_U_3rom_table(65506) <= "11110000"; + when 65507 => mw_U_3rom_table(65507) <= "00000000"; + when 65508 => mw_U_3rom_table(65508) <= "11111111"; + when 65509 => mw_U_3rom_table(65509) <= "11111111"; + when 65510 => mw_U_3rom_table(65510) <= "11111111"; + when 65511 => mw_U_3rom_table(65511) <= "11111111"; + when 65512 => mw_U_3rom_table(65512) <= "11111111"; + when 65513 => mw_U_3rom_table(65513) <= "11111111"; + when 65514 => mw_U_3rom_table(65514) <= "11111111"; + when 65515 => mw_U_3rom_table(65515) <= "11111111"; + when 65516 => mw_U_3rom_table(65516) <= "11111111"; + when 65517 => mw_U_3rom_table(65517) <= "11111111"; + when 65518 => mw_U_3rom_table(65518) <= "11111111"; + when 65519 => mw_U_3rom_table(65519) <= "11111111"; + when 65520 => mw_U_3rom_table(65520) <= "11111111"; + when 65521 => mw_U_3rom_table(65521) <= "11111111"; + when 65522 => mw_U_3rom_table(65522) <= "11111111"; + when 65523 => mw_U_3rom_table(65523) <= "11111111"; + when 65524 => mw_U_3rom_table(65524) <= "11111111"; + when 65525 => mw_U_3rom_table(65525) <= "11111111"; + when 65526 => mw_U_3rom_table(65526) <= "11111111"; + when 65527 => mw_U_3rom_table(65527) <= "11111111"; + when 65528 => mw_U_3rom_table(65528) <= "11111111"; + when 65529 => mw_U_3rom_table(65529) <= "11111111"; + when 65530 => mw_U_3rom_table(65530) <= "11111111"; + when 65531 => mw_U_3rom_table(65531) <= "11111111"; + when 65532 => mw_U_3rom_table(65532) <= "11111111"; + when 65533 => mw_U_3rom_table(65533) <= "11111111"; + when 65534 => mw_U_3rom_table(65534) <= "11111111"; + when 65535 => mw_U_3rom_table(65535) <= "11111111"; + when others => mw_U_3rom_table(mw_U_3addr_int) <= (others => 'X') ; + end case; + end process ; + + u_3rom_read_proc : process ( clk1 ) + begin + if (clk1'event and clk1='1') then + dout1 <= mw_U_3rom_table(mw_U_3addr_int); + end if; + end process ; + + -- Instance port mappings. + U_0 : R6502_TC + port map ( + clk_clk_i => clk, + d_i => RAM_DOUT_internal, + irq_n_i => IRQn, + nmi_n_i => NMIn, + rdy_i => RDY, + rst_rst_n_i => RSTn, + so_n_i => so_n_i, + a_o => A_internal, + d_o => CPU_DOUT_internal, + rd_o => RD, + sync_o => SYNC, + wr_n_o => open, + wr_o => WR_internal + ); + + -- Implicit buffered output assignments + CPU_DOUT <= CPU_DOUT_internal; + RAM_DOUT <= RAM_DOUT_internal; + WR <= WR_internal; + A <= A_internal; + +end struct;
vhdl/testbench.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/add_sub.vhd =================================================================== --- vhdl/add_sub.vhd (nonexistent) +++ vhdl/add_sub.vhd (revision 18) @@ -0,0 +1,137 @@ +-- VHDL Entity R6502_TC.ADD_SUB.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:54 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity ADD_SUB is + port( + ch_a_i : in std_logic_vector ( 7 downto 0 ) := X"00"; + ch_b_i : in std_logic_vector ( 7 downto 0 ) := X"00"; + reg_0flag_i : in std_logic := '0'; + reg_7flag_core_i : in std_logic := '0'; + sel : in std_logic_vector ( 1 downto 0 ) := "00"; + q_a_o : out std_logic_vector ( 7 downto 0 ) := X"00"; + reg_0flag_o : out std_logic := '0'; + reg_6flag_o : out std_logic := '0'; + zw_alu : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu1 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu2 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu3 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu4 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu5 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu6 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00" + ); + +-- Declarations + +end ADD_SUB ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- +-- Title: Adder and Substractor +-- Path: R6502_TC/ADD_SUB/flow +-- Edited: by eda on 08 Apr 2008 +-- +-- VHDL Architecture R6502_TC.ADD_SUB.flow +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:54 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; +architecture flow of ADD_SUB is + +begin + + ----------------------------------------------------------------- + process0_proc : process (ch_a_i, ch_b_i, reg_0flag_i, reg_7flag_core_i, sel, zw_alu, zw_alu1, zw_alu2, zw_alu3, zw_alu4, zw_alu5, zw_alu6) + ----------------------------------------------------------------- + begin + case sel(1 downto 0) is + when "01" => + reg_6flag_o <= reg_7flag_core_i XOR zw_ALU(7); + reg_0flag_o <= zw_ALU4(4); + q_a_o <= zw_ALU(7 downto 0); + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & + (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & + (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & ch_a_i(7 downto 4)) + unsigned + ('0' & ch_b_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & ch_a_i(3 downto 0)) + unsigned + ('0' & ch_b_i(3 downto 0)) + reg_0flag_i; + when "00" => + reg_6flag_o <= reg_7flag_core_i XOR zw_ALU(7); + reg_0flag_o <= zw_ALU(8); + q_a_o <= zw_ALU(7 downto 0); + zw_ALU <= unsigned ('0' & ch_a_i) + unsigned ('0' & ch_b_i) + reg_0flag_i; + when "10" => + reg_6flag_o <= reg_7flag_core_i XOR zw_ALU(7); + reg_0flag_o <= zw_ALU(8); + q_a_o <= zw_ALU(7 downto 0); + zw_ALU <= unsigned ('0' & ch_a_i) + unsigned ('0' & NOT (ch_b_i)) + reg_0flag_i; + when "11" => + reg_6flag_o <= reg_7flag_core_i XOR zw_ALU(7); + reg_0flag_o <= zw_ALU2(4); + q_a_o <= zw_ALU(7 downto 0); + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & ch_a_i(7 downto 4)) + unsigned + ('0' & NOT (ch_b_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & ch_a_i(3 downto 0)) + unsigned + ('0' & NOT (ch_b_i(3 downto 0))) + reg_0flag_i; + when others => + reg_6flag_o <= reg_7flag_core_i XOR zw_ALU(7); + reg_0flag_o <= zw_ALU(8); + q_a_o <= zw_ALU(7 downto 0); + zw_ALU <= unsigned ('0' & ch_a_i) + unsigned ('0' & ch_b_i) + reg_0flag_i; + end case; + end process process0_proc; + + +end flow;
vhdl/add_sub.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/alu.vhd =================================================================== --- vhdl/alu.vhd (nonexistent) +++ vhdl/alu.vhd (revision 18) @@ -0,0 +1,210 @@ +-- VHDL Entity R6502_TC.ALU.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:54 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity ALU is + port( + ch_a_i : in std_logic_vector (7 downto 0); + ch_b_i : in std_logic_vector (7 downto 0); + reg_0flag_core_i : in std_logic; + reg_3flag_core_i : in std_logic; + reg_7flag_core_i : in std_logic; + sel_alu_as_i : in std_logic; + sel_alu_out_i : in std_logic_vector (2 downto 0); + d_alu_o : out std_logic_vector (7 downto 0); + reg_0flag_o : out std_logic; + reg_1flag_o : out std_logic; + reg_6flag_o : out std_logic; + reg_7flag_o : out std_logic + ); + +-- Declarations + +end ALU ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG +-- +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or any later version. +-- +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with this program. If not, see . +-- +-- CVS Revisins History +-- +-- $Log: not supported by cvs2svn $ +-- +-- Title: ALU +-- Path: R6502_TC/ALU/struct +-- Edited: by eda on 08 Apr 2008 +-- +-- VHDL Architecture R6502_TC.ALU.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:54 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +library R6502_TC; + +architecture struct of ALU is + + -- Architecture declarations + + -- Internal signal declarations + signal din : std_logic; + signal din0 : std_logic; + signal din1 : std_logic; + signal din2 : std_logic; + signal din3 : std_logic; + signal dout : std_logic; + signal q_a : std_logic_vector(7 downto 0); + signal q_and : std_logic_vector(7 downto 0); + signal q_aneg : std_logic_vector(7 downto 0); + signal q_bneg : std_logic_vector(7 downto 0); + signal q_or : std_logic_vector(7 downto 0); + signal q_xor : std_logic_vector(7 downto 0); + signal sel : std_logic_vector(1 downto 0); + signal val_one : std_logic_vector(7 downto 0); + signal val_two : std_logic_vector(7 downto 0); + signal val_zero : std_logic_vector(7 downto 0); + + -- Implicit buffer signal declarations + signal d_alu_o_internal : std_logic_vector (7 downto 0); + + + -- Component Declarations + component ADD_SUB + port ( + ch_a_i : in std_logic_vector ( 7 downto 0 ) := X"00"; + ch_b_i : in std_logic_vector ( 7 downto 0 ) := X"00"; + reg_0flag_i : in std_logic := '0'; + reg_7flag_core_i : in std_logic := '0'; + sel : in std_logic_vector ( 1 downto 0 ) := "00"; + q_a_o : out std_logic_vector ( 7 downto 0 ) := X"00"; + reg_0flag_o : out std_logic := '0'; + reg_6flag_o : out std_logic := '0'; + zw_alu : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu1 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu2 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu3 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu4 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu5 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00"; + zw_alu6 : inout std_logic_vector ( 8 downto 0 ) := '0' & X"00" + ); + end component; + + -- Optional embedded configurations + -- pragma synthesis_off + for all : ADD_SUB use entity R6502_TC.ADD_SUB; + -- pragma synthesis_on + + +begin + -- Architecture concurrent statements + -- HDL Embedded Text Block 3 eb3 + -- eb1 1 + val_zero (7 downto 0) <= X"00"; + val_one (7 downto 0) <= X"01"; + val_two (7 downto 0) <= X"02"; + sel(0) <= reg_3flag_core_i AND sel_alu_out_i(0); + sel(1) <= sel_alu_as_i; + + + -- ModuleWare code(v1.9) for instance 'U_3' of 'inv' + q_aneg <= not(ch_a_i); + + -- ModuleWare code(v1.9) for instance 'U_4' of 'inv' + q_bneg <= not(ch_b_i); + + -- ModuleWare code(v1.9) for instance 'U_8' of 'inv' + reg_1flag_o <= not(din); + + -- ModuleWare code(v1.9) for instance 'U_9' of 'inv' + reg_7flag_o <= not(din1); + + -- ModuleWare code(v1.9) for instance 'U_10' of 'inv' + din1 <= not(d_alu_o_internal(7)); + + -- ModuleWare code(v1.9) for instance 'U_14' of 'inv' + din3 <= not(sel_alu_out_i(0)); + + -- ModuleWare code(v1.9) for instance 'U_5' of 'mux' + u_5combo_proc: process(q_and, q_or, q_xor, q_aneg, q_bneg, q_a, + val_zero, sel_alu_out_i) + begin + case sel_alu_out_i is + when "000" => d_alu_o_internal <= q_and; + when "001" => d_alu_o_internal <= q_or; + when "010" => d_alu_o_internal <= q_xor; + when "011" => d_alu_o_internal <= q_aneg; + when "100" => d_alu_o_internal <= q_bneg; + when "101" => d_alu_o_internal <= q_a; + when "110" => d_alu_o_internal <= q_a; + when "111" => d_alu_o_internal <= val_zero; + when others => d_alu_o_internal <= (others => 'X'); + end case; + end process u_5combo_proc; + + -- ModuleWare code(v1.9) for instance 'U_7' of 'por' + din <= d_alu_o_internal(0) or d_alu_o_internal(1) or d_alu_o_internal(2) or d_alu_o_internal(3) or d_alu_o_internal(4) or d_alu_o_internal(5) or d_alu_o_internal(6) or d_alu_o_internal(7); + + -- ModuleWare code(v1.9) for instance 'U_0' of 'sand' + q_and <= ch_a_i and ch_b_i; + + -- ModuleWare code(v1.9) for instance 'U_11' of 'sand' + din0 <= sel_alu_out_i(0) and reg_0flag_core_i; + + -- ModuleWare code(v1.9) for instance 'U_13' of 'sand' + din2 <= din3 and sel_alu_as_i; + + -- ModuleWare code(v1.9) for instance 'U_1' of 'sor' + q_or <= ch_a_i or ch_b_i; + + -- ModuleWare code(v1.9) for instance 'U_12' of 'sor' + dout <= din0 or din2; + + -- ModuleWare code(v1.9) for instance 'U_2' of 'sxor' + q_xor <= ch_a_i xor ch_b_i; + + -- Instance port mappings. + U_6 : ADD_SUB + port map ( + ch_a_i => ch_a_i, + ch_b_i => ch_b_i, + reg_0flag_i => dout, + reg_7flag_core_i => reg_7flag_core_i, + sel => sel, + q_a_o => q_a, + reg_0flag_o => reg_0flag_o, + reg_6flag_o => reg_6flag_o, + zw_alu => open, + zw_alu1 => open, + zw_alu2 => open, + zw_alu3 => open, + zw_alu4 => open, + zw_alu5 => open, + zw_alu6 => open + ); + + -- Implicit buffered output assignments + d_alu_o <= d_alu_o_internal; + +end struct;
vhdl/alu.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: vhdl/fsm_core_v2_0.vhd =================================================================== --- vhdl/fsm_core_v2_0.vhd (nonexistent) +++ vhdl/fsm_core_v2_0.vhd (revision 18) @@ -0,0 +1,5446 @@ +-- VHDL Entity R6502_TC.fsm_core_V2_0.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:55 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +entity fsm_core_V2_0 is + port( + adr_nxt_pc_i : in std_logic_vector (15 downto 0); + adr_nxt_sp_i : in std_logic_vector (15 downto 0); + adr_pc_i : in std_logic_vector (15 downto 0); + adr_sp_i : in std_logic_vector (15 downto 0); + clk_clk_i : in std_logic; + cout_pc_i : in std_logic; + d_alu_i : in std_logic_vector ( 7 downto 0 ); + d_i : in std_logic_vector ( 7 downto 0 ); + d_regs_out_i : in std_logic_vector ( 7 downto 0 ); + irq_n_i : in std_logic; + nmi_i : in std_logic; + q_a_i : in std_logic_vector ( 7 downto 0 ); + q_x_i : in std_logic_vector ( 7 downto 0 ); + q_y_i : in std_logic_vector ( 7 downto 0 ); + rdy_i : in std_logic; + reg_0flag_i : in std_logic; + reg_1flag_i : in std_logic; + reg_6flag_i : in std_logic; + reg_7flag_i : in std_logic; + rst_rst_n_i : in std_logic; + so_n_i : in std_logic; + a_o : out std_logic_vector (15 downto 0); + adr_o : out std_logic_vector (15 downto 0); + ch_a_o : out std_logic_vector ( 7 downto 0 ); + ch_b_o : out std_logic_vector ( 7 downto 0 ); + d_o : out std_logic_vector ( 7 downto 0 ); + d_regs_in_o : out std_logic_vector ( 7 downto 0 ); + ld_o : out std_logic_vector ( 1 downto 0 ); + ld_pc_o : out std_logic; + ld_sp_o : out std_logic; + load_regs_o : out std_logic; + offset_o : out std_logic_vector ( 15 downto 0 ); + rd_o : out std_logic; + reg_0flag_o : out std_logic; + reg_1flag_o : out std_logic; + reg_3flag_o : out std_logic; + reg_7flag_o : out std_logic; + sync_o : out std_logic; + wr_n_o : out std_logic; + wr_o : out std_logic; + sel_alu_as_o_i : inout std_logic; + sel_alu_out_o_i : inout std_logic_vector ( 2 downto 0 ); + sel_pc_as_o_i : inout std_logic; + sel_pc_in_o_i : inout std_logic_vector ( 1 downto 0 ); + sel_pc_val_o_i : inout std_logic_vector ( 1 downto 0 ); + sel_rb_in_o_i : inout std_logic_vector ( 2 downto 0 ); + sel_rb_out_o_i : inout std_logic_vector ( 2 downto 0 ); + sel_reg_o_i : inout std_logic_vector ( 1 downto 0 ); + sel_sp_as_o_i : inout std_logic; + sel_sp_in_o_i : inout std_logic_vector ( 1 downto 0 ); + sel_sp_val_o_i : inout std_logic_vector ( 1 downto 0 ) + ); + +-- Declarations + +end fsm_core_V2_0 ; + +-- Jens-D. Gutschmidt Project: R6502_TC + +-- scantara2003@yahoo.de + +-- COPYRIGHT (C) 2008 by Jens Gutschmidt and OPENCORES.ORG + +-- + +-- This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by + +-- the Free Software Foundation, either version 3 of the License, or any later version. + +-- + +-- This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of + +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +-- + +-- You should have received a copy of the GNU General Public License along with this program. If not, see . + +-- + +-- CVS Revisins History + +-- + +-- $Log: not supported by cvs2svn $ + +-- + +-- Title: FSM for all op codes + +-- Path: R6502_TC/fsm_core_V2_0/fsm + +-- Edited: by eda on 08 Apr 2008 + +-- +-- VHDL Architecture R6502_TC.fsm_core_V2_0.fsm +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 19:06:56 08.04.2008 +-- +-- Generated by Mentor Graphics' HDL Designer(TM) 2007.1a (Build 13) +-- +LIBRARY ieee; +USE ieee.std_logic_1164.all; +USE ieee.std_logic_arith.all; + +architecture fsm of fsm_core_V2_0 is + + -- Architecture Declarations + signal reg_F : std_logic_vector( 7 DOWNTO 0 ); + signal reg_PC : std_logic_vector(15 DOWNTO 0); + signal reg_PC1 : std_logic_vector( 15 DOWNTO 0 ); + signal sig_D_OUT : std_logic_vector( 7 DOWNTO 0 ); + signal sig_PC : std_logic_vector(15 DOWNTO 0); + signal sig_RD : std_logic; + signal sig_RWn : std_logic; + signal sig_SYNC : std_logic; + signal sig_WR : std_logic; + signal zw_ALU : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU1 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU2 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU3 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU4 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU5 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU6 : std_logic_vector( 8 DOWNTO 0 ); + signal zw_PC : std_logic_vector( 15 DOWNTO 0 ); + signal zw_REG_ALU : std_logic_vector( 8 DOWNTO 0 ); + signal zw_REG_NMI : std_logic; + signal zw_REG_OP : std_logic_vector( 7 DOWNTO 0 ); + signal zw_REG_sig_PC : std_logic_vector(15 DOWNTO 0); + signal zw_b1 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b2 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b3 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_b4 : std_logic_vector( 7 DOWNTO 0 ); + signal zw_w1 : std_logic_vector( 15 DOWNTO 0 ); + signal zw_w2 : std_logic_vector( 15 DOWNTO 0 ); + signal zw_w3 : std_logic_vector( 15 DOWNTO 0 ); + + subtype state_type is + std_logic_vector(7 downto 0); + + -- State vector declaration + attribute state_vector : string; + attribute state_vector of fsm : architecture is "current_state"; + + -- Hard encoding + constant FETCH : state_type := "00000000"; + constant s1 : state_type := "00000001"; + constant s2 : state_type := "00000011"; + constant s5 : state_type := "00000010"; + constant s3 : state_type := "00000110"; + constant s4 : state_type := "00000111"; + constant s12 : state_type := "00000101"; + constant s16 : state_type := "00000100"; + constant s17 : state_type := "00001100"; + constant s24 : state_type := "00001101"; + constant s25 : state_type := "00001111"; + constant s271 : state_type := "00001110"; + constant s273 : state_type := "00001010"; + constant s304 : state_type := "00001011"; + constant s307 : state_type := "00001001"; + constant s177 : state_type := "00001000"; + constant s180 : state_type := "00011000"; + constant s181 : state_type := "00011001"; + constant s182 : state_type := "00011011"; + constant s183 : state_type := "00011010"; + constant s184 : state_type := "00011110"; + constant s185 : state_type := "00011111"; + constant s186 : state_type := "00011101"; + constant s187 : state_type := "00011100"; + constant s188 : state_type := "00010100"; + constant s189 : state_type := "00010101"; + constant s190 : state_type := "00010111"; + constant s191 : state_type := "00010110"; + constant s192 : state_type := "00010010"; + constant s193 : state_type := "00010011"; + constant s377 : state_type := "00010001"; + constant s381 : state_type := "00010000"; + constant s378 : state_type := "00110000"; + constant s382 : state_type := "00110001"; + constant s379 : state_type := "00110011"; + constant s383 : state_type := "00110010"; + constant s384 : state_type := "00110110"; + constant s380 : state_type := "00110111"; + constant s385 : state_type := "00110101"; + constant s386 : state_type := "00110100"; + constant s387 : state_type := "00111100"; + constant s388 : state_type := "00111101"; + constant s389 : state_type := "00111111"; + constant s391 : state_type := "00111110"; + constant s392 : state_type := "00111010"; + constant s390 : state_type := "00111011"; + constant s393 : state_type := "00111001"; + constant s394 : state_type := "00111000"; + constant s395 : state_type := "00101000"; + constant s396 : state_type := "00101001"; + constant s397 : state_type := "00101011"; + constant s398 : state_type := "00101010"; + constant s399 : state_type := "00101110"; + constant s400 : state_type := "00101111"; + constant s401 : state_type := "00101101"; + constant s526 : state_type := "00101100"; + constant s527 : state_type := "00100100"; + constant s528 : state_type := "00100101"; + constant s529 : state_type := "00100111"; + constant s530 : state_type := "00100110"; + constant s531 : state_type := "00100010"; + constant s544 : state_type := "00100011"; + constant s545 : state_type := "00100001"; + constant s546 : state_type := "00100000"; + constant s547 : state_type := "01100000"; + constant s549 : state_type := "01100001"; + constant s550 : state_type := "01100011"; + constant s404 : state_type := "01100010"; + constant s556 : state_type := "01100110"; + constant s557 : state_type := "01100111"; + constant s579 : state_type := "01100101"; + constant s201 : state_type := "01100100"; + constant s202 : state_type := "01101100"; + constant s210 : state_type := "01101101"; + constant s211 : state_type := "01101111"; + constant s215 : state_type := "01101110"; + constant s217 : state_type := "01101010"; + constant s218 : state_type := "01101011"; + constant s222 : state_type := "01101001"; + constant s223 : state_type := "01101000"; + constant s224 : state_type := "01111000"; + constant s225 : state_type := "01111001"; + constant s226 : state_type := "01111011"; + constant s243 : state_type := "01111010"; + constant s244 : state_type := "01111110"; + constant s247 : state_type := "01111111"; + constant s344 : state_type := "01111101"; + constant s343 : state_type := "01111100"; + constant s250 : state_type := "01110100"; + constant s251 : state_type := "01110101"; + constant s351 : state_type := "01110111"; + constant s361 : state_type := "01110110"; + constant s360 : state_type := "01110010"; + constant s403 : state_type := "01110011"; + constant s406 : state_type := "01110001"; + constant s407 : state_type := "01110000"; + constant s409 : state_type := "01010000"; + constant s412 : state_type := "01010001"; + constant s413 : state_type := "01010011"; + constant s416 : state_type := "01010010"; + constant s418 : state_type := "01010110"; + constant s510 : state_type := "01010111"; + constant s553 : state_type := "01010101"; + constant s555 : state_type := "01010100"; + constant s558 : state_type := "01011100"; + constant s560 : state_type := "01011101"; + constant s561 : state_type := "01011111"; + constant s563 : state_type := "01011110"; + constant s564 : state_type := "01011010"; + constant s565 : state_type := "01011011"; + constant s566 : state_type := "01011001"; + constant s266 : state_type := "01011000"; + constant s301 : state_type := "01001000"; + constant s302 : state_type := "01001001"; + constant RES : state_type := "01001011"; + constant s511 : state_type := "01001010"; + constant s559 : state_type := "01001110"; + constant s562 : state_type := "01001111"; + constant s567 : state_type := "01001101"; + constant s568 : state_type := "01001100"; + constant s569 : state_type := "01000100"; + constant s570 : state_type := "01000101"; + constant s571 : state_type := "01000111"; + constant s572 : state_type := "01000110"; + constant s573 : state_type := "01000010"; + constant s574 : state_type := "01000011"; + constant s548 : state_type := "01000001"; + constant s551 : state_type := "01000000"; + constant s552 : state_type := "11000000"; + constant s575 : state_type := "11000001"; + constant s576 : state_type := "11000011"; + constant s577 : state_type := "11000010"; + constant s532 : state_type := "11000110"; + constant s533 : state_type := "11000111"; + constant s534 : state_type := "11000101"; + constant s535 : state_type := "11000100"; + constant s536 : state_type := "11001100"; + constant s537 : state_type := "11001101"; + + -- Declare current and next state signals + signal current_state : state_type; + signal next_state : state_type; + + -- Declare any pre-registered internal signals + signal d_o_cld : std_logic_vector ( 7 downto 0 ); + signal rd_o_cld : std_logic ; + signal sync_o_cld : std_logic ; + signal wr_n_o_cld : std_logic ; + signal wr_o_cld : std_logic ; + signal sel_alu_as_o_i_cld : std_logic ; + signal sel_alu_out_o_i_cld : std_logic_vector ( 2 downto 0 ); + signal sel_pc_as_o_i_cld : std_logic ; + signal sel_pc_in_o_i_cld : std_logic_vector ( 1 downto 0 ); + signal sel_pc_val_o_i_cld : std_logic_vector ( 1 downto 0 ); + signal sel_rb_in_o_i_cld : std_logic_vector ( 2 downto 0 ); + signal sel_rb_out_o_i_cld : std_logic_vector ( 2 downto 0 ); + signal sel_reg_o_i_cld : std_logic_vector ( 1 downto 0 ); + signal sel_sp_as_o_i_cld : std_logic ; + signal sel_sp_in_o_i_cld : std_logic_vector ( 1 downto 0 ); + signal sel_sp_val_o_i_cld : std_logic_vector ( 1 downto 0 ); + +begin + + ----------------------------------------------------------------- + clocked_proc : process ( + clk_clk_i, + rst_rst_n_i + ) + ----------------------------------------------------------------- + begin + if (rst_rst_n_i = '0') then + current_state <= RES; + -- Default Reset Values + d_o_cld <= X"00"; + rd_o_cld <= '0'; + sync_o_cld <= '0'; + wr_n_o_cld <= '1'; + wr_o_cld <= '0'; + sel_alu_as_o_i_cld <= '0'; + sel_alu_out_o_i_cld <= "000"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_val_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "000"; + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "00"; + sel_sp_val_o_i_cld <= "00"; + reg_F <= "00000100"; + reg_PC <= X"0000"; + reg_PC1 <= X"0000"; + sig_PC <= X"0000"; + zw_PC <= X"0000"; + zw_REG_ALU <= '0' & X"00"; + zw_REG_NMI <= '0'; + zw_REG_OP <= X"00"; + zw_REG_sig_PC <= X"0000"; + zw_b1 <= X"00"; + zw_b2 <= X"00"; + zw_b3 <= X"00"; + zw_b4 <= X"00"; + zw_w1 <= X"0000"; + zw_w2 <= X"0000"; + zw_w3 <= X"0000"; + elsif (clk_clk_i'event and clk_clk_i = '1') then + current_state <= next_state; + -- Default Assignment To Internals + reg_F <= reg_F or ('0' & (not so_n_i) & "000000"); + reg_PC <= reg_PC; + reg_PC1 <= reg_PC1; + sig_PC <= sig_PC; + zw_PC <= zw_PC; + zw_REG_ALU <= zw_REG_ALU; + zw_REG_NMI <= zw_REG_NMI or nmi_i; + zw_REG_OP <= zw_REG_OP; + zw_REG_sig_PC <= zw_REG_sig_PC; + zw_b1 <= zw_b1; + zw_b2 <= zw_b2; + zw_b3 <= zw_b3; + zw_b4 <= zw_b4; + zw_w1 <= zw_w1; + zw_w2 <= zw_w2; + zw_w3 <= zw_w3; + d_o_cld <= sig_D_OUT; + rd_o_cld <= sig_RD; + sync_o_cld <= sig_SYNC; + wr_n_o_cld <= sig_RWn; + wr_o_cld <= sig_WR; + sel_alu_as_o_i_cld <= sel_alu_as_o_i; + sel_alu_out_o_i_cld <= sel_alu_out_o_i; + sel_pc_as_o_i_cld <= sel_pc_as_o_i; + sel_pc_in_o_i_cld <= sel_pc_in_o_i; + sel_pc_val_o_i_cld <= sel_pc_val_o_i; + sel_rb_in_o_i_cld <= sel_rb_in_o_i; + sel_rb_out_o_i_cld <= sel_rb_out_o_i; + sel_reg_o_i_cld <= sel_reg_o_i; + sel_sp_as_o_i_cld <= sel_sp_as_o_i; + sel_sp_in_o_i_cld <= sel_sp_in_o_i; + sel_sp_val_o_i_cld <= sel_sp_val_o_i; + + -- Combined Actions + case current_state is + when FETCH => + zw_REG_OP <= d_i; + if ((zw_REG_NMI = '1') and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + zw_REG_NMI <= '0'; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + zw_b1(0) <= reg_F(7); + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + zw_b3 <= adr_nxt_pc_i (15 downto 8); + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"00") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"18") and (rdy_i = '1')) then + elsif ((d_i = X"D8") and (rdy_i = '1')) then + elsif ((d_i = X"58") and (rdy_i = '1')) then + elsif ((d_i = X"B8") and (rdy_i = '1')) then + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "010"; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + zw_b4 <= X"FF"; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_reg_o_i_cld <= "01"; + sel_rb_in_o_i_cld <= "011"; + zw_b4 <= X"FF"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"88") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "010"; + sel_reg_o_i_cld <= "10"; + sel_rb_in_o_i_cld <= "011"; + zw_b4 <= X"FF"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + zw_b4 <= X"01"; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_reg_o_i_cld <= "01"; + sel_rb_in_o_i_cld <= "011"; + zw_b4 <= X"01"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "010"; + sel_reg_o_i_cld <= "10"; + sel_rb_in_o_i_cld <= "011"; + zw_b4 <= X"01"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"20") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + sel_reg_o_i_cld <= "01"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + sel_reg_o_i_cld <= "10"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + elsif ((d_i = X"48") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"08") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"68") and (rdy_i = '1')) then + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + elsif ((d_i = X"28") and (rdy_i = '1')) then + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"40") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + elsif ((d_i = X"60") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + zw_b1(0) <= reg_F(7); + elsif ((d_i = X"38") and (rdy_i = '1')) then + elsif ((d_i = X"F8") and (rdy_i = '1')) then + elsif ((d_i = X"78") and (rdy_i = '1')) then + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91" or + d_i = X"11") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "010"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "01"; + sel_rb_in_o_i_cld <= "000"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "000"; + sel_reg_o_i_cld <= "10"; + sel_rb_in_o_i_cld <= "000"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"98") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "010"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "001"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_reg_o_i_cld <= "01"; + sel_rb_in_o_i_cld <= "011"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_reg_o_i_cld <= "00"; + sel_rb_in_o_i_cld <= "010"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + sel_rb_out_o_i_cld <= "001"; + sel_reg_o_i_cld <= "11"; + sel_rb_in_o_i_cld <= "111"; + sel_alu_out_o_i_cld <= "110"; + sel_alu_as_o_i_cld <= '0'; + sel_sp_in_o_i_cld <= "01"; + sel_sp_as_o_i_cld <= '0'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s2 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '1'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s5 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '1'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s3 => + sig_PC <= adr_pc_i; + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(2) <= '1'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s4 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s12 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '0'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s16 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '0'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s17 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(2) <= '0'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s24 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(6) <= '0'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s25 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s271 => + if (rdy_i = '1' and + zw_REG_OP = X"4C") then + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "11"; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6C") then + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + zw_b1 <= d_i; + end if; + when s273 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + end if; + when s304 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "11"; + zw_b1 <= d_i; + end if; + when s307 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s177 => + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + end if; + when s180 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s181 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s182 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s183 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s184 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s185 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s186 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s187 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s188 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s189 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s190 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s191 => + sig_PC <= zw_b3 & zw_b1; + when s192 => + sig_PC <= d_i & zw_b1; + when s193 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s377 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s381 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s378 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s382 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s383 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s384 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s385 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s386 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F <= d_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s387 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s388 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s389 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + reg_F <= d_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "11"; + end if; + when s391 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when s392 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s390 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s393 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s394 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + end if; + when s395 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s396 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s397 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when s399 => + sig_PC <= adr_sp_i; + when s400 => + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "11"; + when s401 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1 (7 downto 0); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s526 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s527 => + sig_PC <= adr_sp_i; + when s528 => + sig_PC <= adr_sp_i; + when s529 => + sig_PC <= X"FFFE"; + when s530 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(4) <= '1'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s531 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + zw_b1 <= d_i; + end if; + when s544 => + sig_PC <= adr_sp_i; + when s545 => + sig_PC <= adr_sp_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + when s546 => + sig_PC <= adr_pc_i; + when s547 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + zw_w1 (7 downto 0) <= d_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "11"; + end if; + when s549 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_w1 (7 downto 0); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s550 => + sig_PC <= adr_sp_i; + sel_pc_in_o_i_cld <= "01"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + when s404 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(7); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s556 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s557 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(7); + reg_F(0) <= q_a_i(7); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s579 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= q_a_i(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s201 => + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + sig_PC <= X"00" & d_i; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + sig_PC <= adr_nxt_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + end if; + when s202 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s210 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s211 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s215 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s217 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s218 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s222 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s223 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s224 => + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s225 => + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + sig_PC <= adr_pc_i; + reg_F(7) <= zw_ALU(7); + reg_F(0) <= zw_ALU(8); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s226 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s243 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s244 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s247 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s344 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s343 => + if (rdy_i = '1') then + zw_b1 <= d_alu_i; + end if; + when s251 => + sig_PC <= adr_pc_i; + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s351 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + end if; + when s361 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(7) <= d_i(7); + reg_F(6) <= d_i(6); + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s360 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s403 => + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + end if; + when s406 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s407 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s409 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s412 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s416 => + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + zw_b1 <= d_i(6 downto 0) & '0'; + zw_b2(0) <= d_i(7); + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + zw_b1 <= '0' & d_i(7 downto 1); + zw_b2(0) <= d_i(0); + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + zw_b1 <= d_i(6 downto 0) & reg_F(0); + zw_b2(0) <= d_i(7); + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + zw_b1 <= reg_F(0) & d_i(7 downto 1); + zw_b2(0) <= d_i(0); + end if; + when s418 => + sig_PC <= adr_pc_i; + reg_F(0) <= zw_b2(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s510 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s553 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s555 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s558 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s560 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s561 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s563 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s564 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s565 => + if (rdy_i = '1' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU4(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s566 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s266 => + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "10"; + zw_b2 <= d_i; + end if; + when s301 => + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & adr_nxt_pc_i (7 downto 0); + end if; + when s302 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when RES => + sel_pc_in_o_i_cld <= "00"; + sel_pc_val_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sig_PC <= adr_nxt_pc_i; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + when s511 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + sig_PC <= X"00" & d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + sig_PC <= adr_nxt_pc_i; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + sig_PC <= X"00" & d_i; + zw_b1 <= d_alu_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + sig_PC <= adr_nxt_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s559 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when s562 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s567 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s568 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + zw_b1 <= d_alu_i; + zw_b2(0) <= reg_0flag_i; + end if; + when s569 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s570 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when s571 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when s572 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when s573 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when s574 => + if (rdy_i = '1' and + reg_F(3) = '0') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU(8); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + sig_PC <= adr_pc_i; + + reg_F(7) <= zw_ALU(7); + reg_F(6) <= zw_b1(0) XOR zw_ALU(7); + reg_F(1) <= NOT ((zw_ALU(7)) OR (zw_ALU(6)) OR (zw_ALU(5)) OR + (zw_ALU(4)) OR (zw_ALU(3)) OR (zw_ALU(2)) OR (zw_ALU(1)) OR + (zw_ALU(0))); + reg_F(0) <= zw_ALU2(4); + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s548 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s551 => + sig_PC <= adr_sp_i; + when s552 => + sig_PC <= adr_sp_i; + when s575 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + zw_b1 <= d_i; + end if; + when s576 => + sig_PC <= X"FFFE"; + when s577 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(2) <= '1'; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when s532 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when s533 => + sig_PC <= adr_sp_i; + when s534 => + sig_PC <= adr_sp_i; + when s535 => + if (rdy_i = '1') then + sig_PC <= X"FFFB"; + zw_b1 <= d_i; + end if; + when s536 => + sig_PC <= X"FFFA"; + when s537 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + sel_pc_in_o_i_cld <= "00"; + sel_pc_as_o_i_cld <= '0'; + sel_pc_val_o_i_cld <= "00"; + sel_sp_in_o_i_cld <= "00"; + sel_sp_as_o_i_cld <= '1'; + sel_sp_val_o_i_cld <= "00"; + end if; + when others => + null; + end case; + end if; + end process clocked_proc; + + ----------------------------------------------------------------- + nextstate_proc : process ( + adr_nxt_pc_i, + current_state, + d_i, + irq_n_i, + rdy_i, + reg_F, + zw_REG_NMI, + zw_REG_OP, + zw_b2, + zw_b3 + ) + ----------------------------------------------------------------- + begin + case current_state is + when FETCH => + if ((zw_REG_NMI = '1') and (rdy_i = '1')) then + next_state <= s532; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + next_state <= s548; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + next_state <= s510; + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + next_state <= s266; + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + next_state <= s351; + elsif ((d_i = X"00") and (rdy_i = '1')) then + next_state <= s526; + elsif ((d_i = X"18") and (rdy_i = '1')) then + next_state <= s12; + elsif ((d_i = X"D8") and (rdy_i = '1')) then + next_state <= s16; + elsif ((d_i = X"58") and (rdy_i = '1')) then + next_state <= s17; + elsif ((d_i = X"B8") and (rdy_i = '1')) then + next_state <= s24; + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + next_state <= s226; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"88") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + next_state <= s226; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + next_state <= s25; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + next_state <= s271; + elsif ((d_i = X"20") and (rdy_i = '1')) then + next_state <= s397; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + next_state <= s201; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + next_state <= s1; + elsif ((d_i = X"48") and (rdy_i = '1')) then + next_state <= s377; + elsif ((d_i = X"08") and (rdy_i = '1')) then + next_state <= s378; + elsif ((d_i = X"68") and (rdy_i = '1')) then + next_state <= s379; + elsif ((d_i = X"28") and (rdy_i = '1')) then + next_state <= s380; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + next_state <= s403; + elsif ((d_i = X"40") and (rdy_i = '1')) then + next_state <= s387; + elsif ((d_i = X"60") and (rdy_i = '1')) then + next_state <= s390; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + next_state <= s511; + elsif ((d_i = X"38") and (rdy_i = '1')) then + next_state <= s2; + elsif ((d_i = X"F8") and (rdy_i = '1')) then + next_state <= s5; + elsif ((d_i = X"78") and (rdy_i = '1')) then + next_state <= s3; + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91" or + d_i = X"11") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + next_state <= s177; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + next_state <= s404; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + next_state <= s556; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + next_state <= s557; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + next_state <= s579; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"98") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + next_state <= s4; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + next_state <= s4; + elsif (rdy_i = '1') then + next_state <= s1; + else + next_state <= FETCH; + end if; + when s1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s1; + end if; + when s2 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s2; + end if; + when s5 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s5; + end if; + when s3 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s3; + end if; + when s4 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s4; + end if; + when s12 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s12; + end if; + when s16 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s16; + end if; + when s17 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s17; + end if; + when s24 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s24; + end if; + when s25 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s25; + end if; + when s271 => + if (rdy_i = '1' and + zw_REG_OP = X"4C") then + next_state <= s307; + elsif (rdy_i = '1' and + zw_REG_OP = X"6C") then + next_state <= s273; + else + next_state <= s271; + end if; + when s273 => + if (rdy_i = '1') then + next_state <= s304; + else + next_state <= s273; + end if; + when s304 => + if (rdy_i = '1') then + next_state <= s307; + else + next_state <= s304; + end if; + when s307 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s307; + end if; + when s177 => + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + next_state <= s184; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + next_state <= s185; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + next_state <= s183; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + next_state <= s182; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + next_state <= s180; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + next_state <= s181; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + next_state <= s186; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + next_state <= s185; + else + next_state <= s177; + end if; + when s180 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s180; + end if; + when s181 => + if (rdy_i = '1') then + next_state <= s189; + else + next_state <= s181; + end if; + when s182 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s182; + end if; + when s183 => + if (rdy_i = '1') then + next_state <= s187; + else + next_state <= s183; + end if; + when s184 => + next_state <= FETCH; + when s185 => + if (rdy_i = '1') then + next_state <= s190; + else + next_state <= s185; + end if; + when s186 => + if (rdy_i = '1') then + next_state <= s188; + else + next_state <= s186; + end if; + when s187 => + next_state <= FETCH; + when s188 => + if (rdy_i = '1') then + next_state <= s192; + else + next_state <= s188; + end if; + when s189 => + if (rdy_i = '1') then + next_state <= s191; + else + next_state <= s189; + end if; + when s190 => + next_state <= FETCH; + when s191 => + next_state <= s193; + when s192 => + next_state <= s193; + when s193 => + next_state <= FETCH; + when s377 => + if (rdy_i = '1') then + next_state <= s381; + else + next_state <= s377; + end if; + when s381 => + next_state <= FETCH; + when s378 => + if (rdy_i = '1') then + next_state <= s382; + else + next_state <= s378; + end if; + when s382 => + next_state <= FETCH; + when s379 => + if (rdy_i = '1') then + next_state <= s383; + else + next_state <= s379; + end if; + when s383 => + if (rdy_i = '1') then + next_state <= s384; + else + next_state <= s383; + end if; + when s384 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s384; + end if; + when s380 => + if (rdy_i = '1') then + next_state <= s385; + else + next_state <= s380; + end if; + when s385 => + if (rdy_i = '1') then + next_state <= s386; + else + next_state <= s385; + end if; + when s386 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s386; + end if; + when s387 => + if (rdy_i = '1') then + next_state <= s388; + else + next_state <= s387; + end if; + when s388 => + if (rdy_i = '1') then + next_state <= s389; + else + next_state <= s388; + end if; + when s389 => + if (rdy_i = '1') then + next_state <= s391; + else + next_state <= s389; + end if; + when s391 => + if (rdy_i = '1') then + next_state <= s392; + else + next_state <= s391; + end if; + when s392 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s392; + end if; + when s390 => + if (rdy_i = '1') then + next_state <= s393; + else + next_state <= s390; + end if; + when s393 => + if (rdy_i = '1') then + next_state <= s394; + else + next_state <= s393; + end if; + when s394 => + if (rdy_i = '1') then + next_state <= s395; + else + next_state <= s394; + end if; + when s395 => + if (rdy_i = '1') then + next_state <= s396; + else + next_state <= s395; + end if; + when s396 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s396; + end if; + when s397 => + if (rdy_i = '1') then + next_state <= s398; + else + next_state <= s397; + end if; + when s398 => + if (rdy_i = '1') then + next_state <= s399; + else + next_state <= s398; + end if; + when s399 => + next_state <= s400; + when s400 => + next_state <= s401; + when s401 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s401; + end if; + when s526 => + if (rdy_i = '1') then + next_state <= s527; + else + next_state <= s526; + end if; + when s527 => + next_state <= s528; + when s528 => + next_state <= s529; + when s529 => + next_state <= s531; + when s530 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s530; + end if; + when s531 => + if (rdy_i = '1') then + next_state <= s530; + else + next_state <= s531; + end if; + when s544 => + next_state <= s550; + when s545 => + next_state <= s546; + when s546 => + next_state <= s547; + when s547 => + if (rdy_i = '1') then + next_state <= s549; + else + next_state <= s547; + end if; + when s549 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s549; + end if; + when s550 => + next_state <= s545; + when s404 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s404; + end if; + when s556 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s556; + end if; + when s557 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s557; + end if; + when s579 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s579; + end if; + when s201 => + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + next_state <= s224; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + next_state <= FETCH; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + next_state <= s217; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + next_state <= s202; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + next_state <= s210; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + next_state <= s211; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + next_state <= s215; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + next_state <= s218; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + next_state <= s217; + else + next_state <= s201; + end if; + when s202 => + if (rdy_i = '1') then + next_state <= s224; + else + next_state <= s202; + end if; + when s210 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s210; + end if; + when s211 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s211; + end if; + when s215 => + if (rdy_i = '1') then + next_state <= s223; + else + next_state <= s215; + end if; + when s217 => + if (rdy_i = '1') then + next_state <= s224; + else + next_state <= s217; + end if; + when s218 => + if (rdy_i = '1') then + next_state <= s222; + else + next_state <= s218; + end if; + when s222 => + if (rdy_i = '1') then + next_state <= s202; + else + next_state <= s222; + end if; + when s223 => + if (rdy_i = '1') then + next_state <= s225; + else + next_state <= s223; + end if; + when s224 => + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s224; + end if; + when s225 => + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + next_state <= FETCH; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s224; + else + next_state <= s225; + end if; + when s226 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + next_state <= s343; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + next_state <= s247; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + next_state <= s243; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + next_state <= s244; + else + next_state <= s226; + end if; + when s243 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s243; + end if; + when s244 => + if (rdy_i = '1') then + next_state <= s344; + else + next_state <= s244; + end if; + when s247 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s247; + end if; + when s344 => + if (rdy_i = '1') then + next_state <= s343; + else + next_state <= s344; + end if; + when s343 => + if (rdy_i = '1') then + next_state <= s250; + else + next_state <= s343; + end if; + when s250 => + if (rdy_i = '1') then + next_state <= s251; + else + next_state <= s250; + end if; + when s251 => + next_state <= FETCH; + when s351 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + next_state <= s361; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + next_state <= s360; + else + next_state <= s351; + end if; + when s361 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s361; + end if; + when s360 => + if (rdy_i = '1') then + next_state <= s361; + else + next_state <= s360; + end if; + when s403 => + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + next_state <= s407; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + next_state <= s413; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + next_state <= s409; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + next_state <= s406; + else + next_state <= s403; + end if; + when s406 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s406; + end if; + when s407 => + if (rdy_i = '1') then + next_state <= s412; + else + next_state <= s407; + end if; + when s409 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s409; + end if; + when s412 => + if (rdy_i = '1') then + next_state <= s413; + else + next_state <= s412; + end if; + when s413 => + if (rdy_i = '1') then + next_state <= s416; + else + next_state <= s413; + end if; + when s416 => + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + next_state <= s418; + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + next_state <= s418; + else + next_state <= s416; + end if; + when s418 => + next_state <= FETCH; + when s510 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + next_state <= s565; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + next_state <= s560; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + next_state <= s553; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + next_state <= s555; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + next_state <= s555; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + next_state <= s558; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + next_state <= s561; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s510; + end if; + when s553 => + if (rdy_i = '1') then + next_state <= s565; + else + next_state <= s553; + end if; + when s555 => + if (rdy_i = '1') then + next_state <= s564; + else + next_state <= s555; + end if; + when s558 => + if (rdy_i = '1') then + next_state <= s566; + else + next_state <= s558; + end if; + when s560 => + if (rdy_i = '1') then + next_state <= s565; + else + next_state <= s560; + end if; + when s561 => + if (rdy_i = '1') then + next_state <= s563; + else + next_state <= s561; + end if; + when s563 => + if (rdy_i = '1') then + next_state <= s553; + else + next_state <= s563; + end if; + when s564 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s565; + else + next_state <= s564; + end if; + when s565 => + if (rdy_i = '1' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s565; + end if; + when s566 => + if (rdy_i = '1') then + next_state <= s564; + else + next_state <= s566; + end if; + when s266 => + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s301; + else + next_state <= s266; + end if; + when s301 => + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s302; + else + next_state <= s301; + end if; + when s302 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s302; + end if; + when RES => + next_state <= s544; + when s511 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + next_state <= s574; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + next_state <= s569; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + next_state <= s559; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + next_state <= s562; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + next_state <= s567; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + next_state <= s568; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + next_state <= s570; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s511; + end if; + when s559 => + if (rdy_i = '1') then + next_state <= s574; + else + next_state <= s559; + end if; + when s562 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s562; + end if; + when s567 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s567; + end if; + when s568 => + if (rdy_i = '1') then + next_state <= s571; + else + next_state <= s568; + end if; + when s569 => + if (rdy_i = '1') then + next_state <= s574; + else + next_state <= s569; + end if; + when s570 => + if (rdy_i = '1') then + next_state <= s572; + else + next_state <= s570; + end if; + when s571 => + if (rdy_i = '1') then + next_state <= s573; + else + next_state <= s571; + end if; + when s572 => + if (rdy_i = '1') then + next_state <= s559; + else + next_state <= s572; + end if; + when s573 => + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= s574; + else + next_state <= s573; + end if; + when s574 => + if (rdy_i = '1' and + reg_F(3) = '0') then + next_state <= FETCH; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= s574; + end if; + when s548 => + if (rdy_i = '1') then + next_state <= s551; + else + next_state <= s548; + end if; + when s551 => + next_state <= s552; + when s552 => + next_state <= s576; + when s575 => + if (rdy_i = '1') then + next_state <= s577; + else + next_state <= s575; + end if; + when s576 => + next_state <= s575; + when s577 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s577; + end if; + when s532 => + if (rdy_i = '1') then + next_state <= s533; + else + next_state <= s532; + end if; + when s533 => + next_state <= s534; + when s534 => + next_state <= s536; + when s535 => + if (rdy_i = '1') then + next_state <= s537; + else + next_state <= s535; + end if; + when s536 => + next_state <= s535; + when s537 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= s537; + end if; + when others => + next_state <= RES; + end case; + end process nextstate_proc; + + ----------------------------------------------------------------- + output_proc : process ( + adr_nxt_pc_i, + adr_pc_i, + adr_sp_i, + current_state, + d_alu_i, + d_i, + d_regs_out_i, + irq_n_i, + q_a_i, + q_x_i, + q_y_i, + rdy_i, + reg_F, + sig_PC, + zw_ALU, + zw_ALU1, + zw_ALU2, + zw_ALU3, + zw_ALU4, + zw_ALU5, + zw_ALU6, + zw_REG_NMI, + zw_REG_OP, + zw_b1, + zw_b2, + zw_b3, + zw_b4, + zw_w1 + ) + ----------------------------------------------------------------- + begin + -- Default Assignment + a_o <= sig_PC; + adr_o <= X"0000"; + ch_a_o <= X"00"; + ch_b_o <= X"00"; + d_regs_in_o <= X"00"; + ld_o <= "00"; + ld_pc_o <= '0'; + ld_sp_o <= '0'; + load_regs_o <= '0'; + offset_o <= X"0000"; + reg_0flag_o <= reg_F(0); + reg_1flag_o <= reg_F(1); + reg_3flag_o <= reg_F(3); + reg_7flag_o <= reg_F(7); + -- Default Assignment To Internals + sig_D_OUT <= X"00"; + sig_RD <= '0'; + sig_RWn <= '1'; + sig_SYNC <= '0'; + sig_WR <= '0'; + zw_ALU <= '0' & X"00"; + zw_ALU1 <= '0' & X"00"; + zw_ALU2 <= '0' & X"00"; + zw_ALU3 <= '0' & X"00"; + zw_ALU4 <= '0' & X"00"; + zw_ALU5 <= '0' & X"00"; + zw_ALU6 <= '0' & X"00"; + + -- Combined Actions + case current_state is + when FETCH => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= NOT (rdy_i); + if ((zw_REG_NMI = '1') and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"69" or + d_i = X"65" or + d_i = X"75" or + d_i = X"6D" or + d_i = X"7D" or + d_i = X"79" or + d_i = X"61" or + d_i = X"71") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"06" or + d_i = X"16" or + d_i = X"0E" or + d_i = X"1E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"90" or + d_i = X"B0" or + d_i = X"F0" or + d_i = X"30" or + d_i = X"D0" or + d_i = X"10" or + d_i = X"50" or + d_i = X"70") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"00") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"18") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"D8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"58") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"B8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C6" or + d_i = X"D6" or + d_i = X"CE" or + d_i = X"DE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"88") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"49" or + d_i = X"45" or + d_i = X"55" or + d_i = X"4D" or + d_i = X"5D" or + d_i = X"59" or + d_i = X"41" or + d_i = X"51" or + d_i = X"09" or + d_i = X"05" or + d_i = X"15" or + d_i = X"0D" or + d_i = X"1D" or + d_i = X"19" or + d_i = X"01" or + d_i = X"11" or + d_i = X"29" or + d_i = X"25" or + d_i = X"35" or + d_i = X"2D" or + d_i = X"3D" or + d_i = X"39" or + d_i = X"21" or + d_i = X"31" or + d_i = X"C9" or + d_i = X"C5" or + d_i = X"D5" or + d_i = X"CD" or + d_i = X"DD" or + d_i = X"D9" or + d_i = X"C1" or + d_i = X"D1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E6" or + d_i = X"F6" or + d_i = X"EE" or + d_i = X"FE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"20") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A9" or + d_i = X"A5" or + d_i = X"B5" or + d_i = X"AD" or + d_i = X"BD" or + d_i = X"B9" or + d_i = X"A1" or + d_i = X"B1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A2" or + d_i = X"A6" or + d_i = X"B6" or + d_i = X"AE" or + d_i = X"BE") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A0" or + d_i = X"A4" or + d_i = X"B4" or + d_i = X"AC" or + d_i = X"BC") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"46" or + d_i = X"56" or + d_i = X"4E" or + d_i = X"5E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"48") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"08") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"68") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"28") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"26" or + d_i = X"36" or + d_i = X"2E" or + d_i = X"3E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"66" or + d_i = X"76" or + d_i = X"6E" or + d_i = X"7E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"40") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"60") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"E9" or + d_i = X"E5" or + d_i = X"F5" or + d_i = X"ED" or + d_i = X"FD" or + d_i = X"F9" or + d_i = X"E1" or + d_i = X"F1") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"38") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"F8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"78") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"85" or + d_i = X"95" or + d_i = X"8D" or + d_i = X"9D" or + d_i = X"99" or + d_i = X"81" or + d_i = X"91" or + d_i = X"11") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"98") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s1 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s2 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s5 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s3 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s4 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + adr_o <= X"01" & d_regs_out_i; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"BA") then + d_regs_in_o <= adr_sp_i (7 downto 0); + ch_a_o <= adr_sp_i (7 downto 0); + ch_b_o <= X"00"; + load_regs_o <= '1'; + sig_SYNC <= '1'; + elsif (rdy_i = '1') then + ch_a_o <= d_regs_out_i; + ch_b_o <= X"00"; + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s12 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s16 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s17 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s24 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s25 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + d_regs_in_o <= d_alu_i; + ch_a_o <= d_regs_out_i; + ch_b_o <= zw_b4; + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s271 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s273 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s304 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s307 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + end if; + when s177 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + (zw_REG_OP = X"85" OR + zw_REG_OP = X"86" OR + zw_REG_OP = X"84")) then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"8D" OR + zw_REG_OP = X"8E" OR + zw_REG_OP = X"8C")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s180 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s181 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s182 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s183 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s184 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s185 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s186 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s187 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s188 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s189 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s190 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s191 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + when s192 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + when s193 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s377 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= q_a_i; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s381 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s378 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s382 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_SYNC <= '1'; + when s379 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s383 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s384 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + end if; + when s380 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s385 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s386 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s387 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s388 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s389 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s391 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s392 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + end if; + when s390 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s393 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when s394 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s395 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s396 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s397 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when s398 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when s399 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s400 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s401 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + end if; + when s526 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when s527 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + when s528 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s529 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when s530 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s531 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s544 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + when s545 => + sig_RWn <= '1'; + sig_RD <= '1'; + adr_o <= X"FFFB"; + ld_o <= "11"; + ld_pc_o <= '1'; + when s546 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_pc_o <= '1'; + when s547 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s549 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + adr_o <= d_i & zw_w1 (7 downto 0); + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + end if; + when s550 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + when s404 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= q_a_i (6 downto 0) & '0'; + ch_b_o <= X"00"; + d_regs_in_o <= q_a_i (6 downto 0) & '0'; + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s556 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= '0' & q_a_i (7 downto 1); + ch_b_o <= X"00"; + d_regs_in_o <= '0' & q_a_i (7 downto 1); + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s557 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= q_a_i (6 downto 0) & reg_F(0); + ch_b_o <= X"00"; + d_regs_in_o <= q_a_i (6 downto 0) & reg_F(0); + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s579 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= reg_F(0) & q_a_i (7 downto 1); + ch_b_o <= X"00"; + d_regs_in_o <= reg_F(0) & q_a_i (7 downto 1); + load_regs_o <= '1'; + sig_SYNC <= '1'; + end if; + when s201 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + (zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR + zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR + zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR + zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + ld_o <= "11"; + ld_pc_o <= '1'; + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR + zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B5" OR + zw_REG_OP = X"B4" OR + zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR + zw_REG_OP = X"35" OR + zw_REG_OP = X"D5")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"AD" OR + zw_REG_OP = X"AE" OR + zw_REG_OP = X"AC" OR + zw_REG_OP = X"4D" OR + zw_REG_OP = X"0D" OR + zw_REG_OP = X"2D" OR + zw_REG_OP = X"CD" OR + zw_REG_OP = X"EC" OR + zw_REG_OP = X"CC")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"BD" OR + zw_REG_OP = X"BC" OR + zw_REG_OP = X"5D" OR + zw_REG_OP = X"1D" OR + zw_REG_OP = X"3D" OR + zw_REG_OP = X"DD")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B9" OR + zw_REG_OP = X"BE" OR + zw_REG_OP = X"59" OR + zw_REG_OP = X"19" OR + zw_REG_OP = X"39" OR + zw_REG_OP = X"D9")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"B1" OR + zw_REG_OP = X"51" OR + zw_REG_OP = X"11" OR + zw_REG_OP = X"31" OR + zw_REG_OP = X"D1")) then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + (zw_REG_OP = X"A1" OR + zw_REG_OP = X"41" OR + zw_REG_OP = X"01" OR + zw_REG_OP = X"21" OR + zw_REG_OP = X"C1")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s202 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s210 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s211 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s215 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s217 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s218 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s222 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s223 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s224 => + sig_RWn <= '1'; + sig_RD <= '1'; + if ((rdy_i = '1') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + elsif (rdy_i = '1') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + end if; + when s225 => + sig_RWn <= '1'; + sig_RD <= '1'; + if ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"09" or zw_REG_OP = X"05" or + zw_REG_OP = X"15" or zw_REG_OP = X"0D" or + zw_REG_OP = X"1D" or zw_REG_OP = X"19" or + zw_REG_OP = X"01" or zw_REG_OP = X"11")) then + d_regs_in_o <= d_i OR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i OR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"49" or zw_REG_OP = X"45" or + zw_REG_OP = X"55" or zw_REG_OP = X"4D" or + zw_REG_OP = X"5D" or zw_REG_OP = X"59" or + zw_REG_OP = X"41" or zw_REG_OP = X"51")) then + d_regs_in_o <= d_i XOR q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i XOR q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"29" or zw_REG_OP = X"25" or + zw_REG_OP = X"35" or zw_REG_OP = X"2D" or + zw_REG_OP = X"3D" or zw_REG_OP = X"39" or + zw_REG_OP = X"21" or zw_REG_OP = X"31")) then + d_regs_in_o <= d_i AND q_a_i; + load_regs_o <= '1'; + ch_a_o <= d_i AND q_a_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + elsif ((rdy_i = '1' AND + zw_b2(0) = '0') and (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or + zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or + zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or + zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or + zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or + zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or + zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then + zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1; + sig_SYNC <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0') then + d_regs_in_o <= d_i; + load_regs_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + end if; + when s226 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + end if; + when s243 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s244 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s247 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s344 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s343 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= zw_b4; + end if; + when s250 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= zw_b1; + end if; + when s251 => + sig_RWn <= '1'; + sig_RD <= '1'; + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + when s351 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + zw_REG_OP = X"24") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s361 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= q_a_i AND d_i; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + end if; + when s360 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s403 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + (zw_REG_OP = X"1E" or + zw_REG_OP = X"7E" or + zw_REG_OP = X"3E" or + zw_REG_OP = X"5E")) then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"66" or + zw_REG_OP = X"26" or + zw_REG_OP = X"46")) then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"16" or + zw_REG_OP = X"76" or + zw_REG_OP = X"36" or + zw_REG_OP = X"56")) then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + (zw_REG_OP = X"0E" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"4E")) then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s406 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s407 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= "0000000" & zw_b2(0); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s409 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s412 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s413 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s416 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + (zw_REG_OP = X"06" or + zw_REG_OP = X"16" or + zw_REG_OP = X"0E" or + zw_REG_OP = X"1E")) then + sig_D_OUT <= d_i(6 downto 0) & '0'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"46" or + zw_REG_OP = X"56" or + zw_REG_OP = X"4E" or + zw_REG_OP = X"5E")) then + sig_D_OUT <= '0' & d_i(7 downto 1); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"26" or + zw_REG_OP = X"36" or + zw_REG_OP = X"2E" or + zw_REG_OP = X"3E")) then + sig_D_OUT <= d_i(6 downto 0) & reg_F(0); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + elsif (rdy_i = '1' and + (zw_REG_OP = X"66" or + zw_REG_OP = X"76" or + zw_REG_OP = X"6E" or + zw_REG_OP = X"7E")) then + sig_D_OUT <= reg_F(0) & d_i(7 downto 1); + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + end if; + when s418 => + sig_RWn <= '1'; + sig_RD <= '1'; + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + when s510 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + zw_REG_OP = X"65") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '0') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"75") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s553 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s555 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s558 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s560 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s561 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s563 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s564 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s565 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + unsigned (zw_ALU6(7 downto 5)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(7 downto 5)); + + zw_ALU6(7 downto 5) <= (zw_ALU2(4) OR zw_ALU4(4)) & (zw_ALU2(4) OR zw_ALU4(4)) & '0'; + zw_ALU5(7 downto 5) <= (zw_ALU1(4) OR zw_ALU3(4)) & (zw_ALU1(4) OR zw_ALU3(4)) & '0'; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & d_i(3 downto 0)) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s566 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s266 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and ( + (reg_F(0) = '1' and zw_REG_OP = X"90") or + (reg_F(0) = '0' and zw_REG_OP = X"B0") or + (reg_F(1) = '0' and zw_REG_OP = X"F0") or + (reg_F(7) = '0' and zw_REG_OP = X"30") or + (reg_F(1) = '1' and zw_REG_OP = X"D0") or + (reg_F(7) = '1' and zw_REG_OP = X"10") or + (reg_F(6) = '1' and zw_REG_OP = X"50") or + (reg_F(6) = '0' and zw_REG_OP = X"70"))) then + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + elsif (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s301 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + zw_b3 = adr_nxt_pc_i (15 downto 8)) then + offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & + zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0)); + ld_o <= "11"; + ld_pc_o <= '1'; + sig_SYNC <= '1'; + elsif (rdy_i = '1') then + offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & + zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0)); + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s302 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when RES => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_pc_o <= '1'; + ld_sp_o <= '1'; + sig_RWn <= '1'; + sig_RD <= '1'; + when s511 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '0') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"F5") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + ld_o <= "11"; + ld_pc_o <= '1'; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + ld_o <= "11"; + ld_pc_o <= '1'; + ch_a_o <= d_i; + ch_b_o <= q_y_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + ch_a_o <= d_i; + ch_b_o <= X"01"; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + ch_a_o <= d_i; + ch_b_o <= q_x_i; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s559 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s562 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s567 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s568 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when s569 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s570 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s571 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= X"01"; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when s572 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when s573 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' AND + zw_b2(0) = '0' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s574 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1' and + reg_F(3) = '0') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0); + sig_SYNC <= '1'; + elsif (rdy_i = '1' and + reg_F(3) = '1') then + d_regs_in_o <= zw_ALU(7 downto 0); + load_regs_o <= '1'; + zw_ALU(7 downto 4) <= unsigned (zw_ALU2(3 downto 0)) + + unsigned ((zw_ALU6(8 downto 5))); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + + unsigned ((zw_ALU5(8 downto 5))); + + zw_ALU6(8 downto 5) <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & + (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5(8 downto 5) <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & + (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4(4 downto 0) <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned + ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3(4 downto 0) <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned + ('0' & NOT (d_i(3 downto 0))) + reg_F(0); + sig_SYNC <= '1'; + end if; + when s548 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when s551 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + when s552 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s575 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s576 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when s577 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when s532 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when s533 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + when s534 => + sig_RWn <= '1'; + sig_RD <= '1'; + ld_o <= "11"; + ld_sp_o <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when s535 => + sig_RWn <= '1'; + sig_RD <= '1'; + when s536 => + sig_RWn <= '1'; + sig_RD <= '1'; + sig_RWn <= '0'; + sig_RD <= '0'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when s537 => + sig_RWn <= '1'; + sig_RD <= '1'; + if (rdy_i = '1') then + sig_SYNC <= '1'; + end if; + when others => + null; + end case; + end process output_proc; + + -- Concurrent Statements + -- Clocked output assignments + d_o <= d_o_cld; + rd_o <= rd_o_cld; + sync_o <= sync_o_cld; + wr_n_o <= wr_n_o_cld; + wr_o <= wr_o_cld; + sel_alu_as_o_i <= sel_alu_as_o_i_cld; + sel_alu_out_o_i <= sel_alu_out_o_i_cld; + sel_pc_as_o_i <= sel_pc_as_o_i_cld; + sel_pc_in_o_i <= sel_pc_in_o_i_cld; + sel_pc_val_o_i <= sel_pc_val_o_i_cld; + sel_rb_in_o_i <= sel_rb_in_o_i_cld; + sel_rb_out_o_i <= sel_rb_out_o_i_cld; + sel_reg_o_i <= sel_reg_o_i_cld; + sel_sp_as_o_i <= sel_sp_as_o_i_cld; + sel_sp_in_o_i <= sel_sp_in_o_i_cld; + sel_sp_val_o_i <= sel_sp_val_o_i_cld; +end fsm;
vhdl/fsm_core_v2_0.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property

powered by: WebSVN 2.1.0

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