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

Subversion Repositories ion

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /ion/trunk
    from Rev 46 to Rev 47
    Reverse comparison

Rev 46 → Rev 47

/vhdl/tb/mips_tb1.vhdl
1,16 → 1,15
--##############################################################################
-- This file was generated automatically from '/src/mips_tb1_template.vhdl'.
--
-- This file was generated automatically from '/src/mips_tb0_template.vhdl'.
--
--------------------------------------------------------------------------------
-- Simulation test bench TB1 -- not synthesizable.
-- Simulation test bench TB0 -- not synthesizable.
--
-- Simulates the CPU core connected to two memory blocks, a read-only block
-- initialized with code and a read-write block initialized with all data,
-- including read-only data. The makefile for the source samples include targets
-- to build simulation test benches using this template -- those source samples
-- that support this template.
-- Simulates the CPU core connected to a single memory block initialized with
-- the program object code and (initialized) data. The makefile for the source
-- samples include targets to build simulation test benches using this template.
--
-- The memory setup is meant to test the 'bare' cpu, without cache.
-- The memory setup is meant to test the 'bare' cpu, without cache and with
-- all object code in a single 3-port memory block.
-- Address decoding is harcoded to that of Plasma system, for the time being.
--
-- Console output (at addresses compatible to Plasma's) is logged to text file
23,15 → 22,14
-- WARNING: Will only work on Modelsim; uses custom library SignalSpy.
--##############################################################################
 
library ieee, modelsim_lib;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use std.textio.all;
 
use work.mips_pkg.all;
 
use modelsim_lib.util.all;
use std.textio.all;
use work.mips_tb_pkg.all;
use work.txt_util.all;
 
 
45,13 → 43,15
 
-- Master clock period
constant T : time := 20 ns;
-- Time the URAT is unavailable after writing to the TX register
-- Time the UART is unavailable after writing to the TX register
-- WARNING: slite does not simulate this. The logs may be different when > 0.0!
constant SIMULATED_UART_TX_TIME : time := 0.0 us;
 
-- Simulation length in clock cycles
-- 2000 is enough for 'hello' sample, 22000 enough for 10 digits of pi
constant SIMULATION_LENGTH : integer := 2000;
constant SIMULATION_LENGTH : integer := 3000;
 
--------------------------------------------------------------------------------
-- UUT & interface signals
 
87,15 → 87,17
-- Logging signals
 
-- These are internal CPU signal mirrored using Modelsim's SignalSpy
signal rbank : t_rbank;
signal pc, cp0_epc : std_logic_vector(31 downto 2);
signal reg_hi, reg_lo : t_word;
signal negate_reg_lo : std_logic;
signal ld_upper_byte : std_logic;
signal ld_upper_hword : std_logic;
 
--signal rbank : t_rbank;
--signal pc, cp0_epc : std_logic_vector(31 downto 2);
--signal reg_hi, reg_lo : t_word;
--signal negate_reg_lo : std_logic;
--signal ld_upper_byte : std_logic;
--signal ld_upper_hword : std_logic;
signal log_info : t_log_info;
-- Log file
file l_file: TEXT open write_mode is "hw_sim_log.txt";
file log_file: TEXT open write_mode is "hw_sim_log.txt";
 
-- Console output log file
file con_file: TEXT open write_mode is "hw_sim_console_log.txt";
109,24 → 111,147
signal con_line_ix : integer := 1;
 
 
 
--------------------------------------------------------------------------------
 
-- Data RAM table and interface signals ----------------------------------------
constant DATA_RAM_SIZE : integer := 256;
constant DATA_ADDR_SIZE : integer := 8;
subtype t_data_address is std_logic_vector(DATA_ADDR_SIZE-1 downto 0);
-- (this table holds one byte-slice; the RAM will have 4 of these)
type t_data_ram is array(0 to DATA_RAM_SIZE-1) of std_logic_vector(7 downto 0);
constant MEM_SIZE : integer := 1024;
constant ADDR_SIZE : integer := 10;
 
subtype t_address is std_logic_vector(ADDR_SIZE-1 downto 0);
 
signal addr_rd, addr_wr : t_address;
signal addr_code : t_address;
 
type t_code_ram is array(0 to MEM_SIZE-1) of std_logic_vector(7 downto 0);
 
subtype t_data_address is std_logic_vector(ADDR_SIZE-1 downto 0);
signal data_addr_rd : t_data_address;
signal data_addr_wr : t_data_address;
signal code_addr_rd : t_data_address;
 
 
-- ram0 is LSB, ram3 is MSB
signal ram3 : t_data_ram := (
X"63",X"69",X"74",X"3A",X"62",X"20",X"31",X"20",
X"30",X"38",X"67",X"76",X"69",X"20",X"34",X"00",
X"0A",X"6C",X"57",X"64",X"0A",X"00",X"00",X"00",
signal ram3 : t_code_ram := (
X"3C",X"27",X"3C",X"24",X"3C",X"24",X"00",X"00",
X"10",X"00",X"00",X"00",X"00",X"00",X"00",X"40",
X"33",X"34",X"13",X"23",X"13",X"23",X"17",X"00",
X"08",X"20",X"08",X"20",X"08",X"20",X"08",X"20",
X"40",X"40",X"00",X"33",X"17",X"23",X"03",X"00",
X"23",X"03",X"24",X"24",X"00",X"00",X"00",X"40",
X"3C",X"34",X"34",X"34",X"34",X"A2",X"A2",X"A2",
X"A2",X"A2",X"A2",X"A2",X"A2",X"34",X"A2",X"34",
X"A2",X"34",X"A2",X"34",X"A2",X"34",X"A2",X"A2",
X"A2",X"34",X"A2",X"34",X"34",X"00",X"A2",X"A2",
X"A2",X"34",X"A2",X"34",X"20",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"24",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"34",X"00",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"34",X"14",X"00",X"00",X"24",X"14",
X"3C",X"14",X"00",X"00",X"00",X"00",X"00",X"A2",
X"00",X"20",X"A2",X"24",X"34",X"14",X"00",X"00",
X"24",X"14",X"3C",X"14",X"00",X"00",X"00",X"00",
X"00",X"00",X"A2",X"34",X"24",X"14",X"00",X"00",
X"24",X"14",X"3C",X"14",X"00",X"00",X"00",X"00",
X"00",X"00",X"A2",X"24",X"24",X"14",X"00",X"00",
X"24",X"14",X"3C",X"14",X"00",X"00",X"00",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",X"14",
X"00",X"00",X"00",X"00",X"00",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"34",X"00",X"00",X"00",X"A2",
X"24",X"34",X"00",X"00",X"00",X"00",X"00",X"20",
X"A2",X"34",X"24",X"00",X"00",X"00",X"00",X"00",
X"20",X"A2",X"24",X"24",X"00",X"00",X"00",X"00",
X"20",X"A2",X"3C",X"34",X"3C",X"34",X"00",X"00",
X"24",X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",
X"00",X"00",X"00",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"34",X"00",X"20",X"A2",X"00",X"20",X"A2",
X"24",X"00",X"20",X"A2",X"00",X"20",X"A2",X"24",
X"00",X"20",X"A2",X"00",X"20",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"28",X"20",X"A2",X"28",X"20",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"2C",X"20",
X"A2",X"2C",X"20",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"34",X"00",X"20",X"A2",X"00",X"20",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"A2",X"34",X"A2",
X"34",X"A2",X"34",X"A2",X"34",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"34",X"10",X"A2",X"A2",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"34",X"34",
X"34",X"34",X"04",X"A2",X"A2",X"10",X"A2",X"A2",
X"A2",X"03",X"A2",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"34",X"34",X"34",X"34",X"34",X"34",X"10",
X"A2",X"A2",X"10",X"A2",X"A2",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"34",X"34",X"34",X"34",X"34",
X"3C",X"34",X"34",X"04",X"A2",X"A2",X"04",X"A2",
X"A2",X"04",X"00",X"A2",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"34",X"34",X"34",X"34",X"34",X"3C",
X"34",X"04",X"00",X"A2",X"04",X"00",X"A2",X"10",
X"A2",X"A2",X"A2",X"03",X"A2",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"34",X"34",X"34",X"34",X"3C",
X"34",X"1C",X"A2",X"A2",X"1C",X"A2",X"A2",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"34",X"34",
X"34",X"3C",X"34",X"18",X"A2",X"A2",X"18",X"A2",
X"A2",X"18",X"00",X"A2",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"34",X"34",X"34",X"34",X"34",X"3C",
X"34",X"34",X"04",X"A2",X"A2",X"04",X"A2",X"A2",
X"04",X"00",X"A2",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"34",X"34",X"34",X"34",X"34",X"3C",X"34",
X"04",X"00",X"A2",X"04",X"00",X"A2",X"10",X"A2",
X"A2",X"A2",X"03",X"A2",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"34",X"34",X"34",X"34",X"34",X"34",
X"14",X"A2",X"A2",X"14",X"A2",X"A2",X"A2",X"A2",
X"A2",X"34",X"A2",X"34",X"34",X"34",X"08",X"A2",
X"A2",X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",
X"34",X"34",X"34",X"34",X"0C",X"A2",X"A2",X"10",
X"A2",X"A2",X"A2",X"03",X"A2",X"A2",X"A2",X"A2",
X"34",X"A2",X"34",X"34",X"34",X"34",X"34",X"34",
X"3C",X"24",X"00",X"A2",X"A2",X"10",X"A2",X"A2",
X"A2",X"03",X"A2",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"34",X"34",X"3C",X"24",X"00",X"A2",X"A2",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"00",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",X"20",
X"A2",X"00",X"80",X"00",X"08",X"20",X"20",X"00",
X"A2",X"08",X"00",X"00",X"08",X"00",X"20",X"A2",
X"A2",X"34",X"A2",X"34",X"00",X"20",X"A2",X"00",
X"80",X"00",X"08",X"20",X"20",X"00",X"08",X"00",
X"20",X"A2",X"A2",X"34",X"A2",X"34",X"A2",X"34",
X"A2",X"34",X"A2",X"A2",X"A2",X"34",X"A2",X"00",
X"3C",X"34",X"AC",X"80",X"A2",X"80",X"00",X"A2",
X"80",X"00",X"A2",X"80",X"00",X"00",X"20",X"A2",
X"20",X"A2",X"A2",X"A2",X"34",X"A2",X"00",X"3C",
X"34",X"AC",X"80",X"A2",X"80",X"A2",X"80",X"A2",
X"80",X"A2",X"A2",X"A2",X"34",X"A2",X"00",X"3C",
X"34",X"AC",X"84",X"A2",X"84",X"A2",X"A2",X"A2",
X"34",X"A2",X"00",X"3C",X"34",X"AC",X"84",X"A2",
X"84",X"A2",X"A2",X"A2",X"34",X"A2",X"00",X"24",
X"AC",X"34",X"8C",X"A2",X"A2",X"A2",X"34",X"A2",
X"34",X"A2",X"A2",X"A2",X"34",X"A2",X"00",X"34",
X"A4",X"80",X"A2",X"80",X"A2",X"A2",X"A2",X"34",
X"A2",X"00",X"3C",X"34",X"AC",X"80",X"A2",X"80",
X"A2",X"80",X"A2",X"80",X"A2",X"A2",X"A2",X"34",
X"A2",X"34",X"A2",X"34",X"A2",X"34",X"A2",X"34",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"30",X"A2",
X"A2",X"A2",X"34",X"A2",X"3C",X"00",X"A2",X"A2",
X"A2",X"34",X"A2",X"3C",X"34",X"3C",X"34",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"34",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"34",X"00",X"A2",
X"A2",X"A2",X"34",X"A2",X"34",X"38",X"A2",X"A2",
X"A2",X"34",X"A2",X"34",X"A2",X"34",X"A2",X"34",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"00",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"00",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"00",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"00",X"00",
X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"A2",X"34",
X"A2",X"34",X"A2",X"34",X"A2",X"A2",X"A2",X"34",
X"A2",X"3C",X"34",X"00",X"00",X"A2",X"A2",X"A2",
X"34",X"A2",X"3C",X"34",X"34",X"00",X"00",X"A2",
X"A2",X"A2",X"34",X"A2",X"3C",X"34",X"00",X"A2",
X"3C",X"00",X"20",X"A2",X"A2",X"A2",X"34",X"A2",
X"3C",X"34",X"34",X"00",X"A2",X"34",X"3C",X"00",
X"20",X"A2",X"A2",X"A2",X"34",X"A2",X"3C",X"34",
X"00",X"A2",X"3C",X"00",X"A2",X"A2",X"A2",X"34",
X"A2",X"3C",X"34",X"34",X"00",X"A2",X"34",X"3C",
X"00",X"A2",X"A2",X"A2",X"34",X"A2",X"34",X"A2",
X"34",X"A2",X"34",X"A2",X"A2",X"A2",X"08",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
133,34 → 258,130
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal ram2 : t_data_ram := (
X"6F",X"6C",X"69",X"20",X"20",X"32",X"20",X"31",
X"39",X"0A",X"63",X"65",X"6F",X"20",X"2E",X"00",
X"0A",X"6C",X"6F",X"21",X"00",X"00",X"00",X"00",
signal ram2 : t_code_ram := (
X"1C",X"9C",X"04",X"84",X"05",X"A5",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"1A",
X"5A",X"1B",X"5B",X"7B",X"5B",X"7B",X"5B",X"00",
X"00",X"84",X"00",X"84",X"00",X"84",X"00",X"84",
X"1B",X"1A",X"1A",X"5A",X"40",X"7B",X"60",X"00",
X"7B",X"60",X"02",X"03",X"43",X"00",X"00",X"80",
X"14",X"15",X"16",X"17",X"18",X"97",X"95",X"97",
X"95",X"97",X"95",X"97",X"95",X"02",X"82",X"02",
X"82",X"02",X"82",X"02",X"82",X"02",X"82",X"97",
X"95",X"02",X"82",X"03",X"04",X"64",X"82",X"97",
X"95",X"02",X"82",X"04",X"82",X"82",X"97",X"95",
X"02",X"82",X"04",X"85",X"85",X"97",X"95",X"02",
X"82",X"03",X"04",X"64",X"82",X"97",X"95",X"02",
X"82",X"02",X"03",X"60",X"43",X"07",X"01",X"61",
X"01",X"41",X"00",X"06",X"00",X"00",X"00",X"84",
X"00",X"84",X"84",X"02",X"03",X"60",X"43",X"07",
X"01",X"61",X"01",X"41",X"00",X"06",X"00",X"00",
X"00",X"04",X"84",X"02",X"03",X"60",X"43",X"07",
X"01",X"61",X"01",X"41",X"00",X"06",X"00",X"00",
X"00",X"04",X"84",X"02",X"03",X"60",X"43",X"07",
X"01",X"61",X"01",X"41",X"00",X"06",X"00",X"00",
X"84",X"97",X"95",X"02",X"82",X"02",X"03",X"60",
X"43",X"07",X"00",X"00",X"00",X"84",X"97",X"95",
X"02",X"82",X"02",X"03",X"43",X"00",X"00",X"84",
X"02",X"03",X"43",X"00",X"00",X"04",X"85",X"84",
X"84",X"02",X"03",X"43",X"00",X"00",X"04",X"85",
X"84",X"84",X"02",X"03",X"43",X"00",X"00",X"85",
X"84",X"84",X"04",X"84",X"05",X"A5",X"85",X"00",
X"C7",X"87",X"97",X"95",X"02",X"82",X"02",X"03",
X"43",X"00",X"00",X"84",X"97",X"95",X"02",X"82",
X"02",X"03",X"43",X"85",X"85",X"62",X"85",X"85",
X"02",X"43",X"85",X"85",X"62",X"85",X"85",X"03",
X"43",X"85",X"85",X"62",X"85",X"85",X"97",X"95",
X"02",X"82",X"02",X"44",X"85",X"85",X"44",X"85",
X"85",X"97",X"95",X"02",X"82",X"02",X"44",X"85",
X"85",X"44",X"85",X"85",X"97",X"95",X"02",X"82",
X"02",X"03",X"43",X"85",X"85",X"62",X"85",X"85",
X"97",X"95",X"02",X"82",X"03",X"04",X"64",X"82",
X"97",X"95",X"02",X"82",X"03",X"04",X"64",X"82",
X"97",X"95",X"02",X"82",X"02",X"82",X"02",X"82",
X"02",X"82",X"02",X"82",X"02",X"82",X"97",X"95",
X"02",X"82",X"0A",X"0B",X"00",X"8A",X"96",X"8B",
X"97",X"95",X"02",X"82",X"0A",X"0B",X"0C",X"0D",
X"0E",X"0F",X"11",X"8A",X"8D",X"00",X"8E",X"8F",
X"8B",X"E0",X"8C",X"96",X"97",X"95",X"02",X"82",
X"0A",X"0B",X"0C",X"0D",X"02",X"03",X"04",X"43",
X"8A",X"8B",X"64",X"8C",X"96",X"8D",X"97",X"95",
X"02",X"82",X"0A",X"0B",X"0C",X"0D",X"0F",X"02",
X"03",X"63",X"04",X"61",X"8A",X"8B",X"41",X"8C",
X"96",X"01",X"00",X"8F",X"8D",X"97",X"95",X"02",
X"82",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",X"03",
X"63",X"71",X"00",X"8A",X"11",X"00",X"8D",X"00",
X"8E",X"8F",X"8B",X"E0",X"8C",X"96",X"97",X"95",
X"02",X"82",X"0A",X"0B",X"0C",X"0D",X"02",X"03",
X"63",X"60",X"8A",X"8B",X"40",X"8C",X"96",X"8D",
X"97",X"95",X"02",X"82",X"0A",X"0B",X"0C",X"0D",
X"02",X"03",X"63",X"40",X"8A",X"8B",X"60",X"8C",
X"96",X"00",X"00",X"96",X"8D",X"97",X"95",X"02",
X"82",X"0A",X"0B",X"0C",X"0D",X"0E",X"02",X"03",
X"63",X"04",X"40",X"8A",X"8B",X"60",X"8C",X"96",
X"80",X"00",X"8D",X"8E",X"97",X"95",X"02",X"82",
X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",X"03",X"63",
X"10",X"00",X"8A",X"70",X"00",X"8D",X"00",X"8E",
X"8F",X"8B",X"E0",X"8C",X"96",X"97",X"95",X"02",
X"82",X"0A",X"0B",X"0C",X"0D",X"02",X"03",X"04",
X"64",X"8A",X"8B",X"43",X"8C",X"96",X"8D",X"97",
X"95",X"02",X"82",X"0A",X"0B",X"0F",X"00",X"8A",
X"8F",X"8B",X"97",X"95",X"02",X"82",X"0A",X"0B",
X"0C",X"0D",X"0E",X"0F",X"00",X"8A",X"8D",X"00",
X"8E",X"8F",X"8B",X"E0",X"8C",X"96",X"97",X"95",
X"02",X"82",X"0A",X"0B",X"0C",X"0D",X"0E",X"0F",
X"03",X"63",X"60",X"8A",X"8D",X"00",X"8E",X"8F",
X"8B",X"E0",X"8C",X"96",X"97",X"95",X"02",X"82",
X"0A",X"0B",X"0F",X"03",X"63",X"60",X"8A",X"8F",
X"8B",X"97",X"95",X"02",X"82",X"02",X"00",X"82",
X"97",X"95",X"02",X"82",X"02",X"04",X"00",X"84",
X"84",X"00",X"42",X"00",X"00",X"84",X"84",X"00",
X"84",X"00",X"00",X"00",X"00",X"00",X"84",X"97",
X"95",X"02",X"82",X"04",X"00",X"84",X"84",X"00",
X"42",X"00",X"00",X"84",X"84",X"00",X"00",X"00",
X"84",X"97",X"95",X"02",X"82",X"02",X"82",X"02",
X"82",X"02",X"82",X"97",X"95",X"02",X"82",X"18",
X"03",X"63",X"43",X"44",X"84",X"44",X"00",X"84",
X"44",X"00",X"84",X"42",X"00",X"02",X"63",X"83",
X"42",X"82",X"97",X"95",X"02",X"82",X"18",X"03",
X"63",X"43",X"44",X"84",X"44",X"84",X"44",X"84",
X"42",X"82",X"97",X"95",X"02",X"82",X"18",X"03",
X"63",X"43",X"44",X"84",X"42",X"82",X"97",X"95",
X"02",X"82",X"18",X"03",X"63",X"43",X"44",X"84",
X"42",X"82",X"97",X"95",X"02",X"82",X"18",X"03",
X"43",X"03",X"42",X"82",X"97",X"95",X"02",X"82",
X"02",X"82",X"97",X"95",X"02",X"82",X"18",X"02",
X"82",X"83",X"83",X"82",X"82",X"97",X"95",X"02",
X"82",X"18",X"03",X"63",X"43",X"44",X"84",X"44",
X"84",X"44",X"84",X"42",X"82",X"97",X"95",X"02",
X"82",X"02",X"82",X"02",X"82",X"02",X"82",X"02",
X"82",X"97",X"95",X"02",X"82",X"02",X"03",X"43",
X"84",X"97",X"95",X"02",X"82",X"02",X"44",X"84",
X"97",X"95",X"02",X"82",X"02",X"02",X"83",X"97",
X"95",X"02",X"82",X"02",X"42",X"03",X"63",X"43",
X"84",X"97",X"95",X"02",X"82",X"02",X"03",X"43",
X"84",X"97",X"95",X"02",X"82",X"02",X"44",X"84",
X"97",X"95",X"02",X"82",X"02",X"03",X"43",X"84",
X"97",X"95",X"02",X"82",X"02",X"44",X"84",X"97",
X"95",X"02",X"82",X"02",X"82",X"02",X"82",X"02",
X"82",X"97",X"95",X"02",X"82",X"02",X"40",X"00",
X"83",X"97",X"95",X"02",X"82",X"02",X"40",X"00",
X"83",X"97",X"95",X"02",X"82",X"02",X"40",X"00",
X"83",X"97",X"95",X"02",X"82",X"02",X"40",X"00",
X"83",X"97",X"95",X"02",X"82",X"02",X"82",X"02",
X"82",X"02",X"82",X"02",X"82",X"97",X"95",X"02",
X"82",X"02",X"42",X"02",X"03",X"83",X"97",X"95",
X"02",X"82",X"02",X"42",X"03",X"62",X"03",X"83",
X"97",X"95",X"02",X"82",X"02",X"42",X"02",X"83",
X"02",X"02",X"63",X"83",X"97",X"95",X"02",X"82",
X"02",X"42",X"03",X"62",X"83",X"03",X"02",X"62",
X"63",X"83",X"97",X"95",X"02",X"82",X"02",X"42",
X"02",X"83",X"02",X"02",X"83",X"97",X"95",X"02",
X"82",X"02",X"42",X"03",X"62",X"84",X"03",X"02",
X"62",X"83",X"97",X"95",X"02",X"82",X"02",X"82",
X"02",X"82",X"02",X"82",X"97",X"95",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
167,43 → 388,48
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal ram1 : t_data_ram := (
X"6D",X"65",X"6D",X"46",X"20",X"30",X"2D",X"33",
X"3A",X"00",X"63",X"72",X"6E",X"34",X"31",X"00",
X"48",X"6F",X"72",X"0A",X"00",X"00",X"00",X"00",
signal ram1 : t_code_ram := (
X"00",X"8F",X"00",X"0F",X"00",X"0F",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"68",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"70",X"68",X"D7",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"60",
X"20",X"00",X"00",X"00",X"0F",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"00",
X"00",X"1D",X"00",X"00",X"00",X"00",X"FF",X"00",
X"80",X"00",X"00",X"00",X"10",X"00",X"20",X"00",
X"20",X"00",X"00",X"FB",X"00",X"00",X"00",X"00",
X"FF",X"00",X"80",X"00",X"00",X"00",X"10",X"00",
X"20",X"20",X"00",X"06",X"FF",X"00",X"00",X"00",
X"FF",X"00",X"80",X"00",X"00",X"00",X"10",X"00",
X"20",X"20",X"00",X"FC",X"FF",X"00",X"00",X"00",
X"FF",X"00",X"80",X"00",X"00",X"00",X"10",X"20",
X"00",X"00",X"00",X"00",X"00",X"03",X"00",X"00",
X"00",X"00",X"10",X"00",X"20",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"00",
X"FF",X"00",X"00",X"28",X"20",X"20",X"20",X"00",
X"00",X"00",X"FF",X"00",X"28",X"20",X"20",X"20",
X"00",X"00",X"FF",X"FF",X"00",X"28",X"20",X"20",
X"00",X"00",X"FE",X"62",X"00",X"8D",X"00",X"30",
X"09",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"20",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"20",X"00",X"00",X"20",X"00",X"00",
X"FF",X"20",X"00",X"00",X"20",X"00",X"00",X"FF",
X"20",X"00",X"00",X"20",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"20",X"00",X"00",X"20",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
213,361 → 439,79
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"FF",X"12",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",
X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",
X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"FF",X"12",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",
X"12",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"12",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"02",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal ram0 : t_data_ram := (
X"70",X"20",X"65",X"65",X"32",X"31",X"2D",X"3A",
X"33",X"00",X"20",X"73",X"3A",X"2E",X"0A",X"00",
X"65",X"20",X"6C",X"0A",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"09",X"F8",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"09",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"02",X"00",X"00",X"00",
X"00",X"02",X"00",X"00",X"02",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"FF",X"00",X"00",
X"00",X"00",X"02",X"00",X"00",X"00",X"02",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",
X"41",X"43",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"1A",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"41",
X"43",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
 
 
-- Code RAM table and interface signals ----------------------------------------
constant CODE_RAM_SIZE : integer := 1024;
constant CODE_ADDR_SIZE : integer := 10;
subtype t_code_address is std_logic_vector(CODE_ADDR_SIZE-1 downto 0);
-- (this table holds one byte-slice; the RAM will have 4 of these)
type t_code_ram is array(0 to CODE_RAM_SIZE-1) of std_logic_vector(7 downto 0);
 
signal code_addr_rd : t_data_address;
 
-- rom0 is LSB, rom3 is MSB
signal rom3 : t_code_ram := (
X"3C",X"27",X"3C",X"24",X"3C",X"24",X"3C",X"27",
X"AC",X"00",X"14",X"24",X"0C",X"00",X"08",X"23",
X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",
X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",
X"AF",X"AF",X"40",X"23",X"AF",X"00",X"AF",X"00",
X"AF",X"3C",X"8C",X"00",X"8C",X"00",X"00",X"0C",
X"23",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",
X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",X"8F",
X"8F",X"8F",X"8F",X"8F",X"8F",X"00",X"03",X"8F",
X"00",X"03",X"23",X"34",X"03",X"40",X"40",X"03",
X"40",X"00",X"00",X"3C",X"24",X"8C",X"00",X"AC",
X"8C",X"00",X"AC",X"8C",X"00",X"AC",X"8C",X"00",
X"03",X"AC",X"3C",X"37",X"03",X"00",X"AC",X"AC",
X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",X"AC",
X"AC",X"AC",X"03",X"34",X"8C",X"8C",X"8C",X"8C",
X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",
X"00",X"03",X"34",X"00",X"00",X"00",X"03",X"AC",
X"00",X"03",X"00",X"3C",X"27",X"AF",X"0C",X"24",
X"3C",X"0C",X"24",X"3C",X"8F",X"24",X"08",X"27",
X"3C",X"8C",X"00",X"30",X"10",X"3C",X"AC",X"03",
X"00",X"90",X"00",X"10",X"24",X"3C",X"3C",X"24",
X"10",X"00",X"24",X"8C",X"00",X"30",X"10",X"00",
X"AC",X"90",X"00",X"14",X"00",X"03",X"00",X"8C",
X"00",X"30",X"10",X"00",X"AC",X"08",X"24",X"24",
X"3C",X"3C",X"24",X"00",X"30",X"2C",X"10",X"00",
X"8C",X"00",X"30",X"10",X"00",X"24",X"24",X"AD",
X"14",X"00",X"03",X"00",X"8C",X"00",X"30",X"10",
X"00",X"24",X"24",X"AD",X"14",X"00",X"03",X"00",
X"3C",X"8C",X"00",X"30",X"10",X"3C",X"24",X"AC",
X"03",X"00",X"3C",X"8C",X"03",X"30",X"3C",X"8C",
X"00",X"30",X"10",X"3C",X"8C",X"03",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal rom2 : t_code_ram := (
X"1C",X"9C",X"05",X"A5",X"04",X"84",X"1D",X"BD",
X"A0",X"A4",X"60",X"A5",X"00",X"00",X"00",X"BD",
X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",X"A8",
X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",X"B8",
X"B9",X"BF",X"1A",X"5A",X"BA",X"00",X"BB",X"00",
X"BB",X"06",X"C4",X"00",X"C6",X"00",X"86",X"00",
X"A5",X"A1",X"A2",X"A3",X"A4",X"A5",X"A6",X"A7",
X"A8",X"A9",X"AA",X"AB",X"AC",X"AD",X"AE",X"AF",
X"B8",X"B9",X"BF",X"BA",X"BB",X"00",X"60",X"BB",
X"00",X"60",X"BD",X"1B",X"40",X"9B",X"02",X"E0",
X"84",X"00",X"00",X"05",X"A5",X"A6",X"00",X"06",
X"A6",X"00",X"06",X"A6",X"00",X"06",X"A6",X"00",
X"E0",X"06",X"1A",X"5A",X"40",X"00",X"90",X"91",
X"92",X"93",X"94",X"95",X"96",X"97",X"9E",X"9C",
X"9D",X"9F",X"E0",X"02",X"90",X"91",X"92",X"93",
X"94",X"95",X"96",X"97",X"9E",X"9C",X"9D",X"9F",
X"00",X"E0",X"A2",X"85",X"00",X"00",X"E0",X"C4",
X"00",X"E0",X"00",X"04",X"BD",X"BF",X"00",X"84",
X"04",X"00",X"84",X"04",X"BF",X"84",X"00",X"BD",
X"03",X"62",X"00",X"42",X"40",X"02",X"44",X"E0",
X"00",X"85",X"00",X"A0",X"07",X"03",X"06",X"08",
X"A7",X"00",X"84",X"62",X"00",X"42",X"40",X"00",
X"C5",X"85",X"00",X"A0",X"00",X"E0",X"00",X"62",
X"00",X"42",X"40",X"00",X"C8",X"00",X"84",X"05",
X"02",X"08",X"07",X"A4",X"C6",X"C3",X"60",X"00",
X"43",X"00",X"63",X"60",X"00",X"C6",X"A5",X"06",
X"A7",X"A4",X"E0",X"00",X"43",X"00",X"63",X"60",
X"00",X"C6",X"A5",X"06",X"A7",X"A4",X"E0",X"00",
X"03",X"62",X"00",X"42",X"40",X"02",X"03",X"43",
X"E0",X"00",X"02",X"42",X"E0",X"42",X"03",X"62",
X"00",X"42",X"40",X"02",X"42",X"E0",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal rom1 : t_code_ram := (
X"80",X"7F",X"80",X"00",X"80",X"02",X"80",X"02",
X"00",X"18",X"FF",X"00",X"00",X"00",X"00",X"FF",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"70",X"FF",X"00",X"D8",X"00",X"D8",
X"00",X"20",X"00",X"00",X"00",X"00",X"20",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"60",X"60",X"00",
X"60",X"00",X"00",X"00",X"01",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"20",X"41",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"10",X"41",X"43",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"10",X"20",X"00",X"00",
X"00",X"00",X"00",X"80",X"FF",X"00",X"00",X"00",
X"80",X"00",X"00",X"80",X"00",X"00",X"00",X"00",
X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
X"10",X"00",X"00",X"00",X"00",X"20",X"20",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",
X"00",X"00",X"00",X"FF",X"00",X"00",X"10",X"00",
X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",
X"20",X"20",X"FF",X"30",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"FF",X"00",X"00",X"FF",X"00",
X"FF",X"30",X"00",X"00",X"00",X"00",X"00",X"FF",
X"00",X"00",X"FF",X"00",X"FF",X"30",X"00",X"00",
X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
X"00",X"00",X"20",X"00",X"00",X"00",X"20",X"00",
X"00",X"00",X"FF",X"20",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"07",X"60",X"20",
X"00",X"00",X"00",X"00",X"00",X"07",X"60",X"00",
X"00",X"00",X"00",X"00",X"00",X"1C",X"00",X"00",
X"00",X"00",X"00",X"F0",X"F0",X"0F",X"0F",X"20",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"20",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"F0",X"F0",X"20",X"00",
X"00",X"00",X"00",X"00",X"F0",X"F0",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"18",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"40",X"42",X"1A",X"1E",X"00",X"00",X"00",
X"00",X"00",X"40",X"42",X"00",X"18",X"1E",X"00",
X"00",X"00",X"00",X"00",X"40",X"42",X"1C",X"00",
X"84",X"1E",X"FF",X"00",X"00",X"00",X"00",X"00",
X"40",X"42",X"00",X"18",X"00",X"00",X"84",X"18",
X"FF",X"00",X"00",X"00",X"00",X"00",X"40",X"42",
X"1C",X"00",X"84",X"1E",X"00",X"00",X"00",X"00",
X"00",X"40",X"42",X"00",X"20",X"00",X"00",X"84",
X"18",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"03",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
574,125 → 518,130
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal rom0 : t_code_ram := (
X"00",X"F0",X"00",X"58",X"00",X"60",X"00",X"48",
X"00",X"2A",X"FD",X"04",X"8B",X"00",X"0E",X"98",
X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
X"30",X"34",X"38",X"3C",X"40",X"44",X"48",X"4C",
X"50",X"54",X"00",X"FC",X"58",X"10",X"5C",X"12",
X"60",X"00",X"20",X"00",X"10",X"00",X"24",X"E0",
X"00",X"10",X"14",X"18",X"1C",X"20",X"24",X"28",
X"2C",X"30",X"34",X"38",X"3C",X"40",X"44",X"48",
X"4C",X"50",X"54",X"58",X"5C",X"00",X"11",X"60",
X"00",X"13",X"68",X"01",X"08",X"00",X"00",X"08",
X"00",X"00",X"00",X"00",X"88",X"00",X"00",X"3C",
X"04",X"00",X"40",X"08",X"00",X"44",X"0C",X"00",
X"08",X"48",X"00",X"3C",X"08",X"00",X"00",X"04",
X"08",X"0C",X"10",X"14",X"18",X"1C",X"20",X"24",
X"28",X"2C",X"08",X"00",X"00",X"04",X"08",X"0C",
X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
X"00",X"08",X"00",X"19",X"12",X"10",X"08",X"00",
X"0C",X"08",X"00",X"00",X"E8",X"14",X"A1",X"00",
X"00",X"A1",X"28",X"00",X"14",X"40",X"A1",X"18",
X"00",X"20",X"00",X"02",X"FC",X"00",X"00",X"08",
X"21",X"00",X"00",X"11",X"0A",X"00",X"00",X"0D",
X"0E",X"00",X"01",X"20",X"00",X"02",X"FC",X"00",
X"00",X"00",X"00",X"F4",X"00",X"08",X"21",X"20",
X"00",X"02",X"FC",X"00",X"00",X"AB",X"01",X"1C",
X"00",X"00",X"FC",X"06",X"0F",X"0A",X"0D",X"00",
X"20",X"00",X"02",X"FC",X"00",X"30",X"FC",X"00",
X"F3",X"06",X"08",X"00",X"20",X"00",X"02",X"FC",
X"00",X"57",X"FC",X"00",X"E7",X"06",X"08",X"00",
X"00",X"20",X"00",X"02",X"FC",X"00",X"49",X"00",
X"08",X"00",X"00",X"20",X"08",X"01",X"00",X"20",
X"00",X"01",X"FC",X"00",X"00",X"08",X"00",X"00",
signal ram0 : t_code_ram := (
X"01",X"10",X"00",X"20",X"00",X"20",X"00",X"00",
X"21",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"1F",X"08",X"09",X"01",X"05",X"01",X"07",X"00",
X"20",X"04",X"20",X"05",X"20",X"06",X"20",X"0F",
X"00",X"00",X"C2",X"01",X"03",X"04",X"08",X"00",
X"04",X"08",X"03",X"04",X"18",X"00",X"00",X"00",
X"00",X"0A",X"58",X"0D",X"80",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"41",X"00",X"72",
X"00",X"69",X"00",X"74",X"00",X"68",X"00",X"00",
X"00",X"61",X"00",X"05",X"3C",X"20",X"00",X"00",
X"00",X"62",X"00",X"3C",X"05",X"00",X"00",X"00",
X"63",X"00",X"32",X"0F",X"00",X"00",X"00",X"64",
X"00",X"05",X"3C",X"20",X"00",X"00",X"00",X"65",
X"00",X"DE",X"75",X"02",X"1A",X"0D",X"FF",X"04",
X"00",X"02",X"00",X"0D",X"12",X"00",X"12",X"00",
X"10",X"19",X"00",X"07",X"13",X"02",X"1A",X"0D",
X"FF",X"04",X"00",X"02",X"00",X"0D",X"12",X"00",
X"12",X"22",X"00",X"1C",X"E9",X"02",X"1A",X"0D",
X"FF",X"04",X"00",X"02",X"00",X"0D",X"12",X"00",
X"12",X"22",X"00",X"7F",X"F3",X"02",X"1A",X"0D",
X"FF",X"04",X"00",X"02",X"00",X"0D",X"12",X"12",
X"00",X"00",X"00",X"66",X"00",X"4D",X"0D",X"02",
X"1B",X"0D",X"12",X"00",X"12",X"00",X"00",X"00",
X"67",X"00",X"05",X"0D",X"18",X"00",X"12",X"00",
X"FB",X"0D",X"18",X"10",X"12",X"22",X"21",X"02",
X"00",X"05",X"F3",X"18",X"10",X"12",X"22",X"21",
X"03",X"00",X"FB",X"F3",X"18",X"10",X"12",X"21",
X"03",X"00",X"98",X"E5",X"06",X"B8",X"18",X"10",
X"7A",X"00",X"00",X"00",X"68",X"00",X"05",X"0D",
X"19",X"00",X"12",X"00",X"00",X"00",X"69",X"00",
X"0A",X"0C",X"2A",X"40",X"00",X"2A",X"42",X"00",
X"F0",X"2A",X"42",X"00",X"2A",X"44",X"00",X"FF",
X"2A",X"44",X"00",X"2A",X"46",X"00",X"00",X"00",
X"6A",X"00",X"0A",X"0C",X"40",X"00",X"08",X"42",
X"00",X"00",X"00",X"6B",X"00",X"0A",X"0C",X"40",
X"00",X"08",X"42",X"00",X"00",X"00",X"6C",X"00",
X"0A",X"0C",X"2A",X"40",X"00",X"2A",X"42",X"00",
X"00",X"00",X"6D",X"00",X"46",X"05",X"22",X"00",
X"00",X"00",X"6E",X"00",X"46",X"05",X"22",X"00",
X"00",X"00",X"42",X"00",X"72",X"00",X"61",X"00",
X"6E",X"00",X"63",X"00",X"68",X"00",X"00",X"00",
X"61",X"00",X"41",X"42",X"02",X"00",X"00",X"00",
X"00",X"00",X"62",X"00",X"41",X"42",X"43",X"44",
X"45",X"58",X"05",X"00",X"00",X"06",X"00",X"00",
X"00",X"08",X"00",X"00",X"00",X"00",X"63",X"00",
X"41",X"42",X"43",X"44",X"64",X"7B",X"7B",X"05",
X"00",X"00",X"02",X"00",X"00",X"00",X"00",X"00",
X"64",X"00",X"41",X"42",X"43",X"44",X"58",X"64",
X"FF",X"34",X"7B",X"05",X"00",X"00",X"02",X"00",
X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"65",
X"00",X"41",X"42",X"43",X"44",X"45",X"58",X"FF",
X"34",X"08",X"00",X"00",X"05",X"00",X"00",X"06",
X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",
X"66",X"00",X"41",X"42",X"43",X"44",X"64",X"FF",
X"34",X"05",X"00",X"00",X"02",X"00",X"00",X"00",
X"00",X"00",X"67",X"00",X"41",X"42",X"43",X"44",
X"64",X"FF",X"34",X"05",X"00",X"00",X"02",X"00",
X"00",X"02",X"00",X"00",X"00",X"00",X"00",X"68",
X"00",X"41",X"42",X"43",X"44",X"45",X"64",X"FF",
X"34",X"00",X"05",X"00",X"00",X"02",X"00",X"00",
X"02",X"00",X"00",X"00",X"00",X"00",X"69",X"00",
X"41",X"42",X"43",X"44",X"45",X"58",X"FF",X"34",
X"08",X"00",X"00",X"05",X"00",X"00",X"06",X"00",
X"00",X"00",X"08",X"00",X"00",X"00",X"00",X"6A",
X"00",X"41",X"42",X"43",X"44",X"64",X"7B",X"7B",
X"05",X"00",X"00",X"02",X"00",X"00",X"00",X"00",
X"00",X"6B",X"00",X"41",X"42",X"58",X"19",X"00",
X"00",X"00",X"00",X"00",X"6C",X"00",X"41",X"42",
X"43",X"44",X"45",X"58",X"2A",X"00",X"00",X"06",
X"00",X"00",X"00",X"08",X"00",X"00",X"00",X"00",
X"6D",X"00",X"41",X"42",X"43",X"44",X"45",X"58",
X"00",X"00",X"09",X"00",X"00",X"06",X"00",X"00",
X"00",X"08",X"00",X"00",X"00",X"00",X"6E",X"00",
X"41",X"42",X"58",X"00",X"40",X"08",X"00",X"00",
X"00",X"00",X"00",X"6F",X"00",X"41",X"00",X"00",
X"00",X"00",X"70",X"00",X"7A",X"3B",X"0D",X"01",
X"00",X"0D",X"10",X"0D",X"66",X"05",X"01",X"0D",
X"00",X"6E",X"0D",X"00",X"6F",X"00",X"01",X"00",
X"00",X"71",X"00",X"3D",X"0C",X"FF",X"00",X"0C",
X"10",X"0C",X"7C",X"05",X"01",X"00",X"81",X"00",
X"01",X"00",X"00",X"4C",X"00",X"6F",X"00",X"61",
X"00",X"64",X"00",X"00",X"00",X"61",X"00",X"25",
X"42",X"FC",X"10",X"10",X"00",X"11",X"00",X"00",
X"12",X"00",X"00",X"13",X"00",X"03",X"45",X"00",
X"49",X"00",X"00",X"00",X"62",X"00",X"25",X"42",
X"44",X"10",X"10",X"00",X"11",X"00",X"12",X"00",
X"13",X"00",X"00",X"00",X"63",X"00",X"25",X"41",
X"42",X"10",X"10",X"00",X"12",X"00",X"00",X"00",
X"64",X"00",X"25",X"41",X"42",X"10",X"10",X"00",
X"12",X"00",X"00",X"00",X"65",X"00",X"25",X"41",
X"10",X"00",X"10",X"00",X"00",X"00",X"67",X"00",
X"41",X"00",X"00",X"00",X"68",X"00",X"25",X"42",
X"10",X"10",X"00",X"11",X"00",X"00",X"00",X"69",
X"00",X"25",X"42",X"44",X"10",X"10",X"00",X"11",
X"00",X"12",X"00",X"13",X"00",X"00",X"00",X"4C",
X"00",X"6F",X"00",X"67",X"00",X"69",X"00",X"63",
X"00",X"00",X"00",X"61",X"00",X"41",X"F3",X"24",
X"00",X"00",X"00",X"62",X"00",X"41",X"F3",X"00",
X"00",X"00",X"63",X"00",X"41",X"02",X"00",X"00",
X"00",X"64",X"00",X"FF",X"8E",X"0F",X"30",X"27",
X"00",X"00",X"00",X"65",X"00",X"40",X"01",X"25",
X"00",X"00",X"00",X"66",X"00",X"40",X"01",X"00",
X"00",X"00",X"67",X"00",X"43",X"02",X"26",X"00",
X"00",X"00",X"68",X"00",X"43",X"02",X"00",X"00",
X"00",X"4D",X"00",X"6F",X"00",X"76",X"00",X"65",
X"00",X"00",X"00",X"61",X"00",X"41",X"11",X"10",
X"00",X"00",X"00",X"62",X"00",X"41",X"13",X"12",
X"00",X"00",X"00",X"63",X"00",X"41",X"11",X"10",
X"00",X"00",X"00",X"64",X"00",X"41",X"13",X"12",
X"00",X"00",X"00",X"53",X"00",X"68",X"00",X"69",
X"00",X"66",X"00",X"74",X"00",X"00",X"00",X"61",
X"00",X"41",X"43",X"00",X"02",X"00",X"00",X"00",
X"62",X"00",X"41",X"43",X"08",X"04",X"02",X"00",
X"00",X"00",X"63",X"00",X"41",X"43",X"03",X"00",
X"00",X"43",X"80",X"00",X"00",X"00",X"64",X"00",
X"41",X"43",X"10",X"07",X"00",X"19",X"00",X"07",
X"80",X"00",X"00",X"00",X"65",X"00",X"41",X"43",
X"02",X"00",X"00",X"42",X"00",X"00",X"00",X"66",
X"00",X"41",X"43",X"10",X"06",X"00",X"19",X"00",
X"06",X"00",X"00",X"00",X"44",X"00",X"6F",X"00",
X"6E",X"00",X"65",X"00",X"00",X"00",X"C6",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
699,100 → 648,9
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
 
 
begin
 
uut: entity work.mips_cpu
835,7 → 693,7
reset <= '0';
wait for T*SIMULATION_LENGTH;
 
-- Flush console output to log console file (in case the end of the
-- simulation caugh an unterminated line in the buffer)
if con_line_ix > 1 then
842,8 → 700,8
write(l, con_line_buf(1 to con_line_ix));
writeline(con_file, l);
end if;
print("TB1 finished");
 
print("TB0 finished");
done <= '1';
wait;
865,16 → 723,15
full_wr_addr <= wr_addr & "00";
full_code_addr <= code_addr & "00";
 
data_addr_rd <= full_rd_addr(DATA_ADDR_SIZE-1+2 downto 2);
data_addr_wr <= full_wr_addr(DATA_ADDR_SIZE-1+2 downto 2);
code_addr_rd <= full_code_addr(DATA_ADDR_SIZE-1+2 downto 2);
data_addr_rd <= full_rd_addr(ADDR_SIZE-1+2 downto 2);
addr_wr <= full_wr_addr(ADDR_SIZE-1+2 downto 2);
code_addr_rd <= full_code_addr(ADDR_SIZE-1+2 downto 2);
 
 
write_process:
process(clk)
variable i : integer;
variable uart_data : integer;
variable s: string(1 to 100);
variable si : integer := 1;
begin
if clk'event and clk='1' then
if reset='1' then
889,10 → 746,10
ram0(conv_integer(unsigned(data_addr_rd)));
code_r <=
rom3(conv_integer(unsigned(code_addr_rd))) &
rom2(conv_integer(unsigned(code_addr_rd))) &
rom1(conv_integer(unsigned(code_addr_rd))) &
rom0(conv_integer(unsigned(code_addr_rd)));
ram3(conv_integer(unsigned(code_addr_rd))) &
ram2(conv_integer(unsigned(code_addr_rd))) &
ram1(conv_integer(unsigned(code_addr_rd))) &
ram0(conv_integer(unsigned(code_addr_rd)));
end if;
if byte_we/="0000" then
933,138 → 790,154
else
-- Write to RAM
if byte_we(3)='1' then
ram3(conv_integer(unsigned(data_addr_wr))) <= data_w(31 downto 24);
ram3(conv_integer(unsigned(addr_wr))) <= data_w(31 downto 24);
end if;
if byte_we(2)='1' then
ram2(conv_integer(unsigned(data_addr_wr))) <= data_w(23 downto 16);
ram2(conv_integer(unsigned(addr_wr))) <= data_w(23 downto 16);
end if;
if byte_we(1)='1' then
ram1(conv_integer(unsigned(data_addr_wr))) <= data_w(15 downto 8);
ram1(conv_integer(unsigned(addr_wr))) <= data_w(15 downto 8);
end if;
if byte_we(0)='1' then
ram0(conv_integer(unsigned(data_addr_wr))) <= data_w( 7 downto 0);
ram0(conv_integer(unsigned(addr_wr))) <= data_w( 7 downto 0);
end if;
end if;
end if;
end if;
end process write_process;
signalspy_rbank:
log_execution:
process
begin
init_signal_spy("/mips_tb1/uut/p1_rbank", "rbank", 0, -1);
init_signal_spy("/mips_tb1/uut/p0_pc_reg", "pc", 0, -1);
init_signal_spy("/mips_tb1/uut/mult_div/upper_reg", "reg_hi", 0, -1);
init_signal_spy("/mips_tb1/uut/mult_div/lower_reg", "reg_lo", 0, -1);
init_signal_spy("/mips_tb1/uut/mult_div/negate_reg", "negate_reg_lo", 0, -1);
init_signal_spy("/mips_tb1/uut/mult_div/negate_reg", "negate_reg_lo", 0, -1);
init_signal_spy("/mips_tb1/uut/cp0_epc", "cp0_epc", 0, -1);
init_signal_spy("/mips_tb1/uut/p2_ld_upper_byte", "ld_upper_byte", 0, -1);
init_signal_spy("/mips_tb1/uut/p2_ld_upper_byte", "ld_upper_hword", 0, -1);
log_cpu_activity(clk, reset, done,
"mips_tb1/uut", log_info, "log_info", log_file);
wait;
end process signalspy_rbank;
end process log_execution;
-- signalspy_rbank:
-- process
-- begin
-- init_signal_spy("/mips_tb1/uut/p1_rbank", "rbank", 0, -1);
-- init_signal_spy("/mips_tb1/uut/p0_pc_reg", "pc", 0, -1);
-- init_signal_spy("/mips_tb1/uut/mult_div/upper_reg", "reg_hi", 0, -1);
-- init_signal_spy("/mips_tb1/uut/mult_div/lower_reg", "reg_lo", 0, -1);
-- init_signal_spy("/mips_tb1/uut/mult_div/negate_reg", "negate_reg_lo", 0, -1);
-- init_signal_spy("/mips_tb1/uut/cp0_epc", "cp0_epc", 0, -1);
-- init_signal_spy("/mips_tb1/uut/p2_ld_upper_byte", "ld_upper_byte", 0, -1);
-- init_signal_spy("/mips_tb1/uut/p2_ld_upper_byte", "ld_upper_hword", 0, -1);
-- wait;
-- end process signalspy_rbank;
--
-- log_cpu_activity:
-- process(clk)
-- variable prev_rbank : t_rbank := (others => X"00000000");
-- variable ri : std_logic_vector(7 downto 0);
-- variable full_pc : t_word := (others => '0');
-- variable prev_pc : t_word := (others => '0');
-- variable prev_hi : t_word := (others => '0');
-- variable prev_lo : t_word := (others => '0');
-- variable prev_epc : std_logic_vector(31 downto 2) := (others => '0');
-- variable wr_data : t_word := (others => '0');
-- variable temp : t_word := (others => '0');
-- variable size : std_logic_vector(7 downto 0) := X"00";
-- variable prev_vma_data : std_logic := '0';
-- variable prev_rd_addr : t_word := (others => '0');
-- variable rd_size : std_logic_vector(7 downto 0) := X"00";
-- begin
-- -- we'll be sampling control & data signals at falling edge, when
-- -- they're stable
-- if clk'event and clk='0' then
-- if reset='0' then
--
-- -- log memory loads (data only)
-- -- IMPORTANT: memory reads should be logged first because we're
-- -- logging them the cycle after they actually happen. If you put
-- -- the log code after any other log, the order of the operations
-- -- will appear wrong in the log even though it is not.
-- if prev_vma_data='1' then
-- if ld_upper_hword='1' then
-- rd_size := X"04";
-- elsif ld_upper_byte='1' then
-- rd_size := X"02";
-- else
-- rd_size := X"01";
-- end if;
-- print(l_file, "("& hstr(prev_pc) &") ["& hstr(prev_rd_addr) &"] <"&
-- "**"&
-- --hstr(rd_size)&
-- ">="& hstr(data_r)& " RD");
-- end if;
-- prev_vma_data := vma_data;
-- prev_rd_addr := full_rd_addr;
--
-- -- log register changes
-- ri := X"00";
-- for i in 0 to 31 loop
-- if prev_rbank(i)/=rbank(i) then
-- print(l_file, "("& hstr(full_pc)& ") ["& hstr(ri)& "]="& hstr(rbank(i)));
-- end if;
-- ri := ri + 1;
-- end loop;
--
-- -- log aux register changes, only when pipeline is not stalled
-- if prev_lo /= reg_lo and reg_lo(0)/='U' and vma_code='1' then
-- -- we're observing the value of reg_lo, but the mult core
-- -- will output the negated value in some cases. We
-- -- have to mimic that behavior.
-- if negate_reg_lo='1' then
-- -- negate reg_lo before displaying
-- prev_lo := not reg_lo;
-- prev_lo := prev_lo + 1;
-- print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(prev_lo));
-- else
-- print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(reg_lo));
-- end if;
-- end if;
-- if prev_hi /= reg_hi and reg_hi(0)/='U' and vma_code='1' then
-- print(l_file, "("& hstr(full_pc)& ") [HI]="& hstr(reg_hi));
-- end if;
-- if prev_epc /= cp0_epc and cp0_epc(31)/='U' then
-- temp := cp0_epc & "00";
-- print(l_file, "("& hstr(full_pc)& ") [EP]="& hstr(temp));
-- end if;
--
-- -- 'remember' last value of hi and lo only when pipeline is not
-- -- stalled; that's because we don't want to be tracking the
-- -- changing values when mul/div is running (because the SW
-- -- simulator doesn't)
-- if vma_code='1' then
-- prev_hi := reg_hi;
-- prev_lo := reg_lo;
-- end if;
--
--
-- full_pc := pc & "00";
-- prev_pc := full_pc;
-- prev_rbank := rbank;
-- prev_epc := cp0_epc;
--
-- -- log memory writes
-- if byte_we/="0000" then
-- wr_data := X"00000000";
-- if byte_we(3)='1' then
-- wr_data(31 downto 24) := data_w(31 downto 24);
-- end if;
-- if byte_we(2)='1' then
-- wr_data(23 downto 16) := data_w(23 downto 16);
-- end if;
-- if byte_we(1)='1' then
-- wr_data(15 downto 8) := data_w(15 downto 8);
-- end if;
-- if byte_we(0)='1' then
-- wr_data( 7 downto 0) := data_w( 7 downto 0);
-- end if;
-- size := "0000" & byte_we; -- mask, really
-- print(l_file, "("& hstr(full_pc) &") ["& hstr(full_wr_addr) &"] |"& hstr(size)& "|="& hstr(wr_data)& " WR" );
-- end if;
--
-- end if;
-- end if;
-- end process log_cpu_activity;
 
log_cpu_activity:
process(clk)
variable prev_rbank : t_rbank := (others => X"00000000");
variable ri : std_logic_vector(7 downto 0);
variable full_pc : t_word := (others => '0');
variable prev_pc : t_word := (others => '0');
variable prev_hi : t_word := (others => '0');
variable prev_lo : t_word := (others => '0');
variable prev_epc : std_logic_vector(31 downto 2) := (others => '0');
variable wr_data : t_word := (others => '0');
variable temp : t_word := (others => '0');
variable size : std_logic_vector(7 downto 0) := X"00";
variable prev_vma_data : std_logic := '0';
variable prev_rd_addr : t_word := (others => '0');
variable rd_size : std_logic_vector(7 downto 0) := X"00";
begin
-- we'll be sampling control & data signals at falling edge, when
-- they're stable
if clk'event and clk='0' then
if reset='0' then
-- log memory loads (data only)
-- IMPORTANT: memory reads should be logged first because we're
-- logging them the cycle after they actually happen. If you put
-- the log code after any other log, the order of the operations
-- will appear wrong in the log even though it is not.
if prev_vma_data='1' then
if ld_upper_hword='1' then
rd_size := X"04";
elsif ld_upper_byte='1' then
rd_size := X"02";
else
rd_size := X"01";
end if;
print(l_file, "("& hstr(prev_pc) &") ["& hstr(prev_rd_addr) &"] <"&
"**"&
--hstr(rd_size)&
">="& hstr(data_r)& " RD");
end if;
prev_vma_data := vma_data;
prev_rd_addr := full_rd_addr;
-- log register changes
ri := X"00";
for i in 0 to 31 loop
if prev_rbank(i)/=rbank(i) then
print(l_file, "("& hstr(full_pc)& ") ["& hstr(ri)& "]="& hstr(rbank(i)));
end if;
ri := ri + 1;
end loop;
 
-- log aux register changes
if prev_hi /= reg_hi and reg_hi(0)/='U' then
-- we're observing the value of reg_lo, but the mult core
-- will output the negated value in some cases. We
-- have to mimic that behavior.
if negate_reg_lo='1' then
-- negate reg_lo before displaying
prev_lo := not reg_lo;
prev_lo := prev_lo + 1;
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(prev_lo));
else
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(reg_lo));
end if;
end if;
if prev_lo /= reg_lo and reg_lo(0)/='U' then
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(reg_lo));
end if;
if prev_epc /= cp0_epc and cp0_epc(31)/='U' then
temp := cp0_epc & "00";
print(l_file, "("& hstr(full_pc)& ") [EP]="& hstr(temp));
end if;
 
full_pc := pc & "00";
prev_pc := full_pc;
prev_rbank := rbank;
prev_hi := reg_hi;
prev_lo := reg_lo;
prev_epc := cp0_epc;
-- log memory writes
if byte_we/="0000" then
wr_data := X"00000000";
if byte_we(3)='1' then
wr_data(31 downto 24) := data_w(31 downto 24);
end if;
if byte_we(2)='1' then
wr_data(23 downto 16) := data_w(23 downto 16);
end if;
if byte_we(1)='1' then
wr_data(15 downto 8) := data_w(15 downto 8);
end if;
if byte_we(0)='1' then
wr_data( 7 downto 0) := data_w( 7 downto 0);
end if;
size := "0000" & byte_we; -- mask, really
print(l_file, "("& hstr(full_pc) &") ["& hstr(full_wr_addr) &"] |"& hstr(size)& "|="& hstr(wr_data)& " WR" );
end if;
 
end if;
end if;
end process log_cpu_activity;
 
end testbench;
/vhdl/tb/mips_tb2.vhdl
23,17 → 23,14
-- WARNING: Will only work on Modelsim; uses custom library SignalSpy.
--##############################################################################
 
library ieee,modelsim_lib;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
use work.mips_pkg.all;
use std.textio.all;
 
 
use work.mips_pkg.all;
 
use modelsim_lib.util.all;
use std.textio.all;
use work.mips_tb_pkg.all;
use work.txt_util.all;
 
entity mips_tb2 is
53,7 → 50,7
 
-- Simulation length in clock cycles
-- 2000 is enough for 'hello' sample, 22000 enough for 10 digits of pi
constant SIMULATION_LENGTH : integer := 22000;
constant SIMULATION_LENGTH : integer := 20000;
 
-- Simulated external SRAM size in 32-bit words
constant SRAM_SIZE : integer := 2048;
62,8 → 59,8
 
 
-- BRAM table and interface signals --------------------------------------------
constant BRAM_SIZE : integer := 2048;
constant BRAM_ADDR_SIZE : integer := 11;
constant BRAM_SIZE : integer := 1024;
constant BRAM_ADDR_SIZE : integer := 10;
subtype t_bram_address is std_logic_vector(BRAM_ADDR_SIZE-1 downto 0);
-- (this table holds one byte-slice; the RAM will have 4 of these)
type t_bram is array(0 to BRAM_SIZE-1) of std_logic_vector(7 downto 0);
73,6 → 70,7
signal bram_rd_data : t_word;
signal bram_wr_data : t_word;
signal bram_byte_we : std_logic_vector(3 downto 0);
signal bram_data_rd_vma : std_logic;
 
-- bram0 is LSB, bram3 is MSB
signal bram3 : t_bram := (
93,175 → 91,23
X"AC",X"AC",X"03",X"34",X"8C",X"8C",X"8C",X"8C",
X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",X"8C",
X"00",X"03",X"34",X"00",X"00",X"00",X"03",X"AC",
X"00",X"03",X"00",X"30",X"3C",X"AC",X"03",X"00",
X"03",X"00",X"00",X"24",X"3C",X"24",X"24",X"14",
X"00",X"00",X"24",X"00",X"00",X"00",X"00",X"24",
X"30",X"AD",X"00",X"00",X"00",X"14",X"00",X"00",
X"00",X"14",X"00",X"03",X"00",X"27",X"AF",X"3C",
X"8E",X"24",X"14",X"00",X"00",X"AF",X"3C",X"3C",
X"8C",X"8F",X"AF",X"AF",X"AF",X"AF",X"AF",X"AF",
X"AF",X"00",X"10",X"AF",X"3C",X"26",X"00",X"00",
X"00",X"02",X"AE",X"26",X"16",X"00",X"00",X"00",
X"24",X"00",X"AC",X"3C",X"00",X"3C",X"AE",X"10",
X"AE",X"3C",X"3C",X"26",X"8E",X"02",X"24",X"24",
X"00",X"01",X"8D",X"24",X"00",X"24",X"24",X"AE",
X"AC",X"00",X"00",X"00",X"15",X"00",X"00",X"00",
X"AD",X"00",X"11",X"AE",X"00",X"02",X"24",X"24",
X"01",X"8D",X"01",X"25",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"14",X"00",X"00",X"24",X"00",
X"AD",X"00",X"15",X"25",X"02",X"25",X"00",X"01",
X"AE",X"AC",X"AE",X"14",X"00",X"00",X"24",X"AF",
X"AF",X"00",X"0C",X"00",X"8E",X"8E",X"8F",X"14",
X"00",X"00",X"AE",X"00",X"AE",X"8F",X"00",X"14",
X"AE",X"8F",X"00",X"8F",X"8F",X"8F",X"8F",X"8F",
X"8F",X"8F",X"8F",X"8F",X"03",X"27",X"44",X"3C",
X"00",X"44",X"03",X"00",X"44",X"44",X"00",X"00",
X"3C",X"34",X"30",X"30",X"00",X"3C",X"00",X"00",
X"00",X"11",X"00",X"00",X"28",X"11",X"00",X"00",
X"04",X"00",X"00",X"04",X"00",X"00",X"00",X"04",
X"00",X"10",X"3C",X"00",X"10",X"3C",X"3C",X"00",
X"00",X"14",X"24",X"3C",X"00",X"14",X"00",X"3C",
X"00",X"00",X"10",X"24",X"18",X"3C",X"34",X"00",
X"00",X"00",X"00",X"00",X"00",X"44",X"03",X"00",
X"00",X"28",X"11",X"00",X"00",X"08",X"00",X"00",
X"08",X"00",X"08",X"00",X"00",X"14",X"3C",X"44",
X"03",X"00",X"00",X"44",X"03",X"00",X"44",X"3C",
X"00",X"44",X"08",X"00",X"44",X"44",X"3C",X"34",
X"3C",X"00",X"00",X"00",X"01",X"30",X"31",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",
X"31",X"01",X"00",X"00",X"30",X"00",X"01",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"01",X"00",
X"00",X"10",X"00",X"30",X"00",X"3C",X"24",X"30",
X"00",X"10",X"00",X"3C",X"00",X"00",X"14",X"24",
X"18",X"00",X"3C",X"34",X"00",X"00",X"00",X"00",
X"00",X"00",X"44",X"03",X"00",X"44",X"03",X"00",
X"00",X"44",X"03",X"00",X"44",X"44",X"3C",X"35",
X"3C",X"00",X"00",X"00",X"01",X"00",X"00",X"14",
X"00",X"00",X"30",X"00",X"00",X"00",X"30",X"01",
X"00",X"00",X"00",X"00",X"01",X"00",X"00",X"31",
X"01",X"00",X"00",X"31",X"00",X"01",X"01",X"00",
X"00",X"00",X"00",X"01",X"00",X"01",X"00",X"00",
X"01",X"00",X"14",X"00",X"00",X"00",X"00",X"10",
X"00",X"30",X"00",X"3C",X"24",X"30",X"00",X"10",
X"00",X"3C",X"00",X"00",X"14",X"24",X"04",X"00",
X"10",X"00",X"3C",X"34",X"00",X"00",X"00",X"00",
X"00",X"00",X"44",X"03",X"00",X"44",X"03",X"00",
X"00",X"44",X"03",X"00",X"44",X"3C",X"34",X"3C",
X"00",X"00",X"00",X"30",X"24",X"00",X"18",X"00",
X"28",X"10",X"00",X"00",X"04",X"00",X"00",X"03",
X"00",X"08",X"00",X"04",X"00",X"10",X"3C",X"00",
X"10",X"00",X"24",X"3C",X"00",X"00",X"14",X"24",
X"3C",X"00",X"14",X"3C",X"3C",X"00",X"00",X"10",
X"24",X"3C",X"34",X"00",X"00",X"00",X"00",X"00",
X"00",X"44",X"03",X"00",X"00",X"14",X"3C",X"00",
X"44",X"03",X"00",X"08",X"24",X"44",X"44",X"00",
X"10",X"00",X"00",X"00",X"00",X"14",X"00",X"14",
X"00",X"14",X"24",X"24",X"00",X"00",X"30",X"30",
X"00",X"14",X"00",X"14",X"3C",X"34",X"00",X"00",
X"3C",X"00",X"00",X"00",X"14",X"00",X"00",X"03",
X"00",X"03",X"24",X"03",X"24",X"03",X"00",X"08",
X"00",X"08",X"00",X"08",X"00",X"08",X"00",X"44",
X"44",X"00",X"00",X"03",X"00",X"44",X"44",X"00",
X"00",X"03",X"00",X"27",X"24",X"AF",X"AF",X"AF",
X"AF",X"AF",X"E7",X"E7",X"E7",X"E7",X"E7",X"E7",
X"E7",X"46",X"0C",X"E7",X"46",X"46",X"0C",X"46",
X"46",X"0C",X"46",X"44",X"0C",X"24",X"46",X"46",
X"0C",X"46",X"46",X"0C",X"46",X"44",X"00",X"08",
X"24",X"44",X"46",X"46",X"12",X"26",X"0C",X"46",
X"44",X"0C",X"46",X"44",X"44",X"0C",X"46",X"46",
X"0C",X"46",X"46",X"0C",X"46",X"46",X"46",X"0C",
X"46",X"46",X"0C",X"46",X"02",X"16",X"46",X"46",
X"C7",X"C7",X"C7",X"C7",X"8F",X"8F",X"8F",X"8F",
X"8F",X"C7",X"C7",X"C7",X"C7",X"03",X"27",X"27",
X"3C",X"E7",X"E7",X"E7",X"E7",X"AF",X"AF",X"AF",
X"AF",X"AF",X"E7",X"E7",X"C4",X"08",X"46",X"0C",
X"00",X"46",X"46",X"0C",X"46",X"46",X"1C",X"46",
X"44",X"0C",X"46",X"46",X"04",X"46",X"0C",X"00",
X"46",X"44",X"0C",X"46",X"46",X"04",X"46",X"3C",
X"C6",X"0C",X"46",X"04",X"46",X"0C",X"46",X"24",
X"0C",X"46",X"44",X"3C",X"3C",X"C4",X"0C",X"46",
X"04",X"00",X"C6",X"0C",X"46",X"3C",X"46",X"00",
X"46",X"0C",X"46",X"44",X"C6",X"3C",X"02",X"46",
X"46",X"24",X"24",X"44",X"0C",X"46",X"26",X"00",
X"46",X"00",X"0C",X"26",X"46",X"0C",X"46",X"46",
X"46",X"0C",X"46",X"46",X"0C",X"46",X"16",X"46",
X"C7",X"C7",X"C7",X"44",X"8F",X"8F",X"8F",X"8F",
X"8F",X"C7",X"C7",X"C7",X"46",X"08",X"27",X"3C",
X"8E",X"08",X"3C",X"3C",X"C4",X"27",X"AF",X"0C",
X"00",X"46",X"8F",X"08",X"27",X"44",X"27",X"AF",
X"AF",X"AF",X"AF",X"E7",X"E7",X"E7",X"44",X"0C",
X"E7",X"04",X"3C",X"C4",X"44",X"0C",X"46",X"1C",
X"3C",X"C4",X"44",X"0C",X"00",X"18",X"3C",X"C4",
X"44",X"0C",X"46",X"44",X"46",X"0C",X"46",X"3C",
X"C4",X"0C",X"46",X"46",X"0C",X"46",X"0C",X"46",
X"3C",X"C4",X"0C",X"46",X"3C",X"C4",X"46",X"C7",
X"C7",X"8F",X"8F",X"8F",X"8F",X"C7",X"C7",X"08",
X"27",X"44",X"0C",X"46",X"0C",X"46",X"3C",X"C4",
X"08",X"46",X"3C",X"C4",X"44",X"0C",X"00",X"04",
X"3C",X"02",X"44",X"44",X"44",X"0C",X"02",X"46",
X"24",X"24",X"46",X"0C",X"46",X"02",X"0C",X"46",
X"46",X"0C",X"46",X"44",X"0C",X"46",X"26",X"44",
X"16",X"46",X"C7",X"C7",X"8F",X"44",X"8F",X"8F",
X"8F",X"C7",X"C7",X"03",X"27",X"3C",X"C4",X"44",
X"0C",X"00",X"18",X"3C",X"3C",X"C4",X"44",X"0C",
X"00",X"0C",X"46",X"3C",X"C4",X"08",X"46",X"3C",
X"3C",X"C4",X"02",X"44",X"0C",X"46",X"44",X"46",
X"0C",X"46",X"3C",X"C4",X"0C",X"46",X"46",X"0C",
X"46",X"0C",X"46",X"3C",X"C4",X"0C",X"46",X"3C",
X"C4",X"0C",X"46",X"44",X"08",X"02",X"27",X"AF",
X"E7",X"E7",X"E7",X"46",X"E7",X"0C",X"46",X"0C",
X"46",X"44",X"46",X"0C",X"E7",X"C7",X"04",X"00",
X"C7",X"C7",X"8F",X"C7",X"C7",X"03",X"27",X"44",
X"0C",X"46",X"C7",X"18",X"3C",X"C7",X"C7",X"C4",
X"8F",X"C7",X"C7",X"46",X"08",X"27",X"C7",X"C7",
X"C4",X"8F",X"C7",X"C7",X"46",X"08",X"27",X"27",
X"3C",X"AF",X"AF",X"E7",X"E7",X"3C",X"3C",X"C4",
X"3C",X"E7",X"E7",X"E7",X"E7",X"E7",X"E7",X"E7",
X"E7",X"AF",X"C4",X"C6",X"C6",X"08",X"46",X"0C",
X"00",X"46",X"46",X"0C",X"46",X"46",X"46",X"0C",
X"46",X"46",X"1C",X"46",X"3C",X"C6",X"C4",X"08",
X"46",X"0C",X"00",X"46",X"46",X"0C",X"46",X"46",
X"46",X"0C",X"46",X"46",X"04",X"46",X"C6",X"46",
X"0C",X"46",X"46",X"46",X"24",X"24",X"46",X"0C",
X"46",X"02",X"0C",X"46",X"46",X"0C",X"46",X"46",
X"46",X"0C",X"46",X"46",X"0C",X"46",X"26",X"16",
X"46",X"C7",X"C7",X"C7",X"C7",X"46",X"C7",X"8F",
X"8F",X"8F",X"C7",X"C7",X"C7",X"C7",X"C7",X"46",
X"08",X"27",X"27",X"3C",X"E7",X"E7",X"C4",X"3C",
X"E7",X"E7",X"C4",X"3C",X"E7",X"E7",X"E7",X"E7",
X"E7",X"E7",X"AF",X"AF",X"AF",X"AF",X"C4",X"44",
X"08",X"46",X"0C",X"00",X"46",X"46",X"0C",X"46",
X"46",X"46",X"0C",X"46",X"46",X"1C",X"46",X"3C",
X"3C",X"C4",X"3C",X"C4",X"C6",X"08",X"00",X"0C",
X"00",X"46",X"46",X"0C",X"46",X"46",X"46",X"0C",
X"46",X"46",X"1C",X"46",X"3C",X"C4",X"3C",X"C6",
X"C4",X"08",X"00",X"0C",X"00",X"46",X"46",X"0C",
X"46",X"46",X"46",X"0C",X"46",X"46",X"04",X"46",
X"3C",X"C4",X"0C",X"3C",X"44",X"3C",X"C4",X"44",
X"02",X"24",X"24",X"44",X"0C",X"46",X"02",X"0C",
X"46",X"46",X"0C",X"46",X"46",X"0C",X"46",X"26",
X"16",X"46",X"C7",X"C7",X"C7",X"C7",X"46",X"C7",
X"8F",X"8F",X"8F",X"8F",X"C7",X"C7",X"C7",X"C7",
X"C7",X"46",X"08",X"27",X"27",X"AF",X"0C",X"E7",
X"C7",X"00",X"46",X"0C",X"46",X"46",X"8F",X"08",
X"27",X"10",X"00",X"30",X"10",X"00",X"00",X"14",
X"00",X"03",X"00",X"00",X"00",X"00",X"08",X"24",
X"10",X"01",X"00",X"30",X"00",X"24",X"00",X"00",
X"15",X"00",X"10",X"2C",X"11",X"00",X"00",X"34",
X"14",X"01",X"03",X"00",X"04",X"00",X"04",X"00",
X"00",X"00",X"00",X"08",X"24",X"10",X"01",X"00",
X"30",X"00",X"24",X"00",X"00",X"15",X"00",X"10",
X"2C",X"11",X"00",X"00",X"34",X"14",X"01",X"11",
X"00",X"00",X"03",X"00",X"00",X"04",X"24",X"00",
X"08",X"39",X"00",X"00",X"00",X"08",X"24",X"10",
X"01",X"00",X"30",X"00",X"24",X"00",X"15",X"00",
X"10",X"2C",X"11",X"00",X"00",X"14",X"01",X"03",
X"00",X"00",X"00",X"00",X"08",X"24",X"10",X"01",
X"00",X"30",X"00",X"24",X"00",X"15",X"00",X"10",
X"2C",X"11",X"00",X"00",X"14",X"01",X"03",X"00",
X"40",X"40",X"3F",X"3F",X"BF",X"BF",X"3E",X"3E",
X"3E",X"3D",X"BE",X"40",X"C0",X"40",X"3E",X"3D",
X"40",X"41",X"3F",X"3F",X"3F",X"00",X"00",X"00",
X"00",X"03",X"00",X"3C",X"27",X"AF",X"0C",X"24",
X"3C",X"0C",X"24",X"3C",X"8F",X"24",X"08",X"27",
X"3C",X"8C",X"00",X"30",X"10",X"3C",X"AC",X"03",
X"00",X"90",X"00",X"10",X"24",X"3C",X"3C",X"24",
X"10",X"00",X"24",X"8C",X"00",X"30",X"10",X"00",
X"AC",X"90",X"00",X"14",X"00",X"03",X"00",X"8C",
X"00",X"30",X"10",X"00",X"AC",X"08",X"24",X"24",
X"3C",X"3C",X"24",X"00",X"30",X"2C",X"10",X"00",
X"8C",X"00",X"30",X"10",X"00",X"24",X"24",X"AD",
X"14",X"00",X"03",X"00",X"8C",X"00",X"30",X"10",
X"00",X"24",X"24",X"AD",X"14",X"00",X"03",X"00",
X"3C",X"8C",X"00",X"30",X"10",X"3C",X"24",X"AC",
X"03",X"00",X"3C",X"8C",X"03",X"30",X"3C",X"8C",
X"00",X"30",X"10",X"3C",X"8C",X"03",X"00",X"63",
X"69",X"74",X"3A",X"62",X"20",X"31",X"20",X"30",
X"30",X"67",X"76",X"69",X"20",X"34",X"00",X"0A",
X"6C",X"57",X"64",X"0A",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
331,6 → 177,30
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal bram2 : t_bram := (
351,175 → 221,29
X"9D",X"9F",X"E0",X"02",X"90",X"91",X"92",X"93",
X"94",X"95",X"96",X"97",X"9E",X"9C",X"9D",X"9F",
X"00",X"E0",X"A2",X"85",X"00",X"00",X"E0",X"C4",
X"00",X"E0",X"00",X"84",X"02",X"44",X"E0",X"00",
X"E0",X"00",X"00",X"02",X"08",X"06",X"07",X"40",
X"82",X"07",X"63",X"00",X"00",X"00",X"A2",X"A5",
X"A5",X"05",X"00",X"00",X"00",X"C0",X"46",X"07",
X"00",X"67",X"85",X"E0",X"00",X"BD",X"B2",X"12",
X"43",X"06",X"C0",X"66",X"07",X"BE",X"02",X"1E",
X"47",X"C5",X"BF",X"B7",X"B6",X"B5",X"B4",X"B3",
X"B1",X"00",X"E5",X"B0",X"10",X"10",X"07",X"05",
X"90",X"08",X"06",X"10",X"04",X"00",X"07",X"A4",
X"E7",X"E4",X"47",X"16",X"05",X"17",X"C0",X"C0",
X"E6",X"11",X"10",X"10",X"27",X"00",X"15",X"13",
X"05",X"10",X"04",X"C9",X"64",X"CC",X"AA",X"EC",
X"4A",X"00",X"00",X"00",X"20",X"89",X"07",X"00",
X"09",X"00",X"40",X"C4",X"0A",X"89",X"C6",X"A8",
X"44",X"2B",X"00",X"08",X"00",X"00",X"00",X"6B",
X"00",X"8B",X"00",X"C0",X"86",X"07",X"C6",X"00",
X"2B",X"00",X"15",X"29",X"65",X"8C",X"06",X"86",
X"EC",X"40",X"C4",X"60",X"83",X"07",X"A5",X"C5",
X"A2",X"00",X"00",X"87",X"C7",X"43",X"C5",X"60",
X"E3",X"07",X"C0",X"05",X"E6",X"A2",X"00",X"C0",
X"27",X"BF",X"00",X"BE",X"B7",X"B6",X"B5",X"B4",
X"B3",X"B2",X"B1",X"B0",X"E0",X"BD",X"02",X"03",
X"62",X"82",X"E0",X"00",X"04",X"02",X"04",X"02",
X"05",X"A5",X"63",X"E7",X"45",X"08",X"85",X"E3",
X"C8",X"20",X"A8",X"67",X"E8",X"00",X"00",X"E6",
X"81",X"00",X"05",X"41",X"00",X"06",X"C5",X"C0",
X"C0",X"40",X"04",X"44",X"80",X"04",X"05",X"02",
X"45",X"80",X"63",X"04",X"44",X"80",X"00",X"05",
X"02",X"45",X"80",X"63",X"60",X"04",X"84",X"06",
X"44",X"06",X"46",X"03",X"43",X"83",X"E0",X"00",
X"E3",X"68",X"00",X"00",X"65",X"00",X"E0",X"E0",
X"00",X"00",X"00",X"00",X"06",X"40",X"04",X"80",
X"E0",X"00",X"00",X"83",X"E0",X"00",X"03",X"02",
X"62",X"82",X"00",X"00",X"07",X"06",X"05",X"A5",
X"02",X"C5",X"E5",X"A2",X"02",X"A4",X"02",X"44",
X"05",X"08",X"00",X"09",X"00",X"45",X"00",X"22",
X"23",X"04",X"09",X"00",X"82",X"04",X"05",X"62",
X"03",X"03",X"02",X"00",X"85",X"89",X"2A",X"09",
X"49",X"40",X"07",X"A5",X"06",X"04",X"A5",X"63",
X"44",X"80",X"A3",X"05",X"02",X"45",X"80",X"63",
X"60",X"E6",X"04",X"84",X"06",X"44",X"06",X"46",
X"03",X"43",X"83",X"E0",X"00",X"80",X"E0",X"00",
X"00",X"83",X"E0",X"00",X"07",X"06",X"08",X"08",
X"03",X"C8",X"E8",X"A3",X"03",X"08",X"05",X"60",
X"83",X"07",X"AB",X"05",X"00",X"04",X"89",X"2B",
X"04",X"00",X"02",X"00",X"4B",X"00",X"4B",X"6C",
X"25",X"0B",X"00",X"22",X"09",X"45",X"82",X"02",
X"02",X"02",X"00",X"25",X"AB",X"6C",X"0B",X"4B",
X"02",X"02",X"60",X"43",X"07",X"00",X"44",X"40",
X"07",X"A5",X"06",X"04",X"A5",X"63",X"44",X"80",
X"A3",X"05",X"02",X"45",X"80",X"63",X"60",X"00",
X"60",X"E6",X"04",X"84",X"06",X"44",X"06",X"46",
X"03",X"43",X"83",X"E0",X"00",X"80",X"E0",X"00",
X"00",X"83",X"E0",X"00",X"03",X"02",X"42",X"05",
X"03",X"62",X"45",X"84",X"05",X"A4",X"80",X"02",
X"85",X"A0",X"00",X"82",X"61",X"00",X"02",X"E0",
X"00",X"00",X"00",X"80",X"80",X"40",X"03",X"43",
X"60",X"00",X"03",X"06",X"02",X"46",X"A0",X"63",
X"05",X"45",X"A0",X"05",X"06",X"02",X"46",X"A0",
X"63",X"05",X"A5",X"45",X"03",X"04",X"62",X"04",
X"44",X"82",X"E0",X"00",X"04",X"40",X"03",X"00",
X"82",X"E0",X"00",X"00",X"03",X"03",X"04",X"00",
X"64",X"00",X"03",X"04",X"A2",X"C0",X"45",X"A0",
X"00",X"40",X"02",X"02",X"03",X"04",X"C6",X"A5",
X"A6",X"E0",X"C5",X"A0",X"05",X"A5",X"85",X"65",
X"05",X"85",X"65",X"85",X"A0",X"00",X"02",X"E0",
X"00",X"E0",X"02",X"E0",X"02",X"E0",X"02",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",
X"02",X"00",X"62",X"E0",X"02",X"03",X"02",X"00",
X"62",X"E0",X"02",X"BD",X"04",X"BF",X"B3",X"B2",
X"B1",X"B0",X"BA",X"BB",X"B6",X"B7",X"B4",X"B5",
X"B8",X"00",X"00",X"B9",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"11",X"00",X"04",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"10",X"00",X"00",
X"12",X"10",X"00",X"00",X"30",X"73",X"00",X"00",
X"90",X"00",X"00",X"91",X"90",X"00",X"00",X"00",
X"00",X"E0",X"00",X"04",X"BD",X"BF",X"00",X"84",
X"04",X"00",X"84",X"04",X"BF",X"84",X"00",X"BD",
X"03",X"62",X"00",X"42",X"40",X"02",X"44",X"E0",
X"00",X"85",X"00",X"A0",X"07",X"03",X"06",X"08",
X"A7",X"00",X"84",X"62",X"00",X"42",X"40",X"00",
X"C5",X"85",X"00",X"A0",X"00",X"E0",X"00",X"62",
X"00",X"42",X"40",X"00",X"C8",X"00",X"84",X"05",
X"02",X"08",X"07",X"A4",X"C6",X"C3",X"60",X"00",
X"43",X"00",X"63",X"60",X"00",X"C6",X"A5",X"06",
X"A7",X"A4",X"E0",X"00",X"43",X"00",X"63",X"60",
X"00",X"C6",X"A5",X"06",X"A7",X"A4",X"E0",X"00",
X"03",X"62",X"00",X"42",X"40",X"02",X"03",X"43",
X"E0",X"00",X"02",X"42",X"E0",X"42",X"03",X"62",
X"00",X"42",X"40",X"02",X"42",X"E0",X"00",X"6F",
X"6C",X"69",X"20",X"20",X"32",X"20",X"31",X"39",
X"0A",X"63",X"65",X"6F",X"20",X"2E",X"00",X"0A",
X"6C",X"6F",X"21",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"72",X"00",X"00",
X"BA",X"B8",X"B6",X"B4",X"BF",X"B3",X"B2",X"B1",
X"B0",X"BB",X"B9",X"B7",X"B5",X"E0",X"BD",X"BD",
X"02",X"B6",X"B7",X"B4",X"B5",X"BF",X"B3",X"B2",
X"B1",X"B0",X"B8",X"B9",X"54",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"00",
X"80",X"00",X"00",X"00",X"41",X"00",X"00",X"00",
X"00",X"80",X"00",X"00",X"00",X"40",X"00",X"10",
X"14",X"00",X"00",X"40",X"00",X"00",X"00",X"04",
X"00",X"00",X"11",X"12",X"02",X"4E",X"00",X"00",
X"40",X"00",X"0C",X"00",X"00",X"02",X"00",X"51",
X"00",X"00",X"00",X"02",X"54",X"13",X"62",X"00",
X"00",X"12",X"10",X"93",X"00",X"00",X"44",X"92",
X"00",X"00",X"00",X"52",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"50",X"00",
X"B8",X"B6",X"B4",X"91",X"BF",X"B3",X"B2",X"B1",
X"B0",X"B9",X"B7",X"B5",X"00",X"00",X"BD",X"12",
X"51",X"00",X"02",X"02",X"4E",X"BD",X"BF",X"00",
X"00",X"00",X"BF",X"00",X"BD",X"80",X"BD",X"B0",
X"BF",X"B2",X"B1",X"B6",X"B7",X"B4",X"10",X"00",
X"B5",X"40",X"02",X"54",X"90",X"00",X"00",X"40",
X"02",X"4E",X"90",X"00",X"00",X"40",X"02",X"54",
X"90",X"00",X"00",X"90",X"00",X"00",X"00",X"02",
X"4C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"02",X"4C",X"00",X"00",X"02",X"4E",X"00",X"B6",
X"B4",X"BF",X"B2",X"B1",X"B0",X"B7",X"B5",X"00",
X"BD",X"90",X"00",X"00",X"00",X"00",X"02",X"4C",
X"00",X"00",X"02",X"4E",X"90",X"00",X"00",X"40",
X"02",X"02",X"90",X"82",X"90",X"00",X"00",X"00",
X"10",X"11",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"92",X"00",X"00",X"10",X"12",
X"11",X"00",X"B6",X"B4",X"BF",X"92",X"B2",X"B1",
X"B0",X"B7",X"B5",X"E0",X"BD",X"02",X"4E",X"90",
X"00",X"00",X"40",X"02",X"02",X"4C",X"90",X"00",
X"00",X"00",X"00",X"02",X"4C",X"00",X"00",X"02",
X"11",X"54",X"30",X"90",X"00",X"00",X"90",X"00",
X"00",X"00",X"02",X"4C",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"02",X"4C",X"00",X"00",X"02",
X"4E",X"00",X"00",X"12",X"00",X"32",X"BD",X"BF",
X"B6",X"B7",X"B4",X"00",X"B5",X"00",X"00",X"00",
X"00",X"80",X"00",X"00",X"A0",X"A0",X"40",X"00",
X"B6",X"B4",X"BF",X"B7",X"B5",X"E0",X"BD",X"80",
X"00",X"00",X"A0",X"40",X"02",X"B6",X"B4",X"4E",
X"BF",X"B7",X"B5",X"00",X"00",X"BD",X"B6",X"B4",
X"4E",X"BF",X"B7",X"B5",X"00",X"00",X"BD",X"BD",
X"02",X"B1",X"B0",X"B8",X"B9",X"10",X"11",X"58",
X"02",X"BC",X"BD",X"BA",X"BB",X"B6",X"B7",X"B4",
X"B5",X"BF",X"5A",X"16",X"3C",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"40",X"00",X"02",X"3A",X"5C",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"40",X"00",X"18",X"00",
X"00",X"00",X"00",X"00",X"10",X"11",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"10",X"11",
X"00",X"BC",X"BA",X"B8",X"B4",X"00",X"B6",X"BF",
X"B1",X"B0",X"BD",X"BB",X"B9",X"B7",X"B5",X"00",
X"00",X"BD",X"BD",X"02",X"B8",X"B9",X"58",X"02",
X"BA",X"BB",X"5A",X"02",X"BC",X"BD",X"B6",X"B7",
X"B4",X"B5",X"BF",X"B2",X"B1",X"B0",X"5C",X"80",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"40",X"00",X"02",
X"10",X"58",X"02",X"5C",X"1A",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"40",X"00",X"02",X"5A",X"02",X"18",
X"5C",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"40",X"00",
X"02",X"4E",X"00",X"12",X"02",X"03",X"74",X"80",
X"42",X"10",X"11",X"92",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"10",
X"11",X"00",X"BC",X"BA",X"B8",X"B4",X"00",X"B6",
X"BF",X"B2",X"B1",X"B0",X"BD",X"BB",X"B9",X"B7",
X"B5",X"00",X"00",X"BD",X"BD",X"BF",X"00",X"AE",
X"AE",X"00",X"00",X"00",X"00",X"00",X"BF",X"00",
X"BD",X"A0",X"00",X"A3",X"60",X"05",X"44",X"A0",
X"04",X"E0",X"00",X"05",X"00",X"00",X"00",X"0A",
X"CA",X"07",X"05",X"A8",X"83",X"C6",X"03",X"08",
X"20",X"02",X"60",X"A9",X"20",X"00",X"83",X"42",
X"CA",X"07",X"E0",X"00",X"80",X"00",X"A0",X"00",
X"05",X"00",X"00",X"00",X"0A",X"CA",X"07",X"05",
X"A8",X"83",X"C6",X"03",X"08",X"20",X"02",X"60",
X"A9",X"20",X"00",X"83",X"42",X"CA",X"07",X"60",
X"00",X"02",X"E0",X"00",X"04",X"A1",X"0B",X"05",
X"00",X"6B",X"80",X"05",X"00",X"00",X"04",X"C4",
X"07",X"05",X"A8",X"43",X"C6",X"03",X"20",X"08",
X"60",X"A9",X"20",X"00",X"43",X"C4",X"07",X"E0",
X"00",X"80",X"05",X"00",X"00",X"04",X"C4",X"07",
X"05",X"A8",X"43",X"C6",X"03",X"20",X"08",X"60",
X"A9",X"20",X"00",X"43",X"C4",X"07",X"E0",X"00",
X"C9",X"49",X"80",X"C9",X"80",X"C9",X"E6",X"BF",
X"C9",X"0D",X"E6",X"EC",X"00",X"00",X"0A",X"80",
X"31",X"80",X"00",X"31",X"C0",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
589,10 → 313,28
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal bram1 : t_bram := (
X"80",X"80",X"80",X"00",X"80",X"03",X"80",X"02",
X"80",X"7F",X"80",X"00",X"80",X"02",X"80",X"01",
X"00",X"18",X"FF",X"00",X"00",X"00",X"00",X"FF",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
609,175 → 351,28
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"10",X"20",X"00",X"00",
X"00",X"00",X"00",X"00",X"20",X"00",X"00",X"10",
X"00",X"00",X"18",X"03",X"20",X"00",X"00",X"00",
X"00",X"00",X"00",X"28",X"00",X"00",X"00",X"00",
X"00",X"00",X"28",X"00",X"00",X"00",X"00",X"00",
X"10",X"FF",X"20",X"00",X"00",X"FF",X"00",X"80",
X"00",X"00",X"00",X"00",X"00",X"00",X"80",X"80",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"30",X"00",X"00",X"80",X"02",X"40",X"20",
X"20",X"80",X"00",X"00",X"FF",X"00",X"20",X"20",
X"00",X"38",X"00",X"80",X"30",X"80",X"00",X"00",
X"00",X"80",X"80",X"02",X"00",X"A0",X"FF",X"00",
X"40",X"40",X"00",X"FF",X"00",X"FF",X"FF",X"00",
X"00",X"20",X"00",X"00",X"00",X"00",X"00",X"48",
X"00",X"20",X"00",X"00",X"48",X"48",X"FF",X"FF",
X"00",X"00",X"50",X"FF",X"20",X"00",X"00",X"00",
X"58",X"20",X"00",X"00",X"00",X"00",X"FF",X"58",
X"00",X"20",X"FF",X"FF",X"30",X"FF",X"30",X"60",
X"00",X"00",X"00",X"00",X"FF",X"00",X"00",X"03",
X"00",X"00",X"04",X"00",X"00",X"04",X"00",X"00",
X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
X"10",X"00",X"00",X"00",X"00",X"20",X"20",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"FF",X"00",
X"00",X"20",X"00",X"20",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"30",X"00",X"00",X"38",X"FF",
X"00",X"00",X"10",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"80",
X"10",X"00",X"00",X"00",X"60",X"70",X"1D",X"3D",
X"00",X"FF",X"00",X"00",X"30",X"00",X"28",X"48",
X"30",X"00",X"28",X"38",X"00",X"00",X"00",X"30",
X"00",X"00",X"28",X"00",X"00",X"30",X"30",X"00",
X"10",X"00",X"FF",X"20",X"00",X"FF",X"FF",X"10",
X"20",X"FF",X"00",X"FF",X"20",X"00",X"00",X"FF",
X"10",X"20",X"FF",X"FF",X"00",X"00",X"FF",X"37",
X"10",X"37",X"10",X"1D",X"18",X"00",X"00",X"00",
X"18",X"00",X"00",X"00",X"28",X"01",X"18",X"18",
X"01",X"28",X"01",X"30",X"10",X"FF",X"FF",X"00",
X"00",X"00",X"18",X"00",X"00",X"00",X"70",X"80",
X"10",X"70",X"01",X"00",X"60",X"70",X"00",X"FF",
X"00",X"40",X"28",X"28",X"40",X"FF",X"FF",X"00",
X"2C",X"44",X"48",X"4C",X"00",X"00",X"10",X"48",
X"FF",X"00",X"4C",X"20",X"FF",X"24",X"00",X"18",
X"54",X"14",X"15",X"28",X"20",X"48",X"48",X"4A",
X"10",X"00",X"2D",X"00",X"1D",X"FF",X"FF",X"00",
X"20",X"00",X"18",X"FF",X"10",X"20",X"FF",X"00",
X"00",X"30",X"00",X"FF",X"37",X"10",X"37",X"10",
X"1D",X"18",X"00",X"00",X"00",X"00",X"00",X"00",
X"18",X"00",X"00",X"00",X"60",X"70",X"00",X"FF",
X"00",X"28",X"40",X"28",X"40",X"21",X"1A",X"00",
X"00",X"00",X"FF",X"2C",X"20",X"23",X"FF",X"00",
X"54",X"10",X"14",X"00",X"00",X"58",X"58",X"FF",
X"00",X"5C",X"48",X"FF",X"4C",X"00",X"10",X"64",
X"14",X"16",X"28",X"28",X"58",X"58",X"5A",X"10",
X"10",X"14",X"00",X"00",X"00",X"10",X"10",X"00",
X"2D",X"00",X"1D",X"FF",X"00",X"00",X"20",X"00",
X"18",X"FF",X"10",X"20",X"FF",X"00",X"00",X"00",
X"00",X"30",X"00",X"FF",X"37",X"10",X"37",X"10",
X"1D",X"18",X"00",X"00",X"00",X"00",X"00",X"00",
X"18",X"00",X"00",X"00",X"60",X"00",X"FF",X"00",
X"25",X"10",X"10",X"00",X"00",X"20",X"00",X"11",
X"00",X"00",X"00",X"10",X"00",X"00",X"10",X"00",
X"00",X"02",X"10",X"00",X"10",X"00",X"FF",X"18",
X"00",X"00",X"00",X"FF",X"10",X"28",X"FF",X"00",
X"FF",X"28",X"00",X"00",X"FF",X"10",X"28",X"FF",
X"FF",X"00",X"FF",X"10",X"1D",X"27",X"10",X"27",
X"10",X"00",X"00",X"00",X"10",X"FF",X"FF",X"10",
X"00",X"00",X"00",X"02",X"00",X"60",X"70",X"00",
X"00",X"10",X"17",X"2F",X"30",X"00",X"28",X"00",
X"00",X"00",X"FF",X"00",X"35",X"2D",X"00",X"00",
X"38",X"00",X"28",X"00",X"00",X"FF",X"20",X"18",
X"00",X"20",X"28",X"28",X"00",X"00",X"10",X"00",
X"00",X"00",X"00",X"00",X"FF",X"00",X"10",X"02",
X"00",X"02",X"00",X"02",X"00",X"02",X"00",X"60",
X"70",X"00",X"10",X"00",X"10",X"60",X"70",X"00",
X"10",X"00",X"10",X"FF",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"FF",X"00",X"00",X"10",X"00",
X"00",X"00",X"FF",X"00",X"00",X"00",X"00",X"00",
X"20",X"20",X"FF",X"30",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"FF",X"00",X"00",X"FF",X"00",
X"FF",X"30",X"00",X"00",X"00",X"00",X"00",X"FF",
X"00",X"00",X"FF",X"00",X"FF",X"30",X"00",X"00",
X"20",X"00",X"00",X"00",X"FF",X"20",X"00",X"00",
X"00",X"00",X"20",X"00",X"00",X"00",X"20",X"00",
X"00",X"00",X"FF",X"20",X"00",X"00",X"00",X"6D",
X"65",X"6D",X"46",X"20",X"30",X"2D",X"36",X"3A",
X"00",X"63",X"72",X"6E",X"34",X"31",X"00",X"48",
X"6F",X"72",X"0A",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"65",X"02",X"00",X"03",X"03",X"01",X"06",
X"03",X"01",X"A3",X"00",X"02",X"00",X"03",X"03",
X"01",X"05",X"03",X"01",X"A3",X"00",X"98",X"02",
X"00",X"00",X"D3",X"B3",X"00",X"00",X"01",X"B6",
X"70",X"01",X"03",X"60",X"70",X"01",X"06",X"03",
X"01",X"C3",X"03",X"01",X"B3",X"03",X"03",X"01",
X"06",X"03",X"01",X"A3",X"88",X"FF",X"C5",X"B0",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"FF",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"16",X"03",X"65",X"01",
X"00",X"05",X"B3",X"02",X"A3",X"B3",X"FF",X"A3",
X"70",X"02",X"B3",X"B3",X"00",X"A3",X"01",X"00",
X"05",X"70",X"02",X"B3",X"B3",X"FF",X"A3",X"00",
X"16",X"02",X"A3",X"00",X"B3",X"01",X"A3",X"FF",
X"02",X"05",X"00",X"00",X"00",X"16",X"02",X"B3",
X"00",X"00",X"16",X"01",X"B3",X"80",X"05",X"88",
X"B3",X"01",X"B3",X"00",X"16",X"80",X"98",X"A5",
X"A6",X"00",X"00",X"70",X"01",X"B3",X"FF",X"00",
X"05",X"20",X"02",X"00",X"03",X"01",X"A3",X"03",
X"B3",X"01",X"05",X"03",X"01",X"C3",X"FF",X"06",
X"00",X"00",X"00",X"70",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"03",X"01",X"00",X"00",
X"16",X"03",X"00",X"00",X"16",X"FF",X"00",X"01",
X"00",X"03",X"00",X"03",X"00",X"70",X"FF",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"60",X"02",
X"00",X"00",X"00",X"16",X"60",X"02",X"A3",X"00",
X"00",X"16",X"60",X"02",X"00",X"00",X"00",X"16",
X"60",X"01",X"A3",X"60",X"A3",X"01",X"05",X"00",
X"16",X"01",X"03",X"03",X"01",X"B3",X"03",X"03",
X"00",X"17",X"01",X"03",X"00",X"17",X"03",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"01",
X"00",X"70",X"01",X"A3",X"03",X"03",X"00",X"16",
X"03",X"03",X"00",X"17",X"60",X"02",X"00",X"00",
X"80",X"10",X"70",X"60",X"A0",X"01",X"90",X"05",
X"00",X"00",X"A3",X"01",X"B3",X"20",X"02",X"05",
X"03",X"01",X"A3",X"60",X"01",X"03",X"00",X"00",
X"FF",X"A3",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"16",X"60",
X"02",X"00",X"FF",X"00",X"00",X"16",X"70",X"01",
X"00",X"03",X"03",X"00",X"16",X"03",X"03",X"00",
X"80",X"16",X"80",X"60",X"01",X"A3",X"60",X"A3",
X"01",X"05",X"00",X"16",X"01",X"03",X"03",X"01",
X"B3",X"03",X"03",X"00",X"17",X"01",X"03",X"00",
X"17",X"01",X"03",X"00",X"03",X"90",X"FF",X"00",
X"00",X"00",X"00",X"75",X"00",X"01",X"65",X"03",
X"03",X"70",X"B3",X"02",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"70",
X"02",X"A3",X"00",X"00",X"00",X"00",X"00",X"16",
X"00",X"00",X"00",X"03",X"01",X"00",X"00",X"00",
X"16",X"00",X"00",X"00",X"03",X"01",X"00",X"FF",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"17",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"17",X"16",X"17",X"04",X"65",X"01",
X"00",X"A3",X"E3",X"01",X"05",X"05",X"A3",X"02",
X"C3",X"B3",X"FF",X"D3",X"00",X"17",X"17",X"04",
X"A3",X"01",X"00",X"A3",X"C3",X"01",X"05",X"05",
X"A3",X"02",X"D3",X"B3",X"FF",X"E3",X"16",X"A3",
X"01",X"C3",X"07",X"A6",X"00",X"00",X"D3",X"01",
X"A3",X"20",X"02",X"06",X"03",X"01",X"C3",X"03",
X"D3",X"01",X"06",X"03",X"01",X"E3",X"00",X"FF",
X"07",X"00",X"00",X"00",X"00",X"B3",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"03",
X"01",X"00",X"FF",X"00",X"00",X"00",X"17",X"00",
X"00",X"00",X"17",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"17",X"B0",
X"04",X"65",X"01",X"00",X"B3",X"E3",X"01",X"05",
X"05",X"A3",X"02",X"C3",X"A3",X"FF",X"D3",X"00",
X"00",X"17",X"00",X"17",X"17",X"04",X"00",X"01",
X"00",X"B3",X"E3",X"01",X"05",X"05",X"A3",X"02",
X"C3",X"A3",X"FF",X"D3",X"00",X"17",X"00",X"17",
X"17",X"05",X"00",X"01",X"00",X"B3",X"E3",X"01",
X"05",X"05",X"A3",X"02",X"C3",X"A3",X"FF",X"D3",
X"00",X"16",X"01",X"80",X"00",X"00",X"16",X"C0",
X"90",X"00",X"00",X"70",X"01",X"A3",X"20",X"02",
X"05",X"03",X"01",X"A3",X"03",X"01",X"C3",X"00",
X"FF",X"06",X"00",X"00",X"00",X"00",X"B3",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"03",X"01",X"00",X"FF",X"00",X"04",X"00",
X"00",X"00",X"73",X"01",X"03",X"03",X"00",X"04",
X"00",X"00",X"10",X"00",X"00",X"28",X"10",X"FF",
X"20",X"00",X"00",X"1F",X"30",X"10",X"05",X"00",
X"00",X"18",X"28",X"00",X"48",X"00",X"38",X"47",
X"FF",X"10",X"FF",X"00",X"FF",X"00",X"20",X"00",
X"FF",X"18",X"00",X"00",X"00",X"00",X"00",X"58",
X"1F",X"30",X"10",X"05",X"00",X"00",X"18",X"28",
X"00",X"48",X"00",X"38",X"47",X"FF",X"10",X"FF",
X"00",X"FF",X"00",X"20",X"00",X"FF",X"18",X"00",
X"00",X"10",X"00",X"00",X"20",X"FF",X"00",X"28",
X"05",X"00",X"10",X"1F",X"30",X"05",X"00",X"00",
X"18",X"28",X"00",X"48",X"00",X"38",X"FF",X"47",
X"FF",X"00",X"FF",X"00",X"10",X"FF",X"18",X"00",
X"00",X"10",X"1F",X"30",X"05",X"00",X"00",X"18",
X"28",X"00",X"48",X"00",X"38",X"FF",X"47",X"FF",
X"00",X"FF",X"00",X"10",X"FF",X"18",X"00",X"00",
X"0F",X"0F",X"00",X"0F",X"00",X"0F",X"66",X"96",
X"0F",X"DB",X"66",X"73",X"00",X"00",X"95",X"00",
X"72",X"00",X"00",X"72",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
847,15 → 442,34
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal bram0 : t_bram := (
X"01",X"00",X"00",X"08",X"00",X"04",X"00",X"08",
X"00",X"2A",X"FD",X"04",X"AD",X"00",X"0E",X"98",
X"00",X"F0",X"00",X"00",X"00",X"00",X"00",X"E8",
X"00",X"2A",X"FD",X"04",X"8B",X"00",X"0E",X"98",
X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
X"30",X"34",X"38",X"3C",X"40",X"44",X"48",X"4C",
X"50",X"54",X"00",X"FC",X"58",X"10",X"5C",X"12",
X"60",X"00",X"20",X"00",X"10",X"00",X"24",X"90",
X"60",X"00",X"20",X"00",X"10",X"00",X"24",X"E0",
X"00",X"10",X"14",X"18",X"1C",X"20",X"24",X"28",
X"2C",X"30",X"34",X"38",X"3C",X"40",X"44",X"48",
X"4C",X"50",X"54",X"58",X"5C",X"00",X"11",X"60",
867,175 → 481,23
X"28",X"2C",X"08",X"00",X"00",X"04",X"08",X"0C",
X"10",X"14",X"18",X"1C",X"20",X"24",X"28",X"2C",
X"00",X"08",X"00",X"19",X"12",X"10",X"08",X"00",
X"0C",X"08",X"00",X"FF",X"00",X"00",X"08",X"21",
X"08",X"00",X"21",X"E8",X"00",X"0A",X"04",X"02",
X"1B",X"0D",X"01",X"12",X"00",X"00",X"18",X"30",
X"FF",X"00",X"12",X"00",X"00",X"02",X"1B",X"0D",
X"12",X"ED",X"23",X"08",X"00",X"C0",X"20",X"00",
X"00",X"05",X"02",X"1A",X"0D",X"38",X"00",X"00",
X"08",X"04",X"3C",X"34",X"30",X"2C",X"28",X"24",
X"1C",X"12",X"10",X"18",X"00",X"20",X"80",X"80",
X"21",X"21",X"00",X"04",X"FD",X"00",X"27",X"21",
X"01",X"21",X"08",X"00",X"40",X"00",X"10",X"51",
X"0C",X"00",X"00",X"20",X"14",X"21",X"FF",X"02",
X"80",X"21",X"00",X"FF",X"18",X"FE",X"FF",X"0C",
X"08",X"12",X"00",X"00",X"02",X"1A",X"0D",X"10",
X"00",X"12",X"20",X"10",X"80",X"21",X"FD",X"FE",
X"18",X"00",X"21",X"FF",X"12",X"00",X"00",X"18",
X"12",X"21",X"00",X"02",X"1A",X"0D",X"FE",X"10",
X"00",X"12",X"ED",X"FC",X"23",X"FE",X"40",X"21",
X"0C",X"08",X"10",X"02",X"1A",X"0D",X"F2",X"04",
X"10",X"12",X"92",X"21",X"10",X"00",X"04",X"02",
X"1A",X"0D",X"10",X"40",X"0C",X"10",X"10",X"B8",
X"14",X"3C",X"21",X"38",X"34",X"30",X"2C",X"28",
X"24",X"20",X"1C",X"18",X"08",X"40",X"00",X"00",
X"26",X"00",X"08",X"00",X"00",X"00",X"C2",X"C2",
X"7F",X"FF",X"FF",X"FF",X"24",X"80",X"24",X"2A",
X"25",X"2E",X"25",X"23",X"1E",X"34",X"00",X"07",
X"02",X"00",X"23",X"02",X"00",X"23",X"21",X"2C",
X"21",X"2D",X"00",X"24",X"07",X"80",X"00",X"43",
X"24",X"FD",X"01",X"80",X"24",X"06",X"00",X"80",
X"40",X"24",X"FD",X"FF",X"1D",X"7F",X"FF",X"C2",
X"24",X"C0",X"25",X"C0",X"25",X"00",X"08",X"00",
X"23",X"1E",X"04",X"00",X"07",X"50",X"21",X"21",
X"50",X"21",X"50",X"21",X"23",X"D5",X"00",X"00",
X"08",X"00",X"21",X"00",X"08",X"00",X"00",X"00",
X"26",X"00",X"3C",X"00",X"00",X"00",X"7F",X"FF",
X"80",X"24",X"24",X"25",X"25",X"FF",X"FF",X"18",
X"02",X"02",X"12",X"02",X"00",X"18",X"12",X"21",
X"FF",X"18",X"02",X"12",X"FF",X"02",X"18",X"21",
X"02",X"00",X"C2",X"12",X"21",X"21",X"21",X"40",
X"25",X"1B",X"C2",X"FF",X"C2",X"00",X"81",X"FF",
X"24",X"06",X"21",X"00",X"42",X"24",X"FD",X"01",
X"0F",X"26",X"7F",X"FF",X"C2",X"24",X"C0",X"25",
X"C0",X"25",X"00",X"08",X"00",X"00",X"08",X"00",
X"21",X"00",X"08",X"00",X"00",X"00",X"7F",X"FF",
X"80",X"24",X"24",X"25",X"25",X"00",X"02",X"02",
X"1B",X"0D",X"FF",X"02",X"12",X"00",X"FF",X"18",
X"02",X"12",X"02",X"00",X"18",X"12",X"21",X"FF",
X"18",X"02",X"12",X"FF",X"02",X"18",X"21",X"02",
X"00",X"02",X"12",X"21",X"21",X"21",X"00",X"25",
X"23",X"00",X"02",X"1A",X"0D",X"12",X"21",X"1D",
X"C2",X"FF",X"C2",X"00",X"7E",X"FF",X"24",X"06",
X"23",X"00",X"42",X"24",X"FD",X"01",X"11",X"00",
X"0F",X"26",X"7F",X"FF",X"C2",X"24",X"C0",X"25",
X"C0",X"25",X"00",X"08",X"00",X"00",X"08",X"00",
X"21",X"00",X"08",X"00",X"00",X"7F",X"FF",X"80",
X"C2",X"24",X"25",X"FF",X"9D",X"23",X"05",X"C0",
X"1F",X"07",X"00",X"07",X"02",X"00",X"23",X"08",
X"00",X"44",X"21",X"20",X"21",X"21",X"00",X"24",
X"22",X"00",X"96",X"00",X"43",X"24",X"FD",X"01",
X"80",X"24",X"07",X"7F",X"80",X"40",X"24",X"FD",
X"FF",X"7F",X"FF",X"24",X"C0",X"C2",X"25",X"C0",
X"25",X"00",X"08",X"00",X"23",X"E1",X"00",X"21",
X"00",X"08",X"00",X"58",X"96",X"00",X"00",X"00",
X"1E",X"21",X"C2",X"C2",X"2B",X"1D",X"2B",X"19",
X"00",X"02",X"FF",X"01",X"C2",X"C2",X"FF",X"FF",
X"2B",X"0D",X"2B",X"11",X"7F",X"FF",X"24",X"24",
X"80",X"25",X"25",X"2B",X"02",X"00",X"23",X"08",
X"00",X"08",X"01",X"08",X"FF",X"08",X"23",X"75",
X"00",X"75",X"00",X"75",X"00",X"75",X"00",X"00",
X"00",X"00",X"26",X"08",X"2B",X"00",X"00",X"00",
X"26",X"08",X"2B",X"B8",X"01",X"24",X"20",X"1C",
X"18",X"14",X"44",X"40",X"34",X"30",X"2C",X"28",
X"3C",X"06",X"4B",X"38",X"06",X"86",X"94",X"86",
X"06",X"8E",X"86",X"00",X"4B",X"64",X"06",X"86",
X"94",X"86",X"06",X"8E",X"86",X"00",X"21",X"DA",
X"0A",X"00",X"06",X"86",X"1A",X"01",X"8E",X"86",
X"00",X"94",X"06",X"00",X"00",X"8E",X"06",X"86",
X"DC",X"06",X"86",X"8E",X"06",X"06",X"86",X"94",
X"06",X"06",X"8E",X"86",X"21",X"E3",X"86",X"06",
X"44",X"3C",X"34",X"2C",X"24",X"20",X"1C",X"18",
X"14",X"40",X"38",X"30",X"28",X"08",X"48",X"C0",
X"00",X"34",X"30",X"2C",X"28",X"24",X"20",X"1C",
X"18",X"14",X"3C",X"38",X"E0",X"1A",X"86",X"8E",
X"00",X"86",X"06",X"75",X"86",X"06",X"F8",X"86",
X"00",X"75",X"06",X"06",X"0A",X"86",X"3C",X"00",
X"86",X"00",X"75",X"06",X"06",X"F8",X"86",X"00",
X"E4",X"75",X"86",X"43",X"06",X"8E",X"86",X"FF",
X"4B",X"86",X"00",X"00",X"00",X"EC",X"75",X"06",
X"07",X"00",X"E4",X"8E",X"86",X"00",X"86",X"26",
X"06",X"94",X"86",X"00",X"E8",X"00",X"26",X"86",
X"06",X"02",X"0C",X"00",X"94",X"06",X"FF",X"18",
X"86",X"12",X"4B",X"02",X"86",X"94",X"06",X"86",
X"06",X"DC",X"06",X"86",X"3C",X"06",X"EC",X"06",
X"3C",X"34",X"2C",X"00",X"24",X"20",X"1C",X"18",
X"14",X"38",X"30",X"28",X"06",X"94",X"40",X"00",
X"E8",X"3D",X"00",X"00",X"EC",X"E8",X"14",X"8E",
X"00",X"06",X"14",X"07",X"18",X"00",X"D0",X"10",
X"1C",X"18",X"14",X"2C",X"28",X"24",X"00",X"75",
X"20",X"63",X"00",X"E8",X"00",X"75",X"86",X"29",
X"00",X"F8",X"00",X"75",X"00",X"2C",X"00",X"FC",
X"00",X"8E",X"86",X"00",X"86",X"94",X"86",X"00",
X"E8",X"3C",X"86",X"86",X"DC",X"06",X"85",X"06",
X"00",X"00",X"3C",X"86",X"00",X"04",X"06",X"2C",
X"24",X"1C",X"18",X"14",X"10",X"28",X"20",X"8E",
X"30",X"00",X"DC",X"06",X"85",X"06",X"00",X"EC",
X"B7",X"86",X"00",X"08",X"00",X"75",X"00",X"37",
X"00",X"26",X"00",X"00",X"00",X"94",X"21",X"86",
X"03",X"0F",X"06",X"94",X"86",X"21",X"4B",X"06",
X"86",X"DC",X"06",X"00",X"3C",X"86",X"02",X"00",
X"F2",X"06",X"2C",X"24",X"1C",X"00",X"18",X"14",
X"10",X"28",X"20",X"08",X"30",X"00",X"F0",X"00",
X"75",X"00",X"9E",X"00",X"00",X"E8",X"00",X"DC",
X"00",X"85",X"06",X"00",X"F4",X"B7",X"86",X"00",
X"00",X"FC",X"26",X"00",X"8E",X"86",X"00",X"86",
X"94",X"86",X"00",X"E8",X"3C",X"86",X"86",X"DC",
X"06",X"85",X"06",X"00",X"00",X"3C",X"86",X"00",
X"04",X"8E",X"06",X"00",X"EA",X"26",X"D0",X"1C",
X"2C",X"28",X"24",X"86",X"20",X"DC",X"06",X"85",
X"06",X"00",X"06",X"75",X"10",X"10",X"08",X"00",
X"2C",X"24",X"1C",X"28",X"20",X"08",X"30",X"00",
X"75",X"06",X"10",X"0A",X"00",X"2C",X"24",X"E4",
X"1C",X"28",X"20",X"06",X"3C",X"30",X"2C",X"24",
X"E4",X"1C",X"28",X"20",X"06",X"8E",X"30",X"B8",
X"00",X"18",X"14",X"34",X"30",X"00",X"00",X"14",
X"00",X"44",X"40",X"3C",X"38",X"2C",X"28",X"24",
X"20",X"1C",X"0C",X"E8",X"10",X"76",X"06",X"94",
X"00",X"06",X"86",X"3C",X"86",X"06",X"06",X"75",
X"86",X"06",X"F4",X"86",X"00",X"10",X"18",X"89",
X"06",X"94",X"00",X"06",X"86",X"3C",X"86",X"06",
X"06",X"75",X"86",X"06",X"F4",X"86",X"E8",X"86",
X"3C",X"06",X"06",X"86",X"02",X"0F",X"06",X"94",
X"86",X"21",X"4B",X"86",X"86",X"94",X"06",X"86",
X"06",X"DC",X"06",X"86",X"3C",X"06",X"01",X"EE",
X"06",X"44",X"3C",X"34",X"24",X"86",X"2C",X"1C",
X"18",X"14",X"40",X"38",X"30",X"28",X"20",X"06",
X"94",X"48",X"B8",X"00",X"34",X"30",X"24",X"00",
X"3C",X"38",X"1C",X"00",X"44",X"40",X"2C",X"28",
X"24",X"20",X"1C",X"18",X"14",X"10",X"20",X"00",
X"D9",X"06",X"94",X"00",X"06",X"86",X"3C",X"06",
X"86",X"06",X"75",X"86",X"06",X"F4",X"86",X"00",
X"00",X"30",X"00",X"2C",X"28",X"EE",X"00",X"94",
X"00",X"06",X"86",X"3C",X"06",X"86",X"06",X"75",
X"86",X"06",X"F4",X"86",X"00",X"14",X"00",X"28",
X"2C",X"02",X"00",X"94",X"00",X"06",X"86",X"8E",
X"06",X"86",X"06",X"75",X"86",X"06",X"F4",X"86",
X"00",X"E8",X"8E",X"00",X"00",X"00",X"F0",X"00",
X"26",X"01",X"0E",X"00",X"94",X"06",X"21",X"4B",
X"06",X"86",X"DC",X"06",X"86",X"3C",X"06",X"01",
X"F2",X"06",X"44",X"3C",X"34",X"24",X"86",X"2C",
X"1C",X"18",X"14",X"10",X"40",X"38",X"30",X"28",
X"20",X"06",X"3C",X"48",X"E0",X"1C",X"BA",X"10",
X"10",X"00",X"06",X"94",X"86",X"06",X"1C",X"57",
X"20",X"07",X"21",X"01",X"02",X"42",X"21",X"FB",
X"40",X"08",X"00",X"C0",X"21",X"21",X"53",X"20",
X"11",X"25",X"42",X"02",X"2B",X"01",X"42",X"80",
X"F7",X"40",X"F5",X"02",X"F3",X"00",X"23",X"01",
X"F1",X"25",X"08",X"00",X"1F",X"00",X"20",X"21",
X"C0",X"21",X"21",X"70",X"20",X"11",X"25",X"42",
X"02",X"2B",X"01",X"42",X"80",X"F7",X"40",X"F5",
X"02",X"F3",X"00",X"23",X"01",X"F1",X"25",X"02",
X"00",X"23",X"08",X"00",X"23",X"E2",X"01",X"23",
X"68",X"01",X"21",X"C0",X"21",X"92",X"20",X"0F",
X"25",X"42",X"02",X"2B",X"01",X"42",X"F8",X"80",
X"F6",X"02",X"F4",X"00",X"23",X"F3",X"25",X"08",
X"00",X"21",X"C0",X"21",X"A9",X"20",X"0F",X"25",
X"42",X"02",X"2B",X"01",X"42",X"F8",X"80",X"F6",
X"02",X"F4",X"00",X"23",X"F3",X"25",X"08",X"00",
X"DA",X"DA",X"00",X"DA",X"00",X"DA",X"66",X"B5",
X"DA",X"55",X"66",X"26",X"00",X"00",X"55",X"00",
X"18",X"00",X"00",X"18",X"00",X"00",X"00",X"00",
X"0C",X"08",X"00",X"00",X"E8",X"14",X"A1",X"DC",
X"00",X"A1",X"04",X"00",X"14",X"1C",X"A1",X"18",
X"00",X"20",X"00",X"02",X"FC",X"00",X"00",X"08",
X"21",X"00",X"00",X"11",X"0A",X"00",X"00",X"0D",
X"0E",X"00",X"01",X"20",X"00",X"02",X"FC",X"00",
X"00",X"00",X"00",X"F4",X"00",X"08",X"21",X"20",
X"00",X"02",X"FC",X"00",X"00",X"AB",X"01",X"1C",
X"00",X"00",X"FC",X"06",X"0F",X"0A",X"0D",X"00",
X"20",X"00",X"02",X"FC",X"00",X"30",X"FC",X"00",
X"F3",X"06",X"08",X"00",X"20",X"00",X"02",X"FC",
X"00",X"57",X"FC",X"00",X"E7",X"06",X"08",X"00",
X"00",X"20",X"00",X"02",X"FC",X"00",X"49",X"00",
X"08",X"00",X"00",X"20",X"08",X"01",X"00",X"20",
X"00",X"01",X"FC",X"00",X"00",X"08",X"00",X"70",
X"20",X"65",X"65",X"36",X"31",X"2D",X"3A",X"35",
X"00",X"20",X"73",X"3A",X"2E",X"0A",X"00",X"65",
X"20",X"6C",X"0A",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
1105,6 → 567,30
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
 
1112,7 → 598,6
-- bytes for each word of SRAM_SIZE
type t_sram is array(0 to SRAM_SIZE*2-1) of std_logic_vector(7 downto 0);
signal sram1 : t_sram := (
X"00",X"27",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
1623,10 → 1108,10
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
signal sram0 : t_sram := (
X"00",X"10",X"00",X"38",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
2137,6 → 1622,7
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00",
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00"
);
 
2154,7 → 1640,7
signal done : std_logic := '0';
 
-- interface to asynchronous 16-bit-wide external SRAM
signal sram_address : std_logic_vector(SRAM_ADDR_SIZE-1 downto 1);
signal sram_address : std_logic_vector(SRAM_ADDR_SIZE downto 1);
signal sram_databus : std_logic_vector(15 downto 0);
signal sram_byte_we_n : std_logic_vector(1 downto 0);
signal sram_oe_n : std_logic;
2183,20 → 1669,9
--------------------------------------------------------------------------------
-- Logging signals
 
-- These are internal CPU signal mirrored using Modelsim's SignalSpy
signal rbank : t_rbank;
signal pc, cp0_epc : std_logic_vector(31 downto 2);
signal reg_hi, reg_lo : t_word;
signal negate_reg_lo : std_logic;
signal ld_upper_byte : std_logic;
signal ld_upper_hword : std_logic;
signal data_rd_vma : std_logic;
signal code_rd_vma : std_logic;
signal data_rd_address : std_logic_vector(31 downto 0);
 
 
-- Log file
file l_file: TEXT open write_mode is "hw_sim_log.txt";
file log_file: TEXT open write_mode is "hw_sim_log.txt";
 
-- Console output log file
file con_file: TEXT open write_mode is "hw_sim_console_log.txt";
2209,6 → 1684,8
signal con_line_buf : string(1 to CONSOLE_LOG_LINE_SIZE);
signal con_line_ix : integer := 1;
 
signal log_info : t_log_info;
 
-- Debug signals ---------------------------------------------------------------
 
 
2264,6 → 1741,7
data_wr => cpu_data_wr,
mem_wait => cpu_mem_wait,
cache_enable => '1',
-- interface to FPGA i/o devices
io_rd_data => io_rd_data,
2279,6 → 1757,7
bram_rd_addr => bram_rd_addr,
bram_wr_addr => bram_wr_addr,
bram_byte_we => bram_byte_we,
bram_data_rd_vma=> bram_data_rd_vma,
-- interface to asynchronous 16-bit-wide external SRAM
sram_address => sram_address,
2357,9 → 1836,10
 
-- Do a very basic simulation of an external SRAM
simulated_sram:
process(sram_byte_we_n, sram_address)
process(sram_byte_we_n, sram_address, sram_oe_n)
begin
-- FIXME should add OE\ to control logic
-- Write cycle
-- FIXME should add OE\ to write control logic
if sram_byte_we_n'event or sram_address'event then
if sram_byte_we_n(1)='0' then
sram1(conv_integer(unsigned(sram_address))) <= sram_databus(15 downto 8);
2366,8 → 1846,21
end if;
if sram_byte_we_n(0)='0' then
sram0(conv_integer(unsigned(sram_address))) <= sram_databus( 7 downto 0);
end if;
end if;
 
-- Read cycle
-- FIXME should add some verification of /WE
if sram_oe_n'event or sram_address'event then
if sram_oe_n='0' then
sram_databus <=
sram1(conv_integer(unsigned(sram_address))) &
sram0(conv_integer(unsigned(sram_address)));
else
sram_databus <= (others => 'Z');
end if;
end if;
 
end process simulated_sram;
 
 
2419,144 → 1912,17
end process simulated_io;
 
-- UART read registers; only status, and hardwired, for the time being
io_rd_data <= X"00000003";
data_uart <= data_uart_status;
data_uart_status <= X"0000000" & "00" & uart_tx_rdy & uart_rx_rdy;
 
 
signalspy_rbank:
log_execution:
process
begin
init_signal_spy("/mips_tb2/cpu/p1_rbank", "rbank", 0, -1);
init_signal_spy("/mips_tb2/cpu/p0_pc_reg", "pc", 0, -1);
init_signal_spy("/mips_tb2/cpu/mult_div/upper_reg", "reg_hi", 0, -1);
init_signal_spy("/mips_tb2/cpu/mult_div/lower_reg", "reg_lo", 0, -1);
init_signal_spy("/mips_tb2/cpu/mult_div/negate_reg", "negate_reg_lo", 0, -1);
init_signal_spy("/mips_tb2/cpu/cp0_epc", "cp0_epc", 0, -1);
init_signal_spy("/mips_tb2/cpu/p2_ld_upper_byte", "ld_upper_byte", 0, -1);
init_signal_spy("/mips_tb2/cpu/p2_ld_upper_byte", "ld_upper_hword", 0, -1);
init_signal_spy("/mips_tb2/cpu/data_rd_vma", "data_rd_vma", 0, -1);
init_signal_spy("/mips_tb2/cpu/code_rd_vma", "code_rd_vma", 0, -1);
log_cpu_activity(clk, reset, done,
"mips_tb2/cpu", log_info, "log_info", log_file);
wait;
end process signalspy_rbank;
end process log_execution;
 
 
log_cpu_activity:
process(clk)
variable prev_rbank : t_rbank := (others => X"00000000");
variable ri : std_logic_vector(7 downto 0);
variable full_pc : t_word := (others => '0');
variable prev_pc : t_word := (others => '0');
variable prev_hi : t_word := (others => '0');
variable prev_lo : t_word := (others => '0');
variable prev_epc : std_logic_vector(31 downto 2) := (others => '0');
variable wr_data : t_word := (others => '0');
variable temp : t_word := (others => '0');
variable size : std_logic_vector(7 downto 0) := X"00";
variable prev_vma_data : std_logic := '0';
variable prev_rd_addr : t_word := (others => '0');
variable prev_rd_data : t_word := (others => '0');
variable rd_size : std_logic_vector(7 downto 0) := X"00";
begin
-- we'll be sampling control & data signals at falling edge, when
-- they're stable
if clk'event and clk='0' then
if reset='0' then
-- log loads (data only)
-- IMPORTANT: memory reads should be logged first because we're
-- logging them the cycle after they actually happen. If you put
-- the log code after any other log, the order of the operations
-- will appear wrong in the log even though it is not.
if prev_vma_data='1' and cpu_mem_wait='0' then
if ld_upper_hword='1' then
rd_size := X"04";
elsif ld_upper_byte='1' then
rd_size := X"02";
else
rd_size := X"01";
end if;
print(l_file, "("& hstr(prev_pc) &") ["& hstr(prev_rd_addr) &"] <"&
"**"&
--hstr(rd_size)&
">="& hstr(cpu_data_rd)& " RD");
end if;
prev_rd_data := cpu_data_rd;
if cpu_mem_wait='0' then
prev_vma_data := data_rd_vma;
prev_rd_addr := full_rd_addr;
end if;
-- log register changes
ri := X"00";
for i in 0 to 31 loop
if prev_rbank(i)/=rbank(i) then
print(l_file, "("& hstr(full_pc)& ") ["& hstr(ri)& "]="& hstr(rbank(i)));
end if;
ri := ri + 1;
end loop;
 
-- log aux register changes, only when pipeline is not stalled
if prev_lo /= reg_lo and reg_lo(0)/='U' and code_rd_vma='1' then
-- we're observing the value of reg_lo, but the mult core
-- will output the negated value in some cases. We
-- have to mimic that behavior.
if negate_reg_lo='1' then
-- negate reg_lo before displaying
prev_lo := not reg_lo;
prev_lo := prev_lo + 1;
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(prev_lo));
else
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(reg_lo));
end if;
end if;
if prev_hi /= reg_hi and reg_hi(0)/='U' and code_rd_vma='1' then
print(l_file, "("& hstr(full_pc)& ") [HI]="& hstr(reg_hi));
end if;
if prev_epc /= cp0_epc and cp0_epc(31)/='U' then
temp := cp0_epc & "00";
print(l_file, "("& hstr(full_pc)& ") [EP]="& hstr(temp));
end if;
 
-- 'remember' last value of hi and lo only when pipeline is not
-- stalled; that's because we don't want to be tracking the
-- changing values when mul/div is running (because the SW
-- simulator doesn't)
if code_rd_vma='1' then
prev_hi := reg_hi;
prev_lo := reg_lo;
end if;
 
 
full_pc := pc & "00";
prev_pc := full_pc;
prev_rbank := rbank;
prev_epc := cp0_epc;
-- log writes
if cpu_byte_we/="0000" then
wr_data := X"00000000";
if cpu_byte_we(3)='1' then
wr_data(31 downto 24) := cpu_data_wr(31 downto 24);
end if;
if cpu_byte_we(2)='1' then
wr_data(23 downto 16) := cpu_data_wr(23 downto 16);
end if;
if cpu_byte_we(1)='1' then
wr_data(15 downto 8) := cpu_data_wr(15 downto 8);
end if;
if cpu_byte_we(0)='1' then
wr_data( 7 downto 0) := cpu_data_wr( 7 downto 0);
end if;
size := "0000" & cpu_byte_we; -- mask, really
print(l_file, "("& hstr(full_pc) &") ["& hstr(full_wr_addr) &"] |"& hstr(size)& "|="& hstr(wr_data)& " WR" );
end if;
if full_code_addr(31 downto 28)="1111" then
print(l_file, "ERROR: Code addressed upper memory area" );
end if;
 
end if;
end if;
end process log_cpu_activity;
end architecture testbench;

powered by: WebSVN 2.1.0

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