Merge pull request #78 from paulusmack/new-decode
[microwatt.git] / insn_helpers.vhdl
1 library ieee;
2 use ieee.std_logic_1164.all;
3
4 package insn_helpers is
5 function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector;
6 function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector;
7 function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector;
8 function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector;
9 function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector;
10 function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector;
11 function insn_l (insn_in : std_ulogic_vector) return std_ulogic;
12 function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
13 function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
14 function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector;
15 function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector;
16 function insn_lk (insn_in : std_ulogic_vector) return std_ulogic;
17 function insn_aa (insn_in : std_ulogic_vector) return std_ulogic;
18 function insn_rc (insn_in : std_ulogic_vector) return std_ulogic;
19 function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector;
20 function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector;
21 function insn_bfa (insn_in : std_ulogic_vector) return std_ulogic_vector;
22 function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector;
23 function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector;
24 function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector;
25 function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector;
26 function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector;
27 function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector;
28 function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector;
29 function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector;
30 function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector;
31 function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector;
32 function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector;
33 end package insn_helpers;
34
35 package body insn_helpers is
36 function insn_rs (insn_in : std_ulogic_vector) return std_ulogic_vector is
37 begin
38 return insn_in(25 downto 21);
39 end;
40
41 function insn_rt (insn_in : std_ulogic_vector) return std_ulogic_vector is
42 begin
43 return insn_in(25 downto 21);
44 end;
45
46 function insn_ra (insn_in : std_ulogic_vector) return std_ulogic_vector is
47 begin
48 return insn_in(20 downto 16);
49 end;
50
51 function insn_rb (insn_in : std_ulogic_vector) return std_ulogic_vector is
52 begin
53 return insn_in(15 downto 11);
54 end;
55
56 function insn_si (insn_in : std_ulogic_vector) return std_ulogic_vector is
57 begin
58 return insn_in(15 downto 0);
59 end;
60
61 function insn_ui (insn_in : std_ulogic_vector) return std_ulogic_vector is
62 begin
63 return insn_in(15 downto 0);
64 end;
65
66 function insn_l (insn_in : std_ulogic_vector) return std_ulogic is
67 begin
68 return insn_in(21);
69 end;
70
71 function insn_sh32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
72 begin
73 return insn_in(15 downto 11);
74 end;
75
76 function insn_mb32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
77 begin
78 return insn_in(10 downto 6);
79 end;
80
81 function insn_me32 (insn_in : std_ulogic_vector) return std_ulogic_vector is
82 begin
83 return insn_in(5 downto 1);
84 end;
85
86 function insn_li (insn_in : std_ulogic_vector) return std_ulogic_vector is
87 begin
88 return insn_in(25 downto 2);
89 end;
90
91 function insn_lk (insn_in : std_ulogic_vector) return std_ulogic is
92 begin
93 return insn_in(0);
94 end;
95
96 function insn_aa (insn_in : std_ulogic_vector) return std_ulogic is
97 begin
98 return insn_in(1);
99 end;
100
101 function insn_rc (insn_in : std_ulogic_vector) return std_ulogic is
102 begin
103 return insn_in(0);
104 end;
105
106 function insn_bd (insn_in : std_ulogic_vector) return std_ulogic_vector is
107 begin
108 return insn_in(15 downto 2);
109 end;
110
111 function insn_bf (insn_in : std_ulogic_vector) return std_ulogic_vector is
112 begin
113 return insn_in(25 downto 23);
114 end;
115
116 function insn_bfa (insn_in : std_ulogic_vector) return std_ulogic_vector is
117 begin
118 return insn_in(20 downto 18);
119 end;
120
121 function insn_fxm (insn_in : std_ulogic_vector) return std_ulogic_vector is
122 begin
123 return insn_in(19 downto 12);
124 end;
125
126 function insn_bo (insn_in : std_ulogic_vector) return std_ulogic_vector is
127 begin
128 return insn_in(25 downto 21);
129 end;
130
131 function insn_bi (insn_in : std_ulogic_vector) return std_ulogic_vector is
132 begin
133 return insn_in(20 downto 16);
134 end;
135
136 function insn_bh (insn_in : std_ulogic_vector) return std_ulogic_vector is
137 begin
138 return insn_in(12 downto 11);
139 end;
140
141 function insn_d (insn_in : std_ulogic_vector) return std_ulogic_vector is
142 begin
143 return insn_in(15 downto 0);
144 end;
145
146 function insn_ds (insn_in : std_ulogic_vector) return std_ulogic_vector is
147 begin
148 return insn_in(15 downto 2);
149 end;
150
151 function insn_to (insn_in : std_ulogic_vector) return std_ulogic_vector is
152 begin
153 return insn_in(25 downto 21);
154 end;
155
156 function insn_bc (insn_in : std_ulogic_vector) return std_ulogic_vector is
157 begin
158 return insn_in(10 downto 6);
159 end;
160
161 function insn_sh (insn_in : std_ulogic_vector) return std_ulogic_vector is
162 begin
163 return insn_in(1) & insn_in(15 downto 11);
164 end;
165
166 function insn_me (insn_in : std_ulogic_vector) return std_ulogic_vector is
167 begin
168 return insn_in(5) & insn_in(10 downto 6);
169 end;
170
171 function insn_mb (insn_in : std_ulogic_vector) return std_ulogic_vector is
172 begin
173 return insn_in(5) & insn_in(10 downto 6);
174 end;
175 end package body insn_helpers;