1
--------------------------------------------------------------------------
3
-- Copyright (c) 1990, 1991, 1992 by Synopsys, Inc. --
4
-- All rights reserved. --
6
-- This source file may be used and distributed without restriction --
7
-- provided that this copyright statement is not removed from the file --
8
-- and that any derivative work contains this copyright notice. --
10
-- Package name: STD_LOGIC_UNSIGNED --
13
-- Date: 09/11/92 KN --
17
-- A set of unsigned arithemtic, conversion, --
18
-- and comparision functions for STD_LOGIC_VECTOR. --
20
-- Note: comparision of same length discrete arrays is defined --
21
-- by the LRM. This package will "overload" those --
24
--------------------------------------------------------------------------
27
use IEEE.std_logic_1164.all;
28
use IEEE.std_logic_arith.all;
30
package STD_LOGIC_UNSIGNED is
32
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
33
function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
34
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
35
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR;
36
function "+"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
38
function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
39
function "-"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR;
40
function "-"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
41
function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR;
42
function "-"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
44
function "+"(L: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
46
function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
48
function "<"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
49
function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
50
function "<"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
52
function "<="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
53
function "<="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
54
function "<="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
56
function ">"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
57
function ">"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
58
function ">"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
60
function ">="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
61
function ">="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
62
function ">="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
64
-- function "="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
65
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
66
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
68
function "/="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;
69
function "/="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;
70
function "/="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;
71
function SHL(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
72
function SHR(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;
74
function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER;
76
-- remove this since it is already in std_logic_arith
77
-- function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) return STD_LOGIC_VECTOR;
79
end STD_LOGIC_UNSIGNED;
84
use IEEE.std_logic_1164.all;
85
use IEEE.std_logic_arith.all;
87
package body STD_LOGIC_UNSIGNED is
90
function maximum(L, R: INTEGER) return INTEGER is
100
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
101
-- pragma label_applies_to plus
102
constant length: INTEGER := maximum(L'length, R'length);
103
variable result : STD_LOGIC_VECTOR (length-1 downto 0);
105
result := UNSIGNED(L) + UNSIGNED(R);-- pragma label plus
106
return std_logic_vector(result);
109
function "+"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR is
110
-- pragma label_applies_to plus
111
variable result : STD_LOGIC_VECTOR (L'range);
113
result := UNSIGNED(L) + R;-- pragma label plus
114
return std_logic_vector(result);
117
function "+"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
118
-- pragma label_applies_to plus
119
variable result : STD_LOGIC_VECTOR (R'range);
121
result := L + UNSIGNED(R);-- pragma label plus
122
return std_logic_vector(result);
125
function "+"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR is
126
-- pragma label_applies_to plus
127
variable result : STD_LOGIC_VECTOR (L'range);
129
result := UNSIGNED(L) + R;-- pragma label plus
130
return std_logic_vector(result);
133
function "+"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
134
-- pragma label_applies_to plus
135
variable result : STD_LOGIC_VECTOR (R'range);
137
result := L + UNSIGNED(R);-- pragma label plus
138
return std_logic_vector(result);
141
function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
142
-- pragma label_applies_to minus
143
constant length: INTEGER := maximum(L'length, R'length);
144
variable result : STD_LOGIC_VECTOR (length-1 downto 0);
146
result := UNSIGNED(L) - UNSIGNED(R); -- pragma label minus
147
return std_logic_vector(result);
150
function "-"(L: STD_LOGIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR is
151
-- pragma label_applies_to minus
152
variable result : STD_LOGIC_VECTOR (L'range);
154
result := UNSIGNED(L) - R; -- pragma label minus
155
return std_logic_vector(result);
158
function "-"(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
159
-- pragma label_applies_to minus
160
variable result : STD_LOGIC_VECTOR (R'range);
162
result := L - UNSIGNED(R); -- pragma label minus
163
return std_logic_vector(result);
166
function "-"(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR is
167
variable result : STD_LOGIC_VECTOR (L'range);
169
result := UNSIGNED(L) - R;
170
return std_logic_vector(result);
173
function "-"(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
174
-- pragma label_applies_to minus
175
variable result : STD_LOGIC_VECTOR (R'range);
177
result := L - UNSIGNED(R); -- pragma label minus
178
return std_logic_vector(result);
181
function "+"(L: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
182
variable result : STD_LOGIC_VECTOR (L'range);
184
result := + UNSIGNED(L);
185
return std_logic_vector(result);
188
function "*"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
189
-- pragma label_applies_to mult
190
constant length: INTEGER := maximum(L'length, R'length);
191
variable result : STD_LOGIC_VECTOR ((L'length+R'length-1) downto 0);
193
result := UNSIGNED(L) * UNSIGNED(R); -- pragma label mult
194
return std_logic_vector(result);
197
function "<"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
198
-- pragma label_applies_to lt
199
constant length: INTEGER := maximum(L'length, R'length);
201
return UNSIGNED(L) < UNSIGNED(R); -- pragma label lt
204
function "<"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
205
-- pragma label_applies_to lt
207
return UNSIGNED(L) < R; -- pragma label lt
210
function "<"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
211
-- pragma label_applies_to lt
213
return L < UNSIGNED(R); -- pragma label lt
216
function "<="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
217
-- pragma label_applies_to leq
219
return UNSIGNED(L) <= UNSIGNED(R); -- pragma label leq
222
function "<="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
223
-- pragma label_applies_to leq
225
return UNSIGNED(L) <= R; -- pragma label leq
228
function "<="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
229
-- pragma label_applies_to leq
231
return L <= UNSIGNED(R); -- pragma label leq
234
function ">"(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
235
-- pragma label_applies_to gt
237
return UNSIGNED(L) > UNSIGNED(R); -- pragma label gt
240
function ">"(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
241
-- pragma label_applies_to gt
243
return UNSIGNED(L) > R; -- pragma label gt
246
function ">"(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
247
-- pragma label_applies_to gt
249
return L > UNSIGNED(R); -- pragma label gt
252
function ">="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
253
-- pragma label_applies_to geq
255
return UNSIGNED(L) >= UNSIGNED(R); -- pragma label geq
258
function ">="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
259
-- pragma label_applies_to geq
261
return UNSIGNED(L) >= R; -- pragma label geq
264
function ">="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
265
-- pragma label_applies_to geq
267
return L >= UNSIGNED(R); -- pragma label geq
270
function "="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
272
return UNSIGNED(L) = UNSIGNED(R);
275
function "="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
277
return UNSIGNED(L) = R;
280
function "="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
282
return L = UNSIGNED(R);
285
function "/="(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN is
287
return UNSIGNED(L) /= UNSIGNED(R);
290
function "/="(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN is
292
return UNSIGNED(L) /= R;
295
function "/="(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN is
297
return L /= UNSIGNED(R);
300
function CONV_INTEGER(ARG: STD_LOGIC_VECTOR) return INTEGER is
301
variable result : UNSIGNED(ARG'range);
303
result := UNSIGNED(ARG);
304
return CONV_INTEGER(result);
306
function SHL(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
308
return STD_LOGIC_VECTOR(SHL(UNSIGNED(ARG),UNSIGNED(COUNT)));
311
function SHR(ARG:STD_LOGIC_VECTOR;COUNT: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR is
313
return STD_LOGIC_VECTOR(SHR(UNSIGNED(ARG),UNSIGNED(COUNT)));
317
-- remove this since it is already in std_logic_arith
318
--function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) return STD_LOGIC_VECTOR is
319
--variable result1 : UNSIGNED (SIZE-1 downto 0);
320
--variable result2 : STD_LOGIC_VECTOR (SIZE-1 downto 0);
322
--result1 := CONV_UNSIGNED(ARG,SIZE);
323
--return std_logic_vector(result1);
327
end STD_LOGIC_UNSIGNED;