OpenCores
URL https://opencores.org/ocsvn/sincos/sincos/trunk

Subversion Repositories sincos

[/] [sincos/] [trunk/] [vhdl/] [tb/] [un_signed_sprt/] [un_signed_sprt_tb.vhd] - Blame information for rev 41

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 41 dk4xp
 
2
--------------------------------------------------------------------------------
3
-- (c) 2005.. Hoffmann RF & DSP  opencores@hoffmann-hochfrequenz.de
4
-- V1.0 published under BSD license
5
--------------------------------------------------------------------------------
6
-- file name:      un_signed_sprt_tb.vhd
7
-- tool version:   Modelsim 6.1, 6.5
8
-- description:    test bed for signed / unsigned support library
9
-- calls libs:     ieee standard
10
-- calls entities: 
11
--------------------------------------------------------------------------------
12
 
13
 
14
 
15
library ieee;
16
use ieee.std_logic_1164.all;
17
use ieee.numeric_std.all;
18
use ieee.math_real.all;
19
 
20
use work.un_signed_sprt.all;
21
 
22
entity un_signed_sprt_tb is
23
begin
24
end un_signed_sprt_tb;
25
 
26
 
27
architecture tb of un_signed_sprt_tb is
28
 
29
 
30
--------------------------------------------------------------------------------
31
 
32
procedure check_to_un_signed is
33
  variable s:   signed(7 downto 0);
34
  variable u: unsigned(7 downto 0);
35
  variable v: string(1 to 8);
36
begin
37
  report "Check_to_un_signed()";
38
 
39
 
40
  report "#### signed 0";
41
  s := to_signed('0', s);
42
  if s = to_signed(0, 8)
43
  then
44
    report "passed";
45
  else
46
    report "s = <"  & signed2string(s) & ">,  should be 0";
47
  end if;
48
 
49
  report "#### signed X";
50
  s := to_signed('X', s);
51
  if signed2string(s) = "XXXXXXXX"
52
  then
53
    report "passed";
54
  else
55
    report "s = <"  & signed2string(s) & ">,  should be XXXXXXXX";
56
  end if;
57
 
58
 
59
  report "#### signed -1";
60
  s := to_signed('1', s);
61
  if  s = to_signed(-1, 8)
62
  then
63
    report "passed";
64
  else
65
    report "failed:  s 0 <" & signed2string(s) & ">, should be -1";
66
  end if;
67
 
68
 
69
  report "#### unsigned 0";
70
  u := to_unsigned('0', u);
71
  if  u = to_unsigned(0, 8)
72
  then
73
    report "passed";
74
  else
75
    report "failed:  <" & unsigned2string(u) & ">, should be 0";
76
  end if;
77
 
78
 
79
  report "#### unsigned X";
80
  u := to_unsigned('X', u);
81
  v := unsigned2string(u);
82
  if v = "XXXXXXXX"
83
  then
84
    report "passed";
85
  else
86
    report "u = <"  & unsigned2string(u) & ">,  should be XXXXXXXX";
87
  end if;
88
 
89
 
90
  report "#### unsigned 1";
91
  u := to_unsigned('1', u);
92
  if u = to_unsigned(255, 8)
93
  then
94
    report "passed";
95
  else
96
    report  "<" & unsigned2string(u) & ">, should be 11111111";
97
  end if;
98
 
99
end procedure check_to_un_signed;
100
 
101
 
102
--------------------------------------------------------------------------------
103
 
104
procedure check_real2unsigned is
105
  variable u: unsigned (7 downto 0);
106
begin
107
  report "check_real2unsigned()";
108
 
109
  u := real2unsigned(0.0, u);
110
  assert to_integer(u) = 0;
111
 
112
  u := real2unsigned(255.0, u);
113
  assert to_integer(u) = 255;
114
 
115
  u := real2unsigned(256.0, u); -- must give warning
116
  assert to_integer(u) = 0;
117
 
118
  u := real2unsigned(-5.0, u);  -- must give warning
119
  assert to_integer(u) = 0;
120
end;
121
 
122
 
123
--------------------------------------------------------------------------------
124
procedure check_real2signed is
125
  variable s: signed (7 downto 0);
126
begin
127
  report "check_real2signed()";
128
 
129
  s := real2signed(0.0, s);
130
  assert to_integer(s) = 0;
131
 
132
  s := real2signed(7.0, s);
133
  assert to_integer(s) = 7;
134
 
135
  s := real2signed(127.0, s);
136
  assert to_integer(s) = 127;
137
 
138
  s := real2signed(-127.0, s);
139
  assert to_integer(s) = -127;
140
 
141
  s := real2signed(-128.0, s);  -- still must work
142
  assert to_integer(s) = -128;
143
 
144
  s := real2signed(128.0, s); -- must give warning
145
  assert to_integer(s) = 0;
146
 
147
  s := real2signed(-129.0, s);  -- must give warning
148
  assert to_integer(s) = 0;
149
end;
150
 
151
--------------------------------------------------------------------------------
152
 
153
procedure check_unsigned2real is
154
  variable u: unsigned (7 downto 0);
155
begin
156
  report "check_unsigned2real";
157
 
158
  u := unsigned'("00000000");
159
  assert unsigned2real(u) = 0.0;
160
 
161
  u := unsigned'("00000100");
162
  assert unsigned2real(u) = 4.0;
163
 
164
  u := unsigned'("11111111");
165
  assert unsigned2real(u) = 255.0;
166
 
167
  u := unsigned'("0XXXXXXX");   -- must give warning
168
  assert unsigned2real(u) = 0.0;
169
 
170
  u := unsigned'("X0000000");   -- must give warning
171
  assert unsigned2real(u) = 0.0;
172
 
173
end;
174
 
175
 
176
--------------------------------------------------------------------------------
177
-- checking reals for equality is problematic b/c of precision
178
 
179
procedure check_signed2real is
180
  variable s: signed (7 downto 0);
181
  variable r: real;
182
begin
183
  report "check_signed2real()";
184
 
185
  s := signed'("00000000");
186
  assert signed2real(s) = 0.0;
187
 
188
  s := signed'("00000100");
189
  assert signed2real(s) = 4.0;
190
 
191
  s := signed'("11111011");
192
  r := signed2real(s);
193
  assert  r = -5.0;
194
 
195
  s := signed'("11111111");
196
  r := signed2real(s);
197
  assert r = -1.0;
198
 
199
  s := signed'("0XXXXXXX");   -- must give warning
200
  assert signed2real(s) = 0.0;
201
 
202
  s := signed'("X0000000");   -- must give warning
203
  assert signed2real(s) = 0.0;
204
 
205
end;
206
 
207
--------------------------------------------------------------------------------
208
 
209
procedure check_fract_unsigned2real is
210
  variable u:  unsigned (7 downto 0);
211
  variable u4: unsigned(3 downto 0);
212
  variable r:  real;
213
begin
214
  report "check_frac_unsigned2real()";
215
 
216
  u := unsigned'("00000000");
217
  r := fract_unsigned2real(u);
218
  assert r = 0.0;
219
 
220
  u4 := unsigned'("0111");
221
  r := fract_unsigned2real(u4);
222
  assert r = 1.0/4.0 + 1.0/8.0 + 1.0/16.0;  --  0.4375
223
 
224
  u := unsigned'("10000000");
225
  r := fract_unsigned2real(u);
226
  assert r = 0.5;
227
 
228
  u4 := unsigned'("1111");
229
  r := fract_unsigned2real(u4);
230
  assert r = 1.0/2.0 + 1.0/4.0 + 1.0/8.0 + 1.0/16.0;  -- 0.9375
231
 
232
 
233
 end;
234
 
235
--------------------------------------------------------------------------------
236
 
237
procedure check_fract_signed2real is
238
  variable s:  signed (7 downto 0);
239
  variable s4: signed (3 downto 0);
240
  variable r:  real;
241
begin
242
  report "check_frac_signed2real()";
243
 
244
  s := signed'("00000000");
245
  r := fract_signed2real(s);
246
  assert r = 0.0;
247
 
248
  s4 := signed'("0111");
249
  r := fract_signed2real(s4);
250
  assert r = 1.0/2.0 + 1.0/4.0 + 1.0/8.0;
251
 
252
  s := signed'("10000000");
253
  r := fract_signed2real(s);
254
  assert r = -1.0;
255
 
256
  s4 := signed'("1111");
257
  r := fract_signed2real(s4);
258
  assert r = -0.125;
259
 
260
end;
261
--------------------------------------------------------------------------------
262
procedure check_fract_real2unsigned is
263
  variable u:  unsigned (7 downto 0);
264
  variable u4: unsigned(3 downto 0);
265
  variable r:  real;
266
begin
267
  report "check_frac_real2unsigned()";
268
 
269
  u := fract_real2unsigned(0.0, u);
270
  assert u = unsigned'("00000000");
271
 
272
  u4 := fract_real2unsigned(1.0/4.0 + 1.0/8.0 + 1.0/16.0, u4);  --  0.4375
273
  assert u4 = unsigned'("0111");
274
 
275
  u := fract_real2unsigned(0.5, u);
276
  assert u = unsigned'("10000000");
277
 
278
  u4 := fract_real2unsigned(1.0/2.0 + 1.0/4.0 + 1.0/8.0 + 1.0/16.0, u4);  -- 0.9375
279
  assert u4 = unsigned'("1111");
280
 
281
  u := fract_real2unsigned(1.5, u);   -- must produce a warning
282
 
283
  u := fract_real2unsigned(-0.5, u);  -- must produce a warning
284
 
285
 
286
end;
287
 
288
 
289
--------------------------------------------------------------------------------
290
 
291
procedure check_fract_real2signed is
292
  variable s:  signed (7 downto 0);
293
  variable s4: signed (3 downto 0);
294
  variable r:  real;
295
begin
296
  report "check_frac_real2signed()";
297
 
298
  s := fract_real2signed(0.0, s);
299
  assert s = signed'("00000000");
300
 
301
  s4 := fract_real2signed(1.0/2.0 + 1.0/4.0 + 1.0/8.0, s4);
302
  assert s4 = signed'("0111");
303
 
304
  s := fract_real2signed(-1.0, s);
305
  assert s = signed'("10000000");
306
 
307
  s4 := fract_real2signed(-0.125, s4);
308
  assert s4 = signed'("1111");
309
 
310
  s  := fract_real2signed(-1.5, s);  -- must generate a warning
311
 
312
  s  := fract_real2signed(1.5, s);   -- must generate a warning
313
 
314
end;
315
 
316
 
317
--------------------------------------------------------------------------------
318
 
319
begin
320
 
321
p_c: process is
322
begin
323
  check_to_un_signed;        -- ok
324
  check_real2unsigned;       -- ok
325
  check_real2signed;         -- ok
326
  check_unsigned2real;       -- ok
327
  check_signed2real;         -- ok
328
  check_fract_signed2real;   -- ok
329
  check_fract_unsigned2real; -- ok
330
  check_fract_real2unsigned; -- ok
331
  check_fract_real2signed;   -- ok
332
  wait;  -- for good
333
end process;
334
 
335
end architecture tb;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.