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 11 to Rev 12
- ↔ Reverse comparison
Rev 11 → Rev 12
/vhdl/mips_pkg.vhdl
35,4 → 35,17
inp1_eq_inp2 : std_logic; |
end record t_alu_flags; |
|
-- 32-cycle mul/div module control. Bits 4-3 & 1-0 of IR. |
subtype t_mult_function is std_logic_vector(3 downto 0); |
constant MULT_NOTHING : t_mult_function := "0000"; |
constant MULT_READ_LO : t_mult_function := "1010"; -- 18 |
constant MULT_READ_HI : t_mult_function := "1000"; -- 16 |
constant MULT_WRITE_LO : t_mult_function := "1011"; -- 19 |
constant MULT_WRITE_HI : t_mult_function := "1001"; -- 17 |
constant MULT_MULT : t_mult_function := "1101"; -- 25 |
constant MULT_SIGNED_MULT : t_mult_function := "1100"; -- 24 |
constant MULT_DIVIDE : t_mult_function := "1111"; -- 26 |
constant MULT_SIGNED_DIVIDE : t_mult_function := "1110"; -- 27 |
|
|
end package; |
/vhdl/tb/mips_tb1.vhdl
1,5 → 1,5
--############################################################################## |
-- This file was generated automatically from '/src/mips_tb1_template.vhdl'. |
-- This file was generated automatically from '/src/mips_tb0_template.vhdl'. |
-- |
-- Simulates the CPU core connected to two memory block, a read-only block |
-- initialized with code and a read-write block initialized with all data, |
7,10 → 7,8
-- to build simulation test benches using this template. |
-- |
-- The memory setup is meant to test the 'bare' cpu, without cache. |
-- |
-- Address decoding is harcoded to that of Plasma system, for the time being. |
-- |
-- |
-- IMPORTANT: The code that echoes UART TX data to the simulation console does |
-- line buffering; it will not print anything until it gets a CR (0x0d), and |
-- will ifnore LFs (0x0a). Bear this in mind if you see no output when you |
41,13 → 39,14
|
-- 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 |
constant SIMULATION_LENGTH : integer := 2000; |
|
|
-------------------------------------------------------------------------------- |
-- UUT & interface signals |
|
86,6 → 85,7
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; |
|
95,192 → 95,141
|
-------------------------------------------------------------------------------- |
|
-- 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; |
|
signal data_addr_rd : t_data_address; |
signal data_addr_wr : t_data_address; |
subtype t_address is std_logic_vector(ADDR_SIZE-1 downto 0); |
|
-- ram0 is LSB, ram3 is MSB |
signal ram3 : t_data_ram := ( X"63",X"69",X"74",X"3A",X"6E",X"20",X"31",X"20", |
X"32",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", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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"30", |
X"38",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"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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"4A",X"32",X"30",X"2D",X"39", |
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"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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"61",X"38",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"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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 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); |
|
-- 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); |
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; |
|
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", |
-- ram0 is LSB, ram3 is MSB |
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"3C",X"37",X"03",X"00",X"40", |
X"23",X"03",X"20",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"3C",X"24",X"20",X"18",X"00",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"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",X"00",X"00",X"00", |
290,126 → 239,126
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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", |
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"1A",X"5A",X"40",X"00",X"1A", |
X"5A",X"40",X"84",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"05",X"A5",X"A6",X"C0",X"00",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"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",X"00",X"00",X"00", |
419,159 → 368,126
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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"00",X"7F",X"00",X"00",X"00",X"02",X"00",X"02", |
X"00",X"18",X"FF",X"00",X"00",X"00",X"00",X"FF", |
signal ram1 : t_code_ram := ( X"00",X"8E",X"00",X"0E",X"00",X"0E",X"00",X"00", |
X"00",X"00",X"00",X"10",X"00",X"00",X"00",X"70", |
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"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"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"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"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"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"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",X"00",X"00",X"00",X"10",X"20",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"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"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"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"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"08",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"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"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"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"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"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",X"00",X"00",X"00", |
581,93 → 497,126
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",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"01",X"F0",X"01",X"58",X"01",X"60",X"01",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"01",X"E8",X"14",X"A1",X"00", |
X"01",X"A1",X"28",X"01",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"B0",X"00",X"B4",X"00",X"B4",X"00",X"00", |
X"0A",X"00",X"00",X"00",X"3C",X"08",X"00",X"00", |
X"04",X"08",X"05",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"00",X"2C",X"00",X"01",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"02", |
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"13",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"A4",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"E4",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"4F",X"05",X"01", |
X"00",X"54",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"61", |
X"05",X"01",X"00",X"66",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"AB",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
X"00",X"00",X"00",X"00",X"00",X"00",X"00",X"00", |
677,97 → 626,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" |
); |
|
|
begin |
|
uut: entity work.mips_cpu |
832,10 → 693,11
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; |
856,10 → 718,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 |
881,7 → 743,7
|
-- UART TX data goes to output after a bit of line-buffering |
-- and editing |
if uart_data = 13 then |
if uart_data = 10 then |
-- CR received: print output string and clear it |
print(s); |
si := 1; |
888,7 → 750,7
for i in 1 to s'high loop |
s(i) := ' '; |
end loop; |
elsif uart_data = 10 then |
elsif uart_data = 13 then |
-- ignore LF |
else |
-- append char to output string |
900,16 → 762,16
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; |
921,8 → 783,9
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/mdiv_hi_reg", "reg_hi", 0, -1); |
init_signal_spy("/mips_tb1/uut/mdiv_lo_reg", "reg_lo", 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); |
980,23 → 843,41
ri := ri + 1; |
end loop; |
|
-- log aux register changes |
if prev_hi /= reg_hi and reg_hi(0)/='U' then |
-- 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_lo /= reg_lo and reg_lo(0)/='U' then |
print(l_file, "("& hstr(full_pc)& ") [LO]="& hstr(reg_lo)); |
end if; |
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_hi := reg_hi; |
prev_lo := reg_lo; |
prev_epc := cp0_epc; |
|
-- log memory writes |
/vhdl/mips_mult.vhdl
0,0 → 1,256
-------------------------------------------------------------------------------- |
-- mips_mult.vhdl -- multiplier from Plasma project, slightly modified. |
-- |
-- The original file from Plasma has been adapted to the Ion core. Changes are |
-- tagged with '@ion'. There are a few notes at the end of the file with the |
-- rationale for the changes -- useful only if any trouble shows up later. |
-- The structure has not changed, only a few implementation details. |
-------------------------------------------------------------------------------- |
--------------------------------------------------------------------- |
-- TITLE: Multiplication and Division Unit |
-- AUTHORS: Steve Rhoads (rhoadss@yahoo.com) |
-- DATE CREATED: 1/31/01 |
-- FILENAME: mult.vhd |
-- PROJECT: Plasma CPU core |
-- COPYRIGHT: Software placed into the public domain by the author. |
-- Software 'as is' without warranty. Author liable for nothing. |
-- DESCRIPTION: |
-- Implements the multiplication and division unit in 32 clocks. |
-- |
-- To reduce space, compile your code using the flag "-mno-mul" which |
-- will use software base routines in math.c if USE_SW_MULT is defined. |
-- Then remove references to the entity mult in mlite_cpu.vhd. |
-- |
-- MULTIPLICATION |
-- long64 answer = 0 |
-- for(i = 0; i < 32; ++i) |
-- { |
-- answer = (answer >> 1) + (((b&1)?a:0) << 31); |
-- b = b >> 1; |
-- } |
-- |
-- DIVISION |
-- long upper=a, lower=0; |
-- a = b << 31; |
-- for(i = 0; i < 32; ++i) |
-- { |
-- lower = lower << 1; |
-- if(upper >= a && a && b < 2) |
-- { |
-- upper = upper - a; |
-- lower |= 1; |
-- } |
-- a = ((b&2) << 30) | (a >> 1); |
-- b = b >> 1; |
-- } |
--------------------------------------------------------------------- |
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.std_logic_unsigned.all; |
use IEEE.std_logic_arith.all; |
use work.mips_pkg.all; |
|
entity mips_mult is |
generic(mult_type : string := "DEFAULT"); |
port(clk : in std_logic; |
reset_in : in std_logic; |
a, b : in std_logic_vector(31 downto 0); |
mult_func : in t_mult_function; |
c_mult : out std_logic_vector(31 downto 0); |
pause_out : out std_logic); |
end; --entity mult |
|
architecture logic of mips_mult is |
|
constant MODE_MULT : std_logic := '1'; |
constant MODE_DIV : std_logic := '0'; |
|
signal mode_reg : std_logic; |
signal negate_reg : std_logic; |
signal sign_reg : std_logic; |
signal sign2_reg : std_logic; |
signal count_reg : std_logic_vector(5 downto 0); |
signal aa_reg : std_logic_vector(31 downto 0); |
signal bb_reg : std_logic_vector(31 downto 0); |
signal upper_reg : std_logic_vector(31 downto 0); |
signal lower_reg : std_logic_vector(31 downto 0); |
|
signal a_neg : std_logic_vector(31 downto 0); |
signal b_neg : std_logic_vector(31 downto 0); |
signal sum : std_logic_vector(32 downto 0); |
signal sum_a : std_logic_vector(32 downto 0); |
signal sum_b : std_logic_vector(32 downto 0); |
|
begin |
|
-- @ion Output mux no longer uses function bv_negate. Removing one input that |
-- is no longer needed, even if constant, may help in some FPGA architectures |
-- too. |
-- See @note2 |
-- Result |
c_mult <= lower_reg when mult_func = MULT_READ_LO and |
negate_reg = '0' else |
not(lower_reg) + 1 when mult_func = MULT_READ_LO and |
--bv_negate(lower_reg) when mult_func = MULT_READ_LO and |
negate_reg = '1' else |
upper_reg; -- when mult_func = MULT_READ_HI else |
--ZERO; |
|
-- @ion Stall pipeline while operation completes even if output is not needed |
-- immediately. |
-- See @note3 |
pause_out <= '1' when (count_reg(5 downto 0) /= "000000") else '0'; --and |
--(mult_func = MULT_READ_LO or mult_func = MULT_READ_HI) else '0'; |
|
-- ABS and remainder signals |
a_neg <= not(a) + 1; --bv_negate(a); -- @ion @note2 |
b_neg <= not(b) + 1; --bv_negate(b); -- @ion @note2 |
|
-- @ion Replaced function bv_adder with straight vector code |
--sum <= bv_adder(upper_reg, aa_reg, mode_reg); |
sum_a <= ('0' & upper_reg); -- No sign extension: MSB of sum is special |
sum_b <= ('0' & aa_reg); |
with mode_reg select sum <= |
sum_a + sum_b when '1', |
sum_a - sum_b when others; |
|
--multiplication/division unit |
mult_proc: process(clk, reset_in, a, b, mult_func, |
a_neg, b_neg, sum, sign_reg, mode_reg, negate_reg, |
count_reg, aa_reg, bb_reg, upper_reg, lower_reg) |
variable count : std_logic_vector(2 downto 0); |
begin |
count := "001"; |
if reset_in = '1' then |
mode_reg <= '0'; |
negate_reg <= '0'; |
sign_reg <= '0'; |
sign2_reg <= '0'; |
count_reg <= "000000"; |
aa_reg <= ZERO; |
bb_reg <= ZERO; |
upper_reg <= ZERO; |
lower_reg <= ZERO; |
elsif rising_edge(clk) then |
case mult_func is |
when MULT_WRITE_LO => |
lower_reg <= a; |
negate_reg <= '0'; |
when MULT_WRITE_HI => |
upper_reg <= a; |
negate_reg <= '0'; |
when MULT_MULT => |
mode_reg <= MODE_MULT; |
aa_reg <= a; |
bb_reg <= b; |
upper_reg <= ZERO; |
count_reg <= "100000"; |
negate_reg <= '0'; |
sign_reg <= '0'; |
sign2_reg <= '0'; |
when MULT_SIGNED_MULT => |
mode_reg <= MODE_MULT; |
if b(31) = '0' then |
aa_reg <= a; |
bb_reg <= b; |
sign_reg <= a(31); |
else |
aa_reg <= a_neg; |
bb_reg <= b_neg; |
sign_reg <= a_neg(31); |
end if; |
sign2_reg <= '0'; |
upper_reg <= ZERO; |
count_reg <= "100000"; |
negate_reg <= '0'; |
when MULT_DIVIDE => |
mode_reg <= MODE_DIV; |
aa_reg <= b(0) & ZERO(30 downto 0); |
bb_reg <= b; |
upper_reg <= a; |
count_reg <= "100000"; |
negate_reg <= '0'; |
when MULT_SIGNED_DIVIDE => |
mode_reg <= MODE_DIV; |
if b(31) = '0' then |
aa_reg(31) <= b(0); |
bb_reg <= b; |
else |
aa_reg(31) <= b_neg(0); |
bb_reg <= b_neg; |
end if; |
if a(31) = '0' then |
upper_reg <= a; |
else |
upper_reg <= a_neg; |
end if; |
aa_reg(30 downto 0) <= ZERO(30 downto 0); |
count_reg <= "100000"; |
negate_reg <= a(31) xor b(31); |
when others => |
|
if count_reg /= "000000" then |
if mode_reg = MODE_MULT then |
-- Multiplication |
if bb_reg(0) = '1' then |
upper_reg <= (sign_reg xor sum(32)) & sum(31 downto 1); |
lower_reg <= sum(0) & lower_reg(31 downto 1); |
sign2_reg <= sign2_reg or sign_reg; |
sign_reg <= '0'; |
bb_reg <= '0' & bb_reg(31 downto 1); |
-- The following six lines are optional for speedup |
--elsif bb_reg(3 downto 0) = "0000" and sign2_reg = '0' and |
-- count_reg(5 downto 2) /= "0000" then |
-- upper_reg <= "0000" & upper_reg(31 downto 4); |
-- lower_reg <= upper_reg(3 downto 0) & lower_reg(31 downto 4); |
-- count := "100"; |
-- bb_reg <= "0000" & bb_reg(31 downto 4); |
else |
upper_reg <= sign2_reg & upper_reg(31 downto 1); |
lower_reg <= upper_reg(0) & lower_reg(31 downto 1); |
bb_reg <= '0' & bb_reg(31 downto 1); |
end if; |
else |
-- Division |
if sum(32) = '0' and aa_reg /= ZERO and |
bb_reg(31 downto 1) = ZERO(31 downto 1) then |
upper_reg <= sum(31 downto 0); |
lower_reg(0) <= '1'; |
else |
lower_reg(0) <= '0'; |
end if; |
aa_reg <= bb_reg(1) & aa_reg(31 downto 1); |
lower_reg(31 downto 1) <= lower_reg(30 downto 0); |
bb_reg <= '0' & bb_reg(31 downto 1); |
end if; |
count_reg <= count_reg - count; |
end if; --count |
|
end case; |
|
end if; |
|
end process; |
|
end; --architecture logic |
|
-------------------------------------------------------------------------------- |
-- @note1 : bv_adder function removed |
-- This function was a slightly modified adder/substractor coded in a bitwise |
-- manner that made it hard for synth tools to recognize it as such. At least |
-- that's what I think. Replacing it with straigth code results in smaller and |
-- faster logic (about 23% faster). |
-- |
-- @note2 : bv_negate function removed |
-- This function computed a 2's complement bitwise. Removed on the same grounds |
-- as @note1 but with no apparent improvement in synthesis results. |
-- |
-- @note3 : pause_out active until operation complete |
-- The original Plasma module allowed the pipeline and the multiplier to run |
-- concurrently until the multiplier result was needed, and only then the |
-- pipeline was stalled. |
-- We want to make sure we can abort a mul/div so for the time being we stall |
-- until the operation is complete. |
-- note that if we later want to change this, the parent module will need |
-- changes too (logic for p1_muldiv_running). |
-------------------------------------------------------------------------------- |
/vhdl/mips_cpu.vhdl
122,7 → 122,6
signal p1_alu_flags : t_alu_flags; |
-- immediate data, sign- or zero-extended as required by IR |
signal p1_data_imm : t_word; |
signal p1_muldiv_result : t_dword; |
signal p1_branch_offset : t_pc; |
signal p1_branch_offset_sex:std_logic_vector(31 downto 18); |
signal p1_rbank_rs_hazard : std_logic; |
159,9 → 158,17
signal p1_data_addr : t_addr; |
signal p1_data_offset : t_addr; |
|
signal p1_muldiv_result : t_word; |
signal p1_muldiv_func : t_mult_function; |
signal p1_muldiv_running : std_logic; |
signal p1_muldiv_started : std_logic; |
signal p1_muldiv_stall : std_logic; |
|
|
-------------------------------------------------------------------------------- |
-- Pipeline stage 2 |
|
signal p2_muldiv_started : std_logic; |
signal p2_exception : std_logic; |
signal p2_rd_addr : std_logic_vector(1 downto 0); |
signal p2_rd_mux_control : std_logic_vector(3 downto 0); |
184,14 → 191,7
-- pipeline is stalled because of a load instruction interlock |
signal pipeline_interlocked:std_logic; |
|
|
-------------------------------------------------------------------------------- |
-- Multiplier interface registers |
|
signal mdiv_hi_reg : t_word; |
signal mdiv_lo_reg : t_word; |
|
-------------------------------------------------------------------------------- |
-- CP0 registers and signals |
|
-- CP0[12]: status register |
326,10 → 326,10
p1_alu_inp1 <= p1_rs; |
|
with p1_alu_op2_sel select p1_alu_inp2 <= |
p1_data_imm when "11", |
p1_muldiv_result(63 downto 32) when "01", |
p1_muldiv_result(31 downto 0) when "10", |
p1_rt when others; |
p1_data_imm when "11", |
p1_muldiv_result when "01", -- FIXME mux input wasted! |
p1_muldiv_result when "10", |
p1_rt when others; |
|
alu_inst : entity work.mips_alu |
port map ( |
347,25 → 347,58
-------------------------------------------------------------------------------- |
-- Mul/Div block interface |
|
-- FIXME when MUL*/DIV* are implemented, these registers and the load enable |
-- logic will change a little. It may be better to move them into the alu. |
mult_registers: |
process(clk) |
begin |
if clk'event and clk='1' then |
-- MTHI, MTLO are never involved in stall cycles, no need to check |
if p1_load_hi='1' then |
mdiv_hi_reg <= p1_rs; |
end if; |
if p1_load_lo='1' then |
mdiv_lo_reg <= p1_rs; |
end if; |
end if; |
end process mult_registers; |
-- Compute the mdiv block function word. If p1_muldiv_func has any value other |
-- than MULT_NOTHING a new mdiv operation will start, truncating whatever other |
-- operation that may have been in course. |
-- So we encode here the function to be performed and make sure the value stays |
-- there for only one cycle (the first ALU cycle of the mul/div instruction). |
|
p1_muldiv_result <= mdiv_hi_reg & mdiv_lo_reg; -- FIXME stub, mdiv missing |
-- This will be '1' for all mul/div operations other than NOP... |
p1_muldiv_func(3) <= '1' when p1_op_special='1' and |
p1_ir_fn(5 downto 4)="01" and |
-- ...but only if the mdiv is not already running |
p2_muldiv_started = '0' and |
p1_muldiv_running ='0' |
else '0'; |
|
-- When bit(3) is zero, the rest are zeroed too. Otherwise, they come from IR |
p1_muldiv_func(2 downto 0) <= |
p1_ir_fn(3) & p1_ir_fn(1 downto 0) when p1_muldiv_func(3)='1' |
else "000"; |
|
mult_div: entity work.mips_mult |
port map ( |
a => p1_rs, |
b => p1_rt, |
c_mult => p1_muldiv_result, |
pause_out => p1_muldiv_running, |
mult_func => p1_muldiv_func, |
clk => clk, |
reset_in => reset |
); |
|
-- Active only for the 1st ALU cycle of any mul/div instruction |
p1_muldiv_started <= '1' when p1_op_special='1' and |
p1_ir_fn(5 downto 3)="011" and |
-- |
p1_muldiv_running='0' |
else '0'; |
|
-- Stall the pipeline to enable mdiv operation completion. |
-- We need p2_muldiv_started to distinguish the cycle before p1_muldiv_running |
-- is asserted and the cycle after it deasserts. |
-- Otherwise we would reexecute the same muldiv endlessly instruction after |
-- deassertion of p1_muldiv_running, since the IR was stalled and still contains |
-- the mul opcode... |
p1_muldiv_stall <= '1' when |
-- Active for the cycle immediately before p1_muldiv_running asserts |
-- and NOT for the cycle after it deasserts |
(p1_muldiv_started='1' and p2_muldiv_started='0') or |
-- Active until operation is complete |
p1_muldiv_running = '1' |
else '0'; |
|
|
--############################################################################## |
-- PC register and branch logic |
|
636,7 → 669,19
end if; |
end process pipeline_stage1_register; |
|
pipeline_stage1_register2: |
process(clk) |
begin |
if clk'event and clk='1' then |
if reset='1' then |
p2_muldiv_started <= '0'; |
else |
p2_muldiv_started <= p1_muldiv_running; |
end if; |
end if; |
end process pipeline_stage1_register2; |
|
|
-- Stage 2 pipeline register. Split in two for convenience. |
-- This register deals with two kinds of stalls: |
-- * When the pipeline stalls because of a load interlock, this register is |
721,7 → 766,7
end process pipeline_stall_registers; |
|
-- FIXME make sure this combinational will not have bad glitches |
stall_pipeline <= mem_wait or load_interlock; |
stall_pipeline <= mem_wait or load_interlock or p1_muldiv_stall; |
|
|
-- FIXME load interlock should happen only if the instruction following |