aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-01-29 20:44:47 +0100
committerTristan Gingold <tgingold@free.fr>2016-01-29 20:44:47 +0100
commit5e2d13667462f3db6d7b4d1e8933c3ae7e41d1b1 (patch)
tree4303a8f99cce53d35217a41bb40e904c5c5b3f47 /testsuite/gna
parentd0792083cd811a0c3ccdcc3c40d04647619772b9 (diff)
downloadghdl-5e2d13667462f3db6d7b4d1e8933c3ae7e41d1b1.tar.gz
ghdl-5e2d13667462f3db6d7b4d1e8933c3ae7e41d1b1.tar.bz2
ghdl-5e2d13667462f3db6d7b4d1e8933c3ae7e41d1b1.zip
Add reproducer for issue30
Diffstat (limited to 'testsuite/gna')
-rw-r--r--testsuite/gna/issue30/alu.vhdl1536
-rw-r--r--testsuite/gna/issue30/basicblocks.vhdl6992
-rw-r--r--testsuite/gna/issue30/definitions.vhdl1230
-rw-r--r--testsuite/gna/issue30/tb-alu.vhdl3158
-rwxr-xr-xtestsuite/gna/issue30/testsuite.sh15
5 files changed, 12931 insertions, 0 deletions
diff --git a/testsuite/gna/issue30/alu.vhdl b/testsuite/gna/issue30/alu.vhdl
new file mode 100644
index 000000000..10ae2e6ef
--- /dev/null
+++ b/testsuite/gna/issue30/alu.vhdl
@@ -0,0 +1,1536 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity ccf_operation is
+port(
+ flags_in: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_ccf_operation of ccf_operation is
+begin
+ -- A point of disagreement has been found between the Z80 user manual
+ -- and Lance Levinthal's book entitled "Z80 Assembly Language Programming".
+ -- The Z80 user manual says the half-carry bit gets the previous carry;
+ -- Levinthal says the half-carry bit is unchanged. For now, go with
+ -- Levinthal's version as the Z80 users manual is inconsistent with
+ -- itself on other instructions. At this time, no such inconsistencies
+ -- have been found with Levinthal's work.
+
+ flags_out <= ( carry_bit => not flags_in(carry_bit),
+ half_carry_bit => flags_in(carry_bit),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity sll8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_sll8bit of sll8bit is
+
+signal sll_result: std_logic_vector(7 downto 0);
+begin
+ -- This operation is not documented by Zilog, but seems to work in their
+ -- finished chip. This code may not work the same way as the Z80 hardware
+ -- works. The functionality is assumed from the SRL instruction.
+
+ sll_result <= operand(6 downto 0) & '0';
+
+ output <= sll_result;
+ flags_out <= ( carry_bit => operand(7),
+ zero_bit => not (sll_result(7) or sll_result(6) or sll_result(5) or sll_result(4) or
+ sll_result(3) or sll_result(2) or sll_result(1) or sll_result(0)),
+ parity_overflow_bit => not (sll_result(7) xor sll_result(6) xor sll_result(5) xor
+ sll_result(4) xor sll_result(3) xor sll_result(2) xor
+ sll_result(1) xor sll_result(0)),
+ sign_bit => operand(6),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity srl8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_srl8bit of srl8bit is
+
+signal srl_result: std_logic_vector(7 downto 0);
+
+begin
+ srl_result <= '0' & operand(7 downto 1);
+
+ output <= srl_result;
+ flags_out <= ( carry_bit => operand(0),
+ zero_bit => not (srl_result(7) or srl_result(6) or srl_result(5) or srl_result(4) or
+ srl_result(3) or srl_result(2) or srl_result(1) or srl_result(0)),
+ parity_overflow_bit => not (srl_result(7) xor srl_result(6) xor srl_result(5) xor
+ srl_result(4) xor srl_result(3) xor srl_result(2) xor
+ srl_result(1) xor srl_result(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity and8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_and8bit of and8bit is
+
+signal and_result: std_logic_vector(7 downto 0);
+
+begin
+ and_result <= operand1 and operand2;
+
+ flags_out <= ( sign_bit => and_result(7),
+ zero_bit => not (and_result(7) or and_result(6) or and_result(5) or and_result(4) or
+ and_result(3) or and_result(2) or and_result(1) or and_result(0)),
+ half_carry_bit => '1',
+ parity_overflow_bit => not (and_result(7) xor and_result(6) xor and_result(5) xor
+ and_result(4) xor and_result(3) xor and_result(2) xor
+ and_result(1) xor and_result(0)),
+ others => '0');
+
+ output <= and_result;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity or8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_or8bit of or8bit is
+
+signal or_result: std_logic_vector(7 downto 0);
+
+begin
+ or_result <= operand1 or operand2;
+
+ output <= or_result;
+ flags_out <= ( sign_bit => or_result(7),
+ half_carry_bit => '1',
+ zero_bit => not (or_result(7) or or_result(6) or or_result(5) or or_result(4) or
+ or_result(3) or or_result(2) or or_result(1) or or_result(0)),
+ parity_overflow_bit => not (or_result(7) xor or_result(6) xor or_result(5) xor
+ or_result(4) xor or_result(3) xor or_result(2) xor
+ or_result(1) xor or_result(0)),
+ others => '0');
+end;
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity sra8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_sra8bit of sra8bit is
+
+signal sra_result: std_logic_vector(7 downto 0);
+
+begin
+ sra_result <= operand(7) & operand(7 downto 1);
+
+ output <= sra_result;
+ flags_out <= ( carry_bit => operand(0),
+ zero_bit => not (sra_result(7) or sra_result(6) or sra_result(5) or sra_result(4) or
+ sra_result(3) or sra_result(2) or sra_result(1) or sra_result(0)),
+ parity_overflow_bit => not (sra_result(7) xor sra_result(6) xor sra_result(5) xor
+ sra_result(4) xor sra_result(3) xor sra_result(2) xor
+ sra_result(1) xor sra_result(0)),
+ sign_bit => operand(7),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity xor8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_xor8bit of xor8bit is
+
+signal xor_result: std_logic_vector(7 downto 0);
+
+begin
+ xor_result <= operand1 xor operand2;
+
+ output <= xor_result;
+ flags_out <= ( sign_bit => xor_result(7),
+ half_carry_bit => '1',
+ zero_bit => not (xor_result(7) or xor_result(6) or xor_result(5) or xor_result(4) or
+ xor_result(3) or xor_result(2) or xor_result(1) or xor_result(0)),
+ parity_overflow_bit => not (xor_result(7) xor xor_result(6) xor xor_result(5) xor
+ xor_result(4) xor xor_result(3) xor xor_result(2) xor
+ xor_result(1) xor xor_result(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity sla8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_sla8bit of sla8bit is
+
+signal sla_result: std_logic_vector(7 downto 0);
+
+begin
+ sla_result <= operand(6 downto 0) & '0';
+
+ output <= sla_result;
+ flags_out <= ( sign_bit => sla_result(7),
+ half_carry_bit => '1',
+ zero_bit => not (sla_result(7) or sla_result(6) or sla_result(5) or sla_result(4) or
+ sla_result(3) or sla_result(2) or sla_result(1) or sla_result(0)),
+ parity_overflow_bit => not (sla_result(7) xor sla_result(6) xor sla_result(5) xor
+ sla_result(4) xor sla_result(3) xor sla_result(2) xor
+ sla_result(1) xor sla_result(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity subtractor is
+port(
+ minuend, subtrahend: in std_logic;
+ borrow_in: in std_logic;
+ difference: out std_logic;
+ borrow_out: out std_logic
+);
+end;
+
+architecture struct_subtractor of subtractor is
+begin
+
+-- These expressions were derived from the truth table of a single bit subtractor and simplified with
+-- a Karnaugh map.
+
+ difference <= (borrow_in and (not minuend) and (not subtrahend)) or
+ ((not borrow_in) and (not minuend) and subtrahend) or
+ (borrow_in and minuend and subtrahend) or
+ ((not borrow_in) and minuend and (not subtrahend));
+
+ borrow_out <= (not minuend and subtrahend) or
+ (borrow_in and (not minuend)) or
+ (borrow_in and subtrahend);
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity subtractorN is
+generic(
+ N: positive
+);
+port(
+ minuend: in std_logic_vector((N-1) downto 0);
+ subtrahend: in std_logic_vector((N-1) downto 0);
+ borrow_in: in std_logic;
+ difference: out std_logic_vector((N-1) downto 0);
+ borrow_out: out std_logic
+);
+end;
+
+architecture struct_subtractorN of subtractorN is
+component subtractor is
+port(
+ minuend, subtrahend: in std_logic;
+ borrow_in: in std_logic;
+ difference: out std_logic;
+ borrow_out: out std_logic
+);
+end component;
+
+signal borrow: std_logic_vector(N downto 0);
+
+begin
+-- These expressions were derived from the truth table of a single bit subtractor and simplified with a
+-- Karnaugh map.
+-- d = difference, m = minuend, s = subtrahend, b = borrow
+--
+-- d(i) = (b(i) and (not m(i)) and (not s(i))) or
+-- ((not b(i)) and (not m(i)) and s(i)) or
+-- (b(i) and m(i) and s(i)) or
+-- ((not b(i)) and m(i) and (not s(i)))
+--
+-- b(i+1) = (not m(i) and s(i)) or
+-- (b(i) and (not m(i))) or
+-- (b(i) and s(i)
+
+ borrow(0) <= borrow_in;
+
+ u1: for i in 0 to (N-1) generate
+ u: subtractor port map(
+ minuend => minuend(i),
+ subtrahend => subtrahend(i),
+ borrow_in => borrow(i),
+ difference => difference(i),
+ borrow_out => borrow(i+1)
+ );
+ end generate;
+
+ borrow_out <= borrow(N);
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity subtractor8x2 is
+port(
+ minuend, subtrahend: in std_logic_vector(7 downto 0);
+ borrow_in: in std_logic;
+ difference: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_subtractor8x2 of subtractor8x2 is
+component subtractor is
+port(
+ minuend, subtrahend: in std_logic;
+ borrow_in: in std_logic;
+ difference: out std_logic;
+ borrow_out: out std_logic
+);
+end component;
+
+signal borrow: std_logic_vector(8 downto 0);
+signal d: std_logic_vector(7 downto 0);
+
+begin
+ borrow(0) <= borrow_in;
+
+ u1: for i in 0 to 7 generate
+ u: subtractor port map(
+ minuend => minuend(i),
+ subtrahend => subtrahend(i),
+ borrow_in => borrow(i),
+ difference => d(i),
+ borrow_out => borrow(i+1)
+ );
+ end generate;
+
+ difference <= d;
+
+ flags_out <= ( sign_bit => d(7),
+ zero_bit => not (d(0) or d(1) or d(2) or d(3) or d(4) or d(5) or d(6) or d(7)),
+ half_carry_bit => borrow(4),
+ parity_overflow_bit => (minuend(7) xor subtrahend(7)) and (minuend(7) xor d(7)),
+ add_sub_bit => '1',
+ carry_bit => borrow(8),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity adder is
+port(
+ addend, augend: in std_logic;
+ carry_in: in std_logic;
+ sum: out std_logic;
+ carry_out: out std_logic
+);
+end;
+
+architecture struct_adder of adder is
+begin
+-- These expressions are derived from a single bit full adder truth table and simplified with a
+-- Karnaugh map.
+ sum <= ((not (carry_in)) and (not addend) and augend) or
+ ((not carry_in) and addend and (not augend)) or
+ (carry_in and (not addend) and (not augend)) or
+ (carry_in and addend and augend);
+
+ carry_out <= (addend and augend) or
+ (carry_in and addend) or
+ (carry_in and augend);
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity adderN is
+generic(
+ N: positive
+);
+port(
+ addend: in std_logic_vector((N-1) downto 0);
+ augend: in std_logic_vector((N-1) downto 0);
+ carry_in: in std_logic;
+ sum: out std_logic_vector((N-1) downto 0);
+ carry_out: out std_logic
+);
+end;
+
+-- Tested with Modelsim 2015/12/11, works.
+
+architecture struct_adderN of adderN is
+component adder is
+port(
+ addend, augend: in std_logic;
+ carry_in: in std_logic;
+ sum: out std_logic;
+ carry_out: out std_logic
+);
+end component;
+
+signal carry: std_logic_vector(N downto 0);
+
+begin
+ carry(0) <= carry_in;
+
+ u1: for i in 0 to (N-1) generate
+ u: adder port map(
+ addend => addend(i),
+ augend => augend(i),
+ carry_in => carry(i),
+ sum => sum(i),
+ carry_out => carry(i+1)
+ );
+ end generate;
+
+ carry_out <= carry(N);
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity adder8x2 is
+port(
+ addend, augend: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ sum: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+-- The adderN version is not used because access to carry out of bit 3 is required.
+
+architecture struct_adder8x2 of adder8x2 is
+component adder is
+port(
+ addend, augend: in std_logic;
+ carry_in: in std_logic;
+ sum: out std_logic;
+ carry_out: out std_logic
+);
+end component;
+
+signal result: std_logic_vector(7 downto 0);
+signal carry: std_logic_vector(8 downto 0);
+
+begin
+ carry(0) <= carry_in;
+
+ u1: for i in 0 to 7 generate
+ u: adder port map(
+ addend => addend(i),
+ augend => augend(i),
+ carry_in => carry(i),
+ sum => result(i),
+ carry_out => carry(i+1)
+ );
+ end generate;
+
+ sum <= result;
+ flags_out <= ( sign_bit => result(7),
+ zero_bit => not (result(7) or result(6) or result(5) or result(4) or
+ result(3) or result(2) or result(1) or result(0)),
+ half_carry_bit => carry(4),
+ parity_overflow_bit => not (addend(7) xor augend(7)) and
+ (addend(7) xor result(7)),
+ add_sub_bit => '0',
+ carry_bit => carry(8),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity cpl is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_cpl of cpl is
+begin
+ output <= not operand;
+ flags_out <= ( half_carry_bit => '1',
+ add_sub_bit => '1',
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rlc8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rlc8bit of rlc8bit is
+
+signal rlc_result: std_logic_vector(7 downto 0);
+
+begin
+ rlc_result(7 downto 1) <= operand(6 downto 0);
+ rlc_result(0) <= operand(7);
+
+ output <= rlc_result;
+ flags_out <= ( carry_bit => operand(7),
+ parity_overflow_bit => not (rlc_result(7) xor rlc_result(6) xor rlc_result(5) xor
+ rlc_result(4) xor rlc_result(3) xor rlc_result(2) xor
+ rlc_result(1) xor rlc_result(0)),
+ zero_bit => not (rlc_result(7) or rlc_result(6) or rlc_result(5) or rlc_result(4) or
+ rlc_result(3) or rlc_result(2) or rlc_result(1) or rlc_result(0)),
+ sign_bit => rlc_result(7),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rrc8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rrc8bit of rrc8bit is
+
+signal rrc_result: std_logic_vector(7 downto 0);
+
+begin
+ rrc_result(6 downto 0) <= operand(7 downto 1);
+ rrc_result(7) <= operand(0);
+
+ output <= rrc_result;
+ flags_out <= ( carry_bit => operand(0),
+ zero_bit => not (rrc_result(7) or rrc_result(6) or rrc_result(5) or rrc_result(4) or
+ rrc_result(3) or rrc_result(2) or rrc_result(1) or rrc_result(0)),
+ parity_overflow_bit => not (rrc_result(7) xor rrc_result(6) xor rrc_result(5) xor
+ rrc_result(4) xor rrc_result(3) xor rrc_result(2) xor
+ rrc_result(1) xor rrc_result(0)),
+ sign_bit => operand(0),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rl8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rl8bit of rl8bit is
+
+signal rl_result: std_logic_vector(7 downto 0);
+
+begin
+ rl_result (7 downto 1) <= operand(6 downto 0);
+ rl_result(0) <= carry_in;
+
+ output <= rl_result;
+ flags_out <= ( carry_bit => operand(7),
+ zero_bit => not (rl_result(7) or rl_result(6) or rl_result(5) or rl_result(4) or
+ rl_result(3) or rl_result(2) or rl_result(1) or rl_result(0)),
+ parity_overflow_bit => not ((rl_result(7) xor rl_result(6) xor rl_result(5) xor
+ rl_result(4) xor rl_result(3) xor rl_result(2) xor
+ rl_result(1) xor rl_result(0))),
+ sign_bit => operand(6),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rr8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rr8bit of rr8bit is
+
+signal rr_result: std_logic_vector(7 downto 0);
+
+begin
+ rr_result(6 downto 0) <= operand(7 downto 1);
+ rr_result(7) <= carry_in;
+
+ output <= rr_result;
+ flags_out <= ( carry_bit => operand(0),
+ zero_bit => not (rr_result(7) or rr_result(6) or rr_result(5) or rr_result(4) or
+ rr_result(3) or rr_result(2) or rr_result(1) or rr_result(0)),
+ parity_overflow_bit => not (rr_result(7) xor rr_result(6) xor rr_result(5) xor
+ rr_result(4) xor rr_result(3) xor rr_result(2) xor
+ rr_result(1) xor rr_result(0)),
+ sign_bit => carry_in,
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity daa is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ flags_in: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Untested, this is nothing more than a stub with code to prevent unassigned variable warnings/errors.
+
+architecture struct_daa of daa is
+begin
+ output <= operand;
+ flags_out <= flags_in;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity bit_op is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_bit_op of bit_op is
+
+signal zero: std_logic;
+
+begin
+ zero <= '1' when (operand1 and operand2) = x"00" else '0';
+
+ flags_out <= ( zero_bit => zero,
+ half_carry_bit => '1',
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rld is
+port(
+ primary_op: in std_logic_vector(7 downto 0);
+ secondary_op: in std_logic_vector(7 downto 0);
+ result: out std_logic_vector(7 downto 0);
+ secondary_result: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rld of rld is
+
+signal primary_result: std_logic_vector(7 downto 0);
+
+begin
+ primary_result(7 downto 4) <= primary_op(7 downto 4);
+ primary_result(3 downto 0) <= secondary_op(7 downto 4);
+ result <= primary_result;
+ secondary_result(7 downto 4) <= secondary_op(3 downto 0);
+ secondary_result(3 downto 0) <= primary_op(3 downto 0);
+ flags_out <= ( sign_bit => primary_result(7),
+ zero_bit => not (primary_result(7) or primary_result(6) or primary_result(5) or
+ primary_result(4) or primary_result(3) or primary_result(2) or
+ primary_result(1) or primary_result(0)),
+ parity_overflow_bit => not (primary_result(7) xor primary_result(6) xor
+ primary_result(5) xor primary_result(4) xor
+ primary_result(3) xor primary_result(2) xor
+ primary_result(1) xor primary_result(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity rrd is
+port(
+ primary_op: in std_logic_vector(7 downto 0);
+ secondary_op: in std_logic_vector(7 downto 0);
+ result: out std_logic_vector(7 downto 0);
+ secondary_result: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_rrd of rrd is
+
+signal primary_result: std_logic_vector(7 downto 0);
+
+begin
+ primary_result(7 downto 4) <= primary_op(7 downto 4);
+ primary_result(3 downto 0) <= secondary_op(3 downto 0);
+ result <= primary_result;
+ secondary_result(7 downto 4) <= primary_op(3 downto 0);
+ secondary_result(3 downto 0) <= secondary_op(7 downto 4);
+ flags_out <= ( sign_bit => primary_result(7),
+ zero_bit => not (primary_result(7) or primary_result(6) or primary_result(5) or
+ primary_result(4) or primary_result(3) or primary_result(2) or
+ primary_result(1) or primary_result(0)),
+ parity_overflow_bit => not (primary_result(7) xor primary_result(6) xor
+ primary_result(5) xor primary_result(4) xor
+ primary_result(3) xor primary_result(2) xor
+ primary_result(1) xor primary_result(0)),
+ others => '0');
+
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity in_rc_flags is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_in_rc_flags of in_rc_flags is
+begin
+ flags_out <= ( zero_bit => not (operand(7) or operand(6) or operand(5) or operand(4) or
+ operand(3) or operand(2) or operand(1) or operand(0)),
+ sign_bit => operand(7),
+ parity_overflow_bit => not (operand(7) xor operand(6) xor operand(5) xor
+ operand(4) xor operand(3) xor operand(2) xor
+ operand(1) xor operand(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity bmtc is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested with Modelsim 2015/11/25, works.
+
+architecture struct_bmtc of bmtc is
+
+signal result: std_logic_vector(7 downto 0);
+
+begin
+ result <= operand1 or operand2;
+ output <= result;
+ flags_out <= ( parity_overflow_bit => not (result(7) or result(6) or result(5) or result(4) or
+ result(3) or result(2) or result(1) or result(0)),
+ others => '0');
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.definitions.all;
+
+entity alu is
+port(
+ -- control
+ operation: in std_logic_vector(4 downto 0);
+
+ -- operands
+ primary_operand: in std_logic_vector(7 downto 0);
+ secondary_operand: in std_logic_vector(7 downto 0);
+ flags_in: in std_logic_vector(7 downto 0);
+
+ -- results
+ output, flags_out: out std_logic_vector(7 downto 0);
+ secondary_out: out std_logic_vector(7 downto 0)
+);
+end;
+
+-- Tested 2016/11/22, works on Modelsim simulator along with all components.
+
+architecture struct_alu of alu is
+component bmtc is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component srl8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component sll8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component sra8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component sla8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component in_rc_flags is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component ccf_operation is
+port(
+ flags_in: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component cpl is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component xor8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component or8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component and8bit is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component subtractor8x2 is
+port(
+ minuend, subtrahend: in std_logic_vector(7 downto 0);
+ borrow_in: in std_logic;
+ difference: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component adder8x2 is
+port(
+ addend, augend: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ sum: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component magnitudeN is
+generic(
+ N: positive
+);
+port(
+ a: in std_logic_vector((N-1) downto 0);
+ b: in std_logic_vector((N-1) downto 0);
+ equal: out std_logic;
+ lt: out std_logic; -- '1' if a < b
+ gt: out std_logic -- '1' if a > b
+);
+end component;
+
+component rrd is
+port(
+ primary_op: in std_logic_vector(7 downto 0);
+ secondary_op: in std_logic_vector(7 downto 0);
+ result: out std_logic_vector(7 downto 0);
+ secondary_result: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component rld is
+port(
+ primary_op: in std_logic_vector(7 downto 0);
+ secondary_op: in std_logic_vector(7 downto 0);
+ result: out std_logic_vector(7 downto 0);
+ secondary_result: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component rlc8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component rl8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component rrc8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component rr8bit is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ carry_in: in std_logic;
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component daa is
+port(
+ operand: in std_logic_vector(7 downto 0);
+ flags_in: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component bit_op is
+port(
+ operand1: in std_logic_vector(7 downto 0);
+ operand2: in std_logic_vector(7 downto 0);
+ flags_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component encoder32xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ data16: in std_logic_vector((N-1) downto 0);
+ data17: in std_logic_vector((N-1) downto 0);
+ data18: in std_logic_vector((N-1) downto 0);
+ data19: in std_logic_vector((N-1) downto 0);
+ data20: in std_logic_vector((N-1) downto 0);
+ data21: in std_logic_vector((N-1) downto 0);
+ data22: in std_logic_vector((N-1) downto 0);
+ data23: in std_logic_vector((N-1) downto 0);
+ data24: in std_logic_vector((N-1) downto 0);
+ data25: in std_logic_vector((N-1) downto 0);
+ data26: in std_logic_vector((N-1) downto 0);
+ data27: in std_logic_vector((N-1) downto 0);
+ data28: in std_logic_vector((N-1) downto 0);
+ data29: in std_logic_vector((N-1) downto 0);
+ data30: in std_logic_vector((N-1) downto 0);
+ data31: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(4 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end component;
+
+component encoder2xN_oe is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ selector: in std_logic;
+ enable: in std_logic;
+ output: out std_logic_vector((N-1) downto 0)
+);
+end component;
+
+signal add_result: std_logic_vector(7 downto 0);
+signal add_carry_in: std_logic;
+signal add_flags: std_logic_vector(7 downto 0);
+
+signal and_result: std_logic_vector(7 downto 0);
+signal and_flags: std_logic_vector(7 downto 0);
+
+signal or_result: std_logic_vector(7 downto 0);
+signal or_flags: std_logic_vector(7 downto 0);
+
+signal xor_result: std_logic_vector(7 downto 0);
+signal xor_flags: std_logic_vector(7 downto 0);
+
+signal cpl_result: std_logic_vector(7 downto 0);
+signal cpl_flags: std_logic_vector(7 downto 0);
+
+signal subtract_result: std_logic_vector(7 downto 0);
+signal subtract_borrow_in: std_logic;
+signal subtract_flags: std_logic_vector(7 downto 0);
+
+signal rlc_result: std_logic_vector(7 downto 0);
+signal rlc_flags: std_logic_vector(7 downto 0);
+
+signal rrc_result: std_logic_vector(7 downto 0);
+signal rrc_flags: std_logic_vector(7 downto 0);
+
+signal rl_result: std_logic_vector(7 downto 0);
+signal rl_flags: std_logic_vector(7 downto 0);
+
+signal rr_result: std_logic_vector(7 downto 0);
+signal rr_flags: std_logic_vector(7 downto 0);
+
+signal daa_result: std_logic_vector(7 downto 0);
+signal daa_flags: std_logic_vector(7 downto 0);
+
+signal scf_flags: std_logic_vector(7 downto 0);
+
+signal ccf_carry: std_logic;
+signal ccf_flags: std_logic_vector(7 downto 0);
+
+signal bit_zero: std_logic;
+signal bit_flags: std_logic_vector(7 downto 0);
+
+signal in_flags: std_logic_vector(7 downto 0); -- flags for IN r, C instruction
+
+signal secondary_out_enable: std_logic; -- '1' when executing a rrd/rld
+ -- instruction
+
+signal rld_result: std_logic_vector(7 downto 0);
+signal secondary_rld_result: std_logic_vector(7 downto 0);
+signal rld_flags: std_logic_vector(7 downto 0);
+signal is_rld: std_logic;
+
+signal rrd_result: std_logic_vector(7 downto 0);
+signal secondary_rrd_result: std_logic_vector(7 downto 0);
+signal rrd_flags: std_logic_vector(7 downto 0);
+signal is_rrd: std_logic;
+
+signal sla_result: std_logic_vector(7 downto 0);
+signal sla_flags: std_logic_vector(7 downto 0);
+
+signal sra_result: std_logic_vector(7 downto 0);
+signal sra_flags: std_logic_vector(7 downto 0);
+
+signal sll_result: std_logic_vector(7 downto 0);
+signal sll_flags: std_logic_vector(7 downto 0);
+
+signal srl_result: std_logic_vector(7 downto 0);
+signal srl_flags: std_logic_vector(7 downto 0);
+
+signal bmtc_result: std_logic_vector(7 downto 0);
+signal bmtc_flags: std_logic_vector(7 downto 0); -- block move termination criterion
+ -- flags
+
+begin
+ -- result multiplexer, 32x8
+ u1: encoder32xN
+ generic map(
+ N => 8
+ )
+ port map(
+ data0 => add_result, -- add, ignore carry bit
+ data1 => add_result, -- add, add carry bit
+ data2 => subtract_result, -- sub, ignore borrow bit
+ data3 => subtract_result, -- sub, subtract borrow bit
+ data4 => and_result, -- and
+ data5 => xor_result, -- xor
+ data6 => or_result, -- or
+ data7 => subtract_result, -- compare (no-borrow sub with result
+ -- discarded, used to set flags)
+ data8 => rlc_result, -- RLC
+ data9 => rrc_result, -- RRC
+ data10 => rl_result, -- RL
+ data11 => rr_result, -- RR
+ data12 => daa_result, -- DAA
+ data13 => cpl_result, -- CPL
+ data14 => primary_operand, -- SCF
+ data15 => primary_operand, -- CCF
+ data16 => sla_result, -- SLA
+ data17 => sra_result, -- SRA
+ data18 => sll_result, -- SLL
+ data19 => srl_result, -- SRL
+ data20 => secondary_operand, -- BIT
+ data21 => and_result, -- RES
+ data22 => or_result, -- SET
+ data23 => primary_operand, -- IN r, (C)
+ data24 => rld_result, -- RLD
+ data25 => rrd_result, -- RRD
+ data26 => bmtc_result, -- block move termination criterion
+ data27 => (others => '0'), -- reserved
+ data28 => (others => '0'), -- reserved
+ data29 => (others => '0'), -- reserved
+ data30 => (others => '0'), -- reserved
+ data31 => (others => '0'), -- reserved
+ address => operation,
+ output => output
+ );
+
+ -- result flags multiplexer
+ u2: encoder32xN
+ generic map(
+ N => 8
+ )
+ port map(
+ data0 => add_flags, -- add
+ data1 => add_flags, -- adc
+ data2 => subtract_flags, -- sub
+ data3 => subtract_flags, -- sbc
+ data4 => and_flags, -- and
+ data5 => xor_flags, -- xor
+ data6 => or_flags, -- or
+ data7 => subtract_flags, -- cmp
+ data8 => rlc_flags, -- rlc
+ data9 => rrc_flags, -- rrc
+ data10 => rl_flags, -- rl
+ data11 => rr_flags, -- rr
+ data12 => daa_flags, -- daa
+ data13 => cpl_flags, -- cpl
+ data14 => scf_flags, -- scf
+ data15 => ccf_flags, -- ccf
+ data16 => sla_flags, -- SLA
+ data17 => sra_flags, -- SRA
+ data18 => sll_flags, -- SLL
+ data19 => srl_flags, -- SRL
+ data20 => bit_flags, -- BIT
+ data21 => (others => '0'), -- RES, no flags affected
+ data22 => (others => '0'), -- SET, no flags affected
+ data23 => in_flags, -- IN r, (C)
+ data24 => rld_flags, -- RLD
+ data25 => rrd_flags, -- RRD
+ data26 => bmtc_flags, -- block move termination criterion
+ data27 => (others => '0'), -- reserved
+ data28 => (others => '0'), -- reserved
+ data29 => (others => '0'), -- reserved
+ data30 => (others => '0'), -- reserved
+ data31 => (others => '0'), -- reserved
+ address => operation,
+ output => flags_out
+ );
+
+ scf_flags <= (carry_bit => '1', others => '0');
+
+ -- adder: This version gets flagged by ModelSim on the carry_in line as an error. Only signals or
+ -- maybe variables are allowed. Expressions are not.
+-- u3: adder8x2 port map(
+-- addend => primary_operand,
+-- augend => secondary_operand,
+-- carry_in => (flags_in(carry_bit) and operation(0)), -- carry only with adc opcode, others
+-- -- made irrelevant by result mux
+-- sum => add_result,
+-- carry_out => carry_out,
+-- overflow => add_overflow,
+-- interdigit_carry => interdigit_carry,
+-- zero => add_zero
+-- );
+
+ -- adder
+ u3: adder8x2 port map(
+ addend => primary_operand,
+ augend => secondary_operand,
+ carry_in => add_carry_in,
+ sum => add_result,
+ flags_out => add_flags
+ );
+
+ add_carry_in <= flags_in(carry_bit) and operation(0); -- carry only with adc opcode, others made
+ -- irrelevant by result mux
+
+ -- subtractor
+ u4: subtractor8x2 port map(
+ minuend => primary_operand,
+ subtrahend => secondary_operand,
+ borrow_in => subtract_borrow_in,
+ difference => subtract_result,
+ flags_out => subtract_flags
+ );
+
+ -- borrow only with sbc opcode, must remove compare opcode (operation(2 downto 0) = "111"), others
+ -- made irrelevant by result mux
+ subtract_borrow_in <= flags_in(carry_bit) and (not operation(2)) and operation(1) and operation(0);
+
+ -- bitwise and operation
+ u5: and8bit port map(
+ operand1 => primary_operand,
+ operand2 => secondary_operand,
+ output => and_result,
+ flags_out => and_flags
+ );
+
+ -- bitwise exclusive-or operation
+ u6: xor8bit port map(
+ operand1 => primary_operand,
+ operand2 => secondary_operand,
+ output => xor_result,
+ flags_out => xor_flags
+ );
+
+ -- bitwise or operation
+ u7: or8bit port map(
+ operand1 => primary_operand,
+ operand2 => secondary_operand,
+ output => or_result,
+ flags_out => or_flags
+ );
+
+ -- RLC generator
+ u8: rlc8bit port map(
+ operand => primary_operand,
+ output => rlc_result,
+ flags_out => rlc_flags
+ );
+
+ -- RRC generator
+ u9: rrc8bit port map(
+ operand => primary_operand,
+ output => rrc_result,
+ flags_out => rrc_flags
+ );
+
+ -- RL generator
+ u10: rl8bit port map(
+ operand => primary_operand,
+ carry_in => flags_in(carry_bit),
+ output => rl_result,
+ flags_out => rl_flags
+ );
+
+ -- RR generator
+ u11: rr8bit port map(
+ operand => primary_operand,
+ carry_in => flags_in(carry_bit),
+ output => rr_result,
+ flags_out => rr_flags
+ );
+
+ -- DAA
+ u12: daa port map(
+ operand => primary_operand,
+ flags_in => flags_in,
+ output => daa_result,
+ flags_out => daa_flags
+ );
+
+ -- bit testing of secondary operand against mask in primary operand
+ u13: bit_op port map(
+ operand1 => primary_operand,
+ operand2 => secondary_operand,
+ flags_out => bit_flags
+ );
+
+ u14: rld port map(
+ primary_op => primary_operand,
+ secondary_op => secondary_operand,
+ result => rld_result,
+ secondary_result => secondary_rld_result,
+ flags_out => rld_flags
+ );
+
+ u15: magnitudeN
+ generic map(
+ N => 5
+ )
+ port map(
+ a => operation,
+ b => rrd_operation,
+ equal => is_rrd,
+ lt => open,
+ gt => open
+ );
+
+ u16: magnitudeN
+ generic map(
+ N => 5
+ )
+ port map(
+ a => operation,
+ b => rld_operation,
+ equal => is_rld,
+ lt => open,
+ gt => open
+ );
+
+ u17: rrd port map(
+ primary_op => primary_operand,
+ secondary_op => secondary_operand,
+ result => rrd_result,
+ secondary_result => secondary_rrd_result,
+ flags_out => rrd_flags
+ );
+
+ u18: encoder2xN_oe
+ generic map(
+ N => 8
+ )
+ port map(
+ data0 => secondary_rld_result,
+ data1 => secondary_rrd_result,
+ selector => is_rrd,
+ enable => secondary_out_enable,
+ output => secondary_out
+ );
+
+ secondary_out_enable <= is_rrd or is_rld;
+
+ u19: cpl port map(
+ operand => primary_operand,
+ output => cpl_result,
+ flags_out => cpl_flags
+ );
+
+ u20: ccf_operation port map(
+ flags_in => flags_in,
+ flags_out => ccf_flags
+ );
+
+ u21: in_rc_flags port map(
+ operand => primary_operand,
+ flags_out => in_flags
+ );
+
+ u22: sla8bit port map(
+ operand => primary_operand,
+ output => sla_result,
+ flags_out => sla_flags
+ );
+
+ u23: sra8bit port map(
+ operand => primary_operand,
+ output => sra_result,
+ flags_out => sra_flags
+ );
+
+ u24: sll8bit port map(
+ operand => primary_operand,
+ output => sll_result,
+ flags_out => sll_flags
+ );
+
+ u25: srl8bit port map(
+ operand => primary_operand,
+ output => srl_result,
+ flags_out => srl_flags
+ );
+
+ u26: bmtc port map(
+ operand1 => primary_operand,
+ operand2 => secondary_operand,
+ output => bmtc_result,
+ flags_out => bmtc_flags
+ );
+end;
diff --git a/testsuite/gna/issue30/basicblocks.vhdl b/testsuite/gna/issue30/basicblocks.vhdl
new file mode 100644
index 000000000..e21a9ff04
--- /dev/null
+++ b/testsuite/gna/issue30/basicblocks.vhdl
@@ -0,0 +1,6992 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+package basicblocks_definitions is
+constant period: time := 10 ns;
+constant half_period: time := period / 2;
+constant reset_time: time := 11 ns;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+library work;
+use work.basicblocks_definitions.all;
+
+-- FOR SIMULATION ONLY. NOT FOR PRODUCTION.
+
+entity clkgen is
+port(
+ clk_out: out std_logic;
+ resetn: out std_logic := '0'
+);
+end;
+
+-- Tested 2016/01/19 with ghdl. works.
+
+architecture struct_clkgen of clkgen is
+
+begin
+ process begin
+
+ resetn <= '1' after reset_time;
+
+ clk_out <= '1';
+ wait for half_period;
+
+ clk_out <= '0';
+ wait for half_period;
+ end process;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity incrementer is
+port(
+ input: in std_logic;
+ carry_in: in std_logic;
+ sum: out std_logic;
+ carry_out: out std_logic
+);
+end;
+
+-- tested with ghdl for N = 16 starting 2016/01/22, finished ?, works.
+
+architecture struct_incrementer of incrementer is
+begin
+ sum <= input xor carry_in;
+ carry_out <= input and carry_in;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity andNbit is
+generic(
+ N: positive
+);
+port(
+ input: in std_logic_vector((N-1) downto 0);
+ y: out std_logic
+);
+end;
+
+-- Tested as part of counter testing. Works.
+
+architecture struct_andNbit of andNbit is
+
+signal and_vector: std_logic_vector(N downto 0);
+
+begin
+ and_vector(0) <= '1';
+
+ and_generator:
+ for i in 1 to N generate
+ and_vector(i) <= and_vector(i-1) and input(i-1);
+ end generate and_generator;
+
+ y <= and_vector(N);
+
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity orNbit is
+generic(
+ N: positive
+);
+port(
+ input: in std_logic_vector((N-1) downto 0);
+ y: out std_logic
+);
+end;
+
+architecture struct_orNbit of orNbit is
+
+signal or_vector: std_logic_vector(N downto 0);
+
+begin
+ or_vector(0) <= '0';
+
+ or_generator:
+ for i in 1 to N generate
+ or_vector(i) <= or_vector(i-1) or input(i-1);
+ end generate or_generator;
+
+ y <= or_vector(N);
+
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity incrementerN is
+generic(
+ N: positive
+);
+port(
+ input: in std_logic_vector((N-1) downto 0);
+ carry_in: in std_logic;
+ sum: out std_logic_vector((N-1) downto 0);
+ carry_out: out std_logic
+);
+end;
+
+-- tested with ghdl at N = 16 starting 2016/01/22, finished ?, works.
+
+architecture struct_incrementerN of incrementerN is
+component incrementer is
+port(
+ input: in std_logic;
+ carry_in: in std_logic;
+ sum: out std_logic;
+ carry_out: out std_logic
+);
+end component;
+
+signal carry: std_logic_vector(N downto 0);
+signal result: std_logic_vector((N-1) downto 0);
+
+begin
+ carry(0) <= carry_in;
+
+ u1: for i in (N-1) downto 0 generate
+ u: incrementer port map(
+ input => input(i),
+ carry_in => carry(i),
+ sum => result(i),
+ carry_out => carry(i + 1)
+ );
+ end generate;
+
+ carry_out <= carry(N);
+ sum <= result;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x16 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ address: in std_logic_vector(3 downto 0)
+);
+end;
+
+architecture struct_decoder1x16 of decoder1x16 is
+begin
+ with address select y0 <= data when x"0", '0' when others;
+ with address select y1 <= data when x"1", '0' when others;
+ with address select y2 <= data when x"2", '0' when others;
+ with address select y3 <= data when x"3", '0' when others;
+ with address select y4 <= data when x"4", '0' when others;
+ with address select y5 <= data when x"5", '0' when others;
+ with address select y6 <= data when x"6", '0' when others;
+ with address select y7 <= data when x"7", '0' when others;
+ with address select y8 <= data when x"8", '0' when others;
+ with address select y9 <= data when x"9", '0' when others;
+ with address select y10 <= data when x"a", '0' when others;
+ with address select y11 <= data when x"b", '0' when others;
+ with address select y12 <= data when x"c", '0' when others;
+ with address select y13 <= data when x"d", '0' when others;
+ with address select y14 <= data when x"e", '0' when others;
+ with address select y15 <= data when x"f", '0' when others;
+end;
+
+-- For reasons unknown, ghdl appears to ignore the generic definition of N in this and only
+-- this architecture. Error messages are generated at line 129 onwards. No unusual characters
+-- found in the file where the first error message is generated.
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx16 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ y8: out std_logic_vector((N-1) downto 0);
+ y9: out std_logic_vector((N-1) downto 0);
+ y10: out std_logic_vector((N-1) downto 0);
+ y11: out std_logic_vector((N-1) downto 0);
+ y12: out std_logic_vector((N-1) downto 0);
+ y13: out std_logic_vector((N-1) downto 0);
+ y14: out std_logic_vector((N-1) downto 0);
+ y15: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(3 downto 0)
+);
+end;
+
+architecture struct_decoderNx16 of decoderNx16 is
+component decoder1x16 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ address: in std_logic_vector(3 downto 0)
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: decoder1x16 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ y8 => y8(i),
+ y9 => y9(i),
+ y10 => y10(i),
+ y11 => y11(i),
+ y12 => y12(i),
+ y13 => y13(i),
+ y14 => y14(i),
+ y15 => y15(i),
+ address => address
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x2 is
+port(
+ data: in std_logic;
+ selector: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic
+);
+end;
+
+-- Tested 2015/12/04 with Modelsim. Works.
+
+architecture struct_decoder1x2 of decoder1x2 is
+begin
+ with selector select y0 <= data when '0', '0' when others;
+ with selector select y1 <= data when '1', '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx2 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ selector: in std_logic;
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/27 at N = 8 with modelsim. works.
+-- tested 2016/01/23 at N = 8 with ghdl. works.
+
+architecture struct_decoderNx2 of decoderNx2 is
+component decoder1x2 is
+port(
+ data: in std_logic;
+ selector: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: decoder1x2 port map(
+ data => data(i),
+ selector => selector,
+ y0 => y0(i),
+ y1 => y1(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder2x1oe is
+port(
+ data0, data1: in std_logic;
+ selector: in std_logic;
+ enable: in std_logic;
+ output: out std_logic
+);
+end;
+
+-- tested during testing of encoder2xNoe, works.
+
+architecture struct_encoder2x1oe of encoder2x1oe is
+begin
+ with selector select
+ output <= (data0 and enable) when '0',
+ (data1 and enable) when '1',
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder2xN_oe is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ selector: in std_logic;
+ enable: in std_logic;
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+architecture struct_encoder2xN_oe of encoder2xN_oe is
+component encoder2x1oe is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ selector: in std_logic;
+ enable: in std_logic;
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder2x1oe port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ selector => selector,
+ enable => enable,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder2x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ selector: in std_logic;
+ output: out std_logic
+);
+end;
+
+-- tested during double register pair testing 2015/12/03. Works.
+
+architecture struct_encoder2x1 of encoder2x1 is
+begin
+ with selector select
+ output <= data0 when '0',
+ data1 when '1',
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder2xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ selector: in std_logic;
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested during double register pair testing 2015/12/03. Works for N = 8.
+-- also tested during alu testing. works there too.
+
+architecture struct_encoder2xN of encoder2xN is
+component encoder2x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ selector: in std_logic;
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder2x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ selector => selector,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity synchronous_latch is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end;
+
+-- Tested 2016/11/21, works on Modelsim simulator.
+
+architecture struct_synchronous_latch of synchronous_latch is
+begin
+ process(rstn, clock, clock_enable)
+ variable datum: std_logic;
+ begin
+ if rstn = '0' then
+ datum := '0';
+ elsif rising_edge(clock) then
+ if clock_enable = '1' then
+ datum := d;
+ end if;
+ end if;
+
+ q <= datum;
+ end process;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+-- library altera;
+-- use altera.altera_primitives_components.all;
+
+entity synchronous_latchN is
+generic(
+ N: positive
+);
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic_vector((N-1) downto 0);
+ q: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- Tested 2016/11/21, works on Modelsim simulator.
+
+architecture struct_synchronous_latchN of synchronous_latchN is
+component synchronous_latch is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end component;
+
+begin
+ u1: for i in 0 to (N-1) generate
+ u: synchronous_latch port map(
+ rstn => rstn,
+ clock => clock,
+ clock_enable => clock_enable,
+ d => d(i),
+ q => q(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity synchronous_latch_oe is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ oe: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end;
+
+-- tested 2015/12/27 as part of testing synchronous_latchN_oe. works.
+
+architecture struct_synchronous_latch_oe of synchronous_latch_oe is
+begin
+ process(rstn, clock, clock_enable, oe)
+ variable datum: std_logic;
+ begin
+ if rstn = '0' then
+ datum := '0';
+ elsif rising_edge(clock) then
+ if clock_enable = '1' then
+ datum := d;
+ end if;
+ end if;
+
+ if oe = '1' then
+ q <= datum;
+ else
+ q <= 'Z';
+ end if;
+ end process;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity synchronous_latchN_oe is
+generic(
+ N: positive
+);
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ oe: in std_logic;
+ d: in std_logic_vector((N-1) downto 0);
+ q: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/27, N = 8 with modelsim. works.
+
+architecture struct_synchronous_latchN_oe of synchronous_latchN_oe is
+component synchronous_latch_oe is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ oe: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: synchronous_latch_oe port map(
+ rstn => rstn,
+ clock => clock,
+ clock_enable => clock_enable,
+ oe => oe,
+ d => d(i),
+ q => q(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity synchronous_latch_autoclear is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end;
+
+-- Tested 2016/11/21, works on Modelsim simulator.
+
+architecture struct_synchronous_latch_autoclear of synchronous_latch_autoclear is
+begin
+ process(rstn, clock)
+ variable datum: std_logic;
+ begin
+ if rstn = '0' then
+ datum := '0';
+ elsif rising_edge(clock) then
+ if clock_enable = '1' then
+ if datum = '1' then
+ datum := '0';
+ else
+ datum := d;
+ end if;
+ else
+ datum := '0';
+ end if;
+ end if;
+
+ q <= datum;
+ end process;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder4x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ address: in std_logic_vector(1 downto 0);
+ output: out std_logic
+ );
+end;
+
+-- tested 2015/12/26 with modelsim as part of encoder4xN, works.
+
+architecture struct_encoder4x1 of encoder4x1 is
+begin
+ with address select
+ output <= data0 when "00",
+ data1 when "01",
+ data2 when "10",
+ data3 when "11",
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder4xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(1 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+ );
+end;
+
+-- tested 2015/12/26 with modelsim at N = 16, works.
+
+architecture struct_encoder4xN of encoder4xN is
+component encoder4x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ address: in std_logic_vector(1 downto 0);
+ output: out std_logic
+ );
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder4x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder8x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ address: in std_logic_vector(2 downto 0);
+ output: out std_logic
+);
+end;
+
+-- tested 2015/12/26 as part of encoder8xN with modelsim, works.
+
+architecture struct_encoder8x1 of encoder8x1 is
+begin
+ with address select
+ output <= data0 when "000",
+ data1 when "001",
+ data2 when "010",
+ data3 when "011",
+ data4 when "100",
+ data5 when "101",
+ data6 when "110",
+ data7 when "111",
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder8xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(2 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/26 for N = 8 with modelsim, works.
+
+architecture struct_encoder8xN of encoder8xN is
+component encoder8x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ address: in std_logic_vector(2 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder8x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x8 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ address: in std_logic_vector(2 downto 0)
+);
+end;
+
+-- tested 2015/12/30 with modelsim as part of decoderNx8, works.
+
+architecture struct_decoder1x8 of decoder1x8 is
+begin
+ with address select y0 <= data when "000", '0' when others;
+ with address select y1 <= data when "001", '0' when others;
+ with address select y2 <= data when "010", '0' when others;
+ with address select y3 <= data when "011", '0' when others;
+ with address select y4 <= data when "100", '0' when others;
+ with address select y5 <= data when "101", '0' when others;
+ with address select y6 <= data when "110", '0' when others;
+ with address select y7 <= data when "111", '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx8 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(2 downto 0)
+);
+end;
+
+-- tested 2015/12/30 with modelsim, works.
+
+architecture struct_decoderNx8 of decoderNx8 is
+component decoder1x8 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ address: in std_logic_vector(2 downto 0)
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: decoder1x8 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ address=> address
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder16x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ address: in std_logic_vector(3 downto 0);
+ output: out std_logic
+);
+end;
+
+-- tested with Modelsim 2015/12/24 as part of encoder16xN, works with N = 8.
+
+architecture struct_encoder16x1 of encoder16x1 is
+begin
+ with address select
+ output <= data0 when "0000",
+ data1 when "0001",
+ data2 when "0010",
+ data3 when "0011",
+ data4 when "0100",
+ data5 when "0101",
+ data6 when "0110",
+ data7 when "0111",
+ data8 when "1000",
+ data9 when "1001",
+ data10 when "1010",
+ data11 when "1011",
+ data12 when "1100",
+ data13 when "1101",
+ data14 when "1110",
+ data15 when "1111",
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder16xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(3 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested with Modelsim 2015/12/24, works with N = 8.
+
+architecture struct_encoder16xN of encoder16xN is
+component encoder16x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ address: in std_logic_vector(3 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder16x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ data8 => data8(i),
+ data9 => data9(i),
+ data10 => data10(i),
+ data11 => data11(i),
+ data12 => data12(i),
+ data13 => data13(i),
+ data14 => data14(i),
+ data15 => data15(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder32x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ address: in std_logic_vector(4 downto 0);
+ output: out std_logic
+);
+end;
+
+-- tested 2015/12/24 as part of testing encoder32xN. Works.
+
+architecture struct_encoder32x1 of encoder32x1 is
+begin
+ with address select
+ output <= data0 when "00000",
+ data1 when "00001",
+ data2 when "00010",
+ data3 when "00011",
+ data4 when "00100",
+ data5 when "00101",
+ data6 when "00110",
+ data7 when "00111",
+ data8 when "01000",
+ data9 when "01001",
+ data10 when "01010",
+ data11 when "01011",
+ data12 when "01100",
+ data13 when "01101",
+ data14 when "01110",
+ data15 when "01111",
+ data16 when "10000",
+ data17 when "10001",
+ data18 when "10010",
+ data19 when "10011",
+ data20 when "10100",
+ data21 when "10101",
+ data22 when "10110",
+ data23 when "10111",
+ data24 when "11000",
+ data25 when "11001",
+ data26 when "11010",
+ data27 when "11011",
+ data28 when "11100",
+ data29 when "11101",
+ data30 when "11110",
+ data31 when "11111",
+ '0' when others;
+end;
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder32xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ data16: in std_logic_vector((N-1) downto 0);
+ data17: in std_logic_vector((N-1) downto 0);
+ data18: in std_logic_vector((N-1) downto 0);
+ data19: in std_logic_vector((N-1) downto 0);
+ data20: in std_logic_vector((N-1) downto 0);
+ data21: in std_logic_vector((N-1) downto 0);
+ data22: in std_logic_vector((N-1) downto 0);
+ data23: in std_logic_vector((N-1) downto 0);
+ data24: in std_logic_vector((N-1) downto 0);
+ data25: in std_logic_vector((N-1) downto 0);
+ data26: in std_logic_vector((N-1) downto 0);
+ data27: in std_logic_vector((N-1) downto 0);
+ data28: in std_logic_vector((N-1) downto 0);
+ data29: in std_logic_vector((N-1) downto 0);
+ data30: in std_logic_vector((N-1) downto 0);
+ data31: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(4 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/24 with N = 8. Works.
+
+architecture struct_encoder32xN of encoder32xN is
+component encoder32x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ address: in std_logic_vector(4 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder32x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ data8 => data8(i),
+ data9 => data9(i),
+ data10 => data10(i),
+ data11 => data11(i),
+ data12 => data12(i),
+ data13 => data13(i),
+ data14 => data14(i),
+ data15 => data15(i),
+ data16 => data16(i),
+ data17 => data17(i),
+ data18 => data18(i),
+ data19 => data19(i),
+ data20 => data20(i),
+ data21 => data21(i),
+ data22 => data22(i),
+ data23 => data23(i),
+ data24 => data24(i),
+ data25 => data25(i),
+ data26 => data26(i),
+ data27 => data27(i),
+ data28 => data28(i),
+ data29 => data29(i),
+ data30 => data30(i),
+ data31 => data31(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity tristate is
+port(
+ a: in std_logic;
+ enable: in std_logic;
+ y: out std_logic
+);
+end;
+
+-- tested 2015/12/27 with modelsim as part of tristateN testing. works.
+-- tested 2016/01/23 with ghdl as part of tristateN testing. works.
+
+architecture struct_tristate of tristate is
+begin
+ y <= a when enable = '1' else 'Z';
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity tristateN is
+generic(
+ N: positive
+);
+port(
+ a: in std_logic_vector((N-1) downto 0);
+ enable: in std_logic;
+ y: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/27 at N = 16 with modelsim. works.
+-- tested 2016/01/23 at N = 16 with ghdl. works.
+
+architecture struct_tristateN of tristateN is
+component tristate is
+port(
+ a: in std_logic;
+ enable: in std_logic;
+ y: out std_logic
+);
+end component;
+
+begin
+ u1: for i in 0 to (N-1) generate
+ u: tristate port map(
+ a => a(i),
+ enable => enable,
+ y => y(i)
+ );
+ end generate;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity toggle_ff is
+port(
+ clk: in std_logic;
+ clock_enable: in std_logic;
+ resetn: in std_logic;
+ q: out std_logic
+);
+end;
+
+-- tested 2015/12/26 with modelsim, works.
+
+architecture struct_toggle_ff of toggle_ff is
+component synchronous_latch is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end component;
+
+component synchronous_latch_autoclear is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end component;
+
+component encoder2x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ selector: in std_logic;
+ output: out std_logic
+);
+end component;
+
+signal toggle_output: std_logic;
+signal toggle_clock: std_logic;
+signal flipflop_data: std_logic;
+signal not_toggle_output: std_logic;
+signal notclock: std_logic;
+
+begin
+ u1: synchronous_latch port map(
+ rstn => resetn,
+ clock => clk,
+ clock_enable => toggle_clock,
+ d => flipflop_data,
+ q => toggle_output
+ );
+
+ u2: encoder2x1 port map(
+ data0 => toggle_output,
+ data1 => not_toggle_output,
+ selector => toggle_clock,
+ output => flipflop_data
+ );
+
+ u3: synchronous_latch_autoclear port map(
+ rstn => resetn,
+ clock => notclock,
+ clock_enable => clock_enable,
+ d => clock_enable,
+ q => toggle_clock
+ );
+
+ not_toggle_output <= not toggle_output;
+ notclock <= not clk;
+ q <= toggle_output;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity magnitude is
+port(
+ a, b: in std_logic;
+ equal: out std_logic;
+ lt: out std_logic; -- '1' if a < b
+ gt: out std_logic -- '1' if a > b
+);
+end;
+
+-- tested 2015/12/26 with modelsim, works.
+
+architecture struct_magnitude of magnitude is
+
+signal equals: std_logic;
+signal less: std_logic;
+
+begin
+ equals <= not (a xor b);
+ less <= (not a) and b;
+ gt <= equals nor less;
+ equal <= equals;
+ lt <= less;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity magnitudeN is
+generic(
+ N: positive
+);
+port(
+ a, b: in std_logic_vector((N-1) downto 0);
+ equal: out std_logic;
+ lt: out std_logic; -- '1' if a < b
+ gt: out std_logic -- '1' if a > b
+);
+end;
+
+--tested with ghdl 2016/01/26, works.
+
+architecture struct_magnitudeN of magnitudeN is
+
+signal equals: std_logic_vector((N-1) downto 0);
+signal less: std_logic_vector((N-1) downto 0);
+
+begin
+ equals(N-1) <= not (a(N-1) xor b(N-1));
+ less (N-1) <= (not a(N-1)) and b(N-1);
+
+ u1: for i in (N-1) downto 1 generate
+ equals(i-1) <= equals(i) and (not (a(i-1) xor b(i-1)));
+ less(i-1) <= less(i) or (((not a(i-1)) and b(i-1)) and equals(i));
+ end generate u1;
+
+ equal <= equals(0);
+ lt <= less(0);
+ gt <= equals(0) nor less(0);
+end;
+
+
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude2 is
+--port(
+-- a, b: in std_logic_vector(1 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude2 of magnitude2 is
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(1),
+-- b => b(1),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude port map(
+-- a => a(0),
+-- b => b(0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude3 is
+--port(
+-- a, b: in std_logic_vector(2 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude3 of magnitude3 is
+--component magnitude2 is
+--port(
+-- a, b: in std_logic_vector(1 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(2),
+-- b => b(2),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude2 port map(
+-- a => a(1 downto 0),
+-- b => b(1 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude4 is
+--port(
+-- a, b: in std_logic_vector(3 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude4 of magnitude4 is
+--component magnitude3 is
+--port(
+-- a, b: in std_logic_vector(2 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(3),
+-- b => b(3),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude3 port map(
+-- a => a(2 downto 0),
+-- b => b(2 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude5 is
+--port(
+-- a, b: in std_logic_vector(4 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude5 of magnitude5 is
+--component magnitude4 is
+--port(
+-- a, b: in std_logic_vector(3 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(4),
+-- b => b(4),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude4 port map(
+-- a => a(3 downto 0),
+-- b => b(3 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude6 is
+--port(
+-- a, b: in std_logic_vector(5 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude6 of magnitude6 is
+--component magnitude5 is
+--port(
+-- a, b: in std_logic_vector(4 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(5),
+-- b => b(5),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude5 port map(
+-- a => a(4 downto 0),
+-- b => b(4 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude7 is
+--port(
+-- a, b: in std_logic_vector(6 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--
+--architecture struct_magnitude7 of magnitude7 is
+--component magnitude6 is
+--port(
+-- a, b: in std_logic_vector(5 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(6),
+-- b => b(6),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude6 port map(
+-- a => a(5 downto 0),
+-- b => b(5 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+--
+--library ieee;
+--use ieee.std_logic_1164.all;
+--
+--entity magnitude8 is
+--port(
+-- a, b: in std_logic_vector(7 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end;
+--
+---- tested 2015/12/26 with modelsim, works.
+--architecture struct_magnitude8 of magnitude8 is
+--component magnitude7 is
+--port(
+-- a, b: in std_logic_vector(6 downto 0);
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--component magnitude is
+--port(
+-- a, b: in std_logic;
+-- equal: out std_logic;
+-- lt: out std_logic; -- '1' if a < b
+-- gt: out std_logic -- '1' if a > b
+--);
+--end component;
+--
+--signal high_equals: std_logic;
+--signal high_lt: std_logic;
+--signal high_gt: std_logic;
+--
+--signal low_equals: std_logic;
+--signal low_lt: std_logic;
+--signal low_gt: std_logic;
+--
+--signal equals: std_logic;
+--signal less: std_logic;
+--
+--begin
+-- u1: magnitude port map(
+-- a => a(7),
+-- b => b(7),
+-- equal => high_equals,
+-- lt => high_lt,
+-- gt => high_gt
+-- );
+--
+-- u2: magnitude7 port map(
+-- a => a(6 downto 0),
+-- b => b(6 downto 0),
+-- equal => low_equals,
+-- lt => low_lt,
+-- gt => low_gt
+-- );
+--
+-- equals <= high_equals and low_equals;
+-- less <= high_lt or (high_equals and low_lt);
+-- gt <= equals nor less;
+-- equal <= equals;
+-- lt <= less;
+--end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder64x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ address: in std_logic_vector(5 downto 0);
+ output: out std_logic
+);
+end;
+
+-- tested 2015/12/24 with modelsim as part of encoder64xN. works.
+
+architecture struct_encoder64x1 of encoder64x1 is
+begin
+ with address select
+ output <=
+ data0 when "000000",
+ data1 when "000001",
+ data2 when "000010",
+ data3 when "000011",
+ data4 when "000100",
+ data5 when "000101",
+ data6 when "000110",
+ data7 when "000111",
+ data8 when "001000",
+ data9 when "001001",
+ data10 when "001010",
+ data11 when "001011",
+ data12 when "001100",
+ data13 when "001101",
+ data14 when "001110",
+ data15 when "001111",
+ data16 when "010000",
+ data17 when "010001",
+ data18 when "010010",
+ data19 when "010011",
+ data20 when "010100",
+ data21 when "010101",
+ data22 when "010110",
+ data23 when "010111",
+ data24 when "011000",
+ data25 when "011001",
+ data26 when "011010",
+ data27 when "011011",
+ data28 when "011100",
+ data29 when "011101",
+ data30 when "011110",
+ data31 when "011111",
+ data32 when "100000",
+ data33 when "100001",
+ data34 when "100010",
+ data35 when "100011",
+ data36 when "100100",
+ data37 when "100101",
+ data38 when "100110",
+ data39 when "100111",
+ data40 when "101000",
+ data41 when "101001",
+ data42 when "101010",
+ data43 when "101011",
+ data44 when "101100",
+ data45 when "101101",
+ data46 when "101110",
+ data47 when "101111",
+ data48 when "110000",
+ data49 when "110001",
+ data50 when "110010",
+ data51 when "110011",
+ data52 when "110100",
+ data53 when "110101",
+ data54 when "110110",
+ data55 when "110111",
+ data56 when "111000",
+ data57 when "111001",
+ data58 when "111010",
+ data59 when "111011",
+ data60 when "111100",
+ data61 when "111101",
+ data62 when "111110",
+ data63 when "111111",
+ '0' when others;
+end;
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder64xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ data16: in std_logic_vector((N-1) downto 0);
+ data17: in std_logic_vector((N-1) downto 0);
+ data18: in std_logic_vector((N-1) downto 0);
+ data19: in std_logic_vector((N-1) downto 0);
+ data20: in std_logic_vector((N-1) downto 0);
+ data21: in std_logic_vector((N-1) downto 0);
+ data22: in std_logic_vector((N-1) downto 0);
+ data23: in std_logic_vector((N-1) downto 0);
+ data24: in std_logic_vector((N-1) downto 0);
+ data25: in std_logic_vector((N-1) downto 0);
+ data26: in std_logic_vector((N-1) downto 0);
+ data27: in std_logic_vector((N-1) downto 0);
+ data28: in std_logic_vector((N-1) downto 0);
+ data29: in std_logic_vector((N-1) downto 0);
+ data30: in std_logic_vector((N-1) downto 0);
+ data31: in std_logic_vector((N-1) downto 0);
+ data32: in std_logic_vector((N-1) downto 0);
+ data33: in std_logic_vector((N-1) downto 0);
+ data34: in std_logic_vector((N-1) downto 0);
+ data35: in std_logic_vector((N-1) downto 0);
+ data36: in std_logic_vector((N-1) downto 0);
+ data37: in std_logic_vector((N-1) downto 0);
+ data38: in std_logic_vector((N-1) downto 0);
+ data39: in std_logic_vector((N-1) downto 0);
+ data40: in std_logic_vector((N-1) downto 0);
+ data41: in std_logic_vector((N-1) downto 0);
+ data42: in std_logic_vector((N-1) downto 0);
+ data43: in std_logic_vector((N-1) downto 0);
+ data44: in std_logic_vector((N-1) downto 0);
+ data45: in std_logic_vector((N-1) downto 0);
+ data46: in std_logic_vector((N-1) downto 0);
+ data47: in std_logic_vector((N-1) downto 0);
+ data48: in std_logic_vector((N-1) downto 0);
+ data49: in std_logic_vector((N-1) downto 0);
+ data50: in std_logic_vector((N-1) downto 0);
+ data51: in std_logic_vector((N-1) downto 0);
+ data52: in std_logic_vector((N-1) downto 0);
+ data53: in std_logic_vector((N-1) downto 0);
+ data54: in std_logic_vector((N-1) downto 0);
+ data55: in std_logic_vector((N-1) downto 0);
+ data56: in std_logic_vector((N-1) downto 0);
+ data57: in std_logic_vector((N-1) downto 0);
+ data58: in std_logic_vector((N-1) downto 0);
+ data59: in std_logic_vector((N-1) downto 0);
+ data60: in std_logic_vector((N-1) downto 0);
+ data61: in std_logic_vector((N-1) downto 0);
+ data62: in std_logic_vector((N-1) downto 0);
+ data63: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(5 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+-- tested 2015/12/24 with modelsim and N = 8. works.
+
+architecture struct_encoder64xN of encoder64xN is
+component encoder64x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ address: in std_logic_vector(5 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in 0 to (N-1) generate
+ u: encoder64x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ data8 => data8(i),
+ data9 => data9(i),
+ data10 => data10(i),
+ data11 => data11(i),
+ data12 => data12(i),
+ data13 => data13(i),
+ data14 => data14(i),
+ data15 => data15(i),
+ data16 => data16(i),
+ data17 => data17(i),
+ data18 => data18(i),
+ data19 => data19(i),
+ data20 => data20(i),
+ data21 => data21(i),
+ data22 => data22(i),
+ data23 => data23(i),
+ data24 => data24(i),
+ data25 => data25(i),
+ data26 => data26(i),
+ data27 => data27(i),
+ data28 => data28(i),
+ data29 => data29(i),
+ data30 => data30(i),
+ data31 => data31(i),
+ data32 => data32(i),
+ data33 => data33(i),
+ data34 => data34(i),
+ data35 => data35(i),
+ data36 => data36(i),
+ data37 => data37(i),
+ data38 => data38(i),
+ data39 => data39(i),
+ data40 => data40(i),
+ data41 => data41(i),
+ data42 => data42(i),
+ data43 => data43(i),
+ data44 => data44(i),
+ data45 => data45(i),
+ data46 => data46(i),
+ data47 => data47(i),
+ data48 => data48(i),
+ data49 => data49(i),
+ data50 => data50(i),
+ data51 => data51(i),
+ data52 => data52(i),
+ data53 => data53(i),
+ data54 => data54(i),
+ data55 => data55(i),
+ data56 => data56(i),
+ data57 => data57(i),
+ data58 => data58(i),
+ data59 => data59(i),
+ data60 => data60(i),
+ data61 => data61(i),
+ data62 => data62(i),
+ data63 => data63(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x64 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ address: in std_logic_vector(5 downto 0)
+);
+end;
+
+-- tested 2015/12/26 as part of decoderNx64 using modelsim. works.
+
+architecture struct_decoder1x64 of decoder1x64 is
+begin
+ with address select y0 <= data when "000000", '0' when others;
+ with address select y1 <= data when "000001", '0' when others;
+ with address select y2 <= data when "000010", '0' when others;
+ with address select y3 <= data when "000011", '0' when others;
+ with address select y4 <= data when "000100", '0' when others;
+ with address select y5 <= data when "000101", '0' when others;
+ with address select y6 <= data when "000110", '0' when others;
+ with address select y7 <= data when "000111", '0' when others;
+ with address select y8 <= data when "001000", '0' when others;
+ with address select y9 <= data when "001001", '0' when others;
+ with address select y10 <= data when "001010", '0' when others;
+ with address select y11 <= data when "001011", '0' when others;
+ with address select y12 <= data when "001100", '0' when others;
+ with address select y13 <= data when "001101", '0' when others;
+ with address select y14 <= data when "001110", '0' when others;
+ with address select y15 <= data when "001111", '0' when others;
+ with address select y16 <= data when "010000", '0' when others;
+ with address select y17 <= data when "010001", '0' when others;
+ with address select y18 <= data when "010010", '0' when others;
+ with address select y19 <= data when "010011", '0' when others;
+ with address select y20 <= data when "010100", '0' when others;
+ with address select y21 <= data when "010101", '0' when others;
+ with address select y22 <= data when "010110", '0' when others;
+ with address select y23 <= data when "010111", '0' when others;
+ with address select y24 <= data when "011000", '0' when others;
+ with address select y25 <= data when "011001", '0' when others;
+ with address select y26 <= data when "011010", '0' when others;
+ with address select y27 <= data when "011011", '0' when others;
+ with address select y28 <= data when "011100", '0' when others;
+ with address select y29 <= data when "011101", '0' when others;
+ with address select y30 <= data when "011110", '0' when others;
+ with address select y31 <= data when "011111", '0' when others;
+ with address select y32 <= data when "100000", '0' when others;
+ with address select y33 <= data when "100001", '0' when others;
+ with address select y34 <= data when "100010", '0' when others;
+ with address select y35 <= data when "100011", '0' when others;
+ with address select y36 <= data when "100100", '0' when others;
+ with address select y37 <= data when "100101", '0' when others;
+ with address select y38 <= data when "100110", '0' when others;
+ with address select y39 <= data when "100111", '0' when others;
+ with address select y40 <= data when "101000", '0' when others;
+ with address select y41 <= data when "101001", '0' when others;
+ with address select y42 <= data when "101010", '0' when others;
+ with address select y43 <= data when "101011", '0' when others;
+ with address select y44 <= data when "101100", '0' when others;
+ with address select y45 <= data when "101101", '0' when others;
+ with address select y46 <= data when "101110", '0' when others;
+ with address select y47 <= data when "101111", '0' when others;
+ with address select y48 <= data when "110000", '0' when others;
+ with address select y49 <= data when "110001", '0' when others;
+ with address select y50 <= data when "110010", '0' when others;
+ with address select y51 <= data when "110011", '0' when others;
+ with address select y52 <= data when "110100", '0' when others;
+ with address select y53 <= data when "110101", '0' when others;
+ with address select y54 <= data when "110110", '0' when others;
+ with address select y55 <= data when "110111", '0' when others;
+ with address select y56 <= data when "111000", '0' when others;
+ with address select y57 <= data when "111001", '0' when others;
+ with address select y58 <= data when "111010", '0' when others;
+ with address select y59 <= data when "111011", '0' when others;
+ with address select y60 <= data when "111100", '0' when others;
+ with address select y61 <= data when "111101", '0' when others;
+ with address select y62 <= data when "111110", '0' when others;
+ with address select y63 <= data when "111111", '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx64 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ y8: out std_logic_vector((N-1) downto 0);
+ y9: out std_logic_vector((N-1) downto 0);
+ y10: out std_logic_vector((N-1) downto 0);
+ y11: out std_logic_vector((N-1) downto 0);
+ y12: out std_logic_vector((N-1) downto 0);
+ y13: out std_logic_vector((N-1) downto 0);
+ y14: out std_logic_vector((N-1) downto 0);
+ y15: out std_logic_vector((N-1) downto 0);
+ y16: out std_logic_vector((N-1) downto 0);
+ y17: out std_logic_vector((N-1) downto 0);
+ y18: out std_logic_vector((N-1) downto 0);
+ y19: out std_logic_vector((N-1) downto 0);
+ y20: out std_logic_vector((N-1) downto 0);
+ y21: out std_logic_vector((N-1) downto 0);
+ y22: out std_logic_vector((N-1) downto 0);
+ y23: out std_logic_vector((N-1) downto 0);
+ y24: out std_logic_vector((N-1) downto 0);
+ y25: out std_logic_vector((N-1) downto 0);
+ y26: out std_logic_vector((N-1) downto 0);
+ y27: out std_logic_vector((N-1) downto 0);
+ y28: out std_logic_vector((N-1) downto 0);
+ y29: out std_logic_vector((N-1) downto 0);
+ y30: out std_logic_vector((N-1) downto 0);
+ y31: out std_logic_vector((N-1) downto 0);
+ y32: out std_logic_vector((N-1) downto 0);
+ y33: out std_logic_vector((N-1) downto 0);
+ y34: out std_logic_vector((N-1) downto 0);
+ y35: out std_logic_vector((N-1) downto 0);
+ y36: out std_logic_vector((N-1) downto 0);
+ y37: out std_logic_vector((N-1) downto 0);
+ y38: out std_logic_vector((N-1) downto 0);
+ y39: out std_logic_vector((N-1) downto 0);
+ y40: out std_logic_vector((N-1) downto 0);
+ y41: out std_logic_vector((N-1) downto 0);
+ y42: out std_logic_vector((N-1) downto 0);
+ y43: out std_logic_vector((N-1) downto 0);
+ y44: out std_logic_vector((N-1) downto 0);
+ y45: out std_logic_vector((N-1) downto 0);
+ y46: out std_logic_vector((N-1) downto 0);
+ y47: out std_logic_vector((N-1) downto 0);
+ y48: out std_logic_vector((N-1) downto 0);
+ y49: out std_logic_vector((N-1) downto 0);
+ y50: out std_logic_vector((N-1) downto 0);
+ y51: out std_logic_vector((N-1) downto 0);
+ y52: out std_logic_vector((N-1) downto 0);
+ y53: out std_logic_vector((N-1) downto 0);
+ y54: out std_logic_vector((N-1) downto 0);
+ y55: out std_logic_vector((N-1) downto 0);
+ y56: out std_logic_vector((N-1) downto 0);
+ y57: out std_logic_vector((N-1) downto 0);
+ y58: out std_logic_vector((N-1) downto 0);
+ y59: out std_logic_vector((N-1) downto 0);
+ y60: out std_logic_vector((N-1) downto 0);
+ y61: out std_logic_vector((N-1) downto 0);
+ y62: out std_logic_vector((N-1) downto 0);
+ y63: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(5 downto 0)
+);
+end;
+
+-- tested 2015/12/26 with N = 8 using modelsim. works.
+
+architecture struct_decoderNx64 of decoderNx64 is
+component decoder1x64 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ address: in std_logic_vector(5 downto 0)
+);
+end component;
+
+begin
+ u1: for i in 0 to (N-1) generate
+ u: decoder1x64 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ y8 => y8(i),
+ y9 => y9(i),
+ y10 => y10(i),
+ y11 => y11(i),
+ y12 => y12(i),
+ y13 => y13(i),
+ y14 => y14(i),
+ y15 => y15(i),
+ y16 => y16(i),
+ y17 => y17(i),
+ y18 => y18(i),
+ y19 => y19(i),
+ y20 => y20(i),
+ y21 => y21(i),
+ y22 => y22(i),
+ y23 => y23(i),
+ y24 => y24(i),
+ y25 => y25(i),
+ y26 => y26(i),
+ y27 => y27(i),
+ y28 => y28(i),
+ y29 => y29(i),
+ y30 => y30(i),
+ y31 => y31(i),
+ y32 => y32(i),
+ y33 => y33(i),
+ y34 => y34(i),
+ y35 => y35(i),
+ y36 => y36(i),
+ y37 => y37(i),
+ y38 => y38(i),
+ y39 => y39(i),
+ y40 => y40(i),
+ y41 => y41(i),
+ y42 => y42(i),
+ y43 => y43(i),
+ y44 => y44(i),
+ y45 => y45(i),
+ y46 => y46(i),
+ y47 => y47(i),
+ y48 => y48(i),
+ y49 => y49(i),
+ y50 => y50(i),
+ y51 => y51(i),
+ y52 => y52(i),
+ y53 => y53(i),
+ y54 => y54(i),
+ y55 => y55(i),
+ y56 => y56(i),
+ y57 => y57(i),
+ y58 => y58(i),
+ y59 => y59(i),
+ y60 => y60(i),
+ y61 => y61(i),
+ y62 => y62(i),
+ y63 => y63(i),
+ address => address
+ );
+ end generate;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x32 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ address: in std_logic_vector(4 downto 0)
+);
+end;
+
+-- tested 2015/12/25 as part of decoderNx32 with modelsim, works.
+
+architecture struct_decoder1x32 of decoder1x32 is
+begin
+ with address select y0 <= data when "00000", '0' when others;
+ with address select y1 <= data when "00001", '0' when others;
+ with address select y2 <= data when "00010", '0' when others;
+ with address select y3 <= data when "00011", '0' when others;
+ with address select y4 <= data when "00100", '0' when others;
+ with address select y5 <= data when "00101", '0' when others;
+ with address select y6 <= data when "00110", '0' when others;
+ with address select y7 <= data when "00111", '0' when others;
+ with address select y8 <= data when "01000", '0' when others;
+ with address select y9 <= data when "01001", '0' when others;
+ with address select y10 <= data when "01010", '0' when others;
+ with address select y11 <= data when "01011", '0' when others;
+ with address select y12 <= data when "01100", '0' when others;
+ with address select y13 <= data when "01101", '0' when others;
+ with address select y14 <= data when "01110", '0' when others;
+ with address select y15 <= data when "01111", '0' when others;
+ with address select y16 <= data when "10000", '0' when others;
+ with address select y17 <= data when "10001", '0' when others;
+ with address select y18 <= data when "10010", '0' when others;
+ with address select y19 <= data when "10011", '0' when others;
+ with address select y20 <= data when "10100", '0' when others;
+ with address select y21 <= data when "10101", '0' when others;
+ with address select y22 <= data when "10110", '0' when others;
+ with address select y23 <= data when "10111", '0' when others;
+ with address select y24 <= data when "11000", '0' when others;
+ with address select y25 <= data when "11001", '0' when others;
+ with address select y26 <= data when "11010", '0' when others;
+ with address select y27 <= data when "11011", '0' when others;
+ with address select y28 <= data when "11100", '0' when others;
+ with address select y29 <= data when "11101", '0' when others;
+ with address select y30 <= data when "11110", '0' when others;
+ with address select y31 <= data when "11111", '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx32 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ y8: out std_logic_vector((N-1) downto 0);
+ y9: out std_logic_vector((N-1) downto 0);
+ y10: out std_logic_vector((N-1) downto 0);
+ y11: out std_logic_vector((N-1) downto 0);
+ y12: out std_logic_vector((N-1) downto 0);
+ y13: out std_logic_vector((N-1) downto 0);
+ y14: out std_logic_vector((N-1) downto 0);
+ y15: out std_logic_vector((N-1) downto 0);
+ y16: out std_logic_vector((N-1) downto 0);
+ y17: out std_logic_vector((N-1) downto 0);
+ y18: out std_logic_vector((N-1) downto 0);
+ y19: out std_logic_vector((N-1) downto 0);
+ y20: out std_logic_vector((N-1) downto 0);
+ y21: out std_logic_vector((N-1) downto 0);
+ y22: out std_logic_vector((N-1) downto 0);
+ y23: out std_logic_vector((N-1) downto 0);
+ y24: out std_logic_vector((N-1) downto 0);
+ y25: out std_logic_vector((N-1) downto 0);
+ y26: out std_logic_vector((N-1) downto 0);
+ y27: out std_logic_vector((N-1) downto 0);
+ y28: out std_logic_vector((N-1) downto 0);
+ y29: out std_logic_vector((N-1) downto 0);
+ y30: out std_logic_vector((N-1) downto 0);
+ y31: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(4 downto 0)
+);
+end;
+
+-- tested 2015/12/25 with modelsim and N = 8, works.
+-- reverified with correct report statements 2015/12/26, works.
+
+architecture struct_decoderNx32 of decoderNx32 is
+component decoder1x32 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ address: in std_logic_vector(4 downto 0)
+);
+end component;
+
+begin
+ u1: for i in 0 to (N-1) generate
+ u: decoder1x32 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ y8 => y8(i),
+ y9 => y9(i),
+ y10 => y10(i),
+ y11 => y11(i),
+ y12 => y12(i),
+ y13 => y13(i),
+ y14 => y14(i),
+ y15 => y15(i),
+ y16 => y16(i),
+ y17 => y17(i),
+ y18 => y18(i),
+ y19 => y19(i),
+ y20 => y20(i),
+ y21 => y21(i),
+ y22 => y22(i),
+ y23 => y23(i),
+ y24 => y24(i),
+ y25 => y25(i),
+ y26 => y26(i),
+ y27 => y27(i),
+ y28 => y28(i),
+ y29 => y29(i),
+ y30 => y30(i),
+ y31 => y31(i),
+ address => address
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder128x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ data64: in std_logic;
+ data65: in std_logic;
+ data66: in std_logic;
+ data67: in std_logic;
+ data68: in std_logic;
+ data69: in std_logic;
+ data70: in std_logic;
+ data71: in std_logic;
+ data72: in std_logic;
+ data73: in std_logic;
+ data74: in std_logic;
+ data75: in std_logic;
+ data76: in std_logic;
+ data77: in std_logic;
+ data78: in std_logic;
+ data79: in std_logic;
+ data80: in std_logic;
+ data81: in std_logic;
+ data82: in std_logic;
+ data83: in std_logic;
+ data84: in std_logic;
+ data85: in std_logic;
+ data86: in std_logic;
+ data87: in std_logic;
+ data88: in std_logic;
+ data89: in std_logic;
+ data90: in std_logic;
+ data91: in std_logic;
+ data92: in std_logic;
+ data93: in std_logic;
+ data94: in std_logic;
+ data95: in std_logic;
+ data96: in std_logic;
+ data97: in std_logic;
+ data98: in std_logic;
+ data99: in std_logic;
+ data100: in std_logic;
+ data101: in std_logic;
+ data102: in std_logic;
+ data103: in std_logic;
+ data104: in std_logic;
+ data105: in std_logic;
+ data106: in std_logic;
+ data107: in std_logic;
+ data108: in std_logic;
+ data109: in std_logic;
+ data110: in std_logic;
+ data111: in std_logic;
+ data112: in std_logic;
+ data113: in std_logic;
+ data114: in std_logic;
+ data115: in std_logic;
+ data116: in std_logic;
+ data117: in std_logic;
+ data118: in std_logic;
+ data119: in std_logic;
+ data120: in std_logic;
+ data121: in std_logic;
+ data122: in std_logic;
+ data123: in std_logic;
+ data124: in std_logic;
+ data125: in std_logic;
+ data126: in std_logic;
+ data127: in std_logic;
+ address: in std_logic_vector(6 downto 0);
+ output: out std_logic
+);
+end;
+
+architecture struct_encoder128x1 of encoder128x1 is
+begin
+ with address select
+ output <=
+ data0 when "0000000",
+ data1 when "0000001",
+ data2 when "0000010",
+ data3 when "0000011",
+ data4 when "0000100",
+ data5 when "0000101",
+ data6 when "0000110",
+ data7 when "0000111",
+ data8 when "0001000",
+ data9 when "0001001",
+ data10 when "0001010",
+ data11 when "0001011",
+ data12 when "0001100",
+ data13 when "0001101",
+ data14 when "0001110",
+ data15 when "0001111",
+ data16 when "0010000",
+ data17 when "0010001",
+ data18 when "0010010",
+ data19 when "0010011",
+ data20 when "0010100",
+ data21 when "0010101",
+ data22 when "0010110",
+ data23 when "0010111",
+ data24 when "0011000",
+ data25 when "0011001",
+ data26 when "0011010",
+ data27 when "0011011",
+ data28 when "0011100",
+ data29 when "0011101",
+ data30 when "0011110",
+ data31 when "0011111",
+ data32 when "0100000",
+ data33 when "0100001",
+ data34 when "0100010",
+ data35 when "0100011",
+ data36 when "0100100",
+ data37 when "0100101",
+ data38 when "0100110",
+ data39 when "0100111",
+ data40 when "0101000",
+ data41 when "0101001",
+ data42 when "0101010",
+ data43 when "0101011",
+ data44 when "0101100",
+ data45 when "0101101",
+ data46 when "0101110",
+ data47 when "0101111",
+ data48 when "0110000",
+ data49 when "0110001",
+ data50 when "0110010",
+ data51 when "0110011",
+ data52 when "0110100",
+ data53 when "0110101",
+ data54 when "0110110",
+ data55 when "0110111",
+ data56 when "0111000",
+ data57 when "0111001",
+ data58 when "0111010",
+ data59 when "0111011",
+ data60 when "0111100",
+ data61 when "0111101",
+ data62 when "0111110",
+ data63 when "0111111",
+ data64 when "1000000",
+ data65 when "1000001",
+ data66 when "1000010",
+ data67 when "1000011",
+ data68 when "1000100",
+ data69 when "1000101",
+ data70 when "1000110",
+ data71 when "1000111",
+ data72 when "1001000",
+ data73 when "1001001",
+ data74 when "1001010",
+ data75 when "1001011",
+ data76 when "1001100",
+ data77 when "1001101",
+ data78 when "1001110",
+ data79 when "1001111",
+ data80 when "1010000",
+ data81 when "1010001",
+ data82 when "1010010",
+ data83 when "1010011",
+ data84 when "1010100",
+ data85 when "1010101",
+ data86 when "1010110",
+ data87 when "1010111",
+ data88 when "1011000",
+ data89 when "1011001",
+ data90 when "1011010",
+ data91 when "1011011",
+ data92 when "1011100",
+ data93 when "1011101",
+ data94 when "1011110",
+ data95 when "1011111",
+ data96 when "1100000",
+ data97 when "1100001",
+ data98 when "1100010",
+ data99 when "1100011",
+ data100 when "1100100",
+ data101 when "1100101",
+ data102 when "1100110",
+ data103 when "1100111",
+ data104 when "1101000",
+ data105 when "1101001",
+ data106 when "1101010",
+ data107 when "1101011",
+ data108 when "1101100",
+ data109 when "1101101",
+ data110 when "1101110",
+ data111 when "1101111",
+ data112 when "1110000",
+ data113 when "1110001",
+ data114 when "1110010",
+ data115 when "1110011",
+ data116 when "1110100",
+ data117 when "1110101",
+ data118 when "1110110",
+ data119 when "1110111",
+ data120 when "1111000",
+ data121 when "1111001",
+ data122 when "1111010",
+ data123 when "1111011",
+ data124 when "1111100",
+ data125 when "1111101",
+ data126 when "1111110",
+ data127 when "1111111",
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder128xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ data16: in std_logic_vector((N-1) downto 0);
+ data17: in std_logic_vector((N-1) downto 0);
+ data18: in std_logic_vector((N-1) downto 0);
+ data19: in std_logic_vector((N-1) downto 0);
+ data20: in std_logic_vector((N-1) downto 0);
+ data21: in std_logic_vector((N-1) downto 0);
+ data22: in std_logic_vector((N-1) downto 0);
+ data23: in std_logic_vector((N-1) downto 0);
+ data24: in std_logic_vector((N-1) downto 0);
+ data25: in std_logic_vector((N-1) downto 0);
+ data26: in std_logic_vector((N-1) downto 0);
+ data27: in std_logic_vector((N-1) downto 0);
+ data28: in std_logic_vector((N-1) downto 0);
+ data29: in std_logic_vector((N-1) downto 0);
+ data30: in std_logic_vector((N-1) downto 0);
+ data31: in std_logic_vector((N-1) downto 0);
+ data32: in std_logic_vector((N-1) downto 0);
+ data33: in std_logic_vector((N-1) downto 0);
+ data34: in std_logic_vector((N-1) downto 0);
+ data35: in std_logic_vector((N-1) downto 0);
+ data36: in std_logic_vector((N-1) downto 0);
+ data37: in std_logic_vector((N-1) downto 0);
+ data38: in std_logic_vector((N-1) downto 0);
+ data39: in std_logic_vector((N-1) downto 0);
+ data40: in std_logic_vector((N-1) downto 0);
+ data41: in std_logic_vector((N-1) downto 0);
+ data42: in std_logic_vector((N-1) downto 0);
+ data43: in std_logic_vector((N-1) downto 0);
+ data44: in std_logic_vector((N-1) downto 0);
+ data45: in std_logic_vector((N-1) downto 0);
+ data46: in std_logic_vector((N-1) downto 0);
+ data47: in std_logic_vector((N-1) downto 0);
+ data48: in std_logic_vector((N-1) downto 0);
+ data49: in std_logic_vector((N-1) downto 0);
+ data50: in std_logic_vector((N-1) downto 0);
+ data51: in std_logic_vector((N-1) downto 0);
+ data52: in std_logic_vector((N-1) downto 0);
+ data53: in std_logic_vector((N-1) downto 0);
+ data54: in std_logic_vector((N-1) downto 0);
+ data55: in std_logic_vector((N-1) downto 0);
+ data56: in std_logic_vector((N-1) downto 0);
+ data57: in std_logic_vector((N-1) downto 0);
+ data58: in std_logic_vector((N-1) downto 0);
+ data59: in std_logic_vector((N-1) downto 0);
+ data60: in std_logic_vector((N-1) downto 0);
+ data61: in std_logic_vector((N-1) downto 0);
+ data62: in std_logic_vector((N-1) downto 0);
+ data63: in std_logic_vector((N-1) downto 0);
+ data64: in std_logic_vector((N-1) downto 0);
+ data65: in std_logic_vector((N-1) downto 0);
+ data66: in std_logic_vector((N-1) downto 0);
+ data67: in std_logic_vector((N-1) downto 0);
+ data68: in std_logic_vector((N-1) downto 0);
+ data69: in std_logic_vector((N-1) downto 0);
+ data70: in std_logic_vector((N-1) downto 0);
+ data71: in std_logic_vector((N-1) downto 0);
+ data72: in std_logic_vector((N-1) downto 0);
+ data73: in std_logic_vector((N-1) downto 0);
+ data74: in std_logic_vector((N-1) downto 0);
+ data75: in std_logic_vector((N-1) downto 0);
+ data76: in std_logic_vector((N-1) downto 0);
+ data77: in std_logic_vector((N-1) downto 0);
+ data78: in std_logic_vector((N-1) downto 0);
+ data79: in std_logic_vector((N-1) downto 0);
+ data80: in std_logic_vector((N-1) downto 0);
+ data81: in std_logic_vector((N-1) downto 0);
+ data82: in std_logic_vector((N-1) downto 0);
+ data83: in std_logic_vector((N-1) downto 0);
+ data84: in std_logic_vector((N-1) downto 0);
+ data85: in std_logic_vector((N-1) downto 0);
+ data86: in std_logic_vector((N-1) downto 0);
+ data87: in std_logic_vector((N-1) downto 0);
+ data88: in std_logic_vector((N-1) downto 0);
+ data89: in std_logic_vector((N-1) downto 0);
+ data90: in std_logic_vector((N-1) downto 0);
+ data91: in std_logic_vector((N-1) downto 0);
+ data92: in std_logic_vector((N-1) downto 0);
+ data93: in std_logic_vector((N-1) downto 0);
+ data94: in std_logic_vector((N-1) downto 0);
+ data95: in std_logic_vector((N-1) downto 0);
+ data96: in std_logic_vector((N-1) downto 0);
+ data97: in std_logic_vector((N-1) downto 0);
+ data98: in std_logic_vector((N-1) downto 0);
+ data99: in std_logic_vector((N-1) downto 0);
+ data100: in std_logic_vector((N-1) downto 0);
+ data101: in std_logic_vector((N-1) downto 0);
+ data102: in std_logic_vector((N-1) downto 0);
+ data103: in std_logic_vector((N-1) downto 0);
+ data104: in std_logic_vector((N-1) downto 0);
+ data105: in std_logic_vector((N-1) downto 0);
+ data106: in std_logic_vector((N-1) downto 0);
+ data107: in std_logic_vector((N-1) downto 0);
+ data108: in std_logic_vector((N-1) downto 0);
+ data109: in std_logic_vector((N-1) downto 0);
+ data110: in std_logic_vector((N-1) downto 0);
+ data111: in std_logic_vector((N-1) downto 0);
+ data112: in std_logic_vector((N-1) downto 0);
+ data113: in std_logic_vector((N-1) downto 0);
+ data114: in std_logic_vector((N-1) downto 0);
+ data115: in std_logic_vector((N-1) downto 0);
+ data116: in std_logic_vector((N-1) downto 0);
+ data117: in std_logic_vector((N-1) downto 0);
+ data118: in std_logic_vector((N-1) downto 0);
+ data119: in std_logic_vector((N-1) downto 0);
+ data120: in std_logic_vector((N-1) downto 0);
+ data121: in std_logic_vector((N-1) downto 0);
+ data122: in std_logic_vector((N-1) downto 0);
+ data123: in std_logic_vector((N-1) downto 0);
+ data124: in std_logic_vector((N-1) downto 0);
+ data125: in std_logic_vector((N-1) downto 0);
+ data126: in std_logic_vector((N-1) downto 0);
+ data127: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(6 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+architecture struct_encoder128xN of encoder128xN is
+component encoder128x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ data64: in std_logic;
+ data65: in std_logic;
+ data66: in std_logic;
+ data67: in std_logic;
+ data68: in std_logic;
+ data69: in std_logic;
+ data70: in std_logic;
+ data71: in std_logic;
+ data72: in std_logic;
+ data73: in std_logic;
+ data74: in std_logic;
+ data75: in std_logic;
+ data76: in std_logic;
+ data77: in std_logic;
+ data78: in std_logic;
+ data79: in std_logic;
+ data80: in std_logic;
+ data81: in std_logic;
+ data82: in std_logic;
+ data83: in std_logic;
+ data84: in std_logic;
+ data85: in std_logic;
+ data86: in std_logic;
+ data87: in std_logic;
+ data88: in std_logic;
+ data89: in std_logic;
+ data90: in std_logic;
+ data91: in std_logic;
+ data92: in std_logic;
+ data93: in std_logic;
+ data94: in std_logic;
+ data95: in std_logic;
+ data96: in std_logic;
+ data97: in std_logic;
+ data98: in std_logic;
+ data99: in std_logic;
+ data100: in std_logic;
+ data101: in std_logic;
+ data102: in std_logic;
+ data103: in std_logic;
+ data104: in std_logic;
+ data105: in std_logic;
+ data106: in std_logic;
+ data107: in std_logic;
+ data108: in std_logic;
+ data109: in std_logic;
+ data110: in std_logic;
+ data111: in std_logic;
+ data112: in std_logic;
+ data113: in std_logic;
+ data114: in std_logic;
+ data115: in std_logic;
+ data116: in std_logic;
+ data117: in std_logic;
+ data118: in std_logic;
+ data119: in std_logic;
+ data120: in std_logic;
+ data121: in std_logic;
+ data122: in std_logic;
+ data123: in std_logic;
+ data124: in std_logic;
+ data125: in std_logic;
+ data126: in std_logic;
+ data127: in std_logic;
+ address: in std_logic_vector(6 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder128x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ data8 => data8(i),
+ data9 => data9(i),
+ data10 => data10(i),
+ data11 => data11(i),
+ data12 => data12(i),
+ data13 => data13(i),
+ data14 => data14(i),
+ data15 => data15(i),
+ data16 => data16(i),
+ data17 => data17(i),
+ data18 => data18(i),
+ data19 => data19(i),
+ data20 => data20(i),
+ data21 => data21(i),
+ data22 => data22(i),
+ data23 => data23(i),
+ data24 => data24(i),
+ data25 => data25(i),
+ data26 => data26(i),
+ data27 => data27(i),
+ data28 => data28(i),
+ data29 => data29(i),
+ data30 => data30(i),
+ data31 => data31(i),
+ data32 => data32(i),
+ data33 => data33(i),
+ data34 => data34(i),
+ data35 => data35(i),
+ data36 => data36(i),
+ data37 => data37(i),
+ data38 => data38(i),
+ data39 => data39(i),
+ data40 => data40(i),
+ data41 => data41(i),
+ data42 => data42(i),
+ data43 => data43(i),
+ data44 => data44(i),
+ data45 => data45(i),
+ data46 => data46(i),
+ data47 => data47(i),
+ data48 => data48(i),
+ data49 => data49(i),
+ data50 => data50(i),
+ data51 => data51(i),
+ data52 => data52(i),
+ data53 => data53(i),
+ data54 => data54(i),
+ data55 => data55(i),
+ data56 => data56(i),
+ data57 => data57(i),
+ data58 => data58(i),
+ data59 => data59(i),
+ data60 => data60(i),
+ data61 => data61(i),
+ data62 => data62(i),
+ data63 => data63(i),
+ data64 => data64(i),
+ data65 => data65(i),
+ data66 => data66(i),
+ data67 => data67(i),
+ data68 => data68(i),
+ data69 => data69(i),
+ data70 => data70(i),
+ data71 => data71(i),
+ data72 => data72(i),
+ data73 => data73(i),
+ data74 => data74(i),
+ data75 => data75(i),
+ data76 => data76(i),
+ data77 => data77(i),
+ data78 => data78(i),
+ data79 => data79(i),
+ data80 => data80(i),
+ data81 => data81(i),
+ data82 => data82(i),
+ data83 => data83(i),
+ data84 => data84(i),
+ data85 => data85(i),
+ data86 => data86(i),
+ data87 => data87(i),
+ data88 => data88(i),
+ data89 => data89(i),
+ data90 => data90(i),
+ data91 => data91(i),
+ data92 => data92(i),
+ data93 => data93(i),
+ data94 => data94(i),
+ data95 => data95(i),
+ data96 => data96(i),
+ data97 => data97(i),
+ data98 => data98(i),
+ data99 => data99(i),
+ data100 => data100(i),
+ data101 => data101(i),
+ data102 => data102(i),
+ data103 => data103(i),
+ data104 => data104(i),
+ data105 => data105(i),
+ data106 => data106(i),
+ data107 => data107(i),
+ data108 => data108(i),
+ data109 => data109(i),
+ data110 => data110(i),
+ data111 => data111(i),
+ data112 => data112(i),
+ data113 => data113(i),
+ data114 => data114(i),
+ data115 => data115(i),
+ data116 => data116(i),
+ data117 => data117(i),
+ data118 => data118(i),
+ data119 => data119(i),
+ data120 => data120(i),
+ data121 => data121(i),
+ data122 => data122(i),
+ data123 => data123(i),
+ data124 => data124(i),
+ data125 => data125(i),
+ data126 => data126(i),
+ data127 => data127(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x128 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ y64: out std_logic;
+ y65: out std_logic;
+ y66: out std_logic;
+ y67: out std_logic;
+ y68: out std_logic;
+ y69: out std_logic;
+ y70: out std_logic;
+ y71: out std_logic;
+ y72: out std_logic;
+ y73: out std_logic;
+ y74: out std_logic;
+ y75: out std_logic;
+ y76: out std_logic;
+ y77: out std_logic;
+ y78: out std_logic;
+ y79: out std_logic;
+ y80: out std_logic;
+ y81: out std_logic;
+ y82: out std_logic;
+ y83: out std_logic;
+ y84: out std_logic;
+ y85: out std_logic;
+ y86: out std_logic;
+ y87: out std_logic;
+ y88: out std_logic;
+ y89: out std_logic;
+ y90: out std_logic;
+ y91: out std_logic;
+ y92: out std_logic;
+ y93: out std_logic;
+ y94: out std_logic;
+ y95: out std_logic;
+ y96: out std_logic;
+ y97: out std_logic;
+ y98: out std_logic;
+ y99: out std_logic;
+ y100: out std_logic;
+ y101: out std_logic;
+ y102: out std_logic;
+ y103: out std_logic;
+ y104: out std_logic;
+ y105: out std_logic;
+ y106: out std_logic;
+ y107: out std_logic;
+ y108: out std_logic;
+ y109: out std_logic;
+ y110: out std_logic;
+ y111: out std_logic;
+ y112: out std_logic;
+ y113: out std_logic;
+ y114: out std_logic;
+ y115: out std_logic;
+ y116: out std_logic;
+ y117: out std_logic;
+ y118: out std_logic;
+ y119: out std_logic;
+ y120: out std_logic;
+ y121: out std_logic;
+ y122: out std_logic;
+ y123: out std_logic;
+ y124: out std_logic;
+ y125: out std_logic;
+ y126: out std_logic;
+ y127: out std_logic;
+ address: in std_logic_vector(6 downto 0)
+);
+end;
+
+architecture struct_decoder1x128 of decoder1x128 is
+begin
+ y0 <= data when address = "0000000" else '0';
+ y1 <= data when address = "0000001" else '0';
+ y2 <= data when address = "0000010" else '0';
+ y3 <= data when address = "0000011" else '0';
+ y4 <= data when address = "0000100" else '0';
+ y5 <= data when address = "0000101" else '0';
+ y6 <= data when address = "0000110" else '0';
+ y7 <= data when address = "0000111" else '0';
+ y8 <= data when address = "0001000" else '0';
+ y9 <= data when address = "0001001" else '0';
+ y10 <= data when address = "0001010" else '0';
+ y11 <= data when address = "0001011" else '0';
+ y12 <= data when address = "0001100" else '0';
+ y13 <= data when address = "0001101" else '0';
+ y14 <= data when address = "0001110" else '0';
+ y15 <= data when address = "0001111" else '0';
+ y16 <= data when address = "0010000" else '0';
+ y17 <= data when address = "0010001" else '0';
+ y18 <= data when address = "0010010" else '0';
+ y19 <= data when address = "0010011" else '0';
+ y20 <= data when address = "0010100" else '0';
+ y21 <= data when address = "0010101" else '0';
+ y22 <= data when address = "0010110" else '0';
+ y23 <= data when address = "0010111" else '0';
+ y24 <= data when address = "0011000" else '0';
+ y25 <= data when address = "0011001" else '0';
+ y26 <= data when address = "0011010" else '0';
+ y27 <= data when address = "0011011" else '0';
+ y28 <= data when address = "0011100" else '0';
+ y29 <= data when address = "0011101" else '0';
+ y30 <= data when address = "0011110" else '0';
+ y31 <= data when address = "0011111" else '0';
+ y32 <= data when address = "0100000" else '0';
+ y33 <= data when address = "0100001" else '0';
+ y34 <= data when address = "0100010" else '0';
+ y35 <= data when address = "0100011" else '0';
+ y36 <= data when address = "0100100" else '0';
+ y37 <= data when address = "0100101" else '0';
+ y38 <= data when address = "0100110" else '0';
+ y39 <= data when address = "0100111" else '0';
+ y40 <= data when address = "0101000" else '0';
+ y41 <= data when address = "0101001" else '0';
+ y42 <= data when address = "0101010" else '0';
+ y43 <= data when address = "0101011" else '0';
+ y44 <= data when address = "0101100" else '0';
+ y45 <= data when address = "0101101" else '0';
+ y46 <= data when address = "0101110" else '0';
+ y47 <= data when address = "0101111" else '0';
+ y48 <= data when address = "0110000" else '0';
+ y49 <= data when address = "0110001" else '0';
+ y50 <= data when address = "0110010" else '0';
+ y51 <= data when address = "0110011" else '0';
+ y52 <= data when address = "0110100" else '0';
+ y53 <= data when address = "0110101" else '0';
+ y54 <= data when address = "0110110" else '0';
+ y55 <= data when address = "0110111" else '0';
+ y56 <= data when address = "0111000" else '0';
+ y57 <= data when address = "0111001" else '0';
+ y58 <= data when address = "0111010" else '0';
+ y59 <= data when address = "0111011" else '0';
+ y60 <= data when address = "0111100" else '0';
+ y61 <= data when address = "0111101" else '0';
+ y62 <= data when address = "0111110" else '0';
+ y63 <= data when address = "0111111" else '0';
+ y64 <= data when address = "1000000" else '0';
+ y65 <= data when address = "1000001" else '0';
+ y66 <= data when address = "1000010" else '0';
+ y67 <= data when address = "1000011" else '0';
+ y68 <= data when address = "1000100" else '0';
+ y69 <= data when address = "1000101" else '0';
+ y70 <= data when address = "1000110" else '0';
+ y71 <= data when address = "1000111" else '0';
+ y72 <= data when address = "1001000" else '0';
+ y73 <= data when address = "1001001" else '0';
+ y74 <= data when address = "1001010" else '0';
+ y75 <= data when address = "1001011" else '0';
+ y76 <= data when address = "1001100" else '0';
+ y77 <= data when address = "1001101" else '0';
+ y78 <= data when address = "1001110" else '0';
+ y79 <= data when address = "1001111" else '0';
+ y80 <= data when address = "1010000" else '0';
+ y81 <= data when address = "1010001" else '0';
+ y82 <= data when address = "1010010" else '0';
+ y83 <= data when address = "1010011" else '0';
+ y84 <= data when address = "1010100" else '0';
+ y85 <= data when address = "1010101" else '0';
+ y86 <= data when address = "1010110" else '0';
+ y87 <= data when address = "1010111" else '0';
+ y88 <= data when address = "1011000" else '0';
+ y89 <= data when address = "1011001" else '0';
+ y90 <= data when address = "1011010" else '0';
+ y91 <= data when address = "1011011" else '0';
+ y92 <= data when address = "1011100" else '0';
+ y93 <= data when address = "1011101" else '0';
+ y94 <= data when address = "1011110" else '0';
+ y95 <= data when address = "1011111" else '0';
+ y96 <= data when address = "1100000" else '0';
+ y97 <= data when address = "1100001" else '0';
+ y98 <= data when address = "1100010" else '0';
+ y99 <= data when address = "1100011" else '0';
+ y100 <= data when address = "1100100" else '0';
+ y101 <= data when address = "1100101" else '0';
+ y102 <= data when address = "1100110" else '0';
+ y103 <= data when address = "1100111" else '0';
+ y104 <= data when address = "1101000" else '0';
+ y105 <= data when address = "1101001" else '0';
+ y106 <= data when address = "1101010" else '0';
+ y107 <= data when address = "1101011" else '0';
+ y108 <= data when address = "1101100" else '0';
+ y109 <= data when address = "1101101" else '0';
+ y110 <= data when address = "1101110" else '0';
+ y111 <= data when address = "1101111" else '0';
+ y112 <= data when address = "1110000" else '0';
+ y113 <= data when address = "1110001" else '0';
+ y114 <= data when address = "1110010" else '0';
+ y115 <= data when address = "1110011" else '0';
+ y116 <= data when address = "1110100" else '0';
+ y117 <= data when address = "1110101" else '0';
+ y118 <= data when address = "1110110" else '0';
+ y119 <= data when address = "1110111" else '0';
+ y120 <= data when address = "1111000" else '0';
+ y121 <= data when address = "1111001" else '0';
+ y122 <= data when address = "1111010" else '0';
+ y123 <= data when address = "1111011" else '0';
+ y124 <= data when address = "1111100" else '0';
+ y125 <= data when address = "1111101" else '0';
+ y126 <= data when address = "1111110" else '0';
+ y127 <= data when address = "1111111" else '0';
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx128 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ y8: out std_logic_vector((N-1) downto 0);
+ y9: out std_logic_vector((N-1) downto 0);
+ y10: out std_logic_vector((N-1) downto 0);
+ y11: out std_logic_vector((N-1) downto 0);
+ y12: out std_logic_vector((N-1) downto 0);
+ y13: out std_logic_vector((N-1) downto 0);
+ y14: out std_logic_vector((N-1) downto 0);
+ y15: out std_logic_vector((N-1) downto 0);
+ y16: out std_logic_vector((N-1) downto 0);
+ y17: out std_logic_vector((N-1) downto 0);
+ y18: out std_logic_vector((N-1) downto 0);
+ y19: out std_logic_vector((N-1) downto 0);
+ y20: out std_logic_vector((N-1) downto 0);
+ y21: out std_logic_vector((N-1) downto 0);
+ y22: out std_logic_vector((N-1) downto 0);
+ y23: out std_logic_vector((N-1) downto 0);
+ y24: out std_logic_vector((N-1) downto 0);
+ y25: out std_logic_vector((N-1) downto 0);
+ y26: out std_logic_vector((N-1) downto 0);
+ y27: out std_logic_vector((N-1) downto 0);
+ y28: out std_logic_vector((N-1) downto 0);
+ y29: out std_logic_vector((N-1) downto 0);
+ y30: out std_logic_vector((N-1) downto 0);
+ y31: out std_logic_vector((N-1) downto 0);
+ y32: out std_logic_vector((N-1) downto 0);
+ y33: out std_logic_vector((N-1) downto 0);
+ y34: out std_logic_vector((N-1) downto 0);
+ y35: out std_logic_vector((N-1) downto 0);
+ y36: out std_logic_vector((N-1) downto 0);
+ y37: out std_logic_vector((N-1) downto 0);
+ y38: out std_logic_vector((N-1) downto 0);
+ y39: out std_logic_vector((N-1) downto 0);
+ y40: out std_logic_vector((N-1) downto 0);
+ y41: out std_logic_vector((N-1) downto 0);
+ y42: out std_logic_vector((N-1) downto 0);
+ y43: out std_logic_vector((N-1) downto 0);
+ y44: out std_logic_vector((N-1) downto 0);
+ y45: out std_logic_vector((N-1) downto 0);
+ y46: out std_logic_vector((N-1) downto 0);
+ y47: out std_logic_vector((N-1) downto 0);
+ y48: out std_logic_vector((N-1) downto 0);
+ y49: out std_logic_vector((N-1) downto 0);
+ y50: out std_logic_vector((N-1) downto 0);
+ y51: out std_logic_vector((N-1) downto 0);
+ y52: out std_logic_vector((N-1) downto 0);
+ y53: out std_logic_vector((N-1) downto 0);
+ y54: out std_logic_vector((N-1) downto 0);
+ y55: out std_logic_vector((N-1) downto 0);
+ y56: out std_logic_vector((N-1) downto 0);
+ y57: out std_logic_vector((N-1) downto 0);
+ y58: out std_logic_vector((N-1) downto 0);
+ y59: out std_logic_vector((N-1) downto 0);
+ y60: out std_logic_vector((N-1) downto 0);
+ y61: out std_logic_vector((N-1) downto 0);
+ y62: out std_logic_vector((N-1) downto 0);
+ y63: out std_logic_vector((N-1) downto 0);
+ y64: out std_logic_vector((N-1) downto 0);
+ y65: out std_logic_vector((N-1) downto 0);
+ y66: out std_logic_vector((N-1) downto 0);
+ y67: out std_logic_vector((N-1) downto 0);
+ y68: out std_logic_vector((N-1) downto 0);
+ y69: out std_logic_vector((N-1) downto 0);
+ y70: out std_logic_vector((N-1) downto 0);
+ y71: out std_logic_vector((N-1) downto 0);
+ y72: out std_logic_vector((N-1) downto 0);
+ y73: out std_logic_vector((N-1) downto 0);
+ y74: out std_logic_vector((N-1) downto 0);
+ y75: out std_logic_vector((N-1) downto 0);
+ y76: out std_logic_vector((N-1) downto 0);
+ y77: out std_logic_vector((N-1) downto 0);
+ y78: out std_logic_vector((N-1) downto 0);
+ y79: out std_logic_vector((N-1) downto 0);
+ y80: out std_logic_vector((N-1) downto 0);
+ y81: out std_logic_vector((N-1) downto 0);
+ y82: out std_logic_vector((N-1) downto 0);
+ y83: out std_logic_vector((N-1) downto 0);
+ y84: out std_logic_vector((N-1) downto 0);
+ y85: out std_logic_vector((N-1) downto 0);
+ y86: out std_logic_vector((N-1) downto 0);
+ y87: out std_logic_vector((N-1) downto 0);
+ y88: out std_logic_vector((N-1) downto 0);
+ y89: out std_logic_vector((N-1) downto 0);
+ y90: out std_logic_vector((N-1) downto 0);
+ y91: out std_logic_vector((N-1) downto 0);
+ y92: out std_logic_vector((N-1) downto 0);
+ y93: out std_logic_vector((N-1) downto 0);
+ y94: out std_logic_vector((N-1) downto 0);
+ y95: out std_logic_vector((N-1) downto 0);
+ y96: out std_logic_vector((N-1) downto 0);
+ y97: out std_logic_vector((N-1) downto 0);
+ y98: out std_logic_vector((N-1) downto 0);
+ y99: out std_logic_vector((N-1) downto 0);
+ y100: out std_logic_vector((N-1) downto 0);
+ y101: out std_logic_vector((N-1) downto 0);
+ y102: out std_logic_vector((N-1) downto 0);
+ y103: out std_logic_vector((N-1) downto 0);
+ y104: out std_logic_vector((N-1) downto 0);
+ y105: out std_logic_vector((N-1) downto 0);
+ y106: out std_logic_vector((N-1) downto 0);
+ y107: out std_logic_vector((N-1) downto 0);
+ y108: out std_logic_vector((N-1) downto 0);
+ y109: out std_logic_vector((N-1) downto 0);
+ y110: out std_logic_vector((N-1) downto 0);
+ y111: out std_logic_vector((N-1) downto 0);
+ y112: out std_logic_vector((N-1) downto 0);
+ y113: out std_logic_vector((N-1) downto 0);
+ y114: out std_logic_vector((N-1) downto 0);
+ y115: out std_logic_vector((N-1) downto 0);
+ y116: out std_logic_vector((N-1) downto 0);
+ y117: out std_logic_vector((N-1) downto 0);
+ y118: out std_logic_vector((N-1) downto 0);
+ y119: out std_logic_vector((N-1) downto 0);
+ y120: out std_logic_vector((N-1) downto 0);
+ y121: out std_logic_vector((N-1) downto 0);
+ y122: out std_logic_vector((N-1) downto 0);
+ y123: out std_logic_vector((N-1) downto 0);
+ y124: out std_logic_vector((N-1) downto 0);
+ y125: out std_logic_vector((N-1) downto 0);
+ y126: out std_logic_vector((N-1) downto 0);
+ y127: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(6 downto 0)
+);
+end;
+
+architecture struct_decoderNx128 of decoderNx128 is
+component decoder1x128 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ y64: out std_logic;
+ y65: out std_logic;
+ y66: out std_logic;
+ y67: out std_logic;
+ y68: out std_logic;
+ y69: out std_logic;
+ y70: out std_logic;
+ y71: out std_logic;
+ y72: out std_logic;
+ y73: out std_logic;
+ y74: out std_logic;
+ y75: out std_logic;
+ y76: out std_logic;
+ y77: out std_logic;
+ y78: out std_logic;
+ y79: out std_logic;
+ y80: out std_logic;
+ y81: out std_logic;
+ y82: out std_logic;
+ y83: out std_logic;
+ y84: out std_logic;
+ y85: out std_logic;
+ y86: out std_logic;
+ y87: out std_logic;
+ y88: out std_logic;
+ y89: out std_logic;
+ y90: out std_logic;
+ y91: out std_logic;
+ y92: out std_logic;
+ y93: out std_logic;
+ y94: out std_logic;
+ y95: out std_logic;
+ y96: out std_logic;
+ y97: out std_logic;
+ y98: out std_logic;
+ y99: out std_logic;
+ y100: out std_logic;
+ y101: out std_logic;
+ y102: out std_logic;
+ y103: out std_logic;
+ y104: out std_logic;
+ y105: out std_logic;
+ y106: out std_logic;
+ y107: out std_logic;
+ y108: out std_logic;
+ y109: out std_logic;
+ y110: out std_logic;
+ y111: out std_logic;
+ y112: out std_logic;
+ y113: out std_logic;
+ y114: out std_logic;
+ y115: out std_logic;
+ y116: out std_logic;
+ y117: out std_logic;
+ y118: out std_logic;
+ y119: out std_logic;
+ y120: out std_logic;
+ y121: out std_logic;
+ y122: out std_logic;
+ y123: out std_logic;
+ y124: out std_logic;
+ y125: out std_logic;
+ y126: out std_logic;
+ y127: out std_logic;
+ address: in std_logic_vector(6 downto 0)
+);
+
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: decoder1x128 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ y8 => y8(i),
+ y9 => y9(i),
+ y10 => y10(i),
+ y11 => y11(i),
+ y12 => y12(i),
+ y13 => y13(i),
+ y14 => y14(i),
+ y15 => y15(i),
+ y16 => y16(i),
+ y17 => y17(i),
+ y18 => y18(i),
+ y19 => y19(i),
+ y20 => y20(i),
+ y21 => y21(i),
+ y22 => y22(i),
+ y23 => y23(i),
+ y24 => y24(i),
+ y25 => y25(i),
+ y26 => y26(i),
+ y27 => y27(i),
+ y28 => y28(i),
+ y29 => y29(i),
+ y30 => y30(i),
+ y31 => y31(i),
+ y32 => y32(i),
+ y33 => y33(i),
+ y34 => y34(i),
+ y35 => y35(i),
+ y36 => y36(i),
+ y37 => y37(i),
+ y38 => y38(i),
+ y39 => y39(i),
+ y40 => y40(i),
+ y41 => y41(i),
+ y42 => y42(i),
+ y43 => y43(i),
+ y44 => y44(i),
+ y45 => y45(i),
+ y46 => y46(i),
+ y47 => y47(i),
+ y48 => y48(i),
+ y49 => y49(i),
+ y50 => y50(i),
+ y51 => y51(i),
+ y52 => y52(i),
+ y53 => y53(i),
+ y54 => y54(i),
+ y55 => y55(i),
+ y56 => y56(i),
+ y57 => y57(i),
+ y58 => y58(i),
+ y59 => y59(i),
+ y60 => y60(i),
+ y61 => y61(i),
+ y62 => y62(i),
+ y63 => y63(i),
+ y64 => y64(i),
+ y65 => y65(i),
+ y66 => y66(i),
+ y67 => y67(i),
+ y68 => y68(i),
+ y69 => y69(i),
+ y70 => y70(i),
+ y71 => y71(i),
+ y72 => y72(i),
+ y73 => y73(i),
+ y74 => y74(i),
+ y75 => y75(i),
+ y76 => y76(i),
+ y77 => y77(i),
+ y78 => y78(i),
+ y79 => y79(i),
+ y80 => y80(i),
+ y81 => y81(i),
+ y82 => y82(i),
+ y83 => y83(i),
+ y84 => y84(i),
+ y85 => y85(i),
+ y86 => y86(i),
+ y87 => y87(i),
+ y88 => y88(i),
+ y89 => y89(i),
+ y90 => y90(i),
+ y91 => y91(i),
+ y92 => y92(i),
+ y93 => y93(i),
+ y94 => y94(i),
+ y95 => y95(i),
+ y96 => y96(i),
+ y97 => y97(i),
+ y98 => y98(i),
+ y99 => y99(i),
+ y100 => y100(i),
+ y101 => y101(i),
+ y102 => y102(i),
+ y103 => y103(i),
+ y104 => y104(i),
+ y105 => y105(i),
+ y106 => y106(i),
+ y107 => y107(i),
+ y108 => y108(i),
+ y109 => y109(i),
+ y110 => y110(i),
+ y111 => y111(i),
+ y112 => y112(i),
+ y113 => y113(i),
+ y114 => y114(i),
+ y115 => y115(i),
+ y116 => y116(i),
+ y117 => y117(i),
+ y118 => y118(i),
+ y119 => y119(i),
+ y120 => y120(i),
+ y121 => y121(i),
+ y122 => y122(i),
+ y123 => y123(i),
+ y124 => y124(i),
+ y125 => y125(i),
+ y126 => y126(i),
+ y127 => y127(i),
+ address => address
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder256x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ data64: in std_logic;
+ data65: in std_logic;
+ data66: in std_logic;
+ data67: in std_logic;
+ data68: in std_logic;
+ data69: in std_logic;
+ data70: in std_logic;
+ data71: in std_logic;
+ data72: in std_logic;
+ data73: in std_logic;
+ data74: in std_logic;
+ data75: in std_logic;
+ data76: in std_logic;
+ data77: in std_logic;
+ data78: in std_logic;
+ data79: in std_logic;
+ data80: in std_logic;
+ data81: in std_logic;
+ data82: in std_logic;
+ data83: in std_logic;
+ data84: in std_logic;
+ data85: in std_logic;
+ data86: in std_logic;
+ data87: in std_logic;
+ data88: in std_logic;
+ data89: in std_logic;
+ data90: in std_logic;
+ data91: in std_logic;
+ data92: in std_logic;
+ data93: in std_logic;
+ data94: in std_logic;
+ data95: in std_logic;
+ data96: in std_logic;
+ data97: in std_logic;
+ data98: in std_logic;
+ data99: in std_logic;
+ data100: in std_logic;
+ data101: in std_logic;
+ data102: in std_logic;
+ data103: in std_logic;
+ data104: in std_logic;
+ data105: in std_logic;
+ data106: in std_logic;
+ data107: in std_logic;
+ data108: in std_logic;
+ data109: in std_logic;
+ data110: in std_logic;
+ data111: in std_logic;
+ data112: in std_logic;
+ data113: in std_logic;
+ data114: in std_logic;
+ data115: in std_logic;
+ data116: in std_logic;
+ data117: in std_logic;
+ data118: in std_logic;
+ data119: in std_logic;
+ data120: in std_logic;
+ data121: in std_logic;
+ data122: in std_logic;
+ data123: in std_logic;
+ data124: in std_logic;
+ data125: in std_logic;
+ data126: in std_logic;
+ data127: in std_logic;
+ data128: in std_logic;
+ data129: in std_logic;
+ data130: in std_logic;
+ data131: in std_logic;
+ data132: in std_logic;
+ data133: in std_logic;
+ data134: in std_logic;
+ data135: in std_logic;
+ data136: in std_logic;
+ data137: in std_logic;
+ data138: in std_logic;
+ data139: in std_logic;
+ data140: in std_logic;
+ data141: in std_logic;
+ data142: in std_logic;
+ data143: in std_logic;
+ data144: in std_logic;
+ data145: in std_logic;
+ data146: in std_logic;
+ data147: in std_logic;
+ data148: in std_logic;
+ data149: in std_logic;
+ data150: in std_logic;
+ data151: in std_logic;
+ data152: in std_logic;
+ data153: in std_logic;
+ data154: in std_logic;
+ data155: in std_logic;
+ data156: in std_logic;
+ data157: in std_logic;
+ data158: in std_logic;
+ data159: in std_logic;
+ data160: in std_logic;
+ data161: in std_logic;
+ data162: in std_logic;
+ data163: in std_logic;
+ data164: in std_logic;
+ data165: in std_logic;
+ data166: in std_logic;
+ data167: in std_logic;
+ data168: in std_logic;
+ data169: in std_logic;
+ data170: in std_logic;
+ data171: in std_logic;
+ data172: in std_logic;
+ data173: in std_logic;
+ data174: in std_logic;
+ data175: in std_logic;
+ data176: in std_logic;
+ data177: in std_logic;
+ data178: in std_logic;
+ data179: in std_logic;
+ data180: in std_logic;
+ data181: in std_logic;
+ data182: in std_logic;
+ data183: in std_logic;
+ data184: in std_logic;
+ data185: in std_logic;
+ data186: in std_logic;
+ data187: in std_logic;
+ data188: in std_logic;
+ data189: in std_logic;
+ data190: in std_logic;
+ data191: in std_logic;
+ data192: in std_logic;
+ data193: in std_logic;
+ data194: in std_logic;
+ data195: in std_logic;
+ data196: in std_logic;
+ data197: in std_logic;
+ data198: in std_logic;
+ data199: in std_logic;
+ data200: in std_logic;
+ data201: in std_logic;
+ data202: in std_logic;
+ data203: in std_logic;
+ data204: in std_logic;
+ data205: in std_logic;
+ data206: in std_logic;
+ data207: in std_logic;
+ data208: in std_logic;
+ data209: in std_logic;
+ data210: in std_logic;
+ data211: in std_logic;
+ data212: in std_logic;
+ data213: in std_logic;
+ data214: in std_logic;
+ data215: in std_logic;
+ data216: in std_logic;
+ data217: in std_logic;
+ data218: in std_logic;
+ data219: in std_logic;
+ data220: in std_logic;
+ data221: in std_logic;
+ data222: in std_logic;
+ data223: in std_logic;
+ data224: in std_logic;
+ data225: in std_logic;
+ data226: in std_logic;
+ data227: in std_logic;
+ data228: in std_logic;
+ data229: in std_logic;
+ data230: in std_logic;
+ data231: in std_logic;
+ data232: in std_logic;
+ data233: in std_logic;
+ data234: in std_logic;
+ data235: in std_logic;
+ data236: in std_logic;
+ data237: in std_logic;
+ data238: in std_logic;
+ data239: in std_logic;
+ data240: in std_logic;
+ data241: in std_logic;
+ data242: in std_logic;
+ data243: in std_logic;
+ data244: in std_logic;
+ data245: in std_logic;
+ data246: in std_logic;
+ data247: in std_logic;
+ data248: in std_logic;
+ data249: in std_logic;
+ data250: in std_logic;
+ data251: in std_logic;
+ data252: in std_logic;
+ data253: in std_logic;
+ data254: in std_logic;
+ data255: in std_logic;
+ address: in std_logic_vector(7 downto 0);
+ output: out std_logic
+);
+end;
+
+architecture struct_encoder256x1 of encoder256x1 is
+begin
+ with address select
+ output <=
+ data0 when "00000000",
+ data1 when "00000001",
+ data2 when "00000010",
+ data3 when "00000011",
+ data4 when "00000100",
+ data5 when "00000101",
+ data6 when "00000110",
+ data7 when "00000111",
+ data8 when "00001000",
+ data9 when "00001001",
+ data10 when "00001010",
+ data11 when "00001011",
+ data12 when "00001100",
+ data13 when "00001101",
+ data14 when "00001110",
+ data15 when "00001111",
+ data16 when "00010000",
+ data17 when "00010001",
+ data18 when "00010010",
+ data19 when "00010011",
+ data20 when "00010100",
+ data21 when "00010101",
+ data22 when "00010110",
+ data23 when "00010111",
+ data24 when "00011000",
+ data25 when "00011001",
+ data26 when "00011010",
+ data27 when "00011011",
+ data28 when "00011100",
+ data29 when "00011101",
+ data30 when "00011110",
+ data31 when "00011111",
+ data32 when "00100000",
+ data33 when "00100001",
+ data34 when "00100010",
+ data35 when "00100011",
+ data36 when "00100100",
+ data37 when "00100101",
+ data38 when "00100110",
+ data39 when "00100111",
+ data40 when "00101000",
+ data41 when "00101001",
+ data42 when "00101010",
+ data43 when "00101011",
+ data44 when "00101100",
+ data45 when "00101101",
+ data46 when "00101110",
+ data47 when "00101111",
+ data48 when "00110000",
+ data49 when "00110001",
+ data50 when "00110010",
+ data51 when "00110011",
+ data52 when "00110100",
+ data53 when "00110101",
+ data54 when "00110110",
+ data55 when "00110111",
+ data56 when "00111000",
+ data57 when "00111001",
+ data58 when "00111010",
+ data59 when "00111011",
+ data60 when "00111100",
+ data61 when "00111101",
+ data62 when "00111110",
+ data63 when "00111111",
+ data64 when "01000000",
+ data65 when "01000001",
+ data66 when "01000010",
+ data67 when "01000011",
+ data68 when "01000100",
+ data69 when "01000101",
+ data70 when "01000110",
+ data71 when "01000111",
+ data72 when "01001000",
+ data73 when "01001001",
+ data74 when "01001010",
+ data75 when "01001011",
+ data76 when "01001100",
+ data77 when "01001101",
+ data78 when "01001110",
+ data79 when "01001111",
+ data80 when "01010000",
+ data81 when "01010001",
+ data82 when "01010010",
+ data83 when "01010011",
+ data84 when "01010100",
+ data85 when "01010101",
+ data86 when "01010110",
+ data87 when "01010111",
+ data88 when "01011000",
+ data89 when "01011001",
+ data90 when "01011010",
+ data91 when "01011011",
+ data92 when "01011100",
+ data93 when "01011101",
+ data94 when "01011110",
+ data95 when "01011111",
+ data96 when "01100000",
+ data97 when "01100001",
+ data98 when "01100010",
+ data99 when "01100011",
+ data100 when "01100100",
+ data101 when "01100101",
+ data102 when "01100110",
+ data103 when "01100111",
+ data104 when "01101000",
+ data105 when "01101001",
+ data106 when "01101010",
+ data107 when "01101011",
+ data108 when "01101100",
+ data109 when "01101101",
+ data110 when "01101110",
+ data111 when "01101111",
+ data112 when "01110000",
+ data113 when "01110001",
+ data114 when "01110010",
+ data115 when "01110011",
+ data116 when "01110100",
+ data117 when "01110101",
+ data118 when "01110110",
+ data119 when "01110111",
+ data120 when "01111000",
+ data121 when "01111001",
+ data122 when "01111010",
+ data123 when "01111011",
+ data124 when "01111100",
+ data125 when "01111101",
+ data126 when "01111110",
+ data127 when "01111111",
+ data128 when "10000000",
+ data129 when "10000001",
+ data130 when "10000010",
+ data131 when "10000011",
+ data132 when "10000100",
+ data133 when "10000101",
+ data134 when "10000110",
+ data135 when "10000111",
+ data136 when "10001000",
+ data137 when "10001001",
+ data138 when "10001010",
+ data139 when "10001011",
+ data140 when "10001100",
+ data141 when "10001101",
+ data142 when "10001110",
+ data143 when "10001111",
+ data144 when "10010000",
+ data145 when "10010001",
+ data146 when "10010010",
+ data147 when "10010011",
+ data148 when "10010100",
+ data149 when "10010101",
+ data150 when "10010110",
+ data151 when "10010111",
+ data152 when "10011000",
+ data153 when "10011001",
+ data154 when "10011010",
+ data155 when "10011011",
+ data156 when "10011100",
+ data157 when "10011101",
+ data158 when "10011110",
+ data159 when "10011111",
+ data160 when "10100000",
+ data161 when "10100001",
+ data162 when "10100010",
+ data163 when "10100011",
+ data164 when "10100100",
+ data165 when "10100101",
+ data166 when "10100110",
+ data167 when "10100111",
+ data168 when "10101000",
+ data169 when "10101001",
+ data170 when "10101010",
+ data171 when "10101011",
+ data172 when "10101100",
+ data173 when "10101101",
+ data174 when "10101110",
+ data175 when "10101111",
+ data176 when "10110000",
+ data177 when "10110001",
+ data178 when "10110010",
+ data179 when "10110011",
+ data180 when "10110100",
+ data181 when "10110101",
+ data182 when "10110110",
+ data183 when "10110111",
+ data184 when "10111000",
+ data185 when "10111001",
+ data186 when "10111010",
+ data187 when "10111011",
+ data188 when "10111100",
+ data189 when "10111101",
+ data190 when "10111110",
+ data191 when "10111111",
+ data192 when "11000000",
+ data193 when "11000001",
+ data194 when "11000010",
+ data195 when "11000011",
+ data196 when "11000100",
+ data197 when "11000101",
+ data198 when "11000110",
+ data199 when "11000111",
+ data200 when "11001000",
+ data201 when "11001001",
+ data202 when "11001010",
+ data203 when "11001011",
+ data204 when "11001100",
+ data205 when "11001101",
+ data206 when "11001110",
+ data207 when "11001111",
+ data208 when "11010000",
+ data209 when "11010001",
+ data210 when "11010010",
+ data211 when "11010011",
+ data212 when "11010100",
+ data213 when "11010101",
+ data214 when "11010110",
+ data215 when "11010111",
+ data216 when "11011000",
+ data217 when "11011001",
+ data218 when "11011010",
+ data219 when "11011011",
+ data220 when "11011100",
+ data221 when "11011101",
+ data222 when "11011110",
+ data223 when "11011111",
+ data224 when "11100000",
+ data225 when "11100001",
+ data226 when "11100010",
+ data227 when "11100011",
+ data228 when "11100100",
+ data229 when "11100101",
+ data230 when "11100110",
+ data231 when "11100111",
+ data232 when "11101000",
+ data233 when "11101001",
+ data234 when "11101010",
+ data235 when "11101011",
+ data236 when "11101100",
+ data237 when "11101101",
+ data238 when "11101110",
+ data239 when "11101111",
+ data240 when "11110000",
+ data241 when "11110001",
+ data242 when "11110010",
+ data243 when "11110011",
+ data244 when "11110100",
+ data245 when "11110101",
+ data246 when "11110110",
+ data247 when "11110111",
+ data248 when "11111000",
+ data249 when "11111001",
+ data250 when "11111010",
+ data251 when "11111011",
+ data252 when "11111100",
+ data253 when "11111101",
+ data254 when "11111110",
+ data255 when "11111111",
+ '0' when others;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity encoder256xN is
+generic(
+ N: positive
+);
+port(
+ data0: in std_logic_vector((N-1) downto 0);
+ data1: in std_logic_vector((N-1) downto 0);
+ data2: in std_logic_vector((N-1) downto 0);
+ data3: in std_logic_vector((N-1) downto 0);
+ data4: in std_logic_vector((N-1) downto 0);
+ data5: in std_logic_vector((N-1) downto 0);
+ data6: in std_logic_vector((N-1) downto 0);
+ data7: in std_logic_vector((N-1) downto 0);
+ data8: in std_logic_vector((N-1) downto 0);
+ data9: in std_logic_vector((N-1) downto 0);
+ data10: in std_logic_vector((N-1) downto 0);
+ data11: in std_logic_vector((N-1) downto 0);
+ data12: in std_logic_vector((N-1) downto 0);
+ data13: in std_logic_vector((N-1) downto 0);
+ data14: in std_logic_vector((N-1) downto 0);
+ data15: in std_logic_vector((N-1) downto 0);
+ data16: in std_logic_vector((N-1) downto 0);
+ data17: in std_logic_vector((N-1) downto 0);
+ data18: in std_logic_vector((N-1) downto 0);
+ data19: in std_logic_vector((N-1) downto 0);
+ data20: in std_logic_vector((N-1) downto 0);
+ data21: in std_logic_vector((N-1) downto 0);
+ data22: in std_logic_vector((N-1) downto 0);
+ data23: in std_logic_vector((N-1) downto 0);
+ data24: in std_logic_vector((N-1) downto 0);
+ data25: in std_logic_vector((N-1) downto 0);
+ data26: in std_logic_vector((N-1) downto 0);
+ data27: in std_logic_vector((N-1) downto 0);
+ data28: in std_logic_vector((N-1) downto 0);
+ data29: in std_logic_vector((N-1) downto 0);
+ data30: in std_logic_vector((N-1) downto 0);
+ data31: in std_logic_vector((N-1) downto 0);
+ data32: in std_logic_vector((N-1) downto 0);
+ data33: in std_logic_vector((N-1) downto 0);
+ data34: in std_logic_vector((N-1) downto 0);
+ data35: in std_logic_vector((N-1) downto 0);
+ data36: in std_logic_vector((N-1) downto 0);
+ data37: in std_logic_vector((N-1) downto 0);
+ data38: in std_logic_vector((N-1) downto 0);
+ data39: in std_logic_vector((N-1) downto 0);
+ data40: in std_logic_vector((N-1) downto 0);
+ data41: in std_logic_vector((N-1) downto 0);
+ data42: in std_logic_vector((N-1) downto 0);
+ data43: in std_logic_vector((N-1) downto 0);
+ data44: in std_logic_vector((N-1) downto 0);
+ data45: in std_logic_vector((N-1) downto 0);
+ data46: in std_logic_vector((N-1) downto 0);
+ data47: in std_logic_vector((N-1) downto 0);
+ data48: in std_logic_vector((N-1) downto 0);
+ data49: in std_logic_vector((N-1) downto 0);
+ data50: in std_logic_vector((N-1) downto 0);
+ data51: in std_logic_vector((N-1) downto 0);
+ data52: in std_logic_vector((N-1) downto 0);
+ data53: in std_logic_vector((N-1) downto 0);
+ data54: in std_logic_vector((N-1) downto 0);
+ data55: in std_logic_vector((N-1) downto 0);
+ data56: in std_logic_vector((N-1) downto 0);
+ data57: in std_logic_vector((N-1) downto 0);
+ data58: in std_logic_vector((N-1) downto 0);
+ data59: in std_logic_vector((N-1) downto 0);
+ data60: in std_logic_vector((N-1) downto 0);
+ data61: in std_logic_vector((N-1) downto 0);
+ data62: in std_logic_vector((N-1) downto 0);
+ data63: in std_logic_vector((N-1) downto 0);
+ data64: in std_logic_vector((N-1) downto 0);
+ data65: in std_logic_vector((N-1) downto 0);
+ data66: in std_logic_vector((N-1) downto 0);
+ data67: in std_logic_vector((N-1) downto 0);
+ data68: in std_logic_vector((N-1) downto 0);
+ data69: in std_logic_vector((N-1) downto 0);
+ data70: in std_logic_vector((N-1) downto 0);
+ data71: in std_logic_vector((N-1) downto 0);
+ data72: in std_logic_vector((N-1) downto 0);
+ data73: in std_logic_vector((N-1) downto 0);
+ data74: in std_logic_vector((N-1) downto 0);
+ data75: in std_logic_vector((N-1) downto 0);
+ data76: in std_logic_vector((N-1) downto 0);
+ data77: in std_logic_vector((N-1) downto 0);
+ data78: in std_logic_vector((N-1) downto 0);
+ data79: in std_logic_vector((N-1) downto 0);
+ data80: in std_logic_vector((N-1) downto 0);
+ data81: in std_logic_vector((N-1) downto 0);
+ data82: in std_logic_vector((N-1) downto 0);
+ data83: in std_logic_vector((N-1) downto 0);
+ data84: in std_logic_vector((N-1) downto 0);
+ data85: in std_logic_vector((N-1) downto 0);
+ data86: in std_logic_vector((N-1) downto 0);
+ data87: in std_logic_vector((N-1) downto 0);
+ data88: in std_logic_vector((N-1) downto 0);
+ data89: in std_logic_vector((N-1) downto 0);
+ data90: in std_logic_vector((N-1) downto 0);
+ data91: in std_logic_vector((N-1) downto 0);
+ data92: in std_logic_vector((N-1) downto 0);
+ data93: in std_logic_vector((N-1) downto 0);
+ data94: in std_logic_vector((N-1) downto 0);
+ data95: in std_logic_vector((N-1) downto 0);
+ data96: in std_logic_vector((N-1) downto 0);
+ data97: in std_logic_vector((N-1) downto 0);
+ data98: in std_logic_vector((N-1) downto 0);
+ data99: in std_logic_vector((N-1) downto 0);
+ data100: in std_logic_vector((N-1) downto 0);
+ data101: in std_logic_vector((N-1) downto 0);
+ data102: in std_logic_vector((N-1) downto 0);
+ data103: in std_logic_vector((N-1) downto 0);
+ data104: in std_logic_vector((N-1) downto 0);
+ data105: in std_logic_vector((N-1) downto 0);
+ data106: in std_logic_vector((N-1) downto 0);
+ data107: in std_logic_vector((N-1) downto 0);
+ data108: in std_logic_vector((N-1) downto 0);
+ data109: in std_logic_vector((N-1) downto 0);
+ data110: in std_logic_vector((N-1) downto 0);
+ data111: in std_logic_vector((N-1) downto 0);
+ data112: in std_logic_vector((N-1) downto 0);
+ data113: in std_logic_vector((N-1) downto 0);
+ data114: in std_logic_vector((N-1) downto 0);
+ data115: in std_logic_vector((N-1) downto 0);
+ data116: in std_logic_vector((N-1) downto 0);
+ data117: in std_logic_vector((N-1) downto 0);
+ data118: in std_logic_vector((N-1) downto 0);
+ data119: in std_logic_vector((N-1) downto 0);
+ data120: in std_logic_vector((N-1) downto 0);
+ data121: in std_logic_vector((N-1) downto 0);
+ data122: in std_logic_vector((N-1) downto 0);
+ data123: in std_logic_vector((N-1) downto 0);
+ data124: in std_logic_vector((N-1) downto 0);
+ data125: in std_logic_vector((N-1) downto 0);
+ data126: in std_logic_vector((N-1) downto 0);
+ data127: in std_logic_vector((N-1) downto 0);
+ data128: in std_logic_vector((N-1) downto 0);
+ data129: in std_logic_vector((N-1) downto 0);
+ data130: in std_logic_vector((N-1) downto 0);
+ data131: in std_logic_vector((N-1) downto 0);
+ data132: in std_logic_vector((N-1) downto 0);
+ data133: in std_logic_vector((N-1) downto 0);
+ data134: in std_logic_vector((N-1) downto 0);
+ data135: in std_logic_vector((N-1) downto 0);
+ data136: in std_logic_vector((N-1) downto 0);
+ data137: in std_logic_vector((N-1) downto 0);
+ data138: in std_logic_vector((N-1) downto 0);
+ data139: in std_logic_vector((N-1) downto 0);
+ data140: in std_logic_vector((N-1) downto 0);
+ data141: in std_logic_vector((N-1) downto 0);
+ data142: in std_logic_vector((N-1) downto 0);
+ data143: in std_logic_vector((N-1) downto 0);
+ data144: in std_logic_vector((N-1) downto 0);
+ data145: in std_logic_vector((N-1) downto 0);
+ data146: in std_logic_vector((N-1) downto 0);
+ data147: in std_logic_vector((N-1) downto 0);
+ data148: in std_logic_vector((N-1) downto 0);
+ data149: in std_logic_vector((N-1) downto 0);
+ data150: in std_logic_vector((N-1) downto 0);
+ data151: in std_logic_vector((N-1) downto 0);
+ data152: in std_logic_vector((N-1) downto 0);
+ data153: in std_logic_vector((N-1) downto 0);
+ data154: in std_logic_vector((N-1) downto 0);
+ data155: in std_logic_vector((N-1) downto 0);
+ data156: in std_logic_vector((N-1) downto 0);
+ data157: in std_logic_vector((N-1) downto 0);
+ data158: in std_logic_vector((N-1) downto 0);
+ data159: in std_logic_vector((N-1) downto 0);
+ data160: in std_logic_vector((N-1) downto 0);
+ data161: in std_logic_vector((N-1) downto 0);
+ data162: in std_logic_vector((N-1) downto 0);
+ data163: in std_logic_vector((N-1) downto 0);
+ data164: in std_logic_vector((N-1) downto 0);
+ data165: in std_logic_vector((N-1) downto 0);
+ data166: in std_logic_vector((N-1) downto 0);
+ data167: in std_logic_vector((N-1) downto 0);
+ data168: in std_logic_vector((N-1) downto 0);
+ data169: in std_logic_vector((N-1) downto 0);
+ data170: in std_logic_vector((N-1) downto 0);
+ data171: in std_logic_vector((N-1) downto 0);
+ data172: in std_logic_vector((N-1) downto 0);
+ data173: in std_logic_vector((N-1) downto 0);
+ data174: in std_logic_vector((N-1) downto 0);
+ data175: in std_logic_vector((N-1) downto 0);
+ data176: in std_logic_vector((N-1) downto 0);
+ data177: in std_logic_vector((N-1) downto 0);
+ data178: in std_logic_vector((N-1) downto 0);
+ data179: in std_logic_vector((N-1) downto 0);
+ data180: in std_logic_vector((N-1) downto 0);
+ data181: in std_logic_vector((N-1) downto 0);
+ data182: in std_logic_vector((N-1) downto 0);
+ data183: in std_logic_vector((N-1) downto 0);
+ data184: in std_logic_vector((N-1) downto 0);
+ data185: in std_logic_vector((N-1) downto 0);
+ data186: in std_logic_vector((N-1) downto 0);
+ data187: in std_logic_vector((N-1) downto 0);
+ data188: in std_logic_vector((N-1) downto 0);
+ data189: in std_logic_vector((N-1) downto 0);
+ data190: in std_logic_vector((N-1) downto 0);
+ data191: in std_logic_vector((N-1) downto 0);
+ data192: in std_logic_vector((N-1) downto 0);
+ data193: in std_logic_vector((N-1) downto 0);
+ data194: in std_logic_vector((N-1) downto 0);
+ data195: in std_logic_vector((N-1) downto 0);
+ data196: in std_logic_vector((N-1) downto 0);
+ data197: in std_logic_vector((N-1) downto 0);
+ data198: in std_logic_vector((N-1) downto 0);
+ data199: in std_logic_vector((N-1) downto 0);
+ data200: in std_logic_vector((N-1) downto 0);
+ data201: in std_logic_vector((N-1) downto 0);
+ data202: in std_logic_vector((N-1) downto 0);
+ data203: in std_logic_vector((N-1) downto 0);
+ data204: in std_logic_vector((N-1) downto 0);
+ data205: in std_logic_vector((N-1) downto 0);
+ data206: in std_logic_vector((N-1) downto 0);
+ data207: in std_logic_vector((N-1) downto 0);
+ data208: in std_logic_vector((N-1) downto 0);
+ data209: in std_logic_vector((N-1) downto 0);
+ data210: in std_logic_vector((N-1) downto 0);
+ data211: in std_logic_vector((N-1) downto 0);
+ data212: in std_logic_vector((N-1) downto 0);
+ data213: in std_logic_vector((N-1) downto 0);
+ data214: in std_logic_vector((N-1) downto 0);
+ data215: in std_logic_vector((N-1) downto 0);
+ data216: in std_logic_vector((N-1) downto 0);
+ data217: in std_logic_vector((N-1) downto 0);
+ data218: in std_logic_vector((N-1) downto 0);
+ data219: in std_logic_vector((N-1) downto 0);
+ data220: in std_logic_vector((N-1) downto 0);
+ data221: in std_logic_vector((N-1) downto 0);
+ data222: in std_logic_vector((N-1) downto 0);
+ data223: in std_logic_vector((N-1) downto 0);
+ data224: in std_logic_vector((N-1) downto 0);
+ data225: in std_logic_vector((N-1) downto 0);
+ data226: in std_logic_vector((N-1) downto 0);
+ data227: in std_logic_vector((N-1) downto 0);
+ data228: in std_logic_vector((N-1) downto 0);
+ data229: in std_logic_vector((N-1) downto 0);
+ data230: in std_logic_vector((N-1) downto 0);
+ data231: in std_logic_vector((N-1) downto 0);
+ data232: in std_logic_vector((N-1) downto 0);
+ data233: in std_logic_vector((N-1) downto 0);
+ data234: in std_logic_vector((N-1) downto 0);
+ data235: in std_logic_vector((N-1) downto 0);
+ data236: in std_logic_vector((N-1) downto 0);
+ data237: in std_logic_vector((N-1) downto 0);
+ data238: in std_logic_vector((N-1) downto 0);
+ data239: in std_logic_vector((N-1) downto 0);
+ data240: in std_logic_vector((N-1) downto 0);
+ data241: in std_logic_vector((N-1) downto 0);
+ data242: in std_logic_vector((N-1) downto 0);
+ data243: in std_logic_vector((N-1) downto 0);
+ data244: in std_logic_vector((N-1) downto 0);
+ data245: in std_logic_vector((N-1) downto 0);
+ data246: in std_logic_vector((N-1) downto 0);
+ data247: in std_logic_vector((N-1) downto 0);
+ data248: in std_logic_vector((N-1) downto 0);
+ data249: in std_logic_vector((N-1) downto 0);
+ data250: in std_logic_vector((N-1) downto 0);
+ data251: in std_logic_vector((N-1) downto 0);
+ data252: in std_logic_vector((N-1) downto 0);
+ data253: in std_logic_vector((N-1) downto 0);
+ data254: in std_logic_vector((N-1) downto 0);
+ data255: in std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(7 downto 0);
+ output: out std_logic_vector((N-1) downto 0)
+);
+end;
+
+architecture struct_encoder256xN of encoder256xN is
+component encoder256x1 is
+port(
+ data0: in std_logic;
+ data1: in std_logic;
+ data2: in std_logic;
+ data3: in std_logic;
+ data4: in std_logic;
+ data5: in std_logic;
+ data6: in std_logic;
+ data7: in std_logic;
+ data8: in std_logic;
+ data9: in std_logic;
+ data10: in std_logic;
+ data11: in std_logic;
+ data12: in std_logic;
+ data13: in std_logic;
+ data14: in std_logic;
+ data15: in std_logic;
+ data16: in std_logic;
+ data17: in std_logic;
+ data18: in std_logic;
+ data19: in std_logic;
+ data20: in std_logic;
+ data21: in std_logic;
+ data22: in std_logic;
+ data23: in std_logic;
+ data24: in std_logic;
+ data25: in std_logic;
+ data26: in std_logic;
+ data27: in std_logic;
+ data28: in std_logic;
+ data29: in std_logic;
+ data30: in std_logic;
+ data31: in std_logic;
+ data32: in std_logic;
+ data33: in std_logic;
+ data34: in std_logic;
+ data35: in std_logic;
+ data36: in std_logic;
+ data37: in std_logic;
+ data38: in std_logic;
+ data39: in std_logic;
+ data40: in std_logic;
+ data41: in std_logic;
+ data42: in std_logic;
+ data43: in std_logic;
+ data44: in std_logic;
+ data45: in std_logic;
+ data46: in std_logic;
+ data47: in std_logic;
+ data48: in std_logic;
+ data49: in std_logic;
+ data50: in std_logic;
+ data51: in std_logic;
+ data52: in std_logic;
+ data53: in std_logic;
+ data54: in std_logic;
+ data55: in std_logic;
+ data56: in std_logic;
+ data57: in std_logic;
+ data58: in std_logic;
+ data59: in std_logic;
+ data60: in std_logic;
+ data61: in std_logic;
+ data62: in std_logic;
+ data63: in std_logic;
+ data64: in std_logic;
+ data65: in std_logic;
+ data66: in std_logic;
+ data67: in std_logic;
+ data68: in std_logic;
+ data69: in std_logic;
+ data70: in std_logic;
+ data71: in std_logic;
+ data72: in std_logic;
+ data73: in std_logic;
+ data74: in std_logic;
+ data75: in std_logic;
+ data76: in std_logic;
+ data77: in std_logic;
+ data78: in std_logic;
+ data79: in std_logic;
+ data80: in std_logic;
+ data81: in std_logic;
+ data82: in std_logic;
+ data83: in std_logic;
+ data84: in std_logic;
+ data85: in std_logic;
+ data86: in std_logic;
+ data87: in std_logic;
+ data88: in std_logic;
+ data89: in std_logic;
+ data90: in std_logic;
+ data91: in std_logic;
+ data92: in std_logic;
+ data93: in std_logic;
+ data94: in std_logic;
+ data95: in std_logic;
+ data96: in std_logic;
+ data97: in std_logic;
+ data98: in std_logic;
+ data99: in std_logic;
+ data100: in std_logic;
+ data101: in std_logic;
+ data102: in std_logic;
+ data103: in std_logic;
+ data104: in std_logic;
+ data105: in std_logic;
+ data106: in std_logic;
+ data107: in std_logic;
+ data108: in std_logic;
+ data109: in std_logic;
+ data110: in std_logic;
+ data111: in std_logic;
+ data112: in std_logic;
+ data113: in std_logic;
+ data114: in std_logic;
+ data115: in std_logic;
+ data116: in std_logic;
+ data117: in std_logic;
+ data118: in std_logic;
+ data119: in std_logic;
+ data120: in std_logic;
+ data121: in std_logic;
+ data122: in std_logic;
+ data123: in std_logic;
+ data124: in std_logic;
+ data125: in std_logic;
+ data126: in std_logic;
+ data127: in std_logic;
+ data128: in std_logic;
+ data129: in std_logic;
+ data130: in std_logic;
+ data131: in std_logic;
+ data132: in std_logic;
+ data133: in std_logic;
+ data134: in std_logic;
+ data135: in std_logic;
+ data136: in std_logic;
+ data137: in std_logic;
+ data138: in std_logic;
+ data139: in std_logic;
+ data140: in std_logic;
+ data141: in std_logic;
+ data142: in std_logic;
+ data143: in std_logic;
+ data144: in std_logic;
+ data145: in std_logic;
+ data146: in std_logic;
+ data147: in std_logic;
+ data148: in std_logic;
+ data149: in std_logic;
+ data150: in std_logic;
+ data151: in std_logic;
+ data152: in std_logic;
+ data153: in std_logic;
+ data154: in std_logic;
+ data155: in std_logic;
+ data156: in std_logic;
+ data157: in std_logic;
+ data158: in std_logic;
+ data159: in std_logic;
+ data160: in std_logic;
+ data161: in std_logic;
+ data162: in std_logic;
+ data163: in std_logic;
+ data164: in std_logic;
+ data165: in std_logic;
+ data166: in std_logic;
+ data167: in std_logic;
+ data168: in std_logic;
+ data169: in std_logic;
+ data170: in std_logic;
+ data171: in std_logic;
+ data172: in std_logic;
+ data173: in std_logic;
+ data174: in std_logic;
+ data175: in std_logic;
+ data176: in std_logic;
+ data177: in std_logic;
+ data178: in std_logic;
+ data179: in std_logic;
+ data180: in std_logic;
+ data181: in std_logic;
+ data182: in std_logic;
+ data183: in std_logic;
+ data184: in std_logic;
+ data185: in std_logic;
+ data186: in std_logic;
+ data187: in std_logic;
+ data188: in std_logic;
+ data189: in std_logic;
+ data190: in std_logic;
+ data191: in std_logic;
+ data192: in std_logic;
+ data193: in std_logic;
+ data194: in std_logic;
+ data195: in std_logic;
+ data196: in std_logic;
+ data197: in std_logic;
+ data198: in std_logic;
+ data199: in std_logic;
+ data200: in std_logic;
+ data201: in std_logic;
+ data202: in std_logic;
+ data203: in std_logic;
+ data204: in std_logic;
+ data205: in std_logic;
+ data206: in std_logic;
+ data207: in std_logic;
+ data208: in std_logic;
+ data209: in std_logic;
+ data210: in std_logic;
+ data211: in std_logic;
+ data212: in std_logic;
+ data213: in std_logic;
+ data214: in std_logic;
+ data215: in std_logic;
+ data216: in std_logic;
+ data217: in std_logic;
+ data218: in std_logic;
+ data219: in std_logic;
+ data220: in std_logic;
+ data221: in std_logic;
+ data222: in std_logic;
+ data223: in std_logic;
+ data224: in std_logic;
+ data225: in std_logic;
+ data226: in std_logic;
+ data227: in std_logic;
+ data228: in std_logic;
+ data229: in std_logic;
+ data230: in std_logic;
+ data231: in std_logic;
+ data232: in std_logic;
+ data233: in std_logic;
+ data234: in std_logic;
+ data235: in std_logic;
+ data236: in std_logic;
+ data237: in std_logic;
+ data238: in std_logic;
+ data239: in std_logic;
+ data240: in std_logic;
+ data241: in std_logic;
+ data242: in std_logic;
+ data243: in std_logic;
+ data244: in std_logic;
+ data245: in std_logic;
+ data246: in std_logic;
+ data247: in std_logic;
+ data248: in std_logic;
+ data249: in std_logic;
+ data250: in std_logic;
+ data251: in std_logic;
+ data252: in std_logic;
+ data253: in std_logic;
+ data254: in std_logic;
+ data255: in std_logic;
+ address: in std_logic_vector(7 downto 0);
+ output: out std_logic
+);
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: encoder256x1 port map(
+ data0 => data0(i),
+ data1 => data1(i),
+ data2 => data2(i),
+ data3 => data3(i),
+ data4 => data4(i),
+ data5 => data5(i),
+ data6 => data6(i),
+ data7 => data7(i),
+ data8 => data8(i),
+ data9 => data9(i),
+ data10 => data10(i),
+ data11 => data11(i),
+ data12 => data12(i),
+ data13 => data13(i),
+ data14 => data14(i),
+ data15 => data15(i),
+ data16 => data16(i),
+ data17 => data17(i),
+ data18 => data18(i),
+ data19 => data19(i),
+ data20 => data20(i),
+ data21 => data21(i),
+ data22 => data22(i),
+ data23 => data23(i),
+ data24 => data24(i),
+ data25 => data25(i),
+ data26 => data26(i),
+ data27 => data27(i),
+ data28 => data28(i),
+ data29 => data29(i),
+ data30 => data30(i),
+ data31 => data31(i),
+ data32 => data32(i),
+ data33 => data33(i),
+ data34 => data34(i),
+ data35 => data35(i),
+ data36 => data36(i),
+ data37 => data37(i),
+ data38 => data38(i),
+ data39 => data39(i),
+ data40 => data40(i),
+ data41 => data41(i),
+ data42 => data42(i),
+ data43 => data43(i),
+ data44 => data44(i),
+ data45 => data45(i),
+ data46 => data46(i),
+ data47 => data47(i),
+ data48 => data48(i),
+ data49 => data49(i),
+ data50 => data50(i),
+ data51 => data51(i),
+ data52 => data52(i),
+ data53 => data53(i),
+ data54 => data54(i),
+ data55 => data55(i),
+ data56 => data56(i),
+ data57 => data57(i),
+ data58 => data58(i),
+ data59 => data59(i),
+ data60 => data60(i),
+ data61 => data61(i),
+ data62 => data62(i),
+ data63 => data63(i),
+ data64 => data64(i),
+ data65 => data65(i),
+ data66 => data66(i),
+ data67 => data67(i),
+ data68 => data68(i),
+ data69 => data69(i),
+ data70 => data70(i),
+ data71 => data71(i),
+ data72 => data72(i),
+ data73 => data73(i),
+ data74 => data74(i),
+ data75 => data75(i),
+ data76 => data76(i),
+ data77 => data77(i),
+ data78 => data78(i),
+ data79 => data79(i),
+ data80 => data80(i),
+ data81 => data81(i),
+ data82 => data82(i),
+ data83 => data83(i),
+ data84 => data84(i),
+ data85 => data85(i),
+ data86 => data86(i),
+ data87 => data87(i),
+ data88 => data88(i),
+ data89 => data89(i),
+ data90 => data90(i),
+ data91 => data91(i),
+ data92 => data92(i),
+ data93 => data93(i),
+ data94 => data94(i),
+ data95 => data95(i),
+ data96 => data96(i),
+ data97 => data97(i),
+ data98 => data98(i),
+ data99 => data99(i),
+ data100 => data100(i),
+ data101 => data101(i),
+ data102 => data102(i),
+ data103 => data103(i),
+ data104 => data104(i),
+ data105 => data105(i),
+ data106 => data106(i),
+ data107 => data107(i),
+ data108 => data108(i),
+ data109 => data109(i),
+ data110 => data110(i),
+ data111 => data111(i),
+ data112 => data112(i),
+ data113 => data113(i),
+ data114 => data114(i),
+ data115 => data115(i),
+ data116 => data116(i),
+ data117 => data117(i),
+ data118 => data118(i),
+ data119 => data119(i),
+ data120 => data120(i),
+ data121 => data121(i),
+ data122 => data122(i),
+ data123 => data123(i),
+ data124 => data124(i),
+ data125 => data125(i),
+ data126 => data126(i),
+ data127 => data127(i),
+ data128 => data128(i),
+ data129 => data129(i),
+ data130 => data130(i),
+ data131 => data131(i),
+ data132 => data132(i),
+ data133 => data133(i),
+ data134 => data134(i),
+ data135 => data135(i),
+ data136 => data136(i),
+ data137 => data137(i),
+ data138 => data138(i),
+ data139 => data139(i),
+ data140 => data140(i),
+ data141 => data141(i),
+ data142 => data142(i),
+ data143 => data143(i),
+ data144 => data144(i),
+ data145 => data145(i),
+ data146 => data146(i),
+ data147 => data147(i),
+ data148 => data148(i),
+ data149 => data149(i),
+ data150 => data150(i),
+ data151 => data151(i),
+ data152 => data152(i),
+ data153 => data153(i),
+ data154 => data154(i),
+ data155 => data155(i),
+ data156 => data156(i),
+ data157 => data157(i),
+ data158 => data158(i),
+ data159 => data159(i),
+ data160 => data160(i),
+ data161 => data161(i),
+ data162 => data162(i),
+ data163 => data163(i),
+ data164 => data164(i),
+ data165 => data165(i),
+ data166 => data166(i),
+ data167 => data167(i),
+ data168 => data168(i),
+ data169 => data169(i),
+ data170 => data170(i),
+ data171 => data171(i),
+ data172 => data172(i),
+ data173 => data173(i),
+ data174 => data174(i),
+ data175 => data175(i),
+ data176 => data176(i),
+ data177 => data177(i),
+ data178 => data178(i),
+ data179 => data179(i),
+ data180 => data180(i),
+ data181 => data181(i),
+ data182 => data182(i),
+ data183 => data183(i),
+ data184 => data184(i),
+ data185 => data185(i),
+ data186 => data186(i),
+ data187 => data187(i),
+ data188 => data188(i),
+ data189 => data189(i),
+ data190 => data190(i),
+ data191 => data191(i),
+ data192 => data192(i),
+ data193 => data193(i),
+ data194 => data194(i),
+ data195 => data195(i),
+ data196 => data196(i),
+ data197 => data197(i),
+ data198 => data198(i),
+ data199 => data199(i),
+ data200 => data200(i),
+ data201 => data201(i),
+ data202 => data202(i),
+ data203 => data203(i),
+ data204 => data204(i),
+ data205 => data205(i),
+ data206 => data206(i),
+ data207 => data207(i),
+ data208 => data208(i),
+ data209 => data209(i),
+ data210 => data210(i),
+ data211 => data211(i),
+ data212 => data212(i),
+ data213 => data213(i),
+ data214 => data214(i),
+ data215 => data215(i),
+ data216 => data216(i),
+ data217 => data217(i),
+ data218 => data218(i),
+ data219 => data219(i),
+ data220 => data220(i),
+ data221 => data221(i),
+ data222 => data222(i),
+ data223 => data223(i),
+ data224 => data224(i),
+ data225 => data225(i),
+ data226 => data226(i),
+ data227 => data227(i),
+ data228 => data228(i),
+ data229 => data229(i),
+ data230 => data230(i),
+ data231 => data231(i),
+ data232 => data232(i),
+ data233 => data233(i),
+ data234 => data234(i),
+ data235 => data235(i),
+ data236 => data236(i),
+ data237 => data237(i),
+ data238 => data238(i),
+ data239 => data239(i),
+ data240 => data240(i),
+ data241 => data241(i),
+ data242 => data242(i),
+ data243 => data243(i),
+ data244 => data244(i),
+ data245 => data245(i),
+ data246 => data246(i),
+ data247 => data247(i),
+ data248 => data248(i),
+ data249 => data249(i),
+ data250 => data250(i),
+ data251 => data251(i),
+ data252 => data252(i),
+ data253 => data253(i),
+ data254 => data254(i),
+ data255 => data255(i),
+ address => address,
+ output => output(i)
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoder1x256 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ y64: out std_logic;
+ y65: out std_logic;
+ y66: out std_logic;
+ y67: out std_logic;
+ y68: out std_logic;
+ y69: out std_logic;
+ y70: out std_logic;
+ y71: out std_logic;
+ y72: out std_logic;
+ y73: out std_logic;
+ y74: out std_logic;
+ y75: out std_logic;
+ y76: out std_logic;
+ y77: out std_logic;
+ y78: out std_logic;
+ y79: out std_logic;
+ y80: out std_logic;
+ y81: out std_logic;
+ y82: out std_logic;
+ y83: out std_logic;
+ y84: out std_logic;
+ y85: out std_logic;
+ y86: out std_logic;
+ y87: out std_logic;
+ y88: out std_logic;
+ y89: out std_logic;
+ y90: out std_logic;
+ y91: out std_logic;
+ y92: out std_logic;
+ y93: out std_logic;
+ y94: out std_logic;
+ y95: out std_logic;
+ y96: out std_logic;
+ y97: out std_logic;
+ y98: out std_logic;
+ y99: out std_logic;
+ y100: out std_logic;
+ y101: out std_logic;
+ y102: out std_logic;
+ y103: out std_logic;
+ y104: out std_logic;
+ y105: out std_logic;
+ y106: out std_logic;
+ y107: out std_logic;
+ y108: out std_logic;
+ y109: out std_logic;
+ y110: out std_logic;
+ y111: out std_logic;
+ y112: out std_logic;
+ y113: out std_logic;
+ y114: out std_logic;
+ y115: out std_logic;
+ y116: out std_logic;
+ y117: out std_logic;
+ y118: out std_logic;
+ y119: out std_logic;
+ y120: out std_logic;
+ y121: out std_logic;
+ y122: out std_logic;
+ y123: out std_logic;
+ y124: out std_logic;
+ y125: out std_logic;
+ y126: out std_logic;
+ y127: out std_logic;
+ y128: out std_logic;
+ y129: out std_logic;
+ y130: out std_logic;
+ y131: out std_logic;
+ y132: out std_logic;
+ y133: out std_logic;
+ y134: out std_logic;
+ y135: out std_logic;
+ y136: out std_logic;
+ y137: out std_logic;
+ y138: out std_logic;
+ y139: out std_logic;
+ y140: out std_logic;
+ y141: out std_logic;
+ y142: out std_logic;
+ y143: out std_logic;
+ y144: out std_logic;
+ y145: out std_logic;
+ y146: out std_logic;
+ y147: out std_logic;
+ y148: out std_logic;
+ y149: out std_logic;
+ y150: out std_logic;
+ y151: out std_logic;
+ y152: out std_logic;
+ y153: out std_logic;
+ y154: out std_logic;
+ y155: out std_logic;
+ y156: out std_logic;
+ y157: out std_logic;
+ y158: out std_logic;
+ y159: out std_logic;
+ y160: out std_logic;
+ y161: out std_logic;
+ y162: out std_logic;
+ y163: out std_logic;
+ y164: out std_logic;
+ y165: out std_logic;
+ y166: out std_logic;
+ y167: out std_logic;
+ y168: out std_logic;
+ y169: out std_logic;
+ y170: out std_logic;
+ y171: out std_logic;
+ y172: out std_logic;
+ y173: out std_logic;
+ y174: out std_logic;
+ y175: out std_logic;
+ y176: out std_logic;
+ y177: out std_logic;
+ y178: out std_logic;
+ y179: out std_logic;
+ y180: out std_logic;
+ y181: out std_logic;
+ y182: out std_logic;
+ y183: out std_logic;
+ y184: out std_logic;
+ y185: out std_logic;
+ y186: out std_logic;
+ y187: out std_logic;
+ y188: out std_logic;
+ y189: out std_logic;
+ y190: out std_logic;
+ y191: out std_logic;
+ y192: out std_logic;
+ y193: out std_logic;
+ y194: out std_logic;
+ y195: out std_logic;
+ y196: out std_logic;
+ y197: out std_logic;
+ y198: out std_logic;
+ y199: out std_logic;
+ y200: out std_logic;
+ y201: out std_logic;
+ y202: out std_logic;
+ y203: out std_logic;
+ y204: out std_logic;
+ y205: out std_logic;
+ y206: out std_logic;
+ y207: out std_logic;
+ y208: out std_logic;
+ y209: out std_logic;
+ y210: out std_logic;
+ y211: out std_logic;
+ y212: out std_logic;
+ y213: out std_logic;
+ y214: out std_logic;
+ y215: out std_logic;
+ y216: out std_logic;
+ y217: out std_logic;
+ y218: out std_logic;
+ y219: out std_logic;
+ y220: out std_logic;
+ y221: out std_logic;
+ y222: out std_logic;
+ y223: out std_logic;
+ y224: out std_logic;
+ y225: out std_logic;
+ y226: out std_logic;
+ y227: out std_logic;
+ y228: out std_logic;
+ y229: out std_logic;
+ y230: out std_logic;
+ y231: out std_logic;
+ y232: out std_logic;
+ y233: out std_logic;
+ y234: out std_logic;
+ y235: out std_logic;
+ y236: out std_logic;
+ y237: out std_logic;
+ y238: out std_logic;
+ y239: out std_logic;
+ y240: out std_logic;
+ y241: out std_logic;
+ y242: out std_logic;
+ y243: out std_logic;
+ y244: out std_logic;
+ y245: out std_logic;
+ y246: out std_logic;
+ y247: out std_logic;
+ y248: out std_logic;
+ y249: out std_logic;
+ y250: out std_logic;
+ y251: out std_logic;
+ y252: out std_logic;
+ y253: out std_logic;
+ y254: out std_logic;
+ y255: out std_logic;
+ address: in std_logic_vector(7 downto 0)
+);
+end;
+
+architecture struct_decoder1x256 of decoder1x256 is
+begin
+ y0 <= data when address = "00000000" else '0';
+ y1 <= data when address = "00000001" else '0';
+ y2 <= data when address = "00000010" else '0';
+ y3 <= data when address = "00000011" else '0';
+ y4 <= data when address = "00000100" else '0';
+ y5 <= data when address = "00000101" else '0';
+ y6 <= data when address = "00000110" else '0';
+ y7 <= data when address = "00000111" else '0';
+ y8 <= data when address = "00001000" else '0';
+ y9 <= data when address = "00001001" else '0';
+ y10 <= data when address = "00001010" else '0';
+ y11 <= data when address = "00001011" else '0';
+ y12 <= data when address = "00001100" else '0';
+ y13 <= data when address = "00001101" else '0';
+ y14 <= data when address = "00001110" else '0';
+ y15 <= data when address = "00001111" else '0';
+ y16 <= data when address = "00010000" else '0';
+ y17 <= data when address = "00010001" else '0';
+ y18 <= data when address = "00010010" else '0';
+ y19 <= data when address = "00010011" else '0';
+ y20 <= data when address = "00010100" else '0';
+ y21 <= data when address = "00010101" else '0';
+ y22 <= data when address = "00010110" else '0';
+ y23 <= data when address = "00010111" else '0';
+ y24 <= data when address = "00011000" else '0';
+ y25 <= data when address = "00011001" else '0';
+ y26 <= data when address = "00011010" else '0';
+ y27 <= data when address = "00011011" else '0';
+ y28 <= data when address = "00011100" else '0';
+ y29 <= data when address = "00011101" else '0';
+ y30 <= data when address = "00011110" else '0';
+ y31 <= data when address = "00011111" else '0';
+ y32 <= data when address = "00100000" else '0';
+ y33 <= data when address = "00100001" else '0';
+ y34 <= data when address = "00100010" else '0';
+ y35 <= data when address = "00100011" else '0';
+ y36 <= data when address = "00100100" else '0';
+ y37 <= data when address = "00100101" else '0';
+ y38 <= data when address = "00100110" else '0';
+ y39 <= data when address = "00100111" else '0';
+ y40 <= data when address = "00101000" else '0';
+ y41 <= data when address = "00101001" else '0';
+ y42 <= data when address = "00101010" else '0';
+ y43 <= data when address = "00101011" else '0';
+ y44 <= data when address = "00101100" else '0';
+ y45 <= data when address = "00101101" else '0';
+ y46 <= data when address = "00101110" else '0';
+ y47 <= data when address = "00101111" else '0';
+ y48 <= data when address = "00110000" else '0';
+ y49 <= data when address = "00110001" else '0';
+ y50 <= data when address = "00110010" else '0';
+ y51 <= data when address = "00110011" else '0';
+ y52 <= data when address = "00110100" else '0';
+ y53 <= data when address = "00110101" else '0';
+ y54 <= data when address = "00110110" else '0';
+ y55 <= data when address = "00110111" else '0';
+ y56 <= data when address = "00111000" else '0';
+ y57 <= data when address = "00111001" else '0';
+ y58 <= data when address = "00111010" else '0';
+ y59 <= data when address = "00111011" else '0';
+ y60 <= data when address = "00111100" else '0';
+ y61 <= data when address = "00111101" else '0';
+ y62 <= data when address = "00111110" else '0';
+ y63 <= data when address = "00111111" else '0';
+ y64 <= data when address = "01000000" else '0';
+ y65 <= data when address = "01000001" else '0';
+ y66 <= data when address = "01000010" else '0';
+ y67 <= data when address = "01000011" else '0';
+ y68 <= data when address = "01000100" else '0';
+ y69 <= data when address = "01000101" else '0';
+ y70 <= data when address = "01000110" else '0';
+ y71 <= data when address = "01000111" else '0';
+ y72 <= data when address = "01001000" else '0';
+ y73 <= data when address = "01001001" else '0';
+ y74 <= data when address = "01001010" else '0';
+ y75 <= data when address = "01001011" else '0';
+ y76 <= data when address = "01001100" else '0';
+ y77 <= data when address = "01001101" else '0';
+ y78 <= data when address = "01001110" else '0';
+ y79 <= data when address = "01001111" else '0';
+ y80 <= data when address = "01010000" else '0';
+ y81 <= data when address = "01010001" else '0';
+ y82 <= data when address = "01010010" else '0';
+ y83 <= data when address = "01010011" else '0';
+ y84 <= data when address = "01010100" else '0';
+ y85 <= data when address = "01010101" else '0';
+ y86 <= data when address = "01010110" else '0';
+ y87 <= data when address = "01010111" else '0';
+ y88 <= data when address = "01011000" else '0';
+ y89 <= data when address = "01011001" else '0';
+ y90 <= data when address = "01011010" else '0';
+ y91 <= data when address = "01011011" else '0';
+ y92 <= data when address = "01011100" else '0';
+ y93 <= data when address = "01011101" else '0';
+ y94 <= data when address = "01011110" else '0';
+ y95 <= data when address = "01011111" else '0';
+ y96 <= data when address = "01100000" else '0';
+ y97 <= data when address = "01100001" else '0';
+ y98 <= data when address = "01100010" else '0';
+ y99 <= data when address = "01100011" else '0';
+ y100 <= data when address = "01100100" else '0';
+ y101 <= data when address = "01100101" else '0';
+ y102 <= data when address = "01100110" else '0';
+ y103 <= data when address = "01100111" else '0';
+ y104 <= data when address = "01101000" else '0';
+ y105 <= data when address = "01101001" else '0';
+ y106 <= data when address = "01101010" else '0';
+ y107 <= data when address = "01101011" else '0';
+ y108 <= data when address = "01101100" else '0';
+ y109 <= data when address = "01101101" else '0';
+ y110 <= data when address = "01101110" else '0';
+ y111 <= data when address = "01101111" else '0';
+ y112 <= data when address = "01110000" else '0';
+ y113 <= data when address = "01110001" else '0';
+ y114 <= data when address = "01110010" else '0';
+ y115 <= data when address = "01110011" else '0';
+ y116 <= data when address = "01110100" else '0';
+ y117 <= data when address = "01110101" else '0';
+ y118 <= data when address = "01110110" else '0';
+ y119 <= data when address = "01110111" else '0';
+ y120 <= data when address = "01111000" else '0';
+ y121 <= data when address = "01111001" else '0';
+ y122 <= data when address = "01111010" else '0';
+ y123 <= data when address = "01111011" else '0';
+ y124 <= data when address = "01111100" else '0';
+ y125 <= data when address = "01111101" else '0';
+ y126 <= data when address = "01111110" else '0';
+ y127 <= data when address = "01111111" else '0';
+ y128 <= data when address = "10000000" else '0';
+ y129 <= data when address = "10000001" else '0';
+ y130 <= data when address = "10000010" else '0';
+ y131 <= data when address = "10000011" else '0';
+ y132 <= data when address = "10000100" else '0';
+ y133 <= data when address = "10000101" else '0';
+ y134 <= data when address = "10000110" else '0';
+ y135 <= data when address = "10000111" else '0';
+ y136 <= data when address = "10001000" else '0';
+ y137 <= data when address = "10001001" else '0';
+ y138 <= data when address = "10001010" else '0';
+ y139 <= data when address = "10001011" else '0';
+ y140 <= data when address = "10001100" else '0';
+ y141 <= data when address = "10001101" else '0';
+ y142 <= data when address = "10001110" else '0';
+ y143 <= data when address = "10001111" else '0';
+ y144 <= data when address = "10010000" else '0';
+ y145 <= data when address = "10010001" else '0';
+ y146 <= data when address = "10010010" else '0';
+ y147 <= data when address = "10010011" else '0';
+ y148 <= data when address = "10010100" else '0';
+ y149 <= data when address = "10010101" else '0';
+ y150 <= data when address = "10010110" else '0';
+ y151 <= data when address = "10010111" else '0';
+ y152 <= data when address = "10011000" else '0';
+ y153 <= data when address = "10011001" else '0';
+ y154 <= data when address = "10011010" else '0';
+ y155 <= data when address = "10011011" else '0';
+ y156 <= data when address = "10011100" else '0';
+ y157 <= data when address = "10011101" else '0';
+ y158 <= data when address = "10011110" else '0';
+ y159 <= data when address = "10011111" else '0';
+ y160 <= data when address = "10100000" else '0';
+ y161 <= data when address = "10100001" else '0';
+ y162 <= data when address = "10100010" else '0';
+ y163 <= data when address = "10100011" else '0';
+ y164 <= data when address = "10100100" else '0';
+ y165 <= data when address = "10100101" else '0';
+ y166 <= data when address = "10100110" else '0';
+ y167 <= data when address = "10100111" else '0';
+ y168 <= data when address = "10101000" else '0';
+ y169 <= data when address = "10101001" else '0';
+ y170 <= data when address = "10101010" else '0';
+ y171 <= data when address = "10101011" else '0';
+ y172 <= data when address = "10101100" else '0';
+ y173 <= data when address = "10101101" else '0';
+ y174 <= data when address = "10101110" else '0';
+ y175 <= data when address = "10101111" else '0';
+ y176 <= data when address = "10110000" else '0';
+ y177 <= data when address = "10110001" else '0';
+ y178 <= data when address = "10110010" else '0';
+ y179 <= data when address = "10110011" else '0';
+ y180 <= data when address = "10110100" else '0';
+ y181 <= data when address = "10110101" else '0';
+ y182 <= data when address = "10110110" else '0';
+ y183 <= data when address = "10110111" else '0';
+ y184 <= data when address = "10111000" else '0';
+ y185 <= data when address = "10111001" else '0';
+ y186 <= data when address = "10111010" else '0';
+ y187 <= data when address = "10111011" else '0';
+ y188 <= data when address = "10111100" else '0';
+ y189 <= data when address = "10111101" else '0';
+ y190 <= data when address = "10111110" else '0';
+ y191 <= data when address = "10111111" else '0';
+ y192 <= data when address = "11000000" else '0';
+ y193 <= data when address = "11000001" else '0';
+ y194 <= data when address = "11000010" else '0';
+ y195 <= data when address = "11000011" else '0';
+ y196 <= data when address = "11000100" else '0';
+ y197 <= data when address = "11000101" else '0';
+ y198 <= data when address = "11000110" else '0';
+ y199 <= data when address = "11000111" else '0';
+ y200 <= data when address = "11001000" else '0';
+ y201 <= data when address = "11001001" else '0';
+ y202 <= data when address = "11001010" else '0';
+ y203 <= data when address = "11001011" else '0';
+ y204 <= data when address = "11001100" else '0';
+ y205 <= data when address = "11001101" else '0';
+ y206 <= data when address = "11001110" else '0';
+ y207 <= data when address = "11001111" else '0';
+ y208 <= data when address = "11010000" else '0';
+ y209 <= data when address = "11010001" else '0';
+ y210 <= data when address = "11010010" else '0';
+ y211 <= data when address = "11010011" else '0';
+ y212 <= data when address = "11010100" else '0';
+ y213 <= data when address = "11010101" else '0';
+ y214 <= data when address = "11010110" else '0';
+ y215 <= data when address = "11010111" else '0';
+ y216 <= data when address = "11011000" else '0';
+ y217 <= data when address = "11011001" else '0';
+ y218 <= data when address = "11011010" else '0';
+ y219 <= data when address = "11011011" else '0';
+ y220 <= data when address = "11011100" else '0';
+ y221 <= data when address = "11011101" else '0';
+ y222 <= data when address = "11011110" else '0';
+ y223 <= data when address = "11011111" else '0';
+ y224 <= data when address = "11100000" else '0';
+ y225 <= data when address = "11100001" else '0';
+ y226 <= data when address = "11100010" else '0';
+ y227 <= data when address = "11100011" else '0';
+ y228 <= data when address = "11100100" else '0';
+ y229 <= data when address = "11100101" else '0';
+ y230 <= data when address = "11100110" else '0';
+ y231 <= data when address = "11100111" else '0';
+ y232 <= data when address = "11101000" else '0';
+ y233 <= data when address = "11101001" else '0';
+ y234 <= data when address = "11101010" else '0';
+ y235 <= data when address = "11101011" else '0';
+ y236 <= data when address = "11101100" else '0';
+ y237 <= data when address = "11101101" else '0';
+ y238 <= data when address = "11101110" else '0';
+ y239 <= data when address = "11101111" else '0';
+ y240 <= data when address = "11110000" else '0';
+ y241 <= data when address = "11110001" else '0';
+ y242 <= data when address = "11110010" else '0';
+ y243 <= data when address = "11110011" else '0';
+ y244 <= data when address = "11110100" else '0';
+ y245 <= data when address = "11110101" else '0';
+ y246 <= data when address = "11110110" else '0';
+ y247 <= data when address = "11110111" else '0';
+ y248 <= data when address = "11111000" else '0';
+ y249 <= data when address = "11111001" else '0';
+ y250 <= data when address = "11111010" else '0';
+ y251 <= data when address = "11111011" else '0';
+ y252 <= data when address = "11111100" else '0';
+ y253 <= data when address = "11111101" else '0';
+ y254 <= data when address = "11111110" else '0';
+ y255 <= data when address = "11111111" else '0';
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity decoderNx256 is
+generic(
+ N: positive
+);
+port(
+ data: in std_logic_vector((N-1) downto 0);
+ y0: out std_logic_vector((N-1) downto 0);
+ y1: out std_logic_vector((N-1) downto 0);
+ y2: out std_logic_vector((N-1) downto 0);
+ y3: out std_logic_vector((N-1) downto 0);
+ y4: out std_logic_vector((N-1) downto 0);
+ y5: out std_logic_vector((N-1) downto 0);
+ y6: out std_logic_vector((N-1) downto 0);
+ y7: out std_logic_vector((N-1) downto 0);
+ y8: out std_logic_vector((N-1) downto 0);
+ y9: out std_logic_vector((N-1) downto 0);
+ y10: out std_logic_vector((N-1) downto 0);
+ y11: out std_logic_vector((N-1) downto 0);
+ y12: out std_logic_vector((N-1) downto 0);
+ y13: out std_logic_vector((N-1) downto 0);
+ y14: out std_logic_vector((N-1) downto 0);
+ y15: out std_logic_vector((N-1) downto 0);
+ y16: out std_logic_vector((N-1) downto 0);
+ y17: out std_logic_vector((N-1) downto 0);
+ y18: out std_logic_vector((N-1) downto 0);
+ y19: out std_logic_vector((N-1) downto 0);
+ y20: out std_logic_vector((N-1) downto 0);
+ y21: out std_logic_vector((N-1) downto 0);
+ y22: out std_logic_vector((N-1) downto 0);
+ y23: out std_logic_vector((N-1) downto 0);
+ y24: out std_logic_vector((N-1) downto 0);
+ y25: out std_logic_vector((N-1) downto 0);
+ y26: out std_logic_vector((N-1) downto 0);
+ y27: out std_logic_vector((N-1) downto 0);
+ y28: out std_logic_vector((N-1) downto 0);
+ y29: out std_logic_vector((N-1) downto 0);
+ y30: out std_logic_vector((N-1) downto 0);
+ y31: out std_logic_vector((N-1) downto 0);
+ y32: out std_logic_vector((N-1) downto 0);
+ y33: out std_logic_vector((N-1) downto 0);
+ y34: out std_logic_vector((N-1) downto 0);
+ y35: out std_logic_vector((N-1) downto 0);
+ y36: out std_logic_vector((N-1) downto 0);
+ y37: out std_logic_vector((N-1) downto 0);
+ y38: out std_logic_vector((N-1) downto 0);
+ y39: out std_logic_vector((N-1) downto 0);
+ y40: out std_logic_vector((N-1) downto 0);
+ y41: out std_logic_vector((N-1) downto 0);
+ y42: out std_logic_vector((N-1) downto 0);
+ y43: out std_logic_vector((N-1) downto 0);
+ y44: out std_logic_vector((N-1) downto 0);
+ y45: out std_logic_vector((N-1) downto 0);
+ y46: out std_logic_vector((N-1) downto 0);
+ y47: out std_logic_vector((N-1) downto 0);
+ y48: out std_logic_vector((N-1) downto 0);
+ y49: out std_logic_vector((N-1) downto 0);
+ y50: out std_logic_vector((N-1) downto 0);
+ y51: out std_logic_vector((N-1) downto 0);
+ y52: out std_logic_vector((N-1) downto 0);
+ y53: out std_logic_vector((N-1) downto 0);
+ y54: out std_logic_vector((N-1) downto 0);
+ y55: out std_logic_vector((N-1) downto 0);
+ y56: out std_logic_vector((N-1) downto 0);
+ y57: out std_logic_vector((N-1) downto 0);
+ y58: out std_logic_vector((N-1) downto 0);
+ y59: out std_logic_vector((N-1) downto 0);
+ y60: out std_logic_vector((N-1) downto 0);
+ y61: out std_logic_vector((N-1) downto 0);
+ y62: out std_logic_vector((N-1) downto 0);
+ y63: out std_logic_vector((N-1) downto 0);
+ y64: out std_logic_vector((N-1) downto 0);
+ y65: out std_logic_vector((N-1) downto 0);
+ y66: out std_logic_vector((N-1) downto 0);
+ y67: out std_logic_vector((N-1) downto 0);
+ y68: out std_logic_vector((N-1) downto 0);
+ y69: out std_logic_vector((N-1) downto 0);
+ y70: out std_logic_vector((N-1) downto 0);
+ y71: out std_logic_vector((N-1) downto 0);
+ y72: out std_logic_vector((N-1) downto 0);
+ y73: out std_logic_vector((N-1) downto 0);
+ y74: out std_logic_vector((N-1) downto 0);
+ y75: out std_logic_vector((N-1) downto 0);
+ y76: out std_logic_vector((N-1) downto 0);
+ y77: out std_logic_vector((N-1) downto 0);
+ y78: out std_logic_vector((N-1) downto 0);
+ y79: out std_logic_vector((N-1) downto 0);
+ y80: out std_logic_vector((N-1) downto 0);
+ y81: out std_logic_vector((N-1) downto 0);
+ y82: out std_logic_vector((N-1) downto 0);
+ y83: out std_logic_vector((N-1) downto 0);
+ y84: out std_logic_vector((N-1) downto 0);
+ y85: out std_logic_vector((N-1) downto 0);
+ y86: out std_logic_vector((N-1) downto 0);
+ y87: out std_logic_vector((N-1) downto 0);
+ y88: out std_logic_vector((N-1) downto 0);
+ y89: out std_logic_vector((N-1) downto 0);
+ y90: out std_logic_vector((N-1) downto 0);
+ y91: out std_logic_vector((N-1) downto 0);
+ y92: out std_logic_vector((N-1) downto 0);
+ y93: out std_logic_vector((N-1) downto 0);
+ y94: out std_logic_vector((N-1) downto 0);
+ y95: out std_logic_vector((N-1) downto 0);
+ y96: out std_logic_vector((N-1) downto 0);
+ y97: out std_logic_vector((N-1) downto 0);
+ y98: out std_logic_vector((N-1) downto 0);
+ y99: out std_logic_vector((N-1) downto 0);
+ y100: out std_logic_vector((N-1) downto 0);
+ y101: out std_logic_vector((N-1) downto 0);
+ y102: out std_logic_vector((N-1) downto 0);
+ y103: out std_logic_vector((N-1) downto 0);
+ y104: out std_logic_vector((N-1) downto 0);
+ y105: out std_logic_vector((N-1) downto 0);
+ y106: out std_logic_vector((N-1) downto 0);
+ y107: out std_logic_vector((N-1) downto 0);
+ y108: out std_logic_vector((N-1) downto 0);
+ y109: out std_logic_vector((N-1) downto 0);
+ y110: out std_logic_vector((N-1) downto 0);
+ y111: out std_logic_vector((N-1) downto 0);
+ y112: out std_logic_vector((N-1) downto 0);
+ y113: out std_logic_vector((N-1) downto 0);
+ y114: out std_logic_vector((N-1) downto 0);
+ y115: out std_logic_vector((N-1) downto 0);
+ y116: out std_logic_vector((N-1) downto 0);
+ y117: out std_logic_vector((N-1) downto 0);
+ y118: out std_logic_vector((N-1) downto 0);
+ y119: out std_logic_vector((N-1) downto 0);
+ y120: out std_logic_vector((N-1) downto 0);
+ y121: out std_logic_vector((N-1) downto 0);
+ y122: out std_logic_vector((N-1) downto 0);
+ y123: out std_logic_vector((N-1) downto 0);
+ y124: out std_logic_vector((N-1) downto 0);
+ y125: out std_logic_vector((N-1) downto 0);
+ y126: out std_logic_vector((N-1) downto 0);
+ y127: out std_logic_vector((N-1) downto 0);
+ y128: out std_logic_vector((N-1) downto 0);
+ y129: out std_logic_vector((N-1) downto 0);
+ y130: out std_logic_vector((N-1) downto 0);
+ y131: out std_logic_vector((N-1) downto 0);
+ y132: out std_logic_vector((N-1) downto 0);
+ y133: out std_logic_vector((N-1) downto 0);
+ y134: out std_logic_vector((N-1) downto 0);
+ y135: out std_logic_vector((N-1) downto 0);
+ y136: out std_logic_vector((N-1) downto 0);
+ y137: out std_logic_vector((N-1) downto 0);
+ y138: out std_logic_vector((N-1) downto 0);
+ y139: out std_logic_vector((N-1) downto 0);
+ y140: out std_logic_vector((N-1) downto 0);
+ y141: out std_logic_vector((N-1) downto 0);
+ y142: out std_logic_vector((N-1) downto 0);
+ y143: out std_logic_vector((N-1) downto 0);
+ y144: out std_logic_vector((N-1) downto 0);
+ y145: out std_logic_vector((N-1) downto 0);
+ y146: out std_logic_vector((N-1) downto 0);
+ y147: out std_logic_vector((N-1) downto 0);
+ y148: out std_logic_vector((N-1) downto 0);
+ y149: out std_logic_vector((N-1) downto 0);
+ y150: out std_logic_vector((N-1) downto 0);
+ y151: out std_logic_vector((N-1) downto 0);
+ y152: out std_logic_vector((N-1) downto 0);
+ y153: out std_logic_vector((N-1) downto 0);
+ y154: out std_logic_vector((N-1) downto 0);
+ y155: out std_logic_vector((N-1) downto 0);
+ y156: out std_logic_vector((N-1) downto 0);
+ y157: out std_logic_vector((N-1) downto 0);
+ y158: out std_logic_vector((N-1) downto 0);
+ y159: out std_logic_vector((N-1) downto 0);
+ y160: out std_logic_vector((N-1) downto 0);
+ y161: out std_logic_vector((N-1) downto 0);
+ y162: out std_logic_vector((N-1) downto 0);
+ y163: out std_logic_vector((N-1) downto 0);
+ y164: out std_logic_vector((N-1) downto 0);
+ y165: out std_logic_vector((N-1) downto 0);
+ y166: out std_logic_vector((N-1) downto 0);
+ y167: out std_logic_vector((N-1) downto 0);
+ y168: out std_logic_vector((N-1) downto 0);
+ y169: out std_logic_vector((N-1) downto 0);
+ y170: out std_logic_vector((N-1) downto 0);
+ y171: out std_logic_vector((N-1) downto 0);
+ y172: out std_logic_vector((N-1) downto 0);
+ y173: out std_logic_vector((N-1) downto 0);
+ y174: out std_logic_vector((N-1) downto 0);
+ y175: out std_logic_vector((N-1) downto 0);
+ y176: out std_logic_vector((N-1) downto 0);
+ y177: out std_logic_vector((N-1) downto 0);
+ y178: out std_logic_vector((N-1) downto 0);
+ y179: out std_logic_vector((N-1) downto 0);
+ y180: out std_logic_vector((N-1) downto 0);
+ y181: out std_logic_vector((N-1) downto 0);
+ y182: out std_logic_vector((N-1) downto 0);
+ y183: out std_logic_vector((N-1) downto 0);
+ y184: out std_logic_vector((N-1) downto 0);
+ y185: out std_logic_vector((N-1) downto 0);
+ y186: out std_logic_vector((N-1) downto 0);
+ y187: out std_logic_vector((N-1) downto 0);
+ y188: out std_logic_vector((N-1) downto 0);
+ y189: out std_logic_vector((N-1) downto 0);
+ y190: out std_logic_vector((N-1) downto 0);
+ y191: out std_logic_vector((N-1) downto 0);
+ y192: out std_logic_vector((N-1) downto 0);
+ y193: out std_logic_vector((N-1) downto 0);
+ y194: out std_logic_vector((N-1) downto 0);
+ y195: out std_logic_vector((N-1) downto 0);
+ y196: out std_logic_vector((N-1) downto 0);
+ y197: out std_logic_vector((N-1) downto 0);
+ y198: out std_logic_vector((N-1) downto 0);
+ y199: out std_logic_vector((N-1) downto 0);
+ y200: out std_logic_vector((N-1) downto 0);
+ y201: out std_logic_vector((N-1) downto 0);
+ y202: out std_logic_vector((N-1) downto 0);
+ y203: out std_logic_vector((N-1) downto 0);
+ y204: out std_logic_vector((N-1) downto 0);
+ y205: out std_logic_vector((N-1) downto 0);
+ y206: out std_logic_vector((N-1) downto 0);
+ y207: out std_logic_vector((N-1) downto 0);
+ y208: out std_logic_vector((N-1) downto 0);
+ y209: out std_logic_vector((N-1) downto 0);
+ y210: out std_logic_vector((N-1) downto 0);
+ y211: out std_logic_vector((N-1) downto 0);
+ y212: out std_logic_vector((N-1) downto 0);
+ y213: out std_logic_vector((N-1) downto 0);
+ y214: out std_logic_vector((N-1) downto 0);
+ y215: out std_logic_vector((N-1) downto 0);
+ y216: out std_logic_vector((N-1) downto 0);
+ y217: out std_logic_vector((N-1) downto 0);
+ y218: out std_logic_vector((N-1) downto 0);
+ y219: out std_logic_vector((N-1) downto 0);
+ y220: out std_logic_vector((N-1) downto 0);
+ y221: out std_logic_vector((N-1) downto 0);
+ y222: out std_logic_vector((N-1) downto 0);
+ y223: out std_logic_vector((N-1) downto 0);
+ y224: out std_logic_vector((N-1) downto 0);
+ y225: out std_logic_vector((N-1) downto 0);
+ y226: out std_logic_vector((N-1) downto 0);
+ y227: out std_logic_vector((N-1) downto 0);
+ y228: out std_logic_vector((N-1) downto 0);
+ y229: out std_logic_vector((N-1) downto 0);
+ y230: out std_logic_vector((N-1) downto 0);
+ y231: out std_logic_vector((N-1) downto 0);
+ y232: out std_logic_vector((N-1) downto 0);
+ y233: out std_logic_vector((N-1) downto 0);
+ y234: out std_logic_vector((N-1) downto 0);
+ y235: out std_logic_vector((N-1) downto 0);
+ y236: out std_logic_vector((N-1) downto 0);
+ y237: out std_logic_vector((N-1) downto 0);
+ y238: out std_logic_vector((N-1) downto 0);
+ y239: out std_logic_vector((N-1) downto 0);
+ y240: out std_logic_vector((N-1) downto 0);
+ y241: out std_logic_vector((N-1) downto 0);
+ y242: out std_logic_vector((N-1) downto 0);
+ y243: out std_logic_vector((N-1) downto 0);
+ y244: out std_logic_vector((N-1) downto 0);
+ y245: out std_logic_vector((N-1) downto 0);
+ y246: out std_logic_vector((N-1) downto 0);
+ y247: out std_logic_vector((N-1) downto 0);
+ y248: out std_logic_vector((N-1) downto 0);
+ y249: out std_logic_vector((N-1) downto 0);
+ y250: out std_logic_vector((N-1) downto 0);
+ y251: out std_logic_vector((N-1) downto 0);
+ y252: out std_logic_vector((N-1) downto 0);
+ y253: out std_logic_vector((N-1) downto 0);
+ y254: out std_logic_vector((N-1) downto 0);
+ y255: out std_logic_vector((N-1) downto 0);
+ address: in std_logic_vector(7 downto 0)
+);
+end;
+
+architecture struct_decoderNx256 of decoderNx256 is
+component decoder1x256 is
+port(
+ data: in std_logic;
+ y0: out std_logic;
+ y1: out std_logic;
+ y2: out std_logic;
+ y3: out std_logic;
+ y4: out std_logic;
+ y5: out std_logic;
+ y6: out std_logic;
+ y7: out std_logic;
+ y8: out std_logic;
+ y9: out std_logic;
+ y10: out std_logic;
+ y11: out std_logic;
+ y12: out std_logic;
+ y13: out std_logic;
+ y14: out std_logic;
+ y15: out std_logic;
+ y16: out std_logic;
+ y17: out std_logic;
+ y18: out std_logic;
+ y19: out std_logic;
+ y20: out std_logic;
+ y21: out std_logic;
+ y22: out std_logic;
+ y23: out std_logic;
+ y24: out std_logic;
+ y25: out std_logic;
+ y26: out std_logic;
+ y27: out std_logic;
+ y28: out std_logic;
+ y29: out std_logic;
+ y30: out std_logic;
+ y31: out std_logic;
+ y32: out std_logic;
+ y33: out std_logic;
+ y34: out std_logic;
+ y35: out std_logic;
+ y36: out std_logic;
+ y37: out std_logic;
+ y38: out std_logic;
+ y39: out std_logic;
+ y40: out std_logic;
+ y41: out std_logic;
+ y42: out std_logic;
+ y43: out std_logic;
+ y44: out std_logic;
+ y45: out std_logic;
+ y46: out std_logic;
+ y47: out std_logic;
+ y48: out std_logic;
+ y49: out std_logic;
+ y50: out std_logic;
+ y51: out std_logic;
+ y52: out std_logic;
+ y53: out std_logic;
+ y54: out std_logic;
+ y55: out std_logic;
+ y56: out std_logic;
+ y57: out std_logic;
+ y58: out std_logic;
+ y59: out std_logic;
+ y60: out std_logic;
+ y61: out std_logic;
+ y62: out std_logic;
+ y63: out std_logic;
+ y64: out std_logic;
+ y65: out std_logic;
+ y66: out std_logic;
+ y67: out std_logic;
+ y68: out std_logic;
+ y69: out std_logic;
+ y70: out std_logic;
+ y71: out std_logic;
+ y72: out std_logic;
+ y73: out std_logic;
+ y74: out std_logic;
+ y75: out std_logic;
+ y76: out std_logic;
+ y77: out std_logic;
+ y78: out std_logic;
+ y79: out std_logic;
+ y80: out std_logic;
+ y81: out std_logic;
+ y82: out std_logic;
+ y83: out std_logic;
+ y84: out std_logic;
+ y85: out std_logic;
+ y86: out std_logic;
+ y87: out std_logic;
+ y88: out std_logic;
+ y89: out std_logic;
+ y90: out std_logic;
+ y91: out std_logic;
+ y92: out std_logic;
+ y93: out std_logic;
+ y94: out std_logic;
+ y95: out std_logic;
+ y96: out std_logic;
+ y97: out std_logic;
+ y98: out std_logic;
+ y99: out std_logic;
+ y100: out std_logic;
+ y101: out std_logic;
+ y102: out std_logic;
+ y103: out std_logic;
+ y104: out std_logic;
+ y105: out std_logic;
+ y106: out std_logic;
+ y107: out std_logic;
+ y108: out std_logic;
+ y109: out std_logic;
+ y110: out std_logic;
+ y111: out std_logic;
+ y112: out std_logic;
+ y113: out std_logic;
+ y114: out std_logic;
+ y115: out std_logic;
+ y116: out std_logic;
+ y117: out std_logic;
+ y118: out std_logic;
+ y119: out std_logic;
+ y120: out std_logic;
+ y121: out std_logic;
+ y122: out std_logic;
+ y123: out std_logic;
+ y124: out std_logic;
+ y125: out std_logic;
+ y126: out std_logic;
+ y127: out std_logic;
+ y128: out std_logic;
+ y129: out std_logic;
+ y130: out std_logic;
+ y131: out std_logic;
+ y132: out std_logic;
+ y133: out std_logic;
+ y134: out std_logic;
+ y135: out std_logic;
+ y136: out std_logic;
+ y137: out std_logic;
+ y138: out std_logic;
+ y139: out std_logic;
+ y140: out std_logic;
+ y141: out std_logic;
+ y142: out std_logic;
+ y143: out std_logic;
+ y144: out std_logic;
+ y145: out std_logic;
+ y146: out std_logic;
+ y147: out std_logic;
+ y148: out std_logic;
+ y149: out std_logic;
+ y150: out std_logic;
+ y151: out std_logic;
+ y152: out std_logic;
+ y153: out std_logic;
+ y154: out std_logic;
+ y155: out std_logic;
+ y156: out std_logic;
+ y157: out std_logic;
+ y158: out std_logic;
+ y159: out std_logic;
+ y160: out std_logic;
+ y161: out std_logic;
+ y162: out std_logic;
+ y163: out std_logic;
+ y164: out std_logic;
+ y165: out std_logic;
+ y166: out std_logic;
+ y167: out std_logic;
+ y168: out std_logic;
+ y169: out std_logic;
+ y170: out std_logic;
+ y171: out std_logic;
+ y172: out std_logic;
+ y173: out std_logic;
+ y174: out std_logic;
+ y175: out std_logic;
+ y176: out std_logic;
+ y177: out std_logic;
+ y178: out std_logic;
+ y179: out std_logic;
+ y180: out std_logic;
+ y181: out std_logic;
+ y182: out std_logic;
+ y183: out std_logic;
+ y184: out std_logic;
+ y185: out std_logic;
+ y186: out std_logic;
+ y187: out std_logic;
+ y188: out std_logic;
+ y189: out std_logic;
+ y190: out std_logic;
+ y191: out std_logic;
+ y192: out std_logic;
+ y193: out std_logic;
+ y194: out std_logic;
+ y195: out std_logic;
+ y196: out std_logic;
+ y197: out std_logic;
+ y198: out std_logic;
+ y199: out std_logic;
+ y200: out std_logic;
+ y201: out std_logic;
+ y202: out std_logic;
+ y203: out std_logic;
+ y204: out std_logic;
+ y205: out std_logic;
+ y206: out std_logic;
+ y207: out std_logic;
+ y208: out std_logic;
+ y209: out std_logic;
+ y210: out std_logic;
+ y211: out std_logic;
+ y212: out std_logic;
+ y213: out std_logic;
+ y214: out std_logic;
+ y215: out std_logic;
+ y216: out std_logic;
+ y217: out std_logic;
+ y218: out std_logic;
+ y219: out std_logic;
+ y220: out std_logic;
+ y221: out std_logic;
+ y222: out std_logic;
+ y223: out std_logic;
+ y224: out std_logic;
+ y225: out std_logic;
+ y226: out std_logic;
+ y227: out std_logic;
+ y228: out std_logic;
+ y229: out std_logic;
+ y230: out std_logic;
+ y231: out std_logic;
+ y232: out std_logic;
+ y233: out std_logic;
+ y234: out std_logic;
+ y235: out std_logic;
+ y236: out std_logic;
+ y237: out std_logic;
+ y238: out std_logic;
+ y239: out std_logic;
+ y240: out std_logic;
+ y241: out std_logic;
+ y242: out std_logic;
+ y243: out std_logic;
+ y244: out std_logic;
+ y245: out std_logic;
+ y246: out std_logic;
+ y247: out std_logic;
+ y248: out std_logic;
+ y249: out std_logic;
+ y250: out std_logic;
+ y251: out std_logic;
+ y252: out std_logic;
+ y253: out std_logic;
+ y254: out std_logic;
+ y255: out std_logic;
+ address: in std_logic_vector(7 downto 0)
+);
+
+end component;
+
+begin
+ u1: for i in (N-1) downto 0 generate
+ u: decoder1x256 port map(
+ data => data(i),
+ y0 => y0(i),
+ y1 => y1(i),
+ y2 => y2(i),
+ y3 => y3(i),
+ y4 => y4(i),
+ y5 => y5(i),
+ y6 => y6(i),
+ y7 => y7(i),
+ y8 => y8(i),
+ y9 => y9(i),
+ y10 => y10(i),
+ y11 => y11(i),
+ y12 => y12(i),
+ y13 => y13(i),
+ y14 => y14(i),
+ y15 => y15(i),
+ y16 => y16(i),
+ y17 => y17(i),
+ y18 => y18(i),
+ y19 => y19(i),
+ y20 => y20(i),
+ y21 => y21(i),
+ y22 => y22(i),
+ y23 => y23(i),
+ y24 => y24(i),
+ y25 => y25(i),
+ y26 => y26(i),
+ y27 => y27(i),
+ y28 => y28(i),
+ y29 => y29(i),
+ y30 => y30(i),
+ y31 => y31(i),
+ y32 => y32(i),
+ y33 => y33(i),
+ y34 => y34(i),
+ y35 => y35(i),
+ y36 => y36(i),
+ y37 => y37(i),
+ y38 => y38(i),
+ y39 => y39(i),
+ y40 => y40(i),
+ y41 => y41(i),
+ y42 => y42(i),
+ y43 => y43(i),
+ y44 => y44(i),
+ y45 => y45(i),
+ y46 => y46(i),
+ y47 => y47(i),
+ y48 => y48(i),
+ y49 => y49(i),
+ y50 => y50(i),
+ y51 => y51(i),
+ y52 => y52(i),
+ y53 => y53(i),
+ y54 => y54(i),
+ y55 => y55(i),
+ y56 => y56(i),
+ y57 => y57(i),
+ y58 => y58(i),
+ y59 => y59(i),
+ y60 => y60(i),
+ y61 => y61(i),
+ y62 => y62(i),
+ y63 => y63(i),
+ y64 => y64(i),
+ y65 => y65(i),
+ y66 => y66(i),
+ y67 => y67(i),
+ y68 => y68(i),
+ y69 => y69(i),
+ y70 => y70(i),
+ y71 => y71(i),
+ y72 => y72(i),
+ y73 => y73(i),
+ y74 => y74(i),
+ y75 => y75(i),
+ y76 => y76(i),
+ y77 => y77(i),
+ y78 => y78(i),
+ y79 => y79(i),
+ y80 => y80(i),
+ y81 => y81(i),
+ y82 => y82(i),
+ y83 => y83(i),
+ y84 => y84(i),
+ y85 => y85(i),
+ y86 => y86(i),
+ y87 => y87(i),
+ y88 => y88(i),
+ y89 => y89(i),
+ y90 => y90(i),
+ y91 => y91(i),
+ y92 => y92(i),
+ y93 => y93(i),
+ y94 => y94(i),
+ y95 => y95(i),
+ y96 => y96(i),
+ y97 => y97(i),
+ y98 => y98(i),
+ y99 => y99(i),
+ y100 => y100(i),
+ y101 => y101(i),
+ y102 => y102(i),
+ y103 => y103(i),
+ y104 => y104(i),
+ y105 => y105(i),
+ y106 => y106(i),
+ y107 => y107(i),
+ y108 => y108(i),
+ y109 => y109(i),
+ y110 => y110(i),
+ y111 => y111(i),
+ y112 => y112(i),
+ y113 => y113(i),
+ y114 => y114(i),
+ y115 => y115(i),
+ y116 => y116(i),
+ y117 => y117(i),
+ y118 => y118(i),
+ y119 => y119(i),
+ y120 => y120(i),
+ y121 => y121(i),
+ y122 => y122(i),
+ y123 => y123(i),
+ y124 => y124(i),
+ y125 => y125(i),
+ y126 => y126(i),
+ y127 => y127(i),
+ y128 => y128(i),
+ y129 => y129(i),
+ y130 => y130(i),
+ y131 => y131(i),
+ y132 => y132(i),
+ y133 => y133(i),
+ y134 => y134(i),
+ y135 => y135(i),
+ y136 => y136(i),
+ y137 => y137(i),
+ y138 => y138(i),
+ y139 => y139(i),
+ y140 => y140(i),
+ y141 => y141(i),
+ y142 => y142(i),
+ y143 => y143(i),
+ y144 => y144(i),
+ y145 => y145(i),
+ y146 => y146(i),
+ y147 => y147(i),
+ y148 => y148(i),
+ y149 => y149(i),
+ y150 => y150(i),
+ y151 => y151(i),
+ y152 => y152(i),
+ y153 => y153(i),
+ y154 => y154(i),
+ y155 => y155(i),
+ y156 => y156(i),
+ y157 => y157(i),
+ y158 => y158(i),
+ y159 => y159(i),
+ y160 => y160(i),
+ y161 => y161(i),
+ y162 => y162(i),
+ y163 => y163(i),
+ y164 => y164(i),
+ y165 => y165(i),
+ y166 => y166(i),
+ y167 => y167(i),
+ y168 => y168(i),
+ y169 => y169(i),
+ y170 => y170(i),
+ y171 => y171(i),
+ y172 => y172(i),
+ y173 => y173(i),
+ y174 => y174(i),
+ y175 => y175(i),
+ y176 => y176(i),
+ y177 => y177(i),
+ y178 => y178(i),
+ y179 => y179(i),
+ y180 => y180(i),
+ y181 => y181(i),
+ y182 => y182(i),
+ y183 => y183(i),
+ y184 => y184(i),
+ y185 => y185(i),
+ y186 => y186(i),
+ y187 => y187(i),
+ y188 => y188(i),
+ y189 => y189(i),
+ y190 => y190(i),
+ y191 => y191(i),
+ y192 => y192(i),
+ y193 => y193(i),
+ y194 => y194(i),
+ y195 => y195(i),
+ y196 => y196(i),
+ y197 => y197(i),
+ y198 => y198(i),
+ y199 => y199(i),
+ y200 => y200(i),
+ y201 => y201(i),
+ y202 => y202(i),
+ y203 => y203(i),
+ y204 => y204(i),
+ y205 => y205(i),
+ y206 => y206(i),
+ y207 => y207(i),
+ y208 => y208(i),
+ y209 => y209(i),
+ y210 => y210(i),
+ y211 => y211(i),
+ y212 => y212(i),
+ y213 => y213(i),
+ y214 => y214(i),
+ y215 => y215(i),
+ y216 => y216(i),
+ y217 => y217(i),
+ y218 => y218(i),
+ y219 => y219(i),
+ y220 => y220(i),
+ y221 => y221(i),
+ y222 => y222(i),
+ y223 => y223(i),
+ y224 => y224(i),
+ y225 => y225(i),
+ y226 => y226(i),
+ y227 => y227(i),
+ y228 => y228(i),
+ y229 => y229(i),
+ y230 => y230(i),
+ y231 => y231(i),
+ y232 => y232(i),
+ y233 => y233(i),
+ y234 => y234(i),
+ y235 => y235(i),
+ y236 => y236(i),
+ y237 => y237(i),
+ y238 => y238(i),
+ y239 => y239(i),
+ y240 => y240(i),
+ y241 => y241(i),
+ y242 => y242(i),
+ y243 => y243(i),
+ y244 => y244(i),
+ y245 => y245(i),
+ y246 => y246(i),
+ y247 => y247(i),
+ y248 => y248(i),
+ y249 => y249(i),
+ y250 => y250(i),
+ y251 => y251(i),
+ y252 => y252(i),
+ y253 => y253(i),
+ y254 => y254(i),
+ y255 => y255(i),
+ address => address
+ );
+ end generate u1;
+end;
+
+library ieee;
+use ieee.std_logic_1164.all;
+
+entity counterN is
+generic(
+ N: positive
+);
+port(
+ clock: in std_logic;
+ carry_in: in std_logic;
+ clock_enable: in std_logic;
+ resetn: in std_logic;
+ output: out std_logic_vector((N-1) downto 0);
+ carry_out: out std_logic
+);
+end;
+
+architecture struct_counterN of counterN is
+component incrementerN is
+generic(
+ N: positive
+);
+port(
+ input: in std_logic_vector((N-1) downto 0);
+ carry_in: in std_logic;
+ sum: out std_logic_vector((N-1) downto 0);
+ carry_out: out std_logic
+);
+end component;
+
+component andNbit is
+generic(
+ N: positive
+);
+port(
+ input: in std_logic_vector((N-1) downto 0);
+ y: out std_logic
+);
+end component;
+
+component synchronous_latchN is
+generic(
+ N: positive
+);
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic_vector((N-1) downto 0);
+ q: out std_logic_vector((N-1) downto 0)
+);
+end component;
+
+signal counter_out: std_logic_vector(N downto 0);
+
+signal incrementer_out: std_logic_vector(N downto 0);
+
+signal all_ones: std_logic;
+
+begin
+ u1: incrementerN
+ generic map(
+ N => N
+ )
+ port map(
+ input => counter_out((N-1) downto 0),
+ carry_in => carry_in,
+ sum => incrementer_out((N-1) downto 0),
+ carry_out => incrementer_out(N)
+ );
+
+ u2: synchronous_latchN
+ generic map(
+ N => (N + 1)
+ )
+ port map(
+ rstn => resetn,
+ clock => clock,
+ clock_enable => clock_enable,
+ d => incrementer_out,
+ q => counter_out
+ );
+
+ u3: andNbit
+ generic map(
+ N => N
+ )
+ port map(
+ input => counter_out((N-1) downto 0),
+ y => all_ones
+ );
+
+ carry_out <= all_ones and carry_in;
+ output <= counter_out((N-1) downto 0);
+end;
diff --git a/testsuite/gna/issue30/definitions.vhdl b/testsuite/gna/issue30/definitions.vhdl
new file mode 100644
index 000000000..da1c4f514
--- /dev/null
+++ b/testsuite/gna/issue30/definitions.vhdl
@@ -0,0 +1,1230 @@
+library ieee;
+use ieee.std_logic_1164.all;
+--use ieee.std_logic_arith.all;
+
+package definitions is
+
+-- flag bits
+constant carry_bit: integer := 0;
+constant add_sub_bit: integer := 1;
+constant parity_overflow_bit: integer := 2;
+constant half_carry_bit: integer := 4;
+constant zero_bit: integer := 6;
+constant sign_bit: integer := 7;
+
+-- 8 bit register numbers
+constant B: std_logic_vector(3 downto 0) := "0000";
+constant B3: std_logic_vector(2 downto 0) := "000"; -- keep GHDL happy,
+ -- won't accept
+ -- bitslice of
+ -- constant in case
+ -- statements
+constant C: std_logic_vector(3 downto 0) := "0001";
+constant C3: std_logic_vector(2 downto 0) := "001";
+constant D: std_logic_vector(3 downto 0) := "0010";
+constant D3: std_logic_vector(2 downto 0) := "010";
+constant E: std_logic_vector(3 downto 0) := "0011";
+constant E3: std_logic_vector(2 downto 0) := "011";
+constant H: std_logic_vector(3 downto 0) := "0100";
+constant H3: std_logic_vector(2 downto 0) := "100";
+constant L: std_logic_vector(3 downto 0) := "0101";
+constant L3: std_logic_vector(2 downto 0) := "101";
+constant memory_register: std_logic_vector(3 downto 0) := "0110";
+constant memory_register3: std_logic_vector(2 downto 0) := "110";
+constant A: std_logic_vector(3 downto 0) := "0111";
+constant A3: std_logic_vector(2 downto 0) := "111";
+
+constant one_register: std_logic_vector(3 downto 0) := "1000"; -- fixed constant of
+ -- one at register 8
+ -- in secondary ALU
+ -- register file
+
+
+constant zero_register: std_logic_vector(3 downto 0) := "1001";
+constant indexhigh: std_logic_vector(3 downto 0) := "1010";
+constant indexlow: std_logic_vector(3 downto 0) := "1011";
+constant bitreg: std_logic_vector(3 downto 0) := "1100";
+constant not_bitreg: std_logic_vector(3 downto 0) := "1101";
+constant SPhigh: std_logic_vector(3 downto 0) := "1110";
+constant SPlow: std_logic_vector(3 downto 0) := "1111";
+
+constant call_return_interrupt: std_logic_vector(3 downto 0) := "1000"; -- for sending call
+ -- return address
+ -- thru ALU, primary
+ -- register only
+constant flags_register: std_logic_vector(3 downto 0) := "1000"; -- for sending flags
+ -- thru ALU -
+ -- multiplexed with
+ -- call return,
+ -- primary register
+ -- only
+constant interrupt_register: std_logic_vector(3 downto 0) := "1000"; -- for sending
+ -- interrupt
+ -- register thru
+ -- ALU - multiplexed
+ -- with call return,
+ -- primary register
+ -- only
+
+
+
+-- ALU operation codes
+constant add_operation: std_logic_vector(4 downto 0) := "00000"; -- add without carry
+constant adc_operation: std_logic_vector(4 downto 0) := "00001"; -- add with carry
+constant sub_operation: std_logic_vector(4 downto 0) := "00010"; -- subtract without
+ -- carry
+constant sbc_operation: std_logic_vector(4 downto 0) := "00011"; -- subtract with
+ -- carry
+constant and_operation: std_logic_vector(4 downto 0) := "00100"; -- and
+constant xor_operation: std_logic_vector(4 downto 0) := "00101"; -- xor
+constant or_operation: std_logic_vector(4 downto 0) := "00110"; -- or
+constant cmp_operation: std_logic_vector(4 downto 0) := "00111"; -- compare (subtract
+ -- and discard
+ -- results, set
+ -- flags
+constant rlc_operation: std_logic_vector(4 downto 0) := "01000"; -- RLC
+constant rrc_operation: std_logic_vector(4 downto 0) := "01001"; -- RRC
+constant rl_operation: std_logic_vector(4 downto 0) := "01010"; -- RLA
+constant rr_operation: std_logic_vector(4 downto 0) := "01011"; -- RRA
+constant daa_operation: std_logic_vector(4 downto 0) := "01100"; -- DAA
+constant cpl_operation: std_logic_vector(4 downto 0) := "01101"; -- CPL
+constant scf_operation: std_logic_vector(4 downto 0) := "01110"; -- SCF
+constant ccf_operation: std_logic_vector(4 downto 0) := "01111"; -- CCF
+constant sla_operation: std_logic_vector(4 downto 0) := "10000"; -- SLA
+constant sra_operation: std_logic_vector(4 downto 0) := "10001"; -- SRA
+constant sll_operation: std_logic_vector(4 downto 0) := "10010"; -- SLL
+constant srl_operation: std_logic_vector(4 downto 0) := "10011"; -- SRL
+constant bit_operation: std_logic_vector(4 downto 0) := "10100"; -- BIT
+constant res_operation: std_logic_vector(4 downto 0) := "10101"; -- RES
+constant set_operation: std_logic_vector(4 downto 0) := "10110"; -- SET
+constant in16_operation: std_logic_vector(4 downto 0) := "10111"; -- in r, (c)
+constant rld_operation: std_logic_vector(4 downto 0) := "11000"; -- RLD
+constant rrd_operation: std_logic_vector(4 downto 0) := "11001"; -- RRD
+constant blockterm16_operation: std_logic_vector(4 downto 0) := "11010"; -- block instruction
+ -- termination:
+ -- P/V = 0 when
+ -- BC = 0
+
+-- ALU operation flags masks - the ones that change are listed, others are masked out
+constant alu_mask: std_logic_vector(7 downto 0) := ( carry_bit => '1',
+ add_sub_bit => '1',
+ parity_overflow_bit => '1',
+ half_carry_bit => '1',
+ zero_bit => '1',
+ sign_bit => '1',
+ others => '0'
+ );
+
+-- Block operation load masks
+constant block_load_mask: std_logic_vector(7 downto 0) := ( add_sub_bit => '1',
+ parity_overflow_bit => '1',
+ half_carry_bit => '1',
+ others => '0'
+ );
+
+constant block_compare_mask1: std_logic_vector(7 downto 0) := ( add_sub_bit => '1',
+ half_carry_bit => '1',
+ zero_bit => '1',
+ sign_bit => '1',
+ others => '0'
+ );
+
+constant block_compare_mask2: std_logic_vector(7 downto 0) := ( parity_overflow_bit => '1',
+ others => '0'
+ );
+
+constant block_io_mask: std_logic_vector(7 downto 0) := ( add_sub_bit => '1',
+ zero_bit => '1',
+ others => '0'
+ );
+
+-- bit masks for bit oriented instructions
+constant bit7mask: std_logic_vector(7 downto 0) := (7 => '1', others => '0');
+constant bit6mask: std_logic_vector(7 downto 0) := (6 => '1', others => '0');
+constant bit5mask: std_logic_vector(7 downto 0) := (5 => '1', others => '0');
+constant bit4mask: std_logic_vector(7 downto 0) := (4 => '1', others => '0');
+constant bit3mask: std_logic_vector(7 downto 0) := (3 => '1', others => '0');
+constant bit2mask: std_logic_vector(7 downto 0) := (2 => '1', others => '0');
+constant bit1mask: std_logic_vector(7 downto 0) := (1 => '1', others => '0');
+constant bit0mask: std_logic_vector(7 downto 0) := (0 => '1', others => '0');
+
+-- address bus selector
+constant address_bus_source_BC: std_logic_vector(3 downto 0) := x"0";
+constant address_bus_source_DE: std_logic_vector(3 downto 0) := x"1";
+constant address_bus_source_HL: std_logic_vector(3 downto 0) := x"2";
+constant address_bus_source_SP: std_logic_vector(3 downto 0) := x"3";
+constant address_bus_source_PC: std_logic_vector(3 downto 0) := x"4";
+constant address_bus_source_operand: std_logic_vector(3 downto 0) := x"5";
+constant address_bus_source_operand1: std_logic_vector(3 downto 0) := x"6";
+constant address_bus_source_port8: std_logic_vector(3 downto 0) := x"7";
+constant address_bus_source_index: std_logic_vector(3 downto 0) := x"8";
+
+-- program counter selector
+constant pc_source_next: std_logic_vector(3 downto 0) := x"0"; -- PC + 1
+constant pc_source_operand: std_logic_vector(3 downto 0) := x"1"; -- operand
+constant pc_source_HL: std_logic_vector(3 downto 0) := x"2"; -- PCHL
+constant pc_source_return: std_logic_vector(3 downto 0) := x"3"; -- return
+ -- address
+constant pc_source_next_next: std_logic_vector(3 downto 0) := x"4"; -- PC + 2
+constant pc_source_rst: std_logic_vector(3 downto 0) := x"5"; -- RST nn
+constant pc_source_index_register: std_logic_vector(3 downto 0) := x"6"; -- PCIX and PCIY
+constant pc_source_jr: std_logic_vector(3 downto 0) := x"7"; -- JR offset
+constant pc_source_block_repeat: std_logic_vector(3 downto 0) := x"8"; -- for
+ -- interrupted
+ -- block repeats
+constant pc_source_reset: std_logic_vector(3 downto 0) := x"f"; -- sets PC
+ -- vector
+ -- after reset
+
+-- initial program counter. Zilog spec says it is always zero, but often autojump hardware is
+-- implemented to change this. I have the luxury of specifying the initial program counter as I see
+-- fit.
+constant PC_start_address: std_logic_vector(15 downto 0) := x"0000";
+
+-- SP source mux input definitins
+constant SPsource_databus: std_logic_vector(1 downto 0) := "00"; -- select
+ -- databus
+constant SPsource_increment: std_logic_vector(1 downto 0) := "01"; -- select SP + 1
+constant SPsource_decrement: std_logic_vector(1 downto 0) := "10"; -- select SP - 1
+
+-- data output mux selectors
+constant data_out_selector_databus: std_logic_vector(2 downto 0) := "000"; -- select
+ -- databus
+constant data_out_selector_H: std_logic_vector(2 downto 0) := "001"; -- select
+ -- temporary
+ -- register
+ -- for
+ -- register
+ -- H
+constant data_out_selector_L: std_logic_vector(2 downto 0) := "010"; -- select
+ -- temporary
+ -- register
+ -- for
+ -- register
+ -- L
+constant data_out_selector_indexhigh: std_logic_vector(2 downto 0) := "011"; -- select
+ -- temporary
+ -- register
+ -- for
+ -- register
+ -- IXhigh
+constant data_out_selector_indexlow: std_logic_vector(2 downto 0) := "100"; -- select
+ -- temporary
+ -- register
+ -- for
+ -- register
+ -- IXlow
+constant data_out_selector_rrd_rld_output: std_logic_vector(2 downto 0) := "101"; -- select
+ -- secondary
+ -- ALU
+ -- output
+ -- (RLD and
+ -- RRD)
+
+-- select among return address, flags, or interrupt vector register to go through the ALU.
+constant selectRetAddr: std_logic_vector(1 downto 0) := "00"; -- select return
+ -- address
+constant selectFlags: std_logic_vector(1 downto 0) := "01"; -- select flags
+constant selectInterruptVector: std_logic_vector(1 downto 0) := "10"; -- select
+ -- interrupt
+ -- vector
+ -- register
+
+-- operand register selection
+constant operandSelectLow: std_logic := '0'; -- selects operand register low byte
+constant operandSelectHigh: std_logic := '1'; -- selects operand register bigh byte
+
+-- assertion and deassertion of control lines
+constant assert_m1: std_logic := '1';
+constant deassert_m1: std_logic := '0';
+constant assert_write: std_logic := '1';
+constant deassert_write: std_logic := '0';
+constant assert_read: std_logic := '1';
+constant deassert_read: std_logic := '0';
+constant assert_iorq: std_logic := '1';
+constant deassert_iorq: std_logic := '0';
+constant assert_mreq: std_logic := '1';
+constant deassert_mreq: std_logic := '0';
+
+-- Index register selection
+constant SelectIndexIX: std_logic := '0';
+constant SelectIndexIY: std_logic := '1';
+
+-- Return address byte selection
+constant RetAddrLow: std_logic := '0';
+constant RetAddrHigh: std_logic := '1';
+
+-- Enable and disable writing to instruction register
+constant disableOpcodeWrite: std_logic := '0';
+constant enableOpcodeWrite: std_logic := '1';
+
+-- Enable and disable XCHG hardware
+constant disableXCHG: std_logic := '0';
+constant enableXCHG: std_logic := '1';
+
+-- For master and slave control of the address, data and control busses
+constant masterControl: std_logic := '1';
+constant slaveControl: std_logic := '0';
+
+constant deassert_halted: std_logic := '0';
+constant assert_halted: std_logic := '1';
+
+-- For control of source of ALU operation
+constant selectVHDL_ALU_operation: std_logic := '0';
+constant selectOpcode_ALU_operation: std_logic := '1';
+
+-- for source of primary and secondary ALU operand registers
+constant selectOpcodeRegister: std_logic := '0';
+constant selectVHDLRegister: std_logic := '1';
+
+-- for register saving
+constant save: std_logic := '1';
+constant DontSave: std_logic := '0';
+
+-- for choosing source of flags data
+constant ALUflags: std_logic := '0';
+constant POPflags: std_logic := '1';
+
+-- for general clock enable and disable
+constant clockEnable: std_logic := '1';
+constant clockDisable: std_logic := '0';
+
+-- for invalid instruction detector
+constant safe: std_logic := '0';
+constant fail: std_logic := '1';
+
+-- for interrupt modes
+constant IM_0: std_logic_vector(1 downto 0) := "00";
+constant IM_1: std_logic_vector(1 downto 0) := "01";
+constant IM_2: std_logic_vector(1 downto 0) := "10";
+
+constant width_is_8: positive := 8;
+
+-- State numbers. Done this way so state numbers can be stored and used as a return address
+
+-- common to all opcodes
+
+
+constant initialise: std_logic_vector(11 downto 0) := x"000"; -- initialise
+ -- processor,
+ -- enters on
+ -- rising edge of
+ -- clk_out
+constant initialise1: std_logic_vector(11 downto 0) := x"001"; -- second
+ -- initialisation
+ -- state
+constant initialise2: std_logic_vector(11 downto 0) := x"002"; -- third
+ -- initialisation
+ -- state
+constant initialise3: std_logic_vector(11 downto 0) := x"003"; -- fourth
+ -- initialisation
+ -- state
+constant opcode: std_logic_vector(11 downto 0) := x"004"; -- assert pc address
+ -- drivers and
+ -- m1n = '0'
+ -- for 1st opcode
+ -- byte, rising edge
+ -- of clock, done
+ -- in last state of
+ -- previous
+ -- instruction
+constant opcode_mreq: std_logic_vector(11 downto 0) := x"005"; -- assert
+ -- mreqn = '0' and
+ -- rdn = '0' on
+ -- falling edge of
+ -- clock
+constant opcode_latch: std_logic_vector(11 downto 0) := x"006"; -- latch opcode byte
+ -- on next rising
+ -- edge of clock
+ -- with waitn = '1',
+ -- rising edge of
+ -- clock
+constant decode_opcode: std_logic_vector(11 downto 0) := x"007"; -- decode first
+ -- opcode
+constant invalid: std_logic_vector(11 downto 0) := x"008"; -- state name for
+ -- invalid return
+ -- state and illegal
+ -- instruction
+
+-- states for BUSRQ handling
+constant busrq: std_logic_vector(11 downto 0) := x"009";
+
+-- New PC state for use with jr, jp, ret, call, rst
+constant NewPC: std_logic_vector(11 downto 0) := x"00f";
+
+-- opcodes in order presented by z80.info/decoding. Number of states (initially) conforms
+-- to number of clock cycles as advertised in the Z80 data sheet. States are added because
+-- I process information on both positive and negative transitions of the clock. These
+-- will be removed if they are not needed. Memory and port I/O operations are always
+-- initiated at the positive going edge of the clock. Instructions that do not appear here
+-- are processed entirely during the decoding phase of operation.
+
+-- NOP states, 4 clock cycles, all required for timing loops, 1 m1 cycle
+constant nop4: std_logic_vector(11 downto 0) := x"010"; -- instruction
+ -- origin + 3 rising
+ -- edges
+constant nop5: std_logic_vector(11 downto 0) := x"011"; -- instruction
+ -- origin + 4 rising
+ -- edges
+
+-- DJNZ, 8/13 cycles (met, not met), 1 m1 cycle
+constant djnz4: std_logic_vector(11 downto 0) := x"030";
+
+-- JR, 12 cycles, 1 m1 cycle
+constant jr4: std_logic_vector(11 downto 0) := x"040";
+constant jr5: std_logic_vector(11 downto 0) := x"041";
+constant jr6: std_logic_vector(11 downto 0) := x"042";
+constant jr7: std_logic_vector(11 downto 0) := x"043";
+
+-- JR conditional, 12/7 cycles (met/not met), 1 m1 cycle
+-- need one state to test condition, transfer control to jr code
+-- Number of cycles = one or two more than jr
+constant jrcc4: std_logic_vector(11 downto 0) := x"050";
+constant jrcc5: std_logic_vector(11 downto 0) := x"051";
+
+-- LD rp, immediate, 10 cycles, 1 m1 cycle
+constant ldrpi4: std_logic_vector(11 downto 0) := x"060";
+constant ldrpi5: std_logic_vector(11 downto 0) := x"061";
+
+-- ADD HL, rp, 11 clock cycles, 1 m1 cycle
+constant addhlrp4: std_logic_vector(11 downto 0) := x"070";
+constant addhlrp5: std_logic_vector(11 downto 0) := x"071";
+
+-- LDAX rp, 7 cycles, 1 m1 cycle
+constant ldax4: std_logic_vector(11 downto 0) := x"080";
+constant ldax5: std_logic_vector(11 downto 0) := x"081";
+
+-- STAX rp, 7 cycles, 1 m1 cycle
+constant stax4: std_logic_vector(11 downto 0) := x"090";
+constant stax5: std_logic_vector(11 downto 0) := x"091";
+
+-- LDA nn, 13 cycles, 1 m1 cycle
+constant lda4: std_logic_vector(11 downto 0) := x"0a0";
+constant lda5: std_logic_vector(11 downto 0) := x"0a1";
+constant lda6: std_logic_vector(11 downto 0) := x"0a2";
+constant lda7: std_logic_vector(11 downto 0) := x"0a3";
+
+-- STA nn, 13 cycles, 1 m1 cycle
+constant sta4: std_logic_vector(11 downto 0) := x"0b0";
+constant sta5: std_logic_vector(11 downto 0) := x"0b1";
+
+
+-- LHLD (nn), 16 cycles, 1 m1 cycle
+constant ldhl4: std_logic_vector(11 downto 0) := x"0c0";
+constant ldhl5: std_logic_vector(11 downto 0) := x"0c1";
+constant ldhl6: std_logic_vector(11 downto 0) := x"0c2";
+constant ldhl7: std_logic_vector(11 downto 0) := x"0c3";
+constant ldhl8: std_logic_vector(11 downto 0) := x"0c4";
+
+-- SHLD (nn), 16 cycles, 1 m1 cycle
+constant sthl4: std_logic_vector(11 downto 0) := x"0d0";
+constant sthl5: std_logic_vector(11 downto 0) := x"0d1";
+constant sthl6: std_logic_vector(11 downto 0) := x"0d2";
+constant sthl7: std_logic_vector(11 downto 0) := x"0d3";
+
+-- 16 bit increment/decrement, 6 cycles, 1 m1 cycle
+constant incdec16_4: std_logic_vector(11 downto 0) := x"0e0";
+constant incdec16_5: std_logic_vector(11 downto 0) := x"0e1";
+constant incdec16_6: std_logic_vector(11 downto 0) := x"0e2";
+constant incdec16_7: std_logic_vector(11 downto 0) := x"0e3";
+
+-- 8 bit register/memory increment/decrement, 11 cycles, 1 m1 cycle
+constant incdec8_4: std_logic_vector(11 downto 0) := x"0f0";
+
+-- 8 bit load immediate, 7 cycles, 1 m1 cycle
+constant ldi4: std_logic_vector(11 downto 0) := x"100";
+
+-- DAA, 4 cycles, 1 m1 cycle
+constant daa4: std_logic_vector(11 downto 0) := x"110";
+constant daa5: std_logic_vector(11 downto 0) := x"111";
+constant daa6: std_logic_vector(11 downto 0) := x"112";
+constant daa7: std_logic_vector(11 downto 0) := x"113";
+
+-- SCF/CCF, 4 cycles, 1 m1 cycle
+-- main processing done at instruction decoder stage
+constant scf_ccf_save: std_logic_vector(11 downto 0) := x"120";
+
+-- inter-register 8 bit loading, 4 cycles, 1 m1 cycle
+constant irld4: std_logic_vector(11 downto 0) := x"130";
+constant irld5: std_logic_vector(11 downto 0) := x"131";
+
+-- HALT, 4 cycles, 1 m1 cycle, may trim this to three
+-- cycles initially plus one cycle per instruction thereafter
+constant halt4: std_logic_vector(11 downto 0) := x"140";
+constant halt5: std_logic_vector(11 downto 0) := x"141";
+constant halt6: std_logic_vector(11 downto 0) := x"142";
+constant halt7: std_logic_vector(11 downto 0) := x"143";
+
+-- alu operations on registers, 4 cycles, 1 m1 cycle
+constant alu4: std_logic_vector(11 downto 0) := x"150";
+
+-- POP, 10 cycles, 1 m1 cycle
+constant pop4: std_logic_vector(11 downto 0) := x"160";
+constant pop5: std_logic_vector(11 downto 0) := x"161";
+constant pop6: std_logic_vector(11 downto 0) := x"162";
+constant pop7: std_logic_vector(11 downto 0) := x"163";
+constant pop8: std_logic_vector(11 downto 0) := x"164";
+
+-- RET unconditional, 10 cycles, 1 m1 cycle
+constant ret4: std_logic_vector(11 downto 0) := x"170";
+constant ret5: std_logic_vector(11 downto 0) := x"171";
+constant ret6: std_logic_vector(11 downto 0) := x"172";
+constant ret7: std_logic_vector(11 downto 0) := x"173";
+constant ret8: std_logic_vector(11 downto 0) := x"174";
+constant ret9: std_logic_vector(11 downto 0) := x"175";
+
+-- JP HL, 4 cycles,1 m1 cycle
+constant jphl4: std_logic_vector(11 downto 0) := x"180";
+
+-- LD SP, HL, 6 cycles, 1 m1 cycle
+constant sphl4: std_logic_vector(11 downto 0) := x"190";
+
+-- JP conditional, 10 cycles met or not, 1 m1 cycle
+-- use one state to determine if ret is to be executed, then transfer to JP unconditional if so.
+constant jpcc4: std_logic_vector(11 downto 0) := x"1a0";
+constant jpcc5: std_logic_vector(11 downto 0) := x"1a1";
+
+-- JP unconditional, 10 cycles, 1 m1 cycle
+constant jp4: std_logic_vector(11 downto 0) := x"1b0";
+constant jp5: std_logic_vector(11 downto 0) := x"1b1";
+constant jp6: std_logic_vector(11 downto 0) := x"1b2";
+
+-- CB prefix, must obtain next instruction byte
+constant cb4: std_logic_vector(11 downto 0) := x"1c0";
+constant cb5: std_logic_vector(11 downto 0) := x"1c1";
+
+-- save results from CB prefixed opcodes other than BIT, SET, and RES
+constant bitsave: std_logic_vector(11 downto 0) := x"1e0";
+
+-- common state for save and load 16 bit registers with ED prefix
+constant rp16io: std_logic_vector(11 downto 0) := x"1f0";
+
+-- BIT
+constant bit6: std_logic_vector(11 downto 0) := x"200";
+constant bit7: std_logic_vector(11 downto 0) := x"201";
+
+-- RES
+constant res6: std_logic_vector(11 downto 0) := x"210";
+
+-- SET
+constant set6: std_logic_vector(11 downto 0) := x"220";
+
+-- end of CB prefixed opcodes
+
+-- 8 bit output of accumulator to 8 bit port address, 11 cycles, 1 m1 cycle
+constant out4: std_logic_vector(11 downto 0) := x"230";
+constant out5: std_logic_vector(11 downto 0) := x"231";
+constant out6: std_logic_vector(11 downto 0) := x"232";
+constant out7: std_logic_vector(11 downto 0) := x"233";
+constant out8: std_logic_vector(11 downto 0) := x"234";
+
+-- 8 bit input of accumulator from 8 bit port address, 11 cycles, 1 m1 cycle
+constant in4: std_logic_vector(11 downto 0) := x"240";
+constant in5: std_logic_vector(11 downto 0) := x"241";
+constant in6: std_logic_vector(11 downto 0) := x"242";
+constant in7: std_logic_vector(11 downto 0) := x"243";
+
+-- EX (SP), HL, 19 cycles, 1 m1 cycle
+constant xthl4: std_logic_vector(11 downto 0) := x"250";
+constant xthl5: std_logic_vector(11 downto 0) := x"251";
+constant xthl6: std_logic_vector(11 downto 0) := x"252";
+constant xthl7: std_logic_vector(11 downto 0) := x"253";
+constant xthl8: std_logic_vector(11 downto 0) := x"254";
+constant xthl9: std_logic_vector(11 downto 0) := x"255";
+constant xthl10: std_logic_vector(11 downto 0) := x"256";
+
+-- DI, 4 cycles, 1 m1 cycle
+constant di4: std_logic_vector(11 downto 0) := x"270";
+constant di5: std_logic_vector(11 downto 0) := x"271";
+constant di6: std_logic_vector(11 downto 0) := x"272";
+constant di7: std_logic_vector(11 downto 0) := x"273";
+
+-- EI, 4 cycles, 1 m1 cycle
+constant ei4: std_logic_vector(11 downto 0) := x"280";
+constant ei5: std_logic_vector(11 downto 0) := x"281";
+constant ei6: std_logic_vector(11 downto 0) := x"282";
+constant ei7: std_logic_vector(11 downto 0) := x"283";
+
+-- PUSH, 10 cycles, 1 m1 cycle
+constant push4: std_logic_vector(11 downto 0) := x"2a0";
+constant push5: std_logic_vector(11 downto 0) := x"2a1";
+constant push6: std_logic_vector(11 downto 0) := x"2a2";
+constant push7: std_logic_vector(11 downto 0) := x"2a3";
+
+-- CALL unconditional, 17 clock cycles, 1 m1 cycle
+constant call4: std_logic_vector(11 downto 0) := x"2b0";
+constant call5: std_logic_vector(11 downto 0) := x"2b1";
+constant call6: std_logic_vector(11 downto 0) := x"2b2";
+constant call7: std_logic_vector(11 downto 0) := x"2b3";
+constant call8: std_logic_vector(11 downto 0) := x"2b4";
+
+-- end of DD prefixed opcodes
+
+-- ED prefix, must obtain next instruction byte
+constant ed4: std_logic_vector(11 downto 0) := x"2c0";
+constant ed5: std_logic_vector(11 downto 0) := x"2c1";
+constant ed6: std_logic_vector(11 downto 0) := x"2c2";
+constant ed7: std_logic_vector(11 downto 0) := x"2c3";
+constant ed8: std_logic_vector(11 downto 0) := x"2c4";
+constant ed9: std_logic_vector(11 downto 0) := x"2c5";
+constant ed10: std_logic_vector(11 downto 0) := x"2c6";
+
+-- 8 bit input to register from a 16 bit port address, 12 cycles, 1 m1 cycle
+constant in16_5: std_logic_vector(11 downto 0) := x"2d0";
+constant in16_6: std_logic_vector(11 downto 0) := x"2d1";
+
+-- 8 bit output to register from a 16 bit port address, 12 cycles, 1 m1 cycle
+constant out16_5: std_logic_vector(11 downto 0) := x"2e0";
+constant out16_6: std_logic_vector(11 downto 0) := x"2e1";
+
+-- 16 bit ADC
+constant adc_sbc_16_5: std_logic_vector(11 downto 0) := x"2f0";
+
+-- store register pair to immediate address
+constant strp16_5: std_logic_vector(11 downto 0) := x"300";
+constant strp16_6: std_logic_vector(11 downto 0) := x"301";
+
+-- load register pair from immediate address
+constant ldrp16_5: std_logic_vector(11 downto 0) := x"310";
+constant ldrp16_6: std_logic_vector(11 downto 0) := x"311";
+constant ldrp16_7: std_logic_vector(11 downto 0) := x"312";
+
+-- NEG
+constant neg6: std_logic_vector(11 downto 0) := x"320";
+
+-- RETN
+constant retn6: std_logic_vector(11 downto 0) := x"330";
+constant retn7: std_logic_vector(11 downto 0) := x"331";
+constant retn8: std_logic_vector(11 downto 0) := x"332";
+constant retn9: std_logic_vector(11 downto 0) := x"333";
+constant retn10: std_logic_vector(11 downto 0) := x"334";
+constant retn11: std_logic_vector(11 downto 0) := x"335";
+constant retn12: std_logic_vector(11 downto 0) := x"336";
+constant retn13: std_logic_vector(11 downto 0) := x"337";
+constant retn14: std_logic_vector(11 downto 0) := x"338";
+constant retn15: std_logic_vector(11 downto 0) := x"339";
+constant retn16: std_logic_vector(11 downto 0) := x"33a";
+constant retn17: std_logic_vector(11 downto 0) := x"33b";
+constant retn18: std_logic_vector(11 downto 0) := x"33c";
+constant retn19: std_logic_vector(11 downto 0) := x"33d";
+constant retn20: std_logic_vector(11 downto 0) := x"33e";
+constant retn21: std_logic_vector(11 downto 0) := x"33f";
+constant retn22: std_logic_vector(11 downto 0) := x"340";
+constant retn23: std_logic_vector(11 downto 0) := x"342";
+constant retn24: std_logic_vector(11 downto 0) := x"343";
+constant retn25: std_logic_vector(11 downto 0) := x"344";
+
+-- RETI
+constant reti6: std_logic_vector(11 downto 0) := x"350";
+constant reti7: std_logic_vector(11 downto 0) := x"351";
+constant reti8: std_logic_vector(11 downto 0) := x"352";
+constant reti9: std_logic_vector(11 downto 0) := x"353";
+constant reti10: std_logic_vector(11 downto 0) := x"354";
+constant reti11: std_logic_vector(11 downto 0) := x"355";
+constant reti12: std_logic_vector(11 downto 0) := x"356";
+constant reti13: std_logic_vector(11 downto 0) := x"357";
+constant reti14: std_logic_vector(11 downto 0) := x"358";
+constant reti15: std_logic_vector(11 downto 0) := x"359";
+constant reti16: std_logic_vector(11 downto 0) := x"35a";
+constant reti17: std_logic_vector(11 downto 0) := x"35b";
+constant reti18: std_logic_vector(11 downto 0) := x"35c";
+constant reti19: std_logic_vector(11 downto 0) := x"35d";
+constant reti20: std_logic_vector(11 downto 0) := x"35e";
+constant reti21: std_logic_vector(11 downto 0) := x"35f";
+constant reti22: std_logic_vector(11 downto 0) := x"360";
+constant reti23: std_logic_vector(11 downto 0) := x"361";
+constant reti24: std_logic_vector(11 downto 0) := x"362";
+constant reti25: std_logic_vector(11 downto 0) := x"363";
+
+-- IM n
+constant im0_6: std_logic_vector(11 downto 0) := x"370";
+constant im0_7: std_logic_vector(11 downto 0) := x"371";
+constant im0_8: std_logic_vector(11 downto 0) := x"372";
+constant im0_9: std_logic_vector(11 downto 0) := x"373";
+constant im0_10: std_logic_vector(11 downto 0) := x"374";
+constant im0_11: std_logic_vector(11 downto 0) := x"375";
+constant im0_12: std_logic_vector(11 downto 0) := x"376";
+constant im0_13: std_logic_vector(11 downto 0) := x"377";
+
+constant im1_6: std_logic_vector(11 downto 0) := x"380";
+constant im1_7: std_logic_vector(11 downto 0) := x"381";
+constant im1_8: std_logic_vector(11 downto 0) := x"382";
+constant im1_9: std_logic_vector(11 downto 0) := x"383";
+constant im1_10: std_logic_vector(11 downto 0) := x"384";
+constant im1_11: std_logic_vector(11 downto 0) := x"385";
+constant im1_12: std_logic_vector(11 downto 0) := x"386";
+constant im1_13: std_logic_vector(11 downto 0) := x"387";
+
+constant im2_6: std_logic_vector(11 downto 0) := x"390";
+constant im2_7: std_logic_vector(11 downto 0) := x"391";
+constant im2_8: std_logic_vector(11 downto 0) := x"392";
+constant im2_9: std_logic_vector(11 downto 0) := x"393";
+constant im2_10: std_logic_vector(11 downto 0) := x"394";
+constant im2_11: std_logic_vector(11 downto 0) := x"395";
+constant im2_12: std_logic_vector(11 downto 0) := x"396";
+constant im2_13: std_logic_vector(11 downto 0) := x"397";
+
+-- LD I, A
+constant ldia5: std_logic_vector(11 downto 0) := x"3a0";
+constant ldia6: std_logic_vector(11 downto 0) := x"3a1";
+constant ldia7: std_logic_vector(11 downto 0) := x"3a2";
+constant ldia8: std_logic_vector(11 downto 0) := x"3a3";
+constant ldia9: std_logic_vector(11 downto 0) := x"3a4";
+constant ldia10: std_logic_vector(11 downto 0) := x"3a5";
+constant ldia11: std_logic_vector(11 downto 0) := x"3a6";
+constant ldia12: std_logic_vector(11 downto 0) := x"3a7";
+constant ldia13: std_logic_vector(11 downto 0) := x"3a8";
+constant ldia14: std_logic_vector(11 downto 0) := x"3a9";
+
+-- LD R, A, ignore this instruction
+
+-- LD A, I
+constant ldai5: std_logic_vector(11 downto 0) := x"3b0";
+constant ldai6: std_logic_vector(11 downto 0) := x"3b1";
+constant ldai7: std_logic_vector(11 downto 0) := x"3b2";
+constant ldai8: std_logic_vector(11 downto 0) := x"3b3";
+constant ldai9: std_logic_vector(11 downto 0) := x"3b4";
+constant ldai10: std_logic_vector(11 downto 0) := x"3b5";
+constant ldai11: std_logic_vector(11 downto 0) := x"3b6";
+constant ldai12: std_logic_vector(11 downto 0) := x"3b7";
+constant ldai13: std_logic_vector(11 downto 0) := x"3b8";
+constant ldai14: std_logic_vector(11 downto 0) := x"3b9";
+
+-- LD A, R, ignore this instruction
+
+-- RRD and RLD
+constant rrd_rld5: std_logic_vector(11 downto 0) := x"3c0";
+
+-- Block instructions
+
+-- LDI
+constant bldi5: std_logic_vector(11 downto 0) := x"3d0";
+constant bldi6: std_logic_vector(11 downto 0) := x"3d1";
+constant bldi7: std_logic_vector(11 downto 0) := x"3d2";
+constant bldi8: std_logic_vector(11 downto 0) := x"3d3";
+constant bldi9: std_logic_vector(11 downto 0) := x"3d4";
+constant bldi10: std_logic_vector(11 downto 0) := x"3d5";
+constant bldi11: std_logic_vector(11 downto 0) := x"3d6";
+constant bldi12: std_logic_vector(11 downto 0) := x"3d7";
+constant bldi13: std_logic_vector(11 downto 0) := x"3d8";
+constant bldi14: std_logic_vector(11 downto 0) := x"3d9";
+
+-- CPI
+constant bcpi5: std_logic_vector(11 downto 0) := x"3e0";
+constant bcpi6: std_logic_vector(11 downto 0) := x"3e1";
+constant bcpi7: std_logic_vector(11 downto 0) := x"3e2";
+constant bcpi8: std_logic_vector(11 downto 0) := x"3e3";
+constant bcpi9: std_logic_vector(11 downto 0) := x"3e4";
+constant bcpi10: std_logic_vector(11 downto 0) := x"3e5";
+constant bcpi11: std_logic_vector(11 downto 0) := x"3e6";
+
+-- INI
+constant bini5: std_logic_vector(11 downto 0) := x"3f0";
+constant bini6: std_logic_vector(11 downto 0) := x"3f1";
+constant bini7: std_logic_vector(11 downto 0) := x"3f2";
+constant bini8: std_logic_vector(11 downto 0) := x"3f3";
+constant bini9: std_logic_vector(11 downto 0) := x"3f4";
+constant bini10: std_logic_vector(11 downto 0) := x"3f5";
+constant bini11: std_logic_vector(11 downto 0) := x"3f6";
+
+-- OUTI
+constant bouti5: std_logic_vector(11 downto 0) := x"400";
+constant bouti6: std_logic_vector(11 downto 0) := x"401";
+constant bouti7: std_logic_vector(11 downto 0) := x"402";
+constant bouti8: std_logic_vector(11 downto 0) := x"403";
+constant bouti9: std_logic_vector(11 downto 0) := x"404";
+constant bouti10: std_logic_vector(11 downto 0) := x"405";
+constant bouti11: std_logic_vector(11 downto 0) := x"406";
+constant bouti12: std_logic_vector(11 downto 0) := x"407";
+
+-- LDD
+constant bldd5: std_logic_vector(11 downto 0) := x"410";
+constant bldd6: std_logic_vector(11 downto 0) := x"411";
+constant bldd7: std_logic_vector(11 downto 0) := x"412";
+constant bldd8: std_logic_vector(11 downto 0) := x"413";
+constant bldd9: std_logic_vector(11 downto 0) := x"414";
+constant bldd10: std_logic_vector(11 downto 0) := x"415";
+constant bldd11: std_logic_vector(11 downto 0) := x"416";
+constant bldd12: std_logic_vector(11 downto 0) := x"417";
+constant bldd13: std_logic_vector(11 downto 0) := x"418";
+
+-- CPD
+constant bcpd5: std_logic_vector(11 downto 0) := x"420";
+constant bcpd6: std_logic_vector(11 downto 0) := x"421";
+constant bcpd7: std_logic_vector(11 downto 0) := x"422";
+constant bcpd8: std_logic_vector(11 downto 0) := x"423";
+constant bcpd9: std_logic_vector(11 downto 0) := x"424";
+constant bcpd10: std_logic_vector(11 downto 0) := x"425";
+constant bcpd11: std_logic_vector(11 downto 0) := x"426";
+
+-- IND
+constant bind5: std_logic_vector(11 downto 0) := x"430";
+constant bind6: std_logic_vector(11 downto 0) := x"431";
+constant bind7: std_logic_vector(11 downto 0) := x"432";
+constant bind8: std_logic_vector(11 downto 0) := x"433";
+constant bind9: std_logic_vector(11 downto 0) := x"434";
+constant bind10: std_logic_vector(11 downto 0) := x"435";
+constant bind11: std_logic_vector(11 downto 0) := x"436";
+
+-- OUTD
+constant boutd5: std_logic_vector(11 downto 0) := x"440";
+constant boutd6: std_logic_vector(11 downto 0) := x"441";
+constant boutd7: std_logic_vector(11 downto 0) := x"442";
+constant boutd8: std_logic_vector(11 downto 0) := x"443";
+constant boutd9: std_logic_vector(11 downto 0) := x"444";
+constant boutd10: std_logic_vector(11 downto 0) := x"445";
+constant boutd11: std_logic_vector(11 downto 0) := x"446";
+
+-- LDIR
+constant bldir5: std_logic_vector(11 downto 0) := x"450";
+constant bldir6: std_logic_vector(11 downto 0) := x"451";
+--constant bldir7: std_logic_vector(11 downto 0) := x"452";
+--constant bldir8: std_logic_vector(11 downto 0) := x"453";
+--constant bldir9: std_logic_vector(11 downto 0) := x"454";
+--constant bldir10: std_logic_vector(11 downto 0) := x"455";
+--constant bldir11: std_logic_vector(11 downto 0) := x"456";
+--constant bldir12: std_logic_vector(11 downto 0) := x"457";
+--constant bldir13: std_logic_vector(11 downto 0) := x"458";
+--constant bldir14: std_logic_vector(11 downto 0) := x"459";
+--constant bldir15: std_logic_vector(11 downto 0) := x"45a";
+--constant bldir16: std_logic_vector(11 downto 0) := x"45b";
+--constant bldir17: std_logic_vector(11 downto 0) := x"45c";
+--constant bldir18: std_logic_vector(11 downto 0) := x"45d";
+--constant bldir19: std_logic_vector(11 downto 0) := x"45e";
+--constant bldir20: std_logic_vector(11 downto 0) := x"45f";
+--constant bldir21: std_logic_vector(11 downto 0) := x"460";
+--constant bldir22: std_logic_vector(11 downto 0) := x"461";
+--constant bldir23: std_logic_vector(11 downto 0) := x"462";
+--constant bldir24: std_logic_vector(11 downto 0) := x"463";
+--constant bldir25: std_logic_vector(11 downto 0) := x"464";
+--constant bldir26: std_logic_vector(11 downto 0) := x"465";
+--constant bldir27: std_logic_vector(11 downto 0) := x"466";
+--constant bldir28: std_logic_vector(11 downto 0) := x"467";
+--constant bldir29: std_logic_vector(11 downto 0) := x"468";
+--constant bldir30: std_logic_vector(11 downto 0) := x"469";
+--constant bldir31: std_logic_vector(11 downto 0) := x"46a";
+--constant bldir32: std_logic_vector(11 downto 0) := x"46b";
+--constant bldir33: std_logic_vector(11 downto 0) := x"46c";
+--constant bldir34: std_logic_vector(11 downto 0) := x"46d";
+--constant bldir35: std_logic_vector(11 downto 0) := x"46e";
+--constant bldir36: std_logic_vector(11 downto 0) := x"46f";
+--constant bldir37: std_logic_vector(11 downto 0) := x"470";
+--constant bldir38: std_logic_vector(11 downto 0) := x"471";
+
+-- CPIR
+constant bcpir5: std_logic_vector(11 downto 0) := x"480";
+constant bcpir6: std_logic_vector(11 downto 0) := x"481";
+--constant bcpir7: std_logic_vector(11 downto 0) := x"482";
+--constant bcpir8: std_logic_vector(11 downto 0) := x"483";
+--constant bcpir9: std_logic_vector(11 downto 0) := x"484";
+--constant bcpir10: std_logic_vector(11 downto 0) := x"485";
+--constant bcpir11: std_logic_vector(11 downto 0) := x"486";
+--constant bcpir12: std_logic_vector(11 downto 0) := x"487";
+--constant bcpir13: std_logic_vector(11 downto 0) := x"488";
+--constant bcpir14: std_logic_vector(11 downto 0) := x"489";
+--constant bcpir15: std_logic_vector(11 downto 0) := x"48a";
+--constant bcpir16: std_logic_vector(11 downto 0) := x"48b";
+--constant bcpir17: std_logic_vector(11 downto 0) := x"48c";
+--constant bcpir18: std_logic_vector(11 downto 0) := x"48d";
+--constant bcpir19: std_logic_vector(11 downto 0) := x"48e";
+--constant bcpir20: std_logic_vector(11 downto 0) := x"48f";
+--constant bcpir21: std_logic_vector(11 downto 0) := x"490";
+--constant bcpir22: std_logic_vector(11 downto 0) := x"491";
+--constant bcpir23: std_logic_vector(11 downto 0) := x"492";
+--constant bcpir24: std_logic_vector(11 downto 0) := x"493";
+--constant bcpir25: std_logic_vector(11 downto 0) := x"494";
+--constant bcpir26: std_logic_vector(11 downto 0) := x"495";
+--constant bcpir27: std_logic_vector(11 downto 0) := x"496";
+--constant bcpir28: std_logic_vector(11 downto 0) := x"497";
+--constant bcpir29: std_logic_vector(11 downto 0) := x"498";
+--constant bcpir30: std_logic_vector(11 downto 0) := x"499";
+--constant bcpir31: std_logic_vector(11 downto 0) := x"49a";
+--constant bcpir32: std_logic_vector(11 downto 0) := x"49b";
+--constant bcpir33: std_logic_vector(11 downto 0) := x"49c";
+--constant bcpir34: std_logic_vector(11 downto 0) := x"49d";
+--constant bcpir35: std_logic_vector(11 downto 0) := x"49e";
+--constant bcpir36: std_logic_vector(11 downto 0) := x"49f";
+--constant bcpir37: std_logic_vector(11 downto 0) := x"4a0";
+--constant bcpir38: std_logic_vector(11 downto 0) := x"4a1";
+
+-- INIR
+constant binir5: std_logic_vector(11 downto 0) := x"4b0";
+constant binir6: std_logic_vector(11 downto 0) := x"4b1";
+--constant binir7: std_logic_vector(11 downto 0) := x"4b2";
+--constant binir8: std_logic_vector(11 downto 0) := x"4b3";
+--constant binir9: std_logic_vector(11 downto 0) := x"4b4";
+--constant binir10: std_logic_vector(11 downto 0) := x"4b5";
+--constant binir11: std_logic_vector(11 downto 0) := x"4b6";
+--constant binir12: std_logic_vector(11 downto 0) := x"4b7";
+--constant binir13: std_logic_vector(11 downto 0) := x"4b8";
+--constant binir14: std_logic_vector(11 downto 0) := x"4b9";
+--constant binir15: std_logic_vector(11 downto 0) := x"4ba";
+--constant binir16: std_logic_vector(11 downto 0) := x"4bb";
+--constant binir17: std_logic_vector(11 downto 0) := x"4bc";
+--constant binir18: std_logic_vector(11 downto 0) := x"4bd";
+--constant binir19: std_logic_vector(11 downto 0) := x"4be";
+--constant binir20: std_logic_vector(11 downto 0) := x"4bf";
+--constant binir21: std_logic_vector(11 downto 0) := x"4c0";
+--constant binir22: std_logic_vector(11 downto 0) := x"4c1";
+--constant binir23: std_logic_vector(11 downto 0) := x"4c2";
+--constant binir24: std_logic_vector(11 downto 0) := x"4c3";
+--constant binir25: std_logic_vector(11 downto 0) := x"4c4";
+--constant binir26: std_logic_vector(11 downto 0) := x"4c5";
+--constant binir27: std_logic_vector(11 downto 0) := x"4c6";
+--constant binir28: std_logic_vector(11 downto 0) := x"4c7";
+--constant binir29: std_logic_vector(11 downto 0) := x"4c8";
+--constant binir30: std_logic_vector(11 downto 0) := x"4c9";
+--constant binir31: std_logic_vector(11 downto 0) := x"4ca";
+--constant binir32: std_logic_vector(11 downto 0) := x"4cb";
+--constant binir33: std_logic_vector(11 downto 0) := x"4cc";
+--constant binir34: std_logic_vector(11 downto 0) := x"4cd";
+--constant binir35: std_logic_vector(11 downto 0) := x"4ce";
+--constant binir36: std_logic_vector(11 downto 0) := x"4cf";
+--constant binir37: std_logic_vector(11 downto 0) := x"4d0";
+--constant binir38: std_logic_vector(11 downto 0) := x"4d1";
+
+-- OTIR
+constant botir5: std_logic_vector(11 downto 0) := x"4e0";
+constant botir6: std_logic_vector(11 downto 0) := x"4e1";
+--constant botir7: std_logic_vector(11 downto 0) := x"4e2";
+--constant botir8: std_logic_vector(11 downto 0) := x"4e3";
+--constant botir9: std_logic_vector(11 downto 0) := x"4e4";
+--constant botir10: std_logic_vector(11 downto 0) := x"4e5";
+--constant botir11: std_logic_vector(11 downto 0) := x"4e6";
+--constant botir12: std_logic_vector(11 downto 0) := x"4e7";
+--constant botir13: std_logic_vector(11 downto 0) := x"4e8";
+--constant botir14: std_logic_vector(11 downto 0) := x"4e9";
+--constant botir15: std_logic_vector(11 downto 0) := x"4ea";
+--constant botir16: std_logic_vector(11 downto 0) := x"4eb";
+--constant botir17: std_logic_vector(11 downto 0) := x"4ec";
+--constant botir18: std_logic_vector(11 downto 0) := x"4ed";
+--constant botir19: std_logic_vector(11 downto 0) := x"4ee";
+--constant botir20: std_logic_vector(11 downto 0) := x"4ef";
+--constant botir21: std_logic_vector(11 downto 0) := x"4f0";
+--constant botir22: std_logic_vector(11 downto 0) := x"4f1";
+--constant botir23: std_logic_vector(11 downto 0) := x"4f2";
+--constant botir24: std_logic_vector(11 downto 0) := x"4f3";
+--constant botir25: std_logic_vector(11 downto 0) := x"4f4";
+--constant botir26: std_logic_vector(11 downto 0) := x"4f5";
+--constant botir27: std_logic_vector(11 downto 0) := x"4f6";
+--constant botir28: std_logic_vector(11 downto 0) := x"4f7";
+--constant botir29: std_logic_vector(11 downto 0) := x"4f8";
+--constant botir30: std_logic_vector(11 downto 0) := x"4f9";
+--constant botir31: std_logic_vector(11 downto 0) := x"4fa";
+--constant botir32: std_logic_vector(11 downto 0) := x"4fb";
+--constant botir33: std_logic_vector(11 downto 0) := x"4fc";
+--constant botir34: std_logic_vector(11 downto 0) := x"4fd";
+--constant botir35: std_logic_vector(11 downto 0) := x"4fe";
+--constant botir36: std_logic_vector(11 downto 0) := x"4ff";
+--constant botir37: std_logic_vector(11 downto 0) := x"500";
+--constant botir38: std_logic_vector(11 downto 0) := x"501";
+
+-- LDDR
+constant blddr5: std_logic_vector(11 downto 0) := x"510";
+constant blddr6: std_logic_vector(11 downto 0) := x"511";
+--constant blddr7: std_logic_vector(11 downto 0) := x"512";
+--constant blddr8: std_logic_vector(11 downto 0) := x"513";
+--constant blddr9: std_logic_vector(11 downto 0) := x"514";
+--constant blddr10: std_logic_vector(11 downto 0) := x"515";
+--constant blddr11: std_logic_vector(11 downto 0) := x"516";
+--constant blddr12: std_logic_vector(11 downto 0) := x"517";
+--constant blddr13: std_logic_vector(11 downto 0) := x"518";
+--constant blddr14: std_logic_vector(11 downto 0) := x"519";
+--constant blddr15: std_logic_vector(11 downto 0) := x"51a";
+--constant blddr16: std_logic_vector(11 downto 0) := x"51b";
+--constant blddr17: std_logic_vector(11 downto 0) := x"51c";
+--constant blddr18: std_logic_vector(11 downto 0) := x"51d";
+--constant blddr19: std_logic_vector(11 downto 0) := x"51e";
+--constant blddr20: std_logic_vector(11 downto 0) := x"51f";
+--constant blddr21: std_logic_vector(11 downto 0) := x"520";
+--constant blddr22: std_logic_vector(11 downto 0) := x"521";
+--constant blddr23: std_logic_vector(11 downto 0) := x"522";
+--constant blddr24: std_logic_vector(11 downto 0) := x"523";
+--constant blddr25: std_logic_vector(11 downto 0) := x"524";
+--constant blddr26: std_logic_vector(11 downto 0) := x"525";
+--constant blddr27: std_logic_vector(11 downto 0) := x"526";
+--constant blddr28: std_logic_vector(11 downto 0) := x"527";
+--constant blddr29: std_logic_vector(11 downto 0) := x"528";
+--constant blddr30: std_logic_vector(11 downto 0) := x"529";
+--constant blddr31: std_logic_vector(11 downto 0) := x"52a";
+--constant blddr32: std_logic_vector(11 downto 0) := x"52b";
+--constant blddr33: std_logic_vector(11 downto 0) := x"52c";
+--constant blddr34: std_logic_vector(11 downto 0) := x"52d";
+--constant blddr35: std_logic_vector(11 downto 0) := x"52e";
+--constant blddr36: std_logic_vector(11 downto 0) := x"52f";
+--constant blddr37: std_logic_vector(11 downto 0) := x"530";
+--constant blddr38: std_logic_vector(11 downto 0) := x"531";
+
+-- CPDR
+constant bcpdr5: std_logic_vector(11 downto 0) := x"540";
+constant bcpdr6: std_logic_vector(11 downto 0) := x"541";
+--constant bcpdr7: std_logic_vector(11 downto 0) := x"542";
+--constant bcpdr8: std_logic_vector(11 downto 0) := x"543";
+--constant bcpdr9: std_logic_vector(11 downto 0) := x"544";
+--constant bcpdr10: std_logic_vector(11 downto 0) := x"545";
+--constant bcpdr11: std_logic_vector(11 downto 0) := x"546";
+--constant bcpdr12: std_logic_vector(11 downto 0) := x"547";
+--constant bcpdr13: std_logic_vector(11 downto 0) := x"548";
+--constant bcpdr14: std_logic_vector(11 downto 0) := x"549";
+--constant bcpdr15: std_logic_vector(11 downto 0) := x"54a";
+--constant bcpdr16: std_logic_vector(11 downto 0) := x"54b";
+--constant bcpdr17: std_logic_vector(11 downto 0) := x"54c";
+--constant bcpdr18: std_logic_vector(11 downto 0) := x"54d";
+--constant bcpdr19: std_logic_vector(11 downto 0) := x"54e";
+--constant bcpdr20: std_logic_vector(11 downto 0) := x"54f";
+--constant bcpdr21: std_logic_vector(11 downto 0) := x"550";
+--constant bcpdr22: std_logic_vector(11 downto 0) := x"551";
+--constant bcpdr23: std_logic_vector(11 downto 0) := x"552";
+--constant bcpdr24: std_logic_vector(11 downto 0) := x"553";
+--constant bcpdr25: std_logic_vector(11 downto 0) := x"554";
+--constant bcpdr26: std_logic_vector(11 downto 0) := x"555";
+--constant bcpdr27: std_logic_vector(11 downto 0) := x"556";
+--constant bcpdr28: std_logic_vector(11 downto 0) := x"557";
+--constant bcpdr29: std_logic_vector(11 downto 0) := x"558";
+--constant bcpdr30: std_logic_vector(11 downto 0) := x"559";
+--constant bcpdr32: std_logic_vector(11 downto 0) := x"55a";
+--constant bcpdr33: std_logic_vector(11 downto 0) := x"55b";
+--constant bcpdr34: std_logic_vector(11 downto 0) := x"55c";
+--constant bcpdr35: std_logic_vector(11 downto 0) := x"55d";
+--constant bcpdr36: std_logic_vector(11 downto 0) := x"55e";
+--constant bcpdr37: std_logic_vector(11 downto 0) := x"55f";
+--constant bcpdr38: std_logic_vector(11 downto 0) := x"560";
+--constant bcpdr39: std_logic_vector(11 downto 0) := x"561";
+
+-- INDR
+constant bindr5: std_logic_vector(11 downto 0) := x"570";
+constant bindr6: std_logic_vector(11 downto 0) := x"571";
+--constant bindr7: std_logic_vector(11 downto 0) := x"572";
+--constant bindr8: std_logic_vector(11 downto 0) := x"573";
+--constant bindr9: std_logic_vector(11 downto 0) := x"574";
+--constant bindr13: std_logic_vector(11 downto 0) := x"575";
+--constant bindr10: std_logic_vector(11 downto 0) := x"576";
+--constant bindr18: std_logic_vector(11 downto 0) := x"577";
+--constant bindr12: std_logic_vector(11 downto 0) := x"578";
+--constant bindr13: std_logic_vector(11 downto 0) := x"579";
+--constant bindr14: std_logic_vector(11 downto 0) := x"57a";
+--constant bindr15: std_logic_vector(11 downto 0) := x"57b";
+--constant bindr16: std_logic_vector(11 downto 0) := x"57c";
+--constant bindr17: std_logic_vector(11 downto 0) := x"57d";
+--constant bindr18: std_logic_vector(11 downto 0) := x"57e";
+--constant bindr19: std_logic_vector(11 downto 0) := x"57f";
+--constant bindr20: std_logic_vector(11 downto 0) := x"580";
+--constant bindr21: std_logic_vector(11 downto 0) := x"581";
+--constant bindr22: std_logic_vector(11 downto 0) := x"582";
+--constant bindr23: std_logic_vector(11 downto 0) := x"583";
+--constant bindr24: std_logic_vector(11 downto 0) := x"584";
+--constant bindr25: std_logic_vector(11 downto 0) := x"585";
+--constant bindr26: std_logic_vector(11 downto 0) := x"586";
+--constant bindr27: std_logic_vector(11 downto 0) := x"587";
+--constant bindr28: std_logic_vector(11 downto 0) := x"588";
+--constant bindr29: std_logic_vector(11 downto 0) := x"589";
+--constant bindr30: std_logic_vector(11 downto 0) := x"58a";
+--constant bindr31: std_logic_vector(11 downto 0) := x"58b";
+--constant bindr32: std_logic_vector(11 downto 0) := x"58c";
+--constant bindr33: std_logic_vector(11 downto 0) := x"58d";
+--constant bindr34: std_logic_vector(11 downto 0) := x"58e";
+--constant bindr35: std_logic_vector(11 downto 0) := x"58f";
+--constant bindr36: std_logic_vector(11 downto 0) := x"590";
+--constant bindr37: std_logic_vector(11 downto 0) := x"591";
+
+-- OTDR
+constant botdr5: std_logic_vector(11 downto 0) := x"5a0";
+constant botdr6: std_logic_vector(11 downto 0) := x"5a1";
+--constant botdr7: std_logic_vector(11 downto 0) := x"5a2";
+--constant botdr8: std_logic_vector(11 downto 0) := x"5a3";
+--constant botdr9: std_logic_vector(11 downto 0) := x"5a4";
+--constant botdr10: std_logic_vector(11 downto 0) := x"5a5";
+--constant botdr11: std_logic_vector(11 downto 0) := x"5a6";
+--constant botdr12: std_logic_vector(11 downto 0) := x"5a7";
+--constant botdr13: std_logic_vector(11 downto 0) := x"5a8";
+--constant botdr14: std_logic_vector(11 downto 0) := x"5a9";
+--constant botdr15: std_logic_vector(11 downto 0) := x"5aa";
+--constant botdr16: std_logic_vector(11 downto 0) := x"5ab";
+--constant botdr17: std_logic_vector(11 downto 0) := x"5ac";
+--constant botdr18: std_logic_vector(11 downto 0) := x"5ad";
+--constant botdr19: std_logic_vector(11 downto 0) := x"5ae";
+--constant botdr20: std_logic_vector(11 downto 0) := x"5af";
+--constant botdr21: std_logic_vector(11 downto 0) := x"5b0";
+--constant botdr22: std_logic_vector(11 downto 0) := x"5b1";
+--constant botdr23: std_logic_vector(11 downto 0) := x"5b2";
+--constant botdr24: std_logic_vector(11 downto 0) := x"5b3";
+--constant botdr25: std_logic_vector(11 downto 0) := x"5b4";
+--constant botdr26: std_logic_vector(11 downto 0) := x"5b5";
+--constant botdr27: std_logic_vector(11 downto 0) := x"5b6";
+--constant botdr28: std_logic_vector(11 downto 0) := x"5b7";
+--constant botdr29: std_logic_vector(11 downto 0) := x"5b8";
+--constant botdr30: std_logic_vector(11 downto 0) := x"5b9";
+--constant botdr31: std_logic_vector(11 downto 0) := x"5ba";
+--constant botdr32: std_logic_vector(11 downto 0) := x"5bb";
+--constant botdr33: std_logic_vector(11 downto 0) := x"5bc";
+--constant botdr34: std_logic_vector(11 downto 0) := x"5bd";
+--constant botdr35: std_logic_vector(11 downto 0) := x"5be";
+--constant botdr36: std_logic_vector(11 downto 0) := x"5bf";
+--constant botdr37: std_logic_vector(11 downto 0) := x"5c0";
+--constant botdr38: std_logic_vector(11 downto 0) := x"5c1";
+
+-- end of ED prefixed opcodes
+
+-- index register instructions
+constant index4: std_logic_vector(11 downto 0) := x"5d0";
+constant index5: std_logic_vector(11 downto 0) := x"5d1";
+constant index6: std_logic_vector(11 downto 0) := x"5d2";
+constant index7: std_logic_vector(11 downto 0) := x"5d3";
+constant index8: std_logic_vector(11 downto 0) := x"5d4";
+
+-- alu ops on immediate operand, 7 cycles, 1 m1 cycle
+constant alui4: std_logic_vector(11 downto 0) := x"5e0";
+constant alui5: std_logic_vector(11 downto 0) := x"5e1";
+
+-- RST, 11 clock cycles, 1 m1 cycle
+constant rst4: std_logic_vector(11 downto 0) := x"5f0";
+constant rst5: std_logic_vector(11 downto 0) := x"5f1";
+constant rst6: std_logic_vector(11 downto 0) := x"5f2";
+constant rst7: std_logic_vector(11 downto 0) := x"5f3";
+constant rst8: std_logic_vector(11 downto 0) := x"5f4";
+
+-- get next opcode byte
+constant nxtop1: std_logic_vector(11 downto 0) := x"600";
+constant nxtop2: std_logic_vector(11 downto 0) := x"601";
+
+-- get next operand byte
+constant nxtoprnd1: std_logic_vector(11 downto 0) := x"610";
+constant nxtoprnd2: std_logic_vector(11 downto 0) := x"611";
+
+-- general memory read
+constant genmemrd1: std_logic_vector(11 downto 0) := x"620";
+constant genmemrd2: std_logic_vector(11 downto 0) := x"621";
+constant genmemrd3: std_logic_vector(11 downto 0) := x"622";
+
+-- general memory write
+constant genmemwrt1: std_logic_vector(11 downto 0) := x"630";
+constant genmemwrt2: std_logic_vector(11 downto 0) := x"631";
+constant genmemwrt3: std_logic_vector(11 downto 0) := x"632";
+constant genmemwrt4: std_logic_vector(11 downto 0) := x"633";
+
+-- for 2-byte operands
+constant obtain_2byte_operand1: std_logic_vector(11 downto 0) := x"640";
+constant obtain_2byte_operand2: std_logic_vector(11 downto 0) := x"641";
+
+-- for SP increment
+constant incSP1: std_logic_vector(11 downto 0) := x"650";
+
+-- for SP decrement
+constant decSP1: std_logic_vector(11 downto 0) := x"660";
+
+-- for handling non-maskable interrupts
+constant nmi1: std_logic_vector(11 downto 0) := x"670";
+
+-- for handling maskable interrupts
+constant int1: std_logic_vector(11 downto 0) := x"680";
+
+-- index register bit operations
+constant index_bit5: std_logic_vector(11 downto 0) := x"690";
+constant index_bit6: std_logic_vector(11 downto 0) := x"691";
+constant index_bit7: std_logic_vector(11 downto 0) := x"692";
+
+-- BIT
+constant index_bit_bit8: std_logic_vector(11 downto 0) := x"6a0";
+
+-- common state for saving index bit operation results other than BIT
+constant index_save8: std_logic_vector(11 downto 0) := x"6b0";
+
+-- load index register with immediate operand
+constant ld_index_immediate5: std_logic_vector(11 downto 0) := x"6c0";
+constant ld_index_immediate6: std_logic_vector(11 downto 0) := x"6c1";
+
+-- add index register to register pair
+constant add_index_rp5: std_logic_vector(11 downto 0) := x"6d0";
+constant add_index_rp6: std_logic_vector(11 downto 0) := x"6d1";
+
+-- store index register direct
+constant st_index_direct5: std_logic_vector(11 downto 0) := x"6e0";
+constant st_index_direct6: std_logic_vector(11 downto 0) := x"6e1";
+
+-- load index register direct
+constant ld_index_direct5: std_logic_vector(11 downto 0) := x"6f0";
+constant ld_index_direct6: std_logic_vector(11 downto 0) := x"6f1";
+constant ld_index_direct7: std_logic_vector(11 downto 0) := x"6f2";
+constant ld_index_direct8: std_logic_vector(11 downto 0) := x"6f3";
+constant ld_index_direct9: std_logic_vector(11 downto 0) := x"6f4";
+constant ld_index_direct10: std_logic_vector(11 downto 0) := x"6f5";
+constant ld_index_direct11: std_logic_vector(11 downto 0) := x"6f6";
+constant ld_index_direct12: std_logic_vector(11 downto 0) := x"6f7";
+constant ld_index_direct13: std_logic_vector(11 downto 0) := x"6f8";
+constant ld_index_direct14: std_logic_vector(11 downto 0) := x"6f9";
+
+-- increment or decrement index register
+constant incdec_index5: std_logic_vector(11 downto 0) := x"700";
+constant incdec_index6: std_logic_vector(11 downto 0) := x"701";
+
+-- increment or decrement memory at index register + offset
+constant incdec_index_memory5: std_logic_vector(11 downto 0) := x"710";
+constant incdec_index_memory6: std_logic_vector(11 downto 0) := x"711";
+
+-- load immediate to index register + offset
+constant ld_index_memory_immed5: std_logic_vector(11 downto 0) := x"720";
+constant ld_index_memory_immed6: std_logic_vector(11 downto 0) := x"721";
+
+-- store 8 bit register to index register + offset
+constant st_index_memory5: std_logic_vector(11 downto 0) := x"730";
+
+-- load 8 bit register from index register + offset
+constant ld_index_memory5: std_logic_vector(11 downto 0) := x"740";
+constant ld_index_memory6: std_logic_vector(11 downto 0) := x"741";
+constant ld_index_memory7: std_logic_vector(11 downto 0) := x"742";
+constant ld_index_memory8: std_logic_vector(11 downto 0) := x"743";
+constant ld_index_memory9: std_logic_vector(11 downto 0) := x"744";
+constant ld_index_memory10: std_logic_vector(11 downto 0) := x"745";
+constant ld_index_memory11: std_logic_vector(11 downto 0) := x"746";
+constant ld_index_memory12: std_logic_vector(11 downto 0) := x"747";
+constant ld_index_memory13: std_logic_vector(11 downto 0) := x"748";
+constant ld_index_memory14: std_logic_vector(11 downto 0) := x"749";
+
+-- 8 bit ALU operations involving memory pointed to by index register + offset
+constant index_alu_ops5: std_logic_vector(11 downto 0) := x"750";
+constant index_alu_ops6: std_logic_vector(11 downto 0) := x"751";
+constant index_alu_ops7: std_logic_vector(11 downto 0) := x"752";
+constant index_alu_ops8: std_logic_vector(11 downto 0) := x"753";
+constant index_alu_ops9: std_logic_vector(11 downto 0) := x"754";
+constant index_alu_ops10: std_logic_vector(11 downto 0) := x"755";
+constant index_alu_ops11: std_logic_vector(11 downto 0) := x"756";
+constant index_alu_ops12: std_logic_vector(11 downto 0) := x"757";
+constant index_alu_ops13: std_logic_vector(11 downto 0) := x"758";
+constant index_alu_ops14: std_logic_vector(11 downto 0) := x"759";
+
+-- pop index register off stack
+constant pop_index5: std_logic_vector(11 downto 0) := x"770";
+constant pop_index6: std_logic_vector(11 downto 0) := x"771";
+constant pop_index7: std_logic_vector(11 downto 0) := x"772";
+
+-- push index register on stack
+constant push_index5: std_logic_vector(11 downto 0) := x"780";
+constant push_index6: std_logic_vector(11 downto 0) := x"781";
+constant push_index7: std_logic_vector(11 downto 0) := x"782";
+constant push_index8: std_logic_vector(11 downto 0) := x"783";
+constant push_index9: std_logic_vector(11 downto 0) := x"784";
+constant push_index10: std_logic_vector(11 downto 0) := x"785";
+constant push_index11: std_logic_vector(11 downto 0) := x"786";
+constant push_index12: std_logic_vector(11 downto 0) := x"787";
+constant push_index13: std_logic_vector(11 downto 0) := x"788";
+constant push_index14: std_logic_vector(11 downto 0) := x"789";
+
+-- SPI?
+constant sp_index5: std_logic_vector(11 downto 0) := x"790";
+
+-- XTI?
+constant xtindex5: std_logic_vector(11 downto 0) := x"7a0";
+constant xtindex6: std_logic_vector(11 downto 0) := x"7a1";
+constant xtindex7: std_logic_vector(11 downto 0) := x"7a2";
+constant xtindex8: std_logic_vector(11 downto 0) := x"7a3";
+constant xtindex9: std_logic_vector(11 downto 0) := x"7a4";
+constant xtindex10: std_logic_vector(11 downto 0) := x"7a5";
+constant xtindex11: std_logic_vector(11 downto 0) := x"7a6";
+constant xtindex12: std_logic_vector(11 downto 0) := x"7a7";
+constant xtindex13: std_logic_vector(11 downto 0) := x"7a8";
+constant xtindex14: std_logic_vector(11 downto 0) := x"7a9";
+
+constant test: std_logic_vector(11 downto 0) := x"fff";
+constant waitstate: std_logic_vector(11 downto 0) := x"ffe";
+
+end; \ No newline at end of file
diff --git a/testsuite/gna/issue30/tb-alu.vhdl b/testsuite/gna/issue30/tb-alu.vhdl
new file mode 100644
index 000000000..a413f9cd2
--- /dev/null
+++ b/testsuite/gna/issue30/tb-alu.vhdl
@@ -0,0 +1,3158 @@
+library ieee;
+use ieee.std_logic_1164.all;
+
+package testbench is
+constant zero: std_logic_vector(3 downto 0) := x"0";
+constant one: std_logic_vector(3 downto 0) := x"1";
+constant two: std_logic_vector(3 downto 0) := x"2";
+constant three: std_logic_vector(3 downto 0) := x"3";
+constant four: std_logic_vector(3 downto 0) := x"4";
+constant five: std_logic_vector(3 downto 0) := x"5";
+constant six: std_logic_vector(3 downto 0) := x"6";
+constant seven: std_logic_vector(3 downto 0) := x"7";
+constant eight: std_logic_vector(3 downto 0) := x"8";
+constant nine: std_logic_vector(3 downto 0) := x"9";
+constant ten: std_logic_vector(3 downto 0) := x"a";
+constant eleven: std_logic_vector(3 downto 0) := x"b";
+constant twelve: std_logic_vector(3 downto 0) := x"c";
+constant thirteen: std_logic_vector(3 downto 0) := x"d";
+constant fourteen: std_logic_vector(3 downto 0) := x"e";
+constant fifteen: std_logic_vector(3 downto 0) := x"f";
+
+constant counter_width: positive := 24;
+
+constant Disable: std_logic := '0';
+constant enable: std_logic := '1';
+end;
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+library work;
+use work.testbench.all;
+use work.definitions.all;
+
+entity tb_alu is
+end;
+
+architecture struct_tb_alu of tb_alu is
+component clkgen is
+port(
+ clk_out: out std_logic;
+ resetn: out std_logic
+);
+end component;
+
+component synchronous_latchN is
+generic(
+ N: positive
+);
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic_vector((N-1) downto 0);
+ q: out std_logic_vector((N-1) downto 0)
+);
+end component;
+
+component synchronous_latch_autoclear is
+port(
+ rstn: in std_logic;
+ clock: in std_logic;
+ clock_enable: in std_logic;
+ d: in std_logic;
+ q: out std_logic
+);
+end component;
+
+component counterN is
+generic(
+ N: positive
+);
+port(
+ clock: in std_logic;
+ carry_in: in std_logic;
+ clock_enable: in std_logic;
+ resetn: in std_logic;
+ output: out std_logic_vector((N-1) downto 0);
+ carry_out: out std_logic
+);
+end component;
+
+component alu is
+port(
+ -- control
+ operation: in std_logic_vector(4 downto 0);
+
+ -- operands
+ primary_operand: in std_logic_vector(7 downto 0);
+ secondary_operand: in std_logic_vector(7 downto 0);
+ flags_in: in std_logic_vector(7 downto 0);
+
+ -- results
+ output, flags_out: out std_logic_vector(7 downto 0);
+ secondary_out: out std_logic_vector(7 downto 0)
+);
+end component;
+
+component magnitudeN is
+generic(
+ N: positive
+);
+port(
+ a, b: in std_logic_vector((N-1) downto 0);
+ equal: out std_logic;
+ lt: out std_logic; -- '1' if a < b
+ gt: out std_logic -- '1' if a > b
+);
+end component;
+
+
+signal clock: std_logic;
+signal resetn: std_logic;
+
+signal notclock: std_logic;
+
+signal next_state: std_logic_vector(3 downto 0);
+signal nxt_state: std_logic_vector(3 downto 0);
+signal current_state: std_logic_vector(3 downto 0);
+
+signal counter_state: std_logic;
+signal counter_clock: std_logic;
+signal counter_clock_enable: std_logic;
+signal counter_out: std_logic_vector((counter_width - 1) downto 0);
+signal counter_zero: std_logic;
+
+signal zero_secondary_alu_result: std_logic;
+
+signal test_bits: std_logic;
+signal res_bits: std_logic;
+signal res_result: std_logic_vector(7 downto 0);
+
+signal alu_result: std_logic_vector(7 downto 0);
+signal secondary_alu_result: std_logic_vector(7 downto 0);
+signal flags_in: std_logic_vector(7 downto 0);
+signal flags: std_logic_vector(7 downto 0);
+
+signal sum_check: std_logic_vector(8 downto 0);
+signal sum_overflow_check: std_logic;
+signal sum_zero_check: std_logic;
+signal half_sum_check: std_logic_vector(4 downto 0);
+signal sum_checker: std_logic;
+
+signal subtract_check: std_logic_vector(8 downto 0);
+signal subtract_overflow_check: std_logic;
+signal subtract_zero_check: std_logic;
+signal half_difference_check: std_logic_vector(4 downto 0);
+signal subtract_checker: std_logic;
+
+signal and_check: std_logic_vector(7 downto 0);
+signal and_zero_check: std_logic;
+signal and_parity_check: std_logic;
+signal and_checker: std_logic;
+
+signal xor_check: std_logic_vector(7 downto 0);
+signal xor_zero_check: std_logic;
+signal xor_parity_check: std_logic;
+signal xor_checker: std_logic;
+
+signal or_check: std_logic_vector(7 downto 0);
+signal or_zero_check: std_logic;
+signal or_parity_check: std_logic;
+signal or_checker: std_logic;
+
+signal rlc_check: std_logic_vector(7 downto 0);
+signal rlc_zero_check: std_logic;
+signal rlc_parity_check: std_logic;
+signal rlc_checker: std_logic;
+
+signal rrc_check: std_logic_vector(7 downto 0);
+signal rrc_zero_check: std_logic;
+signal rrc_parity_check: std_logic;
+signal rrc_checker: std_logic;
+
+signal rl_check: std_logic_vector(7 downto 0);
+signal rl_zero_check: std_logic;
+signal rl_parity_check: std_logic;
+signal rl_checker: std_logic;
+
+signal rr_check: std_logic_vector(7 downto 0);
+signal rr_zero_check: std_logic;
+signal rr_parity_check: std_logic;
+signal rr_checker: std_logic;
+
+signal daa_unimp: std_logic;
+
+signal cpl_check: std_logic_vector(7 downto 0);
+signal cpl_checker: std_logic;
+
+signal scf_checker: std_logic;
+
+signal ccf_flags: std_logic_vector(7 downto 0);
+
+signal sla_check: std_logic_vector(7 downto 0);
+signal sla_zero_check: std_logic;
+signal sla_parity_check: std_logic;
+signal sla_checker: std_logic;
+
+signal sra_check: std_logic_vector(7 downto 0);
+signal sra_zero_check: std_logic;
+signal sra_parity_check: std_logic;
+signal sra_checker: std_logic;
+
+signal sll_check: std_logic_vector(7 downto 0);
+signal sll_zero_check: std_logic;
+signal sll_parity_check: std_logic;
+signal sll_checker: std_logic;
+
+signal srl_check: std_logic_vector(7 downto 0);
+signal srl_zero_check: std_logic;
+signal srl_parity_check: std_logic;
+signal srl_checker: std_logic;
+
+signal bit_checker: std_logic;
+signal bit_check: std_logic_vector(7 downto 0);
+signal bit_zero_checker: std_logic;
+signal res_checker: std_logic;
+signal set_checker: std_logic;
+
+signal inrc_zero: std_logic;
+signal inrc_parity: std_logic;
+
+signal primary_rld_check: std_logic_vector(7 downto 0);
+signal secondary_rld_check: std_logic_vector(7 downto 0);
+signal rld_zero_check: std_logic;
+signal rld_parity_check: std_logic;
+signal primary_rld_checker: std_logic;
+signal secondary_rld_checker: std_logic;
+
+signal primary_rrd_check: std_logic_vector(7 downto 0);
+signal secondary_rrd_check: std_logic_vector(7 downto 0);
+signal rrd_zero_check: std_logic;
+signal rrd_parity_check: std_logic;
+signal primary_rrd_checker: std_logic;
+signal secondary_rrd_checker: std_logic;
+
+signal bmtc_check: std_logic_vector(7 downto 0);
+signal bmtc_parity_check: std_logic;
+signal bmtc_checker: std_logic;
+
+signal done: std_logic;
+
+begin
+ u1: clkgen port map(
+ clk_out => clock,
+ resetn => resetn
+ );
+
+ notclock <= not clock;
+
+ u2: synchronous_latchN
+ generic map(
+ N => 4
+ )
+ port map(
+ rstn => resetn,
+ clock => notclock,
+ clock_enable => '1',
+ d => next_state,
+ q => nxt_state
+ );
+
+ u3: synchronous_latchN
+ generic map(
+ N => 4
+ )
+ port map(
+ rstn => resetn,
+ clock => clock,
+ clock_enable => '1',
+ d => nxt_state,
+ q => current_state
+ );
+
+ u4: synchronous_latch_autoclear port map(
+ rstn => resetn,
+ clock => notclock,
+ clock_enable => counter_clock,
+ d => counter_state,
+ q => counter_clock_enable
+ );
+
+ u5: counterN
+ generic map(
+ N => counter_width
+ )
+ port map(
+ clock => clock,
+ carry_in => '1',
+ clock_enable => counter_clock_enable,
+ resetn => resetn,
+ output => counter_out((counter_width - 1) downto 0),
+ carry_out => open
+ );
+
+ u6: alu port map(
+ operation => counter_out(21 downto 17),
+ primary_operand => counter_out(7 downto 0),
+ secondary_operand => counter_out(15 downto 8),
+ flags_in => flags_in,
+ output => alu_result,
+ flags_out => flags,
+ secondary_out => secondary_alu_result
+ );
+
+ flags_in <= ( carry_bit => counter_out(16),
+ others => '0');
+
+ u7: magnitudeN
+ generic map(
+ N => counter_width
+ )
+ port map(
+ a => counter_out,
+ b => x"000000",
+ equal => counter_zero,
+ lt => open,
+ gt => open
+ );
+
+ u8: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => sum_check(7 downto 0),
+ equal => sum_checker,
+ lt => open,
+ gt => open
+ );
+
+ u9: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => secondary_alu_result,
+ b => x"00",
+ equal => zero_secondary_alu_result,
+ lt => open,
+ gt => open
+ );
+ u10: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => subtract_check(7 downto 0),
+ equal => subtract_checker,
+ lt => open,
+ gt => open
+ );
+
+ u11: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => and_check(7 downto 0),
+ equal => and_checker,
+ lt => open,
+ gt => open
+ );
+
+ u12: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => xor_check(7 downto 0),
+ equal => xor_checker,
+ lt => open,
+ gt => open
+ );
+
+ u13: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => or_check(7 downto 0),
+ equal => or_checker,
+ lt => open,
+ gt => open
+ );
+
+ u14: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => rlc_check(7 downto 0),
+ equal => rlc_checker,
+ lt => open,
+ gt => open
+ );
+
+ u15: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => rrc_check(7 downto 0),
+ equal => rrc_checker,
+ lt => open,
+ gt => open
+ );
+
+ u16: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => rl_check(7 downto 0),
+ equal => rl_checker,
+ lt => open,
+ gt => open
+ );
+
+ u17: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => rr_check(7 downto 0),
+ equal => rr_checker,
+ lt => open,
+ gt => open
+ );
+
+ u18: magnitudeN
+ generic map(
+ N => 17
+ )
+ port map(
+ a => counter_out(16 downto 0),
+ b => "00000000000000000",
+ equal => daa_unimp,
+ lt => open,
+ gt => open
+ );
+
+ u19: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => cpl_check(7 downto 0),
+ equal => cpl_checker,
+ lt => open,
+ gt => open
+ );
+
+ u20: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => counter_out(7 downto 0),
+ equal => scf_checker,
+ lt => open,
+ gt => open
+ );
+
+ u21: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => sla_check(7 downto 0),
+ equal => sla_checker,
+ lt => open,
+ gt => open
+ );
+
+
+ u22: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => sra_check(7 downto 0),
+ equal => sra_checker,
+ lt => open,
+ gt => open
+ );
+
+ u23: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => sll_check(7 downto 0),
+ equal => sll_checker,
+ lt => open,
+ gt => open
+ );
+
+ u24: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => srl_check(7 downto 0),
+ equal => srl_checker,
+ lt => open,
+ gt => open
+ );
+
+ u25: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => counter_out(15 downto 8),
+ equal => bit_checker,
+ lt => open,
+ gt => open
+ );
+
+ bit_check <= (counter_out(7 downto 0) and counter_out(15 downto 8));
+
+ u26: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => x"00",
+ b => bit_check,
+ equal => bit_zero_checker,
+ lt => open,
+ gt => open
+ );
+
+ u27: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => res_result,
+ equal => res_checker,
+ lt => open,
+ gt => open
+ );
+
+ u28: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => primary_rld_check,
+ equal => primary_rld_checker,
+ lt => open,
+ gt => open
+ );
+
+ u29: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => secondary_alu_result,
+ b => secondary_rld_check,
+ equal => secondary_rld_checker,
+ lt => open,
+ gt => open
+ );
+
+ u30: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => primary_rrd_check,
+ equal => primary_rrd_checker,
+ lt => open,
+ gt => open
+ );
+
+ u31: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => secondary_alu_result,
+ b => secondary_rrd_check,
+ equal => secondary_rrd_checker,
+ lt => open,
+ gt => open
+ );
+
+ u32: magnitudeN
+ generic map(
+ N => 8
+ )
+ port map(
+ a => alu_result,
+ b => bmtc_check,
+ equal => bmtc_checker,
+ lt => open,
+ gt => open
+ );
+
+ u33: magnitudeN
+ generic map(
+ N => 22
+ )
+ port map(
+ a => counter_out(21 downto 0),
+ b => (others => '1'), -- x"3fffff",
+ equal => done,
+ lt => open,
+ gt => open
+ );
+
+ process(current_state, resetn) begin
+ if resetn = '0' then
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= zero;
+ else
+ case current_state is
+ when zero =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= one;
+
+ when one =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ assert counter_zero = '1'
+ report "counter initialisation failure"
+ severity failure;
+
+ next_state <= two;
+
+ when two =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= three;
+
+ when three =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ case counter_out(21 downto 17) is
+ when add_operation | adc_operation =>
+ assert sum_checker = '1'
+ report "incorrect sum"
+ severity failure;
+
+ assert sum_check(8) = flags(carry_bit)
+ report "incorrect addition carry flag"
+ severity failure;
+
+ assert sum_overflow_check = flags(parity_overflow_bit)
+ report "incorrect addition overflow flag"
+ severity failure;
+
+ assert sum_zero_check = flags(zero_bit)
+ report "incorrect addition zero flag"
+ severity failure;
+
+ assert half_sum_check(4) = flags(half_carry_bit)
+ report "incorrect interdigit carry flag"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect addition sign flag"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect addition add/subtract flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for add/adc"
+ severity failure;
+
+ when sub_operation | sbc_operation =>
+ assert subtract_checker = '1'
+ report "incorrect difference"
+ severity failure;
+
+ assert subtract_check(8) = flags(carry_bit)
+ report "incorrect subtraction borrow flag"
+ severity failure;
+
+ assert subtract_overflow_check = flags(parity_overflow_bit)
+ report "incorrect subtraction overflow flag"
+ severity failure;
+
+ assert subtract_zero_check = flags(zero_bit)
+ report "incorrect subtraction zero flag"
+ severity failure;
+
+ assert half_difference_check(4) = flags(half_carry_bit)
+ report "incorrect interdigit borrow flag"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect subtraction sign flag"
+ severity failure;
+
+ assert flags(add_sub_bit) = '1'
+ report "incorrect subtraction add/subtract flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for sub/sbc"
+ severity failure;
+
+ when and_operation =>
+ assert and_checker = '1'
+ report "incorrect logical AND result"
+ severity failure;
+
+ assert and_zero_check = flags(zero_bit)
+ report "incorrect logical AND zero flag"
+ severity failure;
+
+ assert and_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for logical AND"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for logical AND"
+ severity failure;
+
+ assert flags(half_carry_bit) = '1'
+ report "incorrect half-carry flag for logical AND"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract bit for logical AND"
+ severity failure;
+
+ assert flags(carry_bit) = '0'
+ report "incorrect carry bit for logical AND"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for and"
+ severity failure;
+
+ when xor_operation =>
+ assert xor_checker = '1'
+ report "incorrect logical XOR result"
+ severity failure;
+
+ assert xor_zero_check = flags(zero_bit)
+ report "incorrect logical XOR zero flag"
+ severity failure;
+
+ assert xor_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for logical XOR"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for logical XOR"
+ severity failure;
+
+ assert flags(half_carry_bit) = '1'
+ report "incorrect half-carry flag for logical XOR"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for logical XOR"
+ severity failure;
+
+ assert flags(carry_bit) = '0'
+ report "incorrect carry bit for logical XOR"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for xor"
+ severity failure;
+
+ when or_operation =>
+ assert or_checker = '1'
+ report "incorrect logical OR result"
+ severity failure;
+
+ assert or_zero_check = flags(zero_bit)
+ report "incorrect logical OR zero flag"
+ severity failure;
+
+ assert or_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for logical OR"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for logical OR"
+ severity failure;
+
+ assert flags(half_carry_bit) = '1'
+ report "incorrect half-carry flag for logical OR"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for logical OR"
+ severity failure;
+
+ assert flags(carry_bit) = '0'
+ report "incorrect carry flag for logical OR"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for OR operation"
+ severity failure;
+
+ when cmp_operation =>
+ assert subtract_checker = '1'
+ report "incorrect compare result"
+ severity failure;
+
+ assert subtract_check(8) = flags(carry_bit)
+ report "incorrect compare borrow flag"
+ severity failure;
+
+ assert subtract_overflow_check = flags(parity_overflow_bit)
+ report "incorrect compare overflow flag"
+ severity failure;
+
+ assert subtract_zero_check = flags(zero_bit)
+ report "incorrect compare zero flag"
+ severity failure;
+
+ assert half_difference_check(4) = flags(half_carry_bit)
+ report "incorrect compare interdigit borrow flag"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect compare sign flag"
+ severity failure;
+
+ assert flags(add_sub_bit) = '1'
+ report "incorrect compare add/subtract flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for compare"
+ severity failure;
+
+ when rlc_operation =>
+ assert rlc_checker = '1'
+ report "incorrect rlc result"
+ severity failure;
+
+ assert rlc_zero_check = flags(zero_bit)
+ report "incorrect rlc zero flag"
+ severity failure;
+
+ assert rlc_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rlc"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for rlc"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rlc"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rlc"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(7)
+ report "incorrect carry flag for rlc"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for rls"
+ severity failure;
+
+ when rrc_operation =>
+ assert rrc_checker = '1'
+ report "incorrect rrc result"
+ severity failure;
+
+ assert rrc_zero_check = flags(zero_bit)
+ report "incorrect rrc zero bit"
+ severity failure;
+
+ assert rrc_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rrc"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for rrc"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rrc"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rrc"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(0)
+ report "incorrect carry flag for rrc"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for rrc"
+ severity failure;
+
+ when rl_operation =>
+ assert rl_checker = '1'
+ report "incorrect rl result"
+ severity failure;
+
+ assert rl_zero_check = flags(zero_bit)
+ report "incorrect rl zero bit"
+ severity failure;
+
+ assert rl_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rl"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for rl"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rl"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rl"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(7)
+ report "incorrect carry flag for rl"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for rl"
+ severity failure;
+
+ when rr_operation =>
+ assert rr_checker = '1'
+ report "incorrect rr result"
+ severity failure;
+
+ assert rr_zero_check = flags(zero_bit)
+ report "incorrect rr zero bit"
+ severity failure;
+
+ assert rr_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rr"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for rr"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rr"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rr"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(0)
+ report "incorrect carry flag for rr"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for rr"
+ severity failure;
+
+ when daa_operation =>
+ assert daa_unimp = '0'
+ report "DAA is not implemented"
+ severity note;
+
+ when cpl_operation =>
+ assert cpl_checker = '1'
+ report "incorrect cpl result"
+ severity failure;
+
+ assert flags(add_sub_bit) = '1'
+ report "incorrect cpl add/sub flag"
+ severity failure;
+
+ assert flags(half_carry_bit) = '1'
+ report "incorrect cpl half-carry flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for cpl"
+ severity failure;
+
+ when scf_operation =>
+ assert scf_checker = '1'
+ report "incorrect scf result"
+ severity failure;
+
+ assert flags(carry_bit) = '1'
+ report "incorrect carry flag for scf"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for scf"
+ severity failure;
+
+ when ccf_operation =>
+ assert scf_checker = '1'
+ report "incorrect ccf result"
+ severity failure;
+
+ assert flags(carry_bit) = not (counter_out(16))
+ report "incorrect ccf carry flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for ccf"
+ severity failure;
+
+ when sla_operation =>
+ assert sla_checker = '1'
+ report "incorrect sla result"
+ severity failure;
+
+ assert sla_zero_check = flags(zero_bit)
+ report "incorrect sla zero flag"
+ severity failure;
+
+ assert sla_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for sla"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for sla"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for sla"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for sla"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(7)
+ report "incorrect carry bit for flag"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for sla"
+ severity failure;
+
+ when sra_operation =>
+ assert sra_checker = '1'
+ report "incorrect sra result"
+ severity failure;
+
+ assert sra_zero_check = flags(zero_bit)
+ report "incorrect sra zero flag"
+ severity failure;
+
+ assert sra_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for sra"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for sra"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for sra"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for sra"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(0)
+ report "incorrect carry flag for sra"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for sra"
+ severity failure;
+
+ when sll_operation =>
+ assert sll_checker = '1'
+ report "incorrect sll result"
+ severity failure;
+
+ assert sll_zero_check = flags(zero_bit)
+ report "incorrect sll zero flag"
+ severity failure;
+
+ assert sll_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for sll"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for sll"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for sll"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for sll"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(7)
+ report "incorrect carry flag for sll"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for sll"
+ severity failure;
+
+ when srl_operation =>
+ assert srl_checker = '1'
+ report "incorrect srl result"
+ severity failure;
+
+ assert srl_zero_check = flags(zero_bit)
+ report "incorrect srl zero flag"
+ severity failure;
+
+ assert srl_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for srl"
+ severity failure;
+
+ assert alu_result(7) = flags(sign_bit)
+ report "incorrect sign flag for srl"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for srl"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for srl"
+ severity failure;
+
+ assert flags(carry_bit) = counter_out(0)
+ report "incorrect carry flag for srl"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for srl"
+ severity failure;
+
+ when bit_operation =>
+ assert bit_checker = '1'
+ report "incorrect result for bit operation"
+ severity failure;
+
+ if test_bits = '1' then
+ if bit_zero_checker = '1' then
+ assert flags(zero_bit) = '1'
+ report "BIT: zero flag != '1'"
+ severity failure;
+ elsif bit_zero_checker = '0' then
+ assert flags(zero_bit) = '0'
+ report "BIT: zero flag != '0'"
+ severity failure;
+ end if;
+ end if;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for bit"
+ severity failure;
+
+ when res_operation =>
+ if test_bits = '1' then
+ assert res_checker = '1'
+ report "incorrect result for RES"
+ severity failure;
+ end if;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for res"
+ severity failure;
+
+ when set_operation =>
+ if test_bits = '1' then
+ assert or_checker = '1'
+ report "incorrect result for SET"
+ severity failure;
+ end if;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for set"
+ severity failure;
+
+ when in16_operation =>
+ assert scf_checker = '1'
+ report "incorrect result for in r,(C)"
+ severity failure;
+
+ assert flags(zero_bit) = inrc_zero
+ report "incorrect zero flag for in r,(c)"
+ severity failure;
+
+ assert flags(parity_overflow_bit) = inrc_parity
+ report "incorrect parity flag for in r,(c)"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for in r,(c)"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for in r,(c)"
+ severity failure;
+
+ assert flags(sign_bit) = alu_result(sign_bit)
+ report "incorrect sign flag for in r,(c)"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for in r, (c)"
+ severity failure;
+
+ when rld_operation =>
+ assert primary_rld_checker = '1'
+ report "incorrect primary result for rld"
+ severity failure;
+
+ assert secondary_rld_checker = '1'
+ report "incorrect secondary rld result"
+ severity failure;
+
+ assert alu_result(sign_bit) = flags(sign_bit)
+ report "incorrect sign flag for rld"
+ severity failure;
+
+ assert rld_zero_check = flags(zero_bit)
+ report "incorrect zero flag for rld"
+ severity failure;
+
+ assert rld_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rld"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rld"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rld"
+ severity failure;
+
+ when rrd_operation =>
+ assert primary_rrd_checker = '1'
+ report "incorrect primary result for rrd"
+ severity failure;
+
+ assert secondary_rrd_checker = '1'
+ report "incorrect secondary rrd result"
+ severity failure;
+
+ assert alu_result(sign_bit) = flags(sign_bit)
+ report "incorrect sign flag for rrd"
+ severity failure;
+
+ assert rrd_zero_check = flags(zero_bit)
+ report "incorrect zero flag for rrd"
+ severity failure;
+
+ assert rrd_parity_check = flags(parity_overflow_bit)
+ report "incorrect parity flag for rrd"
+ severity failure;
+
+ assert flags(half_carry_bit) = '0'
+ report "incorrect half-carry flag for rrd"
+ severity failure;
+
+ assert flags(add_sub_bit) = '0'
+ report "incorrect add/subtract flag for rrd"
+ severity failure;
+
+ when blockterm16_operation =>
+ assert bmtc_checker = '1'
+ report "incorrect bmtc result"
+ severity failure;
+
+ assert bmtc_parity_check = flags(parity_overflow_bit)
+ report "incorrect bmtc parity bit"
+ severity failure;
+
+ assert zero_secondary_alu_result = '1'
+ report "secondary_alu_result != 0 for block termination"
+ severity failure;
+
+ when others =>
+-- assert counter_out(16 downto 0) /= ('0' & x"0000")
+-- report "unimplemented alu operation"
+-- severity warning;
+
+ end case;
+
+ if done = '1' then
+ counter_state <= Disable;
+ counter_clock <= Disable;
+ next_state <= fifteen;
+ else
+ counter_clock <= enable;
+ counter_state <= enable;
+ next_state <= two;
+ end if;
+
+ when four =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= five;
+
+ when five =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= six;
+
+ when six =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= seven;
+
+ when seven =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+
+ next_state <= eight;
+
+ when eight =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= nine;
+
+ when nine =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= ten;
+
+ when ten =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= eleven;
+
+ when eleven =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= twelve;
+
+ when twelve =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= thirteen;
+
+ when thirteen =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+
+ next_state <= fourteen;
+
+ when fourteen =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= fifteen;
+
+ when fifteen =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ assert false
+ report "test success"
+ severity note;
+
+ when others =>
+-- default states begin here
+counter_state <= Disable;
+counter_clock <= Disable;
+
+test_bits <= (
+ (( counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and (not counter_out(0))) or
+ ((not counter_out(7)) and (not counter_out(6)) and (not counter_out(5)) and (not counter_out(4)) and (not counter_out(3)) and (not counter_out(2)) and (not counter_out(1)) and ( counter_out(0)))
+ );
+
+res_bits <= (
+ ((not counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and (not counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and (not counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and (not counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and (not counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and (not counter_out(2)) and ( counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and (not counter_out(1)) and ( counter_out(0))) or
+ (( counter_out(7)) and ( counter_out(6)) and ( counter_out(5)) and ( counter_out(4)) and ( counter_out(3)) and ( counter_out(2)) and ( counter_out(1)) and (not counter_out(0)))
+ );
+
+sum_check <= ('0' & counter_out(15 downto 8)) + ('0' & counter_out(7 downto 0)) + (x"00" & (counter_out(16) and counter_out(17)));
+sum_overflow_check <= (not (counter_out(15) xor counter_out(7))) and (counter_out(15) xor sum_check(7));
+sum_zero_check <= not (sum_check(7) or sum_check(6) or sum_check(5) or sum_check(4) or sum_check(3) or sum_check(2) or sum_check(1) or sum_check(0));
+half_sum_check <= ('0' & counter_out(11 downto 8)) + ('0' & counter_out(3 downto 0)) + (x"0" & (counter_out(16) and counter_out(17)));
+
+subtract_check <= ('0' & counter_out(7 downto 0)) - ('0' & counter_out(15 downto 8)) - (x"00" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+subtract_overflow_check <= (counter_out(7) xor counter_out(15)) and (counter_out(7) xor subtract_check(7));
+subtract_zero_check <= not (subtract_check(7) or subtract_check(6) or subtract_check(5) or subtract_check(4) or subtract_check(3) or subtract_check(2) or subtract_check(1) or subtract_check(0));
+half_difference_check <= ('0' & counter_out(3 downto 0)) - ('0' & counter_out(11 downto 8)) - (x"0" & (counter_out(16) and counter_out(17) and counter_out(18) and (not counter_out(19))));
+
+and_check <= counter_out(15 downto 8) and counter_out(7 downto 0);
+and_zero_check <= not (and_check(7) or and_check(6) or and_check(5) or and_check(4) or and_check(3) or and_check(2) or and_check(1) or and_check(0));
+and_parity_check <= not (and_check(7) xor and_check(6) xor and_check(5) xor and_check(4) xor and_check(3) xor and_check(2) xor and_check(1) xor and_check(0));
+
+xor_check <= counter_out(15 downto 8) xor counter_out(7 downto 0);
+xor_zero_check <= not (xor_check(7) or xor_check(6) or xor_check(5) or xor_check(4) or xor_check(3) or xor_check(2) or xor_check(1) or xor_check(0));
+xor_parity_check <= not (xor_check(7) xor xor_check(6) xor xor_check(5) xor xor_check(4) xor xor_check(3) xor xor_check(2) xor xor_check(1) xor xor_check(0));
+
+or_check <= counter_out(15 downto 8) or counter_out(7 downto 0);
+or_zero_check <= not (or_check(7) or or_check(6) or or_check(5) or or_check(4) or or_check(3) or or_check(2) or or_check(1) or or_check(0));
+or_parity_check <= not (or_check(7) xor or_check(6) xor or_check(5) xor or_check(4) xor or_check(3) xor or_check(2) xor or_check(1) xor or_check(0));
+
+rlc_check <= counter_out(6 downto 0) & counter_out(7);
+rlc_zero_check <= not (rlc_check(7) or rlc_check(6) or rlc_check(5) or rlc_check(4) or rlc_check(3) or rlc_check(2) or rlc_check(1) or rlc_check(0));
+rlc_parity_check <= not (rlc_check(7) xor rlc_check(6) xor rlc_check(5) xor rlc_check(4) xor rlc_check(3) xor rlc_check(2) xor rlc_check(1) xor rlc_check(0));
+
+rrc_check <= counter_out(0) & counter_out(7 downto 1);
+rrc_zero_check <= not (rrc_check(7) or rrc_check(6) or rrc_check(5) or rrc_check(4) or rrc_check(3) or rrc_check(2) or rrc_check(1) or rrc_check(0));
+rrc_parity_check <= not (rrc_check(7) xor rrc_check(6) xor rrc_check(5) xor rrc_check(4) xor rrc_check(3) xor rrc_check(2) xor rrc_check(1) xor rrc_check(0));
+
+rl_check <= counter_out(6 downto 0) & counter_out(16);
+rl_zero_check <= not (rl_check(7) or rl_check(6) or rl_check(5) or rl_check(4) or rl_check(3) or rl_check(2) or rl_check(1) or rl_check(0));
+rl_parity_check <= not (rl_check(7) xor rl_check(6) xor rl_check(5) xor rl_check(4) xor rl_check(3) xor rl_check(2) xor rl_check(1) xor rl_check(0));
+
+rr_check <= counter_out(16) & counter_out(7 downto 1);
+rr_zero_check <= not (rr_check(7) or rr_check(6) or rr_check(5) or rr_check(4) or rr_check(3) or rr_check(2) or rr_check(1) or rr_check(0));
+rr_parity_check <= not (rr_check(7) xor rr_check(6) xor rr_check(5) xor rr_check(4) xor rr_check(3) xor rr_check(2) xor rr_check(1) xor rr_check(0));
+
+cpl_check <= not counter_out(7 downto 0);
+
+sla_check <= counter_out(6 downto 0) & '0';
+sla_zero_check <= not (sla_check(7) or sla_check(6) or sla_check(5) or sla_check(4) or sla_check(3) or sla_check(2) or sla_check(1) or sla_check(0));
+sla_parity_check <= not (sla_check(7) xor sla_check(6) xor sla_check(5) xor sla_check(4) xor sla_check(3) xor sla_check(2) xor sla_check(1) xor sla_check(0));
+
+sra_check <= counter_out(7) & counter_out(7 downto 1);
+sra_zero_check <= not (sra_check(7) or sra_check(6) or sra_check(5) or sra_check(4) or sra_check(3) or sra_check(2) or sra_check(1) or sra_check(0));
+sra_parity_check <= not (sra_check(7) xor sra_check(6) xor sra_check(5) xor sra_check(4) xor sra_check(3) xor sra_check(2) xor sra_check(1) xor sra_check(0));
+
+sll_check <= counter_out(6 downto 0) & '0';
+sll_zero_check <= not (sll_check(7) or sll_check(6) or sll_check(5) or sll_check(4) or sll_check(3) or sll_check(2) or sll_check(1) or sll_check(0));
+sll_parity_check <= not (sll_check(7) xor sll_check(6) xor sll_check(5) xor sll_check(4) xor sll_check(3) xor sll_check(2) xor sll_check(1) xor sll_check(0));
+
+srl_check <= '0' & counter_out(7 downto 1);
+srl_zero_check <= not (srl_check(7) or srl_check(6) or srl_check(5) or srl_check(4) or srl_check(3) or srl_check(2) or srl_check(1) or srl_check(0));
+srl_parity_check <= not (srl_check(7) xor srl_check(6) xor srl_check(5) xor srl_check(4) xor srl_check(3) xor srl_check(2) xor srl_check(1) xor srl_check(0));
+
+inrc_zero <= not (counter_out(7) or counter_out(6) or counter_out(5) or counter_out(4) or counter_out(3) or counter_out(2) or counter_out(1) or counter_out(0));
+inrc_parity <= not (counter_out(7) xor counter_out(6) xor counter_out(5) xor counter_out(4) xor counter_out(3) xor counter_out(2) xor counter_out(1) xor counter_out(0));
+
+primary_rld_check <= counter_out(7 downto 4) & counter_out(15 downto 12);
+secondary_rld_check <= counter_out(11 downto 8) & counter_out(3 downto 0);
+rld_zero_check <= not (primary_rld_check(7) or primary_rld_check(6) or primary_rld_check(5) or primary_rld_check(4) or primary_rld_check(3) or primary_rld_check(2) or primary_rld_check(1) or primary_rld_check(0));
+rld_parity_check <= not (primary_rld_check(7) xor primary_rld_check(6) xor primary_rld_check(5) xor primary_rld_check(4) xor primary_rld_check(3) xor primary_rld_check(2) xor primary_rld_check(1) xor primary_rld_check(0));
+
+primary_rrd_check <= counter_out(7 downto 4) & counter_out(11 downto 8);
+secondary_rrd_check <= counter_out(3 downto 0) & counter_out(15 downto 12);
+rrd_zero_check <= not (primary_rrd_check(7) or primary_rrd_check(6) or primary_rrd_check(5) or primary_rrd_check(4) or primary_rrd_check(3) or primary_rrd_check(2) or primary_rrd_check(1) or primary_rrd_check(0));
+rrd_parity_check <= not (primary_rrd_check(7) xor primary_rrd_check(6) xor primary_rrd_check(5) xor primary_rrd_check(4) xor primary_rrd_check(3) xor primary_rrd_check(2) xor primary_rrd_check(1) xor primary_rrd_check(0));
+
+bmtc_check <= counter_out(7 downto 0) or counter_out(15 downto 8);
+bmtc_parity_check <= not (bmtc_check(7) or bmtc_check(6) or bmtc_check(5) or bmtc_check(4) or bmtc_check(3) or bmtc_check(2) or bmtc_check(1) or bmtc_check(0));
+-- default states end here
+
+ next_state <= zero;
+ assert false
+ report "state machine failure"
+ severity failure;
+
+ end case;
+ end if;
+ end process;
+end;
diff --git a/testsuite/gna/issue30/testsuite.sh b/testsuite/gna/issue30/testsuite.sh
new file mode 100755
index 000000000..39db46a30
--- /dev/null
+++ b/testsuite/gna/issue30/testsuite.sh
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+GHDL_FLAGS=--ieee=synopsys
+analyze definitions.vhdl
+analyze alu.vhdl
+analyze basicblocks.vhdl
+analyze tb-alu.vhdl
+elab_simulate tb_alu --stop-time=50ns
+
+clean
+
+echo "Test successful"
+