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/trunk/rtl/vhdl
    from Rev 15 to Rev 18
    Reverse comparison

Rev 15 → Rev 18

/reg_pc.vhd
0,0 → 1,221
-- VHDL Entity R6502_TC.Reg_PC.symbol
--
-- Created:
-- by - eda.UNKNOWN (TEST)
-- at - 19:25:31 10.02.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_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-2009 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 10 Feb 2009
--
-- VHDL Architecture R6502_TC.Reg_PC.struct
--
-- Created:
-- by - eda.UNKNOWN (TEST)
-- at - 19:25:32 10.02.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 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_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_3' of 'split'
SIGNAL mw_U_3temp_din : std_logic_vector(15 DOWNTO 0);
 
-- ModuleWare signal declarations(v1.9) for instance 'U_5' of 'split'
SIGNAL mw_U_5temp_din : std_logic_vector(15 DOWNTO 0);
 
 
BEGIN
 
-- ModuleWare code(v1.9) for instance 'U_2' of 'add'
u_2combo_proc: PROCESS (adr_pc_low_o_i, val_o_i)
VARIABLE temp_din0 : std_logic_vector(8 DOWNTO 0);
VARIABLE temp_din1 : std_logic_vector(8 DOWNTO 0);
VARIABLE temp_sum : unsigned(8 DOWNTO 0);
VARIABLE temp_carry : std_logic;
BEGIN
temp_din0 := '0' & adr_pc_low_o_i;
temp_din1 := '0' & val_o_i;
temp_carry := '0';
temp_sum := unsigned(temp_din0) + unsigned(temp_din1) + temp_carry;
adr_nxt_pc_o_internal(7 DOWNTO 0) <= conv_std_logic_vector(temp_sum(7 DOWNTO 0),8);
cout_pc_o_i <= temp_sum(8) ;
END PROCESS u_2combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_11' of 'add'
u_11combo_proc: PROCESS (adr_pc_high_o_i, offset_high_o_i, ci_o_i)
VARIABLE temp_din0 : std_logic_vector(8 DOWNTO 0);
VARIABLE temp_din1 : std_logic_vector(8 DOWNTO 0);
VARIABLE temp_sum : unsigned(8 DOWNTO 0);
VARIABLE temp_carry : std_logic;
BEGIN
temp_din0 := '0' & adr_pc_high_o_i;
temp_din1 := '0' & offset_high_o_i;
temp_carry := ci_o_i;
temp_sum := unsigned(temp_din0) + unsigned(temp_din1) + temp_carry;
adr_nxt_pc_o_internal(15 DOWNTO 8) <= conv_std_logic_vector(temp_sum(7 DOWNTO 0),8);
END PROCESS u_11combo_proc;
 
-- 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' OR rst_rst_n_i = 'L') THEN
mw_U_0reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load_o_i = '1' OR load_o_i = 'H') 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' OR rst_rst_n_i = 'L') THEN
mw_U_4reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load3_o_i = '1' OR load3_o_i = 'H') 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_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'|'L' => adr_pc_o_i <= adr_pc_o_internal;
WHEN '1'|'H' => 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"|"L0"|"0L"|"LL" => val_o_i <= val_one;
WHEN "01"|"L1"|"0H"|"LH" => val_o_i <= val_zero;
WHEN "10"|"H0"|"1L"|"HL" => val_o_i <= offset_low_o_i;
WHEN "11"|"H1"|"1H"|"HH" => 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'
mw_U_3temp_din <= adr_pc_o_i;
u_3combo_proc: PROCESS (mw_U_3temp_din)
VARIABLE temp_din: std_logic_vector(15 DOWNTO 0);
BEGIN
temp_din := mw_U_3temp_din(15 DOWNTO 0);
adr_pc_low_o_i <= temp_din(7 DOWNTO 0);
adr_pc_high_o_i <= temp_din(15 DOWNTO 8);
END PROCESS u_3combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_5' of 'split'
mw_U_5temp_din <= offset_i;
u_5combo_proc: PROCESS (mw_U_5temp_din)
VARIABLE temp_din: std_logic_vector(15 DOWNTO 0);
BEGIN
temp_din := mw_U_5temp_din(15 DOWNTO 0);
offset_low_o_i <= temp_din(7 DOWNTO 0);
offset_high_o_i <= temp_din(15 DOWNTO 8);
END PROCESS u_5combo_proc;
 
-- 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;
reg_pc.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: reg_sp.vhd =================================================================== --- reg_sp.vhd (nonexistent) +++ reg_sp.vhd (revision 18) @@ -0,0 +1,145 @@ +-- VHDL Entity R6502_TC.Reg_SP.symbol +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:32 10.02.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-2009 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 10 Feb 2009 +-- +-- VHDL Architecture R6502_TC.Reg_SP.struct +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:32 10.02.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_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' + u_11combo_proc: PROCESS (adr_sp_low_o_i, val_one, sp_as_n_o_i) + VARIABLE temp_din0 : std_logic_vector(8 DOWNTO 0); + VARIABLE temp_din1 : std_logic_vector(8 DOWNTO 0); + VARIABLE temp_sum : unsigned(8 DOWNTO 0); + VARIABLE temp_carry : std_logic; + BEGIN + temp_din0 := '0' & adr_sp_low_o_i; + temp_din1 := '0' & val_one; + temp_carry := '0'; + IF (sp_as_n_o_i = '1' OR sp_as_n_o_i = 'H') THEN + temp_sum := unsigned(temp_din0) + unsigned(temp_din1) + temp_carry; + ELSE + temp_sum := unsigned(temp_din0) - unsigned(temp_din1) - temp_carry; + END IF; + result_low_o_i <= conv_std_logic_vector(temp_sum(7 DOWNTO 0),8); + END PROCESS u_11combo_proc; + + -- 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' OR rst_rst_n_i = 'L') THEN + mw_U_0reg_cval <= "00000000"; + ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN + IF (load_o_i = '1' OR load_o_i = 'H') 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'|'L' => result_low1_o_i <= result_low_o_i; + WHEN '1'|'H' => 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;
reg_sp.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: r6502_tc.vhd =================================================================== --- r6502_tc.vhd (nonexistent) +++ r6502_tc.vhd (revision 18) @@ -0,0 +1,116 @@ +-- VHDL Entity R6502_TC.R6502_TC.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:57 23.02.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_o : out std_logic + ); + +-- Declarations + +end R6502_TC ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008-2009 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 10 Feb 2009 +-- +-- VHDL Architecture R6502_TC.R6502_TC.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:58 23.02.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_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_o => wr_o + ); + +end struct;
r6502_tc.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: fsm_execution_unit.vhd =================================================================== --- fsm_execution_unit.vhd (nonexistent) +++ fsm_execution_unit.vhd (revision 18) @@ -0,0 +1,4760 @@ +-- VHDL Entity R6502_TC.FSM_Execution_Unit.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:40 23.02.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_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_o : out std_logic + ); + +-- Declarations + +end FSM_Execution_Unit ; + +-- Jens-D. Gutschmidt Project: R6502_TC + +-- scantara2003@yahoo.de + +-- COPYRIGHT (C) 2008-2009 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 23 Feb 2009 + +-- +-- VHDL Architecture R6502_TC.FSM_Execution_Unit.fsm +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:41 23.02.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_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_SYNC : std_logic; + signal sig_WR : std_logic; + signal zw_ALU : std_logic_vector( 8 DOWNTO 0 ); + signal zw_ALU1 : std_logic_vector( 4 DOWNTO 0 ); + signal zw_ALU2 : std_logic_vector( 4 DOWNTO 0 ); + signal zw_ALU3 : std_logic_vector( 4 DOWNTO 0 ); + signal zw_ALU4 : std_logic_vector( 4 DOWNTO 0 ); + signal zw_ALU5 : std_logic_vector( 3 DOWNTO 0 ); + signal zw_ALU6 : std_logic_vector( 3 DOWNTO 0 ); + signal zw_REG_NMI : std_logic; + signal zw_REG_OP : std_logic_vector( 7 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; + + subtype state_type is + std_logic_vector(7 downto 0); + + -- Hard encoding + constant FETCH : state_type := "00000000"; + constant G10_1 : state_type := "00000001"; + constant G10_2 : state_type := "00000010"; + constant G10_3 : state_type := "00000011"; + constant G10_4 : state_type := "00000100"; + constant G10_5 : state_type := "00000101"; + constant G10_6 : state_type := "00000110"; + constant G10_7 : state_type := "00000111"; + constant G10_e1 : state_type := "00001000"; + constant G10_e2 : state_type := "00001001"; + constant G10_e3 : state_type := "00001010"; + constant G11_1 : state_type := "00001011"; + constant G11_2 : state_type := "00001100"; + constant G11_3 : state_type := "00001101"; + constant G11_4 : state_type := "00001110"; + constant G11_5 : state_type := "00001111"; + constant G11_6 : state_type := "00010000"; + constant G11_7 : state_type := "00010001"; + constant G11_e : state_type := "00010010"; + constant G12_1 : state_type := "00010011"; + constant G12_e1 : state_type := "00010100"; + constant G12_e2 : state_type := "00010101"; + constant G13_1 : state_type := "00010110"; + constant G13_2 : state_type := "00010111"; + constant G13_e : state_type := "00011000"; + constant G14_1 : state_type := "00011001"; + constant G14_2 : state_type := "00011010"; + constant G14_3 : state_type := "00011011"; + constant G14_4 : state_type := "00011100"; + constant G14_5 : state_type := "00011101"; + constant G14_6 : state_type := "00011110"; + constant G14_7 : state_type := "00011111"; + constant G14_e : state_type := "00100000"; + constant G15_1 : state_type := "00100001"; + constant G15_2 : state_type := "00100010"; + constant G15_3 : state_type := "00100011"; + constant G15_4 : state_type := "00100100"; + constant G15_5 : state_type := "00100101"; + constant G15_6 : state_type := "00100110"; + constant G15_7 : state_type := "00100111"; + constant G15_e1 : state_type := "00101000"; + constant G15_e2 : state_type := "00101001"; + constant G15_e3 : state_type := "00101010"; + constant G16_1 : state_type := "00101011"; + constant G16_2 : state_type := "00101100"; + constant G16_3 : state_type := "00101101"; + constant G16_4 : state_type := "00101110"; + constant G16_5 : state_type := "00101111"; + constant G16_6 : state_type := "00110000"; + constant G16_7 : state_type := "00110001"; + constant G16_e1 : state_type := "00110010"; + constant G16_e2 : state_type := "00110011"; + constant G16_e3 : state_type := "00110100"; + constant G17_1 : state_type := "00110101"; + constant G17_10 : state_type := "00110110"; + constant G17_2 : state_type := "00110111"; + constant G17_3 : state_type := "00111000"; + constant G17_4 : state_type := "00111001"; + constant G17_5 : state_type := "00111010"; + constant G17_6 : state_type := "00111011"; + constant G17_7 : state_type := "00111100"; + constant G17_8 : state_type := "00111101"; + constant G17_9 : state_type := "00111110"; + constant G17_e : state_type := "00111111"; + constant G18_1 : state_type := "01000000"; + constant G18_2 : state_type := "01000001"; + constant G18_3 : state_type := "01000010"; + constant G18_4 : state_type := "01000011"; + constant G18_5 : state_type := "01000100"; + constant G18_e : state_type := "01000101"; + constant G19_1 : state_type := "01000110"; + constant G1_1 : state_type := "01000111"; + constant G20_1 : state_type := "01001000"; + constant G20_2 : state_type := "01001001"; + constant G20_3 : state_type := "01001010"; + constant G20_e : state_type := "01001011"; + constant G21_1 : state_type := "01001100"; + constant G21_2 : state_type := "01001101"; + constant G21_3 : state_type := "01001110"; + constant G21_4 : state_type := "01001111"; + constant G21_e : state_type := "01010000"; + constant G22_1 : state_type := "01010001"; + constant G22_e : state_type := "01010010"; + constant G23_1 : state_type := "01010011"; + constant G23_e : state_type := "01010100"; + constant G24_1 : state_type := "01010101"; + constant G24_2 : state_type := "01010110"; + constant G24_e : state_type := "01010111"; + constant G25_1 : state_type := "01011000"; + constant G25_2 : state_type := "01011001"; + constant G25_e : state_type := "01011010"; + constant G26_1 : state_type := "01011011"; + constant G26_2 : state_type := "01011100"; + constant G26_3 : state_type := "01011101"; + constant G26_4 : state_type := "01011110"; + constant G26_e : state_type := "01011111"; + constant G27_1 : state_type := "01100000"; + constant G27_2 : state_type := "01100001"; + constant G27_3 : state_type := "01100010"; + constant G27_4 : state_type := "01100011"; + constant G27_e : state_type := "01100100"; + constant G28_1 : state_type := "01100101"; + constant G28_2 : state_type := "01100110"; + constant G28_3 : state_type := "01100111"; + constant G28_4 : state_type := "01101000"; + constant G28_5 : state_type := "01101001"; + constant G28_e : state_type := "01101010"; + constant G29_1 : state_type := "01101011"; + constant G29_2 : state_type := "01101100"; + constant G29_3 : state_type := "01101101"; + constant G29_4 : state_type := "01101110"; + constant G29_5 : state_type := "01101111"; + constant G29_e : state_type := "01110000"; + constant G2_1 : state_type := "01110001"; + constant G30_1 : state_type := "01110010"; + constant G30_2 : state_type := "01110011"; + constant G30_3 : state_type := "01110100"; + constant G30_4 : state_type := "01110101"; + constant G30_5 : state_type := "01110110"; + constant G30_e : state_type := "01110111"; + constant G31_1 : state_type := "01111000"; + constant G32_1 : state_type := "01111001"; + constant G33_1 : state_type := "01111010"; + constant G34_1 : state_type := "01111011"; + constant G3_1 : state_type := "01111100"; + constant G4_1 : state_type := "01111101"; + constant G5_1 : state_type := "01111110"; + constant G6_1 : state_type := "01111111"; + constant G7_1 : state_type := "10000000"; + constant G8_1 : state_type := "10000001"; + constant G9_1 : state_type := "10000010"; + constant RES : state_type := "10000011"; + + -- 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_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_o_cld <= '0'; + reg_F <= "00000100"; + 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_REG_NMI <= '0'; + zw_REG_OP <= X"00"; + zw_b1 <= X"00"; + zw_b2 <= X"00"; + zw_b3 <= X"00"; + zw_b4 <= X"00"; + zw_so <= '0'; + 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_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_REG_NMI <= zw_REG_NMI or nmi_i; + zw_REG_OP <= zw_REG_OP; + 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))); + d_o_cld <= sig_D_OUT; + rd_o_cld <= NOT(sig_WR); + sync_o_cld <= sig_SYNC; + 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; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '0'; + 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 G10_1 => + 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_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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G10_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G10_3 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G10_4 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G10_5 => + 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 G10_6 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G10_7 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G10_e1 => + 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_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_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 G10_e2 => + 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_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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G10_e3 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when G11_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 + 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 G11_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G11_4 => + 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 G11_5 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G11_6 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G11_7 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when G11_e => + reg_F(0) <= zw_b2(0); + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when G12_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 + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '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_val <= "10"; + zw_b2 <= d_i; + end if; + when G12_e1 => + 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_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 G12_e2 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G13_1 => + 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 G13_2 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G13_e => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G14_1 => + 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 G14_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G14_3 => + if (rdy_i = '1') then + zw_b1 <= d_alu_i; + end if; + when G14_5 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G14_6 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G14_7 => + if (rdy_i = '1') then + sig_PC <= zw_b3 & zw_b1; + end if; + when G14_e => + reg_F(7) <= reg_7flag_i; + reg_F(1) <= reg_1flag_i; + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when G15_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 + 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_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_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_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_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_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 G15_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G15_3 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G15_4 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G15_5 => + 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 G15_6 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G15_7 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G15_e1 => + 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_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_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_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_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_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 G15_e2 => + 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_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_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_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_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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G15_e3 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when G16_1 => + 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_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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G16_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G16_3 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G16_4 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G16_5 => + 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 G16_6 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G16_7 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G16_e1 => + 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_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_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 G16_e2 => + 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_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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G16_e3 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when G17_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_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 G17_10 => + sig_PC <= d_i & zw_b1; + when G17_2 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G17_3 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G17_4 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G17_5 => + sig_PC <= zw_b3 & zw_b1; + when G17_6 => + 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 G17_7 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + zw_b3 <= d_alu_i; + end if; + when G17_8 => + if (rdy_i = '1') then + sig_PC <= X"00" & zw_b1; + end if; + when G17_9 => + if (rdy_i = '1') then + sig_PC <= X"00" & d_alu_i; + zw_b1 <= d_i; + end if; + when G17_e => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when G18_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G18_2 => + sig_PC <= adr_sp_i; + when G18_3 => + sig_PC <= adr_sp_i; + when G18_4 => + sig_PC <= X"FFFE"; + when G18_5 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when G18_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(2) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G19_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G1_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G20_1 => + 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_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_val <= "00"; + zw_b1 <= d_i; + end if; + when G20_2 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + zw_b2 <= d_i; + end if; + when G20_3 => + if (rdy_i = '1') then + sig_PC <= zw_b2 & adr_pc_i(7 downto 0); + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when G20_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G21_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when G21_3 => + sig_PC <= adr_sp_i; + when G21_4 => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + when G21_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1 (7 downto 0); + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G22_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G22_e => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when G23_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G23_e => + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + when G24_2 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G24_e => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G25_2 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G25_e => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F <= d_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G26_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G26_2 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G26_3 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + reg_F <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + end if; + when G26_4 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + end if; + when G26_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G27_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G27_2 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G27_3 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + zw_b1 <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "00"; + end if; + when G27_4 => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + end if; + when G27_e => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G28_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G28_2 => + sig_PC <= adr_sp_i; + when G28_3 => + sig_PC <= adr_sp_i; + when G28_4 => + sig_PC <= X"FFFE"; + when G28_5 => + if (rdy_i = '1') then + sig_PC <= X"FFFF"; + zw_b1 <= d_i; + end if; + when G28_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_F(2) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G29_1 => + if (rdy_i = '1') then + sig_PC <= adr_sp_i; + end if; + when G29_2 => + sig_PC <= adr_sp_i; + when G29_3 => + sig_PC <= adr_sp_i; + when G29_4 => + sig_PC <= X"FFFA"; + when G29_5 => + if (rdy_i = '1') then + sig_PC <= X"FFFB"; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + zw_b1 <= d_i; + end if; + when G29_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G2_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G30_1 => + sig_PC <= adr_sp_i; + when G30_2 => + sig_PC <= adr_sp_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "00"; + when G30_3 => + sig_PC <= adr_sp_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + when G30_4 => + sig_PC <= adr_pc_i; + when G30_5 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + zw_b1 <= d_i; + reg_sel_pc_in <= '1'; + reg_sel_pc_val <= "11"; + end if; + when G30_e => + if (rdy_i = '1') then + sig_PC <= d_i & zw_b1; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G31_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G32_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G33_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G34_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G3_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '1'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G4_1 => + 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_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G5_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(0) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G6_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(3) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G7_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(2) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G8_1 => + if (rdy_i = '1') then + sig_PC <= adr_pc_i; + reg_F(6) <= '0'; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + end if; + when G9_1 => + if (rdy_i = '1' and + zw_REG_OP = X"9A") then + sig_PC <= adr_pc_i; + reg_sel_pc_in <= '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_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_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"; + sig_PC <= adr_nxt_pc_i; + reg_sel_pc_in <= '0'; + reg_sel_pc_val <= "00"; + reg_sel_sp_in <= '0'; + reg_sel_sp_as <= '1'; + 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 <= G29_1; + elsif ((irq_n_i = '0' and + reg_F(2) = '0') and (rdy_i = '1')) then + next_state <= G28_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 + next_state <= G10_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 + next_state <= G11_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 + next_state <= G12_1; + elsif ((d_i = X"24" or + d_i = X"2C") and (rdy_i = '1')) then + next_state <= G13_1; + elsif ((d_i = X"00") and (rdy_i = '1')) then + next_state <= G18_1; + elsif ((d_i = X"18") and (rdy_i = '1')) then + next_state <= G5_1; + elsif ((d_i = X"D8") and (rdy_i = '1')) then + next_state <= G6_1; + elsif ((d_i = X"58") and (rdy_i = '1')) then + next_state <= G7_1; + elsif ((d_i = X"B8") and (rdy_i = '1')) then + next_state <= G8_1; + elsif ((d_i = X"E0" or + d_i = X"E4" or + d_i = X"EC") and (rdy_i = '1')) then + next_state <= G15_1; + elsif ((d_i = X"C0" or + d_i = X"C4" or + d_i = X"CC") and (rdy_i = '1')) then + next_state <= G15_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 + next_state <= G14_1; + elsif ((d_i = X"CA") and (rdy_i = '1')) then + next_state <= G19_1; + elsif ((d_i = X"88") and (rdy_i = '1')) then + next_state <= G19_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 + next_state <= G15_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 + next_state <= G14_1; + elsif ((d_i = X"E8") and (rdy_i = '1')) then + next_state <= G19_1; + elsif ((d_i = X"C8") and (rdy_i = '1')) then + next_state <= G19_1; + elsif ((d_i = X"4C" or + d_i = X"6C") and (rdy_i = '1')) then + next_state <= G20_1; + elsif ((d_i = X"20") and (rdy_i = '1')) then + next_state <= G21_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 + next_state <= G15_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 + next_state <= G15_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 + next_state <= G15_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 + next_state <= G11_1; + elsif ((d_i = X"EA") and (rdy_i = '1')) then + next_state <= G1_1; + elsif ((d_i = X"48") and (rdy_i = '1')) then + next_state <= G22_1; + elsif ((d_i = X"08") and (rdy_i = '1')) then + next_state <= G23_1; + elsif ((d_i = X"68") and (rdy_i = '1')) then + next_state <= G24_1; + elsif ((d_i = X"28") and (rdy_i = '1')) then + next_state <= G25_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 + next_state <= G11_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 + next_state <= G11_1; + elsif ((d_i = X"40") and (rdy_i = '1')) then + next_state <= G26_1; + elsif ((d_i = X"60") and (rdy_i = '1')) then + next_state <= G27_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 + next_state <= G16_1; + elsif ((d_i = X"38") and (rdy_i = '1')) then + next_state <= G2_1; + elsif ((d_i = X"F8") and (rdy_i = '1')) then + next_state <= G3_1; + elsif ((d_i = X"78") and (rdy_i = '1')) then + next_state <= G4_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 + next_state <= G17_1; + elsif ((d_i = X"86" or + d_i = X"96" or + d_i = X"8E") and (rdy_i = '1')) then + next_state <= G17_1; + elsif ((d_i = X"84" or + d_i = X"94" or + d_i = X"8C") and (rdy_i = '1')) then + next_state <= G17_1; + elsif ((d_i = X"AA") and (rdy_i = '1')) then + next_state <= G9_1; + elsif ((d_i = X"0A") and (rdy_i = '1')) then + next_state <= G31_1; + elsif ((d_i = X"4A") and (rdy_i = '1')) then + next_state <= G32_1; + elsif ((d_i = X"2A") and (rdy_i = '1')) then + next_state <= G33_1; + elsif ((d_i = X"6A") and (rdy_i = '1')) then + next_state <= G34_1; + elsif ((d_i = X"A8") and (rdy_i = '1')) then + next_state <= G9_1; + elsif ((d_i = X"98") and (rdy_i = '1')) then + next_state <= G9_1; + elsif ((d_i = X"BA") and (rdy_i = '1')) then + next_state <= G9_1; + elsif ((d_i = X"8A") and (rdy_i = '1')) then + next_state <= G9_1; + elsif ((d_i = X"9A") and (rdy_i = '1')) then + next_state <= G9_1; + elsif (rdy_i = '1') then + next_state <= G1_1; + else + next_state <= FETCH; + end if; + when G10_1 => + if (rdy_i = '1' and + zw_REG_OP = X"65") then + next_state <= G10_e2; + 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 <= G10_2; + elsif (rdy_i = '1' and + zw_REG_OP = X"6D") then + next_state <= G10_3; + elsif (rdy_i = '1' and + zw_REG_OP = X"7D") then + next_state <= G10_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"79") then + next_state <= G10_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"71") then + next_state <= G10_5; + elsif (rdy_i = '1' and + zw_REG_OP = X"61") then + next_state <= G10_7; + elsif (rdy_i = '1' and + zw_REG_OP = X"69" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= G10_1; + end if; + when G10_2 => + if (rdy_i = '1') then + next_state <= G10_e2; + else + next_state <= G10_2; + end if; + when G10_3 => + if (rdy_i = '1') then + next_state <= G10_e2; + else + next_state <= G10_3; + end if; + when G10_4 => + if (rdy_i = '1') then + next_state <= G10_e1; + else + next_state <= G10_4; + end if; + when G10_5 => + if (rdy_i = '1') then + next_state <= G10_6; + else + next_state <= G10_5; + end if; + when G10_6 => + if (rdy_i = '1') then + next_state <= G10_e1; + else + next_state <= G10_6; + end if; + when G10_7 => + if (rdy_i = '1') then + next_state <= G10_e3; + else + next_state <= G10_7; + end if; + when G10_e1 => + 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 <= G10_e2; + else + next_state <= G10_e1; + end if; + when G10_e2 => + 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 <= G10_e2; + end if; + when G10_e3 => + if (rdy_i = '1') then + next_state <= G10_3; + else + next_state <= G10_e3; + end if; + when G11_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 + next_state <= G11_6; + 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 <= G11_3; + 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 <= G11_2; + 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 <= G11_5; + else + next_state <= G11_1; + end if; + when G11_2 => + if (rdy_i = '1') then + next_state <= G11_3; + else + next_state <= G11_2; + end if; + when G11_3 => + if (rdy_i = '1') then + next_state <= G11_4; + else + next_state <= G11_3; + end if; + when G11_4 => + 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 <= G11_e; + 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 <= G11_e; + 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 <= G11_e; + 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 <= G11_e; + else + next_state <= G11_4; + end if; + when G11_5 => + if (rdy_i = '1') then + next_state <= G11_3; + else + next_state <= G11_5; + end if; + when G11_6 => + if (rdy_i = '1') then + next_state <= G11_7; + else + next_state <= G11_6; + end if; + when G11_7 => + if (rdy_i = '1') then + next_state <= G11_3; + else + next_state <= G11_7; + end if; + when G11_e => + next_state <= FETCH; + when G12_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 + next_state <= FETCH; + elsif (rdy_i = '1') then + next_state <= G12_e1; + else + next_state <= G12_1; + end if; + when G12_e1 => + 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 <= G12_e2; + else + next_state <= G12_e1; + end if; + when G12_e2 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G12_e2; + end if; + when G13_1 => + if (rdy_i = '1' and + zw_REG_OP = X"24") then + next_state <= G13_e; + elsif (rdy_i = '1' and + zw_REG_OP = X"2C") then + next_state <= G13_2; + else + next_state <= G13_1; + end if; + when G13_2 => + if (rdy_i = '1') then + next_state <= G13_e; + else + next_state <= G13_2; + end if; + when G13_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G13_e; + end if; + when G14_1 => + if (rdy_i = '1' and + (zw_REG_OP = X"C6" OR + zw_REG_OP = X"E6")) then + next_state <= G14_3; + elsif (rdy_i = '1' and + (zw_REG_OP = X"D6" OR + zw_REG_OP = X"F6")) then + next_state <= G14_2; + elsif (rdy_i = '1' and + (zw_REG_OP = X"CE" OR + zw_REG_OP = X"EE")) then + next_state <= G14_5; + elsif (rdy_i = '1' and + (zw_REG_OP = X"DE" OR + zw_REG_OP = X"FE")) then + next_state <= G14_6; + else + next_state <= G14_1; + end if; + when G14_2 => + if (rdy_i = '1') then + next_state <= G14_3; + else + next_state <= G14_2; + end if; + when G14_3 => + if (rdy_i = '1') then + next_state <= G14_4; + else + next_state <= G14_3; + end if; + when G14_4 => + if (rdy_i = '1') then + next_state <= G14_e; + else + next_state <= G14_4; + end if; + when G14_5 => + if (rdy_i = '1') then + next_state <= G14_3; + else + next_state <= G14_5; + end if; + when G14_6 => + if (rdy_i = '1') then + next_state <= G14_7; + else + next_state <= G14_6; + end if; + when G14_7 => + if (rdy_i = '1') then + next_state <= G14_3; + else + next_state <= G14_7; + end if; + when G14_e => + next_state <= FETCH; + when G15_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 + next_state <= G15_e2; + 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 <= G15_2; + 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 <= G15_3; + 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 <= G15_4; + 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 <= G15_4; + 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 <= G15_5; + 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 <= G15_7; + elsif (rdy_i = '1' and + zw_REG_OP = X"B6") then + next_state <= G15_2; + else + next_state <= G15_1; + end if; + when G15_2 => + if (rdy_i = '1') then + next_state <= G15_e2; + else + next_state <= G15_2; + end if; + when G15_3 => + if (rdy_i = '1') then + next_state <= G15_e2; + else + next_state <= G15_3; + end if; + when G15_4 => + if (rdy_i = '1') then + next_state <= G15_e1; + else + next_state <= G15_4; + end if; + when G15_5 => + if (rdy_i = '1') then + next_state <= G15_6; + else + next_state <= G15_5; + end if; + when G15_6 => + if (rdy_i = '1') then + next_state <= G15_e1; + else + next_state <= G15_6; + end if; + when G15_7 => + if (rdy_i = '1') then + next_state <= G15_e3; + else + next_state <= G15_7; + end if; + when G15_e1 => + 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 <= G15_e2; + else + next_state <= G15_e1; + end if; + when G15_e2 => + 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 <= G15_e2; + end if; + when G15_e3 => + if (rdy_i = '1') then + next_state <= G15_3; + else + next_state <= G15_e3; + end if; + when G16_1 => + if (rdy_i = '1' and + zw_REG_OP = X"E5") then + next_state <= G16_e2; + 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 <= G16_2; + elsif (rdy_i = '1' and + zw_REG_OP = X"ED") then + next_state <= G16_3; + elsif (rdy_i = '1' and + zw_REG_OP = X"FD") then + next_state <= G16_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"F9") then + next_state <= G16_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"F1") then + next_state <= G16_5; + elsif (rdy_i = '1' and + zw_REG_OP = X"E1") then + next_state <= G16_7; + elsif (rdy_i = '1' and + zw_REG_OP = X"E9" and + reg_F(3) = '1') then + next_state <= FETCH; + else + next_state <= G16_1; + end if; + when G16_2 => + if (rdy_i = '1') then + next_state <= G16_e2; + else + next_state <= G16_2; + end if; + when G16_3 => + if (rdy_i = '1') then + next_state <= G16_e2; + else + next_state <= G16_3; + end if; + when G16_4 => + if (rdy_i = '1') then + next_state <= G16_e1; + else + next_state <= G16_4; + end if; + when G16_5 => + if (rdy_i = '1') then + next_state <= G16_6; + else + next_state <= G16_5; + end if; + when G16_6 => + if (rdy_i = '1') then + next_state <= G16_e1; + else + next_state <= G16_6; + end if; + when G16_7 => + if (rdy_i = '1') then + next_state <= G16_e3; + else + next_state <= G16_7; + end if; + when G16_e1 => + 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 <= G16_e2; + else + next_state <= G16_e1; + end if; + when G16_e2 => + 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 <= G16_e2; + end if; + when G16_e3 => + if (rdy_i = '1') then + next_state <= G16_3; + else + next_state <= G16_e3; + end if; + when G17_1 => + 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 <= G17_e; + elsif (rdy_i = '1' and + (zw_REG_OP = X"95" OR + zw_REG_OP = X"94")) then + next_state <= G17_2; + 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 <= G17_3; + elsif (rdy_i = '1' and + zw_REG_OP = X"9D") then + next_state <= G17_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"99") then + next_state <= G17_4; + elsif (rdy_i = '1' and + zw_REG_OP = X"91") then + next_state <= G17_6; + elsif (rdy_i = '1' and + zw_REG_OP = X"81") then + next_state <= G17_8; + elsif (rdy_i = '1' and + zw_REG_OP = X"96") then + next_state <= G17_2; + else + next_state <= G17_1; + end if; + when G17_10 => + next_state <= G17_e; + when G17_2 => + if (rdy_i = '1') then + next_state <= G17_e; + else + next_state <= G17_2; + end if; + when G17_3 => + if (rdy_i = '1') then + next_state <= G17_e; + else + next_state <= G17_3; + end if; + when G17_4 => + if (rdy_i = '1') then + next_state <= G17_5; + else + next_state <= G17_4; + end if; + when G17_5 => + next_state <= G17_e; + when G17_6 => + if (rdy_i = '1') then + next_state <= G17_7; + else + next_state <= G17_6; + end if; + when G17_7 => + if (rdy_i = '1') then + next_state <= G17_5; + else + next_state <= G17_7; + end if; + when G17_8 => + if (rdy_i = '1') then + next_state <= G17_9; + else + next_state <= G17_8; + end if; + when G17_9 => + if (rdy_i = '1') then + next_state <= G17_10; + else + next_state <= G17_9; + end if; + when G17_e => + next_state <= FETCH; + when G18_1 => + if (rdy_i = '1') then + next_state <= G18_2; + else + next_state <= G18_1; + end if; + when G18_2 => + next_state <= G18_3; + when G18_3 => + next_state <= G18_4; + when G18_4 => + next_state <= G18_5; + when G18_5 => + if (rdy_i = '1') then + next_state <= G18_e; + else + next_state <= G18_5; + end if; + when G18_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G18_e; + end if; + when G19_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G19_1; + end if; + when G1_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G1_1; + end if; + when G20_1 => + if (rdy_i = '1' and + zw_REG_OP = X"4C") then + next_state <= G20_e; + elsif (rdy_i = '1' and + zw_REG_OP = X"6C") then + next_state <= G20_2; + else + next_state <= G20_1; + end if; + when G20_2 => + if (rdy_i = '1') then + next_state <= G20_3; + else + next_state <= G20_2; + end if; + when G20_3 => + if (rdy_i = '1') then + next_state <= G20_e; + else + next_state <= G20_3; + end if; + when G20_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G20_e; + end if; + when G21_1 => + if (rdy_i = '1') then + next_state <= G21_2; + else + next_state <= G21_1; + end if; + when G21_2 => + if (rdy_i = '1') then + next_state <= G21_3; + else + next_state <= G21_2; + end if; + when G21_3 => + next_state <= G21_4; + when G21_4 => + next_state <= G21_e; + when G21_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G21_e; + end if; + when G22_1 => + if (rdy_i = '1') then + next_state <= G22_e; + else + next_state <= G22_1; + end if; + when G22_e => + next_state <= FETCH; + when G23_1 => + if (rdy_i = '1') then + next_state <= G23_e; + else + next_state <= G23_1; + end if; + when G23_e => + next_state <= FETCH; + when G24_1 => + if (rdy_i = '1') then + next_state <= G24_2; + else + next_state <= G24_1; + end if; + when G24_2 => + if (rdy_i = '1') then + next_state <= G24_e; + else + next_state <= G24_2; + end if; + when G24_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G24_e; + end if; + when G25_1 => + if (rdy_i = '1') then + next_state <= G25_2; + else + next_state <= G25_1; + end if; + when G25_2 => + if (rdy_i = '1') then + next_state <= G25_e; + else + next_state <= G25_2; + end if; + when G25_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G25_e; + end if; + when G26_1 => + if (rdy_i = '1') then + next_state <= G26_2; + else + next_state <= G26_1; + end if; + when G26_2 => + if (rdy_i = '1') then + next_state <= G26_3; + else + next_state <= G26_2; + end if; + when G26_3 => + if (rdy_i = '1') then + next_state <= G26_4; + else + next_state <= G26_3; + end if; + when G26_4 => + if (rdy_i = '1') then + next_state <= G26_e; + else + next_state <= G26_4; + end if; + when G26_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G26_e; + end if; + when G27_1 => + if (rdy_i = '1') then + next_state <= G27_2; + else + next_state <= G27_1; + end if; + when G27_2 => + if (rdy_i = '1') then + next_state <= G27_3; + else + next_state <= G27_2; + end if; + when G27_3 => + if (rdy_i = '1') then + next_state <= G27_4; + else + next_state <= G27_3; + end if; + when G27_4 => + if (rdy_i = '1') then + next_state <= G27_e; + else + next_state <= G27_4; + end if; + when G27_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G27_e; + end if; + when G28_1 => + if (rdy_i = '1') then + next_state <= G28_2; + else + next_state <= G28_1; + end if; + when G28_2 => + next_state <= G28_3; + when G28_3 => + next_state <= G28_4; + when G28_4 => + next_state <= G28_5; + when G28_5 => + if (rdy_i = '1') then + next_state <= G28_e; + else + next_state <= G28_5; + end if; + when G28_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G28_e; + end if; + when G29_1 => + if (rdy_i = '1') then + next_state <= G29_2; + else + next_state <= G29_1; + end if; + when G29_2 => + next_state <= G29_3; + when G29_3 => + next_state <= G29_4; + when G29_4 => + next_state <= G29_5; + when G29_5 => + if (rdy_i = '1') then + next_state <= G29_e; + else + next_state <= G29_5; + end if; + when G29_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G29_e; + end if; + when G2_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G2_1; + end if; + when G30_1 => + next_state <= G30_2; + when G30_2 => + next_state <= G30_3; + when G30_3 => + next_state <= G30_4; + when G30_4 => + next_state <= G30_5; + when G30_5 => + if (rdy_i = '1') then + next_state <= G30_e; + else + next_state <= G30_5; + end if; + when G30_e => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G30_e; + end if; + when G31_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G31_1; + end if; + when G32_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G32_1; + end if; + when G33_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G33_1; + end if; + when G34_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G34_1; + end if; + when G3_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G3_1; + end if; + when G4_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G4_1; + end if; + when G5_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G5_1; + end if; + when G6_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G6_1; + end if; + when G7_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G7_1; + end if; + when G8_1 => + if (rdy_i = '1') then + next_state <= FETCH; + else + next_state <= G8_1; + end if; + when G9_1 => + 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 <= G9_1; + end if; + when RES => + next_state <= G30_1; + 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_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 + ) + ----------------------------------------------------------------- + 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_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_SYNC <= '0'; + sig_WR <= '0'; + zw_ALU <= '0' & X"00"; + zw_ALU1 <= '0' & X"0"; + zw_ALU2 <= '0' & X"0"; + zw_ALU3 <= '0' & X"0"; + zw_ALU4 <= '0' & X"0"; + zw_ALU5 <= X"0"; + zw_ALU6 <= X"0"; + + -- Combined Actions + case current_state is + when FETCH => + 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 G10_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'; + 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(2 downto 0)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(2 downto 0)); + + zw_ALU6(2 downto 0) <= (zw_ALU2(4) OR (zw_ALU4(4))) & (zw_ALU2(4) OR (zw_ALU4(4))) & '0'; + zw_ALU5(2 downto 0) <= (zw_ALU1(4) OR (zw_ALU3(4))) & (zw_ALU1(4) OR (zw_ALU3(4))) & '0'; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G10_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G10_3 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G10_4 => + 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 G10_5 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when G10_6 => + 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 G10_e1 => + 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(2 downto 0)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(2 downto 0)); + + zw_ALU6(2 downto 0) <= (zw_ALU2(4) OR (zw_ALU4(4))) & (zw_ALU2(4) OR (zw_ALU4(4))) & '0'; + zw_ALU5(2 downto 0) <= (zw_ALU1(4) OR (zw_ALU3(4))) & (zw_ALU1(4) OR (zw_ALU3(4))) & '0'; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G10_e2 => + 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(2 downto 0)); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5(2 downto 0)); + + zw_ALU6(2 downto 0) <= (zw_ALU2(4) OR (zw_ALU4(4))) & (zw_ALU2(4) OR (zw_ALU4(4))) & '0'; + zw_ALU5(2 downto 0) <= (zw_ALU1(4) OR (zw_ALU3(4))) & (zw_ALU1(4) OR (zw_ALU3(4))) & '0'; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4)) + (zw_ALU1(4) OR zw_ALU3(4)); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G10_e3 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when G11_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 G11_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G11_4 => + 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_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_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_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_WR <= '1'; + end if; + when G11_5 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G11_6 => + 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 G11_e => + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + when G12_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'; + fetch_o <= '1'; + elsif (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G12_e1 => + 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 G12_e2 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G13_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 G13_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G13_e => + 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 G14_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 G14_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G14_3 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= zw_b4; + end if; + when G14_4 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= zw_b1; + end if; + when G14_5 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G14_6 => + 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 G14_e => + ch_a_o <= zw_b1; + ch_b_o <= X"00"; + sig_SYNC <= '1'; + fetch_o <= '1'; + when G15_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'; + 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 G15_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G15_3 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G15_4 => + 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 G15_5 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when G15_6 => + 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 G15_e1 => + 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 G15_e2 => + 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 G15_e3 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when G16_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'; + 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); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5); + + zw_ALU6 <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5 <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G16_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G16_3 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G16_4 => + 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 G16_5 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when G16_6 => + 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 G16_e1 => + 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); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5); + + zw_ALU6 <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5 <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G16_e2 => + 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); + zw_ALU(3 downto 0) <= unsigned (zw_ALU1(3 downto 0)) + unsigned (zw_ALU5); + + zw_ALU6 <= (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0' & (zw_ALU4(4) OR NOT (zw_ALU2(4))) & '0'; + zw_ALU5 <= (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' & (zw_ALU3(4) OR NOT (zw_ALU1(4))) & '0' ; + + zw_ALU4 <= unsigned ('0' & zw_ALU2(3 downto 0)) + 6; + zw_ALU2 <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT (d_i(7 downto 4))) + zw_ALU1(4); + + zw_ALU3 <= unsigned ('0' & zw_ALU1(3 downto 0)) + 6; + zw_ALU1 <= 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 G16_e3 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when G17_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_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 G17_10 => + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + when G17_2 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G17_3 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G17_4 => + 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 G17_5 => + sig_WR <= '1'; + sig_D_OUT <= d_regs_out_i; + when G17_6 => + if (rdy_i = '1') then + ch_a_o <= d_i; + ch_b_o <= q_y_i; + end if; + when G17_7 => + 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 G17_9 => + if (rdy_i = '1') then + ch_a_o <= zw_b1; + ch_b_o <= X"01"; + end if; + when G17_e => + sig_SYNC <= '1'; + fetch_o <= '1'; + when G18_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when G18_2 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when G18_3 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= reg_F OR X"10"; + when G18_e => + 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 G19_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'; + fetch_o <= '1'; + end if; + when G1_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G20_2 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G20_e => + 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 G21_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + end if; + when G21_2 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when G21_3 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when G21_e => + 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 G22_1 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= q_a_i; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G22_e => + sig_SYNC <= '1'; + fetch_o <= '1'; + when G23_1 => + if (rdy_i = '1') then + sig_WR <= '1'; + sig_D_OUT <= reg_F; + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G23_e => + sig_SYNC <= '1'; + fetch_o <= '1'; + when G24_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G24_e => + 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 G25_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G25_e => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G26_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G26_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G26_3 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G26_e => + 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 G27_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G27_2 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + end if; + when G27_4 => + if (rdy_i = '1') then + adr_o <= d_i & zw_b1; + ld_o <= "11"; + ld_pc_o <= '1'; + end if; + when G27_e => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G28_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when G28_2 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when G28_3 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when G28_e => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G29_1 => + if (rdy_i = '1') then + ld_o <= "11"; + ld_sp_o <= '1'; + ld_pc_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (15 downto 8); + end if; + when G29_2 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= adr_pc_i (7 downto 0); + when G29_3 => + ld_o <= "11"; + ld_sp_o <= '1'; + sig_WR <= '1'; + sig_D_OUT <= reg_F; + when G29_e => + 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 G2_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G30_1 => + ld_o <= "11"; + ld_sp_o <= '1'; + when G30_2 => + ld_o <= "11"; + ld_sp_o <= '1'; + when G30_3 => + adr_o <= X"FFFB"; + ld_o <= "11"; + ld_pc_o <= '1'; + when G30_4 => + ld_o <= "11"; + ld_pc_o <= '1'; + when G30_e => + 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 G31_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'; + fetch_o <= '1'; + end if; + when G32_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'; + fetch_o <= '1'; + end if; + when G33_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'; + fetch_o <= '1'; + end if; + when G34_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'; + fetch_o <= '1'; + end if; + when G3_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G4_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G5_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G6_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G7_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G8_1 => + if (rdy_i = '1') then + sig_SYNC <= '1'; + fetch_o <= '1'; + end if; + when G9_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'; + 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 RES => + ld_o <= "11"; + ld_pc_o <= '1'; + ld_sp_o <= '1'; + 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_o <= wr_o_cld; +end fsm; Index: core.vhd =================================================================== --- core.vhd (nonexistent) +++ core.vhd (revision 18) @@ -0,0 +1,333 @@ +-- VHDL Entity R6502_TC.Core.symbol +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:55 23.02.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_o : out std_logic + ); + +-- Declarations + +end Core ; + +-- Jens-D. Gutschmidt Project: R6502_TC +-- scantara2003@yahoo.de +-- COPYRIGHT (C) 2008-2009 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 10 Feb 2009 +-- +-- VHDL Architecture R6502_TC.Core.struct +-- +-- Created: +-- by - eda.UNKNOWN (ENTWICKL4-XP-PR) +-- at - 11:47:57 23.02.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_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_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_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_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_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_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_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;
core.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: fsm_nmi.vhd =================================================================== --- fsm_nmi.vhd (nonexistent) +++ fsm_nmi.vhd (revision 18) @@ -0,0 +1,164 @@ +-- VHDL Entity R6502_TC.FSM_NMI.symbol +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:41 10.02.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-2009 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 10 Feb 2009 + +-- +-- VHDL Architecture R6502_TC.FSM_NMI.fsm +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:41 10.02.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 + + SUBTYPE STATE_TYPE IS + std_logic_vector(1 DOWNTO 0); + + -- Hard encoding + CONSTANT idle : STATE_TYPE := "00"; + CONSTANT idle1 : STATE_TYPE := "01"; + CONSTANT idle2 : STATE_TYPE := "11"; + CONSTANT IMP : STATE_TYPE := "10"; + + -- 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 + 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;
fsm_nmi.vhd Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: regbank_axy.vhd =================================================================== --- regbank_axy.vhd (nonexistent) +++ regbank_axy.vhd (revision 18) @@ -0,0 +1,191 @@ +-- VHDL Entity R6502_TC.RegBank_AXY.symbol +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:32 10.02.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-2009 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 10 Feb 2009 +-- +-- VHDL Architecture R6502_TC.RegBank_AXY.struct +-- +-- Created: +-- by - eda.UNKNOWN (TEST) +-- at - 19:25:32 10.02.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' OR rst_rst_n_i = 'L') THEN + mw_U_0reg_cval <= "00000000"; + ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN + IF (load_o_i = '1' OR load_o_i = 'H') 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' OR rst_rst_n_i = 'L') THEN + mw_U_4reg_cval <= "00000000"; + ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN + IF (load1_o_i = '1' OR load1_o_i = 'H') 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' OR rst_rst_n_i = 'L') THEN + mw_U_5reg_cval <= "00000000"; + ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN + IF (load2_o_i = '1' OR load2_o_i = 'H') 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"|"L0"|"0L"|"LL" => d_regs_out_o <= q_a_o_internal; + WHEN "01"|"L1"|"0H"|"LH" => d_regs_out_o <= q_x_o_internal; + WHEN "10"|"H0"|"1L"|"HL" => d_regs_out_o <= q_y_o_internal; + WHEN "11"|"H1"|"1H"|"HH" => 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"|"L0"|"0L"|"LL" => q_mux_o_i <= q_a_o_internal; + WHEN "01"|"L1"|"0H"|"LH" => q_mux_o_i <= q_y_o_internal; + WHEN "10"|"H0"|"1L"|"HL" => q_mux_o_i <= q_x_o_internal; + WHEN "11"|"H1"|"1H"|"HH" => 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;
regbank_axy.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.