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.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/lib/vertigo/parser.rb +28 -5
  3. data/lib/vertigo/tb_generator.rb +39 -18
  4. data/lib/vertigo/version.rb +1 -1
  5. data/tests/parser_tests/test_adder_rca_vhdl93.vhd +37 -0
  6. metadata +4 -85
  7. data/tests/ghdl_tests/test_fsm.vhd +0 -162
  8. data/tests/parser_tests/else.vhd +0 -64
  9. data/tests/parser_tests/pingpong.vhd +0 -34
  10. data/tests/parser_tests/test_accelerator_pp.vhd +0 -144
  11. data/tests/parser_tests/test_aggregate_pp.vhd +0 -15
  12. data/tests/parser_tests/test_archi_1_pp.vhd +0 -41
  13. data/tests/parser_tests/test_array_array_00_pp.vhd +0 -25
  14. data/tests/parser_tests/test_array_urange_pp.vhd +0 -25
  15. data/tests/parser_tests/test_chu-1_pp.vhd +0 -104
  16. data/tests/parser_tests/test_concat_pp.vhd +0 -14
  17. data/tests/parser_tests/test_counter_pp.vhd +0 -35
  18. data/tests/parser_tests/test_de2_pp.vhd +0 -274
  19. data/tests/parser_tests/test_encode_pp.vhd +0 -2549
  20. data/tests/parser_tests/test_fsm_pp.vhd +0 -125
  21. data/tests/parser_tests/test_fsm_synth_pp.vhd +0 -197
  22. data/tests/parser_tests/test_function-01_pp.vhd +0 -18
  23. data/tests/parser_tests/test_lfsr_pp.vhd +0 -44
  24. data/tests/parser_tests/test_microwatt_cache_ram_pp.vhd +0 -68
  25. data/tests/parser_tests/test_microwatt_common_pp.vhd +0 -336
  26. data/tests/parser_tests/test_microwatt_control_pp.vhd +0 -187
  27. data/tests/parser_tests/test_microwatt_core_debug_pp.vhd +0 -104
  28. data/tests/parser_tests/test_microwatt_core_pp.vhd +0 -231
  29. data/tests/parser_tests/test_microwatt_core_tb_pp.vhd +0 -43
  30. data/tests/parser_tests/test_microwatt_countzero_pp.vhd +0 -120
  31. data/tests/parser_tests/test_microwatt_countzero_tb_pp.vhd +0 -70
  32. data/tests/parser_tests/test_microwatt_cr_file_pp.vhd +0 -74
  33. data/tests/parser_tests/test_microwatt_cr_hazard_pp.vhd +0 -51
  34. data/tests/parser_tests/test_microwatt_crhelpers_pp.vhd +0 -48
  35. data/tests/parser_tests/test_microwatt_dcache_pp.vhd +0 -481
  36. data/tests/parser_tests/test_microwatt_dcache_tb_pp.vhd +0 -98
  37. data/tests/parser_tests/test_microwatt_decode1_pp.vhd +0 -138
  38. data/tests/parser_tests/test_microwatt_decode2_pp.vhd +0 -300
  39. data/tests/parser_tests/test_microwatt_decode_types_pp.vhd +0 -67
  40. data/tests/parser_tests/test_microwatt_divider_pp.vhd +0 -132
  41. data/tests/parser_tests/test_microwatt_divider_tb_pp.vhd +0 -95
  42. data/tests/parser_tests/test_microwatt_dmi_dtm_dummy_pp.vhd +0 -29
  43. data/tests/parser_tests/test_microwatt_dmi_dtm_tb_pp.vhd +0 -197
  44. data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx_pp.vhd +0 -139
  45. data/tests/parser_tests/test_microwatt_execute1_pp.vhd +0 -689
  46. data/tests/parser_tests/test_microwatt_fetch1_pp.vhd +0 -88
  47. data/tests/parser_tests/test_microwatt_fetch2_pp.vhd +0 -79
  48. data/tests/parser_tests/test_microwatt_glibc_random_helpers_pp.vhd +0 -25
  49. data/tests/parser_tests/test_microwatt_glibc_random_pp.vhd +0 -41
  50. data/tests/parser_tests/test_microwatt_gpr_hazard_pp.vhd +0 -68
  51. data/tests/parser_tests/test_microwatt_helpers_pp.vhd +0 -153
  52. data/tests/parser_tests/test_microwatt_icache_pp.vhd +0 -337
  53. data/tests/parser_tests/test_microwatt_icache_tb_pp.vhd +0 -104
  54. data/tests/parser_tests/test_microwatt_insn_helpers_pp.vhd +0 -208
  55. data/tests/parser_tests/test_microwatt_loadstore1_pp.vhd +0 -222
  56. data/tests/parser_tests/test_microwatt_logical_pp.vhd +0 -87
  57. data/tests/parser_tests/test_microwatt_multiply_pp.vhd +0 -84
  58. data/tests/parser_tests/test_microwatt_multiply_tb_pp.vhd +0 -75
  59. data/tests/parser_tests/test_microwatt_plru_pp.vhd +0 -46
  60. data/tests/parser_tests/test_microwatt_plru_tb_pp.vhd +0 -93
  61. data/tests/parser_tests/test_microwatt_ppc_fx_insns_pp.vhd +0 -665
  62. data/tests/parser_tests/test_microwatt_register_file_pp.vhd +0 -86
  63. data/tests/parser_tests/test_microwatt_rotator_pp.vhd +0 -149
  64. data/tests/parser_tests/test_microwatt_rotator_tb_pp.vhd +0 -134
  65. data/tests/parser_tests/test_microwatt_sim_bram_helpers_pp.vhd +0 -52
  66. data/tests/parser_tests/test_microwatt_sim_bram_pp.vhd +0 -53
  67. data/tests/parser_tests/test_microwatt_sim_console_pp.vhd +0 -43
  68. data/tests/parser_tests/test_microwatt_sim_jtag_pp.vhd +0 -64
  69. data/tests/parser_tests/test_microwatt_sim_jtag_socket_pp.vhd +0 -36
  70. data/tests/parser_tests/test_microwatt_sim_uart_pp.vhd +0 -90
  71. data/tests/parser_tests/test_microwatt_soc_pp.vhd +0 -195
  72. data/tests/parser_tests/test_microwatt_utils_pp.vhd +0 -39
  73. data/tests/parser_tests/test_microwatt_wishbone_arbiter_pp.vhd +0 -54
  74. data/tests/parser_tests/test_microwatt_wishbone_bram_tb_pp.vhd +0 -157
  75. data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper_pp.vhd +0 -62
  76. data/tests/parser_tests/test_microwatt_wishbone_debug_master_pp.vhd +0 -124
  77. data/tests/parser_tests/test_microwatt_wishbone_types_pp.vhd +0 -38
  78. data/tests/parser_tests/test_microwatt_writeback_pp.vhd +0 -87
  79. data/tests/parser_tests/test_package-1_pp.vhd +0 -53
  80. data/tests/parser_tests/test_precedence_pp.vhd +0 -16
  81. data/tests/parser_tests/test_selected_sig_pp.vhd +0 -10
  82. data/tests/parser_tests/test_slice_pp.vhd +0 -16
  83. data/tests/parser_tests/test_tb-00_pp.vhd +0 -71
  84. data/tests/parser_tests/test_type_decl_02_pp.vhd +0 -11
  85. data/tests/parser_tests/test_use_pp.vhd +0 -10
  86. data/tests/parser_tests/test_while_1_pp.vhd +0 -26
  87. data/tests/parser_tests/test_with-00_pp.vhd +0 -12
  88. data/tests/tb_gen_tests/test_accelerator.vhd +0 -160
@@ -1,665 +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.helpers.all;
7
-
8
- package ppc_fx_insns is
9
- function ppc_addi(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
10
- function ppc_addis(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
11
- function ppc_add(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
12
- function ppc_subf(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
13
- function ppc_neg(ra : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
14
- function ppc_addic(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
15
- function ppc_adde(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector
16
- function ppc_subfic(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
17
- function ppc_subfc(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
18
- function ppc_subfe(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector
19
- function ppc_addze(ra : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector
20
- function ppc_andi(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
21
- function ppc_andis(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
22
- function ppc_ori(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
23
- function ppc_oris(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
24
- function ppc_xori(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
25
- function ppc_xoris(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
26
- function ppc_and(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
27
- function ppc_xor(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
28
- function ppc_nand(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
29
- function ppc_or(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
30
- function ppc_nor(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
31
- function ppc_andc(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
32
- function ppc_eqv(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
33
- function ppc_orc(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
34
- function ppc_extsb(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
35
- function ppc_extsh(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
36
- function ppc_extsw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
37
- function ppc_cntlzw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
38
- function ppc_cnttzw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
39
- function ppc_cntlzd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
40
- function ppc_cnttzd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
41
- function ppc_popcntb(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
42
- function ppc_popcntw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
43
- function ppc_popcntd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
44
- function ppc_prtyd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
45
- function ppc_prtyw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
46
- function ppc_rlwinm(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(4 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector
47
- function ppc_rlwnm(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector
48
- function ppc_rlwimi(ra : std_ulogic_vector(63 downto 0);rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(4 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector
49
- function ppc_rldicl(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
50
- function ppc_rldicr(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);me : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
51
- function ppc_rldic(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
52
- function ppc_rldcl(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
53
- function ppc_rldcr(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);me : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
54
- function ppc_rldimi(ra : std_ulogic_vector(63 downto 0);rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
55
- function ppc_slw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
56
- function ppc_srw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
57
- function ppc_srawi(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
58
- function ppc_sraw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
59
- function ppc_sld(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
60
- function ppc_srd(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
61
- function ppc_sradi(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0)) return std_ulogic_vector
62
- function ppc_srad(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
63
- function ppc_mulld(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
64
- function ppc_mulhd(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
65
- function ppc_mulhdu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
66
- function ppc_mulli(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector
67
- function ppc_mullw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
68
- function ppc_mulhw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
69
- function ppc_mulhwu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
70
- function ppc_cmpi(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0);so : std_ulogic) return std_ulogic_vector
71
- function ppc_cmp(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);so : std_ulogic) return std_ulogic_vector
72
- function ppc_cmpli(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0);so : std_ulogic) return std_ulogic_vector
73
- function ppc_cmpl(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);so : std_ulogic) return std_ulogic_vector
74
- function ppc_cmpb(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
75
- function ppc_divw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
76
- function ppc_divdu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
77
- function ppc_divd(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
78
- function ppc_divwu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector
79
- function ppc_bc_taken(bo : std_ulogic_vector(4 downto 0);bi : std_ulogic_vector(4 downto 0);cr : std_ulogic_vector(31 downto 0);ctr : std_ulogic_vector(63 downto 0)) return integer
80
-
81
- end ppc_fx_insns;
82
-
83
- package body ppc_fx_insns is
84
-
85
- function ppc_addi(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
86
- begin
87
- return std_ulogic_vector(signed(ra) + signed(si));
88
- end function ppc_addi;
89
-
90
- function ppc_addic(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
91
- begin
92
- return std_logic_vector(resize(unsigned(ra),65) + unsigned(resize(signed(si),64)));
93
- end function ppc_addic;
94
-
95
- function ppc_adde(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector is
96
- begin
97
- return std_logic_vector(resize(unsigned(ra),65) + resize(unsigned(rb),65) + carry);
98
- end function ppc_adde;
99
-
100
- function ppc_subfic(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
101
- begin
102
- return std_logic_vector(unsigned(resize(signed(si),64)) + resize(unsigned((ra)),65) + 1);
103
- end function ppc_subfic;
104
-
105
- function ppc_subfc(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
106
- begin
107
- return std_logic_vector(resize(unsigned(rb),65) + resize(unsigned((ra)),65) + 1);
108
- end function ppc_subfc;
109
-
110
- function ppc_subfe(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector is
111
- begin
112
- return std_logic_vector(resize(unsigned(rb),65) + resize(unsigned((ra)),65) + carry);
113
- end function ppc_subfe;
114
-
115
- function ppc_addze(ra : std_ulogic_vector(63 downto 0);carry : std_ulogic) return std_ulogic_vector is
116
- begin
117
- return std_logic_vector(resize(unsigned(ra),65) + carry);
118
- end function ppc_addze;
119
-
120
- function ppc_addis(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
121
- begin
122
- return std_ulogic_vector(signed(ra) + shift_left(resize(signed(si),32),16));
123
- end function ppc_addis;
124
-
125
- function ppc_add(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
126
- begin
127
- return std_ulogic_vector(signed(ra) + signed(rb));
128
- end function ppc_add;
129
-
130
- function ppc_subf(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
131
- begin
132
- return std_ulogic_vector(signed(rb) - signed(ra));
133
- end function ppc_subf;
134
-
135
- function ppc_neg(ra : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
136
- begin
137
- return std_ulogic_vector(signed(ra));
138
- end function ppc_neg;
139
-
140
- function ppc_andi(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
141
- begin
142
- return rs and std_ulogic_vector(resize(unsigned(ui),64));
143
- end function ppc_andi;
144
-
145
- function ppc_andis(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
146
- begin
147
- return rs and std_ulogic_vector(shift_left(resize(unsigned(ui),64),16));
148
- end function ppc_andis;
149
-
150
- function ppc_ori(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
151
- begin
152
- return rs or std_ulogic_vector(resize(unsigned(ui),64));
153
- end function ppc_ori;
154
-
155
- function ppc_oris(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
156
- begin
157
- return rs or std_ulogic_vector(shift_left(resize(unsigned(ui),64),16));
158
- end function ppc_oris;
159
-
160
- function ppc_xori(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
161
- begin
162
- return rs xor std_ulogic_vector(resize(unsigned(ui),64));
163
- end function ppc_xori;
164
-
165
- function ppc_xoris(rs : std_ulogic_vector(63 downto 0);ui : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
166
- begin
167
- return rs xor std_ulogic_vector(shift_left(resize(unsigned(ui),64),16));
168
- end function ppc_xoris;
169
-
170
- function ppc_and(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
171
- begin
172
- return rs and rb;
173
- end function ppc_and;
174
-
175
- function ppc_xor(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
176
- begin
177
- return rs xor rb;
178
- end function ppc_xor;
179
-
180
- function ppc_nand(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
181
- begin
182
- return rs nand rb;
183
- end function ppc_nand;
184
-
185
- function ppc_or(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
186
- begin
187
- return rs or rb;
188
- end function ppc_or;
189
-
190
- function ppc_nor(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
191
- begin
192
- return rs nor rb;
193
- end function ppc_nor;
194
-
195
- function ppc_andc(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
196
- begin
197
- return rs and (rb);
198
- end function ppc_andc;
199
-
200
- function ppc_eqv(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
201
- begin
202
- return (rs xor rb);
203
- end function ppc_eqv;
204
-
205
- function ppc_orc(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
206
- begin
207
- return rs or (rb);
208
- end function ppc_orc;
209
-
210
- function ppc_extsb(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
211
- begin
212
- return std_ulogic_vector(resize(signed(rs(7 downto 0)),rs'length));
213
- end function ppc_extsb;
214
-
215
- function ppc_extsh(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
216
- begin
217
- return std_ulogic_vector(resize(signed(rs(15 downto 0)),rs'length));
218
- end function ppc_extsh;
219
-
220
- function ppc_extsw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
221
- begin
222
- return std_ulogic_vector(resize(signed(rs(31 downto 0)),rs'length));
223
- end function ppc_extsw;
224
-
225
- function ppc_cntlzw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
226
- begin
227
- return std_ulogic_vector(to_unsigned(fls_32(rs(31 downto 0)),rs'length));
228
- end function ppc_cntlzw;
229
-
230
- function ppc_cnttzw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
231
- begin
232
- return std_ulogic_vector(to_unsigned(ffs_32(rs(31 downto 0)),rs'length));
233
- end function ppc_cnttzw;
234
-
235
- function ppc_cntlzd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
236
- begin
237
- return std_ulogic_vector(to_unsigned(fls_64(rs),rs'length));
238
- end function ppc_cntlzd;
239
-
240
- function ppc_cnttzd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
241
- begin
242
- return std_ulogic_vector(to_unsigned(ffs_64(rs),rs'length));
243
- end function ppc_cnttzd;
244
-
245
- function ppc_popcntb(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
246
- variable ret : std_ulogic_vector(rs'range);
247
- variable hi : integer;
248
- variable lo : integer;
249
- begin
250
- ret := (others => '0');
251
- return ret;
252
- end function ppc_popcntb;
253
-
254
- function ppc_popcntw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
255
- variable ret : std_ulogic_vector(rs'range);
256
- variable hi : integer;
257
- variable lo : integer;
258
- begin
259
- ret := (others => '0');
260
- return ret;
261
- end function ppc_popcntw;
262
-
263
- function ppc_popcntd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
264
- begin
265
- return popcnt64(rs);
266
- end function ppc_popcntd;
267
-
268
- function ppc_prtyd(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
269
- variable tmp : std_ulogic;
270
- variable ret : std_ulogic_vector(63 downto 0);
271
- begin
272
- ret := (others => '0');
273
- tmp := '0';
274
- ret(0) := tmp;
275
- return ret;
276
- end function ppc_prtyd;
277
-
278
- function ppc_prtyw(rs : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
279
- variable tmp : std_ulogic;
280
- variable ret : std_ulogic_vector(63 downto 0);
281
- begin
282
- ret := (others => '0');
283
- tmp := '0';
284
- ret(0) := tmp;
285
- tmp := '0';
286
- ret(32) := tmp;
287
- return ret;
288
- end function ppc_prtyw;
289
-
290
- function ppc_rlwinm(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(4 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector is
291
- variable hi : integer;
292
- variable lo : integer;
293
- variable tmp1 : std_ulogic_vector(63 downto 0);
294
- variable tmp2 : std_ulogic_vector(63 downto 0);
295
- begin
296
- hi := 31 - to_integer(unsigned(mb));
297
- lo := 31 - to_integer(unsigned(me));
298
- tmp1 := rs(31 downto 0) & rs(31 downto 0);
299
- tmp1 := std_ulogic_vector(rotate_left(unsigned(tmp1),to_integer(unsigned(sh))));
300
- tmp2 := (others => '0');
301
- if hi < lo then
302
- ;
303
- else
304
- ;
305
- end if;
306
- return tmp2;
307
- end function ppc_rlwinm;
308
-
309
- function ppc_rlwnm(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector is
310
- variable hi : integer;
311
- variable lo : integer;
312
- variable tmp1 : std_ulogic_vector(63 downto 0);
313
- variable tmp2 : std_ulogic_vector(63 downto 0);
314
- variable n : integer;
315
- begin
316
- hi := 31 - to_integer(unsigned(mb));
317
- lo := 31 - to_integer(unsigned(me));
318
- n := to_integer(unsigned(rb(4 downto 0)));
319
- tmp1 := rs(31 downto 0) & rs(31 downto 0);
320
- tmp1 := std_ulogic_vector(rotate_left(unsigned(tmp1),n));
321
- tmp2 := (others => '0');
322
- if hi < lo then
323
- ;
324
- else
325
- ;
326
- end if;
327
- return tmp2;
328
- end function ppc_rlwnm;
329
-
330
- function ppc_rlwimi(ra : std_ulogic_vector(63 downto 0);rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(4 downto 0);mb : std_ulogic_vector(4 downto 0);me : std_ulogic_vector(4 downto 0)) return std_ulogic_vector is
331
- variable hi : integer;
332
- variable lo : integer;
333
- variable tmp1 : std_ulogic_vector(63 downto 0);
334
- variable tmp2 : std_ulogic_vector(63 downto 0);
335
- begin
336
- hi := 31 - to_integer(unsigned(mb));
337
- lo := 31 - to_integer(unsigned(me));
338
- tmp1 := rs(31 downto 0) & rs(31 downto 0);
339
- tmp1 := std_ulogic_vector(rotate_left(unsigned(tmp1),to_integer(unsigned(sh))));
340
- tmp2 := ra;
341
- if hi < lo then
342
- ;
343
- else
344
- ;
345
- end if;
346
- return tmp2;
347
- end function ppc_rlwimi;
348
-
349
- function ppc_rldicl(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
350
- variable hi : integer;
351
- variable tmp1 : std_ulogic_vector(63 downto 0);
352
- variable tmp2 : std_ulogic_vector(63 downto 0);
353
- begin
354
- hi := 63 - to_integer(unsigned(mb));
355
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),to_integer(unsigned(sh))));
356
- tmp2 := (others => '0');
357
- return tmp2;
358
- end function ppc_rldicl;
359
-
360
- function ppc_rldicr(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);me : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
361
- variable lo : integer;
362
- variable tmp1 : std_ulogic_vector(63 downto 0);
363
- variable tmp2 : std_ulogic_vector(63 downto 0);
364
- begin
365
- lo := 63 - to_integer(unsigned(me));
366
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),to_integer(unsigned(sh))));
367
- tmp2 := (others => '0');
368
- return tmp2;
369
- end function ppc_rldicr;
370
-
371
- function ppc_rldic(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
372
- variable hi : integer;
373
- variable lo : integer;
374
- variable tmp1 : std_ulogic_vector(63 downto 0);
375
- variable tmp2 : std_ulogic_vector(63 downto 0);
376
- begin
377
- hi := 63 - to_integer(unsigned(mb));
378
- lo := to_integer(unsigned(sh));
379
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),to_integer(unsigned(sh))));
380
- tmp2 := (others => '0');
381
- if hi < lo then
382
- ;
383
- else
384
- ;
385
- end if;
386
- return tmp2;
387
- end function ppc_rldic;
388
-
389
- function ppc_rldcl(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
390
- variable hi : integer;
391
- variable tmp1 : std_ulogic_vector(63 downto 0);
392
- variable tmp2 : std_ulogic_vector(63 downto 0);
393
- begin
394
- hi := 63 - to_integer(unsigned(mb));
395
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),to_integer(unsigned(rb(5 downto 0)))));
396
- tmp2 := (others => '0');
397
- return tmp2;
398
- end function ppc_rldcl;
399
-
400
- function ppc_rldcr(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);me : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
401
- variable lo : integer;
402
- variable tmp1 : std_ulogic_vector(63 downto 0);
403
- variable tmp2 : std_ulogic_vector(63 downto 0);
404
- begin
405
- lo := 63 - to_integer(unsigned(me));
406
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),to_integer(unsigned(rb(5 downto 0)))));
407
- tmp2 := (others => '0');
408
- return tmp2;
409
- end function ppc_rldcr;
410
-
411
- function ppc_rldimi(ra : std_ulogic_vector(63 downto 0);rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0);mb : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
412
- variable hi : integer;
413
- variable lo : integer;
414
- variable tmp1 : std_ulogic_vector(rs'range);
415
- variable tmp2 : std_ulogic_vector(rs'range);
416
- begin
417
- hi := 63 - to_integer(unsigned(mb));
418
- lo := to_integer(unsigned(sh));
419
- tmp1 := std_ulogic_vector(rotate_left(unsigned(rs),lo));
420
- tmp2 := ra;
421
- if hi < lo then
422
- ;
423
- else
424
- ;
425
- end if;
426
- return tmp2;
427
- end function ppc_rldimi;
428
-
429
- function ppc_slw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
430
- variable n : integer;
431
- variable tmp : unsigned(31 downto 0);
432
- begin
433
- n := to_integer(unsigned(rb(5 downto 0)));
434
- tmp := shift_left(unsigned(rs(31 downto 0)),n);
435
- return (63 downto 32 => '0') & std_ulogic_vector(tmp);
436
- end function ppc_slw;
437
-
438
- function ppc_srw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
439
- variable n : integer;
440
- variable tmp : unsigned(31 downto 0);
441
- begin
442
- n := to_integer(unsigned(rb(5 downto 0)));
443
- tmp := shift_right(unsigned(rs(31 downto 0)),n);
444
- return (63 downto 32 => '0') & std_ulogic_vector(tmp);
445
- end function ppc_srw;
446
-
447
- function ppc_srawi(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
448
- variable n : integer;
449
- variable tmp : signed(31 downto 0);
450
- variable mask : std_ulogic_vector(63 downto 0);
451
- variable carry : std_ulogic;
452
- begin
453
- n := to_integer(unsigned(sh));
454
- tmp := shift_right(signed(rs(31 downto 0)),n);
455
- mask := (others => '0');
456
- carry := '0' when (rs and mask) = (63 downto 0 => '0') else rs(31);
457
- return carry & std_ulogic_vector(resize(tmp,rs'length));
458
- end function ppc_srawi;
459
-
460
- function ppc_sraw(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
461
- variable n : natural;
462
- variable tmp : signed(31 downto 0);
463
- variable mask : std_ulogic_vector(63 downto 0);
464
- variable carry : std_ulogic;
465
- begin
466
- n := to_integer(unsigned(rb(5 downto 0)));
467
- tmp := shift_right(signed(rs(31 downto 0)),n);
468
- mask := (others => '0');
469
- carry := or((rs and mask) and rs(31));
470
- return carry & std_ulogic_vector(resize(tmp,rs'length));
471
- end function ppc_sraw;
472
-
473
- function ppc_sld(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
474
- variable n : integer;
475
- begin
476
- n := to_integer(unsigned(rb(6 downto 0)));
477
- return std_ulogic_vector(shift_left(unsigned(rs),n));
478
- end function ppc_sld;
479
-
480
- function ppc_srd(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
481
- variable n : integer;
482
- begin
483
- n := to_integer(unsigned(rb(6 downto 0)));
484
- return std_ulogic_vector(shift_right(unsigned(rs),n));
485
- end function ppc_srd;
486
-
487
- function ppc_sradi(rs : std_ulogic_vector(63 downto 0);sh : std_ulogic_vector(5 downto 0)) return std_ulogic_vector is
488
- variable n : integer;
489
- variable carry : std_ulogic;
490
- variable mask : std_ulogic_vector(63 downto 0);
491
- begin
492
- n := to_integer(unsigned(sh));
493
- mask := (others => '0');
494
- carry := '0' when (rs and mask) = (63 downto 0 => '0') else rs(63);
495
- return carry & std_ulogic_vector(shift_right(signed(rs),n));
496
- end function ppc_sradi;
497
-
498
- function ppc_srad(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
499
- variable n : integer;
500
- variable carry : std_ulogic;
501
- variable mask : std_ulogic_vector(63 downto 0);
502
- begin
503
- n := to_integer(unsigned(rb(6 downto 0)));
504
- mask := (others => '0');
505
- carry := '0' when (rs and mask) = (63 downto 0 => '0') else rs(63);
506
- return carry & std_ulogic_vector(shift_right(signed(rs),n));
507
- end function ppc_srad;
508
-
509
- function ppc_mulld(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
510
- variable tmp : signed(127 downto 0);
511
- begin
512
- tmp := signed(ra) * signed(rb);
513
- return std_ulogic_vector(tmp(63 downto 0));
514
- end function ppc_mulld;
515
-
516
- function ppc_mulhd(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
517
- variable tmp : signed(127 downto 0);
518
- begin
519
- tmp := signed(ra) * signed(rb);
520
- return std_ulogic_vector(tmp(127 downto 64));
521
- end function ppc_mulhd;
522
-
523
- function ppc_mulhdu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
524
- variable tmp : unsigned(127 downto 0);
525
- begin
526
- tmp := unsigned(ra) * unsigned(rb);
527
- return std_ulogic_vector(tmp(127 downto 64));
528
- end function ppc_mulhdu;
529
-
530
- function ppc_mulli(ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0)) return std_ulogic_vector is
531
- variable tmp : signed(79 downto 0);
532
- begin
533
- tmp := signed(ra) * signed(si);
534
- return std_ulogic_vector(tmp(63 downto 0));
535
- end function ppc_mulli;
536
-
537
- function ppc_mullw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
538
- begin
539
- return std_ulogic_vector(signed(ra(31 downto 0)) * signed(rb(31 downto 0)));
540
- end function ppc_mullw;
541
-
542
- function ppc_mulhw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
543
- variable tmp : signed(63 downto 0);
544
- begin
545
- tmp := signed(ra(31 downto 0)) * signed(rb(31 downto 0));
546
- return std_ulogic_vector(tmp(63 downto 32)) & std_ulogic_vector(tmp(63 downto 32));
547
- end function ppc_mulhw;
548
-
549
- function ppc_mulhwu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
550
- variable tmp : unsigned(63 downto 0);
551
- begin
552
- tmp := unsigned(ra(31 downto 0)) * unsigned(rb(31 downto 0));
553
- return std_ulogic_vector(tmp(63 downto 32)) & std_ulogic_vector(tmp(63 downto 32));
554
- end function ppc_mulhwu;
555
-
556
- function ppc_cmpi(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0);so : std_ulogic) return std_ulogic_vector is
557
- variable tmp : signed(ra'range);
558
- begin
559
- tmp := signed(ra);
560
- if l = '0' then
561
- tmp := resize(signed(ra(31 downto 0)),tmp'length);
562
- end if;
563
- return ppc_signed_compare(tmp,resize(signed(si),tmp'length),so);
564
- end function ppc_cmpi;
565
-
566
- function ppc_cmp(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);so : std_ulogic) return std_ulogic_vector is
567
- variable tmpa : signed(ra'range);
568
- variable tmpb : signed(ra'range);
569
- begin
570
- tmpa := signed(ra);
571
- tmpb := signed(rb);
572
- if l = '0' then
573
- tmpa := resize(signed(ra(31 downto 0)),ra'length);
574
- tmpb := resize(signed(rb(31 downto 0)),ra'length);
575
- end if;
576
- return ppc_signed_compare(tmpa,tmpb,so);
577
- end function ppc_cmp;
578
-
579
- function ppc_cmpli(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);si : std_ulogic_vector(15 downto 0);so : std_ulogic) return std_ulogic_vector is
580
- variable tmp : unsigned(ra'range);
581
- begin
582
- tmp := unsigned(ra);
583
- if l = '0' then
584
- tmp := resize(unsigned(ra(31 downto 0)),tmp'length);
585
- end if;
586
- return ppc_unsigned_compare(tmp,resize(unsigned(si),tmp'length),so);
587
- end function ppc_cmpli;
588
-
589
- function ppc_cmpl(l : std_ulogic;ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0);so : std_ulogic) return std_ulogic_vector is
590
- variable tmpa : unsigned(ra'range);
591
- variable tmpb : unsigned(ra'range);
592
- begin
593
- tmpa := unsigned(ra);
594
- tmpb := unsigned(rb);
595
- if l = '0' then
596
- tmpa := resize(unsigned(ra(31 downto 0)),ra'length);
597
- tmpb := resize(unsigned(rb(31 downto 0)),ra'length);
598
- end if;
599
- return ppc_unsigned_compare(tmpa,tmpb,so);
600
- end function ppc_cmpl;
601
-
602
- function ppc_cmpb(rs : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
603
- variable ret : std_ulogic_vector(rs'range);
604
- variable hi : integer;
605
- variable lo : integer;
606
- begin
607
- ;
608
- return ret;
609
- end function ppc_cmpb;
610
-
611
- function ppc_divw(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
612
- variable tmp : signed(31 downto 0);
613
- begin
614
- tmp := signed(ra(31 downto 0)) / signed(rb(31 downto 0));
615
- return (63 downto 32 => '0') & std_ulogic_vector(tmp);
616
- end function ppc_divw;
617
-
618
- function ppc_divdu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
619
- variable tmp : unsigned(63 downto 0) := (others => '0');
620
- begin
621
- if unsigned(rb) /= 0 then
622
- tmp := unsigned(ra) / unsigned(rb);
623
- end if;
624
- return std_ulogic_vector(tmp);
625
- end function ppc_divdu;
626
-
627
- function ppc_divd(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
628
- variable tmp : signed(63 downto 0) := (others => '0');
629
- begin
630
- if signed(rb) /= 0 then
631
- tmp := signed(ra) / signed(rb);
632
- end if;
633
- return std_ulogic_vector(tmp);
634
- end function ppc_divd;
635
-
636
- function ppc_divwu(ra : std_ulogic_vector(63 downto 0);rb : std_ulogic_vector(63 downto 0)) return std_ulogic_vector is
637
- variable tmp : unsigned(31 downto 0) := (others => '0');
638
- begin
639
- if unsigned(rb(31 downto 0)) /= 0 then
640
- tmp := unsigned(ra(31 downto 0)) / unsigned(rb(31 downto 0));
641
- end if;
642
- return std_ulogic_vector(resize(tmp,ra'length));
643
- end function ppc_divwu;
644
-
645
- function ppc_bc_taken(bo : std_ulogic_vector(4 downto 0);bi : std_ulogic_vector(4 downto 0);cr : std_ulogic_vector(31 downto 0);ctr : std_ulogic_vector(63 downto 0)) return integer is
646
- variable crfield : integer;
647
- variable crbit_match : std_ulogic;
648
- variable ctr_not_zero : std_ulogic;
649
- variable ctr_ok : std_ulogic;
650
- variable cond_ok : std_ulogic;
651
- variable ret : integer;
652
- begin
653
- crfield := to_integer(unsigned(bi));
654
- crbit_match := '1' when cr(31 - crfield) = bo(4 - 1) else '0';
655
- ctr_not_zero := '1' when ctr /= x"0000000000000001" else '0';
656
- ctr_ok := bo(4 - 2) or (ctr_not_zero xor bo(4 - 3));
657
- cond_ok := bo(4 - 0) or crbit_match;
658
- if ctr_ok = '1' and cond_ok = '1' then
659
- ret := 1;
660
- else
661
- ret := 0;
662
- end if;
663
- return ret;
664
- end function ppc_bc_taken;
665
- end ppc_fx_insns;