vertigo_vhdl 0.8.6 → 0.8.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/vertigo/parser.rb +28 -5
- data/lib/vertigo/tb_generator.rb +39 -18
- data/lib/vertigo/version.rb +1 -1
- data/tests/parser_tests/test_adder_rca_vhdl93.vhd +37 -0
- metadata +4 -85
- data/tests/ghdl_tests/test_fsm.vhd +0 -162
- data/tests/parser_tests/else.vhd +0 -64
- data/tests/parser_tests/pingpong.vhd +0 -34
- data/tests/parser_tests/test_accelerator_pp.vhd +0 -144
- data/tests/parser_tests/test_aggregate_pp.vhd +0 -15
- data/tests/parser_tests/test_archi_1_pp.vhd +0 -41
- data/tests/parser_tests/test_array_array_00_pp.vhd +0 -25
- data/tests/parser_tests/test_array_urange_pp.vhd +0 -25
- data/tests/parser_tests/test_chu-1_pp.vhd +0 -104
- data/tests/parser_tests/test_concat_pp.vhd +0 -14
- data/tests/parser_tests/test_counter_pp.vhd +0 -35
- data/tests/parser_tests/test_de2_pp.vhd +0 -274
- data/tests/parser_tests/test_encode_pp.vhd +0 -2549
- data/tests/parser_tests/test_fsm_pp.vhd +0 -125
- data/tests/parser_tests/test_fsm_synth_pp.vhd +0 -197
- data/tests/parser_tests/test_function-01_pp.vhd +0 -18
- data/tests/parser_tests/test_lfsr_pp.vhd +0 -44
- data/tests/parser_tests/test_microwatt_cache_ram_pp.vhd +0 -68
- data/tests/parser_tests/test_microwatt_common_pp.vhd +0 -336
- data/tests/parser_tests/test_microwatt_control_pp.vhd +0 -187
- data/tests/parser_tests/test_microwatt_core_debug_pp.vhd +0 -104
- data/tests/parser_tests/test_microwatt_core_pp.vhd +0 -231
- data/tests/parser_tests/test_microwatt_core_tb_pp.vhd +0 -43
- data/tests/parser_tests/test_microwatt_countzero_pp.vhd +0 -120
- data/tests/parser_tests/test_microwatt_countzero_tb_pp.vhd +0 -70
- data/tests/parser_tests/test_microwatt_cr_file_pp.vhd +0 -74
- data/tests/parser_tests/test_microwatt_cr_hazard_pp.vhd +0 -51
- data/tests/parser_tests/test_microwatt_crhelpers_pp.vhd +0 -48
- data/tests/parser_tests/test_microwatt_dcache_pp.vhd +0 -481
- data/tests/parser_tests/test_microwatt_dcache_tb_pp.vhd +0 -98
- data/tests/parser_tests/test_microwatt_decode1_pp.vhd +0 -138
- data/tests/parser_tests/test_microwatt_decode2_pp.vhd +0 -300
- data/tests/parser_tests/test_microwatt_decode_types_pp.vhd +0 -67
- data/tests/parser_tests/test_microwatt_divider_pp.vhd +0 -132
- data/tests/parser_tests/test_microwatt_divider_tb_pp.vhd +0 -95
- data/tests/parser_tests/test_microwatt_dmi_dtm_dummy_pp.vhd +0 -29
- data/tests/parser_tests/test_microwatt_dmi_dtm_tb_pp.vhd +0 -197
- data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx_pp.vhd +0 -139
- data/tests/parser_tests/test_microwatt_execute1_pp.vhd +0 -689
- data/tests/parser_tests/test_microwatt_fetch1_pp.vhd +0 -88
- data/tests/parser_tests/test_microwatt_fetch2_pp.vhd +0 -79
- data/tests/parser_tests/test_microwatt_glibc_random_helpers_pp.vhd +0 -25
- data/tests/parser_tests/test_microwatt_glibc_random_pp.vhd +0 -41
- data/tests/parser_tests/test_microwatt_gpr_hazard_pp.vhd +0 -68
- data/tests/parser_tests/test_microwatt_helpers_pp.vhd +0 -153
- data/tests/parser_tests/test_microwatt_icache_pp.vhd +0 -337
- data/tests/parser_tests/test_microwatt_icache_tb_pp.vhd +0 -104
- data/tests/parser_tests/test_microwatt_insn_helpers_pp.vhd +0 -208
- data/tests/parser_tests/test_microwatt_loadstore1_pp.vhd +0 -222
- data/tests/parser_tests/test_microwatt_logical_pp.vhd +0 -87
- data/tests/parser_tests/test_microwatt_multiply_pp.vhd +0 -84
- data/tests/parser_tests/test_microwatt_multiply_tb_pp.vhd +0 -75
- data/tests/parser_tests/test_microwatt_plru_pp.vhd +0 -46
- data/tests/parser_tests/test_microwatt_plru_tb_pp.vhd +0 -93
- data/tests/parser_tests/test_microwatt_ppc_fx_insns_pp.vhd +0 -665
- data/tests/parser_tests/test_microwatt_register_file_pp.vhd +0 -86
- data/tests/parser_tests/test_microwatt_rotator_pp.vhd +0 -149
- data/tests/parser_tests/test_microwatt_rotator_tb_pp.vhd +0 -134
- data/tests/parser_tests/test_microwatt_sim_bram_helpers_pp.vhd +0 -52
- data/tests/parser_tests/test_microwatt_sim_bram_pp.vhd +0 -53
- data/tests/parser_tests/test_microwatt_sim_console_pp.vhd +0 -43
- data/tests/parser_tests/test_microwatt_sim_jtag_pp.vhd +0 -64
- data/tests/parser_tests/test_microwatt_sim_jtag_socket_pp.vhd +0 -36
- data/tests/parser_tests/test_microwatt_sim_uart_pp.vhd +0 -90
- data/tests/parser_tests/test_microwatt_soc_pp.vhd +0 -195
- data/tests/parser_tests/test_microwatt_utils_pp.vhd +0 -39
- data/tests/parser_tests/test_microwatt_wishbone_arbiter_pp.vhd +0 -54
- data/tests/parser_tests/test_microwatt_wishbone_bram_tb_pp.vhd +0 -157
- data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper_pp.vhd +0 -62
- data/tests/parser_tests/test_microwatt_wishbone_debug_master_pp.vhd +0 -124
- data/tests/parser_tests/test_microwatt_wishbone_types_pp.vhd +0 -38
- data/tests/parser_tests/test_microwatt_writeback_pp.vhd +0 -87
- data/tests/parser_tests/test_package-1_pp.vhd +0 -53
- data/tests/parser_tests/test_precedence_pp.vhd +0 -16
- data/tests/parser_tests/test_selected_sig_pp.vhd +0 -10
- data/tests/parser_tests/test_slice_pp.vhd +0 -16
- data/tests/parser_tests/test_tb-00_pp.vhd +0 -71
- data/tests/parser_tests/test_type_decl_02_pp.vhd +0 -11
- data/tests/parser_tests/test_use_pp.vhd +0 -10
- data/tests/parser_tests/test_while_1_pp.vhd +0 -26
- data/tests/parser_tests/test_with-00_pp.vhd +0 -12
- data/tests/tb_gen_tests/test_accelerator.vhd +0 -160
@@ -1,138 +0,0 @@
|
|
1
|
-
-- generated by Vertigo VHDL tool
|
2
|
-
library ieee;
|
3
|
-
use ieee.std_logic_1164.all;
|
4
|
-
use ieee.numeric_std.all;
|
5
|
-
library work;
|
6
|
-
use work.common.all;
|
7
|
-
use work.decode_types.all;
|
8
|
-
|
9
|
-
entity decode1 is
|
10
|
-
port(
|
11
|
-
clk : in std_ulogic;
|
12
|
-
rst : in std_ulogic;
|
13
|
-
stall_in : in std_ulogic;
|
14
|
-
flush_in : in std_ulogic;
|
15
|
-
f_in : in fetch2todecode1type;
|
16
|
-
d_out : out decode1todecode2type);
|
17
|
-
end entity decode1;
|
18
|
-
|
19
|
-
architecture behaviour of decode1 is
|
20
|
-
signal r : decode1todecode2type;
|
21
|
-
signal rin : decode1todecode2type;
|
22
|
-
|
23
|
-
subtype major_opcode_t is unsigned(5 downto 0);
|
24
|
-
|
25
|
-
type major_rom_array_t is array(range 0 to 63) of decode_rom_t;
|
26
|
-
|
27
|
-
type minor_valid_array_t is array(range 0 to 1023) of std_ulogic;
|
28
|
-
|
29
|
-
type op_19_subop_array_t is array(range 0 to 7) of decode_rom_t;
|
30
|
-
|
31
|
-
type op_30_subop_array_t is array(range 0 to 15) of decode_rom_t;
|
32
|
-
|
33
|
-
type op_31_subop_array_t is array(range 0 to 1023) of decode_rom_t;
|
34
|
-
|
35
|
-
type minor_rom_array_2_t is array(range 0 to 3) of decode_rom_t;
|
36
|
-
constant illegal_inst : decode_rom_t := (alu,op_illegal,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','1');
|
37
|
-
constant major_decode_rom_array : major_rom_array_t := (12 => (alu,op_add,ra,const_si,none,rt,'0','0','0','0',zero,'1',none,'0','0','0','0','0','0',none,'0','0'),13 => (alu,op_add,ra,const_si,none,rt,'0','0','0','0',zero,'1',none,'0','0','0','0','0','0',one,'0','0'),14 => (alu,op_add,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),15 => (alu,op_add,ra_or_zero,const_si_hi,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),28 => (alu,op_and,none,const_ui,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',one,'0','0'),29 => (alu,op_and,none,const_ui_hi,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',one,'0','0'),18 => (alu,op_b,none,const_li,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'1','0'),16 => (alu,op_bc,spr,const_bd,none,spr,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'1','0'),11 => (alu,op_cmp,ra,const_si,none,none,'0','1','1','0',one,'0',none,'0','0','0','0','0','1',none,'0','0'),10 => (alu,op_cmp,ra,const_ui,none,none,'0','1','1','0',one,'0',none,'0','0','0','0','0','0',none,'0','0'),34 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),35 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','1','0','0','0',none,'0','0'),42 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is2b,'0','1','0','0','0','0',none,'0','0'),43 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is2b,'0','1','1','0','0','0',none,'0','0'),40 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),41 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','1','0','0','0',none,'0','0'),32 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),33 => (ldst,op_load,ra_or_zero,const_si,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','1','0','0','0',none,'0','0'),7 => (alu,op_mul_l64,ra,const_si,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','1',none,'0','0'),24 => (alu,op_or,none,const_ui,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),25 => (alu,op_or,none,const_ui_hi,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),20 => (alu,op_rlc,ra,const_sh32,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),21 => (alu,op_rlc,none,const_sh32,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),23 => (alu,op_rlc,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),38 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),39 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','1','0','0','0',none,'0','0'),44 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),45 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','1','0','0','0',none,'0','0'),36 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),37 => (ldst,op_store,ra_or_zero,const_si,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','1','0','0','0',none,'0','0'),8 => (alu,op_add,ra,const_si,none,rt,'0','0','1','0',one,'1',none,'0','0','0','0','0','0',none,'0','0'),2 => (alu,op_tdi,ra,const_si,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),26 => (alu,op_xor,none,const_ui,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),27 => (alu,op_xor,none,const_ui_hi,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),others => illegal_inst);
|
38
|
-
constant decode_op_19_valid : minor_valid_array_t := (2#0000000010# => '1',2#0000100010# => '1',2#0001000010# => '1',2#0001100010# => '1',2#0010000010# => '1',2#0010100010# => '1',2#0011000010# => '1',2#0011100010# => '1',2#0100000010# => '1',2#0100100010# => '1',2#0101000010# => '1',2#0101100010# => '1',2#0110000010# => '1',2#0110100010# => '1',2#0111000010# => '1',2#0111100010# => '1',2#1000000010# => '1',2#1000100010# => '1',2#1001000010# => '1',2#1001100010# => '1',2#1010000010# => '1',2#1010100010# => '1',2#1011000010# => '1',2#1011100010# => '1',2#1100000010# => '1',2#1100100010# => '1',2#1101000010# => '1',2#1101100010# => '1',2#1110000010# => '1',2#1110100010# => '1',2#1111000010# => '1',2#1111100010# => '1',2#1000010000# => '1',2#0000010000# => '1',2#1000110000# => '0',2#0100000001# => '1',2#0010000001# => '1',2#0100100001# => '1',2#0011100001# => '1',2#0000100001# => '1',2#0111000001# => '1',2#0110100001# => '1',2#0011000001# => '1',2#0010010110# => '1',2#0000000000# => '1',2#0000010010# => '1',others => '0');
|
39
|
-
constant decode_op_19_array : op_19_subop_array_t := (2#000# => (alu,op_mcrf,none,none,none,none,'1','1','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#001# => (alu,op_illegal,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','1'),2#100# => (alu,op_bcreg,spr,spr,none,spr,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'1','0'),2#111# => (alu,op_isync,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#101# => (alu,op_rfid,spr,spr,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),others => illegal_inst);
|
40
|
-
constant decode_op_30_array : op_30_subop_array_t := (2#0100# => (alu,op_rlc,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0101# => (alu,op_rlc,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000# => (alu,op_rlcl,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0001# => (alu,op_rlcl,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0010# => (alu,op_rlcr,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0011# => (alu,op_rlcr,none,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0110# => (alu,op_rlc,ra,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0111# => (alu,op_rlc,ra,const_sh,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1000# => (alu,op_rlcl,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1001# => (alu,op_rlcr,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),others => illegal_inst);
|
41
|
-
constant decode_op_31_array : op_31_subop_array_t := (2#0100001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1100001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',zero,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1000001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',zero,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0010001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1010001010# => (alu,op_add,ra,rb,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0011101010# => (alu,op_add,ra,const_m1,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1011101010# => (alu,op_add,ra,const_m1,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0011001010# => (alu,op_add,ra,none,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1011001010# => (alu,op_add,ra,none,none,rt,'0','0','0','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0000011100# => (alu,op_and,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000111100# => (alu,op_and,none,rb,rs,ra,'0','0','1','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000000000# => (alu,op_cmp,ra,rb,none,none,'0','1','1','0',one,'0',none,'0','0','0','0','0','1',none,'0','0'),2#0111111100# => (alu,op_cmpb,none,rb,rs,ra,'0','1','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0000100000# => (alu,op_cmp,ra,rb,none,none,'0','1','1','0',one,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0000111010# => (alu,op_cntz,none,none,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000011010# => (alu,op_cntz,none,none,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1000111010# => (alu,op_cntz,none,none,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1000011010# => (alu,op_cntz,none,none,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#0001010110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0000110110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0100010110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0011110110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0110001001# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1110001001# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0110001011# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1110001011# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#0110101001# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#1110101001# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#0110101011# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#1110101011# => (alu,op_dive,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#0111001001# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1111001001# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0111001011# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1111001011# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#0111101001# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#1111101001# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#0111101011# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#1111101011# => (alu,op_div,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#0100011100# => (alu,op_xor,none,rb,rs,ra,'0','0','0','1',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1110111010# => (alu,op_exts,none,none,rs,ra,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',rc,'0','0'),2#1110011010# => (alu,op_exts,none,none,rs,ra,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',rc,'0','0'),2#1111011010# => (alu,op_exts,none,none,rs,ra,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',rc,'0','0'),2#1111010110# => (alu,op_icbi,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0000010110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0000001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0000101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0001001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0001101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0010001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0010101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0011001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0011101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0100001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0100101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0101001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0101101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0110001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0110101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0111001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0111101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1000001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1000101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1001001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1001101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1010001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1010101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1011001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1011101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1100001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1100101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1101001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1101101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1110001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1110101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1111001111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#1111101111# => (alu,op_isel,ra_or_zero,rb,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0000110100# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','0','1','0','0',none,'0','0'),2#1101010101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),2#0001110111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','1','0','0','0',none,'0','0'),2#0001010111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),2#0001010100# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','0','1','0','0',none,'0','0'),2#1000010100# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is8b,'1','0','0','0','0','0',none,'0','0'),2#1101110101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#0000110101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','1','0','0','0',none,'0','0'),2#0000010101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#0001110100# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','0','1','0','0',none,'0','0'),2#0101110111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','1','1','0','0','0',none,'0','0'),2#0101010111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','1','0','0','0','0',none,'0','0'),2#1100010110# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'1','0','0','0','0','0',none,'0','0'),2#1100110101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),2#0100110111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','1','0','0','0',none,'0','0'),2#0100010111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),2#0000010100# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','0','1','0','0',none,'0','0'),2#0101110101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','1','1','0','0','0',none,'0','0'),2#0101010101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','1','0','0','0','0',none,'0','0'),2#1000010110# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'1','0','0','0','0','0',none,'0','0'),2#1100010101# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0000110111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','1','0','0','0',none,'0','0'),2#0000010111# => (ldst,op_load,ra_or_zero,rb,none,rt,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0000010011# => (alu,op_mfcr,none,none,none,rt,'1','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0001010011# => (alu,op_mfmsr,none,none,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0101010011# => (alu,op_mfspr,spr,none,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0100001001# => (alu,op_mod,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0100001011# => (alu,op_mod,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',none,'0','0'),2#1100001001# => (alu,op_mod,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','1',none,'0','0'),2#1100001011# => (alu,op_mod,ra,rb,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','1','1',none,'0','0'),2#0010010000# => (alu,op_mtcrf,none,none,rs,none,'0','1','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0010110010# => (alu,op_mtmsrd,none,none,rs,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0111010011# => (alu,op_mtspr,none,none,rs,spr,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0'),2#0001001001# => (alu,op_mul_h64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#0000001001# => (alu,op_mul_h64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0001001011# => (alu,op_mul_h32,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#0000001011# => (alu,op_mul_h32,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1001001001# => (alu,op_mul_h64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#1000001001# => (alu,op_mul_h64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1001001011# => (alu,op_mul_h32,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#1000001011# => (alu,op_mul_h32,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#0011101001# => (alu,op_mul_l64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#1011101001# => (alu,op_mul_l64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','0','1',rc,'0','0'),2#0011101011# => (alu,op_mul_l64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#1011101011# => (alu,op_mul_l64,ra,rb,none,rt,'0','1','0','0',zero,'0',none,'0','0','0','0','1','1',rc,'0','0'),2#0111011100# => (alu,op_and,none,rb,rs,ra,'0','0','0','1',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0001101000# => (alu,op_add,ra,none,none,rt,'0','0','1','0',one,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1001101000# => (alu,op_add,ra,none,none,rt,'0','0','1','0',one,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0001111100# => (alu,op_or,none,rb,rs,ra,'0','0','0','1',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0110111100# => (alu,op_or,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0110011100# => (alu,op_or,none,rb,rs,ra,'0','0','1','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0001111010# => (alu,op_popcnt,none,none,rs,ra,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),2#0111111010# => (alu,op_popcnt,none,none,rs,ra,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#0101111010# => (alu,op_popcnt,none,none,rs,ra,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0010111010# => (alu,op_prty,none,none,rs,ra,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#0010011010# => (alu,op_prty,none,none,rs,ra,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0000011011# => (alu,op_shl,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000011000# => (alu,op_shl,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1100011010# => (alu,op_shr,none,rb,rs,ra,'0','0','0','0',zero,'1',none,'0','0','0','0','0','1',rc,'0','0'),2#1100111010# => (alu,op_shr,none,const_sh,rs,ra,'0','0','0','0',zero,'1',none,'0','0','0','0','0','1',rc,'0','0'),2#1100111011# => (alu,op_shr,none,const_sh,rs,ra,'0','0','0','0',zero,'1',none,'0','0','0','0','0','1',rc,'0','0'),2#1100011000# => (alu,op_shr,none,rb,rs,ra,'0','0','0','0',zero,'1',none,'0','0','0','0','1','1',rc,'0','0'),2#1100111000# => (alu,op_shr,none,const_sh32,rs,ra,'0','0','0','0',zero,'1',none,'0','0','0','0','1','1',rc,'0','0'),2#1000011011# => (alu,op_shr,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1000011000# => (alu,op_shr,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','1','0',rc,'0','0'),2#1111010101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),2#1010110110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','0','1','0','0',one,'0','0'),2#0011110111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','1','0','0','0',none,'0','0'),2#0011010111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is1b,'0','0','0','0','0','0',none,'0','0'),2#1010010100# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is8b,'1','0','0','0','0','0',none,'0','0'),2#1111110101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#0011010110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','0','1','0','0',one,'0','0'),2#0010110101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','1','0','0','0',none,'0','0'),2#0010010101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','0'),2#1110010110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is2b,'1','0','0','0','0','0',none,'0','0'),2#1110110101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),2#1011010110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','0','1','0','0',one,'0','0'),2#0110110111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','1','0','0','0',none,'0','0'),2#0110010111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is2b,'0','0','0','0','0','0',none,'0','0'),2#1010010110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is4b,'1','0','0','0','0','0',none,'0','0'),2#1110010101# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0010010110# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','0','1','0','0',one,'0','0'),2#0010110111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','1','0','0','0',none,'0','0'),2#0010010111# => (ldst,op_store,ra_or_zero,rb,rs,none,'0','0','0','0',zero,'0',is4b,'0','0','0','0','0','0',none,'0','0'),2#0000101000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',one,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#1000101000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',one,'0',none,'0','0','0','0','0','0',rc,'0','0'),2#0000001000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',one,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1000001000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',one,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0010001000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1010001000# => (alu,op_add,ra,rb,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0011101000# => (alu,op_add,ra,const_m1,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1011101000# => (alu,op_add,ra,const_m1,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#0011001000# => (alu,op_add,ra,none,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1011001000# => (alu,op_add,ra,none,none,rt,'0','0','1','0',ca,'1',none,'0','0','0','0','0','0',rc,'0','0'),2#1001010110# => (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0000000100# => (alu,op_tw,ra,rb,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1'),2#0100111100# => (alu,op_xor,none,rb,rs,ra,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',rc,'0','0'),others => illegal_inst);
|
42
|
-
constant decode_op_58_array : minor_rom_array_2_t := (0 => (ldst,op_load,ra_or_zero,const_ds,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','1'),1 => (ldst,op_load,ra_or_zero,const_ds,none,rt,'0','0','0','0',zero,'0',is8b,'0','0','1','0','0','0',none,'0','1'),2 => (ldst,op_load,ra_or_zero,const_ds,none,rt,'0','0','0','0',zero,'0',is4b,'0','1','0','0','0','0',none,'0','1'),others => decode_rom_init);
|
43
|
-
constant decode_op_62_array : minor_rom_array_2_t := (0 => (ldst,op_store,ra_or_zero,const_ds,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','0','0','0','0',none,'0','1'),1 => (ldst,op_store,ra_or_zero,const_ds,rs,none,'0','0','0','0',zero,'0',is8b,'0','0','1','0','0','0',none,'0','1'),others => decode_rom_init);
|
44
|
-
constant attn_instr : decode_rom_t := (alu,op_attn,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1');
|
45
|
-
constant nop_instr : decode_rom_t := (alu,op_nop,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0');
|
46
|
-
constant sc_instr : decode_rom_t := (alu,op_sc,none,none,none,none,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','0');
|
47
|
-
constant sim_cfg_instr : decode_rom_t := (alu,op_sim_config,none,none,none,rt,'0','0','0','0',zero,'0',none,'0','0','0','0','0','0',none,'0','1');
|
48
|
-
begin
|
49
|
-
|
50
|
-
|
51
|
-
decode1_0 : process(clk)
|
52
|
-
begin
|
53
|
-
if rising_edge(clk) then
|
54
|
-
if rst = '1' or flush_in = '1' or stall_in = '0' then
|
55
|
-
r <= rin;
|
56
|
-
end if;
|
57
|
-
end if;
|
58
|
-
end process;
|
59
|
-
|
60
|
-
decode1_1 : process(all)
|
61
|
-
variable v : decode1todecode2type;
|
62
|
-
variable majorop : major_opcode_t;
|
63
|
-
variable op_19_bits : std_ulogic_vector(2 downto 0);
|
64
|
-
begin
|
65
|
-
v := r;
|
66
|
-
v.valid := f_in.valid;
|
67
|
-
v.nia := f_in.nia;
|
68
|
-
v.insn := f_in.insn;
|
69
|
-
v.stop_mark := f_in.stop_mark;
|
70
|
-
v.ispr1 := (others => '0');
|
71
|
-
v.ispr2 := (others => '0');
|
72
|
-
if f_in.valid = '1' then
|
73
|
-
report "decode insn " & to_hstring(f_in.insn) & " at " & to_hstring(f_in.nia);
|
74
|
-
end if;
|
75
|
-
majorop := unsigned(f_in.insn(31 downto 26));
|
76
|
-
if majorop = "011111" then
|
77
|
-
v.decode := decode_op_31_array(to_integer(unsigned(f_in.insn(10 downto 1))));
|
78
|
-
elsif majorop = "010011" then
|
79
|
-
if decode_op_19_valid(to_integer(unsigned(f_in.insn(10 downto 1)))) = '0' then
|
80
|
-
report "op 19 illegal subcode";
|
81
|
-
v.decode := illegal_inst;
|
82
|
-
else
|
83
|
-
op_19_bits := f_in.insn(5) & f_in.insn(3) & f_in.insn(2);
|
84
|
-
v.decode := decode_op_19_array(to_integer(unsigned(op_19_bits)));
|
85
|
-
report "op 19 sub " & to_hstring(op_19_bits);
|
86
|
-
end if;
|
87
|
-
elsif majorop = "011110" then
|
88
|
-
v.decode := decode_op_30_array(to_integer(unsigned(f_in.insn(4 downto 1))));
|
89
|
-
elsif majorop = "111010" then
|
90
|
-
v.decode := decode_op_58_array(to_integer(unsigned(f_in.insn(1 downto 0))));
|
91
|
-
elsif majorop = "111110" then
|
92
|
-
v.decode := decode_op_62_array(to_integer(unsigned(f_in.insn(1 downto 0))));
|
93
|
-
elsif std_match(f_in.insn,"01100000000000000000000000000000") then
|
94
|
-
report "ppc_nop";
|
95
|
-
v.decode := nop_instr;
|
96
|
-
elsif std_match(f_in.insn,"010001--------------0000000---1-") then
|
97
|
-
report "ppc_sc";
|
98
|
-
v.decode := sc_instr;
|
99
|
-
elsif std_match(f_in.insn,"000001---------------0000000011-") then
|
100
|
-
report "ppc_sim_config";
|
101
|
-
v.decode := sim_cfg_instr;
|
102
|
-
elsif std_match(f_in.insn,"000000---------------0100000000-") then
|
103
|
-
report "ppc_attn";
|
104
|
-
v.decode := attn_instr;
|
105
|
-
else
|
106
|
-
v.decode := major_decode_rom_array(to_integer(majorop));
|
107
|
-
end if;
|
108
|
-
if v.decode.insn_type = op_bc or v.decode.insn_type = op_bcreg then
|
109
|
-
if f_in.insn(23) = '0' then
|
110
|
-
v.ispr1 := fast_spr_num(spr_ctr);
|
111
|
-
end if;
|
112
|
-
if v.decode.insn_type = op_bcreg then
|
113
|
-
if f_in.insn(10) = '0' then
|
114
|
-
v.ispr2 := fast_spr_num(spr_lr);
|
115
|
-
else
|
116
|
-
v.ispr2 := fast_spr_num(spr_ctr);
|
117
|
-
end if;
|
118
|
-
end if;
|
119
|
-
elsif v.decode.insn_type = op_mfspr or v.decode.insn_type = op_mtspr then
|
120
|
-
v.ispr1 := fast_spr_num(decode_spr_num(f_in.insn));
|
121
|
-
if is_fast_spr(v.ispr1) = '0' then
|
122
|
-
v.decode.sgl_pipe := '1';
|
123
|
-
end if;
|
124
|
-
elsif v.decode.insn_type = op_rfid then
|
125
|
-
report "ppc rfid";
|
126
|
-
v.ispr1 := fast_spr_num(spr_srr0);
|
127
|
-
v.ispr2 := fast_spr_num(spr_srr1);
|
128
|
-
end if;
|
129
|
-
if flush_in = '1' then
|
130
|
-
v.valid := '0';
|
131
|
-
end if;
|
132
|
-
if rst = '1' then
|
133
|
-
v := decode1todecode2init;
|
134
|
-
end if;
|
135
|
-
rin <= v;
|
136
|
-
d_out <= r;
|
137
|
-
end process;
|
138
|
-
end behaviour;
|
@@ -1,300 +0,0 @@
|
|
1
|
-
-- generated by Vertigo VHDL tool
|
2
|
-
library ieee;
|
3
|
-
use ieee.std_logic_1164.all;
|
4
|
-
use ieee.numeric_std.all;
|
5
|
-
library work;
|
6
|
-
use work.decode_types.all;
|
7
|
-
use work.common.all;
|
8
|
-
use work.helpers.all;
|
9
|
-
use work.insn_helpers.all;
|
10
|
-
|
11
|
-
entity decode2 is
|
12
|
-
generic(
|
13
|
-
ex1_bypass : booleantrue := true);
|
14
|
-
port(
|
15
|
-
clk : in std_ulogic;
|
16
|
-
rst : in std_ulogic;
|
17
|
-
complete_in : in std_ulogic;
|
18
|
-
stall_in : in std_ulogic;
|
19
|
-
stall_out : out std_ulogic;
|
20
|
-
stopped_out : out std_ulogic;
|
21
|
-
flush_in : in std_ulogic;
|
22
|
-
d_in : in decode1todecode2type;
|
23
|
-
e_out : out decode2toexecute1type;
|
24
|
-
r_in : in registerfiletodecode2type;
|
25
|
-
r_out : out decode2toregisterfiletype;
|
26
|
-
c_in : in crfiletodecode2type;
|
27
|
-
c_out : out decode2tocrfiletype);
|
28
|
-
end entity decode2;
|
29
|
-
|
30
|
-
architecture behaviour of decode2 is
|
31
|
-
|
32
|
-
type reg_type is record
|
33
|
-
e : decode2toexecute1type;
|
34
|
-
end record;
|
35
|
-
signal r : reg_type;
|
36
|
-
signal rin : reg_type;
|
37
|
-
|
38
|
-
type decode_input_reg_t is record
|
39
|
-
reg_valid : std_ulogic;
|
40
|
-
reg : gspr_index_t;
|
41
|
-
data : std_ulogic_vector(63 downto 0);
|
42
|
-
end record;
|
43
|
-
|
44
|
-
type decode_output_reg_t is record
|
45
|
-
reg_valid : std_ulogic;
|
46
|
-
reg : gspr_index_t;
|
47
|
-
end record;
|
48
|
-
|
49
|
-
function decode_input_reg_a(t : input_reg_a_t;insn_in : std_ulogic_vector(31 downto 0);reg_data : std_ulogic_vector(63 downto 0);ispr : gspr_index_t) return decode_input_reg_t is
|
50
|
-
begin
|
51
|
-
if t = ra or (t = ra_or_zero and insn_ra(insn_in) /= "00000") then
|
52
|
-
assert is_fast_spr(ispr) = '0'
|
53
|
-
report "decode a says gpr but ispr says spr:" & to_hstring(ispr) severity failure;
|
54
|
-
return ('1',gpr_to_gspr(insn_ra(insn_in)),reg_data);
|
55
|
-
elsif t = spr then
|
56
|
-
assert is_fast_spr(ispr) = '1' or ispr = "000000"
|
57
|
-
report "decode a says spr but ispr is invalid:" & to_hstring(ispr) severity failure;
|
58
|
-
return (is_fast_spr(ispr),ispr,reg_data);
|
59
|
-
else
|
60
|
-
return ('0',(others => '0'),(others => '0'));
|
61
|
-
end if;
|
62
|
-
end function decode_input_reg_a;
|
63
|
-
|
64
|
-
function decode_input_reg_b(t : input_reg_b_t;insn_in : std_ulogic_vector(31 downto 0);reg_data : std_ulogic_vector(63 downto 0);ispr : gspr_index_t) return decode_input_reg_t is
|
65
|
-
variable ret : decode_input_reg_t;
|
66
|
-
begin
|
67
|
-
case t is
|
68
|
-
when rb =>
|
69
|
-
assert is_fast_spr(ispr) = '0'
|
70
|
-
report "decode b says gpr but ispr says spr:" & to_hstring(ispr) severity failure;
|
71
|
-
ret := ('1',gpr_to_gspr(insn_rb(insn_in)),reg_data);
|
72
|
-
when const_ui =>
|
73
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(unsigned(insn_ui(insn_in)),64)));
|
74
|
-
when const_si =>
|
75
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(signed(insn_si(insn_in)),64)));
|
76
|
-
when const_si_hi =>
|
77
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(signed(insn_si(insn_in)) & x"0000",64)));
|
78
|
-
when const_ui_hi =>
|
79
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(unsigned(insn_si(insn_in)) & x"0000",64)));
|
80
|
-
when const_li =>
|
81
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(signed(insn_li(insn_in)) & "00",64)));
|
82
|
-
when const_bd =>
|
83
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(signed(insn_bd(insn_in)) & "00",64)));
|
84
|
-
when const_ds =>
|
85
|
-
ret := ('0',(others => '0'),std_ulogic_vector(resize(signed(insn_ds(insn_in)) & "00",64)));
|
86
|
-
when const_m1 =>
|
87
|
-
ret := ('0',(others => '0'),x"ffffffffffffffff");
|
88
|
-
when const_sh =>
|
89
|
-
ret := ('0',(others => '0'),x"00000000000000" & "00" & insn_in(1) & insn_in(15 downto 11));
|
90
|
-
when const_sh32 =>
|
91
|
-
ret := ('0',(others => '0'),x"00000000000000" & "000" & insn_in(15 downto 11));
|
92
|
-
when spr =>
|
93
|
-
assert is_fast_spr(ispr) = '1' or ispr = "000000"
|
94
|
-
report "decode b says spr but ispr is invalid:" & to_hstring(ispr) severity failure;
|
95
|
-
ret := (is_fast_spr(ispr),ispr,reg_data);
|
96
|
-
when none =>
|
97
|
-
ret := ('0',(others => '0'),(others => '0'));
|
98
|
-
end case;
|
99
|
-
return ret;
|
100
|
-
end function decode_input_reg_b;
|
101
|
-
|
102
|
-
function decode_input_reg_c(t : input_reg_c_t;insn_in : std_ulogic_vector(31 downto 0);reg_data : std_ulogic_vector(63 downto 0)) return decode_input_reg_t is
|
103
|
-
begin
|
104
|
-
case t is
|
105
|
-
when rs =>
|
106
|
-
return ('1',gpr_to_gspr(insn_rs(insn_in)),reg_data);
|
107
|
-
when none =>
|
108
|
-
return ('0',(others => '0'),(others => '0'));
|
109
|
-
end case;
|
110
|
-
end function decode_input_reg_c;
|
111
|
-
|
112
|
-
function decode_output_reg(t : output_reg_a_t;insn_in : std_ulogic_vector(31 downto 0);ispr : gspr_index_t) return decode_output_reg_t is
|
113
|
-
begin
|
114
|
-
case t is
|
115
|
-
when rt =>
|
116
|
-
return ('1',gpr_to_gspr(insn_rt(insn_in)));
|
117
|
-
when ra =>
|
118
|
-
return ('1',gpr_to_gspr(insn_ra(insn_in)));
|
119
|
-
when spr =>
|
120
|
-
assert is_fast_spr(ispr) = '1' or ispr = "000000"
|
121
|
-
report "decode b says spr but ispr is invalid:" & to_hstring(ispr) severity failure;
|
122
|
-
return (is_fast_spr(ispr),ispr);
|
123
|
-
when none =>
|
124
|
-
return ('0',"000000");
|
125
|
-
end case;
|
126
|
-
end function decode_output_reg;
|
127
|
-
|
128
|
-
function decode_rc(t : rc_t;insn_in : std_ulogic_vector(31 downto 0)) return std_ulogic is
|
129
|
-
begin
|
130
|
-
case t is
|
131
|
-
when rc =>
|
132
|
-
return insn_rc(insn_in);
|
133
|
-
when one =>
|
134
|
-
return '1';
|
135
|
-
when none =>
|
136
|
-
return '0';
|
137
|
-
end case;
|
138
|
-
end function decode_rc;
|
139
|
-
|
140
|
-
function decode_oe(t : rc_t;insn_in : std_ulogic_vector(31 downto 0)) return std_ulogic is
|
141
|
-
begin
|
142
|
-
case t is
|
143
|
-
when rc =>
|
144
|
-
return insn_oe(insn_in);
|
145
|
-
when others =>
|
146
|
-
return '0';
|
147
|
-
end case;
|
148
|
-
end function decode_oe;
|
149
|
-
signal control_valid_in : std_ulogic;
|
150
|
-
signal control_valid_out : std_ulogic;
|
151
|
-
signal control_sgl_pipe : std_logic;
|
152
|
-
signal gpr_write_valid : std_ulogic;
|
153
|
-
signal gpr_write : gspr_index_t;
|
154
|
-
signal gpr_bypassable : std_ulogic;
|
155
|
-
signal gpr_a_read_valid : std_ulogic;
|
156
|
-
signal gpr_a_read : gspr_index_t;
|
157
|
-
signal gpr_a_bypass : std_ulogic;
|
158
|
-
signal gpr_b_read_valid : std_ulogic;
|
159
|
-
signal gpr_b_read : gspr_index_t;
|
160
|
-
signal gpr_b_bypass : std_ulogic;
|
161
|
-
signal gpr_c_read_valid : std_ulogic;
|
162
|
-
signal gpr_c_read : gpr_index_t;
|
163
|
-
signal gpr_c_bypass : std_ulogic;
|
164
|
-
signal cr_write_valid : std_ulogic;
|
165
|
-
begin
|
166
|
-
|
167
|
-
control_0 : entity work.control
|
168
|
-
port map(
|
169
|
-
clk => clk,
|
170
|
-
rst => rst,
|
171
|
-
complete_in => complete_in,
|
172
|
-
valid_in => control_valid_in,
|
173
|
-
stall_in => stall_in,
|
174
|
-
flush_in => flush_in,
|
175
|
-
sgl_pipe_in => control_sgl_pipe,
|
176
|
-
stop_mark_in => d_in.stop_mark,
|
177
|
-
gpr_write_valid_in => gpr_write_valid,
|
178
|
-
gpr_write_in => gpr_write,
|
179
|
-
gpr_bypassable => gpr_bypassable,
|
180
|
-
gpr_a_read_valid_in => gpr_a_read_valid,
|
181
|
-
gpr_a_read_in => gpr_a_read,
|
182
|
-
gpr_b_read_valid_in => gpr_b_read_valid,
|
183
|
-
gpr_b_read_in => gpr_b_read,
|
184
|
-
gpr_c_read_valid_in => gpr_c_read_valid,
|
185
|
-
gpr_c_read_in => gpr_c_read,
|
186
|
-
cr_read_in => d_in.decode.input_cr,
|
187
|
-
cr_write_in => cr_write_valid,
|
188
|
-
valid_out => control_valid_out,
|
189
|
-
stall_out => stall_out,
|
190
|
-
stopped_out => stopped_out,
|
191
|
-
gpr_bypass_a => gpr_a_bypass,
|
192
|
-
gpr_bypass_b => gpr_b_bypass,
|
193
|
-
gpr_bypass_c => gpr_c_bypass);
|
194
|
-
|
195
|
-
|
196
|
-
decode2_0 : process(clk)
|
197
|
-
begin
|
198
|
-
if rising_edge(clk) then
|
199
|
-
if rin.e.valid = '1' then
|
200
|
-
report "execute " & to_hstring(rin.e.nia);
|
201
|
-
end if;
|
202
|
-
r <= rin;
|
203
|
-
end if;
|
204
|
-
end process;
|
205
|
-
r_out.read1_reg <= gpr_or_spr_to_gspr(insn_ra(d_in.insn),d_in.ispr1);
|
206
|
-
r_out.read2_reg <= gpr_or_spr_to_gspr(insn_rb(d_in.insn),d_in.ispr2);
|
207
|
-
r_out.read3_reg <= insn_rs(d_in.insn);
|
208
|
-
c_out.read <= d_in.decode.input_cr;
|
209
|
-
|
210
|
-
decode2_1 : process(all)
|
211
|
-
variable v : reg_type;
|
212
|
-
variable mul_a : std_ulogic_vector(63 downto 0);
|
213
|
-
variable mul_b : std_ulogic_vector(63 downto 0);
|
214
|
-
variable decoded_reg_a : decode_input_reg_t;
|
215
|
-
variable decoded_reg_b : decode_input_reg_t;
|
216
|
-
variable decoded_reg_c : decode_input_reg_t;
|
217
|
-
variable decoded_reg_o : decode_output_reg_t;
|
218
|
-
variable length : std_ulogic_vector(3 downto 0);
|
219
|
-
begin
|
220
|
-
v := r;
|
221
|
-
v.e := decode2toexecute1init;
|
222
|
-
mul_a := (others => '0');
|
223
|
-
mul_b := (others => '0');
|
224
|
-
decoded_reg_a := decode_input_reg_a(d_in.decode.input_reg_a,d_in.insn,r_in.read1_data,d_in.ispr1);
|
225
|
-
decoded_reg_b := decode_input_reg_b(d_in.decode.input_reg_b,d_in.insn,r_in.read2_data,d_in.ispr2);
|
226
|
-
decoded_reg_c := decode_input_reg_c(d_in.decode.input_reg_c,d_in.insn,r_in.read3_data);
|
227
|
-
decoded_reg_o := decode_output_reg(d_in.decode.output_reg_a,d_in.insn,d_in.ispr1);
|
228
|
-
r_out.read1_enable <= decoded_reg_a.reg_valid;
|
229
|
-
r_out.read2_enable <= decoded_reg_b.reg_valid;
|
230
|
-
r_out.read3_enable <= decoded_reg_c.reg_valid;
|
231
|
-
case d_in.decode.length is
|
232
|
-
when is1b =>
|
233
|
-
length := "0001";
|
234
|
-
when is2b =>
|
235
|
-
length := "0010";
|
236
|
-
when is4b =>
|
237
|
-
length := "0100";
|
238
|
-
when is8b =>
|
239
|
-
length := "1000";
|
240
|
-
when none =>
|
241
|
-
length := "0000";
|
242
|
-
end case;
|
243
|
-
v.e.nia := d_in.nia;
|
244
|
-
v.e.insn_type := d_in.decode.insn_type;
|
245
|
-
v.e.read_reg1 := decoded_reg_a.reg;
|
246
|
-
v.e.read_data1 := decoded_reg_a.data;
|
247
|
-
v.e.bypass_data1 := gpr_a_bypass;
|
248
|
-
v.e.read_reg2 := decoded_reg_b.reg;
|
249
|
-
v.e.read_data2 := decoded_reg_b.data;
|
250
|
-
v.e.bypass_data2 := gpr_b_bypass;
|
251
|
-
v.e.read_data3 := decoded_reg_c.data;
|
252
|
-
v.e.bypass_data3 := gpr_c_bypass;
|
253
|
-
v.e.write_reg := decoded_reg_o.reg;
|
254
|
-
v.e.rc := decode_rc(d_in.decode.rc,d_in.insn);
|
255
|
-
if (d_in.decode.insn_type = op_mul_h32 or d_in.decode.insn_type = op_mul_h64) then
|
256
|
-
v.e.oe := decode_oe(d_in.decode.rc,d_in.insn);
|
257
|
-
end if;
|
258
|
-
v.e.cr := c_in.read_cr_data;
|
259
|
-
v.e.xerc := c_in.read_xerc_data;
|
260
|
-
v.e.invert_a := d_in.decode.invert_a;
|
261
|
-
v.e.invert_out := d_in.decode.invert_out;
|
262
|
-
v.e.input_carry := d_in.decode.input_carry;
|
263
|
-
v.e.output_carry := d_in.decode.output_carry;
|
264
|
-
v.e.is_32bit := d_in.decode.is_32bit;
|
265
|
-
v.e.is_signed := d_in.decode.is_signed;
|
266
|
-
if d_in.decode.lr = '1' then
|
267
|
-
v.e.lr := insn_lk(d_in.insn);
|
268
|
-
end if;
|
269
|
-
v.e.insn := d_in.insn;
|
270
|
-
v.e.data_len := length;
|
271
|
-
v.e.byte_reverse := d_in.decode.byte_reverse;
|
272
|
-
v.e.sign_extend := d_in.decode.sign_extend;
|
273
|
-
v.e.update := d_in.decode.update;
|
274
|
-
v.e.reserve := d_in.decode.reserve;
|
275
|
-
control_valid_in <= d_in.valid;
|
276
|
-
control_sgl_pipe <= d_in.decode.sgl_pipe;
|
277
|
-
gpr_write_valid <= decoded_reg_o.reg_valid;
|
278
|
-
gpr_write <= decoded_reg_o.reg;
|
279
|
-
gpr_bypassable <= '0';
|
280
|
-
if ex1_bypass and d_in.decode.unit = alu then
|
281
|
-
gpr_bypassable <= '1';
|
282
|
-
end if;
|
283
|
-
gpr_a_read_valid <= decoded_reg_a.reg_valid;
|
284
|
-
gpr_a_read <= decoded_reg_a.reg;
|
285
|
-
gpr_b_read_valid <= decoded_reg_b.reg_valid;
|
286
|
-
gpr_b_read <= decoded_reg_b.reg;
|
287
|
-
gpr_c_read_valid <= decoded_reg_c.reg_valid;
|
288
|
-
gpr_c_read <= gspr_to_gpr(decoded_reg_c.reg);
|
289
|
-
cr_write_valid <= d_in.decode.output_cr or decode_rc(d_in.decode.rc,d_in.insn);
|
290
|
-
v.e.valid := control_valid_out;
|
291
|
-
if d_in.decode.unit = none then
|
292
|
-
v.e.insn_type := op_illegal;
|
293
|
-
end if;
|
294
|
-
if rst = '1' then
|
295
|
-
v.e := decode2toexecute1init;
|
296
|
-
end if;
|
297
|
-
rin <= v;
|
298
|
-
e_out <= r.e;
|
299
|
-
end process;
|
300
|
-
end behaviour;
|
@@ -1,67 +0,0 @@
|
|
1
|
-
-- generated by Vertigo VHDL tool
|
2
|
-
library ieee;
|
3
|
-
use ieee.std_logic_1164.all;
|
4
|
-
|
5
|
-
package decode_types is
|
6
|
-
|
7
|
-
type insn_type_t is (op_illegal,op_nop,op_add,op_addpcis,op_and,op_attn,op_b,op_bc,op_bcreg,op_bperm,op_cmp,op_cmpb,op_cmpeqb,op_cmprb,op_cntz,op_crand,op_crandc,op_creqv,op_crnand,op_crnor,op_cror,op_crorc,op_crxor,op_darn,op_dcbf,op_dcbst,op_dcbt,op_dcbtst,op_dcbz,op_div,op_dive,op_exts,op_extswsli,op_icbi,op_icbt,op_isel,op_isync,op_load,op_store,op_maddhd,op_maddhdu,op_maddld,op_mcrf,op_mcrxr,op_mcrxrx,op_mfcr,op_mfmsr,op_mfspr,op_mod,op_mtcrf,op_mtmsrd,op_mtspr,op_mul_l64,op_mul_h64,op_mul_h32,op_or,op_popcnt,op_prty,op_rfid,op_rlc,op_rlcl,op_rlcr,op_sc,op_setb,op_shl,op_shr,op_sync,op_td,op_tdi,op_tw,op_twi,op_xor,op_sim_config);
|
8
|
-
|
9
|
-
type input_reg_a_t is (none,ra,ra_or_zero,spr);
|
10
|
-
|
11
|
-
type input_reg_b_t is (none,rb,const_ui,const_si,const_si_hi,const_ui_hi,const_li,const_bd,const_ds,const_m1,const_sh,const_sh32,spr);
|
12
|
-
|
13
|
-
type input_reg_c_t is (none,rs);
|
14
|
-
|
15
|
-
type output_reg_a_t is (none,rt,ra,spr);
|
16
|
-
|
17
|
-
type rc_t is (none,one,rc);
|
18
|
-
|
19
|
-
type carry_in_t is (zero,ca,one);
|
20
|
-
constant sh_offset : integer := 0;
|
21
|
-
constant mb_offset : integer := 1;
|
22
|
-
constant me_offset : integer := 1;
|
23
|
-
constant sh32_offset : integer := 0;
|
24
|
-
constant mb32_offset : integer := 1;
|
25
|
-
constant me32_offset : integer := 2;
|
26
|
-
constant fxm_offset : integer := 0;
|
27
|
-
constant bo_offset : integer := 0;
|
28
|
-
constant bi_offset : integer := 1;
|
29
|
-
constant bh_offset : integer := 2;
|
30
|
-
constant bf_offset : integer := 0;
|
31
|
-
constant l_offset : integer := 1;
|
32
|
-
constant too_offset : integer := 0;
|
33
|
-
|
34
|
-
type unit_t is (none,alu,ldst);
|
35
|
-
|
36
|
-
type length_t is (none,is1b,is2b,is4b,is8b);
|
37
|
-
|
38
|
-
type decode_rom_t is record
|
39
|
-
unit : unit_t;
|
40
|
-
insn_type : insn_type_t;
|
41
|
-
input_reg_a : input_reg_a_t;
|
42
|
-
input_reg_b : input_reg_b_t;
|
43
|
-
input_reg_c : input_reg_c_t;
|
44
|
-
output_reg_a : output_reg_a_t;
|
45
|
-
input_cr : std_ulogic;
|
46
|
-
output_cr : std_ulogic;
|
47
|
-
invert_a : std_ulogic;
|
48
|
-
invert_out : std_ulogic;
|
49
|
-
input_carry : carry_in_t;
|
50
|
-
output_carry : std_ulogic;
|
51
|
-
length : length_t;
|
52
|
-
byte_reverse : std_ulogic;
|
53
|
-
sign_extend : std_ulogic;
|
54
|
-
update : std_ulogic;
|
55
|
-
reserve : std_ulogic;
|
56
|
-
is_32bit : std_ulogic;
|
57
|
-
is_signed : std_ulogic;
|
58
|
-
rc : rc_t;
|
59
|
-
lr : std_ulogic;
|
60
|
-
sgl_pipe : std_ulogic;
|
61
|
-
end record;
|
62
|
-
constant decode_rom_init : decode_rom_t := (unit => none,insn_type => op_illegal,input_reg_a => none,input_reg_b => none,input_reg_c => none,output_reg_a => none,input_cr => '0',output_cr => '0',invert_a => '0',invert_out => '0',input_carry => zero,output_carry => '0',length => none,byte_reverse => '0',sign_extend => '0',update => '0',reserve => '0',is_32bit => '0',is_signed => '0',rc => none,lr => '0',sgl_pipe => '0');
|
63
|
-
|
64
|
-
end decode_types;
|
65
|
-
|
66
|
-
package body decode_types is
|
67
|
-
end decode_types;
|