std_ulogic_datatype.cpp revision 12855:588919e0e4aa
1/*****************************************************************************
2
3  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
4  more contributor license agreements.  See the NOTICE file distributed
5  with this work for additional information regarding copyright ownership.
6  Accellera licenses this file to you under the Apache License, Version 2.0
7  (the "License"); you may not use this file except in compliance with the
8  License.  You may obtain a copy of the License at
9
10    http://www.apache.org/licenses/LICENSE-2.0
11
12  Unless required by applicable law or agreed to in writing, software
13  distributed under the License is distributed on an "AS IS" BASIS,
14  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
15  implied.  See the License for the specific language governing
16  permissions and limitations under the License.
17
18 *****************************************************************************/
19
20/*****************************************************************************
21
22  std_ulogic_datatype.cpp --
23
24  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
25
26 *****************************************************************************/
27
28/*****************************************************************************
29
30  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
31  changes you are making here.
32
33      Name, Affiliation, Date:
34  Description of Modification:
35
36 *****************************************************************************/
37
38/* Main file for "std_ulogic" data type */
39
40#include "systemc.h"
41
42typedef sc_logic std_ulogic;
43
44int sc_main(int ac, char *av[])
45{
46
47// 1. DECLARATION SYNTAX
48  std_ulogic	s1;
49  std_ulogic    s2, s3, s4, s5, s6, s7, s8, s9, s10, s11;
50
51
52// 2. TYPE CONVERSION
53
54  // std_ulogic <- std_ulogic
55  s1  = 'U';
56  s2  = 'X';
57  s3  = '0';
58  s4  = '1';
59  s5  = 'Z';
60  s6  = 'W';
61  s7  = 'L';
62  s8  = 'H';
63  s9  = '-';
64  s10 = true;
65  s11 = false;
66
67  cout 	<< "\nstd_ulogic \t<=\t\t std_ulogic"
68	<< "\n-------------------------------------------"
69       	<< "\nUNINITIALIZED \t= " << s1  << "\t\t 'U'"
70	<< "\nUNKNOWN \t= "       << s2  << "\t\t 'X'"
71       	<< "\nZERO \t\t= "        << s3  << "\t\t '0'"
72	<< "\nONE \t\t= "         << s4  << "\t\t '1'"
73	<< "\nTRISTATE \t= "      << s5  << "\t\t 'Z'"
74       	<< "\nWEAK-UNKNOWN \t= "  << s6  << "\t\t 'W'"
75	<< "\nWEAK-ZERO \t= "     << s7  << "\t\t 'L'"
76	<< "\nWEAK-ONE \t= "      << s8  << "\t\t 'H'"
77	<< "\nDONT-CARE \t= "     << s9  << "\t\t '-'"
78	<< "\nTRUE \t\t= "        << s10 << "\t\t true"
79	<< "\nFALSE \t\t= "       << s11 << "\t\t false"
80       	<< "\n" << endl;
81
82  // std_ulogic <- literals
83  std_ulogic 	a, b, c, d;
84
85  a = true;
86  b = false;
87  c = 1;
88  d = 0;
89
90  cout  << "std_ulogic   <=\t literals"
91        << "\n-------------------------"
92        << "\nA = " << a << "\t\t true"
93        << "\nB = " << b << "\t\t false"
94        << "\nC = " << c << "\t\t 1"
95        << "\nD = " << d << "\t\t 0"
96        << "\n" << endl;
97
98  // std_ulogic <- bool
99  std_ulogic    su1, su2, su3, su4;
100  bool		b1, b2, b3, b4;
101
102  b1  = true;
103  b2  = false;
104  b3  = 1;
105  b4  = 0;
106
107  su1 = b1;
108  su2 = b2;
109  su3 = b3;
110  su4 = b4;
111
112  cout  << "std_ulogic  <=\t bool"
113        << "\n---------------------"
114        << "\nTRUE \t= "  << su1 << "\t " << b1
115        << "\nFALSE \t= " << su2 << "\t " << b2
116        << "\n1 \t= " 	  << su3 << "\t " << b3
117        << "\n0 \t= " 	  << su4 << "\t " << b4
118        << "\n" << endl;
119
120  // std_ulogic <- char
121  std_ulogic	sc1, sc2, sc3, sc4, sc5, sc6, sc7, sc8, sc9;
122  std_ulogic	sc10, sc11, sc12, sc13, sc14, sc15, sc16, sc17, sc18, sc19;
123  char		c1, c2, c3, c4, c5, c6, c7, c8, c9;
124  char		c10, c11, c12, c13, c14, c15, c16, c17, c18, c19;
125
126  c1  = 'U';
127  c2  = 'u';
128  c3  = 'X';
129  c4  = 'x';
130  c5  = '0';
131  c6  = '1';
132  c7  = 'Z';
133  c8  = 'z';
134  c9  = 'W';
135  c10 = 'w';
136  c11 = 'L';
137  c12 = 'l';
138  c13 = 'H';
139  c14 = 'h';
140  c15 = '-';
141  c16 = 'D';
142  c17 = 'd';
143  c18 = 'B';
144  c19 = 'F';
145
146  sc1  = c1;
147  sc2  = c2;
148  sc3  = c3;
149  sc4  = c4;
150  sc5  = c5;
151  sc6  = c6;
152  sc7  = c7;
153  sc8  = c8;
154  sc9  = c9;
155  sc10 = c10;
156  sc11 = c11;
157  sc12 = c12;
158  sc13 = c13;
159  sc14 = c14;
160  sc15 = c15;
161  sc16 = c16;
162  sc17 = c17;
163  sc18 = c18;
164  sc19 = c19;
165
166  cout  << "std_ulogic  <=\t char"
167        << "\n---------------------"
168        << "\nSC1 \t= "  << sc1  << "\t '" << c1  << "'"
169        << "\nSC2 \t= "  << sc2  << "\t '" << c2  << "'"
170        << "\nSC3 \t= "  << sc3  << "\t '" << c3  << "'"
171        << "\nSC4 \t= "  << sc4  << "\t '" << c4  << "'"
172        << "\nSC5 \t= "  << sc5  << "\t '" << c5  << "'"
173        << "\nSC6 \t= "  << sc6  << "\t '" << c6  << "'"
174        << "\nSC7 \t= "  << sc7  << "\t '" << c7  << "'"
175        << "\nSC8 \t= "  << sc8  << "\t '" << c8  << "'"
176        << "\nSC9 \t= "  << sc9  << "\t '" << c9  << "'"
177        << "\nSC10 \t= " << sc10 << "\t '" << c10 << "'"
178        << "\nSC11 \t= " << sc11 << "\t '" << c11 << "'"
179        << "\nSC12 \t= " << sc12 << "\t '" << c12 << "'"
180        << "\nSC13 \t= " << sc13 << "\t '" << c13 << "'"
181        << "\nSC14 \t= " << sc14 << "\t '" << c14 << "'"
182        << "\nSC15 \t= " << sc15 << "\t '" << c15 << "'"
183        << "\nSC16 \t= " << sc16 << "\t '" << c16 << "'"
184        << "\nSC17 \t= " << sc17 << "\t '" << c17 << "'"
185        << "\nSC18 \t= " << sc18 << "\t '" << c18 << "'"
186        << "\nSC19 \t= " << sc19 << "\t '" << c19 << "'"
187        << "\n" << endl;
188
189
190// 3. OPERATORS
191//    Supported operators:	~ & ^ | &= ^= |= == != =
192
193#define VAL1	'1'
194#define VAL2	'1'
195
196  std_ulogic 	op1 = sc_logic(VAL1);
197  std_ulogic  	op2 = sc_logic(VAL2);
198  std_ulogic 	r1, r2, r3, r4, r5, r6, r7, r8, r9;
199  std_ulogic 	r10, r11, r12, r13, r14, r15, r16, r17, r18, r19;
200  std_ulogic 	r20, r21, r22, r23, r24, r25, r26, r27, r28, r29;
201  std_ulogic 	r30, r31, r32, r33, r34, r35;
202
203//  r1 = op1 * op2;			// Multiplication
204
205//  r2 = op1 / op2;			// Division
206
207//  r3 = op1 % op2;			// Modulus
208
209//  r4 = op1 + op2;			// Addition
210
211//  r5 = op1 - op2;			// Subtraction
212
213//  r6 = !op1;				// Logical NOT
214
215//  r7 = op1 && op2;			// Logical AND
216
217//  r8 = op1 || op2;			// Logical OR
218
219//  r9 = op1 < op2;			// Less than
220
221//  r10 = op1 <= op2;			// Less than or equal
222
223//  r11 = op1 > op2;			// Greater than
224
225//  r12 = op1 >= op2;			// Greater than or equal
226
227//  r13 = op1 += op2;			// Compound addition
228//    op1 = VAL1; op2 = VAL2;
229
230//  r14 = op1 -= op2;			// Compound subtraction
231//    op1 = VAL1; op2 = VAL2;
232
233//  r15 = op1 *= op2;			// Compound multiplication
234//    op1 = VAL1; op2 = VAL2;
235
236//  r16 = op1 /= op2;			// Compound division
237//    op1 = VAL1; op2 = VAL2;
238
239//  r17 = op1 %= op2;			// Compound modulus
240//    op1 = VAL1; op2 = VAL2;
241
242//  r18 = op1 <<= op2;			// Compound shift left
243//    op1 = VAL1; op2 = VAL2;
244
245//  r19 = op1 >>= op2;			// Compound shift right
246//    op1 = VAL1; op2 = VAL2;
247
248  r20 = op1 &= op2;			// Compound bitwise AND
249    op1 = VAL1; op2 = VAL2;
250
251  r21 = op1 ^= op2;			// Compound bitwise XOR
252    op1 = VAL1; op2 = VAL2;
253
254  r22 = op1 |= op2;			// Compound bitwise OR
255    op1 = VAL1; op2 = VAL2;
256
257//  r23 = op2++;				// Postfix increment
258//    op1 = VAL1; op2 = VAL2;
259
260//  r24 = ++op2;				// Prefix increment
261//    op1 = VAL1; op2 = VAL2;
262
263//  r25 = op2--;				// Postfix decrement
264//    op1 = VAL1; op2 = VAL2;
265
266//  r26 = --op2;				// Prefix decrement
267//    op1 = VAL1; op2 = VAL2;
268
269//  r27 = (op1 > op2) ? true : false;	// Arithmetic if
270//  r28 = (op1 < op2) ? true : false;	// Arithmetic if
271
272//  r29 = op1, r29 = op2;		 	// Comma
273
274  r30 = ~op1;				// Bitwise NOT
275
276//  r31 = op1 << op2;			// Left shift
277//    op1 = VAL1; op2 = VAL2;
278
279//  r32 = op1 >> op2;			// Right shift
280//    op1 = VAL1; op2 = VAL2;
281
282  r33 = op1 & op2;			// Bitwise AND
283
284  r34 = op1 ^ op2;			// Bitwise XOR
285
286  r35 = op1 | op2;			// Bitwise OR
287
288  cout 	<< "op1 \t operator \t op2 \t result  [All operands are std_ulogic]"
289	<< "\n----------------------------------------------------------------"
290// 	<< "\n" << op1 << "\t    * \t\t " << op2 << "\t = " << r1
291// 	<< "\n" << op1 << "\t    / \t\t " << op2 << "\t = " << r2
292// 	<< "\n" << op1 << "\t    % \t\t " << op2 << "\t = " << r3
293// 	<< "\n" << op1 << "\t    + \t\t " << op2 << "\t = " << r4
294// 	<< "\n" << op1 << "\t    - \t\t " << op2 << "\t = " << r5
295//  	<< "\n!(" << op1 << ") \t\t\t\t = " << r6
296//  	<< "\n" << op1 << "\t    && \t\t " << op2 << "\t = " << r7
297//  	<< "\n" << op1 << "\t    || \t\t " << op2 << "\t = " << r8
298//  	<< "\n" << op1 << "\t    < \t\t "  << op2 << "\t = " << r9
299//  	<< "\n" << op1 << "\t    <= \t\t " << op2 << "\t = " << r10
300//  	<< "\n" << op1 << "\t    > \t\t "  << op2 << "\t = " << r11
301//  	<< "\n" << op1 << "\t    >= \t\t " << op2 << "\t = " << r12
302//  	<< "\n" << op1 << "\t    += \t\t " << op2 << "\t = " << r13
303//  	<< "\n" << op1 << "\t    -= \t\t " << op2 << "\t = " << r14
304//  	<< "\n" << op1 << "\t    *= \t\t " << op2 << "\t = " << r15
305//  	<< "\n" << op1 << "\t    /= \t\t " << op2 << "\t = " << r16
306//  	<< "\n" << op1 << "\t    %= \t\t " << op2 << "\t = " << r17
307//  	<< "\n" << op1 << "\t    <<=\t\t " << op2 << "\t = " << r18
308//  	<< "\n" << op1 << "\t    >>=\t\t " << op2 << "\t = " << r19
309  	<< "\n" << op1 << "\t    &= \t\t " << op2 << "\t = " << r20
310  	<< "\n" << op1 << "\t    ^= \t\t " << op2 << "\t = " << r21
311  	<< "\n" << op1 << "\t    |= \t\t " << op2 << "\t = " << r22
312//  	<< "\n" << "\t    ()++ \t " << op2 << "\t = " << r23
313//  	<< "\n" << "\t    ++() \t " << op2 << "\t = " << r24
314//  	<< "\n" << "\t    ()-- \t " << op2 << "\t = " << r25
315//  	<< "\n" << "\t    --() \t " << op2 << "\t = " << r26
316//  	<< "\n" << op1 << "\t    > ?: \t " << op2 << "\t = " << r27
317//  	<< "\n" << op1 << "\t    < ?: \t " << op2 << "\t = " << r28
318//  	<< "\n" << op1 << "\t    , \t\t " << op2 << "\t = " << r29
319  	<< "\n~(" << op1 << ") \t\t\t\t = " << r30
320//  	<< "\n" << op1 << "\t    << \t\t " << op2 << "\t = " << r31
321//  	<< "\n" << op1 << "\t    >> \t\t " << op2 << "\t = " << r32
322  	<< "\n" << op1 << "\t    & \t\t " << op2 << "\t = " << r33
323  	<< "\n" << op1 << "\t    ^ \t\t " << op2 << "\t = " << r34
324  	<< "\n" << op1 << "\t    | \t\t " << op2 << "\t = " << r35
325 	<< endl;
326
327  if (op1 == op2)			// Equality
328   cout << op1 << "\t    == \t\t " << op2 << "\t -> true" << endl;
329  else
330   cout << op1 << "\t    == \t\t " << op2 << "\t -> false" << endl;
331
332  if (op1 != op2)			// Inequality
333   cout << op1 << "\t    != \t\t " << op2 << "\t -> true" << endl;
334  else
335   cout << op1 << "\t    != \t\t " << op2 << "\t -> false" << endl;
336
337  op1 = op2 = 0;			// Assignment operator concatenation
338   cout << op1 << "\t    = \t\t " << op2 << endl;
339
340// 4. OPERATOR DEFINITIONS
341//	& | ^ ~
342  std_ulogic 	v1, v2, v3, v4, v5, v6, v7, v8, v9;
343  std_ulogic	uu, ux, u0, u1, uz, uw, ul, uh, ud;
344  std_ulogic	xu, xx, x0, x1, xz, xw, xl, xh, xd;
345  std_ulogic	_0u, _0x, _00, _01, _0z, _0w, _0l, _0h, _0d;
346  std_ulogic	_1u, _1x, _10, _11, _1z, _1w, _1l, _1h, _1d;
347  std_ulogic	zu, zx, z0, z1, zz, zw, zl, zh, zd;
348  std_ulogic	wu, wx, w0, w1, wz, ww, wl, wh, wd;
349  std_ulogic	lu, lx, l0, l1, lz, lw, ll, lh, ld;
350  std_ulogic	hu, hx, h0, h1, hz, hw, hl, hh, hd;
351  std_ulogic	du, dx, d0, d1, dz, dw, dl, dh, dd;
352
353  v1  = 'U';
354  v2  = 'X';
355  v3  = '0';
356  v4  = '1';
357  v5  = 'Z';
358  v6  = 'W';
359  v7  = 'L';
360  v8  = 'H';
361  v9  = '-';
362
363  uu = v1 & v1;	   ux = v1 & v2;    u0 = v1 & v3;
364  u1 = v1 & v4;	   uz = v1 & v5;    uw = v1 & v6;
365  ul = v1 & v7;	   uh = v1 & v8;    ud = v1 & v9;
366
367  xu = v2 & v1;	   xx = v2 & v2;    x0 = v2 & v3;
368  x1 = v2 & v4;	   xz = v2 & v5;    xw = v2 & v6;
369  xl = v2 & v7;	   xh = v2 & v8;    xd = v2 & v9;
370
371  _0u = v3 & v1;   _0x = v3 & v2;    _00 = v3 & v3;
372  _01 = v3 & v4;   _0z = v3 & v5;    _0w = v3 & v6;
373  _0l = v3 & v7;   _0h = v3 & v8;    _0d = v3 & v9;
374
375  _1u = v4 & v1;   _1x = v4 & v2;    _10 = v4 & v3;
376  _11 = v4 & v4;   _1z = v4 & v5;    _1w = v4 & v6;
377  _1l = v4 & v7;   _1h = v4 & v8;    _1d = v4 & v9;
378
379  zu = v5 & v1;	   zx = v5 & v2;    z0 = v5 & v3;
380  z1 = v5 & v4;	   zz = v5 & v5;    zw = v5 & v6;
381  zl = v5 & v7;	   zh = v5 & v8;    zd = v5 & v9;
382
383  wu = v6 & v1;	   wx = v6 & v2;    w0 = v6 & v3;
384  w1 = v6 & v4;	   wz = v6 & v5;    ww = v6 & v6;
385  wl = v6 & v7;	   wh = v6 & v8;    wd = v6 & v9;
386
387  lu = v7 & v1;	   lx = v7 & v2;    l0 = v7 & v3;
388  l1 = v7 & v4;	   lz = v7 & v5;    lw = v7 & v6;
389  ll = v7 & v7;	   lh = v7 & v8;    ld = v7 & v9;
390
391  hu = v8 & v1;	   hx = v8 & v2;    h0 = v8 & v3;
392  h1 = v8 & v4;	   hz = v8 & v5;    hw = v8 & v6;
393  hl = v8 & v7;	   hh = v8 & v8;    hd = v8 & v9;
394
395  du = v9 & v1;	   dx = v9 & v2;    d0 = v9 & v3;
396  d1 = v9 & v4;	   dz = v9 & v5;    dw = v9 & v6;
397  dl = v9 & v7;	   dh = v9 & v8;    dd = v9 & v9;
398
399  cout	<< "\n+-------------------------+"
400       	<< "\n| AND (&) | X | 0 | 1 | Z |"
401	<< "\n+-------------------------+"
402  	<< "\n|    X    | " << xx << " | " << x0 << " | "
403	   	            << x1 << " | " << xz << " | "
404	<< "\n+-------------------------+"
405  	<< "\n|    0    | " << _0x << " | " << _00 << " | "
406	   	            << _01 << " | " << _0z << " | "
407	<< "\n+-------------------------+"
408  	<< "\n|    1    | " << _1x << " | " << _10 << " | "
409	   	            << _11 << " | " << _1z << " | "
410	<< "\n+-------------------------+"
411  	<< "\n|    Z    | " << zx << " | " << z0 << " | "
412	   	            << z1 << " | " << zz << " | "
413	<< "\n+-------------------------+"
414	<< endl;
415
416  uu = v1 | v1;	   ux = v1 | v2;    u0 = v1 | v3;
417  u1 = v1 | v4;	   uz = v1 | v5;    uw = v1 | v6;
418  ul = v1 | v7;	   uh = v1 | v8;    ud = v1 | v9;
419
420  xu = v2 | v1;	   xx = v2 | v2;    x0 = v2 | v3;
421  x1 = v2 | v4;	   xz = v2 | v5;    xw = v2 | v6;
422  xl = v2 | v7;	   xh = v2 | v8;    xd = v2 | v9;
423
424  _0u = v3 | v1;   _0x = v3 | v2;    _00 = v3 | v3;
425  _01 = v3 | v4;   _0z = v3 | v5;    _0w = v3 | v6;
426  _0l = v3 | v7;   _0h = v3 | v8;    _0d = v3 | v9;
427
428  _1u = v4 | v1;   _1x = v4 | v2;    _10 = v4 | v3;
429  _11 = v4 | v4;   _1z = v4 | v5;    _1w = v4 | v6;
430  _1l = v4 | v7;   _1h = v4 | v8;    _1d = v4 | v9;
431
432  zu = v5 | v1;	   zx = v5 | v2;    z0 = v5 | v3;
433  z1 = v5 | v4;	   zz = v5 | v5;    zw = v5 | v6;
434  zl = v5 | v7;	   zh = v5 | v8;    zd = v5 | v9;
435
436  wu = v6 | v1;	   wx = v6 | v2;    w0 = v6 | v3;
437  w1 = v6 | v4;	   wz = v6 | v5;    ww = v6 | v6;
438  wl = v6 | v7;	   wh = v6 | v8;    wd = v6 | v9;
439
440  lu = v7 | v1;	   lx = v7 | v2;    l0 = v7 | v3;
441  l1 = v7 | v4;	   lz = v7 | v5;    lw = v7 | v6;
442  ll = v7 | v7;	   lh = v7 | v8;    ld = v7 | v9;
443
444  hu = v8 | v1;	   hx = v8 | v2;    h0 = v8 | v3;
445  h1 = v8 | v4;	   hz = v8 | v5;    hw = v8 | v6;
446  hl = v8 | v7;	   hh = v8 | v8;    hd = v8 | v9;
447
448  du = v9 | v1;	   dx = v9 | v2;    d0 = v9 | v3;
449  d1 = v9 | v4;	   dz = v9 | v5;    dw = v9 | v6;
450  dl = v9 | v7;	   dh = v9 | v8;    dd = v9 | v9;
451
452  cout	<< "\n+-------------------------+"
453       	<< "\n| OR  (|) | X | 0 | 1 | Z |"
454	<< "\n+-------------------------+"
455  	<< "\n|    X    | " << xx << " | " << x0 << " | "
456	   	            << x1 << " | " << xz << " | "
457	<< "\n+-------------------------+"
458  	<< "\n|    0    | " << _0x << " | " << _00 << " | "
459	   	            << _01 << " | " << _0z << " | "
460	<< "\n+-------------------------+"
461  	<< "\n|    1    | " << _1x << " | " << _10 << " | "
462	   	            << _11 << " | " << _1z << " | "
463	<< "\n+-------------------------+"
464  	<< "\n|    Z    | " << zx << " | " << z0 << " | "
465	   	            << z1 << " | " << zz << " | "
466	<< "\n+-------------------------+"
467	<< endl;
468
469  uu = v1 ^ v1;	   ux = v1 ^ v2;    u0 = v1 ^ v3;
470  u1 = v1 ^ v4;	   uz = v1 ^ v5;    uw = v1 ^ v6;
471  ul = v1 ^ v7;	   uh = v1 ^ v8;    ud = v1 ^ v9;
472
473  xu = v2 ^ v1;	   xx = v2 ^ v2;    x0 = v2 ^ v3;
474  x1 = v2 ^ v4;	   xz = v2 ^ v5;    xw = v2 ^ v6;
475  xl = v2 ^ v7;	   xh = v2 ^ v8;    xd = v2 ^ v9;
476
477  _0u = v3 ^ v1;   _0x = v3 ^ v2;    _00 = v3 ^ v3;
478  _01 = v3 ^ v4;   _0z = v3 ^ v5;    _0w = v3 ^ v6;
479  _0l = v3 ^ v7;   _0h = v3 ^ v8;    _0d = v3 ^ v9;
480
481  _1u = v4 ^ v1;   _1x = v4 ^ v2;    _10 = v4 ^ v3;
482  _11 = v4 ^ v4;   _1z = v4 ^ v5;    _1w = v4 ^ v6;
483  _1l = v4 ^ v7;   _1h = v4 ^ v8;    _1d = v4 ^ v9;
484
485  zu = v5 ^ v1;	   zx = v5 ^ v2;    z0 = v5 ^ v3;
486  z1 = v5 ^ v4;	   zz = v5 ^ v5;    zw = v5 ^ v6;
487  zl = v5 ^ v7;	   zh = v5 ^ v8;    zd = v5 ^ v9;
488
489  wu = v6 ^ v1;	   wx = v6 ^ v2;    w0 = v6 ^ v3;
490  w1 = v6 ^ v4;	   wz = v6 ^ v5;    ww = v6 ^ v6;
491  wl = v6 ^ v7;	   wh = v6 ^ v8;    wd = v6 ^ v9;
492
493  lu = v7 ^ v1;	   lx = v7 ^ v2;    l0 = v7 ^ v3;
494  l1 = v7 ^ v4;	   lz = v7 ^ v5;    lw = v7 ^ v6;
495  ll = v7 ^ v7;	   lh = v7 ^ v8;    ld = v7 ^ v9;
496
497  hu = v8 ^ v1;	   hx = v8 ^ v2;    h0 = v8 ^ v3;
498  h1 = v8 ^ v4;	   hz = v8 ^ v5;    hw = v8 ^ v6;
499  hl = v8 ^ v7;	   hh = v8 ^ v8;    hd = v8 ^ v9;
500
501  du = v9 ^ v1;	   dx = v9 ^ v2;    d0 = v9 ^ v3;
502  d1 = v9 ^ v4;	   dz = v9 ^ v5;    dw = v9 ^ v6;
503  dl = v9 ^ v7;	   dh = v9 ^ v8;    dd = v9 ^ v9;
504
505  cout	<< "\n+-------------------------+"
506       	<< "\n| XOR (^) | X | 0 | 1 | Z |"
507	<< "\n+-------------------------+"
508  	<< "\n|    X    | " << xx << " | " << x0 << " | "
509	   	            << x1 << " | " << xz << " | "
510	<< "\n+-------------------------+"
511  	<< "\n|    0    | " << _0x << " | " << _00 << " | "
512	   	            << _01 << " | " << _0z << " | "
513	<< "\n+-------------------------+"
514  	<< "\n|    1    | " << _1x << " | " << _10 << " | "
515	   	            << _11 << " | " << _1z << " | "
516	<< "\n+-------------------------+"
517  	<< "\n|    Z    | " << zx << " | " << z0 << " | "
518	   	            << z1 << " | " << zz << " | "
519	<< "\n+-------------------------+"
520	<< endl;
521
522  std_ulogic 	nu, nx, n0, n1, nz, nw, nl, nh, nd;
523
524  nu = ~v1;
525  nx = ~v2;
526  n0 = ~v3;
527  n1 = ~v4;
528  nz = ~v5;
529  nw = ~v6;
530  nl = ~v7;
531  nh = ~v8;
532  nd = ~v9;
533
534  cout	<< "\n+-------------------------+"
535       	<< "\n| NOT (~) | X | 0 | 1 | Z |"
536	<< "\n+-------------------------+"
537  	<< "\n|         | " << nx << " | " << n0 << " | "
538	   	            << n1 << " | " << nz << " | "
539	<< "\n+-------------------------+"
540	<< endl;
541    return 0;
542}
543