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