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
    from Rev 25 to Rev 26
    Reverse comparison

Rev 25 → Rev 26

/trunk/TO_DO_list.txt
1,3 → 1,10
(September 15th 2018)
- (WORKING) Performance improvements
- (WORKING) Creating test strategy for RDY signal
- (DONE) Working on reported Bugs/Requests: Branches, Interrupts, ADC/SBC
- (DONE) Verifying all interrupts
- (90%) Finish working for Specification of cpu65C02_tc
 
(March 15th 2010)
- (DONE) Bug fix for wrong interrupt sequences in IRQ and NMI. Tested by
simulation with RTI and in a real environment by customer.
/trunk/asm/readme.txt
28,5 → 28,5
; => trap_ne ;unexpected B-flag! - this may fail on a real 6502
;due to a hardware bug on concurrent BRK & NMI
 
All four tests: SUCCESS with v1.52RC
All three tests: SUCCESS with v1.4
 
/trunk/doc/6502 IP Core Specification_V0_6.pdf Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/doc/6502 IP Core Specification_V0_6.pdf Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/HTML.rar =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/HTML.rar =================================================================== --- trunk/doc/HTML.rar (revision 25) +++ trunk/doc/HTML.rar (nonexistent)
trunk/doc/HTML.rar Property changes : Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/6502 IP Core Specification_V0_7.pdf =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/6502 IP Core Specification_V0_7.pdf =================================================================== --- trunk/doc/6502 IP Core Specification_V0_7.pdf (nonexistent) +++ trunk/doc/6502 IP Core Specification_V0_7.pdf (revision 26)
trunk/doc/6502 IP Core Specification_V0_7.pdf Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/HTML_r6502_tc.7z =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/HTML_r6502_tc.7z =================================================================== --- trunk/doc/HTML_r6502_tc.7z (nonexistent) +++ trunk/doc/HTML_r6502_tc.7z (revision 26)
trunk/doc/HTML_r6502_tc.7z Property changes : Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/doc/errata.txt =================================================================== --- trunk/doc/errata.txt (revision 25) +++ trunk/doc/errata.txt (revision 26) @@ -1,5 +1,16 @@ -v1.11 BETA 2013/07/24 +v1.4 2018/09/15 FUNCTIONALITY: + no errata reported/opened + +TIMING: + no errata reported/opened + +SIGNALING: + no errata reported/opened + + +v1.4 BETA 2013/07/24 +FUNCTIONALITY: - ADC and SBC in decimal mode (all op codes - seems to use a formula different from a real R6502.
/trunk/doc/src/6502_opcodes_cycles_testet_V0_9_DRAFT.doc Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream
trunk/doc/src/6502_opcodes_cycles_testet_V0_9_DRAFT.doc Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/doc/src/6502 IP Core Specification_V0_6.doc =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/doc/src/6502 IP Core Specification_V0_6.doc =================================================================== --- trunk/doc/src/6502 IP Core Specification_V0_6.doc (revision 25) +++ trunk/doc/src/6502 IP Core Specification_V0_6.doc (nonexistent)
trunk/doc/src/6502 IP Core Specification_V0_6.doc Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:mime-type ## -1 +0,0 ## -application/octet-stream \ No newline at end of property Index: trunk/rtl/vhdl/fsm_nmi.vhd =================================================================== --- trunk/rtl/vhdl/fsm_nmi.vhd (revision 25) +++ trunk/rtl/vhdl/fsm_nmi.vhd (nonexistent) @@ -1,167 +0,0 @@ --- VHDL Entity R6502_TC.FSM_NMI.symbol --- --- Created: --- by - eda.UNKNOWN (ENTW1) --- at - 18:40:01 08.02.2010 --- --- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12) --- -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; - nmi_n_i : IN std_logic; - rst_nmi_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-2010 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: fsm.sm,v $ - --- <<-- more -->> - --- Title: FSM for NMI - --- Path: R6502_TC/FSM_NMI/fsm - --- Edited: by eda on 08 Feb 2010 - --- --- VHDL Architecture R6502_TC.FSM_NMI.fsm --- --- Created: --- by - eda.UNKNOWN (ENTW1) --- at - 18:40:01 08.02.2010 --- --- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12) --- -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'; - IF (rst_nmi_i = '1') THEN - nmi_o_cld <= '0'; - END IF; - WHEN OTHERS => - NULL; - END CASE; - END IF; - END PROCESS clocked_proc; - - ----------------------------------------------------------------- - nextstate_proc : PROCESS ( - current_state, - nmi_n_i, - rst_nmi_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 (rst_nmi_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;
trunk/rtl/vhdl/fsm_nmi.vhd Property changes : Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Index: trunk/rtl/vhdl/core.vhd =================================================================== --- trunk/rtl/vhdl/core.vhd (revision 25) +++ trunk/rtl/vhdl/core.vhd (revision 26) @@ -1,291 +1,311 @@ --- VHDL Entity R6502_TC.Core.symbol +-- VHDL Entity r6502_tc.core.symbol -- -- Created: --- by - eda.UNKNOWN (ENTW1) --- at - 14:13:52 08.03.2010 +-- by - eda.UNKNOWN (ENTW-7HPZ200) +-- at - 09:42:07 11.09.2018 -- --- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12) +-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5) -- LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; -ENTITY Core IS - PORT( - clk_clk_i : IN std_logic; - d_i : IN std_logic_vector (7 DOWNTO 0); - irq_n_i : IN std_logic; - nmi_n_i : IN std_logic; - rdy_i : IN std_logic; - rst_rst_n_i : IN std_logic; - so_n_i : IN std_logic; - a_o : OUT std_logic_vector (15 DOWNTO 0); - d_o : OUT std_logic_vector (7 DOWNTO 0); - rd_o : OUT std_logic; - sync_o : OUT std_logic; - wr_n_o : OUT std_logic; - wr_o : OUT std_logic +entity core is + port( + clk_clk_i : in std_logic; + d_i : in std_logic_vector (7 downto 0); + irq_n_i : in std_logic; + nmi_n_i : in std_logic; + rdy_i : in std_logic; + rst_rst_n_i : in std_logic; + so_n_i : in std_logic; + a_o : out std_logic_vector (15 downto 0); + d_o : out std_logic_vector (7 downto 0); + rd_o : out std_logic; + sync_o : out std_logic; + wr_n_o : out std_logic; + wr_o : out std_logic ); -- Declarations -END Core ; +end core ; --- Jens-D. Gutschmidt Project: R6502_TC --- scantara2003@yahoo.de --- COPYRIGHT (C) 2008-2010 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: struct.bd,v $ --- <<-- more -->> --- Title: Core --- Path: R6502_TC/Core/struct --- Edited: by eda on 08 Feb 2010 +-- (C) 2008 - 2018 Jens Gutschmidt +-- (email: opencores@vivare-services.com) +-- +-- Versions: +-- Revision 1.20 2013/07/24 11:11:00 jens +-- - Changing the title block and internal revision history +-- +-- Revision 1.6 2009/01/04 10:20:47 eda +-- Changes for cosmetic issues only +-- +-- Revision 1.5 2009/01/04 09:23:10 eda +-- - Delete unused nets and blocks +-- - Rename blocks +-- +-- Revision 1.4 2009/01/03 16:53:02 eda +-- - Unused nets and blocks deleted +-- - Renamed blocks +-- +-- Revision 1.3 2009/01/03 16:42:02 eda +-- - Unused nets and blocks deleted +-- - Renamed blocks +-- +-- Revision 1.2 2008/12/31 19:31:24 eda +-- Production Release +-- +-- -- --- VHDL Architecture R6502_TC.Core.struct +-- VHDL Architecture r6502_tc.core.struct -- -- Created: --- by - eda.UNKNOWN (ENTW1) --- at - 14:13:53 08.03.2010 +-- by - eda.UNKNOWN (ENTW-7HPZ200) +-- at - 11:46:25 11.09.2018 -- --- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12) +-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5) -- +-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt +-- +-- 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 . +-- +-- LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; -LIBRARY R6502_TC; +library r6502_tc; -ARCHITECTURE struct OF Core IS +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 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 rst_nmi_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; + 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 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 rst_nmi_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; -- 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 ); - 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 ; - rst_nmi_o : OUT std_logic ; - sel_pc_in_o : OUT std_logic ; - sel_pc_val_o : OUT std_logic_vector ( 1 DOWNTO 0 ); - sel_rb_in_o : OUT std_logic_vector ( 1 DOWNTO 0 ); - sel_rb_out_o : OUT std_logic_vector ( 1 DOWNTO 0 ); - sel_reg_o : OUT std_logic_vector ( 1 DOWNTO 0 ); - sel_sp_as_o : OUT std_logic ; - sel_sp_in_o : OUT std_logic ; - sync_o : OUT std_logic ; - wr_n_o : OUT std_logic ; - wr_o : OUT std_logic + 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 ); + int_fetch_o : out std_logic ; + int_reg_2flag_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 ; + rst_nmi_o : out std_logic ; + sel_pc_in_o : out std_logic ; + sel_pc_val_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_in_o : out std_logic_vector ( 1 downto 0 ); + sel_rb_out_o : out std_logic_vector ( 1 downto 0 ); + sel_reg_o : out std_logic_vector ( 1 downto 0 ); + sel_sp_as_o : out std_logic ; + sel_sp_in_o : out std_logic ; + sync_o : out std_logic ; + wr_n_o : out std_logic ; + wr_o : out std_logic ); - END COMPONENT; - COMPONENT FSM_NMI - PORT ( - clk_clk_i : IN std_logic ; - nmi_n_i : IN std_logic ; - rst_nmi_i : IN std_logic ; - rst_rst_n_i : IN std_logic ; - nmi_o : OUT std_logic + end component; + component fsm_intnmi + port ( + clk_clk_i : in std_logic ; + nmi_n_i : in std_logic ; + rst_nmi_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_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; - 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; + 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; + 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; + for all : fsm_execution_unit use entity r6502_tc.fsm_execution_unit; + for all : fsm_intnmi use entity r6502_tc.fsm_intnmi; + for all : reg_pc use entity r6502_tc.reg_pc; + for all : reg_sp use entity r6502_tc.reg_sp; + for all : regbank_axy use entity r6502_tc.regbank_axy; -- pragma synthesis_on -BEGIN +begin - -- ModuleWare code(v1.9) for instance 'U_11' of 'add' - u_11combo_proc: PROCESS (ch_a_o_i, ch_b_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 + -- ModuleWare code(v1.12) for instance 'U_11' of 'add' + u_11combo_proc: process (ch_a_o_i, ch_b_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' & ch_a_o_i; temp_din1 := '0' & ch_b_o_i; temp_carry := '0'; temp_sum := unsigned(temp_din0) + unsigned(temp_din1) + temp_carry; - d_alu_o_i <= conv_std_logic_vector(temp_sum(7 DOWNTO 0),8); + d_alu_o_i <= conv_std_logic_vector(temp_sum(7 downto 0),8); reg_0flag_o_i <= temp_sum(8) ; - END PROCESS u_11combo_proc; + end process u_11combo_proc; - -- ModuleWare code(v1.9) for instance 'U_8' of 'inv' - reg_1flag_o_i <= NOT(d_alu_or_o_i); + -- ModuleWare code(v1.12) 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.12) 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.12) 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); + -- ModuleWare code(v1.12) 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, - 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, - rst_nmi_o => rst_nmi_o_i, - sel_pc_in_o => sel_pc_in_o_i, - sel_pc_val_o => sel_pc_val_o_i, - sel_rb_in_o => sel_rb_in_o_i, - sel_rb_out_o => sel_rb_out_o_i, - sel_reg_o => sel_reg_o_i, - sel_sp_as_o => sel_sp_as_o_i, - sel_sp_in_o => sel_sp_in_o_i, - sync_o => sync_o, - wr_n_o => wr_n_o, - wr_o => wr_o + U_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, + int_fetch_o => open, + int_reg_2flag_o => open, + 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, + rst_nmi_o => rst_nmi_o_i, + sel_pc_in_o => sel_pc_in_o_i, + sel_pc_val_o => sel_pc_val_o_i, + sel_rb_in_o => sel_rb_in_o_i, + sel_rb_out_o => sel_rb_out_o_i, + sel_reg_o => sel_reg_o_i, + sel_sp_as_o => sel_sp_as_o_i, + sel_sp_in_o => sel_sp_in_o_i, + sync_o => sync_o, + wr_n_o => wr_n_o, + wr_o => wr_o ); - U_6 : FSM_NMI - PORT MAP ( + U_6 : fsm_intnmi + port map ( clk_clk_i => clk_clk_i, nmi_n_i => nmi_n_i, rst_nmi_i => rst_nmi_o_i, @@ -292,22 +312,8 @@ 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 ( + U_0 : reg_pc + port map ( adr_i => adr_o_i, clk_clk_i => clk_clk_i, ld_i => ld_o_i, @@ -319,8 +325,8 @@ adr_nxt_pc_o => adr_nxt_pc_o_i, adr_pc_o => adr_pc_o_i ); - U_1 : Reg_SP - PORT MAP ( + 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), @@ -330,5 +336,19 @@ sel_sp_in_i => sel_sp_in_o_i, adr_sp_o => adr_sp_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 + ); -END struct; +end struct;
/trunk/rtl/vhdl/fsm_execution_unit.vhd
1,305 → 1,341
-- VHDL Entity R6502_TC.FSM_Execution_Unit.symbol
-- VHDL Entity r6502_tc.fsm_execution_unit.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 15:57:20 20.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:35:43 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
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 );
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;
rst_nmi_o : OUT std_logic;
sel_pc_in_o : OUT std_logic;
sel_pc_val_o : OUT std_logic_vector ( 1 DOWNTO 0 );
sel_rb_in_o : OUT std_logic_vector ( 1 DOWNTO 0 );
sel_rb_out_o : OUT std_logic_vector ( 1 DOWNTO 0 );
sel_reg_o : OUT std_logic_vector ( 1 DOWNTO 0 );
sel_sp_as_o : OUT std_logic;
sel_sp_in_o : OUT std_logic;
sync_o : OUT std_logic;
wr_n_o : OUT std_logic;
wr_o : OUT std_logic
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 );
int_fetch_o : out std_logic;
int_reg_2flag_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;
rst_nmi_o : out std_logic;
sel_pc_in_o : out std_logic;
sel_pc_val_o : out std_logic_vector ( 1 downto 0 );
sel_rb_in_o : out std_logic_vector ( 1 downto 0 );
sel_rb_out_o : out std_logic_vector ( 1 downto 0 );
sel_reg_o : out std_logic_vector ( 1 downto 0 );
sel_sp_as_o : out std_logic;
sel_sp_in_o : out std_logic;
sync_o : out std_logic;
wr_n_o : out std_logic;
wr_o : out std_logic
);
 
-- Declarations
 
END FSM_Execution_Unit ;
end fsm_execution_unit ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
 
-- scantara2003@yahoo.de
 
-- COPYRIGHT (C) 2008-2010 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: fsm.sm,v $
 
-- <<-- more -->>
 
-- Title: FSM Execution Unit for all op codes
 
-- Path: R6502_TC/FSM_Execution_Unit/fsm
 
-- Edited: by eda on 20 Feb 2010
 
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.11 2018/09/11 11:50:00 jens
-- - RESET generates SYNC now, 1 dead cycle delayed
-- - ADC / SBC flags and A like R6502 now
-- - Bug Fix ADC and SBC in decimal mode (all op codes -
-- "Overflow" flag was computed wrong)
-- - Interrupt priority order is now: BRK - NMI - IRQ
-- - Performance improvements on-going (Mealy -> Moore)
-- - Bug Fixes All Branch Instructions
-- (BCC, BCS, BEQ, BNE, BPL, BMI, BVC, BVS)
-- 3 cycles now if branch forward occur and the branch
-- instruction lies on a xxFEh location.
-- - Bug Fix Hardware Interrupts NMI & IRQ - "SYNC" now
--
-- Revision 1.11 BETA 2013/07/24 15:46:00 jens
-- - Changing the title block and internal revision history
-- - Bug Fix ADC and SBC (all op codes - "Overflow" flag was computed wrong)
--
-- Revision 1.10 2010/02/08 17:34:20 eda
-- BUGFIX for IRQn, NMIn and RTI
-- After detection of NMI or IRQ the address of the next instruction stacked wrong.
-- NMI now overwrites the vector address of IRQ if NMI asserted after IRQ and the
-- vector address is not loaded yet.
--
-- Revision 1.9 2010/02/08 17:32:19 eda
-- BUGFIX for IRQn, NMIn and RTI
-- After detection of NMI or IRQ the address of the next instruction stacked wrong.
-- NMI now overwrites the vector address of IRQ if NMI asserted after IRQ and the
-- vector address is not loaded yet.
--
-- Revision 1.8 2009/01/04 20:23:42 eda
-- *** EMERGENCY BUGFIX ***
-- - Signal rd_o was corrupted in last version. wr_o and wr_n are not effected.
-- - OP JMP (indirect) produced a 65C02 like jump. On 6502 a special case exist
-- when the (indirect) address cross the page boundary (e.g. JMP (02FF) reads from
-- $02FF and $0200, instead of $02FF and $0300)
--
-- Revision 1.7 2009/01/04 16:54:59 eda
-- - Removed unused bits in ALU (zw_ALUx)
--
-- Revision 1.6 2009/01/04 10:27:49 eda
-- Changes for cosmetic issues only
--
-- Revision 1.5 2009/01/04 10:25:04 eda
-- Changes for cosmetic issues only
--
-- Revision 1.4 2009/01/03 16:53:01 eda
-- - Unused nets and blocks deleted
-- - Re-arragend symbols in block FSM_Execution_Unit
-- - Renamed blocks
-- - Input SO implemented
--
-- Revision 1.3 2009/01/03 16:42:02 eda
-- - Unused nets and blocks deleted
-- - Re-arragend symbols in block FSM_Execution_Unit
-- - Renamed blocks
-- - Input SO implemented
--
-- Revision 1.2 2008/12/31 19:31:24 eda
-- Production Release
--
--
--
-- VHDL Architecture R6502_TC.FSM_Execution_Unit.fsm
-- VHDL Architecture r6502_tc.fsm_execution_unit.fsm
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 15:57:21 20.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 22:31:13 15.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
ARCHITECTURE fsm OF FSM_Execution_Unit IS
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_RD : std_logic;
SIGNAL sig_RWn : std_logic;
SIGNAL sig_SYNC : std_logic;
SIGNAL sig_WR : std_logic;
SIGNAL zw_ALU : std_logic_vector( 8 DOWNTO 0 );
SIGNAL zw_ALU1 : std_logic_vector( 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_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;
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_RD : std_logic;
signal sig_RWn : std_logic;
signal sig_SYNC : std_logic;
signal sig_WR : std_logic;
signal zw_REG_OP : std_logic_vector( 7 DOWNTO 0 );
signal zw_alu : std_logic_vector(9 DOWNTO 0);
signal zw_alu1 : std_logic_vector(9 DOWNTO 0);
signal zw_alu2 : std_logic_vector(9 DOWNTO 0);
signal zw_alu3 : std_logic_vector(9 DOWNTO 0);
signal zw_alu4 : std_logic_vector(9 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_bit : std_logic;
signal zw_irq : std_logic;
signal zw_ninebits4 : std_logic_vector(8 DOWNTO 0);
signal zw_nmi : std_logic;
signal zw_so : std_logic;
 
SUBTYPE STATE_TYPE IS
std_logic_vector(7 DOWNTO 0);
subtype state_type is
std_logic_vector(7 downto 0);
-- Hard encoding
CONSTANT FETCH : STATE_TYPE := "00000000";
CONSTANT s1 : STATE_TYPE := "00000001";
CONSTANT s2 : STATE_TYPE := "00000011";
CONSTANT s5 : STATE_TYPE := "00000010";
CONSTANT s3 : STATE_TYPE := "00000110";
CONSTANT s4 : STATE_TYPE := "00000111";
CONSTANT s12 : STATE_TYPE := "00000101";
CONSTANT s16 : STATE_TYPE := "00000100";
CONSTANT s17 : STATE_TYPE := "00001100";
CONSTANT s24 : STATE_TYPE := "00001101";
CONSTANT s25 : STATE_TYPE := "00001111";
CONSTANT s271 : STATE_TYPE := "00001110";
CONSTANT s273 : STATE_TYPE := "00001010";
CONSTANT s304 : STATE_TYPE := "00001011";
CONSTANT s307 : STATE_TYPE := "00001001";
CONSTANT s177 : STATE_TYPE := "00001000";
CONSTANT s180 : STATE_TYPE := "00011000";
CONSTANT s181 : STATE_TYPE := "00011001";
CONSTANT s182 : STATE_TYPE := "00011011";
CONSTANT s183 : STATE_TYPE := "00011010";
CONSTANT s184 : STATE_TYPE := "00011110";
CONSTANT s185 : STATE_TYPE := "00011111";
CONSTANT s186 : STATE_TYPE := "00011101";
CONSTANT s187 : STATE_TYPE := "00011100";
CONSTANT s188 : STATE_TYPE := "00010100";
CONSTANT s189 : STATE_TYPE := "00010101";
CONSTANT s190 : STATE_TYPE := "00010111";
CONSTANT s191 : STATE_TYPE := "00010110";
CONSTANT s192 : STATE_TYPE := "00010010";
CONSTANT s193 : STATE_TYPE := "00010011";
CONSTANT s377 : STATE_TYPE := "00010001";
CONSTANT s381 : STATE_TYPE := "00010000";
CONSTANT s378 : STATE_TYPE := "00110000";
CONSTANT s382 : STATE_TYPE := "00110001";
CONSTANT s379 : STATE_TYPE := "00110011";
CONSTANT s383 : STATE_TYPE := "00110010";
CONSTANT s384 : STATE_TYPE := "00110110";
CONSTANT s380 : STATE_TYPE := "00110111";
CONSTANT s385 : STATE_TYPE := "00110101";
CONSTANT s386 : STATE_TYPE := "00110100";
CONSTANT s387 : STATE_TYPE := "00111100";
CONSTANT s388 : STATE_TYPE := "00111101";
CONSTANT s389 : STATE_TYPE := "00111111";
CONSTANT s391 : STATE_TYPE := "00111110";
CONSTANT s392 : STATE_TYPE := "00111010";
CONSTANT s390 : STATE_TYPE := "00111011";
CONSTANT s393 : STATE_TYPE := "00111001";
CONSTANT s394 : STATE_TYPE := "00111000";
CONSTANT s395 : STATE_TYPE := "00101000";
CONSTANT s396 : STATE_TYPE := "00101001";
CONSTANT s397 : STATE_TYPE := "00101011";
CONSTANT s398 : STATE_TYPE := "00101010";
CONSTANT s399 : STATE_TYPE := "00101110";
CONSTANT s400 : STATE_TYPE := "00101111";
CONSTANT s401 : STATE_TYPE := "00101101";
CONSTANT s526 : STATE_TYPE := "00101100";
CONSTANT s527 : STATE_TYPE := "00100100";
CONSTANT s528 : STATE_TYPE := "00100101";
CONSTANT s529 : STATE_TYPE := "00100111";
CONSTANT s530 : STATE_TYPE := "00100110";
CONSTANT s531 : STATE_TYPE := "00100010";
CONSTANT s544 : STATE_TYPE := "00100011";
CONSTANT s545 : STATE_TYPE := "00100001";
CONSTANT s546 : STATE_TYPE := "00100000";
CONSTANT s547 : STATE_TYPE := "01100000";
CONSTANT s549 : STATE_TYPE := "01100001";
CONSTANT s550 : STATE_TYPE := "01100011";
CONSTANT s404 : STATE_TYPE := "01100010";
CONSTANT s556 : STATE_TYPE := "01100110";
CONSTANT s557 : STATE_TYPE := "01100111";
CONSTANT s579 : STATE_TYPE := "01100101";
CONSTANT s201 : STATE_TYPE := "01100100";
CONSTANT s202 : STATE_TYPE := "01101100";
CONSTANT s210 : STATE_TYPE := "01101101";
CONSTANT s211 : STATE_TYPE := "01101111";
CONSTANT s215 : STATE_TYPE := "01101110";
CONSTANT s217 : STATE_TYPE := "01101010";
CONSTANT s218 : STATE_TYPE := "01101011";
CONSTANT s222 : STATE_TYPE := "01101001";
CONSTANT s223 : STATE_TYPE := "01101000";
CONSTANT s224 : STATE_TYPE := "01111000";
CONSTANT s225 : STATE_TYPE := "01111001";
CONSTANT s226 : STATE_TYPE := "01111011";
CONSTANT s243 : STATE_TYPE := "01111010";
CONSTANT s244 : STATE_TYPE := "01111110";
CONSTANT s247 : STATE_TYPE := "01111111";
CONSTANT s344 : STATE_TYPE := "01111101";
CONSTANT s343 : STATE_TYPE := "01111100";
CONSTANT s250 : STATE_TYPE := "01110100";
CONSTANT s251 : STATE_TYPE := "01110101";
CONSTANT s351 : STATE_TYPE := "01110111";
CONSTANT s361 : STATE_TYPE := "01110110";
CONSTANT s360 : STATE_TYPE := "01110010";
CONSTANT s403 : STATE_TYPE := "01110011";
CONSTANT s406 : STATE_TYPE := "01110001";
CONSTANT s407 : STATE_TYPE := "01110000";
CONSTANT s409 : STATE_TYPE := "01010000";
CONSTANT s412 : STATE_TYPE := "01010001";
CONSTANT s413 : STATE_TYPE := "01010011";
CONSTANT s416 : STATE_TYPE := "01010010";
CONSTANT s418 : STATE_TYPE := "01010110";
CONSTANT s510 : STATE_TYPE := "01010111";
CONSTANT s553 : STATE_TYPE := "01010101";
CONSTANT s555 : STATE_TYPE := "01010100";
CONSTANT s558 : STATE_TYPE := "01011100";
CONSTANT s560 : STATE_TYPE := "01011101";
CONSTANT s561 : STATE_TYPE := "01011111";
CONSTANT s563 : STATE_TYPE := "01011110";
CONSTANT s564 : STATE_TYPE := "01011010";
CONSTANT s565 : STATE_TYPE := "01011011";
CONSTANT s566 : STATE_TYPE := "01011001";
CONSTANT s266 : STATE_TYPE := "01011000";
CONSTANT s301 : STATE_TYPE := "01001000";
CONSTANT s302 : STATE_TYPE := "01001001";
CONSTANT RES : STATE_TYPE := "01001011";
CONSTANT s511 : STATE_TYPE := "01001010";
CONSTANT s559 : STATE_TYPE := "01001110";
CONSTANT s562 : STATE_TYPE := "01001111";
CONSTANT s567 : STATE_TYPE := "01001101";
CONSTANT s568 : STATE_TYPE := "01001100";
CONSTANT s569 : STATE_TYPE := "01000100";
CONSTANT s570 : STATE_TYPE := "01000101";
CONSTANT s571 : STATE_TYPE := "01000111";
CONSTANT s572 : STATE_TYPE := "01000110";
CONSTANT s573 : STATE_TYPE := "01000010";
CONSTANT s574 : STATE_TYPE := "01000011";
CONSTANT s548 : STATE_TYPE := "01000001";
CONSTANT s551 : STATE_TYPE := "01000000";
CONSTANT s552 : STATE_TYPE := "11000000";
CONSTANT s575 : STATE_TYPE := "11000001";
CONSTANT s576 : STATE_TYPE := "11000011";
CONSTANT s577 : STATE_TYPE := "11000010";
CONSTANT s578 : STATE_TYPE := "11000110";
constant FETCH : state_type := "00000000";
constant s0001 : state_type := "00000001";
constant s0101 : state_type := "00000011";
constant s0201 : state_type := "00000010";
constant s0301 : state_type := "00000110";
constant s0401 : state_type := "00000111";
constant s1001 : state_type := "00000101";
constant s1101 : state_type := "00000100";
constant s1201 : state_type := "00001100";
constant s1301 : state_type := "00001101";
constant s1501 : state_type := "00001111";
constant s1601 : state_type := "00001110";
constant s1602 : state_type := "00001010";
constant s1603 : state_type := "00001011";
constant s1604 : state_type := "00001001";
constant s2601 : state_type := "00001000";
constant s2605 : state_type := "00011000";
constant s2604 : state_type := "00011001";
constant s2603 : state_type := "00011011";
constant s2602 : state_type := "00011010";
constant s2606 : state_type := "00011110";
constant s2607 : state_type := "00011111";
constant s2608 : state_type := "00011101";
constant s2609 : state_type := "00011100";
constant s2610 : state_type := "00010100";
constant s2611 : state_type := "00010101";
constant s1901 : state_type := "00010111";
constant s1902 : state_type := "00010110";
constant s2001 : state_type := "00010010";
constant s2002 : state_type := "00010011";
constant s2101 : state_type := "00010001";
constant s2102 : state_type := "00010000";
constant s2103 : state_type := "00110000";
constant s2201 : state_type := "00110001";
constant s2202 : state_type := "00110011";
constant s2203 : state_type := "00110010";
constant s2301 : state_type := "00110110";
constant s2302 : state_type := "00110111";
constant s2303 : state_type := "00110101";
constant s2304 : state_type := "00110100";
constant s2305 : state_type := "00111100";
constant s2401 : state_type := "00111101";
constant s2402 : state_type := "00111111";
constant s2403 : state_type := "00111110";
constant s2404 : state_type := "00111010";
constant s2405 : state_type := "00111011";
constant s1701 : state_type := "00111001";
constant s1702 : state_type := "00111000";
constant s1703 : state_type := "00101000";
constant s1704 : state_type := "00101001";
constant s1705 : state_type := "00101011";
constant s0901 : state_type := "00101010";
constant s0902 : state_type := "00101110";
constant s0903 : state_type := "00101111";
constant s9901 : state_type := "00101101";
constant s9903 : state_type := "00101100";
constant s9904 : state_type := "00100100";
constant s9905 : state_type := "00100101";
constant s9906 : state_type := "00100111";
constant s9902 : state_type := "00100110";
constant s2801 : state_type := "00100010";
constant s2901 : state_type := "00100011";
constant s3001 : state_type := "00100001";
constant s3101 : state_type := "00100000";
constant s1801 : state_type := "01100000";
constant s1803 : state_type := "01100001";
constant s1805 : state_type := "01100011";
constant s1806 : state_type := "01100010";
constant s1802 : state_type := "01100110";
constant s1804 : state_type := "01100111";
constant s1808 : state_type := "01100101";
constant s1807 : state_type := "01100100";
constant s1810 : state_type := "01101100";
constant s1809 : state_type := "01101101";
constant s1401 : state_type := "01101111";
constant s1403 : state_type := "01101110";
constant s1404 : state_type := "01101010";
constant s1402 : state_type := "01101011";
constant s1405 : state_type := "01101001";
constant s1406 : state_type := "01101000";
constant s1407 : state_type := "01111000";
constant s1408 : state_type := "01111001";
constant s0801 : state_type := "01111011";
constant s0803 : state_type := "01111010";
constant s0802 : state_type := "01111110";
constant s0601 : state_type := "01111111";
constant s0603 : state_type := "01111101";
constant s0604 : state_type := "01111100";
constant s0602 : state_type := "01110100";
constant s0605 : state_type := "01110101";
constant s0606 : state_type := "01110111";
constant s0607 : state_type := "01110110";
constant s0608 : state_type := "01110010";
constant s0501 : state_type := "01110011";
constant s0503 : state_type := "01110001";
constant s0505 : state_type := "01110000";
constant s0506 : state_type := "01010000";
constant s0502 : state_type := "01010001";
constant s0504 : state_type := "01010011";
constant s0507 : state_type := "01010010";
constant s0509 : state_type := "01010110";
constant s0510 : state_type := "01010111";
constant s0508 : state_type := "01010101";
constant s0701 : state_type := "01010100";
constant s0702 : state_type := "01011100";
constant s0703 : state_type := "01011101";
constant s2501 : state_type := "01011111";
constant s2503 : state_type := "01011110";
constant s2505 : state_type := "01011010";
constant s2506 : state_type := "01011011";
constant s2502 : state_type := "01011001";
constant s2504 : state_type := "01011000";
constant s2507 : state_type := "01001000";
constant s2508 : state_type := "01001001";
constant s2509 : state_type := "01001011";
constant s2510 : state_type := "01001010";
constant s2701 : state_type := "01001110";
constant s2702 : state_type := "01001111";
constant s2703 : state_type := "01001101";
constant s2704 : state_type := "01001100";
constant s2707 : state_type := "01000100";
constant s2706 : state_type := "01000101";
constant s2705 : state_type := "01000111";
constant s0905 : state_type := "01000110";
constant s0907 : state_type := "01000010";
constant s0906 : state_type := "01000011";
constant s0904 : state_type := "01000001";
constant RES : state_type := "01000000";
constant RES7 : state_type := "11000000";
 
-- Declare current and next state signals
SIGNAL current_state : STATE_TYPE;
SIGNAL next_state : STATE_TYPE;
signal current_state : state_type;
signal next_state : state_type;
 
-- Declare any pre-registered internal signals
SIGNAL d_o_cld : std_logic_vector ( 7 DOWNTO 0 );
SIGNAL rd_o_cld : std_logic ;
SIGNAL sync_o_cld : std_logic ;
SIGNAL wr_n_o_cld : std_logic ;
SIGNAL wr_o_cld : std_logic ;
signal d_o_cld : std_logic_vector ( 7 downto 0 );
signal rd_o_cld : std_logic ;
signal sync_o_cld : std_logic ;
signal wr_n_o_cld : std_logic ;
signal wr_o_cld : std_logic ;
 
BEGIN
begin
 
-----------------------------------------------------------------
clocked_proc : PROCESS (
clocked_proc : process (
clk_clk_i,
rst_rst_n_i
)
-----------------------------------------------------------------
BEGIN
IF (rst_rst_n_i = '0') THEN
begin
if (rst_rst_n_i = '0') then
current_state <= RES;
-- Default Reset Values
d_o_cld <= X"00";
307,7 → 343,7
sync_o_cld <= '0';
wr_n_o_cld <= '1';
wr_o_cld <= '0';
reg_F <= "00000100";
reg_F <= "00110100";
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_rb_in <= "00";
321,8 → 357,11
zw_b2 <= X"00";
zw_b3 <= X"00";
zw_b4 <= X"00";
zw_bit <= '0';
zw_irq <= '0';
zw_nmi <= '0';
zw_so <= '0';
ELSIF (clk_clk_i'EVENT AND clk_clk_i = '1') THEN
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);
339,6 → 378,9
zw_b2 <= zw_b2;
zw_b3 <= zw_b3;
zw_b4 <= zw_b4;
zw_bit <= zw_bit;
zw_irq <= zw_irq;
zw_nmi <= zw_nmi;
zw_so <= (zw_so OR (NOT(so_n_i))) AND (NOT(reg_F(6)));
d_o_cld <= sig_D_OUT;
rd_o_cld <= sig_RD;
347,15 → 389,25
wr_o_cld <= sig_WR;
 
-- Combined Actions
CASE current_state IS
WHEN FETCH =>
case current_state is
when FETCH =>
zw_REG_OP <= d_i;
IF ((nmi_i = '1') AND (rdy_i = '1')) THEN
sig_PC <= adr_sp_i;
ELSIF ((irq_n_i = '0' and
reg_F(2) = '0') AND (rdy_i = '1')) THEN
sig_PC <= adr_sp_i;
ELSIF ((d_i = X"69" or
if ((d_i = X"00") and (rdy_i = '1')) then
sig_PC <= adr_nxt_pc_i;
elsif ((nmi_i = '1') and (rdy_i = '1')) then
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
zw_nmi <= '0';
elsif ((irq_n_i = '0' and
reg_F(2) = '0') and (rdy_i = '1')) then
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
zw_irq <= '0';
elsif ((d_i = X"69" or
d_i = X"65" or
d_i = X"75" or
d_i = X"6D" or
362,17 → 414,16
d_i = X"7D" or
d_i = X"79" or
d_i = X"61" or
d_i = X"71") AND (rdy_i = '1')) THEN
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
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
d_i = X"1E") and (rdy_i = '1')) then
sig_PC <= adr_nxt_pc_i;
ELSIF ((d_i = X"90" or
elsif ((d_i = X"90" or
d_i = X"B0" or
d_i = X"F0" or
d_i = X"30" or
379,45 → 430,43
d_i = X"D0" or
d_i = X"10" or
d_i = X"50" or
d_i = X"70") AND (rdy_i = '1')) THEN
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
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
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
reg_F(2) <= '0';
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
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
elsif ((d_i = X"C0" or
d_i = X"C4" or
d_i = X"CC") AND (rdy_i = '1')) THEN
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
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
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
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
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
elsif ((d_i = X"49" or
d_i = X"45" or
d_i = X"55" or
d_i = X"4D" or
448,33 → 497,33
d_i = X"DD" or
d_i = X"D9" or
d_i = X"C1" or
d_i = X"D1") AND (rdy_i = '1')) THEN
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
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
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
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
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
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
elsif ((d_i = X"20") and (rdy_i = '1')) then
sig_PC <= adr_nxt_pc_i;
ELSIF ((d_i = X"A9" or
elsif ((d_i = X"A9" or
d_i = X"A5" or
d_i = X"B5" or
d_i = X"AD" or
481,64 → 530,64
d_i = X"BD" or
d_i = X"B9" or
d_i = X"A1" or
d_i = X"B1") AND (rdy_i = '1')) THEN
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
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
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
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
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
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
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
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
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
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
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
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
d_i = X"3E") and (rdy_i = '1')) then
sig_PC <= adr_nxt_pc_i;
ELSIF ((d_i = X"66" or
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
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
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
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
elsif ((d_i = X"E9" or
d_i = X"E5" or
d_i = X"F5" or
d_i = X"ED" or
545,96 → 594,96
d_i = X"FD" or
d_i = X"F9" or
d_i = X"E1" or
d_i = X"F1") AND (rdy_i = '1')) THEN
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
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
reg_F(2) <= '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
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
elsif ((d_i = X"86" or
d_i = X"96" or
d_i = X"8E") AND (rdy_i = '1')) THEN
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
elsif ((d_i = X"84" or
d_i = X"94" or
d_i = X"8C") AND (rdy_i = '1')) THEN
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
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
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
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
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
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
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
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
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
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
elsif ((d_i = X"9A") and (rdy_i = '1')) then
reg_sel_rb_out <= "01";
reg_sel_reg <= "11";
reg_sel_rb_in <= "11";
reg_sel_sp_in <= '1';
reg_sel_sp_as <= '0';
END IF;
WHEN s1 =>
IF (rdy_i = '1') THEN
end if;
when s0001 =>
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 s2 =>
IF (rdy_i = '1') THEN
end if;
when s0101 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= '1';
reg_sel_pc_in <= '0';
641,9 → 690,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s5 =>
IF (rdy_i = '1') THEN
end if;
when s0201 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(3) <= '1';
reg_sel_pc_in <= '0';
650,27 → 699,25
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s3 =>
sig_PC <= adr_pc_i;
IF (rdy_i = '1') THEN
end if;
when s0301 =>
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 s4 =>
IF (rdy_i = '1' and
zw_REG_OP = X"9A") THEN
end if;
when s0401 =>
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
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;
678,7 → 725,7
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF (rdy_i = '1') THEN
elsif (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(7) <= reg_7flag_i;
reg_F(1) <= reg_1flag_i;
686,9 → 733,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s12 =>
IF (rdy_i = '1') THEN
end if;
when s1001 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= '0';
reg_sel_pc_in <= '0';
695,9 → 742,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s16 =>
IF (rdy_i = '1') THEN
end if;
when s1101 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(3) <= '0';
reg_sel_pc_in <= '0';
704,18 → 751,17
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s17 =>
IF (rdy_i = '1') THEN
end if;
when s1201 =>
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 s24 =>
IF (rdy_i = '1') THEN
end if;
when s1301 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(6) <= '0';
reg_sel_pc_in <= '0';
722,9 → 768,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s25 =>
IF (rdy_i = '1') THEN
end if;
when s1501 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(7) <= reg_7flag_i;
reg_F(1) <= reg_1flag_i;
732,179 → 778,156
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s271 =>
IF (rdy_i = '1' and
zw_REG_OP = X"4C") THEN
end if;
when s1601 =>
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";
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"6C") THEN
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 s273 =>
IF (rdy_i = '1') THEN
end if;
when s1602 =>
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 s304 =>
IF (rdy_i = '1') THEN
sig_PC <= zw_b2 & adr_pc_i(7 downto 0);
end if;
when s1603 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
END IF;
WHEN s307 =>
IF (rdy_i = '1') THEN
end if;
when s1604 =>
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 s177 =>
IF (rdy_i = '1' and
end if;
when s2601 =>
if (rdy_i = '1' and
(zw_REG_OP = X"85" OR
zw_REG_OP = X"86" OR
zw_REG_OP = X"84")) THEN
zw_REG_OP = X"84")) then
sig_PC <= X"00" & d_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"95" OR
zw_REG_OP = X"94")) THEN
zw_REG_OP = X"94")) then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"8D" OR
zw_REG_OP = X"8E" OR
zw_REG_OP = X"8C")) THEN
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
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
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
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
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
elsif (rdy_i = '1' and
zw_REG_OP = X"96") then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
END IF;
WHEN s180 =>
IF (rdy_i = '1') THEN
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s181 =>
IF (rdy_i = '1') THEN
end if;
when s2605 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
zw_b1 <= d_alu_i;
zw_b2(0) <= reg_0flag_i;
END IF;
WHEN s182 =>
IF (rdy_i = '1') THEN
end if;
when s2604 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s183 =>
IF (rdy_i = '1') THEN
end if;
when s2603 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s184 =>
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
WHEN s185 =>
IF (rdy_i = '1') THEN
end if;
when s2602 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s186 =>
IF (rdy_i = '1') THEN
end if;
when s2606 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s187 =>
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
WHEN s188 =>
IF (rdy_i = '1') THEN
end if;
when s2607 =>
if (rdy_i = '1') then
sig_PC <= X"00" & d_alu_i;
zw_b1 <= d_i;
END IF;
WHEN s189 =>
IF (rdy_i = '1') THEN
end if;
when s2608 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s190 =>
end if;
when s2609 =>
if (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
end if;
when s2610 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
end if;
when s2611 =>
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 s191 =>
sig_PC <= zw_b3 & zw_b1;
WHEN s192 =>
sig_PC <= d_i & zw_b1;
WHEN s193 =>
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
WHEN s377 =>
IF (rdy_i = '1') THEN
when s1901 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s381 =>
end if;
when s1902 =>
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 s378 =>
IF (rdy_i = '1') THEN
when s2001 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s382 =>
end if;
when s2002 =>
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 s383 =>
IF (rdy_i = '1') THEN
when s2102 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s384 =>
IF (rdy_i = '1') THEN
end if;
when s2103 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(7) <= reg_7flag_i;
reg_F(1) <= reg_1flag_i;
912,156 → 935,142
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s385 =>
IF (rdy_i = '1') THEN
end if;
when s2202 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s386 =>
IF (rdy_i = '1') THEN
end if;
when s2203 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F <= d_i;
reg_F(7 downto 6) <= d_i(7 downto 6);
reg_F(3 downto 0) <= d_i(3 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 s387 =>
IF (rdy_i = '1') THEN
end if;
when s2301 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s388 =>
IF (rdy_i = '1') THEN
end if;
when s2302 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s389 =>
IF (rdy_i = '1') THEN
end if;
when s2303 =>
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 s391 =>
IF (rdy_i = '1') THEN
reg_sel_pc_val <= "01";
end if;
when s2304 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
zw_b1 <= d_i;
END IF;
WHEN s392 =>
IF (rdy_i = '1') THEN
end if;
when s2305 =>
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 s390 =>
IF (rdy_i = '1') THEN
end if;
when s2401 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s393 =>
IF (rdy_i = '1') THEN
end if;
when s2402 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s394 =>
IF (rdy_i = '1') THEN
end if;
when s2403 =>
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 s395 =>
IF (rdy_i = '1') THEN
end if;
when s2404 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s396 =>
IF (rdy_i = '1') THEN
end if;
when s2405 =>
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 s397 =>
IF (rdy_i = '1') THEN
end if;
when s1701 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
zw_b1 <= d_i;
END IF;
WHEN s399 =>
end if;
when s1703 =>
sig_PC <= adr_sp_i;
WHEN s400 =>
when s1704 =>
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
WHEN s401 =>
IF (rdy_i = '1') THEN
reg_sel_pc_val <= "01";
when s1705 =>
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 s526 =>
IF (rdy_i = '1') THEN
end if;
when s0901 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s527 =>
end if;
when s0902 =>
sig_PC <= adr_sp_i;
WHEN s528 =>
when s0903 =>
sig_PC <= adr_sp_i;
WHEN s529 =>
sig_PC <= X"FFFE";
WHEN s530 =>
IF (rdy_i = '1') THEN
sig_PC <= d_i & zw_b1;
reg_F(2) <= '1';
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s531 =>
IF (rdy_i = '1') THEN
sig_PC <= X"FFFF";
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
zw_b1 <= d_i;
END IF;
WHEN s544 =>
sig_PC <= adr_sp_i;
WHEN s545 =>
sig_PC <= adr_sp_i;
when s9901 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
end if;
when s9903 =>
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
WHEN s546 =>
sig_PC <= adr_pc_i;
WHEN s547 =>
IF (rdy_i = '1') THEN
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
end if;
when s9904 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
zw_b1 <= d_i;
end if;
when s9905 =>
zw_b1 <= d_i;
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
END IF;
WHEN s549 =>
IF (rdy_i = '1') THEN
reg_sel_pc_val <= "01";
end if;
when s9906 =>
reg_F(2) <= '1';
reg_F(5) <= '1';
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 s550 =>
sig_PC <= adr_sp_i;
end if;
when s9902 =>
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "00";
WHEN s404 =>
IF (rdy_i = '1') THEN
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
end if;
when s2801 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= q_a_i(7);
reg_F(7) <= reg_7flag_i;
1070,9 → 1079,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s556 =>
IF (rdy_i = '1') THEN
end if;
when s2901 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= q_a_i(0);
reg_F(7) <= reg_7flag_i;
1081,9 → 1090,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s557 =>
IF (rdy_i = '1') THEN
end if;
when s3001 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= q_a_i(7);
reg_F(0) <= q_a_i(7);
1093,9 → 1102,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s579 =>
IF (rdy_i = '1') THEN
end if;
when s3101 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(0) <= q_a_i(0);
reg_F(7) <= reg_7flag_i;
1104,20 → 1113,20
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s201 =>
IF (rdy_i = '1' and
end if;
when s1801 =>
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
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
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"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
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;
1125,12 → 1134,12
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF ((rdy_i = '1' and
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"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
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;
1138,12 → 1147,12
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF ((rdy_i = '1' and
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"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
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;
1151,15 → 1160,15
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF ((rdy_i = '1' and
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"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
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);
1170,9 → 1179,9
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF (rdy_i = '1' and
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
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;
1180,15 → 1189,15
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF (rdy_i = '1' and
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
zw_REG_OP = X"D5")) then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"AD" OR
zw_REG_OP = X"AE" OR
zw_REG_OP = X"AC" OR
1197,93 → 1206,88
zw_REG_OP = X"2D" OR
zw_REG_OP = X"CD" OR
zw_REG_OP = X"EC" OR
zw_REG_OP = X"CC")) THEN
zw_REG_OP = X"CC")) then
sig_PC <= adr_nxt_pc_i;
zw_b1 <= d_i;
ELSIF (rdy_i = '1' and
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
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
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
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
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
zw_REG_OP = X"D1")) then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
ELSIF (rdy_i = '1' and
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
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
elsif (rdy_i = '1' and
zw_REG_OP = X"B6") then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
END IF;
WHEN s202 =>
IF (rdy_i = '1') THEN
end if;
when s1803 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s210 =>
IF (rdy_i = '1') THEN
end if;
when s1805 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s211 =>
IF (rdy_i = '1') THEN
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s215 =>
IF (rdy_i = '1') THEN
end if;
when s1806 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
zw_b1 <= d_alu_i;
zw_b2(0) <= reg_0flag_i;
END IF;
WHEN s217 =>
IF (rdy_i = '1') THEN
end if;
when s1802 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s218 =>
IF (rdy_i = '1') THEN
end if;
when s1804 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s222 =>
IF (rdy_i = '1') THEN
end if;
when s1808 =>
if (rdy_i = '1') then
sig_PC <= X"00" & d_alu_i;
zw_b1 <= d_i;
END IF;
WHEN s223 =>
IF (rdy_i = '1') THEN
end if;
when s1807 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s224 =>
IF ((rdy_i = '1') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
end if;
when s1810 =>
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
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;
1291,10 → 1295,10
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
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
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;
1302,10 → 1306,10
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
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
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;
1313,13 → 1317,13
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
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_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);
1330,7 → 1334,7
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF (rdy_i = '1') THEN
elsif (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(7) <= reg_7flag_i;
reg_F(1) <= reg_1flag_i;
1338,13 → 1342,13
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s225 =>
IF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
end if;
when s1809 =>
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
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;
1352,11 → 1356,11
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
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
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;
1364,11 → 1368,11
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
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
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;
1376,14 → 1380,14
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
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_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);
1394,8 → 1398,8
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
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;
1403,53 → 1407,53
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
ELSIF (rdy_i = '1') THEN
elsif (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
END IF;
WHEN s226 =>
IF (rdy_i = '1' and
end if;
when s1401 =>
if (rdy_i = '1' and
(zw_REG_OP = X"C6" OR
zw_REG_OP = X"E6")) THEN
zw_REG_OP = X"E6")) then
sig_PC <= X"00" & d_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"D6" OR
zw_REG_OP = X"F6")) THEN
zw_REG_OP = X"F6")) then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"CE" OR
zw_REG_OP = X"EE")) THEN
zw_REG_OP = X"EE")) then
sig_PC <= adr_nxt_pc_i;
zw_b1 <= d_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
(zw_REG_OP = X"DE" OR
zw_REG_OP = X"FE")) THEN
zw_REG_OP = X"FE")) then
sig_PC <= adr_nxt_pc_i;
zw_b1 <= d_alu_i;
zw_b2(0) <= reg_0flag_i;
END IF;
WHEN s243 =>
IF (rdy_i = '1') THEN
end if;
when s1403 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s244 =>
IF (rdy_i = '1') THEN
end if;
when s1404 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s247 =>
IF (rdy_i = '1') THEN
end if;
when s1402 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s344 =>
IF (rdy_i = '1') THEN
end if;
when s1405 =>
if (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
END IF;
WHEN s343 =>
IF (rdy_i = '1') THEN
end if;
when s1406 =>
if (rdy_i = '1') then
zw_b1 <= d_alu_i;
END IF;
WHEN s251 =>
end if;
when s1408 =>
sig_PC <= adr_pc_i;
reg_F(7) <= reg_7flag_i;
reg_F(1) <= reg_1flag_i;
1457,17 → 1461,17
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
WHEN s351 =>
IF (rdy_i = '1' and
zw_REG_OP = X"24") THEN
when s0801 =>
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
elsif (rdy_i = '1' and
zw_REG_OP = X"2C") then
sig_PC <= adr_nxt_pc_i;
zw_b1 <= d_i;
END IF;
WHEN s361 =>
IF (rdy_i = '1') THEN
end if;
when s0803 =>
if (rdy_i = '1') then
sig_PC <= adr_pc_i;
reg_F(7) <= d_i(7);
reg_F(6) <= d_i(6);
1476,89 → 1480,89
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s360 =>
IF (rdy_i = '1') THEN
end if;
when s0802 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s403 =>
IF (rdy_i = '1' and
end if;
when s0601 =>
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
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
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
zw_REG_OP = X"46")) then
sig_PC <= X"00" & d_i;
ELSIF (rdy_i = '1' and
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
zw_REG_OP = X"56")) then
sig_PC <= X"00" & d_i;
zw_b1 <= d_alu_i;
ELSIF (rdy_i = '1' and
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
zw_REG_OP = X"4E")) then
sig_PC <= adr_nxt_pc_i;
zw_b1 <= d_i;
END IF;
WHEN s406 =>
IF (rdy_i = '1') THEN
end if;
when s0603 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s407 =>
IF (rdy_i = '1') THEN
end if;
when s0604 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s409 =>
IF (rdy_i = '1') THEN
end if;
when s0602 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s412 =>
IF (rdy_i = '1') THEN
end if;
when s0605 =>
if (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
END IF;
WHEN s416 =>
IF (rdy_i = '1' and
end if;
when s0607 =>
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_REG_OP = X"1E")) then
zw_b1 <= d_i(6 downto 0) & '0';
zw_b2(0) <= d_i(7);
ELSIF (rdy_i = '1' and
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_REG_OP = X"5E")) then
zw_b1 <= '0' & d_i(7 downto 1);
zw_b2(0) <= d_i(0);
ELSIF (rdy_i = '1' and
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_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
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_REG_OP = X"7E")) then
zw_b1 <= reg_F(0) & d_i(7 downto 1);
zw_b2(0) <= d_i(0);
END IF;
WHEN s418 =>
end if;
when s0608 =>
sig_PC <= adr_pc_i;
reg_F(0) <= zw_b2(0);
reg_F(7) <= reg_7flag_i;
1567,166 → 1571,194
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
WHEN s510 =>
IF (rdy_i = '1' and
zw_REG_OP = X"65") THEN
when s0501 =>
if (rdy_i = '1' and
zw_REG_OP = X"65") then
sig_PC <= X"00" & d_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '0') THEN
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(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
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
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
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
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
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
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
elsif (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '1') THEN
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_F(0) <= zw_alu(9) OR
(zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
reg_F(1) <= (NOT(zw_alu(4) OR
zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
(zw_alu(4) AND
zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(5);
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s553 =>
IF (rdy_i = '1') THEN
end if;
when s0503 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s555 =>
IF (rdy_i = '1') THEN
end if;
when s0505 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s558 =>
IF (rdy_i = '1') THEN
end if;
when s0506 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
zw_b1 <= d_alu_i;
zw_b2(0) <= reg_0flag_i;
END IF;
WHEN s560 =>
IF (rdy_i = '1') THEN
end if;
when s0502 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s561 =>
IF (rdy_i = '1') THEN
end if;
when s0504 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s563 =>
IF (rdy_i = '1') THEN
end if;
when s0507 =>
if (rdy_i = '1') then
sig_PC <= X"00" & d_alu_i;
zw_b1 <= d_i;
END IF;
WHEN s564 =>
IF (rdy_i = '1' AND
end if;
when s0509 =>
if (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(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
elsif (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
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_F(0) <= zw_alu(9) OR
(zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
reg_F(1) <= (NOT(zw_alu(4) OR
zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
(zw_alu(4) AND
zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(5);
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
elsif (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
END IF;
WHEN s565 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
end if;
when s0510 =>
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (NOT d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (d_i(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
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_F(0) <= zw_alu(9) OR
(zw_alu1(4) AND zw_alu(8) AND zw_alu(5)) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
reg_F(1) <= (NOT(zw_alu(4) OR
zw_alu(8) OR zw_alu(7) OR zw_alu(6) OR zw_alu(5) OR
zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0)) OR
(zw_alu(4) AND
zw_alu(8) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5) AND
NOT(zw_alu(3) OR zw_alu(2) OR zw_alu(1) OR zw_alu(0))));
reg_F(6) <= (zw_alu2(5) XOR q_a_i(7)) AND (NOT (q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(5);
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s566 =>
IF (rdy_i = '1') THEN
end if;
when s0508 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s266 =>
IF (rdy_i = '1' and (
end if;
when s0701 =>
zw_b3 <= adr_nxt_pc_i (15 downto 8);
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
1734,1527 → 1766,285
(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
(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
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 s301 =>
IF (rdy_i = '1' and
zw_b3 = adr_nxt_pc_i (15 downto 8)) THEN
end if;
when s0702 =>
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
elsif (rdy_i = '1') then
sig_PC <= zw_b3 & adr_nxt_pc_i (7 downto 0);
END IF;
WHEN s302 =>
IF (rdy_i = '1') THEN
end if;
when s0703 =>
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 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 s511 =>
IF (rdy_i = '1' and
zw_REG_OP = X"E5") THEN
end if;
when s2501 =>
if (rdy_i = '1' and
zw_REG_OP = X"E5") then
sig_PC <= X"00" & d_i;
ELSIF (rdy_i = '1' and
elsif (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '0') THEN
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(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
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
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
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
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
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
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
elsif (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '1') THEN
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_F(0) <= (zw_alu2(4));
reg_F(1) <= NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(6);
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s559 =>
IF (rdy_i = '1') THEN
end if;
when s2503 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
END IF;
WHEN s562 =>
IF (rdy_i = '1') THEN
end if;
when s2505 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s567 =>
IF (rdy_i = '1') THEN
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s568 =>
IF (rdy_i = '1') THEN
end if;
when s2506 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
zw_b1 <= d_alu_i;
zw_b2(0) <= reg_0flag_i;
END IF;
WHEN s569 =>
IF (rdy_i = '1') THEN
end if;
when s2502 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s570 =>
IF (rdy_i = '1') THEN
end if;
when s2504 =>
if (rdy_i = '1') then
sig_PC <= X"00" & zw_b1;
END IF;
WHEN s571 =>
IF (rdy_i = '1') THEN
end if;
when s2507 =>
if (rdy_i = '1') then
sig_PC <= d_i & zw_b1;
zw_b3 <= d_alu_i;
END IF;
WHEN s572 =>
IF (rdy_i = '1') THEN
end if;
when s2508 =>
if (rdy_i = '1') then
sig_PC <= X"00" & d_alu_i;
zw_b1 <= d_i;
END IF;
WHEN s573 =>
IF (rdy_i = '1' AND
end if;
when s2509 =>
if (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(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
elsif (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
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_F(0) <= (zw_alu2(4));
reg_F(1) <= NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(6);
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
elsif (rdy_i = '1') then
sig_PC <= zw_b3 & zw_b1;
END IF;
WHEN s574 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
end if;
when s2510 =>
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_F(7) <= zw_alu(7);
reg_F(6) <= (zw_alu(7) AND (NOT q_a_i(7)) AND (d_i(7))) OR
(NOT zw_alu(7) AND (q_a_i(7)) AND (NOT d_i(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
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_F(0) <= (zw_alu2(4));
reg_F(1) <= NOT(zw_alu2(3) OR zw_alu2(2) OR zw_alu2(1) OR zw_alu2(0) OR
zw_alu1(3) OR zw_alu1(2) OR zw_alu1(1) OR zw_alu1(0));
reg_F(6) <= (zw_alu2(3) XOR q_a_i(7)) AND ((q_a_i(7) XOR d_i(7)));
reg_F(7) <= zw_alu2(6);
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
reg_sel_sp_in <= '0';
reg_sel_sp_as <= '1';
END IF;
WHEN s548 =>
IF (rdy_i = '1') THEN
end if;
when s2701 =>
if (rdy_i = '1') then
sig_PC <= adr_sp_i;
END IF;
WHEN s551 =>
end if;
when s2702 =>
sig_PC <= adr_sp_i;
WHEN s552 =>
when s2703 =>
sig_PC <= adr_sp_i;
WHEN s575 =>
IF (rdy_i = '1') THEN
when s2704 =>
if (nmi_i = '1') then
sig_PC <= X"FFFA";
else
sig_PC <= X"FFFE";
end if;
when s2707 =>
reg_F(2) <= '1';
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 s2706 =>
if (rdy_i = '1') then
sig_PC <= X"FFFB";
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
end if;
when s2705 =>
if (rdy_i = '1') then
sig_PC <= X"FFFF";
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
reg_F(2) <= '1';
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
END IF;
WHEN s576 =>
IF (NMI_i = '1') THEN
sig_PC <= X"FFFA";
ELSE
sig_PC <= X"FFFE";
END IF;
WHEN s577 =>
IF (rdy_i = '1') THEN
end if;
when s0905 =>
if (rdy_i = '1') then
sig_PC <= X"FFFF";
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
end if;
when s0907 =>
reg_F(2) <= '1';
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 s578 =>
IF (rdy_i = '1') THEN
end if;
when s0906 =>
if (rdy_i = '1') then
sig_PC <= X"FFFB";
reg_sel_pc_in <= '1';
reg_sel_pc_val <= "11";
reg_F(2) <= '1';
reg_sel_pc_val <= "01";
zw_b1 <= d_i;
END IF;
WHEN OTHERS =>
NULL;
END CASE;
END IF;
END PROCESS clocked_proc;
end if;
when s0904 =>
if (nmi_i = '1') then
sig_PC <= X"FFFA";
else
sig_PC <= X"FFFE";
end if;
when RES =>
reg_sel_pc_in <= '0';
reg_sel_pc_val <= "00";
when RES7 =>
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 (
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 <= s548;
ELSIF ((irq_n_i = '0' and
reg_F(2) = '0') AND (rdy_i = '1')) THEN
next_state <= s548;
ELSIF ((d_i = X"69" or
d_i = X"65" or
d_i = X"75" or
d_i = X"6D" or
d_i = X"7D" or
d_i = X"79" or
d_i = X"61" or
d_i = X"71") AND (rdy_i = '1')) THEN
next_state <= s510;
ELSIF ((d_i = X"06" or
d_i = X"16" or
d_i = X"0E" or
d_i = X"1E") AND (rdy_i = '1')) THEN
next_state <= s403;
ELSIF ((d_i = X"90" or
d_i = X"B0" or
d_i = X"F0" or
d_i = X"30" or
d_i = X"D0" or
d_i = X"10" or
d_i = X"50" or
d_i = X"70") AND (rdy_i = '1')) THEN
next_state <= s266;
ELSIF ((d_i = X"24" or
d_i = X"2C") AND (rdy_i = '1')) THEN
next_state <= s351;
ELSIF ((d_i = X"00") AND (rdy_i = '1')) THEN
next_state <= s526;
ELSIF ((d_i = X"18") AND (rdy_i = '1')) THEN
next_state <= s12;
ELSIF ((d_i = X"D8") AND (rdy_i = '1')) THEN
next_state <= s16;
ELSIF ((d_i = X"58") AND (rdy_i = '1')) THEN
next_state <= s17;
ELSIF ((d_i = X"B8") AND (rdy_i = '1')) THEN
next_state <= s24;
ELSIF ((d_i = X"E0" or
d_i = X"E4" or
d_i = X"EC") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"C0" or
d_i = X"C4" or
d_i = X"CC") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"C6" or
d_i = X"D6" or
d_i = X"CE" or
d_i = X"DE") AND (rdy_i = '1')) THEN
next_state <= s226;
ELSIF ((d_i = X"CA") AND (rdy_i = '1')) THEN
next_state <= s25;
ELSIF ((d_i = X"88") AND (rdy_i = '1')) THEN
next_state <= s25;
ELSIF ((d_i = X"49" or
d_i = X"45" or
d_i = X"55" or
d_i = X"4D" or
d_i = X"5D" or
d_i = X"59" or
d_i = X"41" or
d_i = X"51" or
d_i = X"09" or
d_i = X"05" or
d_i = X"15" or
d_i = X"0D" or
d_i = X"1D" or
d_i = X"19" or
d_i = X"01" or
d_i = X"11" or
d_i = X"29" or
d_i = X"25" or
d_i = X"35" or
d_i = X"2D" or
d_i = X"3D" or
d_i = X"39" or
d_i = X"21" or
d_i = X"31" or
d_i = X"C9" or
d_i = X"C5" or
d_i = X"D5" or
d_i = X"CD" or
d_i = X"DD" or
d_i = X"D9" or
d_i = X"C1" or
d_i = X"D1") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"E6" or
d_i = X"F6" or
d_i = X"EE" or
d_i = X"FE") AND (rdy_i = '1')) THEN
next_state <= s226;
ELSIF ((d_i = X"E8") AND (rdy_i = '1')) THEN
next_state <= s25;
ELSIF ((d_i = X"C8") AND (rdy_i = '1')) THEN
next_state <= s25;
ELSIF ((d_i = X"4C" or
d_i = X"6C") AND (rdy_i = '1')) THEN
next_state <= s271;
ELSIF ((d_i = X"20") AND (rdy_i = '1')) THEN
next_state <= s397;
ELSIF ((d_i = X"A9" or
d_i = X"A5" or
d_i = X"B5" or
d_i = X"AD" or
d_i = X"BD" or
d_i = X"B9" or
d_i = X"A1" or
d_i = X"B1") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"A2" or
d_i = X"A6" or
d_i = X"B6" or
d_i = X"AE" or
d_i = X"BE") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"A0" or
d_i = X"A4" or
d_i = X"B4" or
d_i = X"AC" or
d_i = X"BC") AND (rdy_i = '1')) THEN
next_state <= s201;
ELSIF ((d_i = X"46" or
d_i = X"56" or
d_i = X"4E" or
d_i = X"5E") AND (rdy_i = '1')) THEN
next_state <= s403;
ELSIF ((d_i = X"EA") AND (rdy_i = '1')) THEN
next_state <= s1;
ELSIF ((d_i = X"48") AND (rdy_i = '1')) THEN
next_state <= s377;
ELSIF ((d_i = X"08") AND (rdy_i = '1')) THEN
next_state <= s378;
ELSIF ((d_i = X"68") AND (rdy_i = '1')) THEN
next_state <= s379;
ELSIF ((d_i = X"28") AND (rdy_i = '1')) THEN
next_state <= s380;
ELSIF ((d_i = X"26" or
d_i = X"36" or
d_i = X"2E" or
d_i = X"3E") AND (rdy_i = '1')) THEN
next_state <= s403;
ELSIF ((d_i = X"66" or
d_i = X"76" or
d_i = X"6E" or
d_i = X"7E") AND (rdy_i = '1')) THEN
next_state <= s403;
ELSIF ((d_i = X"40") AND (rdy_i = '1')) THEN
next_state <= s387;
ELSIF ((d_i = X"60") AND (rdy_i = '1')) THEN
next_state <= s390;
ELSIF ((d_i = X"E9" or
d_i = X"E5" or
d_i = X"F5" or
d_i = X"ED" or
d_i = X"FD" or
d_i = X"F9" or
d_i = X"E1" or
d_i = X"F1") AND (rdy_i = '1')) THEN
next_state <= s511;
ELSIF ((d_i = X"38") AND (rdy_i = '1')) THEN
next_state <= s2;
ELSIF ((d_i = X"F8") AND (rdy_i = '1')) THEN
next_state <= s5;
ELSIF ((d_i = X"78") AND (rdy_i = '1')) THEN
next_state <= s3;
ELSIF ((d_i = X"85" or
d_i = X"95" or
d_i = X"8D" or
d_i = X"9D" or
d_i = X"99" or
d_i = X"81" or
d_i = X"91") AND (rdy_i = '1')) THEN
next_state <= s177;
ELSIF ((d_i = X"86" or
d_i = X"96" or
d_i = X"8E") AND (rdy_i = '1')) THEN
next_state <= s177;
ELSIF ((d_i = X"84" or
d_i = X"94" or
d_i = X"8C") AND (rdy_i = '1')) THEN
next_state <= s177;
ELSIF ((d_i = X"AA") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF ((d_i = X"0A") AND (rdy_i = '1')) THEN
next_state <= s404;
ELSIF ((d_i = X"4A") AND (rdy_i = '1')) THEN
next_state <= s556;
ELSIF ((d_i = X"2A") AND (rdy_i = '1')) THEN
next_state <= s557;
ELSIF ((d_i = X"6A") AND (rdy_i = '1')) THEN
next_state <= s579;
ELSIF ((d_i = X"A8") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF ((d_i = X"98") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF ((d_i = X"BA") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF ((d_i = X"8A") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF ((d_i = X"9A") AND (rdy_i = '1')) THEN
next_state <= s4;
ELSIF (rdy_i = '1') THEN
next_state <= s1;
ELSE
next_state <= FETCH;
END IF;
WHEN s1 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s1;
END IF;
WHEN s2 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s2;
END IF;
WHEN s5 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s5;
END IF;
WHEN s3 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s3;
END IF;
WHEN s4 =>
IF (rdy_i = '1' and
zw_REG_OP = X"9A") THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"BA") THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s4;
END IF;
WHEN s12 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s12;
END IF;
WHEN s16 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s16;
END IF;
WHEN s17 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s17;
END IF;
WHEN s24 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s24;
END IF;
WHEN s25 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s25;
END IF;
WHEN s271 =>
IF (rdy_i = '1' and
zw_REG_OP = X"4C") THEN
next_state <= s307;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"6C") THEN
next_state <= s273;
ELSE
next_state <= s271;
END IF;
WHEN s273 =>
IF (rdy_i = '1') THEN
next_state <= s304;
ELSE
next_state <= s273;
END IF;
WHEN s304 =>
IF (rdy_i = '1') THEN
next_state <= s307;
ELSE
next_state <= s304;
END IF;
WHEN s307 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s307;
END IF;
WHEN s177 =>
IF (rdy_i = '1' and
(zw_REG_OP = X"85" OR
zw_REG_OP = X"86" OR
zw_REG_OP = X"84")) THEN
next_state <= s184;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"95" OR
zw_REG_OP = X"94")) THEN
next_state <= s185;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"8D" OR
zw_REG_OP = X"8E" OR
zw_REG_OP = X"8C")) THEN
next_state <= s183;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"9D") THEN
next_state <= s182;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"99") THEN
next_state <= s180;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"91") THEN
next_state <= s181;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"81") THEN
next_state <= s186;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"96") THEN
next_state <= s185;
ELSE
next_state <= s177;
END IF;
WHEN s180 =>
IF (rdy_i = '1') THEN
next_state <= s191;
ELSE
next_state <= s180;
END IF;
WHEN s181 =>
IF (rdy_i = '1') THEN
next_state <= s189;
ELSE
next_state <= s181;
END IF;
WHEN s182 =>
IF (rdy_i = '1') THEN
next_state <= s191;
ELSE
next_state <= s182;
END IF;
WHEN s183 =>
IF (rdy_i = '1') THEN
next_state <= s187;
ELSE
next_state <= s183;
END IF;
WHEN s184 =>
next_state <= FETCH;
WHEN s185 =>
IF (rdy_i = '1') THEN
next_state <= s190;
ELSE
next_state <= s185;
END IF;
WHEN s186 =>
IF (rdy_i = '1') THEN
next_state <= s188;
ELSE
next_state <= s186;
END IF;
WHEN s187 =>
next_state <= FETCH;
WHEN s188 =>
IF (rdy_i = '1') THEN
next_state <= s192;
ELSE
next_state <= s188;
END IF;
WHEN s189 =>
IF (rdy_i = '1') THEN
next_state <= s191;
ELSE
next_state <= s189;
END IF;
WHEN s190 =>
next_state <= FETCH;
WHEN s191 =>
next_state <= s193;
WHEN s192 =>
next_state <= s193;
WHEN s193 =>
next_state <= FETCH;
WHEN s377 =>
IF (rdy_i = '1') THEN
next_state <= s381;
ELSE
next_state <= s377;
END IF;
WHEN s381 =>
next_state <= FETCH;
WHEN s378 =>
IF (rdy_i = '1') THEN
next_state <= s382;
ELSE
next_state <= s378;
END IF;
WHEN s382 =>
next_state <= FETCH;
WHEN s379 =>
IF (rdy_i = '1') THEN
next_state <= s383;
ELSE
next_state <= s379;
END IF;
WHEN s383 =>
IF (rdy_i = '1') THEN
next_state <= s384;
ELSE
next_state <= s383;
END IF;
WHEN s384 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s384;
END IF;
WHEN s380 =>
IF (rdy_i = '1') THEN
next_state <= s385;
ELSE
next_state <= s380;
END IF;
WHEN s385 =>
IF (rdy_i = '1') THEN
next_state <= s386;
ELSE
next_state <= s385;
END IF;
WHEN s386 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s386;
END IF;
WHEN s387 =>
IF (rdy_i = '1') THEN
next_state <= s388;
ELSE
next_state <= s387;
END IF;
WHEN s388 =>
IF (rdy_i = '1') THEN
next_state <= s389;
ELSE
next_state <= s388;
END IF;
WHEN s389 =>
IF (rdy_i = '1') THEN
next_state <= s391;
ELSE
next_state <= s389;
END IF;
WHEN s391 =>
IF (rdy_i = '1') THEN
next_state <= s392;
ELSE
next_state <= s391;
END IF;
WHEN s392 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s392;
END IF;
WHEN s390 =>
IF (rdy_i = '1') THEN
next_state <= s393;
ELSE
next_state <= s390;
END IF;
WHEN s393 =>
IF (rdy_i = '1') THEN
next_state <= s394;
ELSE
next_state <= s393;
END IF;
WHEN s394 =>
IF (rdy_i = '1') THEN
next_state <= s395;
ELSE
next_state <= s394;
END IF;
WHEN s395 =>
IF (rdy_i = '1') THEN
next_state <= s396;
ELSE
next_state <= s395;
END IF;
WHEN s396 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s396;
END IF;
WHEN s397 =>
IF (rdy_i = '1') THEN
next_state <= s398;
ELSE
next_state <= s397;
END IF;
WHEN s398 =>
IF (rdy_i = '1') THEN
next_state <= s399;
ELSE
next_state <= s398;
END IF;
WHEN s399 =>
next_state <= s400;
WHEN s400 =>
next_state <= s401;
WHEN s401 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s401;
END IF;
WHEN s526 =>
IF (rdy_i = '1') THEN
next_state <= s527;
ELSE
next_state <= s526;
END IF;
WHEN s527 =>
next_state <= s528;
WHEN s528 =>
next_state <= s529;
WHEN s529 =>
next_state <= s531;
WHEN s530 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s530;
END IF;
WHEN s531 =>
IF (rdy_i = '1') THEN
next_state <= s530;
ELSE
next_state <= s531;
END IF;
WHEN s544 =>
next_state <= s550;
WHEN s545 =>
next_state <= s546;
WHEN s546 =>
next_state <= s547;
WHEN s547 =>
IF (rdy_i = '1') THEN
next_state <= s549;
ELSE
next_state <= s547;
END IF;
WHEN s549 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s549;
END IF;
WHEN s550 =>
next_state <= s545;
WHEN s404 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s404;
END IF;
WHEN s556 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s556;
END IF;
WHEN s557 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s557;
END IF;
WHEN s579 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s579;
END IF;
WHEN s201 =>
IF (rdy_i = '1' and
(zw_REG_OP = X"A5" OR zw_REG_OP = X"A6" OR
zw_REG_OP = X"A4" OR zw_REG_OP = X"45" OR
zw_REG_OP = X"05" OR zw_REG_OP = X"25" OR
zw_REG_OP = X"C5" OR zw_REG_OP = X"E4" OR zw_REG_OP = X"C4")) THEN
next_state <= s224;
ELSIF ((rdy_i = '1' and
(zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
zw_REG_OP = X"01" or zw_REG_OP = X"11")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' and
(zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) AND (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
zw_REG_OP = X"41" or zw_REG_OP = X"51")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' and
(zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) AND (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
zw_REG_OP = X"21" or zw_REG_OP = X"31")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' and
(zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) AND (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"A9" OR zw_REG_OP = X"A2" OR zw_REG_OP = X"A0" OR zw_REG_OP = X"E0" OR zw_REG_OP = X"C0" OR
zw_REG_OP = X"49" or zw_REG_OP = X"09" or zw_REG_OP = X"29" or zw_REG_OP = X"C9")) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"B5" OR
zw_REG_OP = X"B4" OR
zw_REG_OP = X"55" OR zw_REG_OP = X"15" OR
zw_REG_OP = X"35" OR
zw_REG_OP = X"D5")) THEN
next_state <= s217;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"AD" OR
zw_REG_OP = X"AE" OR
zw_REG_OP = X"AC" OR
zw_REG_OP = X"4D" OR
zw_REG_OP = X"0D" OR
zw_REG_OP = X"2D" OR
zw_REG_OP = X"CD" OR
zw_REG_OP = X"EC" OR
zw_REG_OP = X"CC")) THEN
next_state <= s202;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"BD" OR
zw_REG_OP = X"BC" OR
zw_REG_OP = X"5D" OR
zw_REG_OP = X"1D" OR
zw_REG_OP = X"3D" OR
zw_REG_OP = X"DD")) THEN
next_state <= s210;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"B9" OR
zw_REG_OP = X"BE" OR
zw_REG_OP = X"59" OR
zw_REG_OP = X"19" OR
zw_REG_OP = X"39" OR
zw_REG_OP = X"D9")) THEN
next_state <= s211;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"B1" OR
zw_REG_OP = X"51" OR
zw_REG_OP = X"11" OR
zw_REG_OP = X"31" OR
zw_REG_OP = X"D1")) THEN
next_state <= s215;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"A1" OR
zw_REG_OP = X"41" OR
zw_REG_OP = X"01" OR
zw_REG_OP = X"21" OR
zw_REG_OP = X"C1")) THEN
next_state <= s218;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"B6") THEN
next_state <= s217;
ELSE
next_state <= s201;
END IF;
WHEN s202 =>
IF (rdy_i = '1') THEN
next_state <= s224;
ELSE
next_state <= s202;
END IF;
WHEN s210 =>
IF (rdy_i = '1') THEN
next_state <= s225;
ELSE
next_state <= s210;
END IF;
WHEN s211 =>
IF (rdy_i = '1') THEN
next_state <= s225;
ELSE
next_state <= s211;
END IF;
WHEN s215 =>
IF (rdy_i = '1') THEN
next_state <= s223;
ELSE
next_state <= s215;
END IF;
WHEN s217 =>
IF (rdy_i = '1') THEN
next_state <= s224;
ELSE
next_state <= s217;
END IF;
WHEN s218 =>
IF (rdy_i = '1') THEN
next_state <= s222;
ELSE
next_state <= s218;
END IF;
WHEN s222 =>
IF (rdy_i = '1') THEN
next_state <= s202;
ELSE
next_state <= s222;
END IF;
WHEN s223 =>
IF (rdy_i = '1') THEN
next_state <= s225;
ELSE
next_state <= s223;
END IF;
WHEN s224 =>
IF ((rdy_i = '1') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
zw_REG_OP = X"01" or zw_REG_OP = X"11")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
zw_REG_OP = X"41" or zw_REG_OP = X"51")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
zw_REG_OP = X"21" or zw_REG_OP = X"31")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s224;
END IF;
WHEN s225 =>
IF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
zw_REG_OP = X"15" or zw_REG_OP = X"0D" or
zw_REG_OP = X"1D" or zw_REG_OP = X"19" or
zw_REG_OP = X"01" or zw_REG_OP = X"11")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
zw_REG_OP = X"55" or zw_REG_OP = X"4D" or
zw_REG_OP = X"5D" or zw_REG_OP = X"59" or
zw_REG_OP = X"41" or zw_REG_OP = X"51")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
zw_REG_OP = X"35" or zw_REG_OP = X"2D" or
zw_REG_OP = X"3D" or zw_REG_OP = X"39" or
zw_REG_OP = X"21" or zw_REG_OP = X"31")) THEN
next_state <= FETCH;
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
zw_REG_OP = X"D5" or zw_REG_OP = X"CD" or
zw_REG_OP = X"DD" or zw_REG_OP = X"D9" or
zw_REG_OP = X"C1" or zw_REG_OP = X"D1" or
zw_REG_OP = X"C0" or zw_REG_OP = X"E0" or
zw_REG_OP = X"C4" or zw_REG_OP = X"E4" or
zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' AND
zw_b2(0) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= s224;
ELSE
next_state <= s225;
END IF;
WHEN s226 =>
IF (rdy_i = '1' and
(zw_REG_OP = X"C6" OR
zw_REG_OP = X"E6")) THEN
next_state <= s343;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"D6" OR
zw_REG_OP = X"F6")) THEN
next_state <= s247;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"CE" OR
zw_REG_OP = X"EE")) THEN
next_state <= s243;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"DE" OR
zw_REG_OP = X"FE")) THEN
next_state <= s244;
ELSE
next_state <= s226;
END IF;
WHEN s243 =>
IF (rdy_i = '1') THEN
next_state <= s343;
ELSE
next_state <= s243;
END IF;
WHEN s244 =>
IF (rdy_i = '1') THEN
next_state <= s344;
ELSE
next_state <= s244;
END IF;
WHEN s247 =>
IF (rdy_i = '1') THEN
next_state <= s343;
ELSE
next_state <= s247;
END IF;
WHEN s344 =>
IF (rdy_i = '1') THEN
next_state <= s343;
ELSE
next_state <= s344;
END IF;
WHEN s343 =>
IF (rdy_i = '1') THEN
next_state <= s250;
ELSE
next_state <= s343;
END IF;
WHEN s250 =>
IF (rdy_i = '1') THEN
next_state <= s251;
ELSE
next_state <= s250;
END IF;
WHEN s251 =>
next_state <= FETCH;
WHEN s351 =>
IF (rdy_i = '1' and
zw_REG_OP = X"24") THEN
next_state <= s361;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"2C") THEN
next_state <= s360;
ELSE
next_state <= s351;
END IF;
WHEN s361 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s361;
END IF;
WHEN s360 =>
IF (rdy_i = '1') THEN
next_state <= s361;
ELSE
next_state <= s360;
END IF;
WHEN s403 =>
IF (rdy_i = '1' and
(zw_REG_OP = X"1E" or
zw_REG_OP = X"7E" or
zw_REG_OP = X"3E" or
zw_REG_OP = X"5E")) THEN
next_state <= s407;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"06" or
zw_REG_OP = X"66" or
zw_REG_OP = X"26" or
zw_REG_OP = X"46")) THEN
next_state <= s413;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"16" or
zw_REG_OP = X"76" or
zw_REG_OP = X"36" or
zw_REG_OP = X"56")) THEN
next_state <= s409;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"0E" or
zw_REG_OP = X"6E" or
zw_REG_OP = X"2E" or
zw_REG_OP = X"4E")) THEN
next_state <= s406;
ELSE
next_state <= s403;
END IF;
WHEN s406 =>
IF (rdy_i = '1') THEN
next_state <= s413;
ELSE
next_state <= s406;
END IF;
WHEN s407 =>
IF (rdy_i = '1') THEN
next_state <= s412;
ELSE
next_state <= s407;
END IF;
WHEN s409 =>
IF (rdy_i = '1') THEN
next_state <= s413;
ELSE
next_state <= s409;
END IF;
WHEN s412 =>
IF (rdy_i = '1') THEN
next_state <= s413;
ELSE
next_state <= s412;
END IF;
WHEN s413 =>
IF (rdy_i = '1') THEN
next_state <= s416;
ELSE
next_state <= s413;
END IF;
WHEN s416 =>
IF (rdy_i = '1' and
(zw_REG_OP = X"06" or
zw_REG_OP = X"16" or
zw_REG_OP = X"0E" or
zw_REG_OP = X"1E")) THEN
next_state <= s418;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"46" or
zw_REG_OP = X"56" or
zw_REG_OP = X"4E" or
zw_REG_OP = X"5E")) THEN
next_state <= s418;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"26" or
zw_REG_OP = X"36" or
zw_REG_OP = X"2E" or
zw_REG_OP = X"3E")) THEN
next_state <= s418;
ELSIF (rdy_i = '1' and
(zw_REG_OP = X"66" or
zw_REG_OP = X"76" or
zw_REG_OP = X"6E" or
zw_REG_OP = X"7E")) THEN
next_state <= s418;
ELSE
next_state <= s416;
END IF;
WHEN s418 =>
next_state <= FETCH;
WHEN s510 =>
IF (rdy_i = '1' and
zw_REG_OP = X"65") THEN
next_state <= s565;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"75") THEN
next_state <= s560;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"6D") THEN
next_state <= s553;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"7D") THEN
next_state <= s555;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"79") THEN
next_state <= s555;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"71") THEN
next_state <= s558;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"61") THEN
next_state <= s561;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s510;
END IF;
WHEN s553 =>
IF (rdy_i = '1') THEN
next_state <= s565;
ELSE
next_state <= s553;
END IF;
WHEN s555 =>
IF (rdy_i = '1') THEN
next_state <= s564;
ELSE
next_state <= s555;
END IF;
WHEN s558 =>
IF (rdy_i = '1') THEN
next_state <= s566;
ELSE
next_state <= s558;
END IF;
WHEN s560 =>
IF (rdy_i = '1') THEN
next_state <= s565;
ELSE
next_state <= s560;
END IF;
WHEN s561 =>
IF (rdy_i = '1') THEN
next_state <= s563;
ELSE
next_state <= s561;
END IF;
WHEN s563 =>
IF (rdy_i = '1') THEN
next_state <= s553;
ELSE
next_state <= s563;
END IF;
WHEN s564 =>
IF (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= s565;
ELSE
next_state <= s564;
END IF;
WHEN s565 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s565;
END IF;
WHEN s566 =>
IF (rdy_i = '1') THEN
next_state <= s564;
ELSE
next_state <= s566;
END IF;
WHEN s266 =>
IF (rdy_i = '1' and (
(reg_F(0) = '1' and zw_REG_OP = X"90") or
(reg_F(0) = '0' and zw_REG_OP = X"B0") or
(reg_F(1) = '0' and zw_REG_OP = X"F0") or
(reg_F(7) = '0' and zw_REG_OP = X"30") or
(reg_F(1) = '1' and zw_REG_OP = X"D0") or
(reg_F(7) = '1' and zw_REG_OP = X"10") or
(reg_F(6) = '1' and zw_REG_OP = X"50") or
(reg_F(6) = '0' and zw_REG_OP = X"70"))) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= s301;
ELSE
next_state <= s266;
END IF;
WHEN s301 =>
IF (rdy_i = '1' and
zw_b3 = adr_nxt_pc_i (15 downto 8)) THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= s302;
ELSE
next_state <= s301;
END IF;
WHEN s302 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s302;
END IF;
WHEN RES =>
next_state <= s544;
WHEN s511 =>
IF (rdy_i = '1' and
zw_REG_OP = X"E5") THEN
next_state <= s574;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"F5") THEN
next_state <= s569;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"ED") THEN
next_state <= s559;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"FD") THEN
next_state <= s562;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"F9") THEN
next_state <= s567;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"F1") THEN
next_state <= s568;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"E1") THEN
next_state <= s570;
ELSIF (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s511;
END IF;
WHEN s559 =>
IF (rdy_i = '1') THEN
next_state <= s574;
ELSE
next_state <= s559;
END IF;
WHEN s562 =>
IF (rdy_i = '1') THEN
next_state <= s573;
ELSE
next_state <= s562;
END IF;
WHEN s567 =>
IF (rdy_i = '1') THEN
next_state <= s573;
ELSE
next_state <= s567;
END IF;
WHEN s568 =>
IF (rdy_i = '1') THEN
next_state <= s571;
ELSE
next_state <= s568;
END IF;
WHEN s569 =>
IF (rdy_i = '1') THEN
next_state <= s574;
ELSE
next_state <= s569;
END IF;
WHEN s570 =>
IF (rdy_i = '1') THEN
next_state <= s572;
ELSE
next_state <= s570;
END IF;
WHEN s571 =>
IF (rdy_i = '1') THEN
next_state <= s573;
ELSE
next_state <= s571;
END IF;
WHEN s572 =>
IF (rdy_i = '1') THEN
next_state <= s559;
ELSE
next_state <= s572;
END IF;
WHEN s573 =>
IF (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1') THEN
next_state <= s574;
ELSE
next_state <= s573;
END IF;
WHEN s574 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
next_state <= FETCH;
ELSIF (rdy_i = '1' and
reg_F(3) = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s574;
END IF;
WHEN s548 =>
IF (rdy_i = '1') THEN
next_state <= s551;
ELSE
next_state <= s548;
END IF;
WHEN s551 =>
next_state <= s552;
WHEN s552 =>
next_state <= s576;
WHEN s575 =>
IF (rdy_i = '1') THEN
next_state <= s577;
ELSE
next_state <= s575;
END IF;
WHEN s576 =>
IF (NMI_i = '1') THEN
next_state <= s578;
ELSE
next_state <= s575;
END IF;
WHEN s577 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
ELSE
next_state <= s577;
END IF;
WHEN s578 =>
IF (rdy_i = '1') THEN
next_state <= s577;
ELSE
next_state <= s578;
END IF;
WHEN OTHERS =>
next_state <= RES;
END CASE;
END PROCESS nextstate_proc;
-----------------------------------------------------------------
output_proc : PROCESS (
adr_nxt_pc_i,
adr_pc_i,
adr_sp_i,
current_state,
3276,14 → 2066,11
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_alu,
zw_alu1,
zw_alu2,
zw_alu3,
zw_b1,
zw_b2,
zw_b3,
3290,7 → 2077,7
zw_b4
)
-----------------------------------------------------------------
BEGIN
begin
-- Default Assignment
a_o <= sig_PC;
adr_o <= X"0000";
3297,6 → 2084,8
ch_a_o <= X"00";
ch_b_o <= X"00";
d_regs_in_o <= X"00";
int_fetch_o <= '0';
int_reg_2flag_o <= reg_F(2);
ld_o <= "00";
ld_pc_o <= '0';
ld_sp_o <= '0';
3316,24 → 2105,30
sig_RWn <= '1';
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";
zw_alu <= "00" & X"00";
zw_alu1 <= "00" & X"00";
zw_alu2 <= "00" & X"00";
zw_alu3 <= "00" & X"00";
zw_alu4 <= "00" & X"00";
zw_ninebits4 <= '0' & X"00";
 
-- Combined Actions
CASE current_state IS
WHEN FETCH =>
case current_state is
when FETCH =>
sig_RWn <= '1';
sig_RD <= '1';
sig_SYNC <= NOT (rdy_i);
IF ((nmi_i = '1') AND (rdy_i = '1')) THEN
ELSIF ((irq_n_i = '0' and
reg_F(2) = '0') AND (rdy_i = '1')) THEN
ELSIF ((d_i = X"69" or
int_fetch_o <= '1';
if ((d_i = X"00") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
next_state <= s0901;
elsif ((nmi_i = '1') and (rdy_i = '1')) then
next_state <= s2701;
elsif ((irq_n_i = '0' and
reg_F(2) = '0') and (rdy_i = '1')) then
next_state <= s2701;
elsif ((d_i = X"69" or
d_i = X"65" or
d_i = X"75" or
d_i = X"6D" or
3340,16 → 2135,18
d_i = X"7D" or
d_i = X"79" or
d_i = X"61" or
d_i = X"71") AND (rdy_i = '1')) THEN
d_i = X"71") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"06" or
next_state <= s0501;
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
d_i = X"1E") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"90" or
next_state <= s0601;
elsif ((d_i = X"90" or
d_i = X"B0" or
d_i = X"F0" or
d_i = X"30" or
3356,51 → 2153,59
d_i = X"D0" or
d_i = X"10" or
d_i = X"50" or
d_i = X"70") AND (rdy_i = '1')) THEN
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
next_state <= s0701;
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
next_state <= s0801;
elsif ((d_i = X"18") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"18") AND (rdy_i = '1')) THEN
next_state <= s1001;
elsif ((d_i = X"D8") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"D8") AND (rdy_i = '1')) THEN
next_state <= s1101;
elsif ((d_i = X"58") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"58") AND (rdy_i = '1')) THEN
next_state <= s1201;
elsif ((d_i = X"B8") 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
next_state <= s1301;
elsif ((d_i = X"E0" or
d_i = X"E4" or
d_i = X"EC") AND (rdy_i = '1')) THEN
d_i = X"EC") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"C0" or
next_state <= s1801;
elsif ((d_i = X"C0" or
d_i = X"C4" or
d_i = X"CC") AND (rdy_i = '1')) THEN
d_i = X"CC") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"C6" or
next_state <= s1801;
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
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
next_state <= s1401;
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
next_state <= s1501;
elsif ((d_i = X"88") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"49" or
next_state <= s1501;
elsif ((d_i = X"49" or
d_i = X"45" or
d_i = X"55" or
d_i = X"4D" or
3431,29 → 2236,35
d_i = X"DD" or
d_i = X"D9" or
d_i = X"C1" or
d_i = X"D1") AND (rdy_i = '1')) THEN
d_i = X"D1") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"E6" or
next_state <= s1801;
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
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
next_state <= s1401;
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
next_state <= s1501;
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
next_state <= s1501;
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
next_state <= s1601;
elsif ((d_i = X"20") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"A9" or
next_state <= s1701;
elsif ((d_i = X"A9" or
d_i = X"A5" or
d_i = X"B5" or
d_i = X"AD" or
3460,63 → 2271,76
d_i = X"BD" or
d_i = X"B9" or
d_i = X"A1" or
d_i = X"B1") AND (rdy_i = '1')) THEN
d_i = X"B1") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"A2" or
next_state <= s1801;
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
d_i = X"BE") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"A0" or
next_state <= s1801;
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
d_i = X"BC") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"46" or
next_state <= s1801;
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
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
next_state <= s0601;
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
next_state <= s0001;
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
next_state <= s1901;
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
next_state <= s2001;
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
next_state <= s2101;
elsif ((d_i = X"28") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"26" or
next_state <= s2201;
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
d_i = X"3E") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"66" or
next_state <= s0601;
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
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
next_state <= s0601;
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
next_state <= s2301;
elsif ((d_i = X"60") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"E9" or
next_state <= s2401;
elsif ((d_i = X"E9" or
d_i = X"E5" or
d_i = X"F5" or
d_i = X"ED" or
3523,155 → 2347,224
d_i = X"FD" or
d_i = X"F9" or
d_i = X"E1" or
d_i = X"F1") AND (rdy_i = '1')) THEN
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
next_state <= s2501;
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
next_state <= s0101;
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
next_state <= s0201;
elsif ((d_i = X"78") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"85" or
next_state <= s0301;
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
d_i = X"91") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"86" or
next_state <= s2601;
elsif ((d_i = X"86" or
d_i = X"96" or
d_i = X"8E") AND (rdy_i = '1')) THEN
d_i = X"8E") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF ((d_i = X"84" or
next_state <= s2601;
elsif ((d_i = X"84" or
d_i = X"94" or
d_i = X"8C") AND (rdy_i = '1')) THEN
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
next_state <= s2601;
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
next_state <= s0401;
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
next_state <= s2801;
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
next_state <= s2901;
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
next_state <= s3001;
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
next_state <= s3101;
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
next_state <= s0401;
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
next_state <= s0401;
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
next_state <= s0401;
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
next_state <= s0401;
elsif ((d_i = X"9A") and (rdy_i = '1')) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1') THEN
next_state <= s0401;
elsif (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s1 =>
IF (rdy_i = '1') THEN
next_state <= s0001;
else
next_state <= FETCH;
end if;
when s0001 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s2 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0001;
end if;
when s0101 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s5 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0101;
end if;
when s0201 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s3 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0201;
end if;
when s0301 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s4 =>
IF (rdy_i = '1' and
zw_REG_OP = X"9A") THEN
next_state <= FETCH;
else
next_state <= s0301;
end if;
when s0401 =>
if (rdy_i = '1' and
zw_REG_OP = X"9A") then
adr_o <= X"01" & d_regs_out_i;
ld_o <= "11";
ld_sp_o <= '1';
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
zw_REG_OP = X"BA") THEN
next_state <= FETCH;
elsif (rdy_i = '1' and
zw_REG_OP = X"BA") then
d_regs_in_o <= adr_sp_i (7 downto 0);
ch_a_o <= adr_sp_i (7 downto 0);
ch_b_o <= X"00";
load_regs_o <= '1';
sig_SYNC <= '1';
ELSIF (rdy_i = '1') THEN
next_state <= FETCH;
elsif (rdy_i = '1') then
ch_a_o <= d_regs_out_i;
ch_b_o <= X"00";
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s12 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0401;
end if;
when s1001 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s16 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1001;
end if;
when s1101 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s17 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1101;
end if;
when s1201 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s24 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1201;
end if;
when s1301 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s25 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1301;
end if;
when s1501 =>
if (rdy_i = '1') then
d_regs_in_o <= d_alu_i;
ch_a_o <= d_regs_out_i;
ch_b_o <= zw_b4;
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s273 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1501;
end if;
when s1601 =>
if (rdy_i = '1' and
zw_REG_OP = X"4C") then
ld_pc_o <= '1';
next_state <= s1604;
elsif (rdy_i = '1' and
zw_REG_OP = X"6C") then
next_state <= s1602;
else
next_state <= s1601;
end if;
when s1602 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s307 =>
IF (rdy_i = '1') THEN
next_state <= s1603;
else
next_state <= s1602;
end if;
when s1603 =>
if (rdy_i = '1') then
next_state <= s1604;
else
next_state <= s1603;
end if;
when s1604 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s177 =>
IF (rdy_i = '1' and
next_state <= FETCH;
else
next_state <= s1604;
end if;
when s2601 =>
if (rdy_i = '1' and
(zw_REG_OP = X"85" OR
zw_REG_OP = X"86" OR
zw_REG_OP = X"84")) THEN
zw_REG_OP = X"84")) then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
3678,65 → 2571,72
sig_D_OUT <= d_regs_out_i;
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s2611;
elsif (rdy_i = '1' and
(zw_REG_OP = X"95" OR
zw_REG_OP = X"94")) THEN
zw_REG_OP = X"94")) then
ch_a_o <= d_i;
ch_b_o <= q_x_i;
ELSIF (rdy_i = '1' and
next_state <= s2602;
elsif (rdy_i = '1' and
(zw_REG_OP = X"8D" OR
zw_REG_OP = X"8E" OR
zw_REG_OP = X"8C")) THEN
zw_REG_OP = X"8C")) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
zw_REG_OP = X"9D") THEN
next_state <= s2603;
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
next_state <= s2604;
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
next_state <= s2604;
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
next_state <= s2605;
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
next_state <= s2606;
elsif (rdy_i = '1' and
zw_REG_OP = X"96") then
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s180 =>
IF (rdy_i = '1') THEN
next_state <= s2602;
else
next_state <= s2601;
end if;
when s2605 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s181 =>
IF (rdy_i = '1') THEN
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s182 =>
sig_RWn <= '1';
sig_RD <= '1';
IF (rdy_i = '1') THEN
next_state <= s2608;
else
next_state <= s2605;
end if;
when s2604 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s183 =>
IF (rdy_i = '1') THEN
next_state <= s2609;
else
next_state <= s2604;
end if;
when s2603 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
3743,11 → 2643,12
sig_D_OUT <= d_regs_out_i;
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s184 =>
sig_SYNC <= '1';
WHEN s185 =>
IF (rdy_i = '1') THEN
next_state <= s2611;
else
next_state <= s2603;
end if;
when s2602 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
3754,39 → 2655,61
sig_D_OUT <= d_regs_out_i;
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s187 =>
sig_SYNC <= '1';
WHEN s188 =>
IF (rdy_i = '1') THEN
next_state <= s2611;
else
next_state <= s2602;
end if;
when s2606 =>
if (rdy_i = '1') then
next_state <= s2607;
else
next_state <= s2606;
end if;
when s2607 =>
if (rdy_i = '1') then
ch_a_o <= zw_b1;
ch_b_o <= X"01";
END IF;
WHEN s189 =>
IF (rdy_i = '1') THEN
next_state <= s2610;
else
next_state <= s2607;
end if;
when s2608 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s190 =>
next_state <= s2609;
else
next_state <= s2608;
end if;
when s2609 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= d_regs_out_i;
next_state <= s2611;
else
next_state <= s2609;
end if;
when s2610 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= d_regs_out_i;
ld_o <= "11";
ld_pc_o <= '1';
next_state <= s2611;
else
next_state <= s2610;
end if;
when s2611 =>
sig_SYNC <= '1';
WHEN s191 =>
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= d_regs_out_i;
WHEN s192 =>
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= d_regs_out_i;
ld_o <= "11";
ld_pc_o <= '1';
WHEN s193 =>
sig_SYNC <= '1';
WHEN s377 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
when s1901 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
3793,98 → 2716,172
sig_D_OUT <= q_a_i;
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s381 =>
next_state <= s1902;
else
next_state <= s1901;
end if;
when s1902 =>
sig_SYNC <= '1';
WHEN s378 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
when s2001 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= reg_F;
sig_D_OUT <= reg_F OR X"30";
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s382 =>
next_state <= s2002;
else
next_state <= s2001;
end if;
when s2002 =>
sig_SYNC <= '1';
WHEN s379 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
when s2101 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s384 =>
IF (rdy_i = '1') THEN
next_state <= s2102;
else
next_state <= s2101;
end if;
when s2102 =>
if (rdy_i = '1') then
next_state <= s2103;
else
next_state <= s2102;
end if;
when s2103 =>
if (rdy_i = '1') then
d_regs_in_o <= d_i;
load_regs_o <= '1';
ch_a_o <= d_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
END IF;
WHEN s380 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2103;
end if;
when s2201 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s386 =>
IF (rdy_i = '1') THEN
next_state <= s2202;
else
next_state <= s2201;
end if;
when s2202 =>
if (rdy_i = '1') then
next_state <= s2203;
else
next_state <= s2202;
end if;
when s2203 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s387 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2203;
end if;
when s2301 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s388 =>
IF (rdy_i = '1') THEN
next_state <= s2302;
else
next_state <= s2301;
end if;
when s2302 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s389 =>
IF (rdy_i = '1') THEN
next_state <= s2303;
else
next_state <= s2302;
end if;
when s2303 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s392 =>
IF (rdy_i = '1') THEN
next_state <= s2304;
else
next_state <= s2303;
end if;
when s2304 =>
if (rdy_i = '1') then
next_state <= s2305;
else
next_state <= s2304;
end if;
when s2305 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s390 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2305;
end if;
when s2401 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s393 =>
IF (rdy_i = '1') THEN
next_state <= s2402;
else
next_state <= s2401;
end if;
when s2402 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
END IF;
WHEN s395 =>
IF (rdy_i = '1') THEN
next_state <= s2403;
else
next_state <= s2402;
end if;
when s2403 =>
if (rdy_i = '1') then
next_state <= s2404;
else
next_state <= s2403;
end if;
when s2404 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s396 =>
IF (rdy_i = '1') THEN
next_state <= s2405;
else
next_state <= s2404;
end if;
when s2405 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN s397 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2405;
end if;
when s1701 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
ld_pc_o <= '1';
END IF;
WHEN s398 =>
IF (rdy_i = '1') THEN
next_state <= s1702;
else
next_state <= s1701;
end if;
when s1702 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (15 downto 8);
END IF;
WHEN s399 =>
next_state <= s1703;
else
next_state <= s1702;
end if;
when s1703 =>
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
3891,15 → 2888,21
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (7 downto 0);
WHEN s401 =>
IF (rdy_i = '1') THEN
next_state <= s1704;
when s1704 =>
next_state <= s1705;
when s1705 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s526 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s1705;
end if;
when s0901 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
ld_pc_o <= '1';
3906,9 → 2909,12
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (15 downto 8);
END IF;
WHEN s527 =>
sig_D_OUT <= adr_nxt_pc_i (15 downto 8);
next_state <= s0902;
else
next_state <= s0901;
end if;
when s0902 =>
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
3915,86 → 2921,124
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (7 downto 0);
WHEN s528 =>
next_state <= s0903;
when s0903 =>
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= reg_F OR X"10";
WHEN s530 =>
IF (rdy_i = '1') THEN
adr_o <= d_i & zw_b1;
sig_D_OUT <= reg_F OR
("001" & '1' & X"0");
next_state <= s0904;
when s9901 =>
ld_sp_o <= '1';
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s544 =>
ld_o <= "11";
ld_sp_o <= '1';
WHEN s545 =>
next_state <= s9902;
else
next_state <= s9901;
end if;
when s9903 =>
adr_o <= X"FFFB";
ld_o <= "11";
ld_pc_o <= '1';
WHEN s546 =>
ld_o <= "11";
if (rdy_i = '1') then
ld_o <= "11";
next_state <= s9904;
else
next_state <= s9903;
end if;
when s9904 =>
ld_pc_o <= '1';
WHEN s549 =>
IF (rdy_i = '1') THEN
if (rdy_i = '1') then
ld_o <= "11";
next_state <= s9905;
else
next_state <= s9904;
end if;
when s9905 =>
if (rdy_i = '1') then
next_state <= s9906;
else
next_state <= s9905;
end if;
when s9906 =>
ld_pc_o <= '1';
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s550 =>
ld_o <= "11";
next_state <= FETCH;
else
next_state <= s9906;
end if;
when s9902 =>
ld_sp_o <= '1';
WHEN s404 =>
IF (rdy_i = '1') THEN
if (rdy_i = '1') then
ld_o <= "11";
next_state <= s9903;
else
next_state <= s9902;
end if;
when s2801 =>
if (rdy_i = '1') then
ch_a_o <= q_a_i (6 downto 0) & '0';
ch_b_o <= X"00";
d_regs_in_o <= q_a_i (6 downto 0) & '0';
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s556 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2801;
end if;
when s2901 =>
if (rdy_i = '1') then
ch_a_o <= '0' & q_a_i (7 downto 1);
ch_b_o <= X"00";
d_regs_in_o <= '0' & q_a_i (7 downto 1);
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s557 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2901;
end if;
when s3001 =>
if (rdy_i = '1') then
ch_a_o <= q_a_i (6 downto 0) & reg_F(0);
ch_b_o <= X"00";
d_regs_in_o <= q_a_i (6 downto 0) & reg_F(0);
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s579 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s3001;
end if;
when s3101 =>
if (rdy_i = '1') then
ch_a_o <= reg_F(0) & q_a_i (7 downto 1);
ch_b_o <= X"00";
d_regs_in_o <= reg_F(0) & q_a_i (7 downto 1);
load_regs_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN s201 =>
IF (rdy_i = '1' and
next_state <= FETCH;
else
next_state <= s3101;
end if;
when s1801 =>
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
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
next_state <= s1810;
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"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
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;
4002,12 → 3046,13
ch_a_o <= d_i OR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' and
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"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
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;
4015,12 → 3060,13
ch_a_o <= d_i XOR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' and
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"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
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;
4028,22 → 3074,24
ch_a_o <= d_i AND q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' and
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"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
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;
zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
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
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;
4051,15 → 3099,17
ch_a_o <= d_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
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
zw_REG_OP = X"D5")) then
ch_a_o <= d_i;
ch_b_o <= q_x_i;
ELSIF (rdy_i = '1' and
next_state <= s1802;
elsif (rdy_i = '1' and
(zw_REG_OP = X"AD" OR
zw_REG_OP = X"AE" OR
zw_REG_OP = X"AC" OR
4068,503 → 3118,718
zw_REG_OP = X"2D" OR
zw_REG_OP = X"CD" OR
zw_REG_OP = X"EC" OR
zw_REG_OP = X"CC")) THEN
zw_REG_OP = X"CC")) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s1803;
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
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
next_state <= s1805;
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
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
next_state <= s1805;
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
zw_REG_OP = X"D1")) then
ch_a_o <= d_i;
ch_b_o <= X"01";
ELSIF (rdy_i = '1' and
next_state <= s1806;
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
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
next_state <= s1804;
elsif (rdy_i = '1' and
zw_REG_OP = X"B6") then
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s202 =>
IF (rdy_i = '1') THEN
next_state <= s1802;
else
next_state <= s1801;
end if;
when s1803 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s210 =>
IF (rdy_i = '1') THEN
next_state <= s1810;
else
next_state <= s1803;
end if;
when s1805 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s211 =>
IF (rdy_i = '1') THEN
next_state <= s1809;
else
next_state <= s1805;
end if;
when s1806 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s215 =>
IF (rdy_i = '1') THEN
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s217 =>
IF (rdy_i = '1') THEN
next_state <= s1807;
else
next_state <= s1806;
end if;
when s1802 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s222 =>
IF (rdy_i = '1') THEN
next_state <= s1810;
else
next_state <= s1802;
end if;
when s1804 =>
if (rdy_i = '1') then
next_state <= s1808;
else
next_state <= s1804;
end if;
when s1808 =>
if (rdy_i = '1') then
ch_a_o <= zw_b1;
ch_b_o <= X"01";
END IF;
WHEN s223 =>
IF (rdy_i = '1') THEN
next_state <= s1803;
else
next_state <= s1808;
end if;
when s1807 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s224 =>
IF ((rdy_i = '1') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
next_state <= s1809;
else
next_state <= s1807;
end if;
when s1810 =>
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
zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
d_regs_in_o <= d_i OR q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i OR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
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
zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
d_regs_in_o <= d_i XOR q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i XOR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
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
zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
d_regs_in_o <= d_i AND q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i AND q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1') AND (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
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
zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1;
zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
sig_SYNC <= '1';
ELSIF (rdy_i = '1') THEN
next_state <= FETCH;
elsif (rdy_i = '1') then
d_regs_in_o <= d_i;
load_regs_o <= '1';
ch_a_o <= d_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
END IF;
WHEN s225 =>
IF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"09" or zw_REG_OP = X"05" or
next_state <= FETCH;
else
next_state <= s1810;
end if;
when s1809 =>
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
zw_REG_OP = X"01" or zw_REG_OP = X"11")) then
d_regs_in_o <= d_i OR q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i OR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"49" or zw_REG_OP = X"45" or
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
zw_REG_OP = X"41" or zw_REG_OP = X"51")) then
d_regs_in_o <= d_i XOR q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i XOR q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"29" or zw_REG_OP = X"25" or
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
zw_REG_OP = X"21" or zw_REG_OP = X"31")) then
d_regs_in_o <= d_i AND q_a_i;
load_regs_o <= '1';
ch_a_o <= d_i AND q_a_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
ELSIF ((rdy_i = '1' AND
zw_b2(0) = '0') AND (zw_REG_OP = X"C9" or zw_REG_OP = X"C5" or
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
zw_ALU <= unsigned ('0' & d_regs_out_i) + unsigned ('0' & NOT (d_i)) + 1;
zw_REG_OP = X"CC" or zw_REG_OP = X"EC")) then
zw_ALU <= unsigned ("00" & d_regs_out_i) + unsigned ("00" & NOT (d_i)) + 1;
sig_SYNC <= '1';
ELSIF (rdy_i = '1' AND
zw_b2(0) = '0') THEN
next_state <= FETCH;
elsif (rdy_i = '1' AND
zw_b2(0) = '0') then
d_regs_in_o <= d_i;
load_regs_o <= '1';
ch_a_o <= d_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
END IF;
WHEN s226 =>
IF (rdy_i = '1' and
next_state <= FETCH;
elsif (rdy_i = '1') then
next_state <= s1810;
else
next_state <= s1809;
end if;
when s1401 =>
if (rdy_i = '1' and
(zw_REG_OP = X"C6" OR
zw_REG_OP = X"E6")) THEN
zw_REG_OP = X"E6")) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s1406;
elsif (rdy_i = '1' and
(zw_REG_OP = X"D6" OR
zw_REG_OP = X"F6")) THEN
zw_REG_OP = X"F6")) then
ch_a_o <= d_i;
ch_b_o <= q_x_i;
ELSIF (rdy_i = '1' and
next_state <= s1402;
elsif (rdy_i = '1' and
(zw_REG_OP = X"CE" OR
zw_REG_OP = X"EE")) THEN
zw_REG_OP = X"EE")) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s1403;
elsif (rdy_i = '1' and
(zw_REG_OP = X"DE" OR
zw_REG_OP = X"FE")) THEN
zw_REG_OP = X"FE")) then
ld_o <= "11";
ld_pc_o <= '1';
ch_a_o <= d_i;
ch_b_o <= q_x_i;
END IF;
WHEN s243 =>
IF (rdy_i = '1') THEN
next_state <= s1404;
else
next_state <= s1401;
end if;
when s1403 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s244 =>
IF (rdy_i = '1') THEN
next_state <= s1406;
else
next_state <= s1403;
end if;
when s1404 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s247 =>
IF (rdy_i = '1') THEN
next_state <= s1405;
else
next_state <= s1404;
end if;
when s1402 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s343 =>
IF (rdy_i = '1') THEN
next_state <= s1406;
else
next_state <= s1402;
end if;
when s1405 =>
if (rdy_i = '1') then
next_state <= s1406;
else
next_state <= s1405;
end if;
when s1406 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= zw_b4;
END IF;
WHEN s250 =>
IF (rdy_i = '1') THEN
next_state <= s1407;
else
next_state <= s1406;
end if;
when s1407 =>
if (rdy_i = '1') then
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= zw_b1;
END IF;
WHEN s251 =>
next_state <= s1408;
else
next_state <= s1407;
end if;
when s1408 =>
ch_a_o <= zw_b1;
ch_b_o <= X"00";
sig_SYNC <= '1';
WHEN s351 =>
IF (rdy_i = '1' and
zw_REG_OP = X"24") THEN
next_state <= FETCH;
when s0801 =>
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
next_state <= s0803;
elsif (rdy_i = '1' and
zw_REG_OP = X"2C") then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s361 =>
IF (rdy_i = '1') THEN
next_state <= s0802;
else
next_state <= s0801;
end if;
when s0803 =>
if (rdy_i = '1') then
ch_a_o <= q_a_i AND d_i;
ch_b_o <= X"00";
sig_SYNC <= '1';
END IF;
WHEN s360 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0803;
end if;
when s0802 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s403 =>
IF (rdy_i = '1' and
next_state <= s0803;
else
next_state <= s0802;
end if;
when s0601 =>
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
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
next_state <= s0604;
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
zw_REG_OP = X"46")) then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s0606;
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
zw_REG_OP = X"56")) then
ch_a_o <= d_i;
ch_b_o <= q_x_i;
ELSIF (rdy_i = '1' and
next_state <= s0602;
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
zw_REG_OP = X"4E")) then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s406 =>
IF (rdy_i = '1') THEN
next_state <= s0603;
else
next_state <= s0601;
end if;
when s0603 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s407 =>
IF (rdy_i = '1') THEN
next_state <= s0606;
else
next_state <= s0603;
end if;
when s0604 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= "0000000" & zw_b2(0);
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s409 =>
IF (rdy_i = '1') THEN
next_state <= s0605;
else
next_state <= s0604;
end if;
when s0602 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s416 =>
IF (rdy_i = '1' and
next_state <= s0606;
else
next_state <= s0602;
end if;
when s0605 =>
if (rdy_i = '1') then
next_state <= s0606;
else
next_state <= s0605;
end if;
when s0606 =>
if (rdy_i = '1') then
next_state <= s0607;
else
next_state <= s0606;
end if;
when s0607 =>
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_REG_OP = X"1E")) then
sig_D_OUT <= d_i(6 downto 0) & '0';
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
ELSIF (rdy_i = '1' and
next_state <= s0608;
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_REG_OP = X"5E")) then
sig_D_OUT <= '0' & d_i(7 downto 1);
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
ELSIF (rdy_i = '1' and
next_state <= s0608;
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_REG_OP = X"3E")) then
sig_D_OUT <= d_i(6 downto 0) & reg_F(0);
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
ELSIF (rdy_i = '1' and
next_state <= s0608;
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_REG_OP = X"7E")) then
sig_D_OUT <= reg_F(0) & d_i(7 downto 1);
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
END IF;
WHEN s418 =>
next_state <= s0608;
else
next_state <= s0607;
end if;
when s0608 =>
ch_a_o <= zw_b1;
ch_b_o <= X"00";
sig_SYNC <= '1';
WHEN s510 =>
IF (rdy_i = '1' and
zw_REG_OP = X"65") THEN
next_state <= FETCH;
when s0501 =>
if (rdy_i = '1' and
zw_REG_OP = X"65") then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s0510;
elsif (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '0') THEN
reg_F(3) = '0') then
ld_o <= "11";
ld_pc_o <= '1';
d_regs_in_o <= zw_ALU(7 downto 0);
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
zw_REG_OP = X"75") THEN
next_state <= FETCH;
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
next_state <= s0502;
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
next_state <= s0503;
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
next_state <= s0505;
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
next_state <= s0505;
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
next_state <= s0506;
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
next_state <= s0504;
elsif (rdy_i = '1' and
zw_REG_OP = X"69" and
reg_F(3) = '1') THEN
reg_F(3) = '1') then
ld_o <= "11";
ld_pc_o <= '1';
d_regs_in_o <= zw_ALU(7 downto 0);
d_regs_in_o <= zw_alu3(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_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
unsigned (zw_alu(8 downto 5));
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(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
unsigned (zw_alu(3 downto 0));
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);
zw_alu2(3 downto 0) <= '0' &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
zw_alu1(4);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
(NOT(zw_alu1(4)) AND zw_alu(8)) OR
(zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
zw_alu2(6) <= zw_alu(9) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
zw_alu1(4) <= zw_alu(4) OR
(zw_alu(3) AND zw_alu(2)) OR
(zw_alu(3) AND zw_alu(1));
zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s553 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0501;
end if;
when s0503 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s555 =>
IF (rdy_i = '1') THEN
next_state <= s0510;
else
next_state <= s0503;
end if;
when s0505 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= X"01";
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s558 =>
IF (rdy_i = '1') THEN
next_state <= s0509;
else
next_state <= s0505;
end if;
when s0506 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s560 =>
IF (rdy_i = '1') THEN
next_state <= s0508;
else
next_state <= s0506;
end if;
when s0502 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s563 =>
IF (rdy_i = '1') THEN
next_state <= s0510;
else
next_state <= s0502;
end if;
when s0504 =>
if (rdy_i = '1') then
next_state <= s0507;
else
next_state <= s0504;
end if;
when s0507 =>
if (rdy_i = '1') then
ch_a_o <= zw_b1;
ch_b_o <= X"01";
END IF;
WHEN s564 =>
IF (rdy_i = '1' AND
next_state <= s0503;
else
next_state <= s0507;
end if;
when s0509 =>
if (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' AND
next_state <= FETCH;
elsif (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
reg_F(3) = '1') then
d_regs_in_o <= zw_alu3(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_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
unsigned (zw_alu(8 downto 5));
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(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
unsigned (zw_alu(3 downto 0));
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);
zw_alu2(3 downto 0) <= '0' &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
zw_alu1(4);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
(NOT(zw_alu1(4)) AND zw_alu(8)) OR
(zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
zw_alu2(6) <= zw_alu(9) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
zw_alu1(4) <= zw_alu(4) OR
(zw_alu(3) AND zw_alu(2)) OR
(zw_alu(3) AND zw_alu(1));
zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s565 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
next_state <= FETCH;
elsif (rdy_i = '1') then
next_state <= s0510;
else
next_state <= s0509;
end if;
when s0510 =>
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & d_i) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
reg_F(3) = '1') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
next_state <= FETCH;
elsif (rdy_i = '1' and
reg_F(3) = '1') then
d_regs_in_o <= zw_alu3(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_alu3(7 downto 4) <= unsigned (zw_alu2(3 downto 0)) +
unsigned (zw_alu(8 downto 5));
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(3 downto 0) <= unsigned (zw_alu1(3 downto 0)) +
unsigned (zw_alu(3 downto 0));
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);
zw_alu2(3 downto 0) <= '0' &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
(zw_alu2(6) OR (zw_alu2(4) AND zw_alu1(4))) &
zw_alu1(4);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu(8) AND (NOT(zw_alu(5)) OR NOT(zw_alu(6)) OR NOT(zw_alu(7)))) OR
(NOT(zw_alu1(4)) AND zw_alu(8)) OR
(zw_alu1(4) AND NOT(zw_alu(8)) AND zw_alu(7) AND zw_alu(6) AND zw_alu(5));
zw_alu2(6) <= zw_alu(9) OR
(zw_alu(8) AND zw_alu(7)) OR
(zw_alu(8) AND zw_alu(6));
zw_alu2(4) <= (zw_alu(8) AND NOT(zw_alu(7)) AND NOT(zw_alu(6)) AND zw_alu(5));
zw_alu1(3 downto 0) <= '0' & ((zw_alu1(4))) & ((zw_alu1(4))) & '0';
zw_alu1(4) <= zw_alu(4) OR
(zw_alu(3) AND zw_alu(2)) OR
(zw_alu(3) AND zw_alu(1));
zw_alu(9 downto 5) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & d_i(7 downto 4));
zw_alu(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & d_i(3 downto 0)) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s566 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s0510;
end if;
when s0508 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= X"01";
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s266 =>
IF (rdy_i = '1' and (
next_state <= s0509;
else
next_state <= s0508;
end if;
when s0701 =>
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
4572,196 → 3837,282
(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
(reg_F(6) = '0' and zw_REG_OP = X"70"))) then
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
ELSIF (rdy_i = '1') THEN
next_state <= FETCH;
elsif (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s301 =>
IF (rdy_i = '1' and
zw_b3 = adr_nxt_pc_i (15 downto 8)) THEN
next_state <= s0702;
else
next_state <= s0701;
end if;
when s0702 =>
if (rdy_i = '1' and
zw_b3 = adr_nxt_pc_i (15 downto 8)) then
offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) &
zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0));
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
ELSIF (rdy_i = '1') THEN
offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) &
zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(6 downto 0));
next_state <= FETCH;
elsif (rdy_i = '1') then
offset_o <= (zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7)
& zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7) & zw_b2(7)
& zw_b2(6 downto 0));
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s302 =>
IF (rdy_i = '1') THEN
next_state <= s0703;
else
next_state <= s0702;
end if;
when s0703 =>
if (rdy_i = '1') then
sig_SYNC <= '1';
END IF;
WHEN RES =>
sig_RWn <= '1';
sig_RD <= '1';
ld_o <= "11";
ld_pc_o <= '1';
ld_sp_o <= '1';
sig_RWn <= '1';
sig_RD <= '1';
WHEN s511 =>
IF (rdy_i = '1' and
zw_REG_OP = X"E5") THEN
next_state <= FETCH;
else
next_state <= s0703;
end if;
when s2501 =>
if (rdy_i = '1' and
zw_REG_OP = X"E5") then
ld_o <= "11";
ld_pc_o <= '1';
ELSIF (rdy_i = '1' and
next_state <= s2510;
elsif (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '0') THEN
reg_F(3) = '0') then
ld_o <= "11";
ld_pc_o <= '1';
d_regs_in_o <= zw_ALU(7 downto 0);
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
zw_REG_OP = X"F5") THEN
next_state <= FETCH;
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
next_state <= s2502;
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
next_state <= s2503;
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
next_state <= s2505;
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
next_state <= s2505;
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
next_state <= s2506;
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
next_state <= s2504;
elsif (rdy_i = '1' and
zw_REG_OP = X"E9" and
reg_F(3) = '1') THEN
reg_F(3) = '1') then
ld_o <= "11";
ld_pc_o <= '1';
d_regs_in_o <= zw_ALU(7 downto 0);
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_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
unsigned (zw_alu3(7 downto 4));
zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
unsigned (zw_alu3(3 downto 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(7 downto 0) <= '0' &
(NOT zw_alu2(4)) &
(NOT zw_alu2(4)) &
'0' &
'0' &
(NOT zw_alu1(4)) &
(NOT zw_alu1(4)) &
'0';
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);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
(NOT(zw_alu1(4)) AND zw_alu2(3)) OR
(zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
zw_alu2(6) <= (zw_alu2(3));
zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
zw_alu1(4);
zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s559 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2501;
end if;
when s2503 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s562 =>
IF (rdy_i = '1') THEN
next_state <= s2510;
else
next_state <= s2503;
end if;
when s2505 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= X"01";
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s567 =>
IF (rdy_i = '1') THEN
next_state <= s2509;
else
next_state <= s2505;
end if;
when s2506 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= X"01";
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s568 =>
IF (rdy_i = '1') THEN
ch_a_o <= d_i;
ch_b_o <= q_y_i;
END IF;
WHEN s569 =>
IF (rdy_i = '1') THEN
next_state <= s2507;
else
next_state <= s2506;
end if;
when s2502 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s571 =>
IF (rdy_i = '1') THEN
next_state <= s2510;
else
next_state <= s2502;
end if;
when s2504 =>
if (rdy_i = '1') then
next_state <= s2508;
else
next_state <= s2504;
end if;
when s2507 =>
if (rdy_i = '1') then
ch_a_o <= d_i;
ch_b_o <= X"01";
ld_o <= "11";
ld_pc_o <= '1';
END IF;
WHEN s572 =>
IF (rdy_i = '1') THEN
next_state <= s2509;
else
next_state <= s2507;
end if;
when s2508 =>
if (rdy_i = '1') then
ch_a_o <= zw_b1;
ch_b_o <= X"01";
END IF;
WHEN s573 =>
IF (rdy_i = '1' AND
next_state <= s2503;
else
next_state <= s2508;
end if;
when s2509 =>
if (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '0') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' AND
next_state <= FETCH;
elsif (rdy_i = '1' AND
zw_b2(0) = '0' and
reg_F(3) = '1') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
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_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
unsigned (zw_alu3(7 downto 4));
zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
unsigned (zw_alu3(3 downto 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(7 downto 0) <= '0' &
(NOT zw_alu2(4)) &
(NOT zw_alu2(4)) &
'0' &
'0' &
(NOT zw_alu1(4)) &
(NOT zw_alu1(4)) &
'0';
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);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
(NOT(zw_alu1(4)) AND zw_alu2(3)) OR
(zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
zw_alu2(6) <= (zw_alu2(3));
zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
zw_alu1(4);
zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s574 =>
IF (rdy_i = '1' and
reg_F(3) = '0') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
next_state <= FETCH;
elsif (rdy_i = '1') then
next_state <= s2510;
else
next_state <= s2509;
end if;
when s2510 =>
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);
zw_alu(8 downto 0) <= unsigned ('0' & q_a_i) + unsigned ('0' & NOT (d_i)) + reg_F(0);
sig_SYNC <= '1';
ELSIF (rdy_i = '1' and
reg_F(3) = '1') THEN
d_regs_in_o <= zw_ALU(7 downto 0);
next_state <= FETCH;
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_ALU(7 downto 4) <= unsigned ((zw_alu2(3 downto 0))) -
unsigned (zw_alu3(7 downto 4));
zw_ALU(3 downto 0) <= unsigned ((zw_alu1(3 downto 0))) -
unsigned (zw_alu3(3 downto 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(7 downto 0) <= '0' &
(NOT zw_alu2(4)) &
(NOT zw_alu2(4)) &
'0' &
'0' &
(NOT zw_alu1(4)) &
(NOT zw_alu1(4)) &
'0';
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);
zw_alu2(5) <= (zw_alu1(4) AND zw_alu2(3) AND (NOT(zw_alu2(0)) OR NOT(zw_alu2(1)) OR NOT(zw_alu2(2)))) OR
(NOT(zw_alu1(4)) AND zw_alu2(3)) OR
(zw_alu1(4) AND NOT(zw_alu2(3)) AND zw_alu2(2) AND zw_alu2(1) AND zw_alu2(0));
zw_alu2(6) <= (zw_alu2(3));
zw_alu2(4 downto 0) <= unsigned ('0' & q_a_i(7 downto 4)) + unsigned ('0' & NOT(d_i(7 downto 4))) +
zw_alu1(4);
zw_alu1(4 downto 0) <= unsigned ('0' & q_a_i(3 downto 0)) + unsigned ('0' & NOT(d_i(3 downto 0))) +
reg_F(0);
sig_SYNC <= '1';
END IF;
WHEN s548 =>
IF (rdy_i = '1') THEN
next_state <= FETCH;
else
next_state <= s2510;
end if;
when s2701 =>
if (rdy_i = '1') then
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
4768,8 → 4119,11
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (15 downto 8);
END IF;
WHEN s551 =>
next_state <= s2702;
else
next_state <= s2701;
end if;
when s2702 =>
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
4776,28 → 4130,89
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= adr_pc_i (7 downto 0);
WHEN s552 =>
next_state <= s2703;
when s2703 =>
ld_o <= "11";
ld_sp_o <= '1';
sig_RWn <= '0';
sig_RD <= '0';
sig_WR <= '1';
sig_D_OUT <= reg_F;
WHEN s576 =>
IF (NMI_i = '1') THEN
sig_D_OUT <= (reg_F AND X"EF");
next_state <= s2704;
when s2704 =>
if (nmi_i = '1') then
next_state <= s2706;
else
next_state <= s2705;
end if;
when s2707 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
rst_nmi_o <= '1';
END IF;
WHEN s577 =>
IF (rdy_i = '1') THEN
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
next_state <= FETCH;
else
next_state <= s2707;
end if;
when s2706 =>
if (rdy_i = '1') then
next_state <= s2707;
else
next_state <= s2706;
end if;
when s2705 =>
if (rdy_i = '1') then
next_state <= s2707;
else
next_state <= s2705;
end if;
when s0905 =>
if (rdy_i = '1') then
next_state <= s0907;
else
next_state <= s0905;
end if;
when s0907 =>
if (rdy_i = '1') then
adr_o <= d_i & zw_b1;
ld_o <= "11";
ld_pc_o <= '1';
sig_SYNC <= '1';
END IF;
WHEN OTHERS =>
NULL;
END CASE;
END PROCESS output_proc;
next_state <= FETCH;
else
next_state <= s0907;
end if;
when s0906 =>
if (rdy_i = '1') then
next_state <= s0907;
else
next_state <= s0906;
end if;
when s0904 =>
if (nmi_i = '1') then
rst_nmi_o <= '1';
next_state <= s0906;
else
next_state <= s0905;
end if;
when RES =>
sig_RWn <= '1';
sig_RD <= '1';
sig_SYNC <= '1';
next_state <= RES7;
when RES7 =>
ld_o <= "11";
ld_pc_o <= '1';
ld_sp_o <= '1';
sig_RWn <= '1';
sig_RD <= '1';
next_state <= s9901;
when others =>
next_state <= RES;
end case;
end process nextstate_proc;
-- Concurrent Statements
-- Clocked output assignments
4806,4 → 4221,4
sync_o <= sync_o_cld;
wr_n_o <= wr_n_o_cld;
wr_o <= wr_o_cld;
END fsm;
end fsm;
/trunk/rtl/vhdl/fsm_intnmi.vhd
0,0 → 1,165
-- VHDL Entity r6502_tc.fsm_intnmi.symbol
--
-- Created:
-- by - remoteghost.UNKNOWN (ENTW-7HPZ200)
-- at - 09:22:12 07/24/13
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
entity fsm_intnmi is
port(
clk_clk_i : in std_logic;
nmi_n_i : in std_logic;
rst_nmi_i : in std_logic;
rst_rst_n_i : in std_logic;
nmi_o : out std_logic
);
 
-- Declarations
 
end fsm_intnmi ;
 
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.9 2018/09/11 11:37:00 jens
-- - NMI = '0' need at least 1 cycles for correct
-- operation now (2 cycles in the past)
--
-- Revision 1.8 2013/07/24 11:11:00 jens
-- - Changing the title block and internal revision history
--
-- Revision 1.6 2009/01/04 10:20:47 eda
-- Changes for cosmetic issues only
--
-- Revision 1.5 2009/01/04 09:23:10 eda
-- - Delete unused nets and blocks
-- - Rename blocks
--
-- Revision 1.4 2009/01/03 16:53:02 eda
-- - Unused nets and blocks deleted
-- - Renamed blocks
--
-- Revision 1.3 2009/01/03 16:42:02 eda
-- - Unused nets and blocks deleted
-- - Renamed blocks
--
-- Revision 1.2 2008/12/31 19:31:24 eda
-- Production Release
--
--
--
-- VHDL Architecture r6502_tc.fsm_intnmi.fsm
--
-- Created:
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:45:38 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
architecture fsm of fsm_intnmi is
 
subtype state_type is
std_logic_vector(1 downto 0);
-- Hard encoding
constant idle : state_type := "00";
constant idle1 : state_type := "01";
constant IMP : state_type := "11";
 
-- 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 idle1 =>
if (nmi_n_i = '0') then
nmi_o_cld <= '1';
end if;
when IMP =>
nmi_o_cld <= '1';
if (rst_nmi_i = '1') then
nmi_o_cld <= '0';
end if;
when others =>
null;
end case;
end if;
end process clocked_proc;
-----------------------------------------------------------------
nextstate_proc : process (
current_state,
nmi_n_i,
rst_nmi_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 <= IMP;
else
next_state <= idle1;
end if;
when IMP =>
if (rst_nmi_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;
/trunk/rtl/vhdl/r6502_tc.vhd
1,70 → 1,100
-- VHDL Entity R6502_TC.R6502_TC.symbol
-- VHDL Entity r6502_tc.r6502_tc.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 14:13:53 08.03.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 10:34:09 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
ENTITY R6502_TC IS
PORT(
clk_clk_i : IN std_logic;
d_i : IN std_logic_vector (7 DOWNTO 0);
irq_n_i : IN std_logic;
nmi_n_i : IN std_logic;
rdy_i : IN std_logic;
rst_rst_n_i : IN std_logic;
so_n_i : IN std_logic;
a_o : OUT std_logic_vector (15 DOWNTO 0);
d_o : OUT std_logic_vector (7 DOWNTO 0);
rd_o : OUT std_logic;
sync_o : OUT std_logic;
wr_n_o : OUT std_logic;
wr_o : OUT std_logic
entity r6502_tc is
port(
clk_clk_i : in std_logic;
d_i : in std_logic_vector (7 downto 0);
irq_n_i : in std_logic;
nmi_n_i : in std_logic;
rdy_i : in std_logic;
rst_rst_n_i : in std_logic;
so_n_i : in std_logic;
a_o : out std_logic_vector (15 downto 0);
d_o : out std_logic_vector (7 downto 0);
rd_o : out std_logic;
sync_o : out std_logic;
wr_n_o : out std_logic;
wr_o : out std_logic
);
 
-- Declarations
 
END R6502_TC ;
end r6502_tc ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
-- scantara2003@yahoo.de
-- COPYRIGHT (C) 2008-2010 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: struct.bd,v $
-- <<-- more -->>
-- Title: Top Level
-- Path: R6502_TC/R6502_TC/struct
-- Edited: by eda on 08 Feb 2010
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.4 2018/09/15 22:07:00 jens
-- - RESET generates SYNC now, 1 dead cycle
-- delayed
-- - ADC / SBC flags and A like R6502 now
-- - Bug Fix ADC and SBC in decimal mode
-- (all op codes - "Overflow" flag was computed
-- wrong)
-- - Interrupt priority order is now: BRK - NMI -
-- IRQ
-- - Performance improvements on-going
-- (Mealy -> Moore)
-- - Bug Fixes All Branch Instructions
-- (BCC, BCS, BEQ, BNE, BPL, BMI, BVC,
-- BVS)
-- 3 cycles now if branch forward occur and
-- the branch instruction lies on a xxFEh
-- location.
-- - Bug Fix Hardware Interrupts NMI & IRQ -
-- "SYNC" now
--
-- Revision 1.4 BETA 2013/07/24 11:11:00 jens
-- - Changing the title block and internal revision history
-- - Bug Fix ADC and SBC (all sub codes - "Overflow" flag was computed wrong)
--
-- Revision 1.3 2009/01/04 10:20:50 eda
-- Changes for cosmetic issues only
--
-- Revision 1.2 2009/01/04 09:23:12 eda
-- - Delete unused nets and blocks
-- - Rename blocks
-- - Re-arrage FSM symbols in block FSM_Execution_Unit
--
-- Revision 1.1 2009/01/03 16:36:48 eda
-- Production version
--
--
--
-- VHDL Architecture R6502_TC.R6502_TC.struct
-- VHDL Architecture r6502_tc.r6502_tc.struct
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 14:13:53 08.03.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 22:34:11 15.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
 
LIBRARY R6502_TC;
library r6502_tc;
 
ARCHITECTURE struct OF R6502_TC IS
architecture struct of r6502_tc is
 
-- Architecture declarations
 
72,35 → 102,35
 
 
-- Component Declarations
COMPONENT Core
PORT (
clk_clk_i : IN std_logic ;
d_i : IN std_logic_vector (7 DOWNTO 0);
irq_n_i : IN std_logic ;
nmi_n_i : IN std_logic ;
rdy_i : IN std_logic ;
rst_rst_n_i : IN std_logic ;
so_n_i : IN std_logic ;
a_o : OUT std_logic_vector (15 DOWNTO 0);
d_o : OUT std_logic_vector (7 DOWNTO 0);
rd_o : OUT std_logic ;
sync_o : OUT std_logic ;
wr_n_o : OUT std_logic ;
wr_o : OUT std_logic
component core
port (
clk_clk_i : in std_logic ;
d_i : in std_logic_vector (7 downto 0);
irq_n_i : in std_logic ;
nmi_n_i : in std_logic ;
rdy_i : in std_logic ;
rst_rst_n_i : in std_logic ;
so_n_i : in std_logic ;
a_o : out std_logic_vector (15 downto 0);
d_o : out std_logic_vector (7 downto 0);
rd_o : out std_logic ;
sync_o : out std_logic ;
wr_n_o : out std_logic ;
wr_o : out std_logic
);
END COMPONENT;
end component;
 
-- Optional embedded configurations
-- pragma synthesis_off
FOR ALL : Core USE ENTITY R6502_TC.Core;
for all : core use entity r6502_tc.core;
-- pragma synthesis_on
 
 
BEGIN
begin
 
-- Instance port mappings.
U_0 : Core
PORT MAP (
U_0 : core
port map (
clk_clk_i => clk_clk_i,
d_i => d_i,
irq_n_i => irq_n_i,
116,4 → 146,4
wr_o => wr_o
);
 
END struct;
end struct;
/trunk/rtl/vhdl/reg_pc.vhd
1,216 → 1,226
-- VHDL Entity R6502_TC.Reg_PC.symbol
-- VHDL Entity r6502_tc.reg_pc.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 18:39:48 08.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:45:07 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
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)
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 ;
end reg_pc ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
-- scantara2003@yahoo.de
-- COPYRIGHT (C) 2008-2010 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: struct.bd,v $
-- <<-- more -->>
-- Title: Program Counter Logic
-- Path: R6502_TC/Reg_PC/struct
-- Edited: by eda on 08 Feb 2010
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.15 2013/07/21 11:11:00 jens
-- - Change mux 3-1 to mux 4-1 for vendors like Xilinx
-- - Changing the title block and internal revision history
--
-- Revision 1.3 2009/01/04 10:20:50 eda
-- Changes for cosmetic issues only
--
-- Revision 1.2 2009/01/04 09:23:12 eda
-- - Delete unused nets and blocks
-- - Rename blocks
-- - Re-arrage FSM symbols in block FSM_Execution_Unit
--
-- Revision 1.1 2009/01/03 16:36:48 eda
-- Production Release
--
--
--
-- VHDL Architecture R6502_TC.Reg_PC.struct
-- VHDL Architecture r6502_tc.reg_pc.struct
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 18:39:49 08.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:45:07 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
 
ARCHITECTURE struct OF Reg_PC IS
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);
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_nxt_pc_o_internal : std_logic_vector (15 DOWNTO 0);
SIGNAL adr_pc_o_internal : std_logic_vector (15 DOWNTO 0);
signal adr_nxt_pc_o_internal : std_logic_vector (15 downto 0);
signal adr_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.12) 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.12) 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.12) 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);
-- ModuleWare signal declarations(v1.12) for instance 'U_5' of 'split'
signal mw_U_5temp_din : std_logic_vector(15 downto 0);
 
 
BEGIN
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
-- ModuleWare code(v1.12) 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);
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;
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
-- ModuleWare code(v1.12) 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;
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'
-- ModuleWare code(v1.12) for instance 'U_0' of 'adff'
adr_pc_o_internal(7 DOWNTO 0) <= mw_U_0reg_cval;
u_0seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_0seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_0reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load_o_i = '1') then
mw_U_0reg_cval <= adr_nxt_pc_o_internal(7 DOWNTO 0);
END IF;
END IF;
END PROCESS u_0seq_proc;
end if;
end if;
end process u_0seq_proc;
 
-- ModuleWare code(v1.9) for instance 'U_4' of 'adff'
-- ModuleWare code(v1.12) for instance 'U_4' of 'adff'
adr_pc_o_internal(15 DOWNTO 8) <= mw_U_4reg_cval;
u_4seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_4seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_4reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load3_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load3_o_i = '1') then
mw_U_4reg_cval <= adr_nxt_pc_o_internal(15 DOWNTO 8);
END IF;
END IF;
END PROCESS u_4seq_proc;
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.12) 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.12) 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.12) 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'
-- ModuleWare code(v1.12) for instance 'U_1' of 'constval'
val_zero <= "00000000";
 
-- ModuleWare code(v1.9) for instance 'U_9' of 'constval'
-- ModuleWare code(v1.12) 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' => adr_pc_o_i <= adr_pc_o_internal;
WHEN '1' => adr_pc_o_i <= adr_i;
WHEN OTHERS => adr_pc_o_i <= (OTHERS => 'X');
END CASE;
END PROCESS u_8combo_proc;
-- ModuleWare code(v1.12) for instance 'U_8' of 'mux'
u_8combo_proc: process(adr_pc_o_internal, adr_i, sel_pc_in_i)
begin
case sel_pc_in_i is
when '0' => adr_pc_o_i <= adr_pc_o_internal;
when '1' => adr_pc_o_i <= adr_i;
when others => adr_pc_o_i <= (others => 'X');
end case;
end process u_8combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_13' of 'mux'
u_13combo_proc: PROCESS(val_one, val_zero, offset_low_o_i,
-- ModuleWare code(v1.12) for instance 'U_13' of 'mux'
u_13combo_proc: process(val_one, val_zero, offset_low_o_i,
sel_pc_val_i)
BEGIN
CASE sel_pc_val_i IS
WHEN "00" => val_o_i <= val_one;
WHEN "01" => val_o_i <= val_zero;
WHEN "10" => val_o_i <= offset_low_o_i;
WHEN "11" => val_o_i <= val_zero;
WHEN OTHERS => val_o_i <= (OTHERS => 'X');
END CASE;
END PROCESS u_13combo_proc;
begin
case sel_pc_val_i is
when "00" => val_o_i <= val_one;
when "01" => val_o_i <= val_zero;
when "10" => val_o_i <= offset_low_o_i;
when "11" => val_o_i <= val_zero;
when others => val_o_i <= (others => 'X');
end case;
end process u_13combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_3' of 'split'
-- ModuleWare code(v1.12) 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;
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'
-- ModuleWare code(v1.12) 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;
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.
 
218,4 → 228,4
adr_nxt_pc_o <= adr_nxt_pc_o_internal;
adr_pc_o <= adr_pc_o_internal;
 
END struct;
end struct;
/trunk/rtl/vhdl/reg_sp.vhd
1,141 → 1,157
-- VHDL Entity R6502_TC.Reg_SP.symbol
-- VHDL Entity r6502_tc.reg_sp.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 14:13:51 08.03.2010
-- by - remoteghost.UNKNOWN (ENTW-7HPZ200)
-- at - 18:50:08 05/20/10
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
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)
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 ;
end reg_sp ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
-- scantara2003@yahoo.de
-- COPYRIGHT (C) 2008-2010 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: struct.bd,v $
-- <<-- more -->>
-- Title: Stack Pointer Logic
-- Path: R6502_TC/Reg_SP/struct
-- Edited: by eda on 21 Feb 2010
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.8 2013/07/24 11:11:00 jens
-- - Changing the title block and internal revision history
--
-- Revision 1.6 2009/01/04 10:20:47 eda
-- Changes for cosmetic issues only
--
-- Revision 1.5 2009/01/04 09:23:10 eda
-- - Delete unused nets and blocks
-- - Rename blocks
--
-- Revision 1.4 2009/01/03 16:53:02 eda
-- - Unused nets and blocks deleted
-- - Renamed blocks
--
-- Revision 1.3 2009/01/03 16:42:02 eda
-- - Unused nets and blocks deleted
-- - Renamed blocks
--
-- Revision 1.2 2008/12/31 19:31:24 eda
-- Production Release
--
--
--
-- VHDL Architecture R6502_TC.Reg_SP.struct
-- VHDL Architecture r6502_tc.reg_sp.struct
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 14:13:52 08.03.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:44:25 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
 
ARCHITECTURE struct OF Reg_SP IS
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);
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);
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);
-- ModuleWare signal declarations(v1.12) for instance 'U_0' of 'adff'
signal mw_U_0reg_cval : std_logic_vector(7 downto 0);
 
 
BEGIN
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
-- ModuleWare code(v1.12) 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') THEN
if (sp_as_n_o_i = '1') then
temp_sum := unsigned(temp_din0) + unsigned(temp_din1) + temp_carry;
ELSE
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;
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'
-- ModuleWare code(v1.12) for instance 'U_0' of 'adff'
adr_sp_o_internal(7 DOWNTO 0) <= mw_U_0reg_cval;
u_0seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_0seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_0reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load_o_i = '1') then
mw_U_0reg_cval <= result_low1_o_i;
END IF;
END IF;
END PROCESS u_0seq_proc;
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.12) 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'
-- ModuleWare code(v1.12) 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'
-- ModuleWare code(v1.12) 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.12) for instance 'U_2' of 'inv'
sp_as_n_o_i <= not(sel_sp_as_i);
 
-- ModuleWare code(v1.9) for instance 'U_8' of 'mux'
u_8combo_proc: PROCESS(result_low_o_i, adr_low_i, sel_sp_in_i)
BEGIN
CASE sel_sp_in_i IS
WHEN '0' => result_low1_o_i <= result_low_o_i;
WHEN '1' => result_low1_o_i <= adr_low_i;
WHEN OTHERS => result_low1_o_i <= (OTHERS => 'X');
END CASE;
END PROCESS u_8combo_proc;
-- ModuleWare code(v1.12) for instance 'U_8' of 'mux'
u_8combo_proc: process(result_low_o_i, adr_low_i, sel_sp_in_i)
begin
case sel_sp_in_i is
when '0' => result_low1_o_i <= result_low_o_i;
when '1' => result_low1_o_i <= adr_low_i;
when others => result_low1_o_i <= (others => 'X');
end case;
end process u_8combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_10' of 'tap'
adr_sp_low_o_i <= adr_sp_o_internal(7 DOWNTO 0);
-- ModuleWare code(v1.12) for instance 'U_10' of 'tap'
adr_sp_low_o_i <= adr_sp_o_internal(7 downto 0);
 
-- Instance port mappings.
 
142,4 → 158,4
-- Implicit buffered output assignments
adr_sp_o <= adr_sp_o_internal;
 
END struct;
end struct;
/trunk/rtl/vhdl/regbank_axy.vhd
1,186 → 1,196
-- VHDL Entity R6502_TC.RegBank_AXY.symbol
-- VHDL Entity r6502_tc.regbank_axy.symbol
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 18:39:49 08.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:41:39 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
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)
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 ;
end regbank_axy ;
 
-- Jens-D. Gutschmidt Project: R6502_TC
-- scantara2003@yahoo.de
-- COPYRIGHT (C) 2008-2010 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: struct.bd,v $
-- <<-- more -->>
-- Title: Register Bank for register A, X and Y
-- Path: R6502_TC/RegBank_AXY/struct
-- Edited: by eda on 08 Feb 2010
-- (C) 2008 - 2018 Jens Gutschmidt
-- (email: opencores@vivare-services.com)
--
-- Versions:
-- Revision 1.5 2013/07/24 11:11:00 jens
-- - Changing the title block and internal revision history
-- - Change mux 3-1 to mux 4-1 for vendors like Xilinx
--
-- Revision 1.3 2009/01/04 10:20:50 eda
-- Changes for cosmetic issues only
--
-- Revision 1.2 2009/01/04 09:23:12 eda
-- - Delete unused nets and blocks
-- - Rename blocks
-- - Re-arrage FSM symbols in block FSM_Execution_Unit
--
-- Revision 1.1 2009/01/03 16:36:48 eda
-- Production Release
--
--
--
-- VHDL Architecture R6502_TC.RegBank_AXY.struct
-- VHDL Architecture r6502_tc.regbank_axy.struct
--
-- Created:
-- by - eda.UNKNOWN (ENTW1)
-- at - 18:39:49 08.02.2010
-- by - eda.UNKNOWN (ENTW-7HPZ200)
-- at - 11:44:39 11.09.2018
--
-- Generated by Mentor Graphics' HDL Designer(TM) 2009.1 (Build 12)
-- Generated by Mentor Graphics' HDL Designer(TM) 2016.2 (Build 5)
--
-- COPYRIGHT (C) 2008 - 2018 by Jens Gutschmidt
--
-- 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/>.
--
--
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
 
 
ARCHITECTURE struct OF RegBank_AXY IS
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);
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);
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.12) 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.12) 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);
-- ModuleWare signal declarations(v1.12) for instance 'U_5' of 'adff'
signal mw_U_5reg_cval : std_logic_vector(7 downto 0);
 
 
BEGIN
begin
 
-- ModuleWare code(v1.9) for instance 'U_0' of 'adff'
-- ModuleWare code(v1.12) for instance 'U_0' of 'adff'
q_a_o_internal <= mw_U_0reg_cval;
u_0seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_0seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_0reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load_o_i = '1') then
mw_U_0reg_cval <= q_mux_o_i;
END IF;
END IF;
END PROCESS u_0seq_proc;
end if;
end if;
end process u_0seq_proc;
 
-- ModuleWare code(v1.9) for instance 'U_4' of 'adff'
-- ModuleWare code(v1.12) for instance 'U_4' of 'adff'
q_x_o_internal <= mw_U_4reg_cval;
u_4seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_4seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_4reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load1_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load1_o_i = '1') then
mw_U_4reg_cval <= q_mux_o_i;
END IF;
END IF;
END PROCESS u_4seq_proc;
end if;
end if;
end process u_4seq_proc;
 
-- ModuleWare code(v1.9) for instance 'U_5' of 'adff'
-- ModuleWare code(v1.12) for instance 'U_5' of 'adff'
q_y_o_internal <= mw_U_5reg_cval;
u_5seq_proc: PROCESS (clk_clk_i, rst_rst_n_i)
BEGIN
IF (rst_rst_n_i = '0') THEN
u_5seq_proc: process (clk_clk_i, rst_rst_n_i)
begin
if (rst_rst_n_i = '0') then
mw_U_5reg_cval <= "00000000";
ELSIF (clk_clk_i'EVENT AND clk_clk_i='1') THEN
IF (load2_o_i = '1') THEN
elsif (clk_clk_i'event and clk_clk_i='1') then
if (load2_o_i = '1') then
mw_U_5reg_cval <= q_mux_o_i;
END IF;
END IF;
END PROCESS u_5seq_proc;
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.12) 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.12) 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.12) 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'
-- ModuleWare code(v1.12) for instance 'U_2' 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.12) 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,
-- ModuleWare code(v1.12) for instance 'U_3' of 'mux'
u_3combo_proc: process(q_a_o_internal, q_y_o_internal, q_x_o_internal,
d_regs_in_i, sel_rb_in_i)
begin
case sel_rb_in_i is
when "00" => q_mux_o_i <= q_a_o_internal;
when "01" => q_mux_o_i <= q_y_o_internal;
when "10" => q_mux_o_i <= q_x_o_internal;
when "11" => q_mux_o_i <= d_regs_in_i;
when others => q_mux_o_i <= (others => 'X');
end case;
end process u_3combo_proc;
 
-- ModuleWare code(v1.12) for instance 'U_9' of 'mux'
u_9combo_proc: process(q_a_o_internal, q_x_o_internal, q_y_o_internal,
val_zero, sel_rb_out_i)
BEGIN
CASE sel_rb_out_i IS
WHEN "00" => d_regs_out_o <= q_a_o_internal;
WHEN "01" => d_regs_out_o <= q_x_o_internal;
WHEN "10" => d_regs_out_o <= q_y_o_internal;
WHEN "11" => d_regs_out_o <= val_zero;
WHEN OTHERS => d_regs_out_o <= (OTHERS => 'X');
END CASE;
END PROCESS u_2combo_proc;
begin
case sel_rb_out_i is
when "00" => d_regs_out_o <= q_a_o_internal;
when "01" => d_regs_out_o <= q_x_o_internal;
when "10" => d_regs_out_o <= q_y_o_internal;
when "11" => d_regs_out_o <= val_zero;
when others => d_regs_out_o <= (others => 'X');
end case;
end process u_9combo_proc;
 
-- ModuleWare code(v1.9) for instance 'U_3' of 'mux'
u_3combo_proc: PROCESS(q_a_o_internal, q_y_o_internal, q_x_o_internal,
d_regs_in_i, sel_rb_in_i)
BEGIN
CASE sel_rb_in_i IS
WHEN "00" => q_mux_o_i <= q_a_o_internal;
WHEN "01" => q_mux_o_i <= q_y_o_internal;
WHEN "10" => q_mux_o_i <= q_x_o_internal;
WHEN "11" => q_mux_o_i <= d_regs_in_i;
WHEN OTHERS => q_mux_o_i <= (OTHERS => 'X');
END CASE;
END PROCESS u_3combo_proc;
 
-- Instance port mappings.
 
-- Implicit buffered output assignments
188,4 → 198,4
q_x_o <= q_x_o_internal;
q_y_o <= q_y_o_internal;
 
END struct;
end struct;

powered by: WebSVN 2.1.0

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