Bird
Raised Fist0
Verilogprogramming~5 mins

Bitwise operators (AND, OR, XOR, NOT) in Verilog

Choose your learning style10 modes available
Introduction

Bitwise operators help you work with individual bits in numbers. They let you turn bits on or off, compare bits, or flip bits easily.

When you want to check if specific bits in a number are set.
When you need to combine two bit patterns into one.
When you want to flip bits to get the opposite pattern.
When you want to clear or set bits in hardware signals.
When you want to perform fast, low-level data manipulation.
Syntax
Verilog
module BitwiseOperatorsExample;
  reg [3:0] a, b;
  reg [3:0] and_result, or_result, xor_result, not_result;

  initial begin
    a = 4'b1100; // binary 1100
    b = 4'b1010; // binary 1010

    and_result = a & b;  // bitwise AND
    or_result  = a | b;  // bitwise OR
    xor_result = a ^ b;  // bitwise XOR
    not_result = ~a;     // bitwise NOT
  end
endmodule

The operators are: & for AND, | for OR, ^ for XOR, and ~ for NOT.

Bitwise operators work on each bit position independently.

Examples
AND keeps bits set only if both bits are 1.
Verilog
and_result = 4'b1100 & 4'b1010; // Result: 4'b1000
OR sets bits if either bit is 1.
Verilog
or_result = 4'b1100 | 4'b1010; // Result: 4'b1110
XOR sets bits if bits are different.
Verilog
xor_result = 4'b1100 ^ 4'b1010; // Result: 4'b0110
NOT flips all bits.
Verilog
not_result = ~4'b1100; // Result: 4'b0011
Sample Program

This program shows how each bitwise operator works on two 4-bit numbers. It prints the inputs and the results.

Verilog
module BitwiseOperatorsDemo;
  reg [3:0] a, b;
  reg [3:0] and_result, or_result, xor_result, not_result;

  initial begin
    a = 4'b1100; // binary 1100
    b = 4'b1010; // binary 1010

    $display("a = %b", a);
    $display("b = %b", b);

    and_result = a & b;
    or_result = a | b;
    xor_result = a ^ b;
    not_result = ~a;

    $display("AND result (a & b) = %b", and_result);
    $display("OR result (a | b) = %b", or_result);
    $display("XOR result (a ^ b) = %b", xor_result);
    $display("NOT result (~a) = %b", not_result);
  end
endmodule
OutputSuccess
Important Notes

Time complexity is constant because bitwise operations work on fixed-size bits in parallel.

Space complexity is minimal, just storing the bit values.

Common mistake: confusing bitwise operators with logical operators (&&, ||) which work on whole expressions, not bits.

Use bitwise operators when you need to control or check individual bits, not for general true/false logic.

Summary

Bitwise operators let you work with each bit in a number separately.

AND, OR, XOR combine bits in different ways; NOT flips bits.

They are useful for low-level data control and hardware signal manipulation.

Practice

(1/5)
1. Which bitwise operator in Verilog flips each bit of a binary number?
~ is the symbol for which operator?
easy
A. XOR
B. NOT
C. OR
D. AND

Solution

  1. Step 1: Understand the operator symbol

    The symbol ~ in Verilog is used to flip bits, meaning it changes 0 to 1 and 1 to 0.
  2. Step 2: Match symbol to operator name

    This flipping action corresponds to the NOT operator, which inverts each bit.
  3. Final Answer:

    NOT -> Option B
  4. Quick Check:

    ~ = NOT [OK]
Hint: Remember ~ flips bits, so it's NOT operator [OK]
Common Mistakes:
  • Confusing ~ with AND (&)
  • Thinking ~ is OR (|)
  • Mixing ~ with XOR (^)
2. Which of the following is the correct Verilog syntax for bitwise AND of two 4-bit vectors a and b?
easy
A. assign c = a & b;
B. assign c = a && b;
C. assign c = a | b;
D. assign c = a ^ b;

Solution

  1. Step 1: Identify bitwise AND operator

    In Verilog, the bitwise AND operator is &, which works bit by bit on vectors.
  2. Step 2: Check syntax correctness

    The syntax assign c = a & b; correctly assigns the bitwise AND of a and b to c.
  3. Final Answer:

    assign c = a & b; -> Option A
  4. Quick Check:

    & is bitwise AND [OK]
Hint: Use single & for bitwise AND, not && [OK]
Common Mistakes:
  • Using && which is logical AND
  • Confusing & with | (OR)
  • Using ^ which is XOR
3. What is the 4-bit result of the following Verilog expression?
assign result = 4'b1101 ^ 4'b1011;
medium
A. 4'b1000
B. 4'b1110
C. 4'b0110
D. 4'b0010

Solution

  1. Step 1: Understand XOR operation

    XOR (^) compares bits: if bits differ, result is 1; if same, result is 0.
  2. Step 2: Calculate bitwise XOR

    Bits: 1101 ^ 1011
    1 ^ 1 = 0
    1 ^ 0 = 1
    0 ^ 1 = 1
    1 ^ 1 = 0
    Result = 0110
  3. Final Answer:

    4'b0110 -> Option C
  4. Quick Check:

    1101 ^ 1011 = 0110 [OK]
Hint: XOR gives 1 only if bits differ [OK]
Common Mistakes:
  • Mixing XOR with OR or AND results
  • Calculating bits incorrectly
  • Confusing bit order
4. Identify the error in this Verilog code snippet:
assign out = a |& b;

where a and b are 4-bit vectors.
medium
A. Should use logical OR || instead
B. Missing semicolon at the end
C. Vectors a and b must be single bits
D. Operator |& is invalid for bitwise operations

Solution

  1. Step 1: Check operator validity

    The operator |& is not a valid bitwise operator in Verilog; it is a reduction operator but used incorrectly here.
  2. Step 2: Understand correct bitwise OR usage

    For bitwise OR between vectors, use | alone, like a | b.
  3. Final Answer:

    Operator |& is invalid for bitwise operations -> Option D
  4. Quick Check:

    |& is invalid here [OK]
Hint: Use single | for bitwise OR, not |& [OK]
Common Mistakes:
  • Confusing reduction and bitwise operators
  • Forgetting semicolon (though present here)
  • Using logical OR || instead of bitwise |
5. Given two 4-bit vectors a = 4'b1010 and b = 4'b1100, which Verilog expression produces a 4-bit vector where bits are set to 1 only if the corresponding bits in a and b differ?
hard
A. assign c = a ^ b;
B. assign c = a & b;
C. assign c = a | b;
D. assign c = ~a;

Solution

  1. Step 1: Understand the requirement

    We want bits set to 1 only where a and b differ.
  2. Step 2: Identify operator for differing bits

    The XOR operator (^) sets bits to 1 where bits differ and 0 where they are the same.
  3. Step 3: Apply XOR to given vectors

    For a = 1010 and b = 1100, a ^ b = 0110, which matches the requirement.
  4. Final Answer:

    assign c = a ^ b; -> Option A
  5. Quick Check:

    XOR gives 1 for differing bits [OK]
Hint: Use XOR (^) to find differing bits [OK]
Common Mistakes:
  • Using AND (&) which gives common bits
  • Using OR (|) which sets bits if either is 1
  • Using NOT (~) which flips all bits
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard