비트 연산자
Coddy Verilog 여정의 기초 섹션에 포함된 레슨 — 90개 중 23번째.
비트 연산자(Bitwise operators)는 숫자의 각 개별 비트에 대해 연산을 수행합니다. 숫자를 하나의 전체 값으로 취급하는 산술 연산자(+, -, *, /)와 달리, 비트 연산자는 비트 단위로 작동합니다.
사용 가능한 비트 연산자
| 연산자 | 연산 | 동작 방식 |
|---|---|---|
& | AND | 두 입력 비트가 모두 1인 경우에만 출력 비트가 1이 됨 |
| | OR | 입력 비트 중 적어도 하나가 1이면 출력 비트가 1이 됨 |
^ | XOR | 입력 비트가 서로 다른 경우 출력 비트가 1이 됨 |
~ | NOT | 모든 비트를 반전시킴 (0은 1이 되고, 1은 0이 됨) |
비트 연산자를 사용할 때 Verilog는 내부적으로 숫자를 binary로 처리합니다.
reg [3:0] a, b;
a = 4'd10; // Decimal 10 = binary 1010
b = 4'd12; // 십진수 12 = 이진수 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챌린지
주어진 값에 대한 비트 연산 결과를 계산하세요.
해야 할 작업:
a & b를 계산하여and_res에 저장하세요a | b를 계산하여or_res에 저장하세요a ^ b를 계산하여xor_res에 저장하세요~a를 계산하여not_res에 저장하세요
직접 해보기
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이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.