Menu
Coddy logo textTech

비트 연산자

Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 23번째.

비트 연산자는 숫자의 각각의 개별 비트에 대해 연산을 수행합니다. 숫자를 전체 값으로 취급하는 산술 연산자(+, -, *, /)와 달리, 비트 연산자는 비트 단위로 작동합니다.

사용 가능한 비트 연산자

연산자연산설명
&AND 입력 비트가 모두 1인 경우에만 출력 비트가 1이 됩니다.
|OR입력 비트 중 적어도 하나가 1이면 출력 비트가 1이 됩니다.
^XOR입력 비트가 서로 다르면 출력 비트가 1이 됩니다.
~NOT모든 비트를 반전시킵니다 (0은 1로, 1은 0으로).

비트 연산자를 사용할 때, Verilog는 내부적으로 숫자를 이진수로 처리합니다.

reg [3:0] a, b;

a = 4'd10;      // 10진수 10 = 2진수 1010
b = 4'd12;      // 10진수 12 = 2진수 1100
c = a & b;      // 이진수를 직접 사용하는 것과 동일하게 작동합니다

숫자를 10진수, 16진수 또는 2진수로 작성할 수 있으며, Verilog는 비트 연산을 위해 이를 2진수로 변환합니다.

비트 연산의 작동 방식

각 연산자는 비트 쌍(또는 NOT의 경우 단일 비트)에 대해 작동합니다:

4비트 숫자를 사용한 예시:

a = 1010  (binary)
b = 1100  (binary)

AND:  a & b = 1000
      (1&1=1, 0&1=0, 1&0=0, 0&0=0)

OR:   a | b = 1110
      (1|1=1, 0|1=1, 1|0=1, 0|0=0)

XOR:  a ^ b = 0110
      (1^1=0, 0^1=1, 1^0=1, 0^0=0)

NOT:  ~a = 0101
      (~1=0, ~0=1, ~1=0, ~0=1)

코드 예제

module bitwise_demo;
  reg [3:0] a, b;
  reg [3:0] and_res, or_res, xor_res, not_res;
  
  initial begin
    a = 4'b1010;
    b = 4'b1100;
    
    and_res = a & b;   // 1010 & 1100 = 1000
    or_res  = a | b;   // 1010 | 1100 = 1110
    xor_res = a ^ b;   // 1010 ^ 1100 = 0110
    not_res = ~a;      // ~1010 = 0101
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("a & b = %b", and_res);
    $display("a | b = %b", or_res);
    $display("a ^ b = %b", xor_res);
    $display("~a    = %b", not_res);
    $finish;
  end
endmodule

출력:

a = 1010
b = 1100
a & b = 1000
a | b = 1110
a ^ b = 0110
~a    = 0101
challenge icon

챌린지

주어진 값에 대한 비트 연산 결과를 계산하세요.

수행할 작업:

  1. a & b를 계산하여 and_res에 저장하세요.
  2. a | b를 계산하여 or_res에 저장하세요.
  3. a ^ b를 계산하여 xor_res에 저장하세요.
  4. ~a를 계산하여 not_res에 저장하세요.

치트 시트

비트 연산자는 숫자의 각 개별 비트에 대해 작동합니다:

연산자연산출력 비트가 1이 되는 경우...
&AND 입력 비트가 모두 1일 때
|OR최소 하나의 입력 비트가 1일 때
^XOR입력 비트가 서로 다를
~NOT모든 비트를 반전시킴 (단항)
// a = 1010, b = 1100
a & b = 1000   // AND
a | b = 1110   // OR
a ^ b = 0110   // XOR
~a    = 0101   // NOT

직접 해보기

module bitwise_challenge;
  reg [3:0] a, b;
  reg [3:0] and_res, or_res, xor_res, not_res;
  
  initial begin
    a = 4'b1101;
    b = 4'b1011;
    
    and_res = ______;   // a & b
    or_res  = ______;   // a | b
    xor_res = ______;   // a ^ b
    not_res = ______;   // ~a
    
    $display("a = %b", a);
    $display("b = %b", b);
    $display("a & b = %b", and_res);
    $display("a | b = %b", or_res);
    $display("a ^ b = %b", xor_res);
    $display("~a    = %b", not_res);
    $finish;
  end
endmodule
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

기초의 모든 레슨