Operators and Expressions
Arithmetic Operators
SystemVerilog supports basic arithmetic operators, including addition (+), subtraction (-), multiplication (*), division (/), and modulus (%). The modulus operator gives the remainder of a division operation.
Example:
module MyModule;
integer a = 10;
integer b = 20;
integer c = a + b; // c is 30
integer d = a * b; // d is 200
integer e = a % b; // e is 10, because 10 divided by 20 gives a remainder of 10
// Module contents go here
endmoduleBitwise Operators
Bitwise operators perform operations on the binary representations of values. They include bitwise AND (&), OR (|), XOR (^), NOR (|), XNOR (^ or ^), NOT (), and binary shifts (<< and >>).
Example:
module MyModule;
logic [7:0] a = 8'b10101010;
logic [7:0] b = 8'b01010101;
logic [7:0] c = a & b; // c is 8'b00000000
logic [7:0] d = a | b; // d is 8'b11111111
logic [7:0] e = a ^ b; // e is 8'b11111111
logic [7:0] f = ~a; // f is 8'b01010101
logic [7:0] g = a << 2;// g is 8'b10101000
logic [7:0] h = b >> 1;// h is 8'b00101010
// Module contents go here
endmoduleLogical Operators
Logical operators are used for Boolean algebra and include logical AND (&&), OR (||), and NOT (!).
Example:
module MyModule;
logic a = 1'b1;
logic b = 1'b0;
logic c = a && b; // c is 1'b0
logic d = a || b; // d is 1'b1
// Module contents go here
endmoduleRelational and Equality Operators
Relational operators are used to compare values and include greater than (>), less than (<), greater than or equal to (>=), and less than or equal to (<=). Equality operators are used to check the equality or inequality of values and include equality (==), inequality (!=), case equality (===), and case inequality (!==).
The equality operators (== and !=) are used for logical comparison, meaning that X and Z values are treated as unknowns and may cause the result to be X (unknown). On the other hand, the case equality operators (=== and !==) are used for bitwise comparison, meaning that X and Z values are treated as valid values.
Example:
module MyModule;
integer a = 10;
integer b = 20;
logic c = a == b; // c is 1'b0
logic d = a < b; // d is 1'b1
logic [7:0] x = 8'b1001_XXXX;
logic [7:0] y = 8'b1001_0000;
logic e = (x == y); // e is 1'bX (unknown), because == can't handle 'X'
logic f = (x === y); // f is 1'b0 (false), because === treats 'X' as a valid value
// Module contents go here
endmoduleI hope this more comprehensive exploration of operators helps clarify their usage in SystemVerilog. In the next tutorial, we'll delve into control flow constructs. As always, remember that this is a simplified explanation for beginners, and real-world usage might involve more complex expressions and combinations of these operators.
Have a Question?
Feel free to ask your question in the comments below.
Please Login to ask a question.
Login Now