.../비메모리반도체

Verilog HDL(Operators)

JAEHYEOKHO 2024. 7. 25. 02:44

Verilog는 다양한 연산자를 가지고 있어, 임이의 회로에 대하여 다양한 기술을 가능하게 한다.


비트 연산자(Bitwise Operators)

 

비트 연산자는 비트 레벨의 논리 연산을 표현한다.

비트 연산자 동작
~ "bitwise"NOT
& / ~& "bitwise"AND,NAND
| / ~| "bitwise"OR/NOR
^ / ~^ "bitwise"XOR/XNOR

 

비트와이즈 연산자의 사용 예는 다음과 같다. 출력은 4비트의 wire이다.


논리 연산자(Logical Operators)

 

논리 연산자느 연산 결과가 참 또는 거짓 중 하나가 된다.

논리 연산자 동작
&& "logical"AND
|| "logical"OR
! negation

 

논리 연산자는 0이 아닌 수를 1로 취급한다. 다음 코드에서 a&b 연산의 경우 bitwise로 연산하여 결과가 4'b0000이 되겠지만 논리 연산의 경우 결과가 1'b1이 된다. 논리 연산의 결과는 1비트이다.


관계 연산자(Relation Operators)

 

관계 연산자'<', '>', '<=', '>='은 피연산자를 비교하기 위하여 사요한다. unknown 'x'나 high-impedence 'z'를비교할 경우 'x'를 출력한다.


조건 연산자(Ternary Operator)

 

조건 연산자는 '? 첫 번째 항: 두 번째 항'을 사용하며, 그 값이 true이면 첫 번째 항을. false이면 두 번째 항을 결과로 한다. 조건 연산자를 사용하여 4비트 2입력 멀티플렉서를 기술하면 다음과 같다.


결합 연산자(Concatenation / Replication Operators)

 

결합 연산자는 스칼라 또는 벡터를 그룹으로 나타낼 때 유용하다. '{ }'는 비트를 연결(Concatenation)할 때 사용하며,

'{{ }}'는 비트를 복제(Replication)할 때 사용한다.

 

Replication 연산자는 그룹의 비트를 복제하기 위하여 사용된다. 예를 들면 1비트의 값을 3번 복제하여 3개의 비트의 값을 다음과 같이 표현할 수 있다. 신호 b가 세 번 복제되어 out_2의 12비트가 결정된다.

 

Concatenation 연산자는 여러 그룹의 비트를 연결한다. 예를 들면 출력 out_4는 a[1:0]과 c[1:0]을 연결하여 나타내며, 회로 설계 시 유용하게 사용된다.


시프트 연산자(Shift Operators)

 

시프트 연산자는 시프트 연산이 필요하거나 2의 승수를 곱하거나 나눌 때 사용한다. 논리(logical) 시프트 연산은 zero extension에 의해 새로운 비트들이 '0'으로 채워진다. '>>'과 '<<'는 각각 logical right와 logical left shift 연산이다.

 

산술(arithmetic) 시프트 연산은 오른쪽으로 쉬프트 하는 경우 부호 비트인 MSB값을 복제하는 sign-extension을 수행한다. 

'>>>'과 '<<<'는 각각 arithmetic right와 left 시프트 연산이다. arithmetic shift는 signed로 선언된 변수에 한에서 적용된다. 만약 다음 코드의 변수 'a'가 signed로 선언되어 있지 않다면, 출력 out_0는 logical shift 연산 결과와 같이 4'b0001이 된다. 출력 신호가 모두 4비트라면 주석의 하위 4비트만이 연산 결과가 된다.


산술 연산자(Arithmetic Operators)

 

산술 연산자는 우리가 익숙하게 사용하는 '+, -, *, /, %, _'연산을 기술한다.


연산자의 우선순위(Operator Precedence)

 

지금까지 알아본 연산자의 우선순위는 다음과 같다. 우선순위를 암기하는 것보다 괄호를 적절하게 사용하는 것이 좋다.

~ Not                          높음
*, /, % multi, div, mod
+. - add, sub
<<, >> logical shift
<<<, >>> arithmetic shift
<, <=, >, >= comparison
==, != equal, not equal
&, ~& AND, NAND
^, ~^ XOR, XNOR
|, ~| OP, XOR
?: ternary operator       낮음

 

728x90