|HOME |ABOUT |ARTICLES |ACK |FEEDBACK |TOC |LINKS |BLOG |JOBS |


Tutorials



OPERATORS PART 2

Logical :



# ! logical negation
# && logical and
# || logical or



EXAMPLE : Logical
program main {
reg a_1,a_0,a_x,a_z;
reg b_1,b_0,b_x,b_z;
a_1 = 'b1;a_0 = 'b0;a_x = 'bx;a_z = 'bz;
b_1 = 'b1;b_0 = 'b0;b_x = 'bx;b_z = 'bz;
printf("--------------------------\n");
printf (" && 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 && b_0,a_0 && b_1,a_0 && b_x,a_0 && b_z);
printf (" 1 %b %b %b %b \n",a_1 && b_0,a_1 && b_1,a_1 && b_x,a_1 && b_z);
printf (" x %b %b %b %b \n",a_x && b_0,a_x && b_1,a_x && b_x,a_x && b_z);
printf (" z %b %b %b %b \n",a_z && b_0,a_z && b_1,a_z && b_x,a_z && b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" || 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 || b_0,a_0 || b_1,a_0 || b_x,a_0 || b_z);
printf (" 1 %b %b %b %b \n",a_1 || b_0,a_1 || b_1,a_1 || b_x,a_1 || b_z);
printf (" x %b %b %b %b \n",a_x || b_0,a_x || b_1,a_x || b_x,a_x || b_z);
printf (" z %b %b %b %b \n",a_z || b_0,a_z || b_1,a_z || b_x,a_z || b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" ! 0 1 x z \n");
printf("--------------------------\n");
printf (" %b %b %b %b \n",!b_0,!b_1,!b_x,!b_z);
printf("--------------------------\n");
}
RESULTS

--------------------------
&& 0 1 x z
--------------------------
0 0 0 0 0
1 0 1 0 1
x 0 0 0 0
z 0 1 0 1
--------------------------
--------------------------
|| 0 1 x z
--------------------------
0 0 1 0 1
1 1 1 1 1
x 0 1 0 1
z 1 1 1 1
--------------------------
--------------------------
! 0 1 x z
--------------------------
1 0 x x
--------------------------


Bitwise :



# ~ bitwise negation (unary)
# & bitwise and (binary)
# &~ bitwise nand (binary)
# | bitwise or (binary)
# |~ bitwise nor (binary)
# ^ bitwise exclusive or (binary)
# ^~ bitwise exclusive nor (binary)



EXAMPLE : Bitwise
program main {
reg a_1,a_0,a_x,a_z;
reg b_1,b_0,b_x,b_z;
a_1 = 'b1;a_0 = 'b0;a_x = 'bx;a_z = 'bz;
b_1 = 'b1;b_0 = 'b0;b_x = 'bx;b_z = 'bz;

printf("--------------------------\n");
printf (" ~ 0 1 x z \n");
printf("--------------------------\n");
printf (" %b %b %b %b \n",~b_0,~b_1,~b_x,~b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" & 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 & b_0,a_0 & b_1,a_0 & b_x,a_0 & b_z);
printf (" 1 %b %b %b %b \n",a_1 & b_0,a_1 & b_1,a_1 & b_x,a_1 & b_z);
printf (" x %b %b %b %b \n",a_x & b_0,a_x & b_1,a_x & b_x,a_x & b_z);
printf (" z %b %b %b %b \n",a_z & b_0,a_z & b_1,a_z & b_x,a_z & b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" &~ 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 &~ b_0,a_0 &~ b_1,a_0 &~ b_x,a_0 &~ b_z);
printf (" 1 %b %b %b %b \n",a_1 &~ b_0,a_1 &~ b_1,a_1 &~ b_x,a_1 &~ b_z);
printf (" x %b %b %b %b \n",a_x &~ b_0,a_x &~ b_1,a_x &~ b_x,a_x &~ b_z);
printf (" z %b %b %b %b \n",a_z &~ b_0,a_z &~ b_1,a_z &~ b_x,a_z &~ b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" | 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 | b_0,a_0 | b_1,a_0 | b_x,a_0 | b_z);
printf (" 1 %b %b %b %b \n",a_1 | b_0,a_1 | b_1,a_1 | b_x,a_1 | b_z);
printf (" x %b %b %b %b \n",a_x | b_0,a_x | b_1,a_x | b_x,a_x | b_z);
printf (" z %b %b %b %b \n",a_z | b_0,a_z | b_1,a_z | b_x,a_z | b_z);
printf("--------------------------\n");
printf (" |~ 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 |~ b_0,a_0 |~ b_1,a_0 |~ b_x,a_0 |~ b_z);
printf (" 1 %b %b %b %b \n",a_1 |~ b_0,a_1 |~ b_1,a_1 |~ b_x,a_1 |~ b_z);
printf (" x %b %b %b %b \n",a_x |~ b_0,a_x |~ b_1,a_x |~ b_x,a_x |~ b_z);
printf (" z %b %b %b %b \n",a_z |~ b_0,a_z |~ b_1,a_z |~ b_x,a_z |~ b_z);
printf("--------------------------\n");
printf("--------------------------\n");
printf (" ^ 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 ^ b_0,a_0 ^ b_1,a_0 ^ b_x,a_0 ^ b_z);
printf (" 1 %b %b %b %b \n",a_1 ^ b_0,a_1 ^ b_1,a_1 ^ b_x,a_1 ^ b_z);
printf (" x %b %b %b %b \n",a_x ^ b_0,a_x ^ b_1,a_x ^ b_x,a_x ^ b_z);
printf (" z %b %b %b %b \n",a_z ^ b_0,a_z ^ b_1,a_z ^ b_x,a_z ^ b_z);
printf("--------------------------\n");
printf (" ^~ 0 1 x z \n");
printf("--------------------------\n");
printf (" 0 %b %b %b %b \n",a_0 ^~ b_0,a_0 ^~ b_1,a_0 ^~ b_x,a_0 ^~ b_z);
printf (" 1 %b %b %b %b \n",a_1 ^~ b_0,a_1 ^~ b_1,a_1 ^~ b_x,a_1 ^~ b_z);
printf (" x %b %b %b %b \n",a_x ^~ b_0,a_x ^~ b_1,a_x ^~ b_x,a_x ^~ b_z);
printf (" z %b %b %b %b \n",a_z ^~ b_0,a_z ^~ b_1,a_z ^~ b_x,a_z ^~ b_z);
printf("--------------------------\n");
}
RESULTS

--------------------------
~ 0 1 x z
--------------------------
1 0 x x
--------------------------
--------------------------
& 0 1 x z
--------------------------
0 0 0 0 0
1 0 1 x x
x 0 x x x
z 0 x x x
--------------------------
--------------------------
&~ 0 1 x z
--------------------------
0 1 1 1 1
1 1 0 x x
x 1 x x x
z 1 x x x
--------------------------
--------------------------
| 0 1 x z
--------------------------
0 0 1 x x
1 1 1 1 1
x x 1 x x
z x 1 x x
--------------------------
|~ 0 1 x z
--------------------------
0 1 0 x x
1 0 0 0 0
x x 0 x x
z x 0 x x
--------------------------
--------------------------
^ 0 1 x z
--------------------------
0 0 1 x x
1 1 0 x x
x x x x x
z x x x x
--------------------------
^~ 0 1 x z
--------------------------
0 1 0 x x
1 0 1 x x
x x x x x
z x x x x
--------------------------


Reduction :



# & unary and
# ~& unary nand
# | unary or
# ~| unary nor
# ^ unary exclusive or
# ~^ unary exclusive nor


EXAMPLE : Reduction
program main {
reg [3:0] a_1,a_0,a_01xz,a_1xz,a_0xz,a_0dd1,a_even1;
a_1 = 4'b1111 ;
a_0 = 4'b0000 ;
a_01xz = 4'b01xz ;
a_1xz = 4'b11xz ;
a_0xz = 4'b00xz ;
a_0dd1 = 4'b1110 ;
a_even1 = 4'b1100 ;

printf("-------------------------------------------\n");
printf(" a_1 a_0 a_01xz a_1xz a_0xz \n");
printf("-------------------------------------------\n");
printf("& %b %b %b %b %b \n",&a_1,&a_0,&a_01xz,&a_1xz,&a_0xz);
printf("| %b %b %b %b %b \n",|a_1,|a_0,|a_01xz,|a_1xz,|a_0xz);
printf("~& %b %b %b %b %b \n",~&a_1,~&a_0,~&a_01xz,~&a_1xz,~&a_0xz);
printf("~| %b %b %b %b %b \n",~|a_1,~|a_0,~|a_01xz,~|a_1xz,~|a_0xz);
printf("-------------------------------------------\n");
printf(" a_ood1 a_even1 a_1xz\n");
printf("-------------------------------------------\n");
printf(" ^ %b %b %b \n",^a_0dd1,^a_even1,^a_1xz);
printf(" ~^ %b %b %b \n",~^a_0dd1,~^a_even1,~^a_1xz);
printf("-------------------------------------------\n");

}
RESULTS

-------------------------------------------
a_1 a_0 a_01xz a_1xz a_0xz
-------------------------------------------
& 1 0 0 x 0
| 1 0 1 1 x
~& 0 1 1 x 1
~| 0 1 0 0 x
-------------------------------------------
a_ood1 a_even1 a_1xz
-------------------------------------------
^ 1 0 x
~^ 0 1 x
-------------------------------------------


Index
Introduction
Data Types
Linked List
Operators Part 1
Operators Part 2
Operators Part 3
Operator Precedence
Control Statements
Procedures And Methods
Interprocess
Fork Join
Shadow Variables
Fork Join Control
Wait Var
Event Sync
Event Trigger
Semaphore
Regions
Mailbox
Timeouts
Oop
Casting
Randomization
Randomization Methods
Constraint Block
Constraint Expression
Variable Ordaring
Aop
Predefined Methods
String Methods
Queue Methods
Dut Communication
Functional Coverage

Report a Bug or Comment on This section - Your input is what keeps Testbench.in improving with time!





<< PREVIOUS PAGE

TOP

NEXT PAGE >>

copyright © 2007-2017 :: all rights reserved www.testbench.in::Disclaimer