C나 C++에 없거나 혹은 일반적인 SW 프로그래밍을 할 때 잘 쓰이지 않는 연산자들 위주로 정리함.
연산자 심볼 | 수행되는 연산 | 피연산자의 개수 |
** | 제곱 승 | 2 |
=== | 케이스 등가 연산자 | 2 |
!== | 케이스 비등가 연산자 | 2 |
^ | 비트단위 xor | 2 |
^~ 또는 ~^ | 비트단위 xnor | 2 |
>> | 오른쪽 자리 이동 | 2 |
<< | 왼쪽 자리 이동 | 2 |
>>> | 수학적 오른쪽 자리 이동 | 2 |
<<< | 수학적 왼쪽 자리 이동 | 2 |
{ } | 결합 | 아무 수 |
{ { } } | 중복 | 아무 수 |
- ** (제곱 승)
D = E ** F; //D = E^F(E의 F승)
- === (케이스 등가 연산자) / !== (케이스 비등가 연산자)
===, !== 연산자는 ==, != 연산자와 다르게 각각의 피연산자들의 비트를 있는 그대로 비교한다.
표로 정리하면 다음과 같다.
a == b | a와 b가 같다. a나 b가 x 또는 z 값을 가지면 결과는 x이다. | 0, 1, x |
a != b | a와 b가 같지 않다. a나 b가 x 또는 z 값을 가지면 결과는 x이다. | 0, 1, x |
a === b | a와 b가 같다. 비트 각각을 비교하므로 비교 대상에 x나 z값도 포함된다. | 0, 1 |
a !== b | a와 b가 같지 않다. 비트 각각을 비교하므로 비교 대상에 x나 z값도 포함된다. | 0, 1 |
- 비트 단위 연산자
부정(~), and(&), or(|), xor(^), xnor(^~, ~^)
- 축소 연산자
축소 연산자는 하나의 피연산자를 갖는다. 피연산자의 각각의 비트에 대해 연산을 수행하며, 한 비트의 결과를 되돌린다.
and(&), nand(~&), or(|), nor(~|), xor(^), xnor(~^, ^~)가 있다.
// X = 4'b1010
&X // 1 & 0 & 1 & 0 의 결과를 리턴
xor, xnor의 축소 연산자는 주로 벡터의 짝수, 홀수 패리티 확인에 사용된다.
- 자리 이동 연산자
>>, << 연산자는 벡터의 비트를 오른쪽, 왼쪽으로 자리이동을 하며 피연산자는 각각 자리 이동을 할 벡터와 자리 이동 숫자이다. 자리이동을 하여 비게 된 비트는 0으로 채워진다.
// X = 4'b1100
Y = X >> 1 // Y = 4'b0110 오른쪽으로 1비트 자리 이동
Y = X << 2 // Y = 4'b0000 왼쪽으로 2비트 자리 이동
>>>, <<< 연산자의 차이점은 이동 시 부호를 고려한다는 것이다.
>> 연산자는 비트를 오른쪽으로 이동시키고 남은 비트를 전부 0으로 채우지만, >>> 연산자의 경우 만일 부호가 있는 수라면 남은 비트를 부호 비트의 수로 채운다.
<<< 연산자는 << 연산자와 마찬가지로 남은 비트를 0로 채운다.
- 결합 연산자 { }
결합 연산자는 피연산자들을 하나로 묶는 역할을 수행한다. 이때 피연산자의 크기는 항상 정해져 있어야 한다.
// A = 1'b1, B = 2'b00, C = 2'b10, D = 3'b110
Y = {B, C} // Y = 4'b0010
Y = {A, B[0], C[1]} // Y = 3'b101
- 중복 연산자 { { } }
중복 연산자는 피연산자들을 결합할 때 반복되는 숫자들을 표현하기 위해 사용된다.
// A = 1'b1, B = 2'b00, C = 2'b10, D = 3'b110
Y = { 4{A} } // Y = 4'b1111
Y = { 4{A}, 2{B}, C } // Y = 10'b1111000010
Reference: Samir Palnitkar - Verilog HDL 2판
'EE > Verilog' 카테고리의 다른 글
[Verilog] 절차적 할당 - 블록킹과 논블록킹 (0) | 2023.01.17 |
---|---|
[Verilog] initial과 always 구문 (0) | 2023.01.16 |
[Verilog] 데이터 플로우 모델링, assign 연속 할당문 (0) | 2023.01.11 |
[Verilog] 게이트 지연 (0) | 2023.01.06 |
[Verilog] 게이트 수준 모델링 (0) | 2023.01.06 |